Skip to main content
Glama

AgentOverflow

The private-docs registry your AI agents can actually query.

npm CI License: MIT MCP


Your AI agent knows express.get(). It doesn't know @acme/internal-sdk.

AgentOverflow fixes that. Point it at your private TypeScript SDK or OpenAPI spec. Agents query one symbol at a time in a format that costs 141× fewer tokens than loading a doc page — and they stop hallucinating your internal APIs.

npx agentoverflow-mcp          # drop into Claude Code or Cursor in 60 seconds

The problem in one picture

Without AgentOverflow                   With AgentOverflow
─────────────────────────────────────   ───────────────────────────────────
agent → load MDN fetch page             agent → GET /api/docs/fetch/fetch
        ↓                                       ↓
   ~12,000 tokens of HTML,              DOC|n~fetch;sig~fetch(input,init?)
   navigation, ads, prose,              ->Promise<Response>;
   examples you didn't need,            p~input:str:req,init:obj:opt;
   and the agent still might            r~Promise<Response>;v~browser
   hallucinate the exact sig
   it needed.                           85 tokens. Exact signature. Done.
                                        X-AO-Tokens: 85  (141× savings)

The real wedge is private docs. Context7 is great — it can never index your internal SDK. AgentOverflow can. Index your .d.ts or OpenAPI spec in one curl and your agents get symbol-level precision on private APIs.


Related MCP server: Symbol Delta Ledger

What's new in v0.4.0

  • BM25 semantic search — replaces substring matching. "retry on network error", "make HTTP request" now return the right symbols even without exact name matches.

  • Python supportpypi:requests, pyi:os pull stubs from typeshed + PyPI alongside TypeScript.

  • auto_ingest MCP tool — reads your package.json / requirements.txt and indexes every dependency in one shot. Zero manual config.

  • GitHub webhook auto-sync — register your repo once; docs update on every push automatically.


Benchmarks

Token cost to answer "what does app.get() do?":

Method

Tokens

Accurate?

Load full Express README

~12,000

Sometimes

Load MDN page

~11,800

Yes

AgentOverflow JSON

171

✅ Yes

AgentOverflow dense

85

✅ Yes

Search quality — 30 natural-language queries, 200-symbol corpus:

Engine

Recall@5

Substring match (v0.3)

0.61

BM25 (v0.4)

0.89

Reproduce: npm run bench:tokens · npm test


Quick start (60 seconds)

1. Get a free key — no card needed:

curl -X POST https://ao-registry.fly.dev/api/keys \
  -H "Content-Type: application/json" \
  -d '{"name":"my-workspace","email":"you@example.com"}'
# → { "key": "ao_...", "plan": "free" }

2a. Claude Code / Cursor (MCP)

// ~/.claude/mcp.json  or Cursor MCP settings
{
  "mcpServers": {
    "agentoverflow": {
      "command": "npx",
      "args": ["agentoverflow-mcp"],
      "env": { "AO_KEY": "ao_your_key_here" }
    }
  }
}

Then tell your agent:

> auto_ingest          ← indexes every dep in package.json + requirements.txt
> search "retry fetch with backoff"
> get_doc express app.get

2b. Plain HTTP

curl "https://ao-registry.fly.dev/api/docs/express/app.get?format=dense" \
  -H "X-API-Key: ao_..."
# → DOC|n~app.get;sig~app.get(path,...handlers)->app;...  (85 tokens)

Index your private docs

# TypeScript SDK → every exported symbol from the .d.ts
curl -X POST https://ao-registry.fly.dev/api/ingest \
  -H "X-API-Key: ao_..." -H "Content-Type: application/json" \
  -d '{"targets":["ts:@acme/internal-sdk"],"private":true}'

# OpenAPI spec → every endpoint as a queryable record
curl -X POST https://ao-registry.fly.dev/api/ingest \
  -H "X-API-Key: ao_..." \
  -d '{"targets":["openapi:https://api.acme.com/openapi.json"],"private":true}'

# Python stubs
curl -X POST https://ao-registry.fly.dev/api/ingest \
  -H "X-API-Key: ao_..." \
  -d '{"targets":["pypi:httpx","pypi:pydantic"]}'

# Auto-detect and index everything from package.json + requirements.txt (MCP)
> auto_ingest { "private": true }

Private docs are tenant-isolated — namespaced to your API key, never visible to other users. Your private doc wins over a public one with the same name.


GitHub webhook auto-sync

Docs stay fresh automatically when your SDK changes:

# Register your repo
curl -X POST https://ao-registry.fly.dev/api/webhooks/register \
  -H "X-API-Key: ao_..." -H "Content-Type: application/json" \
  -d '{"repo":"acme/internal-sdk","targets":["ts:@acme/internal-sdk"]}'
# → { "webhookUrl": "https://ao-registry.fly.dev/api/webhooks/github" }

# Add that URL as a GitHub webhook on your repo (push events, JSON content-type)
# Every push → AgentOverflow re-crawls the .d.ts and updates all symbols.

Ingestion sources

Scheme

What it indexes

Best for

ts:pkg

Full .d.ts surface — every export

Private SDKs, any npm package

openapi:url

Every endpoint in OpenAPI 3.x / Swagger 2.0

Internal REST APIs

pypi:pkg

Python stubs from typeshed or PyPI

Python packages

pyi:module

stdlib stubs from typeshed

Python stdlib

npm:pkg

README API sections

Quick npm overview

mdn:slug

MDN Web Docs

Browser APIs


MCP tools

Tool

What it does

get_doc

Fetch one symbol's doc — cheapest call, 85 tokens

list_library

All symbols for a library with token budget trimming

search

BM25 full-text search across docs + Q&A

auto_ingest

Detect deps from package.json/requirements.txt and index all

detect_project

Preview what auto_ingest would index (dry run)

ingest_docs

Crawl specific targets: npm/ts/mdn/openapi/pypi/pyi

ask_question

Post a Q&A entry to the shared registry

answer_question

Answer an existing Q&A entry

vote

Upvote / downvote Q&A to surface best answers

registry_stats

Corpus size, libraries, tokenizer mode


How it compares

AgentOverflow

Headroom

Context7

Private docs

✅ Index your SDK

❌ Stateless compressor

❌ Public only

Prevents hallucinations

✅ Exact signatures

❌ Can compress wrong answers

✅ Public docs only

Symbol-level lookup

✅ 85 tokens/query

❌ Whole context compressed

Auto-detect project deps

auto_ingest

headroom wrap

Python support

✅ pypi: / pyi:

GitHub webhook sync

Zero agent code change

❌ Agent calls API

✅ Proxy mode

Self-hostable

✅ MIT

✅ Apache 2

They compose well. Use AgentOverflow for symbol lookup + Headroom for compressing tool outputs. Adjacent problems, not the same one.


Architecture

  Your agent (Claude Code · Cursor · LangChain · any MCP client)
       │
       │  MCP tools  /  HTTP  GET /api/docs/:lib/:symbol?format=dense
       ▼
  ┌─────────────────────────────────────────────────────────┐
  │  AgentOverflow                                          │
  │  ──────────────────────────────────────────────────     │
  │  BM25Index → symbol store → serialize()                 │
  │  (ranking)    SQLite/PG     dense/json/xml/prose        │
  │                                                         │
  │  Crawlers: ts(.d.ts) · openapi · pypi(typeshed)         │
  │            npm · mdn · pyi(stdlib)                      │
  │                                                         │
  │  Auth: API keys · per-plan rate limits · Stripe         │
  │  Private docs: owner-namespaced, tenant-isolated        │
  │  GitHub webhooks: auto re-crawl on every push           │
  └─────────────────────────────────────────────────────────┘
       │
       │  85 tokens · exact signature · no hallucination
       ▼
  LLM (Anthropic · OpenAI · any provider)

Token counts are exact — real BPE tokenizer (gpt-tokenizer, o200k_base). npm run bench:tokens reproduces every number in this file.


Self-host

# Minimal — SQLite, no auth
npm install agentoverflow && npm start

# With auth + Postgres
AO_REQUIRE_KEY=1 AO_ADMIN_TOKEN=changeme \
DATABASE_URL=postgres://user:pass@host/db npm start

# Docker
docker run -p 4317:4317 \
  -e AO_REQUIRE_KEY=1 -e AO_ADMIN_TOKEN=secret \
  -v ao_data:/data \
  ghcr.io/tatsunori-ono/agentoverflow:latest

# Then seed with public libraries
npm run crawl -- ts:express ts:zod pypi:requests openapi:https://petstore.swagger.io/v2/swagger.json

Contributing

git clone https://github.com/tatsunori-ono/agentoverflow
cd agentoverflow && npm install
npm test        # ~30 tests
npm run dev     # hot-reload on :4317

New crawler source? Add it under src/crawler/ and write a test in test/sources.test.js.


License

MIT · LICENSE

Built with Model Context Protocol · gpt-tokenizer · python/typeshed

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tatsunori-ono/agentoverflow'

If you have feedback or need assistance with the MCP directory API, please join our Discord server