{
  "data": {
    "a": {
      "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"
      }
    },
    "answer": "SuprSend scores 72.6 (BB) on agent readiness against Firebase Cloud Messaging's 69.8 (B), and leads in 3 of 7 scored categories. Firebase Cloud Messaging leads on transparency \u0026 trust.",
    "b": {
      "slug": "suprsend",
      "name": "SuprSend",
      "vendor": "SuprSend",
      "vendorUrl": "https://www.suprsend.com",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Notification workflow API for email, SMS, push, an in-app Inbox, Slack, Microsoft Teams and webhooks, with digests, batching and preferences per user and per tenant.",
      "url": "https://www.anchorterminal.com/tools/suprsend",
      "markdownUrl": "https://www.anchorterminal.com/tools/suprsend.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/suprsend.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/suprsend.json",
      "repo": "https://github.com/suprsend/cli",
      "license": "MIT (CLI and MCP server)",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://hub.suprsend.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@suprsend/node-sdk"
        },
        {
          "registry": "pypi",
          "name": "suprsend-py-sdk"
        },
        {
          "registry": "npm",
          "name": "suprsend"
        }
      ],
      "auth": "api-key",
      "authNotes": "API key as `Authorization: Bearer` on the trigger API. Workspace key and secret pairs can be issued and rotated per service through the management API since 2026-09-22. The MCP server reads a service token from `SUPRSEND_SERVICE_TOKEN`, and a service token grants full workspace access.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with 10,000 notifications a month, no card, unlimited team members and 30-day log retention. Essentials $110 a month ($100 billed yearly, $1,200 a year) for 50,000, then $2 per 1,000, with 30-day logs. Business $275 a month ($250 billed yearly, $3,000 a year) for 50,000, then $5 per 1,000, with 90-day logs and an audit trail. Paid plans list 99.9% uptime. Enterprise is custom. A notification is one message to one user or object on one channel, a digest or batch counts once, and sends SuprSend drops for opt-outs aren't billed, though provider failures are (https://www.suprsend.com/pricing).",
      "priceSummary": "$110 / mo",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 12,
        "npmWeekly": 13318,
        "pypiWeekly": 1099,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.suprsend.com",
      "llmsTxt": "https://docs.suprsend.com/llms.txt",
      "openapi": "https://docs.suprsend.com/openapi.yaml",
      "registryName": "io.github.suprsend/cli",
      "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-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 72.6,
        "grade": "BB",
        "agentReady": true,
        "rank": 99,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 87,
          "maintenance": 81,
          "payments": 40,
          "reliability": 69,
          "schema": 94,
          "security": 66,
          "transparency": 66
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set. No rate-limit page or 429 guidance.",
        "bestFor": "A SaaS team that needs tenant-aware preferences, digests and batching at a mid-range price, and for agents that inspect users and preferences through MCP.",
        "strengths": [
          "MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set",
          "`--tools` loads a subset of the 22 built-in tools, and trigger tools register only for the workflows you name",
          "Free plan with 10,000 notifications, no card and unlimited seats",
          "Digests and batches bill as one notification, and opt-out drops aren't billed",
          "99.9% uptime listed on every paid plan, SOC 2 Type II and ISO 27001"
        ],
        "weaknesses": [
          "No rate-limit page or 429 guidance",
          "No hosted MCP server, only the local CLI",
          "Workspace secrets come back in plain text on every management API response",
          "A 20-minute platform outage on 20 August 2026 and repeated short API blips",
          "Audit trail on Business and Enterprise only, RBAC on Enterprise only"
        ],
        "agentNotes": [
          "Pass an idempotency key on each trigger. It holds for 24 hours",
          "Start the MCP server with `--tools` set to read-only groups for production workspaces",
          "Register trigger tools with `--workflows=\u003cslug\u003e` for only the workflows you need. The default registers none",
          "Count each bulk record against the rate limit, and keep bulk calls to 100 records and 800 KB",
          "Treat management API responses as secrets. They include the workspace secret in plain text"
        ],
        "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": 72.6
          }
        ],
        "editorialScores": {
          "ergonomics": 87,
          "maintenance": 81,
          "payments": 40,
          "reliability": 69,
          "schema": 94,
          "security": 66,
          "transparency": 52
        },
        "provenanceScore": 79
      },
      "connect": {
        "http": "curl -X POST https://hub.suprsend.com/trigger/ \\\n  -H \"Authorization: Bearer $SUPRSEND_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"workflow\":\"build-finished\",\"recipients\":[{\"distinct_id\":\"user_123\",\"$email\":[\"user@example.com\"]}],\"data\":{\"status\":\"passed\"}}'",
        "claudeCode": "claude mcp add suprsend --scope user --env SUPRSEND_SERVICE_TOKEN=$SUPRSEND_SERVICE_TOKEN -- npx -y suprsend start-mcp-server",
        "config": {
          "mcpServers": {
            "suprsend": {
              "args": [
                "-y",
                "suprsend",
                "start-mcp-server"
              ],
              "command": "npx",
              "env": {
                "SUPRSEND_SERVICE_TOKEN": "${SUPRSEND_SERVICE_TOKEN}"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/suprsend"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Essentials",
          "unit": "month",
          "usd": 110,
          "note": "50,000 notifications, $100 billed yearly"
        },
        {
          "item": "Essentials overage",
          "unit": "message",
          "usd": 0.002
        },
        {
          "item": "Business",
          "unit": "month",
          "usd": 275,
          "note": "50,000 notifications, $250 billed yearly"
        },
        {
          "item": "Business overage",
          "unit": "message",
          "usd": 0.005
        }
      ],
      "provenance": {
        "legalEntity": "SuprStack Inc",
        "domain": "suprsend.com",
        "domainRegistered": "2020-12-27",
        "endpointOnVendorDomain": true,
        "terms": "https://www.suprsend.com/terms",
        "privacy": "https://www.suprsend.com/privacy",
        "statusPage": "https://status.suprsend.com",
        "changelog": "https://docs.suprsend.com/changelog/overview",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by Delaware law and give only a support email, no postal address.",
          "The status page showed Third Party Dependencies as degraded (a Cloudflare Workers issue) when we checked."
        ],
        "score": 79
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/suprsend.json",
      "live": {
        "slug": "suprsend",
        "probe": {
          "target": "https://hub.suprsend.com",
          "method": "get",
          "lastAt": "2026-10-09T09:27:06.43698074Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 106,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 101,
          "p95ms24h": 191,
          "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.suprsend.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-09T07:58:34.819045198Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "suprsend/cli",
            "version": "1.0.1",
            "released": "2026-07-10",
            "seenAt": "2026-10-08T16:31:15.497433704Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.suprsend/cli",
            "version": "1.0.1",
            "seenAt": "2026-10-09T02:57:46.004536428Z"
          },
          {
            "registry": "npm",
            "name": "@suprsend/node-sdk",
            "version": "1.15.1",
            "seenAt": "2026-10-08T16:31:13.242935121Z"
          },
          {
            "registry": "npm",
            "name": "suprsend",
            "version": "1.0.1",
            "seenAt": "2026-10-08T16:31:14.31281546Z"
          },
          {
            "registry": "pypi",
            "name": "suprsend-py-sdk",
            "version": "0.20.0",
            "released": "2026-09-04",
            "seenAt": "2026-10-08T16:31:14.122022298Z"
          }
        ],
        "githubStars": 12,
        "npmWeekly": 11232,
        "pypiWeekly": 1103,
        "securityTxt": {
          "url": "https://suprsend.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:39:01.123122908Z"
        },
        "llmsTxt": {
          "url": "https://docs.suprsend.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:55.416511955Z"
        },
        "domain": {
          "domain": "suprsend.com",
          "registered": "2020-12-27",
          "source": "https://rdap.verisign.com/com/v1/domain/suprsend.com",
          "checkedAt": "2026-10-04T13:10:03.719103966Z"
        },
        "pages": [
          {
            "url": "https://docs.suprsend.com/changelog/overview",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:19:34.055721607Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "a51b9d1cfccd"
          },
          {
            "url": "https://www.suprsend.com/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-08T18:30:44.551545513Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "9b909a363f19"
          },
          {
            "url": "https://www.suprsend.com/privacy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-08T18:30:46.846691814Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "73c6e3ac26d2"
          },
          {
            "url": "https://www.suprsend.com/terms",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-08T18:30:48.741847227Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "97053f0651bd"
          }
        ],
        "updatedAt": "2026-10-09T09:27:06.43698074Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Google",
        "b": "SuprSend",
        "name": "Vendor"
      },
      {
        "a": "https://fcm.googleapis.com",
        "b": "https://hub.suprsend.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the Google APIs Terms of Service. The Firebase Admin SDKs are Apache-2.0",
        "b": "MIT (CLI and MCP server)",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.github.suprsend/cli",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-24",
        "b": "2026-09-28",
        "name": "Last release"
      },
      {
        "a": "2021-11-09",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-01",
        "b": "2026-04-29",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "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": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "11.5M npm/wk, 3.8M PyPI/wk",
        "b": "12 stars, 13k npm/wk, 1.1k PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "SuprSend scores 72.6 (BB) on agent readiness against Firebase Cloud Messaging's 69.8 (B), and leads in 3 of 7 scored categories. Firebase Cloud Messaging leads on transparency \u0026 trust.",
        "question": "Which is better for AI agents, Firebase Cloud Messaging or SuprSend?"
      },
      {
        "answer": "Firebase Cloud Messaging uses an OAuth sign-in. SuprSend needs an API key.",
        "question": "Do Firebase Cloud Messaging and SuprSend need an API key?"
      },
      {
        "answer": "Yes. Firebase Cloud Messaging has a hosted endpoint at https://fcm.googleapis.com and SuprSend at https://hub.suprsend.com.",
        "question": "Can an agent call Firebase Cloud Messaging and SuprSend without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Transparency \u0026 trust, 81 against 66"
        ],
        "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"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 94 against 86",
          "Agent ergonomics, 87 against 70"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "Runs on your own machine"
        ],
        "goodFor": "A SaaS team that needs tenant-aware preferences, digests and batching at a mid-range price, and for agents that inspect users and preferences through MCP.",
        "slug": "suprsend",
        "watchFor": "No rate-limit page or 429 guidance"
      }
    ],
    "job": {
      "capability": "notify.push",
      "name": "Notify push"
    },
    "others": [
      {
        "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/amazon-sns-vs-suprsend.json",
        "title": "Amazon SNS vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.json",
        "title": "Courier vs Firebase Cloud Messaging",
        "url": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging"
      },
      {
        "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/knock-vs-suprsend.json",
        "title": "Knock vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/knock-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-suprsend.json",
        "title": "MagicBell vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-suprsend.json",
        "title": "Novu vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/novu-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ntfy-vs-suprsend.json",
        "title": "ntfy vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/ntfy-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend.json",
        "title": "OneSignal vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pushover-vs-suprsend.json",
        "title": "Pushover vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/pushover-vs-suprsend"
      }
    ],
    "scores": [
      {
        "by": 3,
        "edge": "suprsend",
        "firebase-cloud-messaging": 66,
        "key": "reliability",
        "name": "Reliability",
        "suprsend": 69,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "edge": "suprsend",
        "firebase-cloud-messaging": 86,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "suprsend": 94,
        "weight": 13
      },
      {
        "by": 17,
        "edge": "suprsend",
        "firebase-cloud-messaging": 70,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "suprsend": 87,
        "weight": 13
      },
      {
        "by": 2,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 68,
        "key": "security",
        "name": "Security \u0026 auth",
        "suprsend": 66,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "firebase-cloud-messaging": 40,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "suprsend": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 83,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "suprsend": 81,
        "weight": 7
      },
      {
        "by": 15,
        "edge": "firebase-cloud-messaging",
        "firebase-cloud-messaging": 81,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "suprsend": 66,
        "weight": 7
      }
    ],
    "summary": "SuprSend scores 72.6 (BB) on agent readiness against Firebase Cloud Messaging's 69.8 (B), and leads in 3 of 7 scored categories. Firebase Cloud Messaging leads on transparency \u0026 trust. Both do notify push.",
    "verdicts": {
      "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.",
      "suprsend": "MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set. No rate-limit page or 429 guidance."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend",
    "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.md",
    "slim": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.min.md"
  },
  "markdown": "SuprSend scores 72.6 (BB) on agent readiness against Firebase Cloud Messaging's 69.8 (B), and leads in 3 of 7 scored categories. Firebase Cloud Messaging leads on transparency \u0026 trust. Both do notify push.\n\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- SuprSend: grade BB, 72.6/100, rank #99 of 842. Markdown https://www.anchorterminal.com/tools/suprsend.md · JSON https://www.anchorterminal.com/api/v1/tools/suprsend.json\n\n## Which one, for what\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- Transparency \u0026 trust, 81 against 66\n\nWatch for: Push transport only. No in-app feed, email, SMS, user preferences, digests or templates\n\n### SuprSend (BB)\n\nGood for: A SaaS team that needs tenant-aware preferences, digests and batching at a mid-range price, and for agents that inspect users and preferences through MCP.\n\nAhead on:\n- Schema \u0026 documentation, 94 against 86\n- Agent ergonomics, 87 against 70\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- Runs on your own machine\n\nWatch for: No rate-limit page or 429 guidance\n\n\n## Score by category\n\n| Category | Weight | Firebase Cloud Messaging | SuprSend | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 66 | 69 | SuprSend +3 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 86 | 94 | SuprSend +8 |\n| Agent ergonomics | 13% (16.2 this run) | 70 | 87 | SuprSend +17 |\n| Security \u0026 auth | 14% (17.5 this run) | 68 | 66 | Firebase Cloud Messaging +2 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 83 | 81 | Firebase Cloud Messaging +2 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 81 | 66 | Firebase Cloud Messaging +15 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **69.8 · B** | **72.6 · BB** | |\n\n## Facts side by side\n\n| Fact | Firebase Cloud Messaging | SuprSend |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Google | SuprSend |\n| Hosted endpoint | `https://fcm.googleapis.com` | `https://hub.suprsend.com` |\n| Transports | HTTP | HTTP, stdio |\n| Auth | OAuth | API key |\n| Pricing | Free | Freemium |\n| x402 | no | no |\n| Licence | Proprietary service under the Google APIs Terms of Service. The Firebase Admin SDKs are Apache-2.0 | MIT (CLI and MCP server) |\n| Read-only variant documented | no | yes |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `io.github.suprsend/cli` |\n| Last release | 2026-09-24 | 2026-09-28 |\n| Terms last updated | 2021-11-09 | no date given |\n| Privacy policy last updated | 2026-10-01 | 2026-04-29 |\n| Customer content may train models | yes | not found in the text |\n| Terms restrict automated access | yes | yes |\n| Terms restrict benchmarking | not found in the text | yes |\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 | yes |\n| Popularity | 11.5M npm/wk, 3.8M PyPI/wk | 12 stars, 13k npm/wk, 1.1k PyPI/wk |\n| Agent reviews | none | 3/5 (2) |\n\n## Verdicts\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**SuprSend.** MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set. No rate-limit page or 429 guidance.\n\n## Before you call either\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### SuprSend\n\n1. Pass an idempotency key on each trigger. It holds for 24 hours\n2. Start the MCP server with `--tools` set to read-only groups for production workspaces\n3. Register trigger tools with `--workflows=\u003cslug\u003e` for only the workflows you need. The default registers none\n4. Count each bulk record against the rate limit, and keep bulk calls to 100 records and 800 KB\n5. Treat management API responses as secrets. They include the workspace secret in plain text\n\n## Questions\n\n### Which is better for AI agents, Firebase Cloud Messaging or SuprSend?\n\nSuprSend scores 72.6 (BB) on agent readiness against Firebase Cloud Messaging's 69.8 (B), and leads in 3 of 7 scored categories. Firebase Cloud Messaging leads on transparency \u0026 trust.\n\n### Do Firebase Cloud Messaging and SuprSend need an API key?\n\nFirebase Cloud Messaging uses an OAuth sign-in. SuprSend needs an API key.\n\n### Can an agent call Firebase Cloud Messaging and SuprSend without installing anything?\n\nYes. Firebase Cloud Messaging has a hosted endpoint at https://fcm.googleapis.com and SuprSend at https://hub.suprsend.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.json, and with the fewest tokens: https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"firebase-cloud-messaging\", \"b\": \"suprsend\"}`. From a terminal: `anchor compare firebase-cloud-messaging suprsend`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/firebase-cloud-messaging.json and https://www.anchorterminal.com/api/v1/tools/suprsend.json\n\n## Other comparisons with Firebase Cloud Messaging or SuprSend\n\n- [Amazon SNS vs Firebase Cloud Messaging](https://www.anchorterminal.com/compare/amazon-sns-vs-firebase-cloud-messaging.md)\n- [Amazon SNS vs SuprSend](https://www.anchorterminal.com/compare/amazon-sns-vs-suprsend.md)\n- [Courier vs Firebase Cloud Messaging](https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.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- [Knock vs SuprSend](https://www.anchorterminal.com/compare/knock-vs-suprsend.md)\n- [MagicBell vs SuprSend](https://www.anchorterminal.com/compare/magicbell-vs-suprsend.md)\n- [Novu vs SuprSend](https://www.anchorterminal.com/compare/novu-vs-suprsend.md)\n- [ntfy vs SuprSend](https://www.anchorterminal.com/compare/ntfy-vs-suprsend.md)\n- [OneSignal vs SuprSend](https://www.anchorterminal.com/compare/onesignal-vs-suprsend.md)\n- [Pushover vs SuprSend](https://www.anchorterminal.com/compare/pushover-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": "Firebase Cloud Messaging vs SuprSend",
        "url": ""
      }
    ],
    "description": "SuprSend scores 72.6 (BB) on agent readiness against Firebase Cloud Messaging's 69.8 (B), and leads in 3 of 7 scored categories. Firebase Cloud Messaging leads on transparency \u0026 trust. Both do notify push. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Firebase Cloud Messaging B 69.8",
      "SuprSend BB 72.6",
      "scores"
    ],
    "h1": "Firebase Cloud Messaging vs SuprSend",
    "image": "https://www.anchorterminal.com/assets/og/compare-firebase-cloud-messaging-vs-suprsend.png",
    "path": "/compare/firebase-cloud-messaging-vs-suprsend",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Firebase Cloud Messaging vs SuprSend for AI agents, B 69.8 vs BB 72.6",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-suprsend"
  },
  "tokens": {
    "markdown": 2200,
    "slim": 680
  },
  "version": 1
}
