Heads up This site is currently under heavy development.

Model Context Protocol

Put AI Toolchain in your assistant

The MCP server hands an AI assistant the whole archive directly — every issue, full-text search across it, a tool's release history, its captured command-line flags and examples, its SBOM, and the analytics charts as data. It also answers the questions a page cannot: how a project scores against its peers, how several tools compare in one table, what practitioners have actually said about one, and what has shipped since you last asked. Ask your assistant a question about the market instead of reading a page and telling it what you found. It also takes contributions back: ask us to track a tool you run, or tell us what one is actually like to live with — feedback is stored with nothing identifying attached to it. Researcher and Business.

Endpoint https://mcp.aitoolchain.io/mcp

Streamable HTTP, JSON-RPC 2.0. Not the same host as the REST API — that one is a different distribution and answers 403 here. The same ctk_… key authenticates both.

What it is tested to answer

These 13 questions are called against this endpoint on a schedule with a real subscriber key, and graded on the answer rather than on the HTTP status. Anything else the server can do may still work — it is just not promised. Each one prints the coverage it depends on, because "tested" is not the same as "complete". Coverage measured 2026-09-23.

  1. Which flag or command in <tool> does X?

    e.g. “Which Ollama command runs a model locally?”

    search_tool_surface

    we checkAt least one flag comes back with its name, its help text, and whether a recorded run confirmed it.

    coverage 234 of 349 tracked tools

  2. Show me a command for <tool> that actually ran, and what it printed.

    e.g. “Give me a working Ollama command and its output.”

    get_tool_surface

    we checkThe reply carries the command, its exit code, and the first lines of what it printed — or says plainly that no run was recorded for this tool.

    coverage 4 of 349 tracked tools

  3. What is in <tool>'s supply chain, and how much of it is AI-authored?

    e.g. “What does LangChain depend on, and what share of its commits are AI-written?”

    get_tool_surface

    we checkThe sbom and code facets return a dependency count, a language mix and an AI-authorship attribution, each naming its own coverage.

    coverage 290 of 349 tracked tools

  4. What changed across the tools I run since <date>?

    e.g. “What shipped in Ollama, vLLM and LangChain since the first of the month?”

    get_tool_history

    we checkEvery release returned falls on or after the requested date, and any entry reconstructed from older history is marked as a backfill rather than presented as news.

    coverage 265 of 349 tracked tools

  5. What did vendor V change in its documentation without announcing it? Researcher and above

    e.g. “Did OpenAI change what its docs say about structured outputs last month?”

    list_issuesget_issue

    we checkThe Docs Weekly index lists which entries carry a full diff, and asking for one by its entry id returns the diff itself.

    coverage 6 Docs Weekly issues published

  6. Who is shipping fastest in category C, and on what sample?

    e.g. “Which model-serving tools shipped most this quarter, and how is that measured?”

    list_analyticsget_analytics

    we checkThe chart names its sources and sample sizes, and a named series returns its rows with the count it held back.

    coverage 16 published charts

  7. How does <tool> compare with its peers, and on what?

    e.g. “Is Ollama keeping up with the rest of model serving?”

    get_scorecard

    we checkEach dimension comes back with a score or a named reason it was not measured, plus the tool's rank among measured peers in its category.

    coverage 333 of 349 tracked tools

  8. Which of these tools is the healthier project?

    e.g. “Compare Ollama, vLLM and llama.cpp across everything you hold.”

    compare_tools

    we checkOne table covering every tool named, where an unmeasured cell reads as unmeasured and never as a zero, and untracked names are listed rather than dropped.

    coverage 333 of 349 tracked tools

  9. What do practitioners say about <tool>?

    e.g. “What do people report about running Ollama locally?”

    get_practitioner_signal

    we checkPassages come back quoted with their platform, date and link, evaluative ones first — or the reply says the corpus holds no linked discussion for this tool, which is not the same as no opinion existing.

    coverage 58 of 349 tracked tools

  10. How does <model> score on <benchmark>, and when was that measured?

    e.g. “Who leads SWE-bench, and against what market median?”

    get_benchmarks

    we checkEvery row carries its evaluator, source URL and date basis, and a standings table states the whole market's median and max beside the rows this roster tracks.

    coverage 21 models and agents scored

  11. What has shipped since I last checked?

    e.g. “Anything new across my AI toolchain since Tuesday?”

    get_changes_since

    we checkThe reply returns a cursor, and calling again with it returns nothing the first call already showed.

    coverage 265 of 349 tracked tools

  12. This tool is not tracked — can you ask for it?

    e.g. “Request coverage for a model-serving tool the roster is missing.”

    request_coverage

    we checkThe request is validated before it is queued and comes back with a receipt that states plainly it is proof of the send and not of the filing; a malformed URL is refused while the caller is still listening.

    coverage 349 tracked tools

  13. Can I tell you what a tool is actually like to run?

    e.g. “Share what running Ollama locally is really like.”

    submit_feedback

    we checkA rating-length submission is refused in favour of a sentence, and an accepted one comes back saying nothing identifying was stored, that it cannot be withdrawn, and that it is not published back to other readers.

    coverage 349 tracked tools

also The server ships its own prompts, so the multi-call workflows are one command in your client rather than something to reconstruct each session: a brief on one tool, a review of a whole toolchain, a category survey, alternatives to an incumbent, and what has shipped since last time. It also exposes the recent issues, the roster and the chart list as attachable resources.

writes Two of these send rather than read, and this endpoint is built so it can only ever send: it holds permission to put a message on one queue and no permission to read anything back, so it never touches subscriber records. Feedback carries no subscriber id and no timestamp finer than the date — which also means a submission cannot be withdrawn later, and the tool says so before it accepts one.

Tested does not mean complete. Coverage is per tool: one whose help output has never been parsed has no flags here even though it has them, and a facet with nothing recorded says so rather than returning an error. A flag found in documentation is not proof it exists in the version you have installed — a recorded run is, and those are marked.

1 Get a key

Generate one on your account page. It is shown once, so store it when you make it. Then export it — every snippet below reads it from the environment rather than embedding it, so nothing you paste into a config file carries a credential.

shell
export TOOLCHAIN_API_KEY="ctk_…"
      

Keys are a Researcher and Business feature, and the server enforces it on every request — there is no free tier here. Within that, Docs Weekly and the undredacted vendor names in the charts are Researcher and above; where a tier withholds something the reply says so rather than silently omitting it.

2 Add the server

Pick your client. Each registers the server as aitoolchain.

Claude Code

One command. Streamable HTTP, no bridge process.

Run this

claude code
claude mcp add --transport http aitoolchain https://mcp.aitoolchain.io/mcp \
  --header "Authorization: Bearer $TOOLCHAIN_API_KEY"
                

Or write this

.mcp.json
{
  "mcpServers": {
    "aitoolchain": {
      "type": "http",
      "url": "https://mcp.aitoolchain.io/mcp",
      "headers": {
        "Authorization": "Bearer ${TOOLCHAIN_API_KEY}"
      }
    }
  }
}
                

watch outYour shell expands $TOOLCHAIN_API_KEY before Claude Code ever sees it, so the command above writes the KEY ITSELF into ~/.claude.json. The .mcp.json form keeps ${TOOLCHAIN_API_KEY} as a placeholder and resolves it at launch — prefer it if the file is anywhere near a git repo. Add --scope user to the command to register the server for every project rather than the current one.

Codex

One command, or the equivalent block in ~/.codex/config.toml.

Run this

codex
codex mcp add aitoolchain \
  --url https://mcp.aitoolchain.io/mcp \
  --bearer-token-env-var TOOLCHAIN_API_KEY
                

Or write this

~/.codex/config.toml
[mcp_servers.aitoolchain]
url = "https://mcp.aitoolchain.io/mcp"
bearer_token_env_var = "TOOLCHAIN_API_KEY"
                

watch outCodex sends a bearer token and nothing else — it has no arbitrary-header option. That is why this server accepts Authorization: Bearer alongside x-api-key; a config that tries to set x-api-key here will not work.

Claude Desktop

Config file only — Settings → Developer → Edit Config.

claude_desktop_config.json
{
  "mcpServers": {
    "aitoolchain": {
      "url": "https://mcp.aitoolchain.io/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY_HERE"
      }
    }
  }
}
                

watch outClaude Desktop does not expand environment variables in this file, which is why the placeholder is spelled out rather than written as a variable. The key is stored in plain text on disk — revoke and reissue it at /account if the machine is shared.

opencode

Config file only — opencode has no add command.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aitoolchain": {
      "type": "remote",
      "url": "https://mcp.aitoolchain.io/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {env:TOOLCHAIN_API_KEY}"
      }
    }
  }
}
                

Cursor, Windsurf, Zed, Kiro, Continue

Clients that speak stdio only. mcp-remote bridges them to the HTTP endpoint; the config shape is the same in all of them.

mcp.json
{
  "mcpServers": {
    "aitoolchain": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.aitoolchain.io/mcp",
        "--header",
        "Authorization:Bearer ${TOOLCHAIN_API_KEY}"
      ]
    }
  }
}
                

watch outExport TOOLCHAIN_API_KEY in the environment the editor launches from — deliberately not an "env" block, because these files are workspace-scoped and a key inside a repo is the most common way one reaches a git history. On a shared host, treat a bridged key as visible to other users: the bridge takes its header as a command-line argument, and ps shows every process’s full argv.

3 Check it worked

Ask your assistant to list the tools it now has, or hit the endpoint directly — the reply tells you which half is wrong, the URL or the header.

shell
curl -s https://mcp.aitoolchain.io/mcp \
  -H "content-type: application/json" \
  -H "Authorization: Bearer $TOOLCHAIN_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
      
Subscribe to Researcher Already a subscriber? Generate a key →
my-toolchain — 0 tools
paste an install list to detect your tools

A brew list, a Brewfile, requirements.txt, a Dockerfile — or just the product names, free-form. Nothing leaves your browser.

    browse all tools → score card for your stack →

    Send us feedback