An MCP stdio server exposing hadron-forge's hash-checked edit, write, create, delete and read-blocks tools
Eight tools with complete JSON schemas and descriptions. Naming follows verb_noun pattern (read_file, list_dir, grep, read_blocks, edit_block, create_file, git_diff, exec). Descriptions are clear and action-oriented (avg ~100 chars), explaining WHAT each tool does and WHEN to use it. All parameters have type definitions and descriptions. However, parameter descriptions lack constraint details (ranges, formats, allowed values). Error handling guidance is minimal, no recovery hints or actionable error messages documented. Output schemas are not explicitly documented. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles (READ_ONLY vs WRITE). No pagination or result-limiting guidance for grep/list_dir.
Create a brand new file. Refused if the file already exists — use edit_block to change one.
Replace one whole top-level block (a function, struct, enum, impl, or trait) with new text. `target_hash` must be the CURRENT hash of that block from read_blocks — a stale or wrong hash is refused rather than applied to the wrong place. Only works on languages with block parsing (Rust, Python, TypeScript, Go); use create_file for anything else or for a brand new file.
Run an allowlisted program (cargo or git) inside the project, bounded and output-capped. There is no shell: no `;`, `|`, `>`, or globbing, and no argument may leave the worktree.
Show the uncommitted changes in the project.
Search the project for a literal substring. Returns matching lines with their paths and line numbers.
List the entries of a directory in the project.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools clearly marked as READ_ONLY or WRITE in metadata but not exposed via MCP tool annotations, preventing clients from applying safety policies.
Parameter descriptions lack constraint details. 'path' parameters do not specify format (relative vs absolute, allowed characters, max length). 'limit' in read_file has no range (1 - 1000?). 'pattern' in grep has no guidance on escaping or regex vs literal.
No output schema documentation. Tools return results but schema structure is not formally documented. LLMs cannot plan downstream calls or extract fields reliably without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
List every top-level function/struct/enum/impl/trait in a file, each with its edit hash. Call this BEFORE edit_block — the hash it reports is what edit_block needs, and it goes stale the moment the block's text changes.
Read a text file from the project. Returns its contents with 1-indexed line numbers noted.
No error handling guidance. Descriptions do not explain what errors are possible, how to recover, or what the LLM should do next. E.g., grep with no matches, edit_block with stale hash, exec with permission denied.
grep and list_dir lack pagination/result-limiting guidance. No mention of max results, pagination tokens, or what happens if results exceed context window. Large codebases could return thousands of matches.