{
  "count": 7,
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "stacks": [
    {
      "components": [
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/anthropic-api.json",
          "name": "Claude API",
          "role": "Model",
          "score": 77.6,
          "tool": "anthropic-api",
          "why": "Best task-suite score in the run for multi-step research. Cache the system prompt and tool list."
        },
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pydantic-ai.json",
          "name": "Pydantic AI",
          "role": "Framework",
          "score": 80,
          "tool": "pydantic-ai",
          "why": "Typed outputs mean the answer arrives with its sources as fields, not prose. No telemetry by default."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/exa-mcp.json",
          "name": "Exa API + MCP",
          "role": "Search",
          "score": 66.1,
          "tool": "exa-mcp",
          "why": "Search and page contents in one API, anonymous on the hosted MCP and payable per call."
        },
        {
          "grade": "E",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/jina-reader.json",
          "name": "Jina Reader",
          "role": "Reader",
          "score": 45.3,
          "tool": "jina-reader",
          "why": "Any URL to Markdown with no key, about a twentieth of the tokens of raw HTML."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/wikimedia.json",
          "name": "Wikimedia REST API",
          "role": "Background",
          "score": 66.8,
          "tool": "wikimedia",
          "why": "Free, keyless, and every article carries its own citations."
        }
      ],
      "for": "an agent that answers questions from the web and shows its sources",
      "name": "Research agent",
      "slug": "research-agent",
      "summary": "A strong model, a typed framework that validates the answer, a search API built for agents, a reader that turns pages into Markdown, and an encyclopaedia with citations for the background.",
      "swaps": [
        "Tavily for Exa if you want credits rather than per-call prices",
        "LangGraph for Pydantic AI when a run lasts hours and must survive restarts",
        "GPT-6 Sol for Claude if you're already on OpenAI"
      ],
      "url": "https://www.anchorterminal.com/stacks/#research-agent",
      "watch": [
        "Exa's deep modes cost two to three times the fast mode. Pick the mode per question",
        "Send Wikimedia a User-Agent with a contact address or the limits bite",
        "Jina bills in tokens with no dollar price on the page"
      ],
      "weakest": {
        "grade": "E",
        "score": 45.3,
        "tool": "jina-reader"
      }
    },
    {
      "components": [
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/anthropic-api.json",
          "name": "Claude API",
          "role": "Model",
          "score": 77.6,
          "tool": "anthropic-api",
          "why": "The model the Agent SDK is built for."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/claude-agent-sdk.json",
          "name": "Claude Agent SDK",
          "role": "Framework",
          "score": 72.4,
          "tool": "claude-agent-sdk",
          "why": "File, shell and search tools with permission modes, out of the box."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/github-mcp-server.json",
          "name": "GitHub MCP Server",
          "role": "Repository",
          "score": 70.5,
          "tool": "github-mcp-server",
          "why": "Official, hosted, with toolsets to keep the schema small."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/context7.json",
          "name": "Context7",
          "role": "Library docs",
          "score": 73,
          "tool": "context7",
          "why": "Current docs for the library version in use, not the one the model remembers."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/playwright-mcp.json",
          "name": "Playwright MCP",
          "role": "Browser check",
          "score": 67.6,
          "tool": "playwright-mcp",
          "why": "Accessibility-tree snapshots cost far fewer tokens than screenshots."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/sentry-mcp.json",
          "name": "Sentry MCP",
          "role": "Production errors",
          "score": 70.4,
          "tool": "sentry-mcp",
          "why": "Reads the stack trace the change was meant to fix."
        }
      ],
      "for": "an agent that works in a repository, reads current docs, checks its work in a browser and reads production errors",
      "name": "Coding agent",
      "slug": "coding-agent",
      "summary": "Claude Code's own loop as a library, with the official GitHub server, library docs in the context window, a browser for checking the result and the error tracker for what broke.",
      "swaps": [
        "OpenAI Agents SDK with GPT-6 Sol if you need other models",
        "Chrome DevTools MCP for Playwright when the job is debugging performance"
      ],
      "url": "https://www.anchorterminal.com/stacks/#coding-agent",
      "watch": [
        "Set `DISABLE_TELEMETRY=1` for the Agent SDK",
        "Context7's resolver description is long. Load it only when the agent needs docs",
        "Scope the GitHub server to one repository and a read-only toolset until you trust it"
      ],
      "weakest": {
        "grade": "B",
        "score": 67.6,
        "tool": "playwright-mcp"
      }
    },
    {
      "components": [
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/openai-api.json",
          "name": "OpenAI API",
          "role": "Model",
          "score": 82.8,
          "tool": "openai-api",
          "why": "Remote MCP in the Responses API with approval policies, and project-scoped keys."
        },
        {
          "grade": "AA",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/openai-agents-sdk.json",
          "name": "OpenAI Agents SDK",
          "role": "Framework",
          "score": 86.5,
          "tool": "openai-agents-sdk",
          "why": "Guardrails and human approval are first-class, and hand-offs suit triage."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/hubspot-mcp.json",
          "name": "HubSpot API + MCP",
          "role": "CRM",
          "score": 71.6,
          "tool": "hubspot-mcp",
          "why": "Official, hosted, OAuth, and the records most support work starts from."
        },
        {
          "grade": "C",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/atlassian-rovo-mcp.json",
          "name": "Atlassian Rovo MCP Server",
          "role": "Tickets and docs",
          "score": 58.1,
          "tool": "atlassian-rovo-mcp",
          "why": "Jira and Confluence through one hosted server."
        },
        {
          "grade": "C",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/slack-mcp.json",
          "name": "Slack MCP Server (official)",
          "role": "Chat",
          "score": 59.8,
          "tool": "slack-mcp",
          "why": "Read threads and post updates as the user."
        },
        {
          "grade": "D",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pagerduty-mcp.json",
          "name": "PagerDuty MCP Server",
          "role": "Incidents",
          "score": 48.5,
          "tool": "pagerduty-mcp",
          "why": "On-call and incident state from the source of truth."
        }
      ],
      "for": "an agent inside a company's own tools, working through customer records, tickets, chat and incidents with each user's own permissions",
      "name": "Operations and support agent",
      "slug": "operations-agent",
      "summary": "Everything here is OAuth inside the organisation's existing permissions, so the agent can do what the person could and nothing more.",
      "swaps": [
        "Claude API and Claude Agent SDK for OpenAI if your harness is already Claude",
        "Linear for Jira if that's where the work lives"
      ],
      "url": "https://www.anchorterminal.com/stacks/#operations-agent",
      "watch": [
        "Turn off tracing to OpenAI or add your own trace processor before customer data flows",
        "Atlassian switches remaining v1 connections to v2 tools on 2027-03-01",
        "PagerDuty's self-hosted server is archived. Use the hosted one"
      ],
      "weakest": {
        "grade": "D",
        "score": 48.5,
        "tool": "pagerduty-mcp"
      }
    },
    {
      "components": [
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/openai-api.json",
          "name": "OpenAI API",
          "role": "Model",
          "score": 82.8,
          "tool": "openai-api",
          "why": "GPT-6 Luna is cheap enough to run on every tick, Sol for the analysis."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/langgraph.json",
          "name": "LangGraph",
          "role": "Framework",
          "score": 70.6,
          "tool": "langgraph",
          "why": "Checkpoints, so a long-running monitor resumes after a restart."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/massive.json",
          "name": "Massive (formerly Polygon.io)",
          "role": "Equities and options",
          "score": 70,
          "tool": "massive",
          "why": "SIP and FINRA data with the sources named, and x402 for calls without an account."
        },
        {
          "grade": "D",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/coindesk-data-api.json",
          "name": "CoinDesk Data API",
          "role": "Digital assets",
          "score": 46.9,
          "tool": "coindesk-data-api",
          "why": "Highest data-quality score in the directory for digital assets. Disclosure: built by Anchor Terminal's founder, see the listing."
        },
        {
          "grade": "D",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/companies-house.json",
          "name": "Companies House API",
          "role": "Company facts",
          "score": 49.8,
          "tool": "companies-house",
          "why": "The statutory UK register, free."
        }
      ],
      "for": "an agent that answers questions about prices, companies and markets with data it can cite",
      "name": "Market data agent",
      "slug": "market-data-agent",
      "summary": "Consolidated-tape US market data, digital-asset data from a regulated benchmark administrator, the UK company register, and a durable framework for jobs that run all day.",
      "swaps": [
        "CoinGecko's x402 API for CoinDesk when the agent has to pay per call with no account",
        "Pydantic AI for LangGraph if the jobs are short"
      ],
      "url": "https://www.anchorterminal.com/stacks/#market-data-agent",
      "watch": [
        "Individual Massive plans are non-commercial. Check yours before an agent republishes a price",
        "CoinDesk has no free tier since 2026-05-21",
        "Companies House allows 600 requests per 5 minutes per key"
      ],
      "weakest": {
        "grade": "D",
        "score": 46.9,
        "tool": "coindesk-data-api"
      }
    },
    {
      "components": [
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/groq.json",
          "name": "GroqCloud",
          "role": "Fast model",
          "score": 75.7,
          "tool": "groq",
          "why": "GPT-OSS 20B at $0.075/$0.30 and about 1,000 tokens a second."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/openrouter.json",
          "name": "OpenRouter",
          "role": "Hard calls",
          "score": 68.8,
          "tool": "openrouter",
          "why": "Route the few hard calls to a frontier model with a `max_price` ceiling."
        },
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pydantic-ai.json",
          "name": "Pydantic AI",
          "role": "Framework",
          "score": 80,
          "tool": "pydantic-ai",
          "why": "Output validation retries fix cheap models' malformed answers."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/brave-search-mcp.json",
          "name": "Brave Search API + MCP",
          "role": "Search",
          "score": 68.1,
          "tool": "brave-search-mcp",
          "why": "$5 per 1,000 searches, published."
        },
        {
          "grade": "E",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/jina-reader.json",
          "name": "Jina Reader",
          "role": "Reader",
          "score": 45.3,
          "tool": "jina-reader",
          "why": "No key for 20 pages a minute."
        }
      ],
      "for": "an agent that makes thousands of small calls a day and has to stay cheap",
      "name": "Low cost, high volume",
      "slug": "low-cost",
      "summary": "Fast open-weight models for the many small calls, a router for the few hard ones, a framework that validates cheap models' output, and the cheapest search and reading in the directory.",
      "swaps": [
        "Gemini 3.8 Flash for Groq until its price doubles on 2027-01-01",
        "Mistral Small 4 for the fast model if the data must stay in the EU"
      ],
      "url": "https://www.anchorterminal.com/stacks/#low-cost",
      "watch": [
        "Groq retired models four times this quarter. Check `/models` at start-up",
        "OpenRouter's fee is 5.5% on card top-ups",
        "Brave needs a card even for the free tier"
      ],
      "weakest": {
        "grade": "E",
        "score": 45.3,
        "tool": "jina-reader"
      }
    },
    {
      "components": [
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/mistral-api.json",
          "name": "Mistral AI API",
          "role": "Model",
          "score": 71.3,
          "tool": "mistral-api",
          "why": "EU endpoint for 10% extra, and open weights you can run yourself later."
        },
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pydantic-ai.json",
          "name": "Pydantic AI",
          "role": "Framework",
          "score": 80,
          "tool": "pydantic-ai",
          "why": "No telemetry by default, runs wherever you do."
        },
        {
          "grade": "E",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/jina-reader.json",
          "name": "Jina Reader",
          "role": "Reader",
          "score": 45.3,
          "tool": "jina-reader",
          "why": "Jina AI GmbH, Berlin, now part of Elastic."
        },
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/apify-mcp.json",
          "name": "Apify MCP Server",
          "role": "Scraping",
          "score": 78.6,
          "tool": "apify-mcp",
          "why": "Apify Technologies s.r.o., Prague."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/open-meteo.json",
          "name": "Open-Meteo",
          "role": "Weather",
          "score": 63.5,
          "tool": "open-meteo",
          "why": "OpenMeteo GmbH, with European weather models among its sources."
        }
      ],
      "for": "teams that want their agent's vendors established in Europe",
      "name": "European vendors",
      "slug": "european-vendors",
      "summary": "A French model provider with EU endpoints, a framework that sends nothing home, and data and scraping from companies in Germany and the Czech Republic. Established in Europe isn't the same as processing only in Europe, so read each listing's data details.",
      "swaps": [
        "Companies House for UK company data. The UK isn't in the EU, but it's often the question"
      ],
      "url": "https://www.anchorterminal.com/stacks/#european-vendors",
      "watch": [
        "Mistral's Labs and preview models train on your data from 2026-09-25",
        "Jina's privacy statement is Elastic's",
        "Apify telemetry is on by default"
      ],
      "weakest": {
        "grade": "E",
        "score": 45.3,
        "tool": "jina-reader"
      }
    },
    {
      "components": [
        {
          "grade": "A",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/x402.json",
          "name": "x402",
          "role": "Protocol",
          "score": 79.7,
          "tool": "x402",
          "why": "No account and no protocol fee."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/coinbase-cdp-agentkit.json",
          "name": "Coinbase Developer Platform (Agentic Wallet, AgentKit, CDP MCP)",
          "role": "Wallet",
          "score": 71.6,
          "tool": "coinbase-cdp-agentkit",
          "why": "Spend-capped wallet and payer tooling from the protocol's creator."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/blockrun-ai.json",
          "name": "BlockRun.AI",
          "role": "Model",
          "score": 72.5,
          "tool": "blockrun-ai",
          "why": "OpenAI-compatible inference paid per request in USDC."
        },
        {
          "grade": "B",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/exa-mcp.json",
          "name": "Exa API + MCP",
          "role": "Search",
          "score": 66.1,
          "tool": "exa-mcp",
          "why": "$0.007 a search over x402."
        },
        {
          "grade": "BB",
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/massive.json",
          "name": "Massive (formerly Polygon.io)",
          "role": "Market data",
          "score": 70,
          "tool": "massive",
          "why": "x402 at agent.massive.com since September."
        }
      ],
      "for": "an agent with its own small wallet that buys what it needs per call, with no accounts",
      "name": "Pays its own way",
      "slug": "pays-its-own-way",
      "summary": "Every paid call here settles with x402 from a capped wallet. It's the smallest stack on the page and the only one that needs no human signup at all.",
      "swaps": [
        "CoinGecko's x402 API for Massive for digital-asset prices",
        "L402 sellers if the wallet holds bitcoin"
      ],
      "url": "https://www.anchorterminal.com/stacks/#pays-its-own-way",
      "watch": [
        "Cap the wallet. $5 is plenty to start",
        "BlockRun's domain is under a year old and its people aren't named",
        "Check the amount and payee in every 402 before signing"
      ],
      "weakest": {
        "grade": "B",
        "score": 66.1,
        "tool": "exa-mcp"
      }
    }
  ]
}
