Skip to main content

MCP server that indexes a codebase's public API at startup and serves it via compact tool responses. Pluggable parsers for C#, TypeScript, Python, and more.

Project description

codesurface

PyPI Version PyPI Downloads License: MIT Python 3.10+ Blog Post

MCP server that indexes your codebase's public API at startup and serves it via compact tool responses — saving tokens vs reading source files.

Parses source files, extracts public classes/methods/properties/fields/events, and serves them through 5 MCP tools. Works with Claude Code, Cursor, Windsurf, or any MCP-compatible AI tool.

Supported languages: C# (.cs), Python (.py), TypeScript/TSX (.ts, .tsx)

Quick Start

pip install codesurface

Then add to your .mcp.json:

{
  "mcpServers": {
    "codesurface": {
      "command": "codesurface",
      "args": ["--project", "/path/to/your/src"]
    }
  }
}

Point --project at any directory containing supported source files — a Unity Assets/Scripts folder, a .NET src/ tree, a Node.js/React project, a Python package, etc. Languages are auto-detected.

Restart your AI tool and ask: "What methods does MyService have?"

Tools

Tool Purpose Example
search Find APIs by keyword "MergeService", "BlastBoard", "GridCoord"
get_signature Exact signature by name or FQN "TryMerge", "CampGame.Services.IMergeService.TryMerge"
get_class Full class reference card — all public members "BlastBoardModel" → all methods/fields/properties
get_stats Overview of indexed codebase File count, record counts, namespace breakdown
reindex Incremental index update (mtime-based) Only re-parses changed/new/deleted files

Tested On

Project Language Files Records Time
immich TypeScript 919 7,957 0.6s
ant-design TypeScript 2,947 5,452 0.9s
dify TypeScript 4,903 5,038 1.9s
vscode TypeScript 6,611 88,293 9.3s
Unity game (private) C# 129 1,018 0.1s
codesurface (itself) Python 7 72 <0.1s

Zero duplicate FQNs across all projects.

Benchmarks

Measured against a real Unity game project (129 files, 1,018 API records) across a 10-step cross-cutting research workflow.

Strategy Total Tokens vs MCP
MCP (codesurface) 1,021
Skilled Agent (Grep + partial Read) 4,453 4.4x more
Naive Agent (Grep + full Read) 11,825 11.6x more

Even with follow-up reads for implementation detail, the hybrid MCP + targeted Read approach uses 54% fewer tokens than a skilled Grep+Read agent.

See workflow-benchmark.md for the full step-by-step analysis.

Setup Details

Claude Code configuration

Add to <project>/.mcp.json:

Using uv (recommended):

{
  "mcpServers": {
    "codesurface": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/codesurface", "codesurface", "--project", "/path/to/your/src"]
    }
  }
}

Using pip install:

{
  "mcpServers": {
    "codesurface": {
      "command": "codesurface",
      "args": ["--project", "/path/to/your/src"]
    }
  }
}
CLAUDE.md snippet (recommended)

Add to your project's CLAUDE.md so the AI knows when to use the tools:

## Codebase API Lookup (codesurface MCP)

Use the `codesurface` MCP tools to look up your project's classes, methods, properties, and fields instead of reading source files.

| When | Tool | Example |
|------|------|---------|
| Searching for an API by keyword | `search` | `search("MergeService")` |
| Need exact method signature | `get_signature` | `get_signature("TryMerge")` |
| Want all members on a class | `get_class` | `get_class("BlastBoardModel")` |
| Overview of indexed codebase | `get_stats` | `get_stats()` |
| After creating/deleting source files | `reindex` | `reindex()` |
Project structure
codesurface/
├── src/codesurface/
│   ├── server.py           # MCP server — 5 tools
│   ├── db.py               # SQLite + FTS5 database layer
│   └── parsers/
│       ├── base.py         # BaseParser ABC
│       ├── csharp.py       # C# parser
│       ├── python_parser.py # Python parser
│       └── typescript.py   # TypeScript/TSX parser
├── pyproject.toml
└── README.md
Troubleshooting

"No codebase indexed"

  • Ensure --project points to a directory containing supported source files (.cs, .py, .ts, .tsx)
  • The server indexes at startup — check stderr for the "Indexed N records" message

Server won't start

  • Check Python version: python --version (needs 3.10+)
  • Check mcp[cli] is installed: pip install mcp[cli]

Stale results after editing source files

  • Call reindex() — only re-parses files whose modification time changed, fast even on large codebases

Contact

fuatcankoseoglu@gmail.com

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

codesurface-0.3.0.tar.gz (36.5 kB view details)

Uploaded Source

Built Distribution

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

codesurface-0.3.0-py3-none-any.whl (34.5 kB view details)

Uploaded Python 3

File details

Details for the file codesurface-0.3.0.tar.gz.

File metadata

  • Download URL: codesurface-0.3.0.tar.gz
  • Upload date:
  • Size: 36.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for codesurface-0.3.0.tar.gz
Algorithm Hash digest
SHA256 541a4099525474af4287adec390614b811f674c60855551010b21a17b7dcd65c
MD5 20d0523925d7ffbf670bc78439d67882
BLAKE2b-256 8edb9f0ba542e2c7a13391cc15f42a95e8e87b7471f8e3f65112cdae9ce5aa05

See more details on using hashes here.

Provenance

The following attestation bundles were made for codesurface-0.3.0.tar.gz:

Publisher: publish.yml on Codeturion/codesurface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file codesurface-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: codesurface-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 34.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for codesurface-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 393fed851ff4760629e39b313340e6e03f17bf3d0161cbad74f4ac0887abfc5f
MD5 2424df5d963f393f54e6a17ad6e797a7
BLAKE2b-256 73f42878ac5457d52dd1669f1d5cbe6b28566297a62e5d71e6c3b533563d2a65

See more details on using hashes here.

Provenance

The following attestation bundles were made for codesurface-0.3.0-py3-none-any.whl:

Publisher: publish.yml on Codeturion/codesurface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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