{
  "markdown": "# WardenPoint MCP server\n\nAn [MCP](https://modelcontextprotocol.io) server that lets an agent configure a\n[WardenPoint](https://wardenpoint.com) account — recipients, contacts, groups,\nnotification rules, escalation policies, on-call schedules, alert-source\nintegrations, routing rules and telephony — without anyone opening the\ndashboard.\n\nIt speaks stdio and exposes **one tool per operation of your installation's own\nOpenAPI description**.\n\n```json\n{\n  \"mcpServers\": {\n    \"wardenpoint\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@wardenpoint/mcp-server\"],\n      \"env\": {\n        \"WARDENPOINT_BASE_URL\": \"https://wardenpoint.com\",\n        \"WARDENPOINT_API_TOKEN\": \"acb_xxxxxxxx.xxxxxxxx\"\n      }\n    }\n  }\n}\n```\n\nThat is the whole installation. Your MCP client starts the server on demand;\nnothing runs between sessions.\n\n## The one rule this server exists to keep\n\n**There is no second copy of the contract here.**\n\nEvery tool — its name, its text, its arguments, their descriptions, their enums\nand bounds, the responses it can answer with — is read at startup from the\nOpenAPI description **served by the installation you are configuring**\n(`GET {WARDENPOINT_BASE_URL}/docs`). Nothing about the API is restated in this\npackage.\n\nThat is deliberate, and it is why the tools cannot quietly drift:\n\n- an endpoint added to your installation appears as a tool the next time the\n  server starts — no package upgrade involved;\n- a description reworded upstream rewords the agent's instructions with it;\n- an operation nobody described is invisible to the agent, which is the correct\n  failure and the reason `--spec-report` exists.\n\nA description bundled inside this package would describe whatever was current\nwhen the package was published, while the agent talks to whatever you actually\nrun. There is no offline fallback for the same reason: every tool here is an\nHTTP call to that installation, so if it cannot be reached, a complete tool list\nwould be a list of things that cannot be done.\n\n## Requirements\n\nNode 20 or newer. No build step, no native modules.\n\n## Environment\n\n| Variable | Required | Meaning |\n| --- | --- | --- |\n| `WARDENPOINT_BASE_URL` | yes | Origin of the installation — no trailing slash, no `/api/v1` suffix. The description carries full paths. |\n| `WARDENPOINT_API_TOKEN` | to call | A company API key from **Dashboard → Integrations → API keys**. Sent as `X-API-Key`. Not needed for `--list-tools` or `--spec-report`. |\n| `WARDENPOINT_ALLOW_INSECURE_TLS` | no | `1` disables certificate verification. **Development stands only** — never against production. |\n| `WARDENPOINT_TIMEOUT_MS` | no | Per-request timeout, default `30000`. |\n| `WARDENPOINT_TOOLS` | no | Comma-separated patterns limiting which tools are offered, e.g. `recipients,groups` or `v1_schedules_*`. Unset means all of them. |\n| `WARDENPOINT_OPENAPI_PATH` | no | Read the description from a local file instead of the installation. For developing against a description that is not deployed yet. |\n\nThe token is read from the environment at every start and is never written\nanywhere by this package.\n\n### What the key is allowed to do\n\nAbilities are chosen when you issue the key, and a 403 names the one that was\nmissing:\n\n- `config.read` — read the whole configuration. A good place to start: the\n  agent can explain an account somebody else built and change nothing.\n- `config.write` — create, update, delete.\n- `notifications.send` / `notifications.read` — fire alerts and inspect them.\n\n**No ability can read a secret.** There is no such ability in the vocabulary, so\nit cannot be granted by mistake. The API reports whether a credential is set and\nwhether it verified — never its value.\n\n## What the tool list costs\n\nEvery tool definition is sent to the model before the person says anything, so\nit is spent whether or not the conversation ever touches WardenPoint. The full\nset of 89 tools is roughly **64k tokens** — on a 200k context window, a third\nof it.\n\nThe server prints the figure at startup so it is not an invisible cost:\n\n```\nwardenpoint-mcp-server: 89 tools (~63k tokens of context; narrow it with WARDENPOINT_TOOLS) from …\n```\n\nIf a session only ever touches part of the product, say so:\n\n```json\n\"env\": { \"WARDENPOINT_TOOLS\": \"recipients,groups,schedules\" }\n```\n\nThat drops the same run to a handful of tools and a few thousand tokens.\nPatterns match tool names (`v1_recipients_store`), and `*` works. Leave it\nunset and you get everything, which is the safe default: a tool that quietly\ndisappeared looks like a missing product capability.\n\n## Running\n\n```bash\nnpx -y @wardenpoint/mcp-server --list-tools     # every tool, with its arguments\nnpx -y @wardenpoint/mcp-server --spec-report    # gaps in the description itself\n```\n\nBoth talk to `WARDENPOINT_BASE_URL` to fetch the description; neither needs a\ntoken. Without arguments the process speaks MCP over stdio and is meant to be\nstarted by a client, not by hand.\n\n## Two credentials, and why they are not interchangeable\n\n- **API key** (`WARDENPOINT_API_TOKEN`) — who you are. Every configuration tool\n  uses it.\n- **Integration secret** — proves a specific alert-source webhook is genuine.\n  Two tools accept it as an argument; it is not read from the environment and\n  not stored here.\n\n## What this server deliberately cannot do\n\nTwo steps in setting up an account need a human at a screen, and both stay that\nway on purpose:\n\n- **Scanning a Telegram QR code.**\n- **Typing a provider secret.**\n\nFor each, the agent asks the installation to issue a one-time link, shows it to\nthe person, and polls for the result. The person opens that link in the\ndashboard, behind their own login, and types the value themselves. Ask an agent\nto relay a secret through the conversation and it will refuse — that is what the\nlink exists to avoid.\n\n## Errors reach the agent intact\n\nThe API spends real effort explaining refusals — which ability was missing,\nwhich field failed validation, why a send queued nothing. This server passes the\nbody through whole, on success and failure alike, because an agent repairs\nitself from that text and nothing else.\n\n## Licence\n\nMIT. See [LICENSE](LICENSE).\n\nIssues and contributions: <https://github.com/WardenPoint/wardenpoint-mcp>.\n",
  "bytes": 6238,
  "sha": "d163c4a0c552edf23c481b10feba6280f622a63483a2cff238370e01aced3e82",
  "repo_slug": "wardenpoint/wardenpoint-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_wardenpoint_wardenpoint_mcp_e89285e0/readme"
}