Pular para o conteúdo

Buscar na documentação

Buscar na documentação da Skiffly

Servidor MCP

Give Claude Code, Cursor, Claude Desktop, Codex or any MCP client the ability to deploy, configure and debug apps on Skiffly — hosted with OAuth, or locally through the CLI.

The Skiffly MCP server exposes 40+ tools over the Model Context Protocol: projects, services, variables, deployments, logs, domains, volumes, backups, billing, a Railway importer and docs search. Tool names mirror the Railway MCP server where the concepts match, so an agent that knows Railway finds its way around.

There are two ways to run it:

Hosted (mcp.skiffly.dev)Local (skiffly mcp)
TransportStreamable HTTPstdio
Sign-inOAuth 2.1 in the browser (or a bearer token)the CLI's skiffly login
Installnothing to installNode.js 20+ and the skiffly CLI
Best forClaude Code, Cursor, Claude Desktop, web clientsoffline docs, CI, clients without remote MCP support

The endpoint is https://mcp.skiffly.dev/mcp. It implements the MCP authorization spec — OAuth 2.1 with PKCE, dynamic client registration and discovery under /.well-known/oauth-authorization-server — so a client that supports remote MCP servers signs you in through the browser. No tokens to copy.

The server is listed in the official MCP Registry as dev.skiffly/mcp and on Smithery.

Plugin for Claude Code, Codex and Cursor#

The Skiffly plugin bundles the hosted server with skills for deploying, debugging failed deploys and migrating apps, so the agent knows the usual workflows without extra prompting.

# Claude Code
/plugin marketplace add skiffly/skiffly-plugin
/plugin install skiffly@skiffly
 
# Codex
codex plugin marketplace add skiffly/skiffly-plugin
codex plugin add skiffly@skiffly

In Cursor, add Skiffly in one click: Cursor asks you to confirm, then shows Login in Settings → MCP.

To connect only the MCP server, without the skills:

claude mcp add --transport http skiffly https://mcp.skiffly.dev/mcp

Then run /mcp inside Claude Code and pick skiffly → Authenticate. The browser opens the Skiffly dashboard; sign in with GitHub if needed, review the permissions and click Allow. Claude Code stores the tokens and refreshes them by itself.

The client asks for read (view projects, services, deployments, logs, variables) and usually write (deploy, change variables and settings, add domains and volumes). Allowing issues a 1-hour access token plus a refresh token that the client rotates on its own; both act as you across all your workspaces. Requests are rate-limited per token by the plan of the workspace, exactly like the GraphQL API.

Revoking access#

Settings → Developer → CLI sessions & connected apps lists every connected MCP client (by its registered name, e.g. Claude Code) and every CLI session. Revoke cuts the access immediately, including the refresh token; the client asks you to connect again next time. Removing the server from the client's config does not revoke anything on the Skiffly side.

Local server (skiffly mcp)#

The CLI embeds the same server and runs it over stdio with the login from skiffly login, so the agent never sees a token:

npm i -g skiffly && skiffly login
claude mcp add skiffly -s user -- skiffly mcp        # or: skiffly mcp install claude

skiffly mcp install claude runs that claude mcp add command for you (user scope).

What to ask#

Deploy this repo to Skiffly and give me the URL.

Add Postgres with a 20 GB volume and wire DATABASE_URL into the api service.

The last deploy of web failed, find out why and fix it.

Import my Railway project "acme-shop" into Skiffly and tell me what I still have to do by hand.

The agent typically calls whoami → list-projects → create-deployment → get-status → get-logs → generate-domain. Destructive tools (delete-*, scaling to zero) are annotated so the model asks first.

Tools by area#

AreaTools
Accountwhoami, list-workspaces, billing-account, topup-create, github-installations, list-nodes
Projectslist-projects, create-project, delete-project, list-environments, create-environment, describe-environment, get-status
Serviceslist-services, create-service, create-deployment, describe-service, get-service-config, update-service, delete-service
Variableslist-variables, set-variables, delete-variables
Deploymentsdeploy, redeploy, restart-service, list-deployments, cancel-deployment, get-logs
Networkinggenerate-domain, list-domains, domain-status, delete-domain
Volumescreate-volume, list-volumes, delete-volume, list-backups, create-backup, restore-backup
Migrationimport_from_railway — copies a Railway project (services, variables, volumes, domains, TCP proxies) into Skiffly, dryRun first; see Migrate from Railway
Docssearch-docs

Arguments and return values for each tool are in the MCP tools reference. skiffly mcp tools prints the same list locally.

Environment (local server)#

VariableMeaning
SKIFFLY_TOKENAPI token (takes precedence over the saved skiffly login; required for npx -y skiffly mcp without a login)
SKIFFLY_PROJECT_TOKENProject token (skiffly_project_…): one environment of one project; used when SKIFFLY_TOKEN is not set
SKIFFLY_API_URLGraphQL endpoint, default https://api.skiffly.dev/graphql

Good practice#

  • Prefer the hosted server with OAuth: tokens never touch prompts, config files or the agent's context.
  • Start a session with whoami: it confirms the token and returns workspace ids.
  • Variable values are secrets: list-variables returns names unless the agent asks for values.
  • Plan limits come back as PLAN_LIMIT errors rather than retries; rate limits as RATE_LIMITED.
  • Revoke clients you no longer use from Settings → Developer.