Skip to main content
Glama
README.md
# repo-context-mcp

**MCP server that helps AI coding agents understand a repository** — without dumping the entire monorepo into the prompt.

[![CI](https://github.com/nduc99911/repo-context-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/nduc99911/repo-context-mcp/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Node.js >= 18](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](package.json)
[![MCP](https://img.shields.io/badge/MCP-stdio-purple)](https://modelcontextprotocol.io)

Works with **Codex**, **Claude Code**, **Cursor**, **Cline**, and any client that speaks [Model Context Protocol](https://modelcontextprotocol.io).

## Why

AI agents waste tokens re-walking `node_modules`, missing entrypoints, or pasting random files. **repo-context-mcp** exposes three focused tools:

| Tool | Purpose |
| --- | --- |
| `repo_map` | Lightweight tree + manifests/entrypoints |
| `search_code` | Fast substring search with path:line hits |
| `pack_context` | Token-budgeted markdown pack for LLM prompts |

Local-only. No cloud. No telemetry. Stdio transport.

## Install

```bash
# run from source
git clone https://github.com/nduc99911/repo-context-mcp.git
cd repo-context-mcp
npm install
npm run build

# or via npx (after publish)
npx -y repo-context-mcp
```

Requires **Node.js 18+**.

## CLI (no MCP client)

```bash
npm run build

# repository map
node dist/cli.js map .
node dist/cli.js map examples/sample-repo

# search
node dist/cli.js search login examples/sample-repo

# token-aware pack
node dist/cli.js pack . --focus auth,api --max-tokens 8000

# JSON for scripts / CI
node dist/cli.js map . --json
node dist/cli.js pack . --focus src --json
```

After global install / `npx`:

```bash
npx repo-context-mcp map .
npx repo-context-mcp pack . --focus auth
```

## MCP client config

### Claude Desktop / Claude Code

```json
{
  "mcpServers": {
    "repo-context": {
      "command": "npx",
      "args": ["-y", "repo-context-mcp"],
      "env": {
        "REPO_CONTEXT_ROOT": "/absolute/path/to/your/repo"
      }
    }
  }
}
```

### Cursor

Settings → MCP → add server with command `npx` and args `["-y", "repo-context-mcp"]`.

### Codex / generic stdio

```bash
REPO_CONTEXT_ROOT=/path/to/repo node /path/to/repo-context-mcp/dist/server.js
```

From this repository after build:

```bash
npm run build
node dist/cli.js serve
# or: node dist/server.js
```

See also `examples/mcp-config.claude.json` and `examples/mcp-config.local.json`.

Optional env:

| Variable | Meaning |
| --- | --- |
| `REPO_CONTEXT_ROOT` | Default repository root when tools omit `root` |

Each tool also accepts an explicit `root` argument.

## Tools

### `repo_map`

```text
root?: string
max_depth?: number      # default 6
max_entries?: number    # default 400
```

Returns a markdown tree, file count, and likely entrypoints (`package.json`, `README.md`, `src/index.ts`, `AGENTS.md`, …). Skips `node_modules`, `.git`, `dist`, etc.

### `search_code`

```text
query: string
root?: string
max_results?: number    # default 50
case_sensitive?: boolean
```

Substring search across source-like extensions.

### `pack_context`

```text
root?: string
focus?: string[]        # keywords / path fragments to prioritize
max_tokens?: number     # default 12000 (approx)
max_files?: number      # default 40
```

Ranks files (entrypoints + focus matches), respects a rough token budget (~4 chars/token), and returns a single markdown document ready to paste into an agent prompt or PR review.

## Library API

You can use the core without MCP:

```ts
import {
  buildRepoMap,
  formatRepoMap,
  searchCode,
  packContext,
} from "repo-context-mcp";

const map = buildRepoMap({ root: process.cwd() });
console.log(formatRepoMap(map));

const hits = searchCode({ root: process.cwd(), query: "TODO" });
const pack = packContext({
  root: process.cwd(),
  focus: ["auth"],
  maxTokens: 8000,
});
console.log(pack.markdown);
```

## Demo (no MCP client)

```bash
npm install
npm test
npm run build

# map the sample tree
node --input-type=module -e "import { buildRepoMap, formatRepoMap } from './dist/index.js'; console.log(formatRepoMap(buildRepoMap({ root: 'examples/sample-repo' })));"
```

## Security

- Reads files only under the requested `root`.
- Does not execute project code.
- Skips common vendor dirs and obvious binaries.
- Still: only point it at repositories you trust.

See [SECURITY.md](SECURITY.md).

## Project status

**v0.1.1** — MCP server + CLI + gitignore + PR Action.

Roadmap:

- [x] `.gitignore` respect
- [x] CLI (`map` / `search` / `pack`) + `--json`
- [x] GitHub Action: pack context on each PR
- [ ] Optional ripgrep backend for large monorepos
- [ ] Baseline symbol index (tree-sitter) for `find_symbol`
- [ ] Configurable ignore file (`.repo-contextignore`)

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).

```bash
npm install
npm test
npm run lint
npm run build
```

## License

[MIT](LICENSE) © Nguyen Duc

---

Built as a real maintainer / agent-tooling utility for the MCP ecosystem — not a placeholder repo. Issues and PRs welcome.

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool performs a unique, non-overlapping function: repo_map provides structural overview, search_code locates specific lines, and pack_context bundles relevant files for LLM consumption. There is no ambiguity about when to use which tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (repo_map, search_code, pack_context) using lowercase with underscores. The naming is uniform and predictable.

Tool Count5/5

With exactly 3 tools, the server is well-scoped for its purpose—providing repo context. Each tool earns its place without redundancy, and the count is neither too sparse nor overwhelming.

Completeness5/5

The tool set covers the complete workflow of understanding a repository: mapping the structure, searching for specific content, and packing the most relevant files into a context bundle. There are no obvious gaps for the stated purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues