MCP server for Coq/Rocq proof assistant integration via coq-lsp
Server defines 8 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (coq_open_goals, coq_run_tactic, etc.). Descriptions are present but brief (avg ~60 chars, below the 194-char baseline). All tools have input schemas with typed properties. However, parameter descriptions are sparse or missing for many fields (e.g., 'memo', 'hash', 'compact' lack explanations of what they control). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or categorization. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels (READ_ONLY vs WRITE). Position object is reused across tools but lacks description of coordinate system (0-based vs 1-based is mentioned once in coq_open_goals but not consistently).
Apply text edits to a file and re-sync with rocq-lsp
Type-check an expression in the current proof context
Get an opaque state identifier from a file position (Pétanque)
Get goals for a given state identifier
High-level helper: insert a tactic and return updated goals
Get current open goals at a given position in a Coq/Rocq file
Get richer proof context including proof name and statements
Output schemas not documented. LLMs cannot predict response structure (goal format, proof state fields, error responses). Forces agents to guess downstream field names.
Parameter descriptions missing or vague. 'memo', 'hash', 'compact', 'mode', 'pp_format' lack explanations of what they control or when to use them. LLMs cannot reason about optional parameters without context.
No tool annotations (readOnlyHint/destructiveHint). Tools clearly marked READ_ONLY vs WRITE in metadata, but not exposed via schema. Agents cannot distinguish safe from destructive operations without reading descriptions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Run a tactic/command against a state (speculative execution)
Error handling absent. No recovery guidance, error categorization, or actionable messages. If coq-lsp returns 'Document is not ready', agents have no guidance on retry strategy or alternatives.
Position object reused but coordinate system documented only once. 'Position in the file (0-based)' appears in coq_open_goals but not in coq_proof_state, coq_get_state_at_pos, or coq_check. Inconsistent documentation invites off-by-one errors.