Skip to main content

MCP server that indexes Python codebases and exposes intelligent tools for code exploration and search

Project description

Code Intelligence MCP Server

A Model Context Protocol (MCP) server that indexes Python codebases and exposes intelligent tools for code exploration and search.

Overview

This server analyzes a Python project at startup, building an in-memory index that includes:

  • AST parsing: Extracts classes, functions, methods with signatures and docstrings
  • Import tracking: Maps what each file imports
  • Usage tracking: Finds where symbols are referenced throughout the codebase
  • BM25 search: Full-text keyword search across all code

The indexed data powers 8 MCP tools that let an AI assistant navigate and query codebases semantically.

Quick Start (uvx)

Run directly without installing:

uvx code-intelligence-mcp --root D:\path\to\your\project

Note: On Windows, use double backslashes or forward slashes for paths.

Directory Structure

code_intelligence_mcp/
├── main.py                 # Entry point - run this to start the server
├── mcp_client.py           # Test client that connects to the server
├── pyproject.toml          # Package configuration
├── README.md               # This file
├── src/
│   ├── __init__.py         # Package exports
│   ├── __main__.py         # Package entry point (for python -m src)
│   ├── types.py            # SymbolInfo, CodeIndex data classes
│   ├── indexer.py          # AST parsing and codebase indexing
│   ├── search.py           # BM25 search setup and search logic
│   └── tools.py            # MCP tool definitions (create_tools, handle_tool)
└── code_intelligence.py    # Original monolithic file (kept for reference)

Requirements

  • Python 3.12+
  • uv package manager
  • Dependencies (installed in project virtual environment):
    • langchain-mcp-adapters>=0.3.0
    • mcp>=1.27.2
    • rank-bm25>=0.2.2

Install Dependencies

From the repo root:

uv add mcp rank-bm25

If you already have them installed, skip this step.

Run the MCP Server

Option 1: uvx (recommended for quick testing)

uvx code-intelligence-mcp --root D:\path\to\your\project

Option 2: Local development

cd code_intelligence_mcp
uv run python main.py --root D:\path\to\your\project

Option 3: python -m src

cd code_intelligence_mcp
uv run python -m src --root D:\path\to\your\project

Note: On Windows, pass the root path with normal backslashes and use uv run python instead of calling uv directly as the subprocess command.

The server will print indexing progress and then wait for MCP requests:

[code-intel] Indexing: D:\path\to\project
[code-intel] Setting up BM25 search index...
[code-intel] Done — 42 files, 156 symbols, 320 BM25 chunks

MCP Tools

1. get_overview

High-level overview of the entire codebase. Call this first to orient yourself.

  • Returns: project root, total files/classes/functions, file tree, all symbol names

2. get_file

Get the full source of a specific file by relative path.

  • Arguments: path (string) - relative path to the file
  • Returns: Full file contents with path header

3. find_symbol

Look up a class or function by exact name.

  • Arguments: name (string) - class or function name
  • Returns: File, line, docstring, signature, and (for classes) method signatures

4. search_code

Full-text search using BM25 algorithm - good for finding code by keyword or phrase.

  • Arguments:
    • query (string, required) - search keyword/phrase
    • top_k (integer, default=5) - number of results
  • Returns: Top matching code snippets with scores, file, and line context

5. get_imports

Get all imports for a specific file - what modules/names it depends on.

  • Arguments: path (string) - relative path to the file
  • Returns: List of imported module names

6. find_usages

Find every location in the codebase where a given name is referenced (calls, attribute access, variable use).

  • Arguments:
    • name (string, required) - symbol name to find
    • limit (integer, default=20) - max results
  • Returns: Total usage count and list of {file, line} locations

7. list_classes

List ALL classes in the codebase with their file, line, and method signatures.

  • Returns: Array of {name, file, line, docstring, methods} sorted by file/line

8. list_functions

List ALL top-level functions with their file, line, signature, and docstring.

  • Returns: Array of {name, signature, file, line, docstring} sorted by file/line

Example Usage

Test with mcp_client.py

import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient

async def main():
    client = MultiServerMCPClient(
        {
            "project-intel": {
                "transport": "stdio",
                "command": "uv",
                "args": [
                    "run",
                    "python",
                    "main.py",
                    "--root",
                    "D:\\path\\to\\your\\project",
                ],
            }
        }
    )

    tools = await client.get_tools()
    print(f"Loaded {len(tools)} tools:")
    for tool in tools:
        print(f"  - {tool.name}")

if __name__ == "__main__":
    asyncio.run(main())

Run with:

uv run python mcp_client.py

Install from PyPI

After publishing, users can install and run:

# Install globally
uv pip install code-intelligence-mcp

# Or run directly with uvx (recommended)
uvx code-intelligence-mcp --root D:\path\to\your\project

Troubleshooting

  • mcp.shared.exceptions.McpError: Connection closed usually means the server subprocess failed to start correctly.
  • Verify the uv run python command works manually before using it inside mcp_client.py.
  • Ensure the path passed to --root is valid and accessible.
  • If you get import errors, make sure you're running from the project directory with the correct virtual environment activated.

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

code_intelligence_mcp-0.1.2.tar.gz (91.9 kB view details)

Uploaded Source

Built Distribution

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

code_intelligence_mcp-0.1.2-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file code_intelligence_mcp-0.1.2.tar.gz.

File metadata

File hashes

Hashes for code_intelligence_mcp-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f06ed3715531107ec0de64ddcf89a35f5b6217b10439746977a549bbec1daf39
MD5 5671c5d6724bdc153d91741733cf1bf1
BLAKE2b-256 f09e06f5746b3993c7691d0cfb454fe3670eb9501beca570d5a460aca83c7613

See more details on using hashes here.

File details

Details for the file code_intelligence_mcp-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for code_intelligence_mcp-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f0e9c92ea1bfeb5c67d4d13a71bea3e9887f56f7c5385b0be46f204612479069
MD5 1aa7c04deb7b9374da35724a9b1332eb
BLAKE2b-256 d12d4e6441a9622536698eb2905d7186e0bd64e738220fa4d78df02b69cdfadf

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