Menu
Platform
AI
App store purchases
Database
Flags
Jobs and cron
Localization
Monitoring
Notifications
Payments
Queues
Sandboxes
Webhooks
Getting Started
Authentication
KV Store
Deploy & Infrastructure
Reference
Agents and coding assistants
The MCP server, a key for a machine, and a project built end to end from a terminal.
An agent works the same way a person does: one Sylphx key, and the whole API behind it. There is no separate agent account and no reduced API. What differs is how the key is obtained and how the API is reached — a terminal instead of a browser, an MCP tool call instead of a typed command.
The Sylphx Agents product — durable sessions, memory, governed tool access — is Planned; see Sylphx Agents. This page covers the agent interface that exists today.
#Give the agent a key
A person signs in through the browser. A machine takes a key that already exists, from the environment or from standard input:
SYLPHX_API_KEY=sylphx_sk_live_… sylphx access whoamiThe SDK reads SYLPHX_API_KEY with no configuration at all, so a program needs
no change to run under an agent: new Sylphx() picks the key up. A key created
in the console, or minted with
sylphx access api-keys create --spec.label ci --spec.scopes hosting:read,data:read,
works the same way — the secret is shown once, when it is created, and never
again.
Scope the key to an environment
A key is bound to one environment and one mode, so a test key cannot touch a
live environment. Give an agent a key in development and let it add one
for production when you have read what it intends to do there.
#Install the MCP server
The MCP server exposes the same API to any MCP client — Claude Code, an IDE, or your own agent loop. It speaks stdio and holds one key.
npx -y @sylphx/mcp # or: sylphx mcp, or: cargo install sylphx-mcp#What the server gives an agent
Twelve tools, in two kinds. Six lead the common offers, each with its input schema:
- Who is this key
- access_whoami
- Read the plan and its limits
- entitlement_entitlements_get
- Read the account and what it owes
- billing_billing_accounts_get
- Read last month's usage
- billing_usage_reports_query
- Search logs
- observability_log_entries_query
- Search traces
- observability_traces_query
The other three reach everything else without filling the agent's context with several hundred method definitions:
sylphx_search_methodsfinds a method by what it does;sylphx_describe_methodreturns one method's full input schema;sylphx_callcalls any method by its id with wire JSON.
That trio is the point of the design. An agent that wants to attach a custom
domain does not need a network_domains_create tool to exist: it searches,
describes, and calls. Tool annotations come from each method's own effect, so a
read is marked as a read, and a destructive call will not run without an
explicit confirm: true.
#Create a project and its first resources
The whole sequence, from an empty terminal to a project with a database and a
service, with no browser involved. Project, database and Hosting service
creation are served today through the management API, so the agent calls them
with sylphx api; the same calls reach it through the MCP server's
sylphx_call once those collections are on the one API.
Check where the key points
bashsylphx access whoamiA key scoped to an organization can create a project; a key scoped to a project works inside it.
Create the project
bashsylphx api POST /v1/projects -d '{"name":"shop","gitRepository":"acme/shop","gitBranch":"main"}'The answer holds the project's
idand its environments.Link this directory to an environment
bashsylphx link --env orgs/acme/projects/shop/envs/productionThe link is written to
.sylphx/project.json, so later commands can name a resource as a bare id and the parent is filled in.Add a service and a database
bashsylphx api POST /v1/projects/$PROJECT_ID/services -d '{"name":"web","githubRepo":"acme/shop","githubBranch":"main","port":"3000","sourceKind":"git"}' sylphx api POST /v1/resources -d '{"name":"shop-main","kind":"database","tier":"hobby","projectId":"'$PROJECT_ID'"}'The Hosting and Database quickstarts continue from here: deploy, then bind the database to the environment.
Generated commands that change something wait for the operation to settle before
the command returns. --no-wait returns as soon as the call is accepted,
--output json prints the resource for a script to read, and --from-file
takes a whole request body when the flags would be long.
When a command does not exist
The CLI and the SDK are generated from one schema, so anything the API can
do is already a command. sylphx api GET /v1/whoami is the raw escape
hatch, and an agent using MCP reaches the same method with
sylphx_call.
#Let the agent ask
The MCP server is not only for creating things. An agent that has just deployed can read its own service, check what the plan allows, and look at the last error before deciding what to do:
sylphx_describe_method { "method_id": "observability.error_groups.list" }
sylphx_call { "method_id": "observability.error_groups.list", "request": { "parent": "orgs/acme/projects/shop/envs/production" } }listAll walks every page for you. Every other collection has the same shape —
get, list, listAll, create, update, delete, and the methods that are
specific to it.