Connect an AI assistant
This library is available as an MCP server. MCP (Model Context Protocol) is the standard way AI assistants such as Claude, ChatGPT, Cursor and others look things up in outside sources. Add the address below to your assistant and it can search the original papers and websites behind every benchmark. There is nothing to install, no account and no key.
The address
https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/mcp
Add it to your assistant
- Open your assistant's settings and look for Connectors, Integrations or MCP servers.
- Choose the option to add a custom connector or remote server.
- Paste the address above. If it asks for a name, use AI Benchmark Sources. Leave any login or key fields empty.
- Start a new conversation and ask about a benchmark by name, for example “Using the benchmark sources, what does HellaSwag measure?”
Claude (desktop and web)
Settings → Connectors → Add custom connector. Paste the address and save. In a chat, make sure the connector is switched on.
Claude Code
Run this once in a terminal:
claude mcp add --transport http benchrisk-evals https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/mcpCursor, VS Code, Windsurf and others
Add this to the editor's MCP configuration (some editors omit the
typeline), or download mcp.json:{ "mcpServers": { "benchrisk-evals": { "type": "http", "url": "https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/mcp" } } }Other assistants
Any assistant that supports remote MCP servers over HTTP can use the address. If it asks for a transport, choose HTTP or Streamable HTTP.
Asking good questions
- Name the benchmark. Assistants search better with “How is GPQA scored?” than “How is it scored?”.
- Ask for sources. The assistant can tell you which paper or page an answer came from.
- Twenty-six benchmarks are covered. The Benchmarks page lists them with what each one measures.
For developers
Three public endpoints are served by Cloudflare AI Search from the benchrisk namespace (instance benchmarks). They need no authentication and are rate limited to 1000 requests per 5 minutes.
| Endpoint | Address |
|---|---|
| MCP (Streamable HTTP, JSON-RPC 2.0) | https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/mcp |
| Search (ranked chunks with metadata) | https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/search |
| Chat completions (OpenAI-compatible, grounded in the index) | https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/chat/completions |
The search tool and metadata filters
The MCP server exposes one tool, search, with a free-text query. Every indexed chunk carries these metadata fields, all usable in ai_search_options.retrieval.filters, plus the built-in folder (always <tag>/), filename and timestamp. Operators: $eq (the default for a bare value), $ne, $in, $nin, $lt, $lte, $gt, $gte; several keys are combined with AND.
| Field | Meaning |
|---|---|
benchmark | Unique tag for the benchmark, e.g. mmlu or ailuminate-1.0 (listed on the Benchmarks page) |
benchmark_name | The benchmark's name in BenchRisk, e.g. MMLU or AILuminate10 |
doc_type | paper, website or repository |
source_url | Where the document was downloaded from |
benchrisk_url | The BenchRisk entry the document was chosen from |
MCP over HTTP
curl -s https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "How is the benchmark scored?",
"ai_search_options": {
"retrieval": {
"filters": {
"benchmark": "mmlu"
},
"max_num_results": 5
}
}
}
}
}'
Claude API (Python SDK, MCP connector)
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
betas=["mcp-client-2025-11-20"],
mcp_servers=[{"type": "url", "url": "https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/mcp", "name": "benchrisk-evals"}],
tools=[{"type": "mcp_toolset", "mcp_server_name": "benchrisk-evals"}],
messages=[{"role": "user", "content": "Using the benchrisk-evals search tool with the filter benchmark=truthfulqa, how are TruthfulQA questions constructed?"}],
)
for block in response.content:
if block.type == "text":
print(block.text)
REST
/search filtered to one benchmark and one document type:
curl -s https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/search \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Which hazard categories does the benchmark cover?"
}
],
"ai_search_options": {
"retrieval": {
"filters": {
"benchmark": "ailuminate-1.0",
"doc_type": "paper"
},
"max_num_results": 5
}
}
}'
/chat/completions (add "stream": true for server-sent events):
curl -s https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What does GSM8K test and how were the problems written?"
}
],
"ai_search_options": {
"retrieval": {
"filters": {
"benchmark": "gsm8k"
}
}
}
}'
Python without an SDK:
import requests
r = requests.post("https://ns-f1fc49e3-9bca-4aa2-b5a1-ef5dbc18588f.search.ai.cloudflare.com/search", json={
"messages": [{"role": "user", "content": "What is the pass@k metric?"}],
"ai_search_options": {"retrieval": {"filters": {"benchmark": "humaneval"}, "max_num_results": 5}},
}, timeout=60)
for chunk in r.json()["result"]["chunks"]:
print(chunk["score"], chunk["item"]["key"], chunk["text"][:120])
Machine-readable listing
benchmarks.json is the manifest this site is built from: every benchmark with its tag, description, reference, BenchRisk entry and the exact item keys indexed in Cloudflare. llms.txt is the same in plain text.