ctx.vanshul.com
MCP serverSearchctx turns a GitHub repository or documentation site into context your AI can actually use. Once added, your AI can search that code or documentation and pack the relevant pieces, so its answers come from the real source instead of guesswork.
Use ctx.vanshul.com in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add ctx.vanshul.com and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the pack repo tool from ctx.vanshul.com
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
Details
Available today. Use it from your connected AI after setup.
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
After adding it, give your AI a GitHub repository or docs site address and ask it to search or pack that content.
What your AI can do with it
- Search the contents of a GitHub repository
- Search a documentation site for specific topics
- Pack a repository into a single block of context the AI can read
- Pack documentation into ready-to-use context
- Work with either a repo URL or a docs site URL
Install ctx.vanshul.com
The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http --scope user ctx-vanshul-com 'https://ctx.vanshul.com/mcp'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://ctx.vanshul.com/mcpAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=ctx-vanshul-com&config=eyJ1cmwiOiJodHRwczovL2N0eC52YW5zaHVsLmNvbS9tY3AifQ==Open the link and Cursor adds the server at that address.
ChatGPT
https://ctx.vanshul.com/mcpIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add ctx-vanshul-com --url 'https://ctx.vanshul.com/mcp'Run it once, then sign in with codex mcp login ctx-vanshul-com if the server asks for an account.
From the project's README
As published by vanshulgoyal101/ctx in README.md.
A public Model Context Protocol (MCP) server, running as a Cloudflare Worker, that turns a GitHub repository or a documentation site into agent-ready context. Point an AI agent at it and it can pack a whole repo (or crawl a docs site) into one token-counted blob — or search it and get back only the relevant passages, each with its file/URL and line.
It's the agent-first companion to mcp/: where mcp reads a single
web page, ctx reads whole repos and doc sites. The repo pipeline fetches,
gunzips and parses the tarball in-process; docs extraction reuses Mozilla
Readability + Turndown.
Endpoint
POST https://ctx.vanshul.com/mcp # JSON-RPC 2.0 (MCP)
GET https://ctx.vanshul.com/health # { ok: true, tools: [...] }
Tools
| Tool | Input | Returns |
|---|---|---|
pack_repo | { repo, ref?, include?, exclude?, max_tokens? } | The repo as one context blob with ==== path ==== headers + token estimate |
search_context | { repo, query, ref?, include?, exclude?, max_matches?, context_chars? } | Only the passages matching query, each with file, line and score |
list_files | { repo, ref?, include?, exclude? } | JSON: the text files ctx would include, with byte sizes |
get_file | { repo, path, ref? } | The full text of a single file |
pack_docs | { url, depth?, max_pages?, max_tokens? } | A crawled docs site as one context blob (each page → Markdown) |
search_docs | { url, query, depth?, max_pages?, max_matches?, context_chars? } | Only the docs passages matching query, each with page URL, line and score |
repo is owner/repo, owner/repo/ref, or a github.com URL. url (for the
docs tools) is an absolute http(s) docs page to start crawling from.
Connect from an MCP client
{ "mcpServers": { "ctx": { "url": "https://ctx.vanshul.com/mcp" } } }
Stdio-only clients bridge with npx mcp-remote https://ctx.vanshul.com/mcp.
Add it to your client
- Cursor — Settings → MCP → Add new server, or drop this into
~/.cursor/mcp.json:{ "mcpServers": { "ctx": { "url": "https://ctx.vanshul.com/mcp" } } } - Claude Desktop — add the same block to
claude_desktop_config.json(Settings → Developer → Edit Config). If your version is stdio-only, use:{ "mcpServers": { "ctx": { "command": "npx", "args": ["mcp-remote", "https://ctx.vanshul.com/mcp"] } } } - Continue / VS Code — add
ctxwith URLhttps://ctx.vanshul.com/mcpto your MCP servers config.
Try it with curl
# Pack a repo, capped to 8000 tokens
curl -s https://ctx.vanshul.com/mcp -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"pack_repo","arguments":{"repo":"sindresorhus/slugify","max_tokens":8000}}}'
# Search a repo for just the relevant passages
curl -s https://ctx.vanshul.com/mcp -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"search_context","arguments":{"repo":"sindresorhus/slugify","query":"replace separator"}}}'
Layout
ctx/
├── src/
│ ├── worker.ts # entry: routes /mcp, /health, rate limit, CORS
│ ├── mcp.ts # JSON-RPC dispatch + the six tool definitions
│ ├── github.ts # fetch tarball, gunzip, parse tar, filter files (no deps)
│ ├── pack.ts # assemble the context blob + token estimate
│ ├── search.ts # ranked passage search over files (file + line)
│ ├── docs.ts # crawl a docs site into pages (BFS, same-section)
│ ├── extract.ts # HTML -> Markdown / links (Readability + Turndown)
│ ├── fetcher.ts # bounded fetch with re-validated redirects (SSRF)
│ └── security.ts # SSRF guard (block private/internal addresses)
├── public/
│ ├── index.html # landing page (served for non-API paths)
│ ├── og.png / og.svg
│ ├── robots.txt
│ └── sitemap.xml
├── tests/ # vitest: github (tar parsing), pack, search, mcp, worker
├── docs/ # architecture, tools/API reference, deployment
├── wrangler.toml
├── package.json
└── tsconfig.json
Develop & deploy
cd ctx
npm install
npm run typecheck
npm test # vitest — full suite
npm run dev # local worker at http://localhost:8787 (POST /mcp)
npm run deploy # wrangler deploy
How it works
owner/repo → github.com tarball → DecompressionStream('gzip')
→ in-process tar parse → drop binaries/lockfiles/build dirs
→ pack (concat + token estimate) OR search (ranked passages)
The GitHub URL is always constructed from a fixed owner/repo slug, so the repo
tools have no SSRF surface. The docs tools fetch caller-supplied URLs, so every
URL and redirect hop is re-validated against the SSRF guard. Downloads are
bounded (timeout, size caps, page/file-count caps) and results are cached
per-isolate for a few minutes.
Security & limits
- No SSRF: input is a repo slug, not an arbitrary URL; only github.com is fetched.
- Bounded: 20s download timeout, ~60 MB uncompressed cap, 512 KB/file, ≤3000 files, per-IP rate limit.
- Stateless & private: no code stored, no LLM in the loop; public repos by default (private with a token).
Authentication (optional)
Set a GITHUB_TOKEN Worker secret to lift GitHub's rate limit (60 → 5,000/hour) and
read private repos:
wrangler secret put GITHUB_TOKEN
The token is a Worker secret only — never a tool argument — so it can't leak to an agent.
Documentation
- docs/architecture.md — modules, pipeline, tar parsing, limits
- docs/tools.md — full tool & JSON-RPC API reference
- docs/deployment.md — Cloudflare Worker + custom-domain deploy
License
MIT © Vanshul Goyal
Tools it offers (6)
What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.
pack_reposearch_contextlist_filesget_filepack_docssearch_docs
Signals
- GitHub stars
- 1
- Last commit
- Sep 2026
Advanced
- Delivery
- ctx MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
- Item type
- mcp-server
- Key
io-github-vanshulgoyal101-ctx- Source
- github.com/vanshulgoyal101/ctx
- Hosted endpoint
https://ctx.vanshul.com/mcp
github.com/vanshulgoyal101/ctx