MCP
Connect an MCP client to SignalSitter and your agent can create monitors, read incidents and manage callbacks.
- Endpoint:
https://api.signalsitter.com/mcp - Transport: Streamable HTTP
- Authentication:
Authorization: Bearer $SIGNALSITTER_API_KEY
The credential decides which organization and project the agent works in. No tool takes an organization or project argument.
Connect
Section titled “Connect”Create a credential in the dashboard. Pick the
narrowest preset that covers the job: read to look things up, manage to
create and change monitors, callbacks and credentials. The
Agents guide lists every preset.
Keep the key in an environment variable or your client’s secret prompt. Never put it in a committed file, a URL or a log.
export SIGNALSITTER_API_KEY='sig_v1_...'TypeScript SDK
Section titled “TypeScript SDK”npm install @modelcontextprotocol/client@2.0.0import { Client, StreamableHTTPClientTransport,} from "@modelcontextprotocol/client";
const client = new Client( { name: "my-signalsitter-client", version: "1.0.0" }, { versionNegotiation: { mode: "auto" } });const transport = new StreamableHTTPClientTransport( new URL("https://api.signalsitter.com/mcp"), { authProvider: { token: async () => process.env.SIGNALSITTER_API_KEY!, }, });
await client.connect(transport);const { tools } = await client.listTools();const organization = await client.callTool({ name: "signalsitter_get_organization",});Add this to config.toml:
[mcp_servers.signalsitter]url = "https://api.signalsitter.com/mcp"bearer_token_env_var = "SIGNALSITTER_API_KEY"Claude Code
Section titled “Claude Code”Add this to .mcp.json. Claude Code fills in the variable from your
environment:
{ "mcpServers": { "signalsitter": { "type": "http", "url": "https://api.signalsitter.com/mcp", "headers": { "Authorization": "Bearer ${SIGNALSITTER_API_KEY}" } } }}VS Code
Section titled “VS Code”Add this to .vscode/mcp.json. VS Code asks for the key in a masked prompt:
{ "inputs": [ { "description": "SignalSitter API credential", "id": "signalsitter_api_key", "password": true, "type": "promptString" } ], "servers": { "signalsitter": { "type": "http", "url": "https://api.signalsitter.com/mcp", "headers": { "Authorization": "Bearer ${input:signalsitter_api_key}" } } }}Current tools
Section titled “Current tools”Every tool production offers today:
| Tool | Purpose |
|---|---|
signalsitter_get_organization |
Read the organization and MCP principal derived from the verified API credential. The organization cannot be selected in tool input. |
signalsitter_get_entitlements |
Read the verified organization’s versioned plan, enforced entitlements, current allotment usage, service access, and lease freshness. The organization cannot be selected in tool input. |
signalsitter_get_usage |
Read bounded usage totals, projection freshness, and E6-01 entitlement alignment for the verified organization. Usage is eventually reconciled and is not exact global quota enforcement. The organization cannot be selected in tool input. |
signalsitter_get_billing |
Read the verified organization’s plan, subscription status, chargeback state, and payment-grace boundary. Read-only: an agent can explain why service is degraded and cannot start a checkout, open a billing portal, or change a plan. Carries no payment method, amount, invoice, or provider identifier, and the organization cannot be selected in tool input. |
signalsitter_list_billing_allotment_transitions |
List the verified organization’s customer-readable monitor suspensions and releases caused by plan transitions, newest transition first. The organization cannot be selected in tool input, and provider or operator audit identifiers are never returned. |
signalsitter_get_default_jurisdiction |
Read where this organization’s monitors are created when a create names no jurisdiction, and which jurisdictions this deployment can actually serve. Read this before creating a monitor and offer only what it reports as available: the contract vocabulary is wider than any deployment routes, so a create naming an unrouted jurisdiction is refused rather than stranded. A stored default outside the available set is a real state and is reported rather than corrected. |
signalsitter_create_monitor |
Create a monitor and return the jurisdiction it was created in and the URL to publish its beats to. Important action: read the default jurisdiction and the requested cadence, then set confirm to true. Omit jurisdiction to use the organization’s default; naming one applies to this monitor only. Where a monitor lives is written once at creation and can never be changed afterwards, and only jurisdictions this deployment routes are accepted. The idempotency key is the monitor’s identity rather than a retry nonce: the same key always names the same monitor, and a different key creates a second one. |
signalsitter_get_monitor |
Read one authoritative monitor by its immutable public monitor ID, including the cadence, monitor-allowance enforcement, placement metadata, and latest accepted observation. The optional jurisdiction disambiguates the rare case where this organization owns that ID in more than one placement. Organization identity comes only from the verified API credential. |
signalsitter_update_monitor_configuration |
Change one monitor’s expected interval, grace period, name, measurement definitions, or flapping policy. Destructive action: read the monitor first, then send its current configuration version as expectedConfigurationVersion and set confirm to true. A stale version is refused rather than applied. Shortening the interval can make the next deadline immediately overdue. |
signalsitter_control_monitor_lifecycle |
Pause, resume, archive, or restore one monitor, or open and close a maintenance window. Destructive action: pausing and archiving stop missing-beat detection, so read the monitor first, then send its current configuration version as expectedConfigurationVersion and set confirm to true. Archiving also refuses further beats and keeps history for the retention period. A maintenance window suppresses new incidents while still accepting beats. |
signalsitter_delete_monitor |
Irreversibly delete one monitor, permanently consume its key, terminate open incidents, abandon pending callback work, and cancel scheduled work. Destructive action: read the monitor first, then send its current configuration version as expectedConfigurationVersion and set confirm to true. A stale version is refused rather than applied. |
signalsitter_list_projects |
List the projects of the verified organization. A project holds one client’s monitors, credentials and callback endpoints, keeping them separate from every other client in the same organization. This is the one project call answered from the organization rather than from one project, so it works whichever project the credential was issued into. Monitors, incidents and endpoints returned by every other tool belong to that credential’s own project, which this list names. |
signalsitter_get_project |
Read the project this credential acts in, including its name and current version. It takes no arguments: a credential’s project is fixed when the credential is issued, so there is nothing to name. Read the version here before renaming. |
signalsitter_create_project |
Create a project in the verified organization, to hold one client’s monitors, credentials and callback endpoints apart from every other client’s. Important secret action: inspect the name, then set confirm to true. The name must be unique within the organization, compared ignoring case and surrounding or repeated spaces; a name already taken is refused rather than duplicated, which is also what a retry of a call that already succeeded will see. This credential keeps acting in its own project afterwards — a credential’s project is fixed when it is issued — so give the new project a credential of its own before working in it. |
signalsitter_rename_project |
Rename the project this credential acts in. Important secret action: inspect the new name, then set confirm to true. It takes no project argument, because a credential’s project is fixed when the credential is issued. The identifier does not change, so nothing that refers to the project breaks. Supply expectedVersion from a read to be refused rather than overwrite a rename somebody else made in the meantime. |
signalsitter_control_project_lifecycle |
Archive or restore the project this credential acts in. Project identity comes only from the credential. Destructive administrative action: read the project, supply its expectedVersion and an idempotency key, then set confirm to true. The last active project cannot be archived. |
signalsitter_delete_project |
Permanently erase the project this credential acts in and everything below it. Project identity comes only from the credential. Irreversible administrative action: inspect the project and deletion counts, supply its expectedVersion and an idempotency key, then set confirm to true. Cleanup is bounded and the receipt reports progress; the last active project cannot be deleted. |
signalsitter_list_callback_endpoints |
List the reusable callback endpoints of the verified organization. Signing secrets are never returned by a read. |
signalsitter_get_callback_endpoint |
Read one callback endpoint, including whether it is active and therefore receiving deliveries. |
signalsitter_create_callback_endpoint |
Create a reusable callback endpoint for the verified organization. Important secret action: inspect the destination, then set confirm to true. Choose a kind: a webhook posts a signed request to a URL you operate, a whooshbang_subscriber destination notifies one person on this organization through the messenger they connected, and a whooshbang_group destination notifies everybody on the organization who has connected one. Neither notification kind asks for a credential; this product holds the account. A webhook returns its signing secret once and an idempotent replay never reveals it again; a notification destination returns none, because this product issues it no secret. The endpoint is active immediately and can be selected by a monitor or made the organization default straight away. |
signalsitter_update_callback_endpoint |
Change a callback endpoint’s alias, destination, or lifecycle using its current generation. Externally visible action: read the endpoint, then set confirm to true. Change a webhook’s destination with url, a whooshbang_subscriber destination’s with whooshbang, and a whooshbang_group destination’s with whooshbangGroup, naming only the members you are replacing; an endpoint never changes kind. Set lifecycle to disabled to stop deliveries and to active to start them again; a changed destination takes effect on the next delivery. |
signalsitter_disable_callback_endpoint |
Switch a callback endpoint off using its current generation. Destructive action: read the endpoint, then set confirm to true. Monitors bound to it stop receiving deliveries and it cannot remain the organization default, but nothing is destroyed: switch it back on with signalsitter_update_callback_endpoint and lifecycle active. To destroy it, use signalsitter_remove_callback_endpoint. |
signalsitter_remove_callback_endpoint |
Permanently remove a callback endpoint using its current generation. Irreversible destructive action: read the endpoint, confirm with the customer that they want it destroyed rather than switched off, then set confirm to true. The endpoint, its signing secret, and its idempotency history are deleted, its alias becomes reusable, the organization default is cleared if it pointed here, and monitors bound to it report that the endpoint was removed. Use signalsitter_disable_callback_endpoint instead when deliveries should only pause. |
signalsitter_rotate_callback_secret |
Replace a webhook callback endpoint’s signing secret using its current generation. Destructive secret action: read the endpoint, then set confirm to true. The replacement is returned once and the previous secret keeps verifying signatures for the bounded overlap you request. A notification destination has no signing secret this product issued and is refused. |
signalsitter_test_callback_endpoint |
Send one test delivery to the endpoint and report what came back. Externally visible action, so set confirm to true: for a webhook this makes a real signed HTTPS request to the customer destination, and for a WhooshBang destination it sends a real WhooshBang message that notifies a real person on their own device. The message says it is a test. The result is a diagnostic only: it is not stored on the endpoint and it neither allows nor blocks any delivery. |
signalsitter_get_callback_default |
Read the callback endpoint that monitors inherit when their binding selects the organization default. |
signalsitter_set_callback_default |
Select or clear the organization default callback endpoint. Destructive action: this redirects every monitor that inherits the default, so read the current default first and then set confirm to true. Pass a null endpointId to clear it. |
signalsitter_get_monitor_callback |
Read one monitor’s callback binding and what it currently resolves to, including why an unresolved binding cannot deliver. |
signalsitter_set_monitor_callback |
Bind one monitor to the organization default, a named shared endpoint, its own inline destination, or nothing. Destructive action: read the current binding, then set confirm to true. An inline destination belongs to this monitor alone and can never change a shared or default endpoint. |
signalsitter_list_credentials |
List bounded API credential metadata for the verified organization using an opaque cursor. Secrets are never returned. |
signalsitter_get_credential |
Read API credential metadata by opaque public ID within the verified organization. Secrets are never returned. |
signalsitter_create_credential |
Issue an API credential for the verified organization. Important secret action: inspect the requested preset, then set confirm to true. A new secret is returned once; an idempotent replay never reveals it again. |
signalsitter_rotate_credential |
Replace an API credential secret using its current generation and an idempotency key. Destructive secret action: inspect current metadata, then set confirm to true. The replacement secret is returned once. |
signalsitter_revoke_credential |
Revoke an API credential using its current generation. Destructive action: inspect current metadata, then set confirm to true. Revocation prevents future authentication. |
signalsitter_list_monitors |
List this organization’s monitors newest first using an opaque cursor, optionally including archived ones. Organization identity comes only from the verified API credential. |
signalsitter_list_monitor_observations |
List one monitor’s received observations newest first using an opaque cursor, optionally bounded by a time window. Organization identity comes only from the verified API credential. |
signalsitter_read_monitor_observation_series |
Read one monitor’s observation series over an exact time window, which is the shape a numeric diagnosis reads. Organization identity comes only from the verified API credential. |
signalsitter_list_monitor_changes |
List what changed on one monitor newest first using an opaque cursor, with each change attributed to who made it. Organization identity comes only from the verified API credential. |
signalsitter_get_incident |
Read one incident on one monitor. Organization identity comes only from the verified API credential. |
signalsitter_get_monitor_activation |
Read whether one monitor has received its first beat and become active, which is how to tell a created monitor from a working one. Organization identity comes only from the verified API credential. |
signalsitter_test_monitor_beat |
Send one monitor a test beat and read what it made of it. Externally visible action: read the monitor, then set confirm to true. It writes an observation the monitor acts on, so a monitor already in an incident may recover. |
signalsitter_set_default_jurisdiction |
Set the jurisdiction every monitor created afterwards is routed to. Important action: read the current default, then set confirm to true. Existing monitors do not move. |
signalsitter_get_billing_cancellation_impact |
Read what cancelling the current plan would cost this organization, in monitors and retained history. Organization identity comes only from the verified API credential. |
signalsitter_list_incidents |
List incidents for one monitor newest first using an opaque cursor. Organization identity comes only from the verified API credential. |
signalsitter_get_incident_timeline |
Read the immutable timeline of one incident in occurrence order. Timeline events are append-only and are never rewritten. |
signalsitter_list_incident_deliveries |
Read every callback delivery owed for one incident: its state, how many attempts remain, when the next is due, what the last attempt saw, and what to do about it. Requires both incident and callback read entitlement. |
signalsitter_redeliver_incident_callback |
Ask for one more delivery attempt against a settled callback delivery. Operator action: read the delivery, confirm it is redeliverable, then set confirm to true. This sends a signed request to the customer’s endpoint. Grants exactly one attempt; repeating the call with the same idempotency key replays the original grant rather than granting another. |
signalsitter_create_rule_workbench_draft |
Create a versioned rule draft over a bounded frozen window of retained monitor history. This does not change live configuration; inspect the target monitor, then set confirm to true. |
signalsitter_get_rule_workbench_draft |
Read one versioned rule workbench draft. Organization identity comes only from the verified API credential. |
signalsitter_update_rule_workbench_draft |
Update an open rule proposal only when its draft version still matches. This changes only the draft, never live configuration; inspect the current draft, then set confirm to true. |
signalsitter_replay_rule_workbench |
Replay active and proposed rules chronologically over the draft’s frozen retained history. Returns bounded graph, episode-diff, sampling, and deterministic cost evidence and writes nothing. |
signalsitter_apply_rule_workbench_draft |
Apply a replayed rule proposal to live monitor configuration. Destructive action: inspect the replay, then provide matching draft and configuration versions and set confirm to true; stale versions are refused. |
signalsitter_cancel_rule_workbench_draft |
Cancel an open rule draft at its expected draft version. This discards only draft work and never changes live monitor configuration; inspect the draft, then set confirm to true. |
signalsitter_acknowledge_incident |
Acknowledge an incident without closing it. Operator action: read the incident, then set confirm to true. Repeating the call with the same idempotency key replays the original acknowledgement. |
signalsitter_annotate_incident |
Append an operator annotation to an incident timeline. Operator action: read the incident, then set confirm to true. The annotation is immutable and an idempotency key is required so a retry cannot duplicate it. |
signalsitter_resolve_incident |
Resolve an incident and close its violation family. Destructive action: read the incident, then set confirm to true. A resolved incident cannot be reopened; a later violation opens a new incident. |
What agents can’t do
Section titled “What agents can’t do”- Delete the organization. Do it in the dashboard.
- Export all your data. Use the REST export.
- Change the default jurisdiction. Do it in the dashboard Settings, or with REST.
- Act in another project. Use a credential issued in that project. A project an agent creates gets its first key in the dashboard.
- Set or rotate a monitor’s inline callback URL. Use
REST or a
managepublish credential. MCP can still bind a monitor to a named endpoint, the default, or nothing. - Read a secret twice. Secrets appear once, in the result that created them.
Important actions and secrets
Section titled “Important actions and secrets”- Confirm changes. Tools that create, change or delete something need
confirm: true. Without it you getsignalsitter.confirmation_requiredand nothing changes. Read the current state before you confirm. - Send the version you read. Rotating or revoking a credential needs
expectedGeneration. Deleting a monitor needsexpectedConfigurationVersion. Applying a rule draft needs the draft and configuration versions. A stale version returnssignalsitter.precondition_failed. - Save secrets immediately. Creating or rotating a credential or a callback endpoint’s signing secret returns the secret once. Lists, reads and replays never show it again.
- Pick the jurisdiction once. A monitor’s jurisdiction can never change.
Call
signalsitter_get_default_jurisdictionfirst and offer only what itsavailablelist names. - Hand over the publish URL.
signalsitter_create_monitorreturnspublishUrl. Give it to the job you’re monitoring so it can send its first beat. - Deleting is permanent. A deleted monitor’s ID can’t be reused.
- Some tools send real requests.
signalsitter_test_callback_endpointandsignalsitter_redeliver_incident_callbackcall your endpoint over HTTPS.
await client.callTool({ name: "signalsitter_create_monitor", arguments: { confirm: true, intervalSeconds: 86400, name: "Nightly backup", },});Leave out callback and the monitor uses your organization’s default endpoint.
Send { "kind": "disabled" } to turn alerts off.
If one monitor ID exists in more than one jurisdiction, monitor tools return
signalsitter.conflict. Call again with jurisdiction set, for example "eu".
Results, refusals and limits
Section titled “Results, refusals and limits”Every call returns { "ok": true, "data": ... } or an error:
{ "ok": false, "error": { "code": "signalsitter.permission_denied", "message": "The verified API credential cannot perform this operation.", "correlationId": "corr_...", "requestId": "req_...", "retryable": false }}- Error codes are stable. Branch on
code, notmessage. - Retryable errors include
retryAfterSeconds. Wait that long, then retry. - Another organization’s IDs return
signalsitter.not_found, the same as an ID that doesn’t exist. - Requests are UTF-8 JSON, up to 16 KiB.
- Each tool call has 10 seconds to finish.
- Structured results are capped at 192 KiB, and a whole response at 512 KiB.
- Requests from a browser page are refused. Connect from a server, desktop client or agent.
- Authentication is API keys only. There’s no OAuth sign-in.