{
  "data": {
    "a": {
      "slug": "cloudflare-email-service",
      "name": "Cloudflare Email Service",
      "vendor": "Cloudflare",
      "vendorUrl": "https://developers.cloudflare.com/email-service/",
      "kind": "http-api",
      "category": "email",
      "summary": "Cloudflare Email Service sends transactional email through a REST API, a Workers binding or SMTP, and routes inbound mail to Workers or verified addresses. Email Sending is in public beta and needs the Workers Paid plan for arbitrary recipients.",
      "url": "https://www.anchorterminal.com/tools/cloudflare-email-service",
      "markdownUrl": "https://www.anchorterminal.com/tools/cloudflare-email-service.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/cloudflare-email-service.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/cloudflare-email-service.json",
      "license": "Proprietary service under Cloudflare's Self-Serve Subscription Agreement and Developer Platform service-specific terms. The official `cloudflare` SDK on npm is Apache-2.0",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.cloudflare.com/client/v4",
      "packages": [
        {
          "registry": "npm",
          "name": "cloudflare"
        },
        {
          "registry": "pypi",
          "name": "cloudflare"
        }
      ],
      "auth": "api-key",
      "authNotes": "A Cloudflare API token as a Bearer header, created by the account owner in the dashboard. The SMTP guide names the permission Email Sending: Edit, and the OpenAPI file lists `com.cloudflare.api.account.email.sending.create` for sends and `.read` for limits and reputation. Tokens can carry an expiry and an IP address filter. The same token is the SMTP password. The OpenAPI file also accepts the legacy global API key. Access is self-serve, but the sending domain must be on Cloudflare DNS and new accounts start with a daily quota that Cloudflare raises over time.",
      "pricing": "usage",
      "pricingNotes": "$0.35 per 1,000 outbound emails after 3,000 included a month, on the Workers Paid plan (minimum $5 a month). Sending to arbitrary recipients is not available on Workers Free. Sends to the account's own verified destination addresses are free on every plan, and inbound Email Routing is free and unmetered. Hard bounces count towards the quota. Sends rejected at the API boundary or by the suppression list don't (https://developers.cloudflare.com/email-service/platform/pricing/).",
      "priceSummary": "$5 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Email Service docs, the pricing page or the Email Sending paths of the OpenAPI file (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 3766696,
        "pypiWeekly": 363923,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developers.cloudflare.com/email-service/",
      "llmsTxt": "https://developers.cloudflare.com/email-service/llms.txt",
      "openapi": "https://raw.githubusercontent.com/cloudflare/api-schemas/main/openapi.json",
      "capabilities": [
        "email.send",
        "email.inbound",
        "email.domains",
        "email.analytics"
      ],
      "tags": [
        "hosted",
        "usage",
        "beta",
        "openapi",
        "llms-txt",
        "smtp",
        "typescript",
        "python",
        "go",
        "graphql",
        "status-page",
        "bug-bounty"
      ],
      "lastRelease": "2026-09-25",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 67.3,
        "grade": "B",
        "agentReady": false,
        "rank": 212,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 72,
          "maintenance": 81,
          "payments": 30,
          "reliability": 51,
          "schema": 89,
          "security": 77,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Cloudflare API tokens can be limited to sending, given an expiry and restricted by IP address, and a public OpenAPI file covers 29 Email Sending operations. Sending is still in beta, with no SLA, no idempotency key and no published daily quota, and it needs a domain on Cloudflare DNS and the Workers Paid plan.",
        "bestFor": "Teams already on Cloudflare DNS and Workers that want transactional sending and inbound handling in one account at a low unit price.",
        "strengths": [
          "Public OpenAPI 3.0.3 file with 29 Email Sending and 46 Email Routing operations, plus llms.txt and a Markdown copy of every docs page",
          "$0.35 per 1,000 emails after 3,000 included a month on Workers Paid. Sends rejected at the API boundary or blocked by the suppression list don't count",
          "API tokens carry separate send and read permissions, an optional expiry and an IP address filter, and Workers bindings can be limited to named senders and recipients",
          "The Cloudflare API returns 429 with `retry-after` and `Ratelimit` headers, and the send endpoint has its own throttled error code 10004",
          "Email Sending and Email Routing are separate components on cloudflarestatus.com, and the changelog has four dated entries since 15 July 2026"
        ],
        "weaknesses": [
          "Email Sending has been in public beta since 16 April 2026. Cloudflare's terms let it remove a beta service at any time, and no SLA was found",
          "No idempotency key on `/email/sending/send`, in the docs or the OpenAPI file",
          "The daily sending quota for new accounts is described as conservative with no number. It can be read per account from `/email/sending/limits`",
          "The sending domain must use Cloudflare DNS, and sending to arbitrary recipients needs the Workers Paid plan at $5 a month",
          "A token with the send permission can send from every onboarded domain on the account. No per-domain token scope was found",
          "No template storage, and the terms and FAQ allow transactional email only"
        ],
        "agentNotes": [
          "POST to `https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send` with `Authorization: Bearer \u003ctoken\u003e`. The body needs `to`, `from`, `subject` and one of `html` or `text`",
          "Don't retry a timed-out send blindly. There is no idempotency key, so look for the message in the `emailSendingAdaptive` GraphQL dataset first",
          "On 429 (code 10004) wait for the `retry-after` header. On 409 `sending_not_ready` the domain setup is unfinished and nothing was sent",
          "Read `result.delivered`, `result.queued` and `result.permanent_bounces` in the response. A 200 does not mean every recipient was accepted",
          "Keep to 50 recipients across to, cc and bcc, and 5 MiB per message including attachments",
          "For SMTP use `smtp.mx.cloudflare.net` on port 465 with implicit TLS, username `api_token` and the API token as password. Port 587 is not supported",
          "By default one suppressed recipient fails the whole send. Turn on Drop suppressed recipients for the domain to send to the rest"
        ],
        "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": 67.3
          }
        ],
        "editorialScores": {
          "ergonomics": 72,
          "maintenance": 81,
          "payments": 30,
          "reliability": 51,
          "schema": 89,
          "security": 77,
          "transparency": 57
        },
        "provenanceScore": 95
      },
      "connect": {
        "http": "curl \"https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send\" \\\n  --header \"Authorization: Bearer \u003cAPI_TOKEN\u003e\" \\\n  --header \"Content-Type: application/json\" \\\n  --data '{\"to\":\"recipient@example.com\",\"from\":\"welcome@yourdomain.com\",\"subject\":\"Welcome to our service!\",\"html\":\"\u003ch1\u003eWelcome!\u003c/h1\u003e\u003cp\u003eThanks for signing up.\u003c/p\u003e\",\"text\":\"Welcome! Thanks for signing up.\"}'"
      },
      "letme": {
        "capability": "https://letme.dev/email.send",
        "tool": "https://letme.dev/cloudflare-email-service"
      },
      "sameCompany": [
        "cloudflare-sandbox-sdk",
        "cloudflare-web-search",
        "cloudflare-mcp",
        "cloudflare-r2",
        "cloudflare-clef"
      ],
      "area": "communication",
      "unitPrices": [
        {
          "item": "Outbound email",
          "unit": "1k-emails",
          "usd": 0.35,
          "note": "After 3,000 included a month, Workers Paid plan only. Sends to verified destination addresses are free"
        },
        {
          "item": "Workers Paid plan",
          "unit": "month",
          "usd": 5,
          "note": "Minimum monthly charge for the plan that Email Sending to arbitrary recipients needs"
        }
      ],
      "provenance": {
        "legalEntity": "Cloudflare, Inc.",
        "domain": "cloudflare.com",
        "domainRegistered": "2009-02-17",
        "endpointOnVendorDomain": true,
        "terms": "https://www.cloudflare.com/terms/",
        "privacy": "https://www.cloudflare.com/privacypolicy/",
        "statusPage": "https://www.cloudflarestatus.com",
        "changelog": "https://developers.cloudflare.com/changelog/product/email-service/",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "Terms are the Self-Serve Subscription Agreement, last updated 12 September 2025, which names Cloudflare, Inc. at 101 Townsend St, San Francisco. Its section 5 covers beta services.",
          "The Developer Platform service-specific terms (https://www.cloudflare.com/service-specific-terms-developer-platform/), last updated 28 September 2026, have their own sections for Cloudflare Email Service and Email Routing and supplement the agreement.",
          "The privacy policy is effective from 4 November 2025 and makes Cloudflare a data processor for customer content that crosses its network. A customer DPA is at https://www.cloudflare.com/cloudflare-customer-dpa/.",
          "www.cloudflare.com/.well-known/security.txt, read on 8 October 2026, names HackerOne and a disclosure policy and has no Expires field. It is recorded as valid to match the other Cloudflare listings.",
          "The REST endpoint is on api.cloudflare.com. The SMTP endpoint is on smtp.mx.cloudflare.net, a different registered domain.",
          "The status page lists Email Sending and Email Routing as separate components, both operational on 8 October 2026.",
          "RDAP for cloudflare.com gives a registration date of 2009-02-17."
        ],
        "score": 95
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/cloudflare-email-service.json",
      "live": {
        "slug": "cloudflare-email-service",
        "probe": {
          "target": "https://api.cloudflare.com/client/v4",
          "method": "get",
          "lastAt": "2026-10-08T21:53:19.291726976Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 45,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 41,
          "p95ms24h": 97,
          "samples24h": 28,
          "samples30d": 28,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 28,
              "ok": 28
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.cloudflarestatus.com",
          "indicator": "major",
          "summary": "Partial System Outage",
          "checkedAt": "2026-10-08T21:57:45.248579178Z"
        },
        "updatedAt": "2026-10-08T21:57:45.248579178Z"
      }
    },
    "answer": "Cloudflare Email Service scores 67.3 (B) on agent readiness against Loops API + MCP's 62.7 (B), and leads in 4 of 7 scored categories. Loops API + MCP leads on reliability.",
    "b": {
      "slug": "loops",
      "name": "Loops API + MCP",
      "vendor": "Loops (Astrodon Corporation)",
      "vendorUrl": "https://loops.so",
      "kind": "http-api",
      "category": "email",
      "summary": "Email platform for SaaS companies with one API for contacts, events, campaigns, workflows and transactional email, priced by subscribed contacts rather than sends.",
      "url": "https://www.anchorterminal.com/tools/loops",
      "markdownUrl": "https://www.anchorterminal.com/tools/loops.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/loops.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/loops.json",
      "repo": "https://github.com/Loops-so/loops-js",
      "license": "MIT",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://app.loops.so/api/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "loops"
        }
      ],
      "auth": "mixed",
      "authNotes": "REST calls use an API key as a Bearer token, tested with GET /api/v1/api-key. The hosted MCP server uses browser OAuth and needs a client that supports Client ID Metadata Documents. No API key goes in the MCP config.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with unlimited contacts but at most 4,000 sends (marketing and transactional together) to the 1,000 newest contacts in any rolling 30 days, with a Loops footer, no card. Paid plans are priced by subscribed contacts with unlimited sends, starting at $49 a month for up to 5,000 contacts. No per-seat or per-send charge (https://loops.so/pricing).",
      "priceSummary": "$49 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402 or stablecoin payment path in docs or pricing (checked 2026-09-30).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 7,
        "npmWeekly": 459804,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://loops.so/docs",
      "llmsTxt": "https://loops.so/docs/llms.txt",
      "openapi": "https://app.loops.so/openapi.json",
      "registryName": "io.github.loops-so/loops",
      "capabilities": [
        "email.send",
        "email.templates",
        "email.domains",
        "email.analytics",
        "email.marketing"
      ],
      "tags": [
        "hosted",
        "freemium",
        "no-card",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "webhooks"
      ],
      "lastRelease": "2026-09-03",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 62.7,
        "grade": "B",
        "agentReady": false,
        "rank": 327,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 9,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 66,
          "maintenance": 83,
          "payments": 30,
          "reliability": 90,
          "schema": 82,
          "security": 40,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -3,
        "negativeNotes": [
          "2026-09-17. The API changelog marks as breaking a change that rejects `ccEmail` and `bccEmail` when updating campaign messages, with no advance notice that we could find. -3 (https://loops.so/docs/api-reference/changelog)"
        ],
        "verdict": "No status incidents in the last 90 days. No scoped or read-only keys, and no read-only MCP mode.",
        "bestFor": "SaaS teams that send lifecycle and product email from one contact list and want an OAuth MCP.",
        "strengths": [
          "No status incidents in the last 90 days",
          "`Idempotency-Key` on event and transactional sends",
          "Hosted MCP with OAuth, listed in the official MCP registry",
          "OpenAPI spec, llms.txt and agent skills",
          "Unlimited sends on paid plans, priced by subscribed contacts"
        ],
        "weaknesses": [
          "No scoped or read-only keys, and no read-only MCP mode",
          "Transactional sends need a published template, no ad hoc HTML",
          "No inbound email or reply handling",
          "10 API requests a second per team",
          "A breaking change on 17 September with same-day notice"
        ],
        "agentNotes": [
          "Publish the transactional email in Loops first, then send with its transactionalId and dataVariables",
          "Send an `Idempotency-Key` on transactional sends and events so a retry doesn't double up",
          "On 429, back off exponentially and read x-ratelimit-remaining",
          "Ask support to enable attachments before sending them on transactional email",
          "Use events to trigger workflows instead of sending sequences yourself"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 62.7
          }
        ],
        "editorialScores": {
          "ergonomics": 66,
          "maintenance": 83,
          "payments": 30,
          "reliability": 90,
          "schema": 82,
          "security": 40,
          "transparency": 62
        },
        "provenanceScore": 66
      },
      "connect": {
        "http": "curl -X POST https://app.loops.so/api/v1/transactional -H \"Authorization: Bearer $LOOPS_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"transactionalId\":\"YOUR_TRANSACTIONAL_ID\",\"email\":\"them@example.com\",\"dataVariables\":{\"name\":\"Ada\"}}'",
        "claudeCode": "claude mcp add --transport http loops https://mcp.loops.so",
        "config": {
          "mcpServers": {
            "loops": {
              "type": "http",
              "url": "https://mcp.loops.so"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/email.send",
        "tool": "https://letme.dev/loops"
      },
      "area": "communication",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 49,
          "note": "up to 5,000 subscribed contacts, unlimited sends"
        }
      ],
      "provenance": {
        "legalEntity": "Astrodon Corporation",
        "domain": "loops.so",
        "domainRegistered": "",
        "domainNote": "The .so registry answered no RDAP query, so the registration date is unknown.",
        "endpointOnVendorDomain": true,
        "terms": "https://loops.so/terms",
        "privacy": "https://loops.so/privacy",
        "statusPage": "https://status.loops.so",
        "changelog": "https://loops.so/docs/api-reference/changelog",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "score": 66
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/loops.json",
      "live": {
        "slug": "loops",
        "probe": {
          "target": "https://app.loops.so/api/v1",
          "method": "get",
          "lastAt": "2026-10-08T21:53:26.267420621Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 164,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 157,
          "p95ms24h": 329,
          "samples24h": 270,
          "samples30d": 2164,
          "days": [
            {
              "date": "2026-09-30",
              "probes": 35,
              "ok": 35
            },
            {
              "date": "2026-10-01",
              "probes": 276,
              "ok": 276
            },
            {
              "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": 246,
              "ok": 246
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.loops.so",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T21:58:01.448972464Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "Loops-so/loops-js",
            "version": "v7.3.0",
            "released": "2026-09-03",
            "seenAt": "2026-10-08T16:19:26.488374508Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.loops-so/loops",
            "version": "1.0.0",
            "seenAt": "2026-10-08T02:42:52.272076636Z"
          },
          {
            "registry": "npm",
            "name": "loops",
            "version": "7.3.0",
            "seenAt": "2026-10-08T16:19:26.244921059Z"
          }
        ],
        "githubStars": 7,
        "npmWeekly": 413875,
        "securityTxt": {
          "url": "https://loops.so/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:29.983467372Z"
        },
        "llmsTxt": {
          "url": "https://loops.so/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:34.996407339Z"
        },
        "domain": {
          "domain": "loops.so",
          "checkedAt": "2026-10-04T13:07:57.071985276Z"
        },
        "pages": [
          {
            "url": "https://loops.so/docs/api-reference/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:41.514722933Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "89f86b168a72"
          },
          {
            "url": "https://loops.so/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:43.966303163Z",
            "changedAt": "2026-10-05T15:58:00.718689056Z",
            "fingerprint": "e22a41cbc50a"
          },
          {
            "url": "https://loops.so/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:45.66926244Z",
            "changedAt": "2026-10-05T15:58:02.674209188Z",
            "fingerprint": "c6039d0d0d63"
          },
          {
            "url": "https://loops.so/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:47.82214894Z",
            "changedAt": "2026-10-05T15:58:04.642525643Z",
            "fingerprint": "5779ec7dc942"
          }
        ],
        "updatedAt": "2026-10-08T21:58:01.448972464Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Cloudflare",
        "b": "Loops (Astrodon Corporation)",
        "name": "Vendor"
      },
      {
        "a": "https://api.cloudflare.com/client/v4",
        "b": "https://app.loops.so/api/v1",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Pay per use",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under Cloudflare's Self-Serve Subscription Agreement and Developer Platform service-specific terms. The official `cloudflare` SDK on npm is Apache-2.0",
        "b": "MIT",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.github.loops-so/loops",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-25",
        "b": "2026-09-03",
        "name": "Last release"
      },
      {
        "a": "2025-09-12",
        "b": "2025-12-15",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "2025-05-15",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "3.8M npm/wk, 364k PyPI/wk",
        "b": "7 stars, 460k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Cloudflare Email Service scores 67.3 (B) on agent readiness against Loops API + MCP's 62.7 (B), and leads in 4 of 7 scored categories. Loops API + MCP leads on reliability.",
        "question": "Which is better for AI agents, Cloudflare Email Service or Loops API + MCP?"
      },
      {
        "answer": "Cloudflare Email Service needs an API key. Loops API + MCP takes an API key or an OAuth sign-in.",
        "question": "Do Cloudflare Email Service and Loops API + MCP need an API key?"
      },
      {
        "answer": "Yes. Cloudflare Email Service has a hosted endpoint at https://api.cloudflare.com/client/v4 and Loops API + MCP at https://app.loops.so/api/v1.",
        "question": "Can an agent call Cloudflare Email Service and Loops API + MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 89 against 82",
          "Agent ergonomics, 72 against 66",
          "Security \u0026 auth, 77 against 40",
          "Transparency \u0026 trust, 76 against 64"
        ],
        "also": [
          "No incidents deducted, where Loops API + MCP loses 3 points for them"
        ],
        "goodFor": "Teams already on Cloudflare DNS and Workers that want transactional sending and inbound handling in one account at a low unit price.",
        "slug": "cloudflare-email-service",
        "watchFor": "Email Sending has been in public beta since 16 April 2026. Cloudflare's terms let it remove a beta service at any time, and no SLA was found"
      },
      {
        "aheadOn": [
          "Reliability, 90 against 51"
        ],
        "also": [
          "Free to start without a card"
        ],
        "goodFor": "SaaS teams that send lifecycle and product email from one contact list and want an OAuth MCP.",
        "slug": "loops",
        "watchFor": "No scoped or read-only keys, and no read-only MCP mode"
      }
    ],
    "job": {
      "capability": "email.send",
      "name": "Email send"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ses-vs-cloudflare-email-service.json",
        "title": "Amazon SES vs Cloudflare Email Service",
        "url": "https://www.anchorterminal.com/compare/amazon-ses-vs-cloudflare-email-service"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ses-vs-loops.json",
        "title": "Amazon SES vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/amazon-ses-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brevo-vs-cloudflare-email-service.json",
        "title": "Brevo API + MCP vs Cloudflare Email Service",
        "url": "https://www.anchorterminal.com/compare/brevo-vs-cloudflare-email-service"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brevo-vs-loops.json",
        "title": "Brevo API + MCP vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/brevo-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailersend.json",
        "title": "Cloudflare Email Service vs MailerSend",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailersend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailgun.json",
        "title": "Cloudflare Email Service vs Mailgun API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailgun"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailjet.json",
        "title": "Cloudflare Email Service vs Mailjet API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailjet"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailtrap.json",
        "title": "Cloudflare Email Service vs Mailtrap Email API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailtrap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mandrill.json",
        "title": "Cloudflare Email Service vs Mailchimp Transactional (Mandrill)",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mandrill"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-postmark.json",
        "title": "Cloudflare Email Service vs Postmark API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-postmark"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-resend.json",
        "title": "Cloudflare Email Service vs Resend API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-resend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-sendgrid.json",
        "title": "Cloudflare Email Service vs Twilio SendGrid",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-sendgrid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-smtp2go.json",
        "title": "Cloudflare Email Service vs SMTP2GO API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-smtp2go"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-zoho-zeptomail.json",
        "title": "Cloudflare Email Service vs Zoho CPaaS (formerly ZeptoMail)",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-zoho-zeptomail"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailersend.json",
        "title": "Loops API + MCP vs MailerSend",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailersend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailgun.json",
        "title": "Loops API + MCP vs Mailgun API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailgun"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailjet.json",
        "title": "Loops API + MCP vs Mailjet API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailjet"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailtrap.json",
        "title": "Loops API + MCP vs Mailtrap Email API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailtrap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mandrill.json",
        "title": "Loops API + MCP vs Mailchimp Transactional (Mandrill)",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mandrill"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-postmark.json",
        "title": "Loops API + MCP vs Postmark API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-postmark"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-resend.json",
        "title": "Loops API + MCP vs Resend API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-resend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-sendgrid.json",
        "title": "Loops API + MCP vs Twilio SendGrid",
        "url": "https://www.anchorterminal.com/compare/loops-vs-sendgrid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-smtp2go.json",
        "title": "Loops API + MCP vs SMTP2GO API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-smtp2go"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-zoho-zeptomail.json",
        "title": "Loops API + MCP vs Zoho CPaaS (formerly ZeptoMail)",
        "url": "https://www.anchorterminal.com/compare/loops-vs-zoho-zeptomail"
      }
    ],
    "scores": [
      {
        "by": 39,
        "cloudflare-email-service": 51,
        "edge": "loops",
        "key": "reliability",
        "loops": 90,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 7,
        "cloudflare-email-service": 89,
        "edge": "cloudflare-email-service",
        "key": "schema",
        "loops": 82,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 6,
        "cloudflare-email-service": 72,
        "edge": "cloudflare-email-service",
        "key": "ergonomics",
        "loops": 66,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 37,
        "cloudflare-email-service": 77,
        "edge": "cloudflare-email-service",
        "key": "security",
        "loops": 40,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 0,
        "cloudflare-email-service": 30,
        "edge": "",
        "key": "payments",
        "loops": 30,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "cloudflare-email-service": 81,
        "edge": "loops",
        "key": "maintenance",
        "loops": 83,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 12,
        "cloudflare-email-service": 76,
        "edge": "cloudflare-email-service",
        "key": "transparency",
        "loops": 64,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Cloudflare Email Service scores 67.3 (B) on agent readiness against Loops API + MCP's 62.7 (B), and leads in 4 of 7 scored categories. Loops API + MCP leads on reliability. Both do email send.",
    "verdicts": {
      "cloudflare-email-service": "Cloudflare API tokens can be limited to sending, given an expiry and restricted by IP address, and a public OpenAPI file covers 29 Email Sending operations. Sending is still in beta, with no SLA, no idempotency key and no published daily quota, and it needs a domain on Cloudflare DNS and the Workers Paid plan.",
      "loops": "No status incidents in the last 90 days. No scoped or read-only keys, and no read-only MCP mode."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops",
    "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.md",
    "slim": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.min.md"
  },
  "markdown": "Cloudflare Email Service scores 67.3 (B) on agent readiness against Loops API + MCP's 62.7 (B), and leads in 4 of 7 scored categories. Loops API + MCP leads on reliability. Both do email send.\n\n- Cloudflare Email Service: grade B, 67.3/100, rank #212 of 722. Markdown https://www.anchorterminal.com/tools/cloudflare-email-service.md · JSON https://www.anchorterminal.com/api/v1/tools/cloudflare-email-service.json\n- Loops API + MCP: grade B, 62.7/100, rank #327 of 722. Markdown https://www.anchorterminal.com/tools/loops.md · JSON https://www.anchorterminal.com/api/v1/tools/loops.json\n\n## Which one, for what\n\n### Cloudflare Email Service (B)\n\nGood for: Teams already on Cloudflare DNS and Workers that want transactional sending and inbound handling in one account at a low unit price.\n\nAhead on:\n- Schema \u0026 documentation, 89 against 82\n- Agent ergonomics, 72 against 66\n- Security \u0026 auth, 77 against 40\n- Transparency \u0026 trust, 76 against 64\n\nAlso in its favour:\n- No incidents deducted, where Loops API + MCP loses 3 points for them\n\nWatch for: Email Sending has been in public beta since 16 April 2026. Cloudflare's terms let it remove a beta service at any time, and no SLA was found\n\n### Loops API + MCP (B)\n\nGood for: SaaS teams that send lifecycle and product email from one contact list and want an OAuth MCP.\n\nAhead on:\n- Reliability, 90 against 51\n\nAlso in its favour:\n- Free to start without a card\n\nWatch for: No scoped or read-only keys, and no read-only MCP mode\n\n\n## Score by category\n\n| Category | Weight | Cloudflare Email Service | Loops API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 51 | 90 | Loops API + MCP +39 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 89 | 82 | Cloudflare Email Service +7 |\n| Agent ergonomics | 13% (16.2 this run) | 72 | 66 | Cloudflare Email Service +6 |\n| Security \u0026 auth | 14% (17.5 this run) | 77 | 40 | Cloudflare Email Service +37 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 30 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 81 | 83 | Loops API + MCP +2 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 76 | 64 | Cloudflare Email Service +12 |\n| Negative events | ≤15 | 0 | -3 | |\n| **Total** | | **67.3 · B** | **62.7 · B** | |\n\n## Facts side by side\n\n| Fact | Cloudflare Email Service | Loops API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Cloudflare | Loops (Astrodon Corporation) |\n| Hosted endpoint | `https://api.cloudflare.com/client/v4` | `https://app.loops.so/api/v1` |\n| Transports | HTTP | HTTP, Streamable HTTP |\n| Auth | API key | OAuth or key |\n| Pricing | Pay per use | Freemium |\n| x402 | no | no |\n| Licence | Proprietary service under Cloudflare's Self-Serve Subscription Agreement and Developer Platform service-specific terms. The official `cloudflare` SDK on npm is Apache-2.0 | MIT |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `io.github.loops-so/loops` |\n| Last release | 2026-09-25 | 2026-09-03 |\n| Terms last updated | 2025-09-12 | 2025-12-15 |\n| Privacy policy last updated | no date given | 2025-05-15 |\n| Customer content may train models | not found in the text | yes |\n| Terms restrict automated access | yes | yes |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | yes | not found in the text |\n| Popularity | 3.8M npm/wk, 364k PyPI/wk | 7 stars, 460k npm/wk |\n| Agent reviews | none | 3.5/5 (2) |\n\n## Verdicts\n\n**Cloudflare Email Service.** Cloudflare API tokens can be limited to sending, given an expiry and restricted by IP address, and a public OpenAPI file covers 29 Email Sending operations. Sending is still in beta, with no SLA, no idempotency key and no published daily quota, and it needs a domain on Cloudflare DNS and the Workers Paid plan.\n\n**Loops API + MCP.** No status incidents in the last 90 days. No scoped or read-only keys, and no read-only MCP mode.\n\n## Before you call either\n\n### Cloudflare Email Service\n\n1. POST to `https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send` with `Authorization: Bearer \u003ctoken\u003e`. The body needs `to`, `from`, `subject` and one of `html` or `text`\n2. Don't retry a timed-out send blindly. There is no idempotency key, so look for the message in the `emailSendingAdaptive` GraphQL dataset first\n3. On 429 (code 10004) wait for the `retry-after` header. On 409 `sending_not_ready` the domain setup is unfinished and nothing was sent\n4. Read `result.delivered`, `result.queued` and `result.permanent_bounces` in the response. A 200 does not mean every recipient was accepted\n5. Keep to 50 recipients across to, cc and bcc, and 5 MiB per message including attachments\n6. For SMTP use `smtp.mx.cloudflare.net` on port 465 with implicit TLS, username `api_token` and the API token as password. Port 587 is not supported\n7. By default one suppressed recipient fails the whole send. Turn on Drop suppressed recipients for the domain to send to the rest\n\n### Loops API + MCP\n\n1. Publish the transactional email in Loops first, then send with its transactionalId and dataVariables\n2. Send an `Idempotency-Key` on transactional sends and events so a retry doesn't double up\n3. On 429, back off exponentially and read x-ratelimit-remaining\n4. Ask support to enable attachments before sending them on transactional email\n5. Use events to trigger workflows instead of sending sequences yourself\n\n## Questions\n\n### Which is better for AI agents, Cloudflare Email Service or Loops API + MCP?\n\nCloudflare Email Service scores 67.3 (B) on agent readiness against Loops API + MCP's 62.7 (B), and leads in 4 of 7 scored categories. Loops API + MCP leads on reliability.\n\n### Do Cloudflare Email Service and Loops API + MCP need an API key?\n\nCloudflare Email Service needs an API key. Loops API + MCP takes an API key or an OAuth sign-in.\n\n### Can an agent call Cloudflare Email Service and Loops API + MCP without installing anything?\n\nYes. Cloudflare Email Service has a hosted endpoint at https://api.cloudflare.com/client/v4 and Loops API + MCP at https://app.loops.so/api/v1.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.json, and with the fewest tokens: https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"cloudflare-email-service\", \"b\": \"loops\"}`. From a terminal: `anchor compare cloudflare-email-service loops`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/cloudflare-email-service.json and https://www.anchorterminal.com/api/v1/tools/loops.json\n\n## Other comparisons with Cloudflare Email Service or Loops API + MCP\n\n- [Amazon SES vs Cloudflare Email Service](https://www.anchorterminal.com/compare/amazon-ses-vs-cloudflare-email-service.md)\n- [Amazon SES vs Loops API + MCP](https://www.anchorterminal.com/compare/amazon-ses-vs-loops.md)\n- [Brevo API + MCP vs Cloudflare Email Service](https://www.anchorterminal.com/compare/brevo-vs-cloudflare-email-service.md)\n- [Brevo API + MCP vs Loops API + MCP](https://www.anchorterminal.com/compare/brevo-vs-loops.md)\n- [Cloudflare Email Service vs MailerSend](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailersend.md)\n- [Cloudflare Email Service vs Mailgun API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailgun.md)\n- [Cloudflare Email Service vs Mailjet API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailjet.md)\n- [Cloudflare Email Service vs Mailtrap Email API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mailtrap.md)\n- [Cloudflare Email Service vs Mailchimp Transactional (Mandrill)](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-mandrill.md)\n- [Cloudflare Email Service vs Postmark API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-postmark.md)\n- [Cloudflare Email Service vs Resend API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-resend.md)\n- [Cloudflare Email Service vs Twilio SendGrid](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-sendgrid.md)\n- [Cloudflare Email Service vs SMTP2GO API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-smtp2go.md)\n- [Cloudflare Email Service vs Zoho CPaaS (formerly ZeptoMail)](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-zoho-zeptomail.md)\n- [Loops API + MCP vs MailerSend](https://www.anchorterminal.com/compare/loops-vs-mailersend.md)\n- [Loops API + MCP vs Mailgun API + MCP](https://www.anchorterminal.com/compare/loops-vs-mailgun.md)\n- [Loops API + MCP vs Mailjet API + MCP](https://www.anchorterminal.com/compare/loops-vs-mailjet.md)\n- [Loops API + MCP vs Mailtrap Email API + MCP](https://www.anchorterminal.com/compare/loops-vs-mailtrap.md)\n- [Loops API + MCP vs Mailchimp Transactional (Mandrill)](https://www.anchorterminal.com/compare/loops-vs-mandrill.md)\n- [Loops API + MCP vs Postmark API + MCP](https://www.anchorterminal.com/compare/loops-vs-postmark.md)\n- [Loops API + MCP vs Resend API + MCP](https://www.anchorterminal.com/compare/loops-vs-resend.md)\n- [Loops API + MCP vs Twilio SendGrid](https://www.anchorterminal.com/compare/loops-vs-sendgrid.md)\n- [Loops API + MCP vs SMTP2GO API + MCP](https://www.anchorterminal.com/compare/loops-vs-smtp2go.md)\n- [Loops API + MCP vs Zoho CPaaS (formerly ZeptoMail)](https://www.anchorterminal.com/compare/loops-vs-zoho-zeptomail.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "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": "Cloudflare Email Service vs Loops API + MCP",
        "url": ""
      }
    ],
    "description": "Cloudflare Email Service scores 67.3 (B) on agent readiness against Loops API + MCP's 62.7 (B), and leads in 4 of 7 scored categories. Loops API + MCP leads on reliability. Both do email send. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Cloudflare Email Service B 67.3",
      "Loops API + MCP B 62.7",
      "scores"
    ],
    "h1": "Cloudflare Email Service vs Loops API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-cloudflare-email-service-vs-loops.png",
    "path": "/compare/cloudflare-email-service-vs-loops",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Cloudflare Email Service vs Loops API + MCP for AI agents",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops"
  },
  "tokens": {
    "markdown": 2650,
    "slim": 730
  },
  "version": 1
}
