Skip to main content
Glama
taggedzi

Repo Interrogator

by taggedzi
README.md
# Repo Interrogator

Repo Interrogator is a local-first, deterministic MCP server that helps AI tools inspect one code repository safely.

It is for repository interrogation, not code modification.

What it does:
- indexes files inside one `repo_root`
- runs deterministic BM25 search
- outlines code structure via pluggable language adapters
- builds context bundles with citations
- writes sanitized audit logs

What it does not do:
- no LLM calls in v1
- no code writes or patching
- no multi-repo routing
- no HTTP/SSE transport in v1

## Supported Environments

- Python: `>=3.11`
- Tested in this project: Linux and WSL paths, with explicit Windows path normalization tests
- Expected to run on: Linux, macOS, Windows (with Python 3.11+)

## Quick Start

1. Clone this repository and enter it:

```bash
git clone https://github.com/taggedzi/Repo-Interrogator
cd repomap
```

2. Install (end-user style):

```bash
python -m pip install .
```

This installs the console command `repo-mcp`.

3. Run against a local repository:

```bash
repo-mcp --repo-root /absolute/path/to/target/repo
```

The server uses STDIO. It waits for newline-delimited JSON requests and writes newline-delimited JSON responses.

4. Verify it responds:

```bash
printf '%s\n' \
  '{"id":1,"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}' \
  '{"id":2,"jsonrpc":"2.0","method":"tools/call","params":{"name":"repo.status","arguments":{}}}' \
  | repo-mcp --repo-root /absolute/path/to/target/repo
```

You should get two JSON-RPC 2.0 response lines (the notification produces no output):

- Line 1: `initialize` result — `{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05",...}}`
- Line 2: tool result — `{"jsonrpc":"2.0","id":2,"result":{"content":[{"type":"text","text":"{\"index_status\":...}"}]}}`

## Developer Quick Start

```bash
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .
python -m pip install ruff mypy pytest build
```

Run checks:

```bash
python -m ruff format .
python -m ruff check .
python -m mypy src
python -m pytest -q
```

## Tool Surface (Current)

- `repo.status`
- `repo.list_files`
- `repo.open_file`
- `repo.outline`
- `repo.search`
- `repo.references`
- `repo.find_definition`
- `repo.build_context_bundle`
- `repo.refresh_index`
- `repo.audit_log`

## Optional Semantic Search

Install the `semantic` extra (`pip install repo-interrogator[semantic]`) to
enable `mode="semantic"`/`"hybrid"` on `repo.search` and `retrieval_mode` on
`repo.build_context_bundle`. The core package has zero runtime dependencies
and is unaffected when this extra isn't installed. See `ADR-0018` and
`docs/USAGE.md` for details.

## Language Adapter Support

`repo.outline` currently supports these adapters:

- Python: `python` (AST-based)
- TypeScript/JavaScript: `ts_js_lexical` (lexical)
- Java: `java_lexical` (lexical)
- Go: `go_lexical` (lexical)
- Rust: `rust_lexical` (lexical)
- C++: `cpp_lexical` (lexical)
- C#: `csharp_lexical` (lexical)
- Fallback: `lexical` (empty structural outline for unsupported files)

Important limits:
- Non-Python adapters are lexical. They are deterministic and fast, but conservative.
- Macro/generated code and advanced language features can be partially represented.
- Search, references, and context bundle coverage depend on indexed extensions/excludes.
- Start from `examples/repo_mcp.toml` for stack-aware include/exclude defaults and override guidance.

## Documentation

- Installation: `docs/INSTALL.md`
- Usage and request/response examples: `docs/USAGE.md`
- Configuration and limits: `docs/CONFIG.md`
- AI client integration (MCP over STDIO): `docs/AI_INTEGRATION.md`
- Troubleshooting: `docs/TROUBLESHOOTING.md`
- Issue labels and triage workflow: `docs/TRIAGE.md`
- Security policy and vulnerability reporting: `SECURITY.md`
- Security model and blocked behavior: `docs/SECURITY.md`
- Release process: `docs/release.md`

## Docs Verification Checklist

Run these commands to validate docs examples against the current codebase:

```bash
python -m ruff format .
python -m ruff check .
python -m mypy src
python -m pytest -q

# quick server smoke
printf '%s\n' \
  '{"id":1,"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0"}}}' \
  '{"id":2,"jsonrpc":"2.0","method":"tools/call","params":{"name":"repo.status","arguments":{}}}' \
  | python -m repo_mcp.server --repo-root .
```

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: from indexing and search to file operations, references, outline, and audit. No overlap exists between tools.

Naming Consistency5/5

All tools follow the 'repo.verb_noun' pattern using snake_case, providing a predictable and consistent naming scheme throughout.

Tool Count5/5

With 9 tools, the set is well-scoped for repository interrogation. Each tool serves a specific function without redundancy or excess.

Completeness5/5

The tool surface covers the full workflow: indexing, searching, listing, opening, outlining, referencing, and building context bundles. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues