Skip to main content

Structural codebase indexer with MCP server for AI-assisted development

Project description

mcp-codebase-index

A structural codebase indexer with an MCP server for AI-assisted development. Zero runtime dependencies — uses Python's ast module for Python analysis and regex for TypeScript/JS. Requires Python 3.11+.

What It Does

Indexes codebases by parsing source files into structural metadata -- functions, classes, imports, dependency graphs, and cross-file call chains -- then exposes 17 query tools via the Model Context Protocol, enabling Claude Code and other MCP clients to navigate codebases efficiently without reading entire files.

Language Support

Language Method Extracts
Python (.py) AST parsing Functions, classes, methods, imports, dependency graph
TypeScript/JS (.ts, .tsx, .js, .jsx) Regex-based Functions, arrow functions, classes, interfaces, type aliases, imports
Markdown/Text (.md, .txt, .rst) Heading detection Sections (# headings, underlines, numbered, ALL-CAPS)
Other Generic Line counts only

Installation

pip install "mcp-codebase-index[mcp]"

The [mcp] extra includes the MCP server dependency. Omit it if you only need the programmatic API.

For development (from a local clone):

pip install -e ".[dev,mcp]"

MCP Server

Running

# As a console script
PROJECT_ROOT=/path/to/project mcp-codebase-index

# As a Python module
PROJECT_ROOT=/path/to/project python -m mcp_codebase_index.server

PROJECT_ROOT specifies which directory to index. Defaults to the current working directory.

Configuring with OpenClaw

Install the package on the machine where OpenClaw is running:

# Local install
pip install "mcp-codebase-index[mcp]"

# Or inside a Docker container / remote VPS
docker exec -it openclaw bash
pip install "mcp-codebase-index[mcp]"

Add the MCP server to your OpenClaw agent config (openclaw.json):

{
  "agents": {
    "list": [{
      "id": "main",
      "mcp": {
        "servers": [
          {
            "name": "codebase-index",
            "command": "mcp-codebase-index",
            "env": {
              "PROJECT_ROOT": "/path/to/project"
            }
          }
        ]
      }
    }]
  }
}

Restart OpenClaw and verify the connection:

openclaw mcp list

All 17 tools will be available to your agent.

Performance note: OpenClaw's default MCP integration via mcporter spawns a fresh server process per tool call, which means the index is rebuilt each time (~1-2s for small projects, longer for large ones). For persistent connections, use the openclaw-mcp-adapter plugin, which connects once at startup and keeps the server running:

pip install openclaw-mcp-adapter

Configuring with Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "codebase-index": {
      "command": "mcp-codebase-index",
      "env": {
        "PROJECT_ROOT": "/path/to/project"
      }
    }
  }
}

Or using the Python module directly (useful if installed in a virtualenv):

{
  "mcpServers": {
    "codebase-index": {
      "command": "/path/to/.venv/bin/python3",
      "args": ["-m", "mcp_codebase_index.server"],
      "env": {
        "PROJECT_ROOT": "/path/to/project"
      }
    }
  }
}

Available Tools (17)

Tool Description
get_project_summary File count, packages, top classes/functions
list_files List indexed files with optional glob filter
get_structure_summary Structure of a file or the whole project
get_functions List functions with name, lines, params
get_classes List classes with name, lines, methods, bases
get_imports List imports with module, names, line
get_function_source Full source of a function/method
get_class_source Full source of a class
find_symbol Find where a symbol is defined (file, line, type)
get_dependencies What a symbol calls/uses
get_dependents What calls/uses a symbol
get_change_impact Direct + transitive dependents
get_call_chain Shortest dependency path (BFS)
get_file_dependencies Files imported by a given file
get_file_dependents Files that import from a given file
search_codebase Regex search across all files (max 100 results)
reindex Re-index the project after file changes (MCP server only)

Programmatic Usage

from mcp_codebase_index.project_indexer import ProjectIndexer
from mcp_codebase_index.query_api import create_project_query_functions

indexer = ProjectIndexer("/path/to/project", include_patterns=["**/*.py"])
index = indexer.index()
query_funcs = create_project_query_functions(index)

# Use query functions
print(query_funcs["get_project_summary"]())
print(query_funcs["find_symbol"]("MyClass"))
print(query_funcs["get_change_impact"]("some_function"))

Development

pip install -e ".[dev,mcp]"
pytest tests/ -v
ruff check src/ tests/

References

The structural indexer was originally developed as part of the RMLPlus project, an implementation of the Recursive Language Models framework.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_codebase_index-0.2.0.tar.gz (37.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_codebase_index-0.2.0-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

Details for the file mcp_codebase_index-0.2.0.tar.gz.

File metadata

  • Download URL: mcp_codebase_index-0.2.0.tar.gz
  • Upload date:
  • Size: 37.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for mcp_codebase_index-0.2.0.tar.gz
Algorithm Hash digest
SHA256 33f5f9b203b59b981e3927582de1427e63e90f430038955f9837e77e7c27d25a
MD5 96d035cb93d2f8fb23ee1f35dbd8ddde
BLAKE2b-256 28b1aaa07b0079cf81dcb142186bacf4dae042b59ead659e5e644bd007fb59a7

See more details on using hashes here.

File details

Details for the file mcp_codebase_index-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_codebase_index-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2c1453d81dd710d1dd867b08f75a52c4002e94fedabfe528e5664bb7ec15a233
MD5 4fca54361e3e98359ae7f60ce5c2a312
BLAKE2b-256 aa6fe917526e7a1c03b06302c0edc7e1234031756ee0a4653b03b2fb03dd235b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page