{
  "markdown": "# Kordi MCP Server\n\n[![smithery badge](https://smithery.ai/badge/hello-60oz/kordi)](https://smithery.ai/servers/hello-60oz/kordi)\n\n> Track, analyze, and act on your streaming & SaaS subscriptions — from any AI agent.\n\n**Kordi** is a subscription intelligence platform. This [Model Context Protocol](https://modelcontextprotocol.io) server lets any MCP-speaking AI client — Claude Desktop, Cursor, Raycast, or your own agent — read a user's tracked subscriptions, score their billing health, surface savings, generate cancel/pause links, and push newly discovered subscriptions in.\n\nIt's a **hosted, remote** MCP server. There's nothing to install or run locally — you connect to a URL with a token.\n\n- **Endpoint:** `https://kordiapp.com/mcp`\n- **Transport:** Streamable HTTP\n- **Auth:** `Authorization: Bearer <token>`\n- **Registry:** [`com.kordiapp/kordi-mcp-server`](https://registry.modelcontextprotocol.io/v0/servers?search=kordi) on the official MCP Registry\n- **Docs:** [kordiapp.com/developers](https://kordiapp.com/developers)\n\n---\n\n## Quick start\n\n### 1. Get a token\n\nSign in at **[kordiapp.com](https://kordiapp.com)** and generate an API token at **[kordiapp.com/token](https://kordiapp.com/token?ref=github)**. Tokens are valid for **90 days** and grant read/write access to *your own* subscriptions only.\n\n### 2. Connect your client\n\n**Claude Desktop** — add this to your `claude_desktop_config.json` (see [`examples/`](./examples/claude_desktop_config.json)):\n\n```json\n{\n  \"mcpServers\": {\n    \"kordi\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://kordiapp.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_TOKEN_HERE\"\n      }\n    }\n  }\n}\n```\n\n**Any client / raw HTTP** — pass the token as a Bearer header (preferred — it never lands in logs, Referer, or history):\n\n```bash\n# List the available tools\ncurl -X POST \"https://kordiapp.com/mcp\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN_HERE\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'\n```\n\n> A legacy `?token=<token>` query-string form is also accepted for back-compat, but prefer the header.\n\n### 3. Ask away\n\n> *\"What am I paying for each month?\"*\n> *\"Which subscriptions could I pause to save money?\"*\n> *\"Do I have any price hikes or trials ending soon?\"*\n> *\"I just signed up for Apple TV+ at $9.99/mo — track it.\"*\n\n---\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| **`kordi_list_subscriptions`** | List the user's tracked subscriptions. Paginated (`offset`/`limit`), optional `include_paused`. Sensitive card fields are never returned. |\n| **`kordi_analyze_billing_health`** | Score billing health 0–100: price hikes vs. market, dormant services, savings potential, billing-date clustering. |\n| **`kordi_get_cancellation_route`** | Generate a deep link to cancel or pause a service, and record the intent. Call only on explicit user request. |\n| **`kordi_ingest_subscription`** | Push a discovered subscription into Kordi (used by discovery sources like email/on-screen agents). Dedupes by name; returns a signed pause link. |\n| **`kordi_get_top_shows`** | Most-swiped / most-liked shows across all Kordi users. Aggregate only, no PII. |\n\nPlus a resource:\n\n| Resource | URI | What it is |\n|---|---|---|\n| **`subscription-pulse`** | `kordi://subscription-pulse` | A proactive billing-health snapshot (expiring trials, next bill, monthly spend, savings, price alerts) for ambient feeds. |\n\n> A platform-analytics tool (`kordi_get_analytics`) also exists but is restricted to administrators.\n\n### Tool detail\n\n<details>\n<summary><b>kordi_list_subscriptions</b> — read</summary>\n\n**Args**\n- `include_paused` (boolean, default `false`) — include paused subscriptions\n- `offset` (number, default `0`) — pagination start\n- `limit` (number, 1–100, default `50`) — page size\n\n**Returns**\n```json\n{\n  \"subscriptions\": [ { \"id\": \"netflix\", \"name\": \"Netflix\", \"price\": 15.99, \"billingDate\": 12, \"state\": \"ACTIVE\" } ],\n  \"count\": 1,\n  \"total_count\": 1,\n  \"offset\": 0,\n  \"limit\": 50,\n  \"has_more\": false,\n  \"total_monthly\": 15.99\n}\n```\n</details>\n\n<details>\n<summary><b>kordi_analyze_billing_health</b> — read</summary>\n\nTakes no arguments. Returns total monthly spend, active/paused counts, `price_hikes`, `unused_services`, `savings_potential`, `top_savings_candidate`, `billing_clusters`, and a `health_score` (0–100, higher is healthier).\n</details>\n\n<details>\n<summary><b>kordi_get_cancellation_route</b> — action</summary>\n\n**Args**\n- `service_id` (string, required) — the exact `id` from `kordi_list_subscriptions`\n- `reason` (`too_expensive` | `not_using` | `switching_service` | `finished_content`, optional)\n\nReturns `{ \"success\": true, \"service\": \"Netflix\", \"cancellation_url\": \"https://…\" }`. Call only when the user explicitly asks to cancel or pause.\n</details>\n\n<details>\n<summary><b>kordi_ingest_subscription</b> — write</summary>\n\n**Args**\n- `name` (string, required) — e.g. `\"Disney+\"`\n- `amount` (number, required) — monthly amount in USD\n- `bill_date` (number 1–31, or ISO date string) — billing day or date\n- `source` (`qira` | `screenpipe` | `manual`, optional) — discovery-source attribution\n\nDedupes by name (re-calling updates amount/bill date). Returns `{ status, subscription, pause_link, dashboard_url }`.\n</details>\n\n<details>\n<summary><b>kordi_get_top_shows</b> — read</summary>\n\n**Args**\n- `limit` (number, 1–50, default `10`)\n- `sort_by` (`swipes` | `likes` | `like_rate`, default `swipes`)\n\nReturns a cross-user popularity leaderboard. Aggregate only — no per-user data.\n</details>\n\n---\n\n## Auth & identity model\n\n- Your token resolves server-side to your Kordi account. Every tool call is **scoped to your account** — you can only ever see and act on your own subscriptions.\n- Identity is bound once per session at the edge; a session cannot be re-bound to a different user mid-stream.\n- Sensitive card fields (PAN, CVV, expiry, raw token) are **stripped** from every response — they never leave the server.\n- Tokens are short-to-medium-lived (90 days). Treat them as secrets. You can rotate at [kordiapp.com/token](https://kordiapp.com/token?ref=github) at any time.\n\n## Limits\n\n- **Rate limit:** 20 tool calls per 60 seconds per session. Over the limit, tools return a back-off message instead of hitting the database — your agent should wait, not retry-loop.\n- **Response size:** large list responses are capped (~25k chars); page with `offset`/`limit` for big accounts.\n- **Pause/cancel links** are signed and expire after 7 days.\n\n---\n\n## For integration partners\n\nDiscovery sources (email-intelligence agents, on-screen detection pipes, etc.) can push subscriptions into a user's Kordi account via `kordi_ingest_subscription`, or provision brand-new users via the public `POST /api/guest-ingest` endpoint. See [kordiapp.com/developers](https://kordiapp.com/developers) for the partner provisioning flow, source attribution, and the `x-partner-key` model.\n\n## Links\n\n- **Web app:** [kordiapp.com](https://kordiapp.com)\n- **Developer docs:** [kordiapp.com/developers](https://kordiapp.com/developers)\n- **Get a token:** [kordiapp.com/token](https://kordiapp.com/token?ref=github)\n- **MCP Registry listing:** [`com.kordiapp/kordi-mcp-server`](https://registry.modelcontextprotocol.io/v0/servers?search=kordi)\n- **Model Context Protocol:** [modelcontextprotocol.io](https://modelcontextprotocol.io)\n\n## License\n\nDocumentation and the registry manifest in this repository are released under the [MIT License](./LICENSE). The Kordi server, brand, and backend are proprietary; this repo does not contain server source code.\n",
  "bytes": 7593,
  "sha": "01464e4e6a6fce38bc0e34b383555d93546f9bc7f59fbf572edf2007b0d96333",
  "repo_slug": "kordi-labs/kordi-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_kordiapp_kordi_mcp_server_c4039933/readme"
}