get_project_summaryLABSCO SUMMARY
Metadata first, source second — and it says which is which.
The discipline that makes this useful on a big tree is that locating and reading are separate operations. Routing tools return ranges and never source text, so a search does not spend context; only read_symbol and read_range return code. The docs are equally clear about the boundary: hunk intersections are routing hints, not analysis, and you are expected to read the source before making a claim about behaviour. Source file operations are jailed to the project's source directory.
What it is
A deterministic source-range indexer for large, module-heavy C++ projects. It maps symbols, files and C++20 modules to exact line ranges so a client can ask where something is and then read only that range. It is not a compiler, LSP replacement or semantic analyzer.
What you get
find_symbol,find_declarationandfind_symbols_globlocate by name, withmatchKindon every result saying why it matchedread_symbolreturns one symbol's body, sliceable by offset;read_rangereads explicit lines or an around-line window withbeforeLinesandafterLinesget_nearest_symbol_for_linemaps a line from a diagnostic, a build error or a hunk onto the containing indexed rangelist_file_symbols,find_files,list_file_includesandget_file_structurework when the file is already known- Change tracking, when git is available:
list_changed_files,list_recent_revisions,get_revision_summary,get_file_change_hunksandresolve_hunk_to_indexed_range— read-only, with no generic command runner get_project_summaryplusget_index_fingerprint,get_file_fingerprint,get_symbol_fingerprintandget_data_fingerprintlet a caller tell which cached facts went stale after a rebuild;validate_fingerprintschecks up to 500 items in one call and returns metadata only- Routing controls narrow results before any source is read:
compact,symbolTypes,container,filePattern,exactOnly,hideNamespacesandlimit
Requirements
Python, a clone of the repository, and two steps: build the index with build_project_index.py --root <YOUR_PROJECT_ROOT> --output-root <YOUR_PROJECT_ROOT>\.mcp-cpp-project-indexer, then start code_index_mcp_server.py with --project-root and --index-root. For several clients or a long-lived process, add --transport http --http-host 127.0.0.1 --http-port 8765. No account, no network service.
Setup effort
Build from source — git clone https://github.com/walti1972/mcp-cpp-project-indexer.git
USE CASES
Explaining one function in a codebase too big to load
Find the symbol, read only its range, and reason from what was actually returned.
Reviewing what you just changed
List the changed files, get the hunks, and resolve each one to the symbol it lands inside before reading source.
Turning a build error into a place in the code
Hand it a file and line from the compiler and get the containing or nearest indexed symbol.
Keeping cached evidence honest across rebuilds
Validate file, symbol and data fingerprints in a batch instead of throwing away the whole cache after every update.
43 tools
Listed in project docs. Your client may show a different list.
get_index_fingerprintget_file_fingerprintget_symbol_fingerprintget_data_fingerprintvalidate_fingerprintslist_changed_fileslist_recent_revisionsget_revision_summaryget_file_change_hunksresolve_hunk_to_indexed_rangefind_symbolfind_declarationfind_symbols_globread_symbolread_rangeget_nearest_symbol_for_linelist_file_symbolssearch_sourcefind_fileslist_file_includesget_file_structureget_project_orientationlist_orientation_nodesget_orientation_nodesearch_orientationfind_modulelist_module_filessearch_modulesget_module_map_summaryget_module_infolist_module_importslist_module_imported_byget_module_treefind_datalist_type_membersread_dataresolve_code_entityget_function_body_graphget_call_xrefs_fromget_call_xrefs_toget_symbol_neighborhoodget_context_packBEFORE YOU INSTALL
What to know first
Tools you get
43 tools named in the project's documentation.
Where it runs
All 4 documented clients run the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
1. Clone this repository
git clone https://github.com/walti1972/mcp-cpp-project-indexer.git
cd mcp-cpp-project-indexer2. Build an index for your C++ project (PowerShell)
python <YOUR_INDEXER_ROOT>\build_project_index.py --root <YOUR_PROJECT_ROOT> --output-root <YOUR_PROJECT_ROOT>\.mcp-cpp-project-indexer3. Start the MCP server (PowerShell)
python <YOUR_INDEXER_ROOT>\code_index_mcp_server.py --project-root <YOUR_PROJECT_ROOT> --index-root <YOUR_PROJECT_ROOT>\.mcp-cpp-project-indexerMCP Clients
LM Studio
{
"mcpServers": {
"mcp-cpp-project-indexer": {
"command": "python",
"args": [
"<YOUR_INDEXER_ROOT>\\code_index_mcp_server.py",
"--project-root",
"<YOUR_PROJECT_ROOT>",
"--index-root",
"<YOUR_PROJECT_ROOT>\\.mcp-cpp-project-indexer"
]
}
}
}Codex
[mcp_servers.mcp-cpp-project-indexer]
command = "python"
args = [
"<YOUR_INDEXER_ROOT>\\code_index_mcp_server.py",
"--project-root",
"<YOUR_PROJECT_ROOT>",
"--index-root",
"<YOUR_PROJECT_ROOT>\\.mcp-cpp-project-indexer",
]Claude Code, Claude Desktop
{
"mcpServers": {
"mcp-cpp-project-indexer": {
"type": "stdio",
"command": "python",
"args": [
"<YOUR_INDEXER_ROOT>\\code_index_mcp_server.py",
"--project-root",
"<YOUR_PROJECT_ROOT>",
"--index-root",
"<YOUR_PROJECT_ROOT>\\.mcp-cpp-project-indexer"
],
"env": {}
}
}
}