Skip to content
Console
Menu

Queues

Workflows

Getting Started

Authentication

KV Store

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 whoami

The 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_methods finds a method by what it does;
  • sylphx_describe_method returns one method's full input schema;
  • sylphx_call calls 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.

  1. Check where the key points

    bash
    sylphx access whoami

    A key scoped to an organization can create a project; a key scoped to a project works inside it.

  2. Create the project

    bash
    sylphx api POST /v1/projects -d '{"name":"shop","gitRepository":"acme/shop","gitBranch":"main"}'

    The answer holds the project's id and its environments.

  3. Link this directory to an environment

    bash
    sylphx link --env orgs/acme/projects/shop/envs/production

    The link is written to .sylphx/project.json, so later commands can name a resource as a bare id and the parent is filled in.

  4. Add a service and a database

    bash
    sylphx 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.