curl, and nothing more. Scope, agent access, budgets and plan limits are checked by the API, not by the tools.
What you need
- A SignalMD API key. Make one in the app. Start with Read.
- An MCP client. Connect your client has the configuration for Claude Code, Claude Desktop, Cursor, VS Code and others.
- An agent connected to SignalMD, with calls imported. See Connect Retell.
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. SignalMD 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 withwhoami, 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 two. Calibrating tests needs a signed-in person, so no API key can call it. Improvement batches are read in the app; get_test and list_test_revisions show each test’s own state and versions.
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 SignalMD has not established a cause.Use SignalMD 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 SignalMD 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.
Spending has three limits. A run is charged against the key’s monthly budget and the agent’s test budget, and its simulated tests draw on your plan’s credits. A run the credits do 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
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.