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.7.tar.gz (47.1 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.7-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for code_intelligence_mcp-0.1.7.tar.gz
Algorithm Hash digest
SHA256 830104fc2364701b441c6170529f18750e271d978c63e108871819902ecfb01f
MD5 d5a51bc8334b211087a0ec35e77bf4ff
BLAKE2b-256 1741a83ab448b1de2957ddeb454aaaf9e0ef3998b7ab172cc6fde121d9d7be4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for code_intelligence_mcp-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 f66a265ada4509a06573869a1d54922846bd99b3c864b389da6963d690e3cc85
MD5 19340bc2908b5d512c90948a08f5b8ef
BLAKE2b-256 e0ba8a677ca3b1a572ed7ca9e8d7289d4e2467010270f4a7f1dafec97d439ec8

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