Faable MCP server · 21 tools
Hosted in the EU · GDPR by default

Deploy from your AI agent

The Faable MCP server connects Claude Code, Codex, Cursor and any MCP client to Faable Deploy: see your apps, read why a build failed, check traffic and domains, and ship — without pasting a single log into the chat.

claude mcp add --transport http faable https://mcp.faable.com/mcp \
  --header "Authorization: Bearer <API_KEY>"

Replace <API_KEY> with a key from the dashboard (project settings → API Keys). A key acts only on its own project. By default: every read, plus deploy.

Endpoint https://mcp.faable.com/mcpRead the docs

“Why did my deploy fail?” — answered in the editor

Your agent already has the code open. With the Faable MCP server it also sees the platform: it finds the deployment, reads the full failure reason and the end of the build log, and fixes the cause — no dashboard, no copy-paste.

The same goes for a crash after start (runtime logs), a domain that will not verify (DNS diagnostic), a build waiting on today's quota, or an environment variable the app expects and nobody set.

Why did the last deploy of shop-api fail?
list_deploymentsapp: "shop-api", limit: 1
get_deploymentapp: "shop-api"
get_build_logsapp: "shop-api", tail: 200
The build failed at npm run build: Module not found: Can't resolve 'sharp'. It's imported in lib/images.ts but missing from dependencies. I've added it — push and the next build will pass.

21 tools, written for agents

Every read and one deploy by default. Reversible writes only when the connection asks for them. Nothing destructive, ever — deleting stays in the CLI and the dashboard.

Inspect

Find the app, see what is live, read why it broke.

whoamiread
Who is logged in

The Faable account this server acts as, the active project and its Auth tenant. Use it first when unsure whether the user is logged in or which project is active.

list_projectsread
List projects

The user's Faable projects. Apps, domains and Auth tenants live in a project; pass its id as project to the other tools.

query
list_appsread
List apps

The apps of a project, with their live phase, URL and linked repository. Start here to find the app the user means.

get_appread
Get an app

One app: phase, URL, repository, deploy branch and mode, detected stack, and its newest deployment (which may have failed while an older one keeps serving). Use it to answer 'is my app up?' or 'what is deployed?'.

app
list_deploymentsread
List deployments

Recent deployments of an app, newest first, with phase, commit and the first line of any failure reason. Use it to find the deployment behind 'my last deploy failed'.

applimit
get_deploymentread
Get a deployment

Everything recorded about one deployment: phase, commit, detected stack, the runnable artifact and the FULL failure reason. Without deployment, the newest one of the app.

appdeployment
get_build_logsread
Read build logs

The build output of a deployment — the first thing to read when a deploy failed and the user asks why. The cause is usually at the end. Without deployment, the newest one.

appdeploymenttail
get_runtime_logsread
Read runtime logs

What the running app printed (last 24 hours, up to 200 lines). Use it when the app is up but misbehaving, or crashes after starting. A deployment retired more than a day ago has none — read its build logs instead.

appdeploymenttail
get_app_trafficread
Read app traffic

Requests the app served: status codes, busiest paths and failing paths. Trails reality by up to 15 minutes.

appsincedeployment
get_usageread
Read project usage

This billing period's usage of a project: plan, apps, domains, deployments and egress.

get_quotaread
Read deploy quota

Today's deploy allowance of a project and the builds held waiting for it. Use it when a deploy did not start: a held build is waiting, not failing.

list_domainsread
List custom domains

Custom domains of an app and whether their DNS is verified.

app
check_domainread
Check a domain

DNS diagnostic of one custom domain: the CNAME it expects, what DNS answers today, and why it is not verified yet.

appfqdn
list_secretsread
List secret names

The environment variables set on an app. Names only — values are masked and this tool can never reveal them. Use it to check whether a variable the app needs is set.

app

Ship

Build, retry and stop deployments — server-side, from Git.

deploy_appdeploy
Deploy an app

Build and deploy the latest commit of the app's deploy branch on Faable's servers — the same as a git push. Nothing is uploaded from this machine. Returns the deployment id; follow it with get_deployment and get_build_logs. Only for apps with push-to-deploy.

app
create_appmode=write
Create an app from a repository

Create an app from a GitHub repository in a project, link it and start its first deploy (the dashboard's Create & connect). Needs the Faable GitHub App installed on the repository; if the link fails, the new app is removed and the error says what to fix.

reponamebranchdeploy
redeploymode=write
Retry a failed deployment

Rebuild a failed deployment from the source it recorded. Without deployment, the newest failed one. Refused for code older than what production serves.

appdeployment
cancel_deploymentmode=write
Cancel a build

Stop a deployment that is still queued or building. Production keeps serving what it served. Without deployment, the one in flight.

appdeployment

Configure

Secrets, domains and how an app deploys.

set_secretsmode=write
Set environment variables

Add or update environment variables of an app. The app restarts to apply them when a value changed. Returns the names added, updated and unchanged — never the values.

appvariables
add_domainmode=write
Add a custom domain

Attach a custom domain to an app. Returns the CNAME record the user must create at their DNS provider; Faable verifies it and issues the certificate on its own.

appfqdn
configure_repomode=write
Configure how an app deploys

Change the deploy branch, the monorepo root directory ("" clears it) or the deploy mode (push: every push; ci: once CI tags a release; workflow: the repo's own GitHub workflow). Applies to the next deploy.

appbranchroot_dirmode

Live catalog of @faable/faable 4.5.2 — also as tools.json and llms.txt.

Built for an agent with write access

An agent that can deploy is an agent that can be talked into things. The server is designed around that.

Secret values never reach the agent

list_secrets returns names only. set_secrets sends values straight to Faable and answers with which names changed — never the values.

Logs are data, not instructions

Build output, runtime logs, commit messages and failure reasons are written by whoever deployed the code. They come back explicitly marked as untrusted content.

Nothing destructive, nothing guessed

No tool deletes apps, domains or secrets. Every call names its app and project — the server never deploys “whatever is in this folder”.

One key, one project, revocable

An API key acts only on the project it was created in. Revoke it in the dashboard and it stops working within 30 seconds. Locally, the server uses your own CLI session.

Frequently asked questions

What is the Faable MCP server?

An MCP (Model Context Protocol) server that gives AI agents — Claude Code, Codex, Cursor, VS Code, Gemini CLI and any other MCP client — access to Faable Deploy. The agent can list your apps, read deployments, build and runtime logs, traffic, usage, domains and secret names, and deploy, without you leaving the editor.

Hosted or local: which one should I use?

Hosted (https://mcp.faable.com/mcp) needs nothing installed: any client that speaks Streamable HTTP connects with a Faable API key, which acts only on the project it belongs to. Local runs `npx -y @faable/faable mcp` over stdio on your machine and uses your `faable login` session, so it can reach every project you can — no key to create.

Can the agent delete my apps or read my secrets?

No. No tool deletes anything — apps, domains and secrets are deleted from the CLI or the dashboard. Secret values never reach the agent: it can list the names of environment variables and set new values, but it never reads one back.

Does deploying from the agent upload my local files?

No. deploy_app builds the latest commit of the app's deploy branch on Faable's servers — exactly what a git push does. Nothing is uploaded from your machine, and the server never guesses an app from your working directory.

What can it do with writes enabled?

Add ?mode=write to the hosted URL (or --writes locally) and the agent can also create an app from a GitHub repository, set environment variables, add a custom domain, retry a failed build, cancel a build in flight and change the deploy branch, root directory or deploy mode. All of them are reversible.

Is it safe to let an agent read build logs?

Logs, commit messages and failure reasons are written by whoever deployed the code, so the server returns them explicitly marked as untrusted data, never as instructions. Combined with no destructive tools and writes off by default, a hostile log line has very little to work with.

Let your agent ship it

Create a Faable account, connect a repo, and hand the rest to the agent you already use. Hosted in the EU, free to start, no credit card required.