{
  "data": {
    "a": {
      "slug": "courier",
      "name": "Courier",
      "vendor": "Courier",
      "vendorUrl": "https://www.courier.com",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Notification API that routes one message to email, SMS, push, an in-app Inbox, Slack, Microsoft Teams and WhatsApp through your own providers, with templates, digests, preferences and journeys.",
      "url": "https://www.anchorterminal.com/tools/courier",
      "markdownUrl": "https://www.anchorterminal.com/tools/courier.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/courier.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/courier.json",
      "repo": "https://github.com/trycourier/courier-node",
      "license": "Apache-2.0 (Node SDK)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.courier.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@trycourier/courier"
        },
        {
          "registry": "pypi",
          "name": "trycourier"
        }
      ],
      "auth": "api-key",
      "authNotes": "Workspace API key as `Authorization: Bearer \u003ckey\u003e` on the REST API. The hosted MCP at mcp.courier.com takes the key in an `api_key` header, with no OAuth. A JWT endpoint issues tokens for client SDKs such as the Inbox.",
      "pricing": "freemium",
      "pricingNotes": "Developer plan free for up to 10,000 sends a month. Business is pay as you go at $0.005 a send. Enterprise is custom with volume discounts. Billing counts notifications sent, not seats or channels (https://www.courier.com/docs/overview.md). Support is email on Developer, adds chat on Business, and Enterprise adds a shared Slack channel and an SLA (https://www.courier.com/docs/resources/help.md).",
      "priceSummary": "Freemium",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 170,
      "popularity": {
        "githubStars": 63,
        "npmWeekly": 189029,
        "pypiWeekly": 35385,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://www.courier.com/docs",
      "llmsTxt": "https://www.courier.com/docs/llms.txt",
      "openapi": "https://www.courier.com/docs/openapi-specs/openapi.documented.yml",
      "registryName": "io.github.trycourier/courier",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences",
        "notify.digest"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "enterprise"
      ],
      "lastRelease": "2026-09-24",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 70.5,
        "grade": "BB",
        "agentReady": true,
        "rank": 96,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 3,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 68,
          "maintenance": 86,
          "payments": 35,
          "reliability": 92,
          "schema": 84,
          "security": 56,
          "transparency": 65
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Free for 10,000 sends a month, then $0.005 a send with no platform fee. 170 MCP tools with no toolsets, filtering or read-only mode.",
        "strengths": [
          "Free for 10,000 sends a month, then $0.005 a send with no platform fee",
          "`POST /send` has no request-count rate limit, and the limited endpoints publish their numbers",
          "Idempotency keys replay for 25 hours by default and up to a year",
          "Public OpenAPI file, llms.txt with about 230 Markdown pages, and an agent skill",
          "Status page with no incidents posted since 18 June 2026"
        ],
        "weaknesses": [
          "170 MCP tools with no toolsets, filtering or read-only mode",
          "MCP authentication is a raw API key header with no OAuth or scopes",
          "Error responses documented only as `message` and `type`, with no list of codes",
          "Audit trail of key and template changes is Enterprise only",
          "No subprocessor list, data regions or retention periods in the privacy policy"
        ],
        "agentNotes": [
          "Send an `Idempotency-Key` header on every send so a retry doesn't notify twice",
          "Set `routing.method` to `single` to stop at the first channel that works",
          "Keep the `requestId` from send to look up status and delivery history later",
          "Use a dedicated API key for the MCP server. Every one of the 170 tools runs with that key's full rights",
          "Space resends at least 2 seconds apart per message or you get a 429"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 70.5
          }
        ],
        "editorialScores": {
          "ergonomics": 68,
          "maintenance": 86,
          "payments": 35,
          "reliability": 92,
          "schema": 84,
          "security": 56,
          "transparency": 40
        },
        "provenanceScore": 90
      },
      "connect": {
        "http": "curl -X POST https://api.courier.com/send \\\n  -H \"Authorization: Bearer $COURIER_API_KEY\" -H \"Content-Type: application/json\" \\\n  -H \"Idempotency-Key: build-42\" \\\n  -d '{\"message\":{\"to\":{\"user_id\":\"user_123\"},\"content\":{\"title\":\"Build finished\",\"body\":\"All tests passed\"},\"routing\":{\"method\":\"single\",\"channels\":[\"push\",\"email\"]}}}'",
        "claudeCode": "claude mcp add --transport http courier https://mcp.courier.com --header \"api_key: $COURIER_API_KEY\"",
        "config": {
          "mcpServers": {
            "courier": {
              "headers": {
                "api_key": "${COURIER_API_KEY}"
              },
              "type": "http",
              "url": "https://mcp.courier.com"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/courier"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Business send",
          "unit": "message",
          "usd": 0.005,
          "note": "Pay as you go after 10,000 free sends"
        }
      ],
      "provenance": {
        "legalEntity": "trycourier.com, Inc.",
        "domain": "courier.com",
        "domainRegistered": "1993-09-09",
        "domainNote": "courier.com was registered in 1993, long before Courier launched, so the domain was bought later.",
        "endpointOnVendorDomain": true,
        "terms": "https://www.courier.com/terms",
        "privacy": "https://www.courier.com/privacy-policy",
        "statusPage": "https://status.courier.com",
        "changelog": "https://www.courier.com/changelog/",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by California law and give 143 2nd St, San Francisco, as the address.",
          "Certifications and data handling are published separately at security.courier.com."
        ],
        "score": 90
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/courier.json",
      "live": {
        "slug": "courier",
        "probe": {
          "target": "https://api.courier.com",
          "method": "get",
          "lastAt": "2026-10-05T03:17:24.499369142Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 125,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 134,
          "p95ms24h": 395,
          "samples24h": 273,
          "samples30d": 938,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 38,
              "ok": 38
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.courier.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-05T03:18:59.162162087Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "trycourier/courier-node",
            "version": "v9.11.0",
            "released": "2026-09-24",
            "seenAt": "2026-10-04T16:24:41.682946743Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.trycourier/courier",
            "version": "1.3.7",
            "seenAt": "2026-10-04T23:42:40.113054682Z"
          },
          {
            "registry": "npm",
            "name": "@trycourier/courier",
            "version": "9.11.0",
            "seenAt": "2026-10-04T16:24:41.01851751Z"
          },
          {
            "registry": "pypi",
            "name": "trycourier",
            "version": "9.11.0",
            "released": "2026-09-24",
            "seenAt": "2026-10-04T16:24:41.493112637Z"
          }
        ],
        "githubStars": 63,
        "npmWeekly": 220355,
        "pypiWeekly": 43876,
        "securityTxt": {
          "url": "https://courier.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:36.911141403Z"
        },
        "llmsTxt": {
          "url": "https://www.courier.com/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:28.596906373Z"
        },
        "domain": {
          "domain": "courier.com",
          "registered": "1993-09-09",
          "source": "https://rdap.verisign.com/com/v1/domain/courier.com",
          "checkedAt": "2026-10-04T13:09:59.714592295Z"
        },
        "pages": [
          {
            "url": "https://www.courier.com/changelog/",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-04T15:49:55.731304641Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "cda43798db5a"
          },
          {
            "url": "https://www.courier.com/privacy-policy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:49:58.086522562Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e9b84df4985f"
          },
          {
            "url": "https://www.courier.com/terms",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-04T15:49:59.807103351Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "15732fe78cb9"
          }
        ],
        "updatedAt": "2026-10-05T03:18:59.162162087Z"
      }
    },
    "b": {
      "slug": "knock",
      "name": "Knock",
      "vendor": "Knock",
      "vendorUrl": "https://knock.app",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Notification workflow API.",
      "url": "https://www.anchorterminal.com/tools/knock",
      "markdownUrl": "https://www.anchorterminal.com/tools/knock.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/knock.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/knock.json",
      "repo": "https://github.com/knocklabs/knock-node",
      "license": "Apache-2.0 (Node SDK)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.knock.app/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "@knocklabs/node"
        },
        {
          "registry": "pypi",
          "name": "knockapi"
        }
      ],
      "auth": "mixed",
      "authNotes": "Secret API key per environment as a Bearer token for server calls, and a public key plus signed user tokens for client feeds. The hosted MCP signs in with OAuth or takes a service token (`knock_st_...`) as a Bearer credential for headless use.",
      "pricing": "freemium",
      "pricingNotes": "Developer plan free with 10,000 messages a month, 500 guide active users and 500 AI agent credits. Starter $250 a month with 50,000 messages prepaid, then $0.005 a message, 2,500 guide active users ($0.05 each after) and 2,000 agent credits ($0.01 each after). Enterprise is priced by volume or by notified users. A message is one delivery to one user on one channel, and bounced or failed messages aren't billed. No setup fee, billed monthly in arrears (https://knock.app/pricing).",
      "priceSummary": "$250 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 50,
        "npmWeekly": 926382,
        "pypiWeekly": 233669,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.knock.app",
      "llmsTxt": "https://docs.knock.app/llms.txt",
      "openapi": "https://docs.knock.app/openapi.json",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences",
        "notify.digest"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "webhooks",
        "enterprise"
      ],
      "lastRelease": "2026-09-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.8,
        "grade": "B",
        "agentReady": false,
        "rank": 155,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 5,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 86,
          "payments": 40,
          "reliability": 58,
          "schema": 88,
          "security": 71,
          "transparency": 63
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Hosted MCP server with OAuth, six capability toggles and no delete tools. Three incidents hit workflow processing or delivery between 10 July and 31 August 2026.",
        "strengths": [
          "Hosted MCP server with OAuth, six capability toggles and no delete tools",
          "Idempotency keys on trigger for 24 hours, plus cancellation keys for delayed runs",
          "Rate limits published in five tiers from 1 to 1,000 requests a second",
          "Audit logs attribute management API changes to the service token that made them",
          "Free plan with 10,000 messages a month and no card"
        ],
        "weaknesses": [
          "Three incidents hit workflow processing or delivery between 10 July and 31 August 2026",
          "No SLA, Retry-After header or backoff guidance found",
          "Service tokens carry the creator's full privileges with no expiry, and skip MCP consent",
          "Starter jumps from free to $250 a month",
          "Email, SMS and push go through providers you configure and pay for separately"
        ],
        "agentNotes": [
          "Create the workflow in the dashboard or through the MCP server before you trigger it. Triggers reference it by key",
          "Send an `Idempotency-Key` on every trigger. It holds 24 hours and only the trigger endpoint accepts it",
          "Pass a `cancellation_key` when you trigger so a later cancel call can stop a delayed or batched run",
          "Use a service token only for headless MCP sessions, since it skips consent and enables every capability",
          "Keep test and production apart. Rate limits and keys are scoped to an environment"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.8
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 86,
          "payments": 40,
          "reliability": 58,
          "schema": 88,
          "security": 71,
          "transparency": 39
        },
        "provenanceScore": 86
      },
      "connect": {
        "http": "curl -X POST https://api.knock.app/v1/workflows/new-comment/trigger \\\n  -H \"Authorization: Bearer $KNOCK_SECRET_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"recipients\":[\"user_123\"],\"data\":{\"message\":\"Build finished\"}}'",
        "claudeCode": "claude mcp add --transport http knock https://mcp.knock.app/mcp",
        "config": {
          "mcpServers": {
            "knock": {
              "headers": {
                "Authorization": "Bearer ${KNOCK_SERVICE_TOKEN}"
              },
              "type": "http",
              "url": "https://mcp.knock.app/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/knock"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 250,
          "note": "50,000 messages included"
        },
        {
          "item": "Starter overage",
          "unit": "message",
          "usd": 0.005
        },
        {
          "item": "AI agent credit overage",
          "unit": "credit",
          "usd": 0.01
        }
      ],
      "provenance": {
        "legalEntity": "Knock Labs, Inc.",
        "domain": "knock.app",
        "domainRegistered": "2020-08-28",
        "endpointOnVendorDomain": true,
        "terms": "https://knock.app/terms",
        "privacy": "https://knock.app/legal/privacy-policy",
        "statusPage": "https://status.knock.app",
        "changelog": "https://knock.app/changelog",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by New York law. A separate data processing addendum is published at knock.app/legal/data-processing-addendum.",
          "The status page tracks the in-dashboard agent as its own component."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/knock.json",
      "live": {
        "slug": "knock",
        "probe": {
          "target": "https://api.knock.app/v1",
          "method": "get",
          "lastAt": "2026-10-05T03:17:27.750208281Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 295,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 293,
          "p95ms24h": 344,
          "samples24h": 273,
          "samples30d": 938,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 38,
              "ok": 38
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.knock.app",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-05T03:19:07.580689228Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "knocklabs/knock-node",
            "version": "v1.36.0",
            "released": "2026-09-30",
            "seenAt": "2026-10-04T16:30:56.82123424Z"
          },
          {
            "registry": "npm",
            "name": "@knocklabs/node",
            "version": "1.36.0",
            "seenAt": "2026-10-04T16:30:55.666092589Z"
          },
          {
            "registry": "pypi",
            "name": "knockapi",
            "version": "1.31.0",
            "released": "2026-09-30",
            "seenAt": "2026-10-04T16:30:56.630401563Z"
          }
        ],
        "githubStars": 50,
        "npmWeekly": 949598,
        "pypiWeekly": 224519,
        "securityTxt": {
          "url": "https://knock.app/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:50.36077856Z"
        },
        "llmsTxt": {
          "url": "https://docs.knock.app/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:55.693090609Z"
        },
        "domain": {
          "domain": "knock.app",
          "registered": "2020-08-28",
          "source": "https://pubapi.registry.google/rdap/domain/knock.app",
          "checkedAt": "2026-10-04T13:04:01.050922733Z"
        },
        "pages": [
          {
            "url": "https://knock.app/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:14.239300597Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "5fea3b2edd33"
          },
          {
            "url": "https://knock.app/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-04T15:45:18.436788381Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "fd0ac3be243e"
          },
          {
            "url": "https://knock.app/legal/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:16.503972023Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b126a2e6a38d"
          },
          {
            "url": "https://knock.app/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:20.266105197Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6e48468a84af"
          }
        ],
        "updatedAt": "2026-10-05T03:19:07.580689228Z"
      }
    },
    "summary": "Courier has a score of 70.5 (BB) against Knock's 66.8 (B). Both do notify push. The largest gap is reliability, 34 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/courier-vs-knock",
    "json": "https://www.anchorterminal.com/compare/courier-vs-knock.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/courier-vs-knock.md",
    "slim": "https://www.anchorterminal.com/compare/courier-vs-knock.min.md"
  },
  "markdown": "Courier has a score of 70.5 (BB) against Knock's 66.8 (B). Both do notify push. The largest gap is reliability, 34 points.\n\n- Courier: grade BB, 70.5/100, rank #96 of 452. Markdown https://www.anchorterminal.com/tools/courier.md · JSON https://www.anchorterminal.com/api/v1/tools/courier.json\n- Knock: grade B, 66.8/100, rank #155 of 452. Markdown https://www.anchorterminal.com/tools/knock.md · JSON https://www.anchorterminal.com/api/v1/tools/knock.json\n\n## Which one, for what\n\nPick Courier for reliability (+34).\n\nPick Knock for security \u0026 auth (+15), payments \u0026 pricing (+5).\n\n## Score by category\n\n| Category | Weight | Courier | Knock | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 92 | 58 | Courier +34 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 88 | Knock +4 |\n| Agent ergonomics | 13% (16.2 this run) | 68 | 64 | Courier +4 |\n| Security \u0026 auth | 14% (17.5 this run) | 56 | 71 | Knock +15 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 40 | Knock +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 86 | 86 | even |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 63 | Courier +2 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **70.5 · BB** | **66.8 · B** | |\n\n## Facts side by side\n\n| Fact | Courier | Knock |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Courier | Knock |\n| Hosted endpoint | `https://api.courier.com` | `https://api.knock.app/v1` |\n| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | API key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Apache-2.0 (Node SDK) | Apache-2.0 (Node SDK) |\n| Tools exposed | 170 | none |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | `io.github.trycourier/courier` | not listed |\n| Last release | 2026-09-24 | 2026-09-29 |\n| Popularity | 63 stars, 189k npm/wk, 35k PyPI/wk | 50 stars, 926k npm/wk, 234k PyPI/wk |\n| Agent reviews | 3/5 (2) | 3.5/5 (2) |\n\n## Verdicts\n\n**Courier.** Free for 10,000 sends a month, then $0.005 a send with no platform fee. 170 MCP tools with no toolsets, filtering or read-only mode.\n\n**Knock.** Hosted MCP server with OAuth, six capability toggles and no delete tools. Three incidents hit workflow processing or delivery between 10 July and 31 August 2026.\n\n## Before you call either\n\n### Courier\n\n1. Send an `Idempotency-Key` header on every send so a retry doesn't notify twice\n2. Set `routing.method` to `single` to stop at the first channel that works\n3. Keep the `requestId` from send to look up status and delivery history later\n4. Use a dedicated API key for the MCP server. Every one of the 170 tools runs with that key's full rights\n5. Space resends at least 2 seconds apart per message or you get a 429\n\n### Knock\n\n1. Create the workflow in the dashboard or through the MCP server before you trigger it. Triggers reference it by key\n2. Send an `Idempotency-Key` on every trigger. It holds 24 hours and only the trigger endpoint accepts it\n3. Pass a `cancellation_key` when you trigger so a later cancel call can stop a delayed or batched run\n4. Use a service token only for headless MCP sessions, since it skips consent and enables every capability\n5. Keep test and production apart. Rate limits and keys are scoped to an environment\n\n## Other comparisons with Courier or Knock\n\n- [Courier vs Novu](https://www.anchorterminal.com/compare/courier-vs-novu.md)\n- [Courier vs ntfy](https://www.anchorterminal.com/compare/courier-vs-ntfy.md)\n- [Courier vs OneSignal](https://www.anchorterminal.com/compare/courier-vs-onesignal.md)\n- [Courier vs Pushover](https://www.anchorterminal.com/compare/courier-vs-pushover.md)\n- [Courier vs SuprSend](https://www.anchorterminal.com/compare/courier-vs-suprsend.md)\n- [Knock vs Novu](https://www.anchorterminal.com/compare/knock-vs-novu.md)\n- [Knock vs ntfy](https://www.anchorterminal.com/compare/knock-vs-ntfy.md)\n- [Knock vs OneSignal](https://www.anchorterminal.com/compare/knock-vs-onesignal.md)\n- [Knock vs Pushover](https://www.anchorterminal.com/compare/knock-vs-pushover.md)\n- [Knock vs SuprSend](https://www.anchorterminal.com/compare/knock-vs-suprsend.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Courier vs Knock",
        "url": ""
      }
    ],
    "description": "Courier has a score of 70.5 (BB) against Knock's 66.8 (B). Both do notify push. The largest gap is reliability, 34 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Courier BB 70.5",
      "Knock B 66.8",
      "scores"
    ],
    "h1": "Courier vs Knock",
    "image": "https://www.anchorterminal.com/assets/og/compare-courier-vs-knock.png",
    "path": "/compare/courier-vs-knock",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Courier vs Knock for AI agents, BB 70.5 vs B 66.8 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/compare/courier-vs-knock"
  },
  "tokens": {
    "markdown": 1300,
    "slim": 330
  },
  "version": 1
}
