fleet-mcp
The fleet-mcp server provides a unified interface for managing a hosting fleet, covering SSH, site monitoring, WordPress, Cloudflare, MySQL, GitHub, Docker, Coolify, Plesk, fail2ban, OJS, Moodle, and development tools.
SSH & Server Management
run_ssh— Run arbitrary shell commands on the fleet serverdisk_usage— Check disk usage and largest vhost directories
Site Monitoring
site_status— Check HTTP status, response time, and final URL for a single sitecheck_all_sites— Bulk-check HTTP status for up to 100 URLs in parallelssl_expiry— Get TLS certificate expiry date and days remaining
WordPress (wp-cli)
wp— Run any wp-cli commandwp_update_plugins— Update all plugins (with optional dry-run)wp_purge_lscache— Purge LiteSpeed cachewp_health— Snapshot of core version, plugin count, and PHP versionwp_php_handler— Show Plesk PHP handler for a domainwp_search_replace— Run search/replace in the databasewp_integrity— Check WordPress core file integritywp_core_update— Update WordPress corewp_maintenance— Toggle maintenance modewp_backup— Backup a WordPress site
Cloudflare DNS & CDN
cf_zone_status— Show zone status, plan, and nameserverscf_dns_list— List DNS records (with optional type filter)cf_dns_add— Create a new DNS recordcf_toggle_proxy— Toggle orange-cloud proxy on/off for a recordcf_export_records— Export DNS records as a BIND zone filecf_zone_restore— Restore a zone's DNS recordscf_purge_cache— Purge Cloudflare cache for a zone
MySQL
mysql_query— Run SQL queries (read-only by default; write opt-in)mysql_table_sizes— List tables by size and row countmysql_create_user— Create a MySQL user and grant privilegesmysql_dump— Dump a database to a timestamped gzip backup
GitHub
gh— Run any GitHub CLI commandgh_pr_list— List open (or filtered) pull requestsgh_create_issue— Open a new issue in a repository
Docker
docker_ps— List running (or all) containersdocker_logs— Fetch recent log lines for a containerdocker_restart— Restart a container by name or IDdocker_raw— Run any docker subcommand
Coolify
coolify_servers— List servers connected to Coolifycoolify_apps— List applications managed by Coolifycoolify_deploy— Trigger a deployment (with optional force rebuild)coolify_resources— List all resources (apps, databases, services)
Plesk
plesk_list_domains— List all domainsplesk_domain_info— Get info about a specific domainplesk_create_subdomain— Create a subdomainplesk_set_php_handler— Set the PHP handler for a domainplesk_create_db— Create a databaseplesk_issue_le— Issue a Let's Encrypt certificate
fail2ban
f2b_status— Show jail statusf2b_check_ip— Check if an IP is bannedf2b_unban— Unban an IP addressf2b_ignore_add— Add an IP to the ignore list
OJS (Open Journal Systems)
ojs_install— Full OJS installation (deploy files, create DB, CLI install, patch config, set permissions)ojs_create_journal— Create a journal on an existing OJS installojs_status— Quick health check of an OJS site
Moodle
moodle_cron— Run Moodle cronmoodle_purge_caches— Purge Moodle cachesmoodle_maintenance— Toggle maintenance modemoodle_upgrade— Run Moodle upgrademoodle_cli— Run arbitrary Moodle CLI commands
Developer Tools
dev_check— Auto-detect stack and run build/lint/test (Go or Node/TS)scaffold_nextjs— Create a new Next.js (TypeScript, App Router) projectscaffold_go— Create a new Go modulescaffold_ts_lib— Create a minimal strict-TypeScript library skeletondockerize— Generate a production multi-stage Dockerfile
Resources
fleet://inventory— Live readable list of Plesk domains and available PHP handlers (no tool call needed)
Provides tools to manage Cloudflare DNS records, zone status, and proxy settings.
Provides tools to manage Docker containers, including listing, logs, restarting, and raw commands.
Provides tools to interact with GitHub repositories and pull requests via the gh CLI.
Provides tools to query MySQL databases, manage users, and perform dumps.
Provides tools to manage hosting sites through Plesk integration, including status checks, SSL expiry, and disk usage.
Provides tools to manage WordPress sites via WP-CLI, including plugin updates, cache purging, and health checks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fleet-mcpCheck SSL expiry for journal.example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fleet-mcp
A single MCP server that bundles the tools you use every day to run your hosting fleet — SSH/Plesk, WordPress (wp-cli), Cloudflare, MySQL, GitHub, Docker, and Coolify — so you can drive all of it from Claude with plain language.
Tools
Group | Tools |
SSH |
|
Sites |
|
WordPress |
|
Cloudflare |
|
MySQL |
|
GitHub |
|
Docker |
|
Coolify |
|
OJS |
|
Dev |
|
Plesk |
|
fail2ban |
|
Moodle |
|
Resources: fleet://inventory — a live list of Plesk domains + available PHP
handlers, readable by the model without a tool call.
Tests / CI: npm test runs the node:test suite (pure functions — creds,
config, result helpers, OJS script builders); GitHub Actions runs build + tests
on every push.
Related MCP server: cPanel MCP Server
Setup
cd fleet-mcp
npm install
cp .env.example .env # then fill in your values
npm run buildRequirements on the machine that runs the server:
Node ≥ 18 (uses global
fetch;--env-fileneeds Node ≥ 20.6).ssh with key auth to the fleet server (recommended over passwords).
curl, openssl for the site/SSL tools.
gh CLI for GitHub tools (run
gh auth loginonce, or setGITHUB_TOKEN).docker locally, or set
DOCKER_SSH_TARGETto run it over SSH.
Register with Claude Code
The easiest way to pass all the credentials is Node's --env-file:
claude mcp add fleet-mcp -- \
node --env-file=/absolute/path/to/fleet-mcp/.env \
/absolute/path/to/fleet-mcp/dist/server.jsThen in Claude:
"Check status of example.com, blog.example.com and shop.example.com"
"How many days until the SSL cert for journal.example.com expires?"
"List active plugins on shop.example.com and purge its LiteSpeed cache"
"Show DNS records for example.org on the secondary Cloudflare account"
"Back up the myapp_db database"
Installing an OJS journal
ojs_install runs the proven recipe end-to-end and returns the generated admin
DB credentials. Two modes:
provision: true— full from-scratch: create the Cloudflare A record (gray), create the Plesk subdomain, deploy files, create DB+user, CLI install, patchconfig.inc.php(allowed_hosts/base_url/trust_x_forwarded_for), set perms + PHP handler, issue a Let's Encrypt cert, then flip the record to proxied. NeedsparentDomain+originIp.provision: false(default) — install into an existing webspace (subdomain, docroot and DNS already set up).
"Install an OJS journal from scratch on journal.example.com (parent example.com, origin 203.0.113.10), create the journal too, English name 'New Journal', Arabic 'مجلة جديدة', acronym NJ"
It can optionally create the first journal in the same run (createJournal),
applying the three known CLI gotchas (loadAllPlugins throw, missing default
section, per-context theme enable) so the public frontend works immediately.
ojs_create_journal does just the journal step on an existing install.
Dev tools (TypeScript / Go / Next.js)
dev_check— auto-detects the stack and runs vet/build/test (Go) or install/tsc/lint/build/test (Node/TS).scaffold_nextjs,scaffold_go,scaffold_ts_lib— new project skeletons.dockerize— writes a production multi-stage Dockerfile, ready to build withdocker_*and deploy withcoolify_*.
Running on a domain for your team (remote mode)
The same tools can run as a shared HTTP server behind a domain:
export MCP_AUTH_TOKEN="$(openssl rand -hex 32)" # shared team secret
npm run build && npm run start:http # serves POST /mcp on :8787Or via the included Dockerfile — deploy it on your Coolify host,
put it behind mcp.example.com (Cloudflare proxied, Full), and have each
teammate add it as a remote MCP server with the bearer token:
claude mcp add --transport http fleet-mcp https://mcp.example.com/mcp \
--header "Authorization: Bearer <MCP_AUTH_TOKEN>"Security: HTTP mode refuses to start without MCP_AUTH_TOKEN. Anyone with the
token can run every tool (including run_ssh) — treat it like a root password,
keep the endpoint Cloudflare-proxied, and rotate the token to revoke access.
Configuration
All config is via environment variables — see .env.example. Nothing is required at startup; each tool validates its own settings when first called, so you can enable integrations one at a time.
Safety notes
run_sshandmysql_query(withallowWrite=true) can change server state.mysql_queryis read-only by default and blocks write/DDL statements unless you explicitly opt in.Secrets live only in
.env(git-ignored) — never hardcoded. Prefer SSH key auth and scoped Cloudflare API tokens (not the global key).Some integrations have official MCP servers too (GitHub, Docker). This unified server trades that for one place to manage your whole fleet; swap individual groups out later if you prefer the official ones.
Project layout
src/
createServer.ts # builds + registers every tool group (transport-agnostic)
server.ts # local entry point (stdio)
http.ts # remote entry point (Streamable HTTP + bearer auth)
config.ts # env-based config + lazy require* helpers
lib/
exec.ts # safe local + SSH command execution
result.ts # MCP response helpers + error wrapper
creds.ts # crypto-random passwords + label helpers
cloudflare.ts # CF API client
coolify.ts # Coolify API client
ojs-scripts.ts # OJS install + journal-creation script builders
tools/
ssh.ts sites.ts wordpress.ts cloudflare.ts mysql.ts
github.ts docker.ts coolify.ts ojs.ts dev.tsAdd a tool by extending the relevant tools/*.ts file (or add a new one and call
its register* from server.ts).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/haydary1986/fleet-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server