{
  "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": 146,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 3,
        "methodology": "0.4",
        "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.",
        "bestFor": "A product team that wants simple per-send billing and one API across many providers, and for agents that only send.",
        "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.4",
            "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": 89
      },
      "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": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/courier.json",
      "live": {
        "slug": "courier",
        "probe": {
          "target": "https://api.courier.com",
          "method": "get",
          "lastAt": "2026-10-09T09:26:47.32328647Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 135,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 142,
          "p95ms24h": 393,
          "samples24h": 261,
          "samples30d": 2085,
          "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": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 101,
              "ok": 101
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.courier.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-09T09:25:00.390994061Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "trycourier/courier-node",
            "version": "v9.11.0",
            "released": "2026-09-24",
            "seenAt": "2026-10-08T16:07:13.299509915Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.trycourier/courier",
            "version": "1.3.7",
            "seenAt": "2026-10-09T02:57:46.004536428Z"
          },
          {
            "registry": "npm",
            "name": "@trycourier/courier",
            "version": "9.11.0",
            "seenAt": "2026-10-08T16:07:09.615433373Z"
          },
          {
            "registry": "pypi",
            "name": "trycourier",
            "version": "9.11.0",
            "released": "2026-09-24",
            "seenAt": "2026-10-08T16:07:13.115588719Z"
          }
        ],
        "githubStars": 63,
        "npmWeekly": 220043,
        "pypiWeekly": 44461,
        "securityTxt": {
          "url": "https://courier.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:56.662125009Z"
        },
        "llmsTxt": {
          "url": "https://www.courier.com/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:16.705084417Z"
        },
        "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-08T18:27:15.121337565Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "cda43798db5a"
          },
          {
            "url": "https://www.courier.com/privacy-policy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-08T18:27:17.54134974Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e9b84df4985f"
          },
          {
            "url": "https://www.courier.com/terms",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-08T18:27:19.675065413Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "15732fe78cb9"
          }
        ],
        "updatedAt": "2026-10-09T09:26:47.32328647Z"
      }
    },
    "answer": "Courier and Firebase Cloud Messaging score within a point of each other on agent readiness, 70.5 (BB) and 69.8 (B). Firebase Cloud Messaging leads on security \u0026 auth, payments \u0026 pricing and transparency \u0026 trust.",
    "b": {
      "slug": "firebase-cloud-messaging",
      "name": "Firebase Cloud Messaging",
      "vendor": "Google",
      "vendorUrl": "https://firebase.google.com/products/cloud-messaging",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Google's push messaging service for Android, Apple and web apps. A server sends notification or data messages to devices, topics or conditions through the HTTP v1 API or the Firebase Admin SDKs.",
      "url": "https://www.anchorterminal.com/tools/firebase-cloud-messaging",
      "markdownUrl": "https://www.anchorterminal.com/tools/firebase-cloud-messaging.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/firebase-cloud-messaging.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/firebase-cloud-messaging.json",
      "repo": "https://github.com/firebase/firebase-admin-node",
      "license": "Proprietary service under the Google APIs Terms of Service. The Firebase Admin SDKs are Apache-2.0",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://fcm.googleapis.com",
      "packages": [
        {
          "registry": "npm",
          "name": "firebase-admin"
        },
        {
          "registry": "pypi",
          "name": "firebase-admin"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 bearer token minted from a service account key or Application Default Credentials, with the scope `https://www.googleapis.com/auth/firebase.messaging`. Sending needs the IAM permission `cloudmessaging.messages.create` on the project. Access is self-serve. A person creates the Firebase project and the service account in the console, with no review or sales step.",
      "pricing": "free",
      "pricingNotes": "No charge. The pricing page lists Cloud Messaging as no-cost on the Spark and Blaze plans, and Spark needs no billing account or card, so an agent's owner can start without a contract. The optional BigQuery export of delivery data is billed by BigQuery (https://firebase.google.com/pricing, checked 2026-10-08).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the FCM docs, the Discovery document or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 11536195,
        "pypiWeekly": 3790113,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://firebase.google.com/docs/cloud-messaging",
      "llmsTxt": "https://firebase.google.com/docs/llms.txt",
      "openapi": "https://fcm.googleapis.com/$discovery/rest?version=v1",
      "capabilities": [
        "notify.push"
      ],
      "tags": [
        "hosted",
        "free",
        "push",
        "oauth",
        "llms-txt",
        "typescript",
        "python",
        "java",
        "go",
        "dotnet",
        "mcp",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-09-24",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 69.8,
        "grade": "B",
        "agentReady": false,
        "rank": 162,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 70,
          "maintenance": 83,
          "payments": 40,
          "reliability": 66,
          "schema": 86,
          "security": 68,
          "transparency": 81
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Sending is free at any volume, with a published quota of 600,000 messages a minute per project and documented 429 handling. FCM is push transport only. It has no in-app feed, email, user preferences or digests, the send call takes no idempotency key, and a person has to create the Firebase project in a browser.",
        "bestFor": "The push transport under an app that already holds device registrations, at no charge.",
        "strengths": [
          "No charge for sending on either Firebase plan, and no billing account needed (https://firebase.google.com/pricing)",
          "Default quota of 600,000 messages a minute per project, with 429 responses that carry `retry-after` and written backoff guidance",
          "Short-lived OAuth 2.0 tokens with a `firebase.messaging` scope, and IAM permissions per action such as `cloudmessaging.messages.create`",
          "Public Discovery document (revision 20261006), a docs `llms.txt` and a Markdown twin of every docs page",
          "Dated deprecation notice in September 2026 that gives 12 months before the Instance ID server APIs and device groups stop on 29 September 2027"
        ],
        "weaknesses": [
          "Push transport only. No in-app feed, email, SMS, user preferences, digests or templates",
          "No idempotency key on `messages:send`, so a retried request can reach the device twice",
          "One HTTP request per message. Only the Admin SDKs group up to 500 sends in a call",
          "FCM is absent from Google Cloud's list of services with audit logs, and per-message delivery data needs a BigQuery export",
          "One incident on 1 September 2026 lowered availability in North America for 3 hours 51 minutes, and no SLA names FCM"
        ],
        "agentNotes": [
          "Mint an access token from a service account with the scope `https://www.googleapis.com/auth/firebase.messaging`, then POST to `https://fcm.googleapis.com/v1/projects/\u003cproject-id\u003e/messages:send`",
          "Set `validate_only` to true to test a message or a registration without sending it",
          "On 429 wait for the `retry-after` header, or 60 seconds if it is absent. Retry 500 and 503 with exponential backoff and jitter, and never retry 400, 401, 403 or 404",
          "Drop a registration when the error is `UNREGISTERED` (404). Keep your own record of sends, because a retry after a timeout can produce a duplicate",
          "Target `fid` in new code. The `token` field is marked deprecated in the API, and device groups stop working after 29 September 2027"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 69.8
          }
        ],
        "editorialScores": {
          "ergonomics": 70,
          "maintenance": 83,
          "payments": 40,
          "reliability": 66,
          "schema": 86,
          "security": 68,
          "transparency": 68
        },
        "provenanceScore": 94
      },
      "connect": {
        "install": "npm install firebase-admin   # or: pip install firebase-admin",
        "http": "curl -X POST \"https://fcm.googleapis.com/v1/projects/$FIREBASE_PROJECT_ID/messages:send\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"message\":{\"topic\":\"news\",\"notification\":{\"title\":\"Build finished\",\"body\":\"All tests passed\"}}}'",
        "claudeCode": "claude mcp add firebase npx -- -y firebase-tools@latest mcp"
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/firebase-cloud-messaging"
      },
      "sameCompany": [
        "gemini-api",
        "gemini-embedding",
        "vertex-ai-tuning",
        "google-model-armor",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "gemini-live",
        "google-adk",
        "google-secret-manager",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "google-drive-api",
        "gemini-cli",
        "google-search-console",
        "google-ads-api",
        "google-forms",
        "google-sheets-api",
        "gmail-api"
      ],
      "area": "everyday",
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "domainNote": "The endpoint is on googleapis.com, Google's API domain. The docs are on firebase.google.com.",
        "endpointOnVendorDomain": true,
        "terms": "https://developers.google.com/terms",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://status.firebase.google.com",
        "changelog": "https://firebase.google.com/support/releases",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "firebase.google.com/terms, last modified 24 September 2026, places Cloud Messaging under the Google APIs Terms of Service and the Firebase Data Processing and Security Terms.",
          "The Google APIs Terms of Service were last modified on 9 November 2021, name Google LLC of Mountain View, California, and choose California law.",
          "Google's privacy policy is effective 1 October 2026. Firebase's own privacy and security page, last modified 15 September 2026, gives the per-service data and retention table.",
          "www.google.com/.well-known/security.txt expires on 2030-04-01. firebase.google.com/.well-known/security.txt returns 404.",
          "The registration date of google.com is taken from our earlier Google listings and was not looked up again today."
        ],
        "score": 94
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/firebase-cloud-messaging.json",
      "live": {
        "slug": "firebase-cloud-messaging",
        "probe": {
          "target": "https://fcm.googleapis.com",
          "method": "get",
          "lastAt": "2026-10-09T09:26:50.167166367Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 99,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 39,
          "p95ms24h": 99,
          "samples24h": 20,
          "samples30d": 20,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 20,
              "ok": 20
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.firebase.google.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-09T07:57:54.993043607Z"
        },
        "updatedAt": "2026-10-09T09:26:50.167166367Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Courier",
        "b": "Google",
        "name": "Vendor"
      },
      {
        "a": "https://api.courier.com",
        "b": "https://fcm.googleapis.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Apache-2.0 (Node SDK)",
        "b": "Proprietary service under the Google APIs Terms of Service. The Firebase Admin SDKs are Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "170",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "io.github.trycourier/courier",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-24",
        "b": "2026-09-24",
        "name": "Last release"
      },
      {
        "a": "2026-09-10",
        "b": "2021-11-09",
        "name": "Terms last updated"
      },
      {
        "a": "2025-12-08",
        "b": "2026-10-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "63 stars, 189k npm/wk, 35k PyPI/wk",
        "b": "11.5M npm/wk, 3.8M PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "3/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Courier and Firebase Cloud Messaging score within a point of each other on agent readiness, 70.5 (BB) and 69.8 (B). Firebase Cloud Messaging leads on security \u0026 auth, payments \u0026 pricing and transparency \u0026 trust.",
        "question": "Which is better for AI agents, Courier or Firebase Cloud Messaging?"
      },
      {
        "answer": "Courier needs an API key. Firebase Cloud Messaging uses an OAuth sign-in.",
        "question": "Do Courier and Firebase Cloud Messaging need an API key?"
      },
      {
        "answer": "Yes. Courier has a hosted endpoint at https://api.courier.com and Firebase Cloud Messaging at https://fcm.googleapis.com.",
        "question": "Can an agent call Courier and Firebase Cloud Messaging without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 92 against 66"
        ],
        "also": [
          "Agent-ready, a grade of BB or better"
        ],
        "goodFor": "A product team that wants simple per-send billing and one API across many providers, and for agents that only send.",
        "slug": "courier",
        "watchFor": "170 MCP tools with no toolsets, filtering or read-only mode"
      },
      {
        "aheadOn": [
          "Security \u0026 auth, 68 against 56",
          "Payments \u0026 pricing, 40 against 35",
          "Transparency \u0026 trust, 81 against 65"
        ],
        "also": null,
        "goodFor": "The push transport under an app that already holds device registrations, at no charge.",
        "slug": "firebase-cloud-messaging",
        "watchFor": "Push transport only. No in-app feed, email, SMS, user preferences, digests or templates"
      }
    ],
    "job": {
      "capability": "notify.push",
      "name": "Notify push"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-sns-vs-courier.json",
        "title": "Amazon SNS vs Courier",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-courier"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-sns-vs-firebase-cloud-messaging.json",
        "title": "Amazon SNS vs Firebase Cloud Messaging",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-firebase-cloud-messaging"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-knock.json",
        "title": "Courier vs Knock",
        "url": "https://www.anchorterminal.com/compare/courier-vs-knock"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-magicbell.json",
        "title": "Courier vs MagicBell",
        "url": "https://www.anchorterminal.com/compare/courier-vs-magicbell"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-novu.json",
        "title": "Courier vs Novu",
        "url": "https://www.anchorterminal.com/compare/courier-vs-novu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-ntfy.json",
        "title": "Courier vs ntfy",
        "url": "https://www.anchorterminal.com/compare/courier-vs-ntfy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-onesignal.json",
        "title": "Courier vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/courier-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-pushover.json",
        "title": "Courier vs Pushover",
        "url": "https://www.anchorterminal.com/compare/courier-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-suprsend.json",
        "title": "Courier vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/courier-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-knock.json",
        "title": "Firebase Cloud Messaging vs Knock",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-knock"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell.json",
        "title": "Firebase Cloud Messaging vs MagicBell",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-novu.json",
        "title": "Firebase Cloud Messaging vs Novu",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-novu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-ntfy.json",
        "title": "Firebase Cloud Messaging vs ntfy",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-ntfy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-onesignal.json",
        "title": "Firebase Cloud Messaging vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-pushover.json",
        "title": "Firebase Cloud Messaging vs Pushover",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.json",
        "title": "Firebase Cloud Messaging vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend"
      }
    ],
    "scores": [
      {
        "by": 26,
        "courier": 92,
        "edge": "courier",
        "firebase-cloud-messaging": 66,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "courier": 84,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 86,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 2,
        "courier": 68,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 70,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 12,
        "courier": 56,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 68,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 5,
        "courier": 35,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 40,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 3,
        "courier": 86,
        "edge": "courier",
        "firebase-cloud-messaging": 83,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 16,
        "courier": 65,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 81,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Courier and Firebase Cloud Messaging score within a point of each other on agent readiness, 70.5 (BB) and 69.8 (B). Firebase Cloud Messaging leads on security \u0026 auth, payments \u0026 pricing and transparency \u0026 trust. Both do notify push.",
    "verdicts": {
      "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.",
      "firebase-cloud-messaging": "Sending is free at any volume, with a published quota of 600,000 messages a minute per project and documented 429 handling. FCM is push transport only. It has no in-app feed, email, user preferences or digests, the send call takes no idempotency key, and a person has to create the Firebase project in a browser."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging",
    "json": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.md",
    "slim": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.min.md"
  },
  "markdown": "Courier and Firebase Cloud Messaging score within a point of each other on agent readiness, 70.5 (BB) and 69.8 (B). Firebase Cloud Messaging leads on security \u0026 auth, payments \u0026 pricing and transparency \u0026 trust. Both do notify push.\n\n- Courier: grade BB, 70.5/100, rank #146 of 842. Markdown https://www.anchorterminal.com/tools/courier.md · JSON https://www.anchorterminal.com/api/v1/tools/courier.json\n- Firebase Cloud Messaging: grade B, 69.8/100, rank #162 of 842. Markdown https://www.anchorterminal.com/tools/firebase-cloud-messaging.md · JSON https://www.anchorterminal.com/api/v1/tools/firebase-cloud-messaging.json\n\n## Which one, for what\n\n### Courier (BB)\n\nGood for: A product team that wants simple per-send billing and one API across many providers, and for agents that only send.\n\nAhead on:\n- Reliability, 92 against 66\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n\nWatch for: 170 MCP tools with no toolsets, filtering or read-only mode\n\n### Firebase Cloud Messaging (B)\n\nGood for: The push transport under an app that already holds device registrations, at no charge.\n\nAhead on:\n- Security \u0026 auth, 68 against 56\n- Payments \u0026 pricing, 40 against 35\n- Transparency \u0026 trust, 81 against 65\n\nWatch for: Push transport only. No in-app feed, email, SMS, user preferences, digests or templates\n\n\n## Score by category\n\n| Category | Weight | Courier | Firebase Cloud Messaging | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 92 | 66 | Courier +26 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 86 | Firebase Cloud Messaging +2 |\n| Agent ergonomics | 13% (16.2 this run) | 68 | 70 | Firebase Cloud Messaging +2 |\n| Security \u0026 auth | 14% (17.5 this run) | 56 | 68 | Firebase Cloud Messaging +12 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 40 | Firebase Cloud Messaging +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 86 | 83 | Courier +3 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 81 | Firebase Cloud Messaging +16 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **70.5 · BB** | **69.8 · B** | |\n\n## Facts side by side\n\n| Fact | Courier | Firebase Cloud Messaging |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Courier | Google |\n| Hosted endpoint | `https://api.courier.com` | `https://fcm.googleapis.com` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | API key | OAuth |\n| Pricing | Freemium | Free |\n| x402 | no | no |\n| Licence | Apache-2.0 (Node SDK) | Proprietary service under the Google APIs Terms of Service. The Firebase Admin SDKs are Apache-2.0 |\n| Tools exposed | 170 | none |\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-24 |\n| Terms last updated | 2026-09-10 | 2021-11-09 |\n| Privacy policy last updated | 2025-12-08 | 2026-10-01 |\n| Customer content may train models | not found in the text | yes |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 63 stars, 189k npm/wk, 35k PyPI/wk | 11.5M npm/wk, 3.8M PyPI/wk |\n| Agent reviews | 3/5 (2) | none |\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**Firebase Cloud Messaging.** Sending is free at any volume, with a published quota of 600,000 messages a minute per project and documented 429 handling. FCM is push transport only. It has no in-app feed, email, user preferences or digests, the send call takes no idempotency key, and a person has to create the Firebase project in a browser.\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### Firebase Cloud Messaging\n\n1. Mint an access token from a service account with the scope `https://www.googleapis.com/auth/firebase.messaging`, then POST to `https://fcm.googleapis.com/v1/projects/\u003cproject-id\u003e/messages:send`\n2. Set `validate_only` to true to test a message or a registration without sending it\n3. On 429 wait for the `retry-after` header, or 60 seconds if it is absent. Retry 500 and 503 with exponential backoff and jitter, and never retry 400, 401, 403 or 404\n4. Drop a registration when the error is `UNREGISTERED` (404). Keep your own record of sends, because a retry after a timeout can produce a duplicate\n5. Target `fid` in new code. The `token` field is marked deprecated in the API, and device groups stop working after 29 September 2027\n\n## Questions\n\n### Which is better for AI agents, Courier or Firebase Cloud Messaging?\n\nCourier and Firebase Cloud Messaging score within a point of each other on agent readiness, 70.5 (BB) and 69.8 (B). Firebase Cloud Messaging leads on security \u0026 auth, payments \u0026 pricing and transparency \u0026 trust.\n\n### Do Courier and Firebase Cloud Messaging need an API key?\n\nCourier needs an API key. Firebase Cloud Messaging uses an OAuth sign-in.\n\n### Can an agent call Courier and Firebase Cloud Messaging without installing anything?\n\nYes. Courier has a hosted endpoint at https://api.courier.com and Firebase Cloud Messaging at https://fcm.googleapis.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.json, and with the fewest tokens: https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"courier\", \"b\": \"firebase-cloud-messaging\"}`. From a terminal: `anchor compare courier firebase-cloud-messaging`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/courier.json and https://www.anchorterminal.com/api/v1/tools/firebase-cloud-messaging.json\n\n## Other comparisons with Courier or Firebase Cloud Messaging\n\n- [Amazon SNS vs Courier](https://www.anchorterminal.com/compare/amazon-sns-vs-courier.md)\n- [Amazon SNS vs Firebase Cloud Messaging](https://www.anchorterminal.com/compare/amazon-sns-vs-firebase-cloud-messaging.md)\n- [Courier vs Knock](https://www.anchorterminal.com/compare/courier-vs-knock.md)\n- [Courier vs MagicBell](https://www.anchorterminal.com/compare/courier-vs-magicbell.md)\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- [Firebase Cloud Messaging vs Knock](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-knock.md)\n- [Firebase Cloud Messaging vs MagicBell](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell.md)\n- [Firebase Cloud Messaging vs Novu](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-novu.md)\n- [Firebase Cloud Messaging vs ntfy](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-ntfy.md)\n- [Firebase Cloud Messaging vs OneSignal](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-onesignal.md)\n- [Firebase Cloud Messaging vs Pushover](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-pushover.md)\n- [Firebase Cloud Messaging vs SuprSend](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "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 Firebase Cloud Messaging",
        "url": ""
      }
    ],
    "description": "Courier and Firebase Cloud Messaging score within a point of each other on agent readiness, 70.5 (BB) and 69.8 (B). Firebase Cloud Messaging leads on security \u0026 auth, payments \u0026 pricing and transparency \u0026 trust. Both do notify push. Category scores, facts, verdicts and agent…",
    "facts": [
      "Courier BB 70.5",
      "Firebase Cloud Messaging B 69.8",
      "scores"
    ],
    "h1": "Courier vs Firebase Cloud Messaging",
    "image": "https://www.anchorterminal.com/assets/og/compare-courier-vs-firebase-cloud-messaging.png",
    "path": "/compare/courier-vs-firebase-cloud-messaging",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Courier vs Firebase Cloud Messaging for AI agents, BB 70.5 vs B 69.8",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging"
  },
  "tokens": {
    "markdown": 2250,
    "slim": 680
  },
  "version": 1
}
