[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94770":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":14,"starSnapshotCount":14,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},94770,"repo-context-mcp","nduc99911\u002Frepo-context-mcp","nduc99911","MCP server: repo map, code search, and token-aware context packs for AI coding agents",null,"TypeScript",104,91,102,0,1,46.49,"MIT License",false,"main",true,[22,23,24,25,26,27,28],"ai-agent","claude","codex","cursor","mcp","model-context-protocol","typescript","2026-08-24 04:01:22","# repo-context-mcp\n\n**MCP server that helps AI coding agents understand a repository** — without dumping the entire monorepo into the prompt.\n\n[![CI](https:\u002F\u002Fgithub.com\u002Fnduc99911\u002Frepo-context-mcp\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fnduc99911\u002Frepo-context-mcp\u002Factions\u002Fworkflows\u002Fci.yml)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](LICENSE)\n[![Node.js >= 18](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-%3E%3D18-brightgreen)](package.json)\n[![MCP](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMCP-stdio-purple)](https:\u002F\u002Fmodelcontextprotocol.io)\n\nWorks with **Codex**, **Claude Code**, **Cursor**, **Cline**, and any client that speaks [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io).\n\n## Why\n\nAI agents waste tokens re-walking `node_modules`, missing entrypoints, or pasting random files. **repo-context-mcp** exposes three focused tools:\n\n| Tool | Purpose |\n| --- | --- |\n| `repo_map` | Lightweight tree + manifests\u002Fentrypoints |\n| `search_code` | Fast substring search with path:line hits |\n| `pack_context` | Token-budgeted markdown pack for LLM prompts |\n\nLocal-only. No cloud. No telemetry. Stdio transport.\n\n## Install\n\n```bash\n# run from source\ngit clone https:\u002F\u002Fgithub.com\u002Fnduc99911\u002Frepo-context-mcp.git\ncd repo-context-mcp\nnpm install\nnpm run build\n\n# or via npx (after publish)\nnpx -y repo-context-mcp\n```\n\nRequires **Node.js 18+**.\n\n## CLI (no MCP client)\n\n```bash\nnpm run build\n\n# repository map\nnode dist\u002Fcli.js map .\nnode dist\u002Fcli.js map examples\u002Fsample-repo\n\n# search\nnode dist\u002Fcli.js search login examples\u002Fsample-repo\n\n# token-aware pack\nnode dist\u002Fcli.js pack . --focus auth,api --max-tokens 8000\n\n# JSON for scripts \u002F CI\nnode dist\u002Fcli.js map . --json\nnode dist\u002Fcli.js pack . --focus src --json\n```\n\nAfter global install \u002F `npx`:\n\n```bash\nnpx repo-context-mcp map .\nnpx repo-context-mcp pack . --focus auth\n```\n\n## MCP client config\n\n### Claude Desktop \u002F Claude Code\n\n```json\n{\n  \"mcpServers\": {\n    \"repo-context\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"repo-context-mcp\"],\n      \"env\": {\n        \"REPO_CONTEXT_ROOT\": \"\u002Fabsolute\u002Fpath\u002Fto\u002Fyour\u002Frepo\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nSettings → MCP → add server with command `npx` and args `[\"-y\", \"repo-context-mcp\"]`.\n\n### Codex \u002F generic stdio\n\n```bash\nREPO_CONTEXT_ROOT=\u002Fpath\u002Fto\u002Frepo node \u002Fpath\u002Fto\u002Frepo-context-mcp\u002Fdist\u002Fserver.js\n```\n\nFrom this repository after build:\n\n```bash\nnpm run build\nnode dist\u002Fcli.js serve\n# or: node dist\u002Fserver.js\n```\n\nSee also `examples\u002Fmcp-config.claude.json` and `examples\u002Fmcp-config.local.json`.\n\nOptional env:\n\n| Variable | Meaning |\n| --- | --- |\n| `REPO_CONTEXT_ROOT` | Default repository root when tools omit `root` |\n\nEach tool also accepts an explicit `root` argument.\n\n## Tools\n\n### `repo_map`\n\n```text\nroot?: string\nmax_depth?: number      # default 6\nmax_entries?: number    # default 400\n```\n\nReturns a markdown tree, file count, and likely entrypoints (`package.json`, `README.md`, `src\u002Findex.ts`, `AGENTS.md`, …). Skips `node_modules`, `.git`, `dist`, etc.\n\n### `search_code`\n\n```text\nquery: string\nroot?: string\nmax_results?: number    # default 50\ncase_sensitive?: boolean\n```\n\nSubstring search across source-like extensions.\n\n### `pack_context`\n\n```text\nroot?: string\nfocus?: string[]        # keywords \u002F path fragments to prioritize\nmax_tokens?: number     # default 12000 (approx)\nmax_files?: number      # default 40\n```\n\nRanks files (entrypoints + focus matches), respects a rough token budget (~4 chars\u002Ftoken), and returns a single markdown document ready to paste into an agent prompt or PR review.\n\n## Library API\n\nYou can use the core without MCP:\n\n```ts\nimport {\n  buildRepoMap,\n  formatRepoMap,\n  searchCode,\n  packContext,\n} from \"repo-context-mcp\";\n\nconst map = buildRepoMap({ root: process.cwd() });\nconsole.log(formatRepoMap(map));\n\nconst hits = searchCode({ root: process.cwd(), query: \"TODO\" });\nconst pack = packContext({\n  root: process.cwd(),\n  focus: [\"auth\"],\n  maxTokens: 8000,\n});\nconsole.log(pack.markdown);\n```\n\n## Demo (no MCP client)\n\n```bash\nnpm install\nnpm test\nnpm run build\n\n# map the sample tree\nnode --input-type=module -e \"import { buildRepoMap, formatRepoMap } from '.\u002Fdist\u002Findex.js'; console.log(formatRepoMap(buildRepoMap({ root: 'examples\u002Fsample-repo' })));\"\n```\n\n## Security\n\n- Reads files only under the requested `root`.\n- Does not execute project code.\n- Skips common vendor dirs and obvious binaries.\n- Still: only point it at repositories you trust.\n\nSee [SECURITY.md](SECURITY.md).\n\n## Project status\n\n**v0.1.1** — MCP server + CLI + gitignore + PR Action.\n\nRoadmap:\n\n- [x] `.gitignore` respect\n- [x] CLI (`map` \u002F `search` \u002F `pack`) + `--json`\n- [x] GitHub Action: pack context on each PR\n- [ ] Optional ripgrep backend for large monorepos\n- [ ] Baseline symbol index (tree-sitter) for `find_symbol`\n- [ ] Configurable ignore file (`.repo-contextignore`)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n```bash\nnpm install\nnpm test\nnpm run lint\nnpm run build\n```\n\n## License\n\n[MIT](LICENSE) © Nguyen Duc\n\n---\n\nBuilt as a real maintainer \u002F agent-tooling utility for the MCP ecosystem — not a placeholder repo. Issues and PRs welcome.\n","这是一个为AI编程智能体提供仓库上下文理解能力的MCP（Model Context Protocol）服务端工具。它通过三种轻量级功能——生成精简仓库结构图（repo_map）、支持路径行号定位的代码子串搜索（search_code）、以及按token预算打包相关代码片段（pack_context）——帮助LLM高效获取必要上下文，避免冗余文件注入提示词。项目基于TypeScript实现，纯本地运行、无云依赖、无遥测，采用标准stdio通信，兼容Claude Code、Cursor、Codex等支持MCP协议的客户端。适用于本地开发环境中提升AI辅助编程的准确性与效率，尤其适合中大型代码库的智能体上下文供给场景。",2,"2026-08-15 02:30:13","CREATED_QUERY"]