Web MCP server for the TomatoPHP Filament plugin docs and versions
Overview
A public, read-only Model Context Protocol server for the TomatoPHP Filament plugins, running at . It lets AI assistants (Claude, Cursor, VS Code Copilot and any other MCP client) read the README of every tomatophp/* plugin, search across them, and pick the release that matches your Filament and Laravel versions, with the exact composer require line and the panel registration snippet. No account and no API key. The index is rebuilt every hour from GitHub and Packagist, and a GitHub webhook re-syncs a plugin as soon as it is pushed or released. Endpoint: https://mcp.tomatophp.com/mcp (Streamable HTTP). In Claude Desktop you can also add it under Settings, Connectors, Add custom connector. - Which version of tomatophp/filament-users works with Filament 4 and Laravel 12? - Install filament-accounts in this project and register it on the admin panel. - Search the TomatoPHP docs for user impersonation. All tools are read-only and idempotent.
README
TomatoPHP MCP
A public, read-only Model Context Protocol server for the TomatoPHP Filament plugins, running at https://mcp.tomatophp.com/mcp.
It lets AI assistants (Claude, Cursor, VS Code Copilot and any other MCP client) read the README of every tomatophp/* plugin, search across them, and pick the release that matches your Filament and Laravel versions, with the exact composer require line and the panel registration snippet. No account and no API key.
The index is rebuilt every hour from GitHub and Packagist, and a GitHub webhook re-syncs a plugin as soon as it is pushed or released.
Connect
Endpoint: https://mcp.tomatophp.com/mcp (Streamable HTTP).
Claude Code
claude mcp add --transport http tomatophp https://mcp.tomatophp.com/mcp
Claude Code (.mcp.json), Claude Desktop (claude_desktop_config.json) and Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"tomatophp": {
"type": "http",
"url": "https://mcp.tomatophp.com/mcp"
}
}
}
In Claude Desktop you can also add it under Settings, Connectors, Add custom connector.
VS Code (.vscode/mcp.json)
{
"servers": {
"tomatophp": {
"type": "http",
"url": "https://mcp.tomatophp.com/mcp"
}
}
}
Then ask things like:
- Which version of tomatophp/filament-users works with Filament 4 and Laravel 12?
- Install filament-accounts in this project and register it on the admin panel.
- Search the TomatoPHP docs for user impersonation.
Tools
All tools are read-only and idempotent. Package names can be given as tomatophp/filament-users or just filament-users.
| Tool | Arguments | Returns |
|---|---|---|
list-plugins |
query?, filament? |
Every plugin with its latest version, the Filament, Laravel and PHP versions it supports and a one-line description. With filament, only plugins that have a release for that Filament major, plus the install line. |
get-plugin |
package |
Latest version and requirements, every major version line, the composer command, artisan install commands and the ->plugin(...) registration snippet parsed from the README, and links (GitHub, Packagist, demo). |
get-plugin-docs |
package, section? |
The README markdown, or only the section under that heading (with its sub-sections). |
search-docs |
query, limit? |
The best matching README sections across all plugins, with package, heading, link and snippet. |
get-compatible-version |
package, filament, laravel? |
The newest release that supports that Filament (and Laravel) major and the composer require line. |
get-changelog |
package, limit? |
Recent GitHub releases with notes, the latest CHANGELOG.md entries and the recent Packagist versions. |
Resources
tomatophp://ecosystem/overview: every plugin with its latest version and Filament, Laravel and PHP support, as a markdown table.tomatophp://plugins/{package}/readme: the README of one plugin, e.g.tomatophp://plugins/filament-users/readme.
Prompt
install-plugin(package,filament?): step-by-step install and panel registration for a plugin, using the release that matches your Filament version.
How versions are worked out
For every version on Packagist the sync reads the require block:
- Filament:
filament/filament(or anotherfilament/*core package). A plugin that ships4.xfor^4.0and5.xfor^5.0is matched per Filament major. - Laravel:
laravel/frameworkorilluminate/*when the plugin requires it. Most plugins only require Filament, so their Laravel support is inherited from the Filament versions they allow, read fromfilament/supporton Packagist. - PHP: the
phpconstraint.
get-compatible-version returns the newest stable release that matches. When a newer release of the same major line dropped support, the constraint is capped below it (for example >=2.1.0 <2.2.0) instead of ^2.1, so Composer cannot pick the incompatible one.
What gets indexed
Every repository of the tomatophp organisation that is public, not a fork, not archived, and whose composer.json is named tomatophp/* with type library (Laravel applications are skipped). For each one the sync stores the description, topics, stars, default branch, README.md, CHANGELOG.md, the latest GitHub releases, and every Packagist version with its requirements and release date.
Local development
Requires PHP 8.3+ with the sqlite extension.
git clone https://github.com/tomatophp/mcp.git tomatophp-mcp
cd tomatophp-mcp
composer setup
Fill the index. Without a token GitHub allows 60 API requests an hour, which is not enough for the whole organisation, so set GITHUB_TOKEN in .env (a fine-grained token with public read-only access is enough):
php artisan tomatophp:sync # everything
php artisan tomatophp:sync --package=tomatophp/filament-users # one plugin
Serve it and point a client or the MCP inspector at it:
php artisan serve
php artisan mcp:inspector mcp
The home page is plain Blade and CSS, no build step.
Webhook
POST /webhooks/github re-syncs one repository on push (default branch or tags) and release events. It verifies the X-Hub-Signature-256 HMAC with GITHUB_WEBHOOK_SECRET and rejects everything while no secret is set.
Add it once on the organisation (Settings, Webhooks):
- Payload URL:
https://mcp.tomatophp.com/webhooks/github - Content type:
application/json - Secret: the value of
GITHUB_WEBHOOK_SECRET - Events: pushes and releases
Configuration
| Variable | Default | |
|---|---|---|
GITHUB_TOKEN |
empty | GitHub API token for the sync. |
GITHUB_WEBHOOK_SECRET |
empty | Secret of the organisation webhook. |
MCP_PUBLIC_URL |
https://mcp.tomatophp.com/mcp |
Endpoint shown on the home page. |
MCP_RATE_LIMIT |
120 |
Requests per minute per client on /mcp (keyed by CF-Connecting-IP behind Cloudflare). |
Deploy
deploy/deploy.sh updates the app in /var/www/mcp (git reset to origin/master, composer install --no-dev, migrate, sync, optimize, reload php8.4-fpm) and installs the scheduler cron entry on first run. deploy/nginx.conf is the vhost for mcp.tomatophp.com.
Testing
vendor/bin/pest
vendor/bin/pint --test
The tests fake GitHub and Packagist with the fixtures in tests/Fixtures.
License
The MIT License (MIT). See LICENSE.
Install
This server does not publish a one-line install command.
Open the repository installation guide New to MCP? Start with the mcpskill.org guide →Configuration
{
"mcpServers": {
"tomatophp": {
"type": "http",
"url": "https://mcp.tomatophp.com/mcp"
}
}
}