DocOrbit v0.2.4 released — Production OpenAPI Discovery, Markdoc Extraction & Recursive Tree Crawler Read Documentation →
DOCUMENTATION INTELLIGENCE LAYER

Up-to-date docs for
AI coding agents.

Stop letting Cursor, Claude, and Windsurf hallucinate deprecated APIs. DocOrbit reconciles lockfiles across 8 ecosystems, serves local FTS5 search in 1.3ms, and enforces closed-loop AST contracts.

$ npx -y docorbit mcp
docorbit-ast-inspector // v0.2.4 ● active
// Detected project lockfile: package.json ("next": "^15.1.0")
// Prompt: "Create dynamic route handler for /api/user/[id]"

❌ WITHOUT DOCORBIT (Agent hallucinates v14 sync syntax):
export async function GET(request, { params }) {
const id = params.id; // TypeError: params is a Promise!
}

✔ WITH DOCORBIT (AST contract resolved to Next 15):
export async function GET(request, { params }) {
const { id } = await params; // VERIFIED (0 lag)
return Response.json({ id });
}

→ Telemetry: 1.24ms SQLite FTS5 • 412 tokens (-58% vs JSON)

How to Work with DocOrbit

DocOrbit runs silently inside Cursor, Claude, Windsurf, or custom agents. You don't need to manually read 50 pages of docs or paste massive text files. Give your agent the task and the documentation link — DocOrbit automates tree crawling, AST slicing, and contract verification in milliseconds.

STEP 01

Mount the MCP Server

Add DocOrbit to your harness config once (.cursor/mcp.json, Claude Desktop, Windsurf, or Roo Code). Zero external dependencies, local SQLite engine.

npx -y docorbit mcp
STEP 02

Prompt Your Agent with Docs

Mention the documentation URL or library name in your regular prompt and tell your agent to use DocOrbit for grounding and verification.

"The link of docs: https://... Use docorbit to set it up."
STEP 03

Zero-Hallucination Execution

The agent calls ingest_doc, get_implementation_context, and check_api to generate 100% build-passing, contract-verified code.

✔ AST Verified • 0 Deprecated Calls • 1.4ms SQLite
Agent Prompt Studio • Real-World Sample Prompts
Sample Agent Prompt
I want to setup stripe in my app, the link of stripe docs:
https://docs.stripe.com/payments/checkout
use docorbit to set it up.
Why this prompt succeeds: By naming the task, providing the authoritative documentation link, and specifying docorbit, your agent bypasses its training cutoff and queries the local MCP server directly for active API contracts.
What DocOrbit Does Behind the Scenes ● MCP Flow
1
Agent calls docorbit.ingest_doc({ url: "https://docs.stripe.com/payments/checkout" })
SSRF checked • Crawled 18 pages in 28ms • Cached into SQLite .docorbit/docorbit.db
2
Agent calls docorbit.get_implementation_context({ query: "checkout session create and webhook signature" })
Returned 412 clean tokens • Stripe v16 signatures • Prevents legacy Charges trap
3
Agent calls docorbit.check_api({ code: "...", language: "typescript" })
AST Code Verification: PASS (0 mismatches, 0 deprecated endpoints)
app/api/checkout/route.ts
import { NextResponse } from 'next/server';
import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
  apiVersion: '2024-12-18.acacia',
});

export async function POST(req: Request) {
  const { items } = await req.json();

  // DocOrbit AST verified: stripe.checkout.sessions.create parameters
  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    line_items: items.map((item: any) => ({
      price: item.priceId,
      quantity: item.quantity,
    })),
    mode: 'payment',
    success_url: `${process.env.NEXT_PUBLIC_URL}/success?session_id={CHECKOUT_SESSION_ID}`,
    cancel_url: `${process.env.NEXT_PUBLIC_URL}/canceled`,
  });

  return NextResponse.json({ url: session.url });
}
Sample Agent Prompt
I want to upgrade dynamic routes in my Next.js project to version 15. The link of docs:
https://nextjs.org/docs/app/building-your-application/upgrading/version-15
use docorbit to verify dynamic params and set it up.
Why this prompt succeeds: In Next.js 15, params and searchParams are Promises. Without DocOrbit, LLMs output Next 14 sync params.id causing immediate runtime exceptions.
What DocOrbit Does Behind the Scenes ● MCP Flow
1
Agent calls docorbit.find_api({ name: "Route Handler dynamic params" })
SemVer match against package.json ("next": "^15.1.0") • 1.2ms SQLite lookup
2
Agent calls docorbit.check_api({ code: "...", language: "typescript" })
Flags sync params access as version_mismatch • Enforces await params
app/api/users/[id]/route.ts
import { NextResponse } from 'next/server';

export async function GET(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  // DocOrbit AST verified: params is a Promise in Next.js 15
  const { id } = await params;
  return NextResponse.json({ userId: id, status: 'active' });
}
Sample Agent Prompt
I want to create user validation models in FastAPI. The link of docs:
https://fastapi.tiangolo.com/tutorial/body/
use docorbit to verify Pydantic v2 syntax and set it up.
Why this prompt succeeds: LLMs routinely mix up Pydantic v1 @validator and v2 @field_validator(mode='before'). DocOrbit inspects pyproject.toml or requirements.txt to ground the exact v2 syntax.
What DocOrbit Does Behind the Scenes ● MCP Flow
1
Agent calls docorbit.find_pitfall({ package: "pydantic", query: "validator vs field_validator" })
Detected PyPI lockfile (pydantic>=2.7.0) • Flags v1 deprecation pitfall
2
Agent calls docorbit.find_example({ task: "field_validator email lowercase" })
Retrieves grounded code example directly from authoritative FastAPI/Pydantic source
main.py
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr, field_validator

app = FastAPI()

class UserCreate(BaseModel):
    email: EmailStr
    age: int

    # DocOrbit verified: Pydantic v2 @field_validator with @classmethod
    @field_validator('email')
    @classmethod
    def normalize_email(cls, v: str) -> str:
        return v.lower().strip()

@app.post('/users')
def create_user(user: UserCreate):
    return {'email': user.email, 'status': 'created'}
Sample Agent Prompt
I want to setup custom brand colors in Tailwind CSS v4. The link of docs:
https://tailwindcss.com/docs/theme
use docorbit to set it up.
Why this prompt succeeds: Tailwind v4 eliminated tailwind.config.js in favor of CSS-first @theme blocks. DocOrbit ensures agents don't create obsolete JavaScript config files.
What DocOrbit Does Behind the Scenes ● MCP Flow
1
Agent calls docorbit.find_recipe({ task: "tailwind v4 custom theme configuration" })
Detected package.json ("tailwindcss": "^4.0.0") • Delivers pure CSS-first recipe
2
Agent calls docorbit.check_api({ code: "...", language: "css" })
Enforces CSS @theme syntax • Skips legacy tailwind.config.js file creation
app/globals.css
@import 'tailwindcss';

/* DocOrbit verified: Tailwind v4 CSS-first @theme directive */
@theme {
  --color-brand-primary: #10b981;
  --color-brand-accent: #34d399;
  --font-display: 'Inter', system-ui, sans-serif;
}

The 5 Hallucination Vectors Solved

Coding agents don't fail because LLMs lack intelligence. They fail because documentation is unversioned, full of escaped JSON bloat, or lacks AST validation.

SemVer Lockfile Grounding

An agent working in a Next.js 14 project gets fed Next.js 15 documentation and uses await params, breaking your build. DocOrbit reconciles your installed lockfile against documentation branches with SemVer laddering.

Detected Dependency: next@15.1.0 Ladder: Exact Match (100%)
Supported lockfiles: npm, cargo, go.mod, pypi, composer, pub, rubygems, maven

AST Code Verification

DocOrbit parses generated API calls with an AST engine to catch wrong HTTP methods, missing required params, and deprecated endpoints before your code is saved.

- stripe.charges.create(...) // Obsolete in v16
+ stripe.paymentIntents.create(...) // SCA Verified

Sub-Millisecond Engine

SQLite WAL mode, memory-mapped I/O (256MB), and prepared statement batching reduce search latency from 45ms to 1.3ms.

DocOrbit: 1.3ms 35x Faster
Context7: 45ms • Firecrawl: 150ms+

Pure Clean Markdown

No JSON escaping, no duplicated schemas. Direct GitHub Markdown delivery cuts token context consumption by 55%.

Payload: 412 tokens -58% Tokens
Raw JSON stringify: 1,840 tokens

Zero-Trust SSRF Shield

Strict RFC 1918/4193 blocklist, cloud metadata protection (169.254.169.254), and untrusted content provenance annotations.

✓ 169.254.0.0/16 Blocked
✓ Loopback & Private IPs Filtered

Configure Your Agent in 30 Seconds

DocOrbit runs as an agent-native MCP server over stdio or HTTP. Select your IDE or harness below to copy the drop-in configuration.

Location: ~/.cursor/mcp.json
{
  "mcpServers": {
    "docorbit": {
      "command": "npx",
      "args": ["-y", "docorbit", "mcp"]
    }
  }
}
Location: claude_desktop_config.json
{
  "mcpServers": {
    "docorbit": {
      "command": "npx",
      "args": ["-y", "docorbit", "mcp"]
    }
  }
}
Terminal Command
claude mcp add docorbit -- npx -y docorbit mcp
Location: ~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "docorbit": {
      "command": "npx",
      "args": ["-y", "docorbit", "mcp"]
    }
  }
}
Location: ~/.config/zed/settings.json
{
  "experimental": {
    "model_context_protocol": {
      "servers": {
        "docorbit": {
          "command": "npx",
          "args": ["-y", "docorbit", "mcp"]
        }
      }
    }
  }
}
Location: cline_mcp_settings.json
{
  "mcpServers": {
    "docorbit": {
      "command": "npx",
      "args": ["-y", "docorbit", "mcp"]
    }
  }
}
Location: ~/.continue/config.json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "docorbit", "mcp"]
        }
      }
    ]
  }
}
Avante.nvim Lua setup
require("avante").setup({
  mcp_servers = {
    docorbit = { command = "npx", args = { "-y", "docorbit", "mcp" } }
  }
})
TypeScript MCP Client
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const transport = new StdioClientTransport({ command: "npx", args: ["-y", "docorbit", "mcp"] });
const client = new Client({ name: "my-agent", version: "1.0.0" }, { capabilities: {} });
await client.connect(transport);
const res = await client.callTool({ name: "get_implementation_context", arguments: { task: "Stripe payment" } });

Head-to-Head Competitor Benchmark

Empirical evaluation comparing DocOrbit against Context7, Firecrawl, and raw docs crawling across accuracy, latency, and AST verification.

Dimension / Metric Official Docs Fetch Firecrawl Scraper Context7 (Upstash) DocOrbit (v0.2.4)
Search Latency ~350ms (HTTP) ~150ms+ (Cloud API) ~45ms (Network API) ~1.3ms (SQLite FTS5)
Context Assembly Latency ~220ms ~140ms ~50ms ~2.8ms (Prepared)
Held-Out Eval Accuracy 83.3% (-16.7%) 83.3% (-16.7%) 83.3% (-16.7%) 100.0% (0 Hallucinated)
Overall Task Success Rate 70.6% 76.5% 82.4% 88.2%
Retrieval Precision@k 58.2% 61.5% 69.1% 94.1%
Retrieval Recall@k 63.4% 70.9% 75.3% 94.1%
AST Code Verification None None None 9 Catches / 0 False Pos
Payload Delivery Format Raw HTML / MD Raw HTML / MD Escaped JSON Wrapper Pure Clean Markdown
Token Consumption Excessive (HTML bloat) High (Boilerplate) High (JSON stringify) -55% to -60% Tokens
Local-First & Offline No No No Yes (Embedded SQLite)

15 Agent-Native MCP Tools

Engineered specifically for LLMs. Delivers clean Markdown by default, with optional structured JSON mode.

search_docs retrieval

Deterministic hybrid search over sliced documentation chunks with SemVer boosting.

search_docs(query, docVersion?, library?, limit?)
get_doc retrieval

Retrieve a complete normalized document or specific section chunk by URL or ID.

get_doc(url?, chunkId?, library?, docVersion?)
find_api retrieval

Structured OpenAPI & Swagger search with exact parameters, methods, and schemas.

find_api(endpoint?, method?, query?, library?)
find_example retrieval

Find verified code snippets filtered by programming language, framework, or task.

find_example(task?, language?, framework?)
find_pitfall retrieval

Search explicit breaking changes, deprecation warnings, and runtime gotchas.

find_pitfall(task?, kind?, library?)
check_api verification

Verify generated API calls against indexed documentation contracts via AST parsing.

check_api(endpoint, method?, code?, docVersion?)
diff_docs verification

Compare two documentation versions to identify added, removed, or changed APIs.

diff_docs(fromVersion, toVersion, sourceId?)
analyze_impact verification

Scan project workspace source code against deprecated APIs between versions.

analyze_impact(fromVersion, toVersion, projectDir?)
get_implementation_context retrieval

Pack holistic multi-dimensional context (APIs + examples + pitfalls) within token limits.

get_implementation_context(task, tokenBudget?, library?)
list_sources discovery

List all indexed documentation sources, formats, snapshots, and authority scores.

list_sources(format?, docVersion?)
ingest_doc discovery

Fetch, normalize, slice, and index external documentation from URL or raw markdown.

ingest_doc(url?, content?, library?, docVersion?)
get_docs_map discovery

Return hierarchical tree of available documentation sections and token budgets.

get_docs_map(library?, docVersion?)
get_version discovery

Inspect project workspace dependencies and resolve authoritative doc versions.

get_version(package?, ecosystem?)
find_recipe export

Synthesize evidence-grounded implementation recipes with step-by-step guidance.

find_recipe(task, library?, docVersion?)
export_agent_context export

Export standardized agent guidance files: AGENTS.md, CLAUDE.md, skill.md, llms.txt.

export_agent_context(format, docVersion?)