MCP server that helps Claude jump around C++ codebases via clangd
Clangaroo provides 19 C++ analysis tools with consistent naming patterns (cpp_* prefix, verb-noun structure) and detailed descriptions. All tools have input schemas with proper typing. However, output schemas are largely undocumented, error handling lacks recovery guidance, and descriptions, while present, do not systematically address 'when to use this vs. similar tool' or prerequisites. The server mixes read-only and write operations (cpp_format_file, cpp_rename_symbol) without destructive operation warnings or confirmation patterns. AI-powered tools (cpp_analyze_with_ai, cpp_analyze_call_patterns) lack token/cost guidance. Parameter descriptions are generally adequate but could be more prescriptive about formats and constraints. Missing pagination for potentially large result sets (e.g., cpp_find_references, cpp_get_workspace_symbols).
Analyze call patterns for a function using AI: identifies architectural patterns, data flow, performance characteristics.
Deep analyze a function: parameters, return type, documentation, complexity metrics.
AI-powered analysis of code: generates documentation, explains complex logic, identifies patterns and potential issues.
Get incoming and outgoing call hierarchies for a function. Shows what calls this function and what this function calls.
Get code completion suggestions at a specific location in the file.
Get inline code lens information: references count, implementations count, test count.
Find all implementations of a virtual function or interface method.
Output schemas completely undocumented. No tool specifies what fields are returned, their types, or structure. LLMs cannot reliably extract required downstream data or chain tools.
Write operations (cpp_format_file, cpp_rename_symbol) lack destructive operation warnings and confirmation/dry-run patterns. No guidance on irreversibility or rollback.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Find all usages and references to a symbol across the codebase. Useful for understanding impact of changes.
Format/reformat a file using clang-format configuration.
Get class inheritance hierarchy showing base classes and derived classes.
Get symbol definition and implementation details. Returns the actual code implementation.
Get all symbols (functions, classes, variables) defined in a file with their locations.
Get type information and documentation for a symbol at a specific location.
List all #include directives in a file and resolve them to their actual file paths.
Search for symbols across the entire project by name pattern.
Get inlay hints for a file: parameter hints, type hints, chaining hints.
🔍 DISCOVERY: List C++ source files in the project. Use this first to explore the codebase structure and understand what files are available before diving into specific symbols.
Rename a symbol across the entire codebase. Returns the edits needed to perform the rename.
Get function signature and parameter information at a specific location.
Large result sets (cpp_find_references, cpp_get_workspace_symbols, cpp_get_document_symbols) lack pagination parameters (limit, offset, next_cursor). No total count or result size guidance in descriptions.
AI-powered tools (cpp_analyze_with_ai, cpp_analyze_call_patterns) lack token usage, cost, or latency warnings. No guidance on when to use 'minimal' vs 'full' context levels or performance trade-offs.
Parameter descriptions do not systematically explain constraints, formats, or valid ranges. E.g., 'pattern' in cpp_list_files states 'glob pattern' but doesn't document supported syntax or defaults.
No error recovery guidance. Descriptions do not tell agents what to do if a tool fails (e.g., 'If symbol not found, try cpp_get_workspace_symbols'). Error responses likely lack actionable messages.
No tool annotations visible (readOnlyHint, destructiveHint, idempotentHint). STDIO transport prevents remote use and limits protocol readiness.