MCP servers
Give agents reach with Model Context Protocol — the curated servers worth running, and what the benchmarks actually say.
The Model Context Protocol is the open standard for connecting agents to tools and data. Your agent runs an MCP client; servers expose tools over stdio or HTTP; the client converts them to OpenAI function format and the loop above just works. Unrefused serves the brain.
The ecosystem has consolidated fast: the official MCP Registry passed 45,000 listings in late 2026, with directories tracking 150,000+ servers. Quality varies wildly — these are the ones with real adoption and real benchmark track records.
The curated directory
| Server | Org | What it gives your agent | Stars |
|---|---|---|---|
github/github-mcp-server | GitHub | Repos, issues, PRs, Actions — natural-language repository management. Read-only and toolset-filtered modes. | 33.7k |
microsoft/playwright-mcp | Microsoft | Browser automation over the accessibility tree — the most-downloaded MCP server (28.6M npm downloads/mo). | 38.4k |
ChromeDevTools/chrome-devtools-mcp | Chrome | Performance traces, network inspection, live DOM debugging. | 53.8k |
upstash/context7 | Upstash | Up-to-date library docs injected at call time — kills stale-API hallucinations. | 63.3k |
browser-use/browser-use | Browser Use | Full browser control: forms, extraction, bookings. | 118k |
microsoft/markitdown | Microsoft | Office/PDF/image files → markdown an agent can read. | 190k |
netdata/netdata | Netdata | Live infra metrics, logs, alerts with anomaly detection. | 81k |
modelcontextprotocol/server-* | MCP reference | Filesystem, fetch, memory, sequential-thinking — the maintained reference set. | reference |
Stars measure adoption, not safety. For anything credentialled, prefer servers with scoped auth and start read-only.
Connecting one
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const mcp = new Client({ name: "unrefused-agent", version: "1.0" });
await mcp.connect(new StdioClientTransport({
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"],
}));
const { tools: mcpTools } = await mcp.listTools();
const tools = mcpTools.map((t) => ({
type: "function",
function: { name: t.name, description: t.description, parameters: t.inputSchema },
}));
// then: the standard tool-calling loop from /docs/agentsHTTP (Streamable) servers connect the same way with StreamableHTTPClientTransport and auth headers. The official registry is the safe place to discover servers — every listing names its transport and package.
What the benchmarks say
MCP tool use is hard, and the 2025–26 benchmark wave quantified it:
| Benchmark | Scope | Hardest result |
|---|---|---|
| MCPMark | 127 CRUD-heavy tasks across GitHub, Notion, Filesystem, PostgreSQL, Playwright — programmatic verification | Best model 52.56% pass@1; average task needs 16.2 turns and 17.4 tool calls |
| MCP-Universe | 6 domains, 11 real servers, execution-based evaluators | Best model 43.72% (GPT-5); Grok-4 33.3%, Claude-4.0-Sonnet 29.4% |
| MCP-AgentBench | 33 servers, 188 tools, 600 queries across complexity tiers | Outcome-oriented MCP-Eval methodology |
Read that honestly: every frontier model fails most MCP tasks. The differentiators the benchmarks isolate are exactly what this platform sells — long-context tolerance for sprawling traces, unfamiliar-tool reasoning, and not losing turns to refusals mid-loop. Pick your servers from the directory, wire the loop from Agents, and eval before you scale.
Spot an error or a gap? Tell us — and quote x-request-id if you have one.