MCP server backed by rust-analyzer, exposing LSP-powered code intelligence tools
Server exposes 13 tools with complete JSON Schema input definitions and descriptions. All tools have proper type annotations (object, string, integer) and parameter descriptions. Tool annotations (readOnlyHint, destructiveHint) are correctly implemented. However, descriptions are terse (10-60 chars), lacking context on WHEN to use each tool or dependencies between them. Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Naming is clear and verb-based (hover, definitions, rename_symbol), but composition issues exist: open_document + change_document + close_document could be unified into edit_document for simpler agent reasoning.
Get the status of the rust-analyzer for a document or workspace
Change the content of an open document
Close an open document in the workspace session
Get definitions of a symbol at a position
Get hover information at a position in a document
Open a document in the workspace session
Rebuild procedural macros in the workspace
Descriptions are too terse (10-60 chars). Rubric baseline is 194 chars. LLMs cannot determine WHEN to call each tool or how it differs from similar tools (e.g., hover vs definitions vs references).
Output schemas are not documented. Tests show responses contain 'structuredContent' and 'data' fields, but LLMs have no schema to predict structure. This forces agents to guess field names and risks extraction errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2025-06-18+ | v2 |
Get all references to a symbol at a position
Reload the workspace in rust-analyzer
Rename a symbol at a position and get workspace edits
Replace the entire content of an open document
View the syntax tree for a document
Search for symbols in the workspace by query
Document lifecycle tools (open_document, change_document, replace_document, close_document) are split across 4 separate tools. Agents must call them in sequence, wasting tokens and inviting mid-chain failures. Consider unifying into edit_document(workspace_root, document_path, version, text, action='open'|'change'|'replace'|'close').
No error handling guidance. Tests show raw responses but no documentation of failure modes, recovery steps, or retryability. Agents cannot distinguish transient errors (retry) from permanent ones (ask user).
Parameter descriptions lack format/constraint details. E.g., 'position' is an object with line/character, but no description states whether line/character are 0-indexed or 1-indexed, or what happens if they are out of bounds.