FireHydrant MCP server: five read-only tools
FireHydrant exposes incident data through five tools. The context cost is higher than some nine-tool connectors, and a scope flag makes it read-only.
Last verified 1 September 2026 · from FireHydrant's repository, npm and the server's own tools/list response
This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.
Summary
The FireHydrant MCP server is official and carries five tools: listing incidents and alerts, creating an incident, and reading and updating retrospectives.
It does something only a handful of connectors in this guide do. A --scope flag takes read or write. The server enforces it. It is not a rule the agent is asked to follow.
It is the least maintained connector here, and it still works. Version 0.0.4 shipped on 24 February 2026 and nothing has moved since.
What is the FireHydrant MCP server?
It is FireHydrant's server for the Model Context Protocol. FireHydrant runs incident response, so what the agent gains is the incident record: what happened, who was alerted, and what the retrospective said.
The surface is narrow on purpose. Five tools cover listing incidents, listing alerts including Signals alerts, creating an incident, listing retrospectives for an incident, and updating a single retrospective field.
The server is generated from FireHydrant's API specification, which is why the tools map so directly onto endpoints and why the descriptions are short.
FireHydrant reaches part of the way into production observability through incident response, and reaches nothing in code review, release, agent observability or cost.
| Part of the work | What FireHydrant has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | None | No code-review product |
| CI & release | None | No CI product, and no build or test pipeline |
| Production observability | Incidents, alerts, retrospectives | Partial. Specific. FireHydrant holds the response to an outage and what was learned, not the telemetry that detected it |
| Agent observability & evals | None | No traces, evaluations or prompt versioning for your own agents |
| AI cost management | None | No token or model spend data |
In practice, FireHydrant answers what happened during an incident and what the team concluded afterwards, and nothing about the system itself. An agent connected here can pull the incident record and the retrospective that followed. It cannot show you the failing query. Pair this connector with a telemetry connector.
What can an AI agent do with FireHydrant?
| Task | Tools | Works | Watch out for |
|---|---|---|---|
| Find recent incidents | list-incidents | Yes | One list tool, so filtering is done through its parameters rather than a search tool |
| See what alerted | list-alerts | Yes | Includes Signals alerts, so the list mixes alert sources |
| Read what a retrospective concluded | list-retros-by-incident | Yes | Retrospectives exist only for incidents where one was started |
| Update a retrospective field | update-retrospective-field | Yes | A write. Blocked entirely when the server runs with read scope |
| Declare an incident | create-incident | Yes | A write that pages people. Blocked under read scope |
| Explain why the service failed | No | No telemetry. FireHydrant records the response, not the cause |
5 tools registered, all on by default, gated by a read or write scope
- Incidents2
list-incidentslist-alerts- Retrospectives1
list-retros-by-incident- Writes2
create-incidentupdate-retrospective-field
The write group is absent when the server runs with --scope read, which is a server-side gate rather than a client allowlist. Counted from the server's own tools/list response on 24 August 2026.
What connecting costs before the first question
A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.
Five tools cost 5,858 tokens at the low end, more than OpenSearch's nine and more than Dynatrace's eighteen. Descriptions are short at 128 characters, so this is not verbosity.
The schemas carry it, at 3,241 characters per tool. A generated server describes its endpoints exactly, including every optional filter, and an agent receives all of that whether it filters or not.
| Tool set | Tools | Tokens (GPT-5.6, GPT-5.5) | Tokens (GPT-4, GPT-3.5) | Tokens (Claude Haiku 4.5 to Opus 5) | Share of a 200,000-token window |
|---|---|---|---|---|---|
| Every tool, as registered | 5 | 5,858 to 8,139 | 5,700 to 8,078 | 7,781 to 9,617 | 2.9% to 4.8% |
Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 24 August 2026 from tools/list on the published firehydrant-mcp package. It was run locally with a placeholder key.
Registration is static, so no FireHydrant account was involved. Figures cover name, description and input schema.
The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 39%. Reasoning tokens are output, spent per request. The tool list is input, charged once at connection.
The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer. So the definitions were sent to the API's count_tokens endpoint, and a no-tools baseline was subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end. Opus 5 and Sonnet 5 sit at the high end. The gap between them is about a quarter.
FireHydrant MCP server limits: where answers come back incomplete
The server is generated from FireHydrant's API specification, and it has not been regenerated. Two of the three limits below follow from that.
The agent says: “I opened an incident.” That pages people.
create-incident is a real incident declaration, and incident declaration is what wakes an on-call engineer. update-retrospective-field similarly edits a record other people rely on.
Unlike most connectors here, the fix is a server flag rather than a client allowlist: --scope read blocks both at the server.
Guard: Run with --scope read for investigation. Start a separate server with write scope only when declaring or editing is the point.
The agent says: “FireHydrant is connected.” It is, and nothing has shipped since February.
Version 0.0.4 was published on 24 February 2026 and the repository has not moved since. The package still installs and answers, so nothing in the agent's behavior signals the gap.
A generated server that is not regenerated drifts from its API. New endpoints do not appear, and changed parameters are not reflected.
Guard: Pin the version, and check FireHydrant's API documentation rather than the tool list when something you expect is missing.
The agent says: “This incident has no retrospective.” One may never have been started.
list-retros-by-incident reads retrospectives that exist. An incident closed without one returns an empty list, which reads the same as an incident whose retrospective is still being written.
Guard: Treat an empty result as absent rather than as complete, and check the incident's state alongside it.
How to configure FireHydrant MCP for agents
- 1
Run with
--scope readunless writing is the pointIt is a genuine server-side gate, which most connectors in this guide do not offer.
- 2
Pin the version
The package has not moved since 0.0.4 in February 2026, so pinning costs nothing and protects against a surprise publish.
- 3
Use
--toolif five is still too manyThe flag mounts named tools only, which is a finer gate than scope.
- 4
Keep the transport local
--transport sseopens a port; stdio does not.
Paste this into your agent’s instructions
An empty retrospective list and an incident with no retrospective look identical, and the generated server may simply lack a newer endpoint. The block makes both visible.
When you answer using FireHydrant MCP tools, state: - The time range you searched, and how many incidents you retrieved against the limit you used. - Whether a retrospective existed. An empty result means none was started, not that the incident had no cause. - Whether the server is running with read or write scope. Never state that data does not exist. State that none was returned under the constraints above. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
Often not. FireHydrant's REST API is documented and this server is generated from it, so a coding agent calling the API directly reaches strictly more than five tools.
The connector's advantage is the scope flag. Getting the same guarantee from raw API calls means trusting the agent, or building your own gate.
Given the package has not moved since February 2026, the API is also the surface that will keep pace with the product.
Connect the server with read scope for incident investigation. Use the API where you need an endpoint the generated server never got.
FireHydrant MCP server setup
The package runs with npx and takes a FireHydrant API key on the command line. The start subcommand is required; running the package alone prints usage.
--scope accepts read or write and is repeatable, which is how the tool list is gated at the server.
Claude Code, read-only
Read scope removes the two write tools from the tool list entirely.
claude mcp add-json "firehydrant" '{"command":"npx",
"args":["-y","firehydrant-mcp","start",
"--scope","read","--api-key","<your-key>"]}'Cursor
In ~/.cursor/mcp.json for all projects, or .cursor/mcp.json in one.
{"mcpServers":{"firehydrant":{"command":"npx",
"args":["-y","firehydrant-mcp","start","--scope","read",
"--api-key","<your-key>"]}}}Codex CLI
Codex reads TOML, so the JSON blocks above will not transfer.
[mcp_servers.firehydrant] command = "npx" args = ["-y", "firehydrant-mcp", "start", "--scope", "read", "--api-key", "<your-key>"]
Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.
Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.
{"mcpServers":{"firehydrant":{"command":"npx",
"args":["-y","firehydrant-mcp","start","--scope","read","--api-key","<your-key>"]}}}Gemini CLI
~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.
{"mcpServers":{"firehydrant":{"command":"npx",
"args":["-y","firehydrant-mcp","start","--scope","read","--api-key","<your-key>"]}}}VS Code Copilot
.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.
{"servers":{"firehydrant":{"command":"npx",
"args":["-y","firehydrant-mcp","start","--scope","read","--api-key","<your-key>"]}}}The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.
Windsurf
~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same API key in args.
Zed
~/.config/zed/settings.json, carrying the same API key in args as the blocks above.
The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.
Google Antigravity
~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.
{"mcpServers":{"firehydrant":{"command":"npx",
"args":["-y","firehydrant-mcp","start","--scope","read","--api-key","<your-key>"]}}}Amp (Sourcegraph)
~/.config/amp/settings.json or .amp/settings.json, carrying the same API key in args. The amp mcp CLI covers approve, doctor and oauth.
The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.
Cline
~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same API key in args. Supports stdio, streamable HTTP and SSE.
Goose (Block)
~/.config/goose/config.yaml, carrying the same API key in args.
YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.
Kiro (AWS)
.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same API key in args.
Warp
~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same API key in args. Also addable through the /agent-add-mcp skill.
JetBrains Junie
.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same API key in args. Use /mcp in the CLI to manage.
Roo Code
.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same API key in args.
Continue
.continue/mcpServers/*.yaml, one file per server, carrying the same API key in args.
YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.
Trae
.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same API key in args.
Devin
Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same API key in args.
Named tools only
Mounts just the tools you list, which is tighter than a scope and needs the same key.
npx -y firehydrant-mcp start --api-key <your-key> \ --tool list-incidents --tool list-retros-by-incident
Read-only access, permissions and security
--scope readis a real server-side gateWrite tools do not appear in the tool list at all, so an agent cannot call them however the client is configured.
Declaring an incident pages people
create-incidentis not a draft; it is the same action a human takes to start an incident response.--toolnarrows furtherMounting only the tools you need is finer than scope, and useful where read access itself should be partial.
The package is frozen at 0.0.4
A generated server that is not regenerated drifts from its API, so treat missing capability as a packaging gap rather than a product one.
Troubleshooting
- The server prints usage and exits
- The
startsubcommand is required.npx firehydrant-mcp start --api-key <key>is the working form. - The agent has no tool for creating an incident
- The server is running with
--scope read, which removes the write tools from the list. That is the intended behavior for investigation. - An incident has no retrospective
- None was started.
list-retros-by-incidentreturns what exists, and an empty result is not evidence that the incident was uncomplicated. - An endpoint you use is not available as a tool
- The server is generated from FireHydrant's API specification and has not been regenerated since February 2026. Call the REST API directly for anything newer.
FireHydrant MCP server: Reference
| Item | Value |
|---|---|
| Status | npm 0.0.4, published 24 February 2026 · unchanged since |
| Adoption | 5 stars · MIT license |
| Package | firehydrant-mcp on npm, invoked with the start subcommand |
| Transport | stdio by default, with an SSE option on port 2718 |
| Auth | --api-key, a FireHydrant API key |
| Tools | 5, all on by default; 2 removed under read scope |
| Read-only | --scope read, enforced by the server |
What engineers report
FireHydrant's connector has a very small public footprint, so this section reports counts rather than quotes.
| What was checked | What it shows |
|---|---|
| Stars | 5 |
| Package | firehydrant-mcp 0.0.4, published 24 February 2026 |
| License | MIT |
| Tools | 5, all on by default |
| Read-only | --scope read, enforced by the server |
| Average schema size | 3,241 characters per tool |
Repository facts from the GitHub API and package facts from npm, both retrieved 24 August 2026. Tool counts and schema sizes come from the server's own tools/list response.
Should you connect an agent to FireHydrant?
Yes, though it is no longer actively maintained. Best for read-scope investigation, with the REST API kept in reserve for anything the five tools do not reach.
- Strongest fit
- FireHydrant teams who want an agent reading incident history and retrospectives during or after an outage.
- Main advantage
- A genuine server-side read-only scope, which most connectors in this guide do not offer.
- Main weakness
- Five tools is a narrow slice of FireHydrant, and the package has not been regenerated since February 2026.
- Operational risk
- Under write scope an agent can declare an incident, which pages people.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.
See agent observabilityFrequently asked questions
How many tools does the FireHydrant MCP server have?
Five: list-incidents, list-alerts, create-incident, list-retros-by-incident and update-retrospective-field. Counted from the server's own tools/list response, 24 August 2026.
Can I stop an agent declaring incidents?
Yes. Start the server with --scope read. That is a server-side gate, so it holds regardless of what the client allows.
Is it maintained?
Lightly. Version 0.0.4 was published on 24 February 2026 and the repository has not moved since. It still installs and works.
Why do five tools cost 5,858 tokens?
The schemas, at 3,241 characters per tool. It is generated from FireHydrant's API specification, so every optional parameter is described whether you use it or not.
Does it tell me why an incident happened?
No. FireHydrant records the response and the retrospective. Pair it with an observability connector for the cause.