Deploy from any MCP client.
Use the Shipem MCP server from Claude Desktop, Cursor, or any client that can run a local stdio server.
Setup — Claude Desktop
Add to your config file:
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"shipem": {
"command": "npx",
"args": ["-y", "@shipem/mcp"]
}
}
} No Cloudflare env vars are required for the default Shipem flow. Restart the client, then call shipem_login.
Setup — Cursor
Add to .cursor/mcp.json in your project or ~/.cursor/mcp.json globally:
{
"mcpServers": {
"shipem": {
"command": "npx",
"args": ["-y", "@shipem/mcp"]
}
}
} Setup — Other MCP clients
Any MCP-compatible client works if it can launch a local stdio server with npx -y @shipem/mcp.
First-time login
Say: "Login to Shipem"
shipem_login validates any existing session first. If you are not logged in, it returns a GitHub login URL and polls for up to 60 seconds.
If your client does not complete the login flow automatically, open the returned URL in your browser and retry the deploy or login command.
Example prompts
- "Deploy this project"
- "My build is failing, can you fix it and redeploy?"
- "What's the URL of my app?"
- "Show me the last 10 deploys for this project"
- "Check my env vars and generate an example file"
- "Take down my site"
- "Create a new dashboard app called my-dashboard"
All MCP tools
| Tool | Inputs | Behavior |
|---|---|---|
shipem_login | poll? | Validates an existing session or returns a GitHub login URL and polls for up to 60 seconds. |
shipem_deploy | directory?, skipBuild?, message? | Scans, builds, and deploys the target directory. On build failure it tells the client to use shipem_fix. |
shipem_fix | directory?, errorOutput? | Runs fix heuristics for build failures and reports whether the build passes after the fix attempt. |
shipem_status | directory? | Reads local deployment state and may include API project info when a Shipem session is available. |
shipem_logs | directory?, projectName?, limit? | Returns recent deployment history from the API when logged in, otherwise local history from shipem.json. |
shipem_down | directory?, projectName? | Deletes a deployment and clears local deployment state. |
shipem_env | directory?, action? | Scans referenced env vars and can generate .env.example with action: "generate-example". |
shipem_scan | directory? | Detects framework, build command, output directory, deploy target, env vars, and monorepo info. |
shipem_init | description, framework?, name?, directory? | Scaffolds a new app and falls back to a minimal static project if external scaffolding fails. |
shipem_logout | none | Clears the stored Shipem session and attempts remote logout. |
Resources
shipem://projectreturns local project config, deployment info, and a fresh scan of the current working directory.shipem://deploymentsreturns deployment history and the current live URL from localshipem.json.
Limits and URL behavior
directoryinputs must resolve inside the current working directory, your home directory, or the system temp directory.shipem_logsclampslimitto 1-20 items.- Shipem-managed deploys return the live URL from the Shipem API. Direct Cloudflare deploys return the Cloudflare Pages URL for that project.
Advanced: Direct Cloudflare deploys
If you set these environment variables, shipem_deploy bypasses Shipem-managed deploys and uses Cloudflare Pages directly:
{
"mcpServers": {
"shipem": {
"command": "npx",
"args": ["-y", "@shipem/mcp"],
"env": {
"CLOUDFLARE_API_TOKEN": "your_cf_token",
"CLOUDFLARE_ACCOUNT_ID": "your_account_id"
}
}
}
}