{
  "data": {
    "a": {
      "slug": "puzzle",
      "name": "Puzzle API and MCP",
      "vendor": "Puzzle Financial Inc.",
      "vendorUrl": "https://puzzle.io/api-mcp",
      "kind": "mcp",
      "category": "accounting",
      "summary": "Puzzle is AI-native accounting software for startups and small businesses, with a real-time general ledger. Its hosted MCP server connects Claude, ChatGPT and other clients to a company's books, and a partner REST API reaches ledgers, bills, invoices and reports.",
      "url": "https://www.anchorterminal.com/tools/puzzle",
      "markdownUrl": "https://www.anchorterminal.com/tools/puzzle.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/puzzle.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/puzzle.json",
      "dns": "puzzle.grade.anchorterminal.com",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://app.puzzle.io/mcp",
      "packages": [],
      "auth": "oauth",
      "authNotes": "For MCP, the user signs in with a Puzzle account through OAuth and chooses which companies the connection covers. It is read-only by default, with read-write as an opt-in beta where each change needs confirmation, and the user needs Full or Partial access to each company with AI turned on. The API uses the OAuth 2.0 authorisation code flow with refresh tokens and per-resource scopes (read:company and write scopes for bills, invoices, journals, vendors and more), with client ID, secret and connection key issued by email to api@puzzle.io. A sandbox runs at staging.southparkdata.com.",
      "pricing": "paid",
      "pricingNotes": "Puzzle plans are $30 (Starter), $72 (Core), $120 (Complete) and $360 (Scale) a month, two months free yearly, with \"Try for free\" on each. Accounting services start at $171 a month with Core. MCP access comes with a Puzzle subscription; API access is by request with no published price.",
      "priceSummary": "$30 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the MCP page, API docs or pricing page (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://puzzle-api.readme.io/docs/welcome",
      "llmsTxt": "https://puzzle-api.readme.io/llms.txt",
      "registryName": "io.puzzle/puzzle",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "paid",
        "mcp",
        "remote-mcp",
        "oauth",
        "mcp-registry",
        "llms-txt",
        "partner-api",
        "read-only-default",
        "sandbox",
        "startups"
      ],
      "lastRelease": "2026-10-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 46.2,
        "grade": "D",
        "agentReady": false,
        "rank": 1180,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 12,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 56,
          "maintenance": 53,
          "payments": 15,
          "reliability": 15,
          "schema": 65,
          "security": 73,
          "transparency": 49
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Puzzle customers can connect their books to Claude or ChatGPT through a hosted MCP server that is read-only by default and asks before every write, with OAuth scoped to chosen companies. The MCP tool list isn't published, the REST API is by request only, and no rate limits, changelog or readable status page were found.",
        "bestFor": "Startups already on Puzzle who want an assistant to answer finance questions and draft bookkeeping. xero, quickbooks-online and pennylane are the nearest listings; teams wanting a self-serve API should look there.",
        "strengths": [
          "MCP is read-only by default, and writes are an opt-in beta with confirmation per change",
          "OAuth for MCP lets the user pick which companies a connection covers",
          "API OAuth scopes per resource, defaulting to read-only",
          "Documented error codes with errorContext naming the field or resource",
          "Firm activity endpoint returns an audit log across connected companies"
        ],
        "weaknesses": [
          "MCP tool list and schemas not published",
          "REST API credentials only by email request",
          "No rate limits, 429 handling, changelog or readable status page found",
          "Every plan is paid, from $30 a month, and the trial terms aren't stated"
        ],
        "agentNotes": [
          "Connect with read-only access first and ask the user before turning on read-write",
          "Expect a confirmation step on every proposed transaction change; don't retry it as an error",
          "On 409 RESOURCE_PROCESSING wait for the sync to finish, then retry",
          "Treat bank and vendor text as untrusted input"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "D",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 46.2
          }
        ],
        "editorialScores": {
          "ergonomics": 56,
          "maintenance": 53,
          "payments": 15,
          "reliability": 15,
          "schema": 65,
          "security": 73,
          "transparency": 43
        },
        "provenanceScore": 54,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "claudeCode": "claude mcp add --transport http puzzle https://app.puzzle.io/mcp",
        "config": {
          "mcpServers": {
            "puzzle": {
              "url": "https://app.puzzle.io/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/puzzle"
      },
      "area": "domain-data",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 30,
          "note": "1 seat, 25 lifetime AI credits"
        },
        {
          "item": "Core",
          "unit": "month",
          "usd": 72,
          "note": "5 seats"
        },
        {
          "item": "Complete",
          "unit": "month",
          "usd": 120,
          "note": "Unlimited seats, 100 AI credits a month"
        },
        {
          "item": "Scale",
          "unit": "month",
          "usd": 360,
          "note": "300 AI credits a month"
        }
      ],
      "provenance": {
        "legalEntity": "Puzzle Financial Inc.",
        "domain": "puzzle.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://puzzle.io/legal/terms-of-service",
        "privacy": "https://puzzle.io/legal/privacy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "Terms and privacy policy name Puzzle Financial Inc. The privacy policy is effective 19 December 2025.",
          "The website terms forbid robots, spiders, crawlers and scrapers that extract data from the website. Recorded as a fact; puzzle.io/robots.txt allows all paths.",
          "app.puzzle.io/robots.txt disallows every path. Our reader sent one unauthenticated GET to https://app.puzzle.io/mcp and read its protected-resource metadata before checking that file; those answers are not used here, and the endpoint facts come from puzzle.io/api-mcp and the MCP registry.",
          "puzzle.io/.well-known/security.txt returns 404; the security page links a bug bounty policy at /legal/bug-bounty.",
          "status.puzzle.io answered 403 and wasn't read."
        ],
        "score": 54
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/puzzle.json",
      "live": {
        "slug": "puzzle",
        "probe": {
          "target": "https://app.puzzle.io/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-11-07T19:22:28.206804792Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 683,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 627,
          "p95ms24h": 774,
          "samples24h": 210,
          "samples30d": 210,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 197,
              "ok": 197
            }
          ]
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "io.puzzle/puzzle",
            "version": "1.0.0",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          }
        ],
        "securityTxt": {
          "url": "https://puzzle.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:23.872885991Z"
        },
        "llmsTxt": {
          "url": "https://puzzle-api.readme.io/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:33:42.47043184Z"
        },
        "pages": [
          {
            "url": "https://puzzle.io/legal/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:17:39.329522101Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "80e70d5a3edf"
          },
          {
            "url": "https://puzzle.io/legal/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:17:41.797365786Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6db91b15551c"
          }
        ],
        "mcpTools": {
          "url": "https://app.puzzle.io/mcp",
          "checkedAt": "2026-11-07T01:47:02.878008845Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:47:02.878008845Z"
        },
        "updatedAt": "2026-11-07T19:22:28.206804792Z"
      }
    },
    "answer": "Puzzle API and MCP and QuickBooks Online API + MCP score within a point of each other on agent readiness, 46.2 (D) and 45.7 (E). QuickBooks Online API + MCP leads on reliability, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community.",
    "b": {
      "slug": "quickbooks-online",
      "name": "QuickBooks Online API + MCP",
      "vendor": "Intuit",
      "vendorUrl": "https://developer.intuit.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Intuit's REST API for accessing QuickBooks Online accounting data.",
      "url": "https://www.anchorterminal.com/tools/quickbooks-online",
      "markdownUrl": "https://www.anchorterminal.com/tools/quickbooks-online.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/quickbooks-online.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/quickbooks-online.json",
      "dns": "quickbooks-online.grade.anchorterminal.com",
      "repo": "https://github.com/intuit/quickbooks-online-mcp-server",
      "license": "MIT",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://quickbooks.api.intuit.com/v3",
      "packages": [
        {
          "registry": "npm",
          "name": "intuit-oauth"
        },
        {
          "registry": "pypi",
          "name": "intuit-oauth"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 authorisation code with OpenID Connect. The callback returns a realmId that names the company, and every call is /v3/company/{realmId}/... with a Bearer token. Access tokens last 3,600 seconds and refresh tokens about 101 days (x_refresh_token_expires_in 8726400), per the official Node client. The sandbox uses the same flow against sandbox-quickbooks.api.intuit.com with an app's development keys.",
      "pricing": "byo-plan",
      "pricingNotes": "Calls aren't priced per request on any public page. Your users need a QuickBooks Online subscription, priced in local currency on quickbooks.intuit.com, and sandbox companies are free with a developer account. Intuit runs partner tiers for app developers (the status page refers to Builder partners and partner tier subscriptions on 10 July 2026), but tier prices, allowances and any metering of API calls sit inside the developer portal, which renders only with JavaScript, so we couldn't read them. Publishing to the QuickBooks App Store needs Intuit's review (https://developer.intuit.com/app/developer/qbo/docs/get-started).",
      "priceSummary": "Your plan",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 145,
      "popularity": {
        "githubStars": 145,
        "npmWeekly": 399820,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://developer.intuit.com/app/developer/qbo/docs/get-started",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "byo-plan",
        "free-tier",
        "oauth",
        "mcp",
        "typescript",
        "python",
        "webhooks",
        "status-page",
        "closed-source"
      ],
      "lastRelease": "2026-10-21",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 45.7,
        "grade": "E",
        "agentReady": false,
        "rank": 1190,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 13,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 68,
          "maintenance": 65,
          "payments": 30,
          "reliability": 40,
          "schema": 38,
          "security": 38,
          "transparency": 50
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-04"
        },
        "negative": 0,
        "verdict": "Official MCP server from Intuit with 145 tools and flags to remove write, update or delete tools. Rate limits, developer terms, partner tiers and deprecation rules are behind a JavaScript portal that returns nothing to a plain fetch, and no OpenAPI file or readable changelog was found.",
        "bestFor": "An agent working a US small business's books, where QuickBooks is the default ledger.",
        "strengths": [
          "Official MCP server from Intuit with 145 tools and flags to remove write, update or delete tools",
          "Free sandbox companies, with a status page that breaks out API, sandbox, OAuth, webhooks and Payments",
          "Query endpoint with an SQL-like syntax, so one call filters any entity server-side",
          "The official Node OAuth client retries 429 and 5xx with backoff, and the Java and .NET SDKs send a requestid with each call",
          "Official SDKs for Java, .NET and PHP and OAuth clients for Node and Python; PHP SDK v6.4.1 tagged on 21 October 2026"
        ],
        "weaknesses": [
          "Rate limits, developer terms, partner tiers and deprecation rules are behind a JavaScript portal that returns nothing to a plain fetch",
          "No OpenAPI spec and no llms.txt. The only machine-readable schemas are XSDs in the Java SDK",
          "One accounting scope covers the whole ledger, with no read-only grant",
          "Status history to 1 October showed outages of 7.75 hours on 1 September and 9.75 hours on 22 and 23 September",
          "The official MCP isn't on npm or in the registry, is still version 0.0.1 with no tags, and sets no tool annotations"
        ],
        "agentNotes": [
          "Store the realmId with the tokens. Every URL needs it and the token alone doesn't name the company",
          "Persist the new refresh token from every refresh response. The previous one expires 24 hours later",
          "Use the query endpoint with MAXRESULTS and STARTPOSITION for reads rather than fetching by id",
          "Send a unique `requestid` query parameter on writes, as Intuit's Java and .NET SDKs do, and check for an existing record before retrying a create",
          "On 429, back off before retrying, and don't retry other 4xx errors"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 45.7
          }
        ],
        "editorialScores": {
          "ergonomics": 68,
          "maintenance": 65,
          "payments": 30,
          "reliability": 40,
          "schema": 38,
          "security": 38,
          "transparency": 22
        },
        "provenanceScore": 78,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-04",
            "maintenance": "2026-11-04",
            "payments": "2026-11-04",
            "reliability": "2026-11-04",
            "schema": "2026-11-04",
            "security": "2026-11-04",
            "transparency": "2026-11-04"
          },
          "last": "2026-11-04",
          "lastMoved": "2026-11-04",
          "oldest": "2026-11-04",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl \"https://sandbox-quickbooks.api.intuit.com/v3/company/$QBO_REALM_ID/query?query=select%20*%20from%20Invoice%20maxresults%2010\" \\\n  -H \"Authorization: Bearer $QBO_ACCESS_TOKEN\" -H \"Accept: application/json\""
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/quickbooks-online"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Intuit Inc.",
        "domain": "intuit.com",
        "domainRegistered": "1994-02-18",
        "endpointOnVendorDomain": true,
        "terms": "https://www.intuit.com/legal/terms/",
        "privacy": "https://www.intuit.com/privacy/statement/",
        "statusPage": "https://status.developer.intuit.com",
        "changelog": "",
        "securityTxt": "unknown",
        "checked": "2026-11-04",
        "notes": [
          "The legal index names Intuit Inc., Mountain View, CA 94043. The linked terms are Intuit's legal index, which links the developer services terms inside the JavaScript developer portal.",
          "Intuit's website terms (Platform Terms, version 02122026) bar unauthorised use of the Platform, including scraping, so pages on intuit.com hosts other than the terms weren't re-read on 4 November.",
          "www.intuit.com/.well-known/security.txt returned a 400 error on 1 October, so we couldn't tell whether one exists. Intuit runs a security site at security.intuit.com.",
          "The privacy statement was last updated 9 March 2026, per the 30 September check."
        ],
        "score": 78
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/quickbooks-online.json",
      "live": {
        "slug": "quickbooks-online",
        "probe": {
          "target": "https://quickbooks.api.intuit.com/v3",
          "method": "get",
          "lastAt": "2026-11-07T19:22:28.352893642Z",
          "lastOk": true,
          "lastStatus": 400,
          "lastMs": 578,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 606,
          "p95ms24h": 757,
          "samples24h": 238,
          "samples30d": 7920,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-29",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 197,
              "ok": 197
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.developer.intuit.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T19:23:33.70395857Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "intuit-oauth",
            "version": "4.2.5",
            "seenAt": "2026-11-06T23:59:46.083639457Z"
          },
          {
            "registry": "pypi",
            "name": "intuit-oauth",
            "version": "1.2.7",
            "released": "2026-07-22",
            "seenAt": "2026-11-06T23:59:46.924725807Z"
          }
        ],
        "githubStars": 446,
        "npmWeekly": 485912,
        "pypiWeekly": 417661,
        "securityTxt": {
          "url": "https://intuit.com/.well-known/security.txt",
          "state": "unknown",
          "checkedAt": "2026-11-07T15:59:38.568346099Z"
        },
        "domain": {
          "domain": "intuit.com",
          "registered": "1994-02-18",
          "source": "https://rdap.verisign.com/com/v1/domain/intuit.com",
          "checkedAt": "2026-11-01T14:17:44.513733956Z"
        },
        "pages": [
          {
            "url": "https://www.intuit.com/privacy/statement/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:28:33.729989472Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "bdf88eaea616"
          },
          {
            "url": "https://www.intuit.com/legal/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:30:15.689183319Z",
            "changedAt": "2026-10-31T06:28:39.627686858Z",
            "fingerprint": "9504261c5793"
          }
        ],
        "github": {
          "repo": "intuit/quickbooks-online-mcp-server",
          "checkedAt": "2026-11-02T08:56:36.359803058Z",
          "stars": 440,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-09-15T17:56:34Z",
          "openIssues": 18,
          "openPRs": 24,
          "issuesOpened90d": 13,
          "issuesClosed90d": 12,
          "prsMerged90d": 11,
          "ci": {
            "branch": "main",
            "runs": 4,
            "success": 4,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-09-15T17:58:03Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 14,
            "medianDays": 50.1
          }
        },
        "updatedAt": "2026-11-07T19:23:33.70395857Z"
      }
    },
    "edges": [
      {
        "by": 35,
        "category": "security",
        "leads": "puzzle",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "OAuth for MCP with a per-company choice and read-only default, and OAuth 2.0 with granular scopes on the API, defaulting to read-only scopes (28). Read-only by default, writes an opt-in beta with confirmation for each change (18). Bank descriptions and vendor names are third-party text, and no prompt-injection guidance was found (3). Every API request is logged per the docs, and a firm activity endpoint returns an audit log (12). A SOC 2 claim in the API docs and a bug bounty policy page; no security.txt (12). 28 + 18 + 3 + 12 + 12 = 73.",
          "b": "OAuth 2.0 with OpenID Connect, one-hour access tokens and rotating refresh tokens of about 101 days. The accounting scope is a single grant over the whole ledger, with no read-only scope (22). No read-only mode in the API. The official MCP can drop create, update and delete tools by flag (8). Returns the company's records with customer and vendor text and no injection guidance (3). No API audit view found. QuickBooks' own audit log wasn't checked (0, unchecked). security.intuit.com returns only a loading message and www.intuit.com/.well-known/security.txt answers 400, so we couldn't confirm a disclosure policy, bounty or certifications (5, unchecked)."
        },
        "scores": {
          "a": 73,
          "b": 38
        }
      },
      {
        "by": 27,
        "category": "schema",
        "leads": "puzzle",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "The API reference on ReadMe is generated from an OpenAPI file, though we didn't download the file itself; the MCP tool schemas aren't published (18). llms.txt and Markdown pages on puzzle-api.readme.io (10). Endpoint descriptions name the required scope and explain defaults such as cash basis (14). Typed parameters with documented limits, such as companies capped at 100 a page (11). An error table with HTTP codes and errorContext shapes, and example requests (12). No changelog or version scheme found (0). 18 + 10 + 14 + 11 + 12 + 0 = 65.",
          "b": "No OpenAPI spec found. Intuit's Java SDK repository publishes the V3 payload schemas as XSD, about 20,000 lines with some 200 complex types and about 110 simple types, many of them enums. They type every entity but don't describe endpoints, so part credit (10 of 25). No llms.txt or Markdown docs; the developer docs pages returned a loading message to a plain fetch on 1 October (0). The official MCP server's descriptions are one line, such as \"Create an invoice in QuickBooks Online.\" (6). The XSDs carry enums such as TaxExcluded, TaxInclusive and NotApplicable, the MCP's Zod schemas use min and positive, and the Java, .NET and PHP SDKs are typed (12). The OAuth client documents its error codes. The API's own error and example pages couldn't be read (5). Minor versions (the Java SDK targets 75). The dated change posts credited earlier were on Intuit's medium.com blog, now struck (robots.txt disallows ClaudeBot), and the portal's release notes are unread, so versioning alone (5). 10 + 0 + 6 + 12 + 5 + 5 = 38."
        },
        "scores": {
          "a": 65,
          "b": 38
        }
      },
      {
        "by": 25,
        "category": "reliability",
        "leads": "quickbooks-online",
        "name": "Reliability",
        "reasons": {
          "a": "Hosted reading. status.puzzle.io exists but answered 403 to our reader, so no status page or history could be read (0, then 5 for no readable history). No rate limits found in the API docs (0). The errors page documents 409 RESOURCE_PROCESSING with retry later and 500 with retry, but no 429 or idempotency guidance (5). No SLA (0). MCP read access is live, write access is a beta, and the API docs say the API is under development (5). 0 + 5 + 0 + 5 + 0 + 5 = 15.",
          "b": "Statuspage at status.developer.intuit.com with separate QuickBooks Online API, sandbox, OAuth, webhooks and Payments components (20, per the 1 October check, not re-read on 4 November). Incident line 0 held. The 8 July and 26 July majors have left the 90-day window from 6 August, and the window up to 1 October holds API timeouts with OAuth and sandbox failures for about 7.75 hours on 1 September, TaxCode and TaxRate 4001 errors for about 9.75 hours on 22 and 23 September, sandbox creation failing from 5 September and the sandbox view down on 30 September. 2 October to 4 November is unread, because Intuit's platform terms bar scraping and the status page sits on intuit.com, and a partly unread window earns no credit for the unread part (0). The limits page is inside a JavaScript portal, so we couldn't read the numbers (0, unchecked). The official Node OAuth client's README retries 408, 429 and 5xx with backoff. Intuit's 31 August blog post on Retry-After and RequestId sat on medium.com, whose robots.txt now disallows ClaudeBot, so that reading is struck and backoff guidance alone remains (10). No SLA found (0). GA (10). 20 + 0 + 0 + 10 + 0 + 10 = 40."
        },
        "scores": {
          "a": 15,
          "b": 40
        }
      },
      {
        "by": 15,
        "category": "payments",
        "leads": "quickbooks-online",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No x402, MPP or L402 (0). Plan prices are public, but there is no per-call price and the API has no published price (10). \"Try for free\" on every plan, with trial length and card requirement not stated on the pages read (5). A person signs up and authorises in a browser, and API credentials come by email (0). 0 + 10 + 5 + 0 = 15.",
          "b": "No x402, MPP or L402 (0). QuickBooks Online plans are priced publicly in local currency on quickbooks.intuit.com. Intuit's partner tiers (the status page names Builder partners and partner tier subscriptions on 10 July 2026) and any metering of API calls are inside the portal, so we scored plan-only (10). Free sandbox companies with a developer account, no card per the 30 September check (20). Browser signup, app registration and an OAuth consent in a browser (0)."
        },
        "scores": {
          "a": 15,
          "b": 30
        }
      },
      {
        "by": 12,
        "category": "ergonomics",
        "leads": "quickbooks-online",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "MCP tool count and sizes unpublished, so context cost can't be read (10 of 25). API list endpoints page with count and after or limit, and filter by date and status (16). Error codes and errorContext name the field or resource at fault (17). No idempotency keys found; the MCP server asks for confirmation before writes (8). No official SDKs; few required parameters on reads (5). 10 + 16 + 17 + 8 + 5 = 56.",
          "b": "The query endpoint takes where clauses with STARTPOSITION and MAXRESULTS, so reads can be cut down server-side. The official MCP loads 145 tools, with DISABLE_WRITE, DISABLE_UPDATE and DISABLE_DELETE flags to drop whole groups (15). Query filtering and paging on every entity, plus reports with date parameters (18). Fault responses carry numbered codes such as 4001, though the catalogue sits in the unreadable portal (10). The Java and .NET SDKs send a requestid with each call. Intuit's description of RequestId as the idempotency mechanism was on its medium.com blog, now struck, so the earlier partial is kept on the SDK evidence and flagged. The MCP sets no readOnlyHint or destructiveHint (10). Official SDKs for Java, .NET and PHP and OAuth clients for Node and Python (15). 15 + 18 + 10 + 10 + 15 = 68."
        },
        "scores": {
          "a": 56,
          "b": 68
        }
      },
      {
        "by": 12,
        "category": "maintenance",
        "leads": "quickbooks-online",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "The MCP registry entry was published on 5 October 2026, 32 days before this check, and Puzzle's MCP post is dated 26 October (20). No release log, so changes in the 90 days can't be counted beyond the registry entry and the MCP launch (5). A help centre and support contact, but no public changelog or issue tracker (8). io.puzzle/puzzle sits under a domain-verified namespace in the official registry (15). No SDK or package to judge (5). 20 + 5 + 8 + 15 + 5 = 53.",
          "b": "PHP SDK v6.4.1 was tagged on 21 October 2026, 14 days before the check. It raises the PHP floor to 8.2 and the Guzzle floor and changes the JSON serializer, so it isn't dependency-only (30). In the 90 days from 6 August, .NET SDK V14.7.1.6 (17 September) and PHP SDK v6.4.1 (21 October), two dated releases. Java SDK v6.6.3 (3 August) falls before the window, and the dated API posts on Intuit's medium.com blog are struck (0). The official MCP repository merged community pull requests on 10 August and 15 September; Intuit's portal release notes and forum couldn't be read (12, the earlier partial, flagged). Official SDKs in Java, .NET and PHP and OAuth clients for Node and Python. The MCP isn't in the official registry (15). The MCP's CI builds, lints and tests on Ubuntu and Windows, with a dependency audit workflow (8). 30 + 0 + 12 + 15 + 8 = 65."
        },
        "scores": {
          "a": 53,
          "b": 65
        }
      }
    ],
    "facts": [
      {
        "a": "MCP server",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Puzzle Financial Inc.",
        "b": "Intuit",
        "name": "Vendor"
      },
      {
        "a": "https://app.puzzle.io/mcp",
        "b": "https://quickbooks.api.intuit.com/v3",
        "name": "Hosted endpoint"
      },
      {
        "a": "Streamable HTTP",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Your plan",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "MIT",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "145",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "io.puzzle/puzzle",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-05",
        "b": "2026-10-21",
        "name": "Last release"
      },
      {
        "a": "2023-06-01",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2025-12-19",
        "b": "2026-03-09",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "145 stars, 400k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "2/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Puzzle API and MCP and QuickBooks Online API + MCP score within a point of each other on agent readiness, 46.2 (D) and 45.7 (E). QuickBooks Online API + MCP leads on reliability, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community.",
        "question": "Which is better for AI agents, Puzzle API and MCP or QuickBooks Online API + MCP?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Puzzle API and MCP and QuickBooks Online API + MCP need an API key?"
      },
      {
        "answer": "Yes. Puzzle API and MCP has a hosted endpoint at https://app.puzzle.io/mcp and QuickBooks Online API + MCP at https://quickbooks.api.intuit.com/v3.",
        "question": "Can an agent call Puzzle API and MCP and QuickBooks Online API + MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 65 against 38",
          "Security \u0026 auth, 73 against 38"
        ],
        "also": null,
        "goodFor": "Startups already on Puzzle who want an assistant to answer finance questions and draft bookkeeping. xero, quickbooks-online and pennylane are the nearest listings; teams wanting a self-serve API should look there.",
        "slug": "puzzle",
        "watchFor": "MCP tool list and schemas not published"
      },
      {
        "aheadOn": [
          "Reliability, 40 against 15",
          "Agent ergonomics, 68 against 56",
          "Payments \u0026 pricing, 30 against 15",
          "Maintenance \u0026 community, 65 against 53"
        ],
        "also": [
          "Runs on your own machine"
        ],
        "goodFor": "An agent working a US small business's books, where QuickBooks is the default ledger.",
        "slug": "quickbooks-online",
        "watchFor": "Rate limits, developer terms, partner tiers and deprecation rules are behind a JavaScript portal that returns nothing to a plain fetch"
      }
    ],
    "history": {
      "puzzle": null,
      "quickbooks-online": [
        {
          "causes": [
            "evidence",
            "time"
          ],
          "date": "2026-11-04",
          "delta": -3.6,
          "from": 49.3,
          "fromGrade": "D",
          "to": 45.7,
          "toGrade": "E"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 49.2,
          "fromGrade": "D",
          "to": 49.3,
          "toGrade": "D"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.1,
          "from": 49.3,
          "fromGrade": "D",
          "to": 49.2,
          "toGrade": "D"
        }
      ]
    },
    "job": {
      "capability": "accounting.ledger",
      "name": "Accounting ledgers"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-puzzle.json",
        "title": "Apideck Accounting API + MCP vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apideck-accounting-vs-quickbooks-online.json",
        "title": "Apideck Accounting API + MCP vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/apideck-accounting-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/codat-vs-puzzle.json",
        "title": "Codat vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/codat-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/codat-vs-quickbooks-online.json",
        "title": "Codat vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/codat-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-puzzle.json",
        "title": "FreeAgent API vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freeagent-vs-quickbooks-online.json",
        "title": "FreeAgent API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/freeagent-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freshbooks-vs-puzzle.json",
        "title": "FreshBooks API vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/freshbooks-vs-quickbooks-online.json",
        "title": "FreshBooks API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/freshbooks-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/merge-accounting-vs-puzzle.json",
        "title": "Merge Accounting API vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/merge-accounting-vs-quickbooks-online.json",
        "title": "Merge Accounting API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/merge-accounting-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-puzzle.json",
        "title": "Odoo External API vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.json",
        "title": "Odoo External API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pennylane-vs-puzzle.json",
        "title": "Pennylane vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pennylane-vs-quickbooks-online.json",
        "title": "Pennylane vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/pennylane-vs-quickbooks-online"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puzzle-vs-rotki-mcp.json",
        "title": "Puzzle API and MCP vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/puzzle-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puzzle-vs-rutter.json",
        "title": "Puzzle API and MCP vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/puzzle-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puzzle-vs-xero.json",
        "title": "Puzzle API and MCP vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/puzzle-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puzzle-vs-zoho-books.json",
        "title": "Puzzle API and MCP vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/puzzle-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rotki-mcp.json",
        "title": "QuickBooks Online API + MCP vs rotki MCP server",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rotki-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rutter.json",
        "title": "QuickBooks Online API + MCP vs Rutter Accounting API",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-rutter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-xero.json",
        "title": "QuickBooks Online API + MCP vs Xero API + MCP",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-xero"
      },
      {
        "json": "https://www.anchorterminal.com/compare/quickbooks-online-vs-zoho-books.json",
        "title": "QuickBooks Online API + MCP vs Zoho Books",
        "url": "https://www.anchorterminal.com/compare/quickbooks-online-vs-zoho-books"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-puzzle.json",
        "title": "Invoice Ninja API vs Puzzle API and MCP",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-puzzle"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-quickbooks-online.json",
        "title": "Invoice Ninja API vs QuickBooks Online API + MCP",
        "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-quickbooks-online"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 25,
        "edge": "quickbooks-online",
        "key": "reliability",
        "name": "Reliability",
        "puzzle": 15,
        "quickbooks-online": 40,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 27,
        "edge": "puzzle",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "puzzle": 65,
        "quickbooks-online": 38,
        "weight": 13
      },
      {
        "by": 12,
        "edge": "quickbooks-online",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "puzzle": 56,
        "quickbooks-online": 68,
        "weight": 13
      },
      {
        "by": 35,
        "edge": "puzzle",
        "key": "security",
        "name": "Security \u0026 auth",
        "puzzle": 73,
        "quickbooks-online": 38,
        "weight": 14
      },
      {
        "by": 15,
        "edge": "quickbooks-online",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "puzzle": 15,
        "quickbooks-online": 30,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 12,
        "edge": "quickbooks-online",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "puzzle": 53,
        "quickbooks-online": 65,
        "weight": 7
      },
      {
        "by": 1,
        "edge": "quickbooks-online",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "puzzle": 49,
        "quickbooks-online": 50,
        "weight": 7
      }
    ],
    "summary": "Puzzle API and MCP and QuickBooks Online API + MCP score within a point of each other on agent readiness, 46.2 (D) and 45.7 (E). QuickBooks Online API + MCP leads on reliability, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community. Both do accounting ledgers.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "puzzle": "Puzzle customers can connect their books to Claude or ChatGPT through a hosted MCP server that is read-only by default and asks before every write, with OAuth scoped to chosen companies. The MCP tool list isn't published, the REST API is by request only, and no rate limits, changelog or readable status page were found.",
      "quickbooks-online": "Official MCP server from Intuit with 145 tools and flags to remove write, update or delete tools. Rate limits, developer terms, partner tiers and deprecation rules are behind a JavaScript portal that returns nothing to a plain fetch, and no OpenAPI file or readable changelog was found."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online",
    "json": "https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online.min.md"
  },
  "markdown": "Puzzle API and MCP and QuickBooks Online API + MCP score within a point of each other on agent readiness, 46.2 (D) and 45.7 (E). QuickBooks Online API + MCP leads on reliability, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community. Both do accounting ledgers.\n\n- Puzzle API and MCP: grade D, 46.2/100, rank #1180 of 1510. Markdown https://www.anchorterminal.com/tools/puzzle.md · JSON https://www.anchorterminal.com/api/v1/tools/puzzle.json\n- QuickBooks Online API + MCP: grade E, 45.7/100, rank #1190 of 1510. Markdown https://www.anchorterminal.com/tools/quickbooks-online.md · JSON https://www.anchorterminal.com/api/v1/tools/quickbooks-online.json\n- Best accounting and invoicing APIs for AI agents: https://www.anchorterminal.com/best/accounting/index.md\n- All 90 accounting comparisons: https://www.anchorterminal.com/compare/accounting/index.md\n\n## Which one, for what\n\n### Puzzle API and MCP (D)\n\nGood for: Startups already on Puzzle who want an assistant to answer finance questions and draft bookkeeping. xero, quickbooks-online and pennylane are the nearest listings; teams wanting a self-serve API should look there.\n\nAhead on:\n- Schema \u0026 documentation, 65 against 38\n- Security \u0026 auth, 73 against 38\n\nWatch for: MCP tool list and schemas not published\n\n### QuickBooks Online API + MCP (E)\n\nGood for: An agent working a US small business's books, where QuickBooks is the default ledger.\n\nAhead on:\n- Reliability, 40 against 15\n- Agent ergonomics, 68 against 56\n- Payments \u0026 pricing, 30 against 15\n- Maintenance \u0026 community, 65 against 53\n\nAlso in its favour:\n- Runs on your own machine\n\nWatch for: Rate limits, developer terms, partner tiers and deprecation rules are behind a JavaScript portal that returns nothing to a plain fetch\n\n\n## Why the edge\n\n### Security \u0026 auth: Puzzle API and MCP +35\n\n- Puzzle API and MCP (73): OAuth for MCP with a per-company choice and read-only default, and OAuth 2.0 with granular scopes on the API, defaulting to read-only scopes (28). Read-only by default, writes an opt-in beta with confirmation for each change (18). Bank descriptions and vendor names are third-party text, and no prompt-injection guidance was found (3). Every API request is logged per the docs, and a firm activity endpoint returns an audit log (12). A SOC 2 claim in the API docs and a bug bounty policy page; no security.txt (12). 28 + 18 + 3 + 12 + 12 = 73.\n- QuickBooks Online API + MCP (38): OAuth 2.0 with OpenID Connect, one-hour access tokens and rotating refresh tokens of about 101 days. The accounting scope is a single grant over the whole ledger, with no read-only scope (22). No read-only mode in the API. The official MCP can drop create, update and delete tools by flag (8). Returns the company's records with customer and vendor text and no injection guidance (3). No API audit view found. QuickBooks' own audit log wasn't checked (0, unchecked). security.intuit.com returns only a loading message and www.intuit.com/.well-known/security.txt answers 400, so we couldn't confirm a disclosure policy, bounty or certifications (5, unchecked).\n\n### Schema \u0026 documentation: Puzzle API and MCP +27\n\n- Puzzle API and MCP (65): The API reference on ReadMe is generated from an OpenAPI file, though we didn't download the file itself; the MCP tool schemas aren't published (18). llms.txt and Markdown pages on puzzle-api.readme.io (10). Endpoint descriptions name the required scope and explain defaults such as cash basis (14). Typed parameters with documented limits, such as companies capped at 100 a page (11). An error table with HTTP codes and errorContext shapes, and example requests (12). No changelog or version scheme found (0). 18 + 10 + 14 + 11 + 12 + 0 = 65.\n- QuickBooks Online API + MCP (38): No OpenAPI spec found. Intuit's Java SDK repository publishes the V3 payload schemas as XSD, about 20,000 lines with some 200 complex types and about 110 simple types, many of them enums. They type every entity but don't describe endpoints, so part credit (10 of 25). No llms.txt or Markdown docs; the developer docs pages returned a loading message to a plain fetch on 1 October (0). The official MCP server's descriptions are one line, such as \"Create an invoice in QuickBooks Online.\" (6). The XSDs carry enums such as TaxExcluded, TaxInclusive and NotApplicable, the MCP's Zod schemas use min and positive, and the Java, .NET and PHP SDKs are typed (12). The OAuth client documents its error codes. The API's own error and example pages couldn't be read (5). Minor versions (the Java SDK targets 75). The dated change posts credited earlier were on Intuit's medium.com blog, now struck (robots.txt disallows ClaudeBot), and the portal's release notes are unread, so versioning alone (5). 10 + 0 + 6 + 12 + 5 + 5 = 38.\n\n### Reliability: QuickBooks Online API + MCP +25\n\n- Puzzle API and MCP (15): Hosted reading. status.puzzle.io exists but answered 403 to our reader, so no status page or history could be read (0, then 5 for no readable history). No rate limits found in the API docs (0). The errors page documents 409 RESOURCE_PROCESSING with retry later and 500 with retry, but no 429 or idempotency guidance (5). No SLA (0). MCP read access is live, write access is a beta, and the API docs say the API is under development (5). 0 + 5 + 0 + 5 + 0 + 5 = 15.\n- QuickBooks Online API + MCP (40): Statuspage at status.developer.intuit.com with separate QuickBooks Online API, sandbox, OAuth, webhooks and Payments components (20, per the 1 October check, not re-read on 4 November). Incident line 0 held. The 8 July and 26 July majors have left the 90-day window from 6 August, and the window up to 1 October holds API timeouts with OAuth and sandbox failures for about 7.75 hours on 1 September, TaxCode and TaxRate 4001 errors for about 9.75 hours on 22 and 23 September, sandbox creation failing from 5 September and the sandbox view down on 30 September. 2 October to 4 November is unread, because Intuit's platform terms bar scraping and the status page sits on intuit.com, and a partly unread window earns no credit for the unread part (0). The limits page is inside a JavaScript portal, so we couldn't read the numbers (0, unchecked). The official Node OAuth client's README retries 408, 429 and 5xx with backoff. Intuit's 31 August blog post on Retry-After and RequestId sat on medium.com, whose robots.txt now disallows ClaudeBot, so that reading is struck and backoff guidance alone remains (10). No SLA found (0). GA (10). 20 + 0 + 0 + 10 + 0 + 10 = 40.\n\n### Payments \u0026 pricing: QuickBooks Online API + MCP +15\n\n- Puzzle API and MCP (15): No x402, MPP or L402 (0). Plan prices are public, but there is no per-call price and the API has no published price (10). \"Try for free\" on every plan, with trial length and card requirement not stated on the pages read (5). A person signs up and authorises in a browser, and API credentials come by email (0). 0 + 10 + 5 + 0 = 15.\n- QuickBooks Online API + MCP (30): No x402, MPP or L402 (0). QuickBooks Online plans are priced publicly in local currency on quickbooks.intuit.com. Intuit's partner tiers (the status page names Builder partners and partner tier subscriptions on 10 July 2026) and any metering of API calls are inside the portal, so we scored plan-only (10). Free sandbox companies with a developer account, no card per the 30 September check (20). Browser signup, app registration and an OAuth consent in a browser (0).\n\n### Agent ergonomics: QuickBooks Online API + MCP +12\n\n- Puzzle API and MCP (56): MCP tool count and sizes unpublished, so context cost can't be read (10 of 25). API list endpoints page with count and after or limit, and filter by date and status (16). Error codes and errorContext name the field or resource at fault (17). No idempotency keys found; the MCP server asks for confirmation before writes (8). No official SDKs; few required parameters on reads (5). 10 + 16 + 17 + 8 + 5 = 56.\n- QuickBooks Online API + MCP (68): The query endpoint takes where clauses with STARTPOSITION and MAXRESULTS, so reads can be cut down server-side. The official MCP loads 145 tools, with DISABLE_WRITE, DISABLE_UPDATE and DISABLE_DELETE flags to drop whole groups (15). Query filtering and paging on every entity, plus reports with date parameters (18). Fault responses carry numbered codes such as 4001, though the catalogue sits in the unreadable portal (10). The Java and .NET SDKs send a requestid with each call. Intuit's description of RequestId as the idempotency mechanism was on its medium.com blog, now struck, so the earlier partial is kept on the SDK evidence and flagged. The MCP sets no readOnlyHint or destructiveHint (10). Official SDKs for Java, .NET and PHP and OAuth clients for Node and Python (15). 15 + 18 + 10 + 10 + 15 = 68.\n\n### Maintenance \u0026 community: QuickBooks Online API + MCP +12\n\n- Puzzle API and MCP (53): The MCP registry entry was published on 5 October 2026, 32 days before this check, and Puzzle's MCP post is dated 26 October (20). No release log, so changes in the 90 days can't be counted beyond the registry entry and the MCP launch (5). A help centre and support contact, but no public changelog or issue tracker (8). io.puzzle/puzzle sits under a domain-verified namespace in the official registry (15). No SDK or package to judge (5). 20 + 5 + 8 + 15 + 5 = 53.\n- QuickBooks Online API + MCP (65): PHP SDK v6.4.1 was tagged on 21 October 2026, 14 days before the check. It raises the PHP floor to 8.2 and the Guzzle floor and changes the JSON serializer, so it isn't dependency-only (30). In the 90 days from 6 August, .NET SDK V14.7.1.6 (17 September) and PHP SDK v6.4.1 (21 October), two dated releases. Java SDK v6.6.3 (3 August) falls before the window, and the dated API posts on Intuit's medium.com blog are struck (0). The official MCP repository merged community pull requests on 10 August and 15 September; Intuit's portal release notes and forum couldn't be read (12, the earlier partial, flagged). Official SDKs in Java, .NET and PHP and OAuth clients for Node and Python. The MCP isn't in the official registry (15). The MCP's CI builds, lints and tests on Ubuntu and Windows, with a dependency audit workflow (8). 30 + 0 + 12 + 15 + 8 = 65.\n\n## Score by category\n\n| Category | Weight | Puzzle API and MCP | QuickBooks Online API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 15 | 40 | QuickBooks Online API + MCP +25 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 65 | 38 | Puzzle API and MCP +27 |\n| Agent ergonomics | 13% (16.2 this run) | 56 | 68 | QuickBooks Online API + MCP +12 |\n| Security \u0026 auth | 14% (17.5 this run) | 73 | 38 | Puzzle API and MCP +35 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 15 | 30 | QuickBooks Online API + MCP +15 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 53 | 65 | QuickBooks Online API + MCP +12 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 49 | 50 | QuickBooks Online API + MCP +1 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **46.2 · D** | **45.7 · E** | |\n\n## Facts side by side\n\n| Fact | Puzzle API and MCP | QuickBooks Online API + MCP |\n| --- | --- | --- |\n| Kind | MCP server | HTTP API |\n| Vendor | Puzzle Financial Inc. | Intuit |\n| Hosted endpoint | `https://app.puzzle.io/mcp` | `https://quickbooks.api.intuit.com/v3` |\n| Transports | Streamable HTTP | HTTP, stdio |\n| Auth | OAuth | OAuth |\n| Pricing | Paid | Your plan |\n| x402 | no | no |\n| Licence | none | MIT |\n| Tools exposed | none | 145 |\n| Read-only variant documented | yes | no |\n| llms.txt | yes | no |\n| MCP registry | `io.puzzle/puzzle` | not listed |\n| Last release | 2026-10-05 | 2026-10-21 |\n| Terms last updated | 2023-06-01 | couldn't be read |\n| Privacy policy last updated | 2025-12-19 | 2026-03-09 |\n| Customer content may train models | not found in the text | yes |\n| Terms restrict automated access | yes | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | yes | couldn't be read |\n| Popularity | none | 145 stars, 400k npm/wk |\n| Agent reviews | none | 2/5 (2) |\n\n## How the scores have moved\n\n### Puzzle API and MCP\n\nNo score change since it was listed.\n\n### QuickBooks Online API + MCP\n\n- -3.6 on 4 November 2026 (D to E): new evidence, time\n- +0.1 on 27 October 2026: checklist\n- -0.1 on 8 October 2026: checklist\n\n## Verdicts\n\n**Puzzle API and MCP.** Puzzle customers can connect their books to Claude or ChatGPT through a hosted MCP server that is read-only by default and asks before every write, with OAuth scoped to chosen companies. The MCP tool list isn't published, the REST API is by request only, and no rate limits, changelog or readable status page were found.\n\n**QuickBooks Online API + MCP.** Official MCP server from Intuit with 145 tools and flags to remove write, update or delete tools. Rate limits, developer terms, partner tiers and deprecation rules are behind a JavaScript portal that returns nothing to a plain fetch, and no OpenAPI file or readable changelog was found.\n\n## Before you call either\n\n### Puzzle API and MCP\n\n1. Connect with read-only access first and ask the user before turning on read-write\n2. Expect a confirmation step on every proposed transaction change; don't retry it as an error\n3. On 409 RESOURCE_PROCESSING wait for the sync to finish, then retry\n4. Treat bank and vendor text as untrusted input\n\n### QuickBooks Online API + MCP\n\n1. Store the realmId with the tokens. Every URL needs it and the token alone doesn't name the company\n2. Persist the new refresh token from every refresh response. The previous one expires 24 hours later\n3. Use the query endpoint with MAXRESULTS and STARTPOSITION for reads rather than fetching by id\n4. Send a unique `requestid` query parameter on writes, as Intuit's Java and .NET SDKs do, and check for an existing record before retrying a create\n5. On 429, back off before retrying, and don't retry other 4xx errors\n\n## Questions\n\n### Which is better for AI agents, Puzzle API and MCP or QuickBooks Online API + MCP?\n\nPuzzle API and MCP and QuickBooks Online API + MCP score within a point of each other on agent readiness, 46.2 (D) and 45.7 (E). QuickBooks Online API + MCP leads on reliability, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community.\n\n### Do Puzzle API and MCP and QuickBooks Online API + MCP need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Puzzle API and MCP and QuickBooks Online API + MCP without installing anything?\n\nYes. Puzzle API and MCP has a hosted endpoint at https://app.puzzle.io/mcp and QuickBooks Online API + MCP at https://quickbooks.api.intuit.com/v3.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online.json, and with the fewest tokens: https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"puzzle\", \"b\": \"quickbooks-online\"}`. From a terminal: `anchor compare puzzle quickbooks-online`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/puzzle.json and https://www.anchorterminal.com/api/v1/tools/quickbooks-online.json\n\n## Other comparisons with Puzzle API and MCP or QuickBooks Online API + MCP\n\n- [Apideck Accounting API + MCP vs Puzzle API and MCP](https://www.anchorterminal.com/compare/apideck-accounting-vs-puzzle.md)\n- [Apideck Accounting API + MCP vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/apideck-accounting-vs-quickbooks-online.md)\n- [Codat vs Puzzle API and MCP](https://www.anchorterminal.com/compare/codat-vs-puzzle.md)\n- [Codat vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/codat-vs-quickbooks-online.md)\n- [FreeAgent API vs Puzzle API and MCP](https://www.anchorterminal.com/compare/freeagent-vs-puzzle.md)\n- [FreeAgent API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/freeagent-vs-quickbooks-online.md)\n- [FreshBooks API vs Puzzle API and MCP](https://www.anchorterminal.com/compare/freshbooks-vs-puzzle.md)\n- [FreshBooks API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/freshbooks-vs-quickbooks-online.md)\n- [Merge Accounting API vs Puzzle API and MCP](https://www.anchorterminal.com/compare/merge-accounting-vs-puzzle.md)\n- [Merge Accounting API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/merge-accounting-vs-quickbooks-online.md)\n- [Odoo External API vs Puzzle API and MCP](https://www.anchorterminal.com/compare/odoo-vs-puzzle.md)\n- [Odoo External API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/odoo-vs-quickbooks-online.md)\n- [Pennylane vs Puzzle API and MCP](https://www.anchorterminal.com/compare/pennylane-vs-puzzle.md)\n- [Pennylane vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/pennylane-vs-quickbooks-online.md)\n- [Puzzle API and MCP vs rotki MCP server](https://www.anchorterminal.com/compare/puzzle-vs-rotki-mcp.md)\n- [Puzzle API and MCP vs Rutter Accounting API](https://www.anchorterminal.com/compare/puzzle-vs-rutter.md)\n- [Puzzle API and MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/puzzle-vs-xero.md)\n- [Puzzle API and MCP vs Zoho Books](https://www.anchorterminal.com/compare/puzzle-vs-zoho-books.md)\n- [QuickBooks Online API + MCP vs rotki MCP server](https://www.anchorterminal.com/compare/quickbooks-online-vs-rotki-mcp.md)\n- [QuickBooks Online API + MCP vs Rutter Accounting API](https://www.anchorterminal.com/compare/quickbooks-online-vs-rutter.md)\n- [QuickBooks Online API + MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/quickbooks-online-vs-xero.md)\n- [QuickBooks Online API + MCP vs Zoho Books](https://www.anchorterminal.com/compare/quickbooks-online-vs-zoho-books.md)\n- [Invoice Ninja API vs Puzzle API and MCP](https://www.anchorterminal.com/compare/invoice-ninja-vs-puzzle.md)\n- [Invoice Ninja API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/invoice-ninja-vs-quickbooks-online.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Puzzle API and MCP vs QuickBooks Online API + MCP",
        "url": ""
      }
    ],
    "description": "Puzzle and QuickBooks Online score within a point of each other for accounting ledgers, 46.2 and 45.7 out of 100. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Puzzle API and MCP D 46.2",
      "QuickBooks Online API + MCP E 45.7",
      "scores"
    ],
    "h1": "Puzzle API and MCP vs QuickBooks Online API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/puzzle-vs-quickbooks-online",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Puzzle vs QuickBooks Online for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/puzzle-vs-quickbooks-online"
  },
  "tokens": {
    "markdown": 4750,
    "slim": 2880
  },
  "version": 1
}
