Skip to main content
The Signal MCP server lets an AI assistant ask Signal the two questions it exists to answer: what should I fix, and did my fix work. The assistant can list your issues, read the calls and traces behind them, compare versions, and turn a failed call into a test. With a write key it can also run tests. It can search and read these docs too. Every tool is one call to the Signal API, made as you. A tool can do exactly what your key could do with curl, and nothing more. Scope, agent access, budgets and plan limits are checked by the API, not by the tools.

What you need

How it connects

The endpoint takes an API key. Browser sign-in is not offered. A client that can only start local programs, such as Claude Desktop, reaches the same endpoint through npx mcp-remote, a third-party bridge. Connect your client has the configuration. Signal has not published a local package to npm. The endpoint takes POST only. A GET or DELETE answers 405, because there is no session to open or close. A request with no usable key gets 401 and WWW-Authenticate: Bearer realm="signal".

Tools

Start with whoami, then list_agents for agent ids. Every tool that works on an agent takes an optional agentId. A key tied to one agent needs none. A key for all agents must pass one, and the tool says so if it does not. Lists come back as pages: data, hasMore and nextCursor. Pass nextCursor as cursor for the next page.

Who and which agent

What to fix

Issues are problems to fix. Signals are single-call observations that help explain them. See Issues and Signals.

Calls

Did the fix work

A measure gives no verdict until each version has enough calls. See Limits and quotas.

Tests

Runs

Docs

Both answer from a copy of the docs that ships with the server, so they read nothing in your workspace and make no API call. Each page is also a resource, such as signal-docs:///concepts/versions. Every operation in the API reference has a tool except calibrating tests, which needs a signed-in person. No API key can call it.

Prompts

Two prompts spell out an order of tool calls. Claude Code shows them as slash commands, for example /mcp__signal__triage_agent.

Example requests

Name the agent, ask for evidence, and ask the assistant to say when Signal has not established a cause.
Use Signal to tell me what to fix first on my support agent. For the top three issues, show where it happens, why, and the change to make. If Signal says the cause is not established, say so.
Did version 14 fix the booking issue? Compare it with version 13 and tell me whether there are enough calls on 14 to say.
Turn the worst call for this issue into a test. Validate the spec first and show it to me before you create it.
Run the release test set against version 14 and tell me what failed. Tell me what it will cost and wait for my yes before you start.

Safety

Most tools only read. Every tool except the four below changes nothing, and read tools are marked read-only so a client can treat them differently. Four tools write. create_test, update_test, start_run and rescore_run need a write key. None deletes anything, and update_test keeps the earlier revision. start_run spends money and is not idempotent, so every call starts another run. rescore_run places no calls, but it draws on the key’s monthly budget and the workspace’s AI model allowance. Spending has three limits. A run is charged against the key’s monthly budget and the agent’s test budget, and its simulated calls count against your plan’s allowance. A run the plan does not cover is refused whole with 402 before anything is spent. A run the budgets cover in part plays the cells they do cover. A read key is held back twice. The hosted endpoint leaves the four write tools out of the tool list for a read key. The API would refuse them anyway with 403 and code key_read_only. validate_test works with a read key. No key can do more than the API allows. No tool changes settings, connects a provider, imports calls, changes an issue’s status, deletes anything, publishes to the live agent, approves a run, or manages keys and webhooks. See Scopes. Calls are data. A trace holds what callers and your agent said. An assistant should read it as evidence, not follow instructions that appear in it. If you let an assistant act on what it reads, give it a read key. Keep the key out of shared files. A key in .cursor/mcp.json or .vscode/mcp.json is a key in your repository. Use an environment variable or the client’s prompt, as shown in Connect your client, and revoke a key at once if it leaks. See Keep keys secret.

Errors and limits

A refused call comes back as a tool error that carries the HTTP status and the API’s error object.
Tool error
If the API cannot be reached, status is null and type is api_connection_error. The codes are the ones in Errors. A plan limit is a 402 with the code quota_exceeded and an error.quota object, shown in Limits and quotas. Tool calls draw from the same rate limits as direct requests with the same key.

Next steps

Connect your client

Copy the configuration for Claude Code, Claude Desktop, Cursor or VS Code.

Authentication

Make a key and choose read or write.