mcp-allquiet
An MCP server for All Quiet, the incident management and on-call platform. It lets Claude, Cursor or any MCP client triage incidents, check who is on call and reach every operation of the All Quiet public API.
Built on the official MCP Python SDK v2 (mcp 2.x). Not affiliated with All Quiet.
Why
All Quiet has a complete public API (136 operations) but no official MCP server. Exposing one tool per operation would put 136 tool schemas into the model's context before the first question. This server ships 10 tools:
- 5 incident tools for the on-call loop, returning compact summaries.
- 5 generic tools driven by the bundled OpenAPI spec, which reach every other operation (teams, schedules, overrides, integrations, routing, status pages, maintenance windows...).
Install
Requires uv and an All Quiet API key (the API needs a Pro or Enterprise plan).
Claude Code:
claude mcp add allquiet -e ALLQUIET_API_KEY=your-key -- uvx mcp-allquiet
Claude Desktop, Cursor and other clients (mcpServers JSON):
{
"mcpServers": {
"allquiet": {
"command": "uvx",
"args": ["mcp-allquiet"],
"env": { "ALLQUIET_API_KEY": "your-key" }
}
}
}
Configuration
| Variable | Required | Default | |
|---|---|---|---|
ALLQUIET_API_KEY |
yes | Organization API key or personal access token | |
ALLQUIET_BASE_URL |
no | https://allquiet.app |
Use https://allquiet.eu for the EU region. Must be https:// |
The API key decides what the model can do
All Quiet keys carry per-resource scopes (incidents:list, teams:update...), can be limited to teams, and can expire. The server has no read-only switch on purpose: create a key with only list/get scopes and every write fails at the API. A personal access token can never do more than its user can in the UI.
A personal access token only reaches teams its user belongs to. A team created through the API stays out of reach (403) until a POST /team-membership adds the user as Administrator. Organization API keys skip team role checks.
Keys spanning several organizations need the organizationId query parameter on many operations. The API says so in its error, and the model can pass it through the generic tools.
Tools
| Tool | What it does | Kind |
|---|---|---|
list_incidents |
Filter by status, severity, team, user, text, unattended, date. Compact summaries, paged | read |
get_incident |
Full incident as markdown: timeline, attributes, assignees | read |
create_incident |
Open an incident | write |
update_incident |
Record an action (resolve, acknowledge, comment...) and/or change severity | write |
who_is_on_call |
Current (or past) on-call per team, with escalation tier | read |
list_operations |
Search the 136 API operations, with the key scope each needs | read |
describe_operation |
Parameters and request body schema of one operation | read |
call_read |
GET any operation |
read |
call_write |
POST / PUT / PATCH any operation (JSON bodies) |
write |
call_delete |
DELETE any operation |
destructive |
Tools carry MCP annotations (readOnlyHint, destructiveHint), so clients can ask before writes and deletes.
Security
- The key is read from the environment and only sent to the configured
https://host. It never appears in tool output or error messages (tested). - Generic tools accept only path templates that exist in the bundled spec. Path parameters are percent-encoded as a single segment, so a value cannot rewrite the path.
- Responses are truncated at 40k characters and error bodies at 2k.
- Incident content is untrusted input. Titles, messages and attributes often come from alert payloads written by third parties. Treat what the model reads there as data, and keep write scopes off keys you use with untrusted incident sources.
Report vulnerabilities through SECURITY.md.
Limitations
- stdio transport only.
POST /inbound-integration/{id}/call-routing-media/{purpose}needsmultipart/form-dataand is not supported.- No retries. A
429returns theRetry-Aftervalue to the model.
Development
uv sync
uv run pytest
uv run ruff check && uv run ruff format --check && uv run ty check
Try it with the MCP Inspector:
ALLQUIET_API_KEY=your-key npx @modelcontextprotocol/inspector uv run mcp-allquiet
Refresh the bundled OpenAPI spec:
curl -s https://allquiet.app/api/swagger/public-v1/swagger.json \
| python -c "import json,sys; json.dump(json.load(sys.stdin), sys.stdout, separators=(',',':'))" \
> src/mcp_allquiet/openapi.json
See CONTRIBUTING.md.
License
Release files for mcp-allquiet 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_allquiet-0.1.1.tar.gz | 35.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_allquiet-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.0 kB
Release files / mcp_allquiet-0.1.1.tar.gz
| Download URL | mcp_allquiet-0.1.1.tar.gz |
|---|---|
| Size | 35.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f317c8210cb1c21281dffb1d69bbb74a917e81bbaa20c7cb10969784b9c370e
|
|
BLAKE2b-256 checksum How to use checksums |
4adfb2176b5867c4bf53e0490b599d790fd6369da7e32f3fdccff1bc03081a41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mcp_allquiet-0.1.1-py3-none-any.whl
| Download URL | mcp_allquiet-0.1.1-py3-none-any.whl |
|---|---|
| Size | 37.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8858774a24e29ea8f44151545ed52cf88c8ee21a3dab45504eee12f08a6b8fab
|
|
BLAKE2b-256 checksum How to use checksums |
36d1afc08b630214efe574d62c8e361817216982c6124c4c9d6c82e07fcf4c4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|