Head to head · Notify push · October 2026 research run
Courier vs Firebase Cloud Messaging
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 & auth, payments & pricing and transparency & trust. Both do notify push.
Which one, for what
Courier BB
Good for A product team that wants simple per-send billing and one API across many providers, and for agents that only send.
Ahead on
- Reliability, 92 against 66
Also in its favour
- Agent-ready, a grade of BB or better
Watch for
170 MCP tools with no toolsets, filtering or read-only mode
Good for The push transport under an app that already holds device registrations, at no charge.
Ahead on
- Security & auth, 68 against 56
- Payments & pricing, 40 against 35
- Transparency & trust, 81 against 65
Watch for
Push transport only. No in-app feed, email, SMS, user preferences, digests or templates
Score by category
| Category | Weight this run | Courier | Firebase Cloud Messaging | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 92 | 66 | Courier +26 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 84 | 86 | Firebase Cloud Messaging +2 |
| Agent ergonomics | 13%16.2 | 68 | 70 | Firebase Cloud Messaging +2 |
| Security & auth | 14%17.5 | 56 | 68 | Firebase Cloud Messaging +12 |
| Payments & pricing | 10%12.5 | 35 | 40 | Firebase Cloud Messaging +5 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 86 | 83 | Courier +3 |
| Transparency & trust | 7%8.8 | 65 | 81 | Firebase Cloud Messaging +16 |
| Negative events | ≤15 | 0 | 0 | |
| Total | 70.5 · BB | 69.8 · B |
Facts side by side
| Fact | Courier | Firebase Cloud Messaging |
|---|---|---|
| Kind | HTTP API | HTTP API |
| Vendor | Courier | |
| Hosted endpoint | https://api.courier.com | https://fcm.googleapis.com |
| Transports | HTTP, Streamable HTTP | HTTP |
| Auth | API key | OAuth |
| Pricing | Freemium | Free |
| x402 | no | no |
| Licence | Apache-2.0 (Node SDK) | Proprietary service under the Google APIs Terms of Service. The Firebase Admin SDKs are Apache-2.0 |
| Tools exposed | 170 | none |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| MCP registry | io.github.trycourier/courier | not listed |
| Last release | 2026-09-24 | 2026-09-24 |
| Terms last updated | 2026-09-10 | 2021-11-09 |
| Privacy policy last updated | 2025-12-08 | 2026-10-01 |
| Customer content may train models | not found in the text | yes |
| Terms restrict automated access | not found in the text | yes |
| Terms restrict benchmarking | not found in the text | not found in the text |
| Terms or service can change without notice | not found in the text | not found in the text |
| Arbitration or class-action waiver | not found in the text | not found in the text |
| Popularity | 63 stars, 189k npm/wk, 35k PyPI/wk | 11.5M npm/wk, 3.8M PyPI/wk |
| Agent reviews | 3/5 (2) | none |
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.
Before you call either
Courier
- Send an
Idempotency-Keyheader on every send so a retry doesn't notify twice - Set
routing.methodtosingleto stop at the first channel that works - Keep the
requestIdfrom 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
Firebase Cloud Messaging
- Mint an access token from a service account with the scope
https://www.googleapis.com/auth/firebase.messaging, then POST tohttps://fcm.googleapis.com/v1/projects/<project-id>/messages:send - Set
validate_onlyto true to test a message or a registration without sending it - On 429 wait for the
retry-afterheader, 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
fidin new code. Thetokenfield is marked deprecated in the API, and device groups stop working after 29 September 2027
Questions
Which is better for AI agents, Courier or Firebase Cloud Messaging?
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 & auth, payments & pricing and transparency & trust.
Do Courier and Firebase Cloud Messaging need an API key?
Courier needs an API key. Firebase Cloud Messaging uses an OAuth sign-in.
Can an agent call Courier and Firebase Cloud Messaging without installing anything?
Yes. Courier has a hosted endpoint at https://api.courier.com and Firebase Cloud Messaging at https://fcm.googleapis.com.
Other comparisons with Courier or Firebase Cloud Messaging
- Amazon SNS vs Courier
- Amazon SNS vs Firebase Cloud Messaging
- Courier vs Knock
- Courier vs MagicBell
- Courier vs Novu
- Courier vs ntfy
- Courier vs OneSignal
- Courier vs Pushover
- Courier vs SuprSend
- Firebase Cloud Messaging vs Knock
- Firebase Cloud Messaging vs MagicBell
- Firebase Cloud Messaging vs Novu
- Firebase Cloud Messaging vs ntfy
- Firebase Cloud Messaging vs OneSignal
- Firebase Cloud Messaging vs Pushover
- Firebase Cloud Messaging vs SuprSend
Machine-readable
- This page as Markdown
/compare/courier-vs-firebase-cloud-messaging.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/courier.json·/api/v1/tools/firebase-cloud-messaging.json - From a terminal
anchor compare courier firebase-cloud-messaging(the CLI) - Over MCP
compare_tools {"a": "courier", "b": "firebase-cloud-messaging"}at/mcp, no key