---
title: Intro
description: Lock your agent's context to your stack. Scoped docs search for AI coding agents.
---
import { Card, Cards } from "@/components/card";
import { Callout } from "fumadocs-ui/components/callout";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Icon, Trophy, KeyRound, Rocket } from "lucide-react";
import { cabinetFiling } from "@lucide/lab";
**Docfork** is an MCP server that feeds your AI agent up-to-date documentation — scoped to the libraries you actually use.
## Where AI coding agents break
AI agents write code from stale training data. You get:
- **Wrong APIs.** The method was renamed two versions ago.
- **Wrong library.** You asked about Hono and got Express middleware patterns.
- **Wrong version.** The config shape changed in v4 but the agent writes v3 syntax.
You spend more time debugging the agent's output than writing the code yourself.
## How it works
<Steps>
<Step>
### You prompt
```txt theme={null}
Implement webhook signature verification with Stripe. use docfork
```
</Step>
<Step>
### Docfork queries
Up-to-date docs from the source - chunked and ranked for LLM comprehension.
</Step>
<Step>
### Agent writes correct code
The response uses current APIs, correct method signatures, and your project's library versions.
</Step>
</Steps>
## Cabinets
Ask about routing and you get results from Next.js, Express, Hono, and React Router — even if you only use one. That's context bloat, and it's the fastest way to get hallucinated code.
**Cabinets** lock your agent to a verified stack:
```json title="MCP config with Cabinet"
{
"docfork": {
"url": "https://mcp.docfork.com/mcp",
"headers": {
"DOCFORK_API_KEY": "YOUR_API_KEY",
"DOCFORK_CABINET": "my-saas-app"
}
}
}
```
Your Cabinet contains `vercel/next.js` + `drizzle-team/drizzle-orm` + `better-auth/better-auth`. Now every query — no matter how ambiguous — returns only docs from those three libraries. Zero noise.
<Callout type="info" title="Free tier includes Cabinets">
1,000 requests/month. 5 team seats. No credit card. [Get your API key
→](https://app.docfork.com/signup)
</Callout>
## Quick start
<Tabs items={['Cursor', 'Claude Code', 'Opencode']}>
<Tab value="Cursor">
One-click install:
[](https://cursor.com/en/install-mcp?name=docfork&config=eyJ1cmwiOiJodHRwczovL21jcC5kb2Nmb3JrLmNvbS9tY3AifQ%3D%3D)
Or add manually to `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"docfork": {
"url": "https://mcp.docfork.com/mcp",
"headers": {
"DOCFORK_API_KEY": "YOUR_API_KEY"
}
}
}
}
```
</Tab>
<Tab value="Claude Code">
```bash
claude mcp add --transport http docfork https://mcp.docfork.com/mcp --header "DOCFORK_API_KEY: YOUR_API_KEY"
```
</Tab>
<Tab value="Opencode">
Add this to your Opencode configuration file.
```json
{
"mcp": {
"docfork": {
"type": "remote",
"url": "https://mcp.docfork.com/mcp",
"headers": {
"DOCFORK_API_KEY": "YOUR_API_KEY"
},
"enabled": true
}
}
}
```
</Tab>
</Tabs>
Then add `use docfork` to any prompt — or [set a rule](/best-practices) to make it automatic.
## Next steps
<Cards>
<Card
title="Quick Start"
href="/get-started/quick-start"
description="Get set up in under 60 seconds with Cursor, Claude Code, or Opencode."
icon={<Rocket />}
/>
<Card
title="Best Practices"
href="/get-started/best-practices"
description="Add one rule so your agent uses Docfork by default in every coding session."
icon={<Trophy />}
/>
<Card
title="Explore Cabinets"
href="/core/cabinets"
description="Lock your agent to your exact stack so results stay scoped and relevant."
icon={<Icon iconNode={cabinetFiling} />}
/>
<Card
title="Authentication"
href="/core/authentication"
description="Set up API keys or OAuth for secure MCP access."
icon={<KeyRound />}
/>
</Cards>