Connecting an MCP server to Landfall
Any MCP server you already run becomes a source Beacon, Landfall's diagnosis agent, can query during an investigation. One URL, an optional bearer token, and a label. Landfall offers the agent only the tools the server itself marks read-only; everything else the server exposes is left alone.
This is the one integration on this site that is not about a single vendor. Grafana, Sentry, Datadog, GitHub and many others publish an MCP server for their product; internal teams write them for their own systems. If a server speaks MCP over Streamable HTTP and annotates its tools, Landfall can read through it with no Landfall-side code for that provider at all.
What you'll need
- An MCP server reachable from Landfall over HTTPS using the Streamable HTTP transport (MCP specification revision 2025-03-26 or later). Servers that only speak stdio or the older SSE transport are not reachable from a hosted service; most maintained servers offer Streamable HTTP with a flag.
- Tool annotations. Landfall offers a tool only when the server declares annotations.readOnlyHint: true on it. A server that annotates nothing connects fine but contributes no tools.
- If the server requires a caller token, a bearer token for Landfall. Give it the narrowest scope the server supports; for Grafana's own server that is a Viewer-role service account behind it.
- An admin on your Landfall organization, to save the connection under Settings → Integrations.
1. Run your MCP server in Streamable HTTP mode
The worked example throughout is Grafana's open-source server, grafana/mcp-grafana, which is what Landfall's own local fixture was recorded against. Substitute your own server's flags.
Start it with the Streamable HTTP transport and a caller token
docker run --rm -p 8000:8000 \ -e GRAFANA_URL=https://grafana.example.com \ -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<viewer service account token> \ -e MCP_GRAFANA_SERVER_TOKEN=<token Landfall will present> \ grafana/mcp-grafana -t streamable-http -allowed-hosts mcp.example.com
Two things matter for Landfall: the endpoint path (here /mcp, so the URL you will paste is https://mcp.example.com/mcp) and the caller token, which Landfall sends as Authorization: Bearer. Put the server behind TLS; Landfall will connect to a plain http:// URL, but nothing about a bearer token is private over one.
Check the annotations once
Any MCP client can show you a server's tool list. What Landfall will keep is every tool whose annotations include readOnlyHint: true. For mcp-grafana that is 53 of its 72 tools: dashboard search, datasource listing, PromQL and LogQL queries, alert rule reads. The 19 it excludes are the ones that create, update or delete something, and the same rule applies to any server: an unannotated tool counts as not read-only, because that is the MCP specification's own default.
2. Add it to Landfall
In Landfall, open Settings → Integrations → MCP server for your organization. It asks for three things: the endpoint URL, the bearer token (if the server needs one), and a label.
Open the Integrations list and pick MCP server
Settings → Integrations
Screenshot to capture: the Integrations list with the MCP server tile visible and not yet configured. Paste the URL, the token and a label
The label is what the investigator sees in its catalog. Pick something a responder would recognise in a finding: Grafana MCP, not server-2. You can connect more than one MCP server; each is its own connection and each keeps its own label.
Settings → Integrations → MCP server
Screenshot to capture: the MCP server form, all three fields filled, token masked. Test connection
The test performs the protocol's initialize handshake and a tools/list, then reports how many of the offered tools are read-only. It never calls a tool. A result that reads "reachable, but none of its tools is annotated read-only" means the connection works and the agent will get nothing from it: fix the annotations on the server side first.
Settings → Integrations → MCP server
Screenshot to capture: a successful test naming the server and its read-only tool count. Save integration
The server's tools are in the investigator's catalog within a minute, without a restart. The same one-minute bound applies when you rotate the token or remove the connection.
3. What the investigator sees
Beacon does not get a Grafana tool, a Sentry tool or an MCP tool. It gets the same generic query mechanism it already has for every other source, with one more source in it: mcp-server, carrying your label and one operation per read-only tool, each with the parameter hints taken from the tool's own input schema. Tool results come back verbatim and are treated as data the server returned, never as instructions.

- "rejected the bearer token (HTTP 401)": the server's caller token does not match what you pasted. It is a different value from any token the server itself uses to reach its own backend.
- "HTTP 403" with a host error: many servers validate the Host header against an allowlist (mcp-grafana's -allowed-hosts). Add the hostname Landfall connects to.
- "HTTP 404" or "no JSON-RPC response": the URL is the server's base address rather than its MCP endpoint. Most servers serve MCP under a path such as /mcp.
- The server speaks only stdio or the legacy SSE transport. Landfall needs Streamable HTTP.
The server's tools are missing readOnlyHint: true. Landfall does not guess from a tool's name: list_things without the annotation is excluded exactly like delete_things, and each exclusion is logged once on the Landfall side. Annotate the read-only tools on the server and the catalog picks them up within a minute.
Triggering: not applicable
Every other integration on this site has a second direction, a webhook through which the provider's own alert opens a Landfall incident. An MCP server has no such direction, by the protocol's design: it answers tool calls and never initiates a delivery to a webhook, and Landfall only ever calls its read-only tools, so there is no event a server could send that Landfall would treat as an alert. The provider behind the server (Grafana's alerting, Sentry's issue alerts) keeps its own triggering path, documented on that provider's page. This is recorded as not applicable rather than as an open gap on Triggering Integrations: MCP servers.
Reference
| Field | Value |
|---|---|
| Server URL | The MCP endpoint, e.g. https://mcp.example.com/mcp. Streamable HTTP transport. |
| Bearer token | Optional. Sent as Authorization: Bearer on every request; stored as a secret, never shown again. |
| Label | The name the investigator's catalog shows for this connection. |
| Tools offered | Only tools with annotations.readOnlyHint === true; unannotated tools count as not read-only. |
| Connection test | initialize + tools/list; no tool is called. |
| Multiple servers | Supported; each connection is listed separately under its own label. |
| Local development | pnpm nx run signals:mcp-fixture-server replays a real capture of mcp-grafana on http://127.0.0.1:8931/mcp, no Grafana or credential needed. |
| Incident triggering | Not applicable (read-only tool source, see above). |