Local-first, read-only project context for coding agents via MCP.
RepoPrimer demonstrates solid tool design with clear naming, comprehensive parameter schemas, and structured output. All four tools follow verb_noun convention (list_, get_, search_). Descriptions are present and actionable (avg 150 chars). Input schemas use Zod with proper type constraints, enums, and ranges. Tool annotations (readOnlyHint, idempotentHint) are correctly applied. However, output schemas are not formally documented in the code, only inferred from success() helper. Error handling returns plain text messages without recovery guidance or categorization. Parameter descriptions could be more explicit about constraints (e.g., maxChars ranges stated but not in descriptions). No batch operations or pagination cursors despite list_projects potentially returning many items.
Read one configured Markdown document by id. Arbitrary file paths are not accepted.
Build a fresh project handoff from live Git status and configured Markdown. Compact mode is the default startup view; standard mode includes longer excerpts.
List registered RepoPrimer projects and their compact document/task coverage. Call this first in a new session. Set refresh=true to rescan configured discovery roots.
Search configured Markdown by heading and section. Pass project="*" to search all registered projects with a global result limit.
Output schemas not formally documented. success() helper returns {content, structuredContent} but LLMs cannot see the shape of structuredContent fields (projects array, context object, search results). This forces LLMs to infer output structure from trial calls.
Error handling returns plain text messages without recovery guidance. failure() returns {isError: true, content: [{type: 'text', text: message}]}. Errors like 'Project not found' do not suggest next steps (e.g., 'Call list_projects to see available projects').
list_projects accepts limit (1-200) but no pagination cursor or offset. If a user has 500 projects, the tool truncates silently at 100 (default) or 200 (max). No way to fetch the next batch. Violates paginated-result pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Parameter descriptions lack explicit constraint details. maxChars is constrained (1500-50000 for get_project_context, 256-200000 for get_document) but descriptions do not state these ranges. LLMs must infer from schema.
search_project accepts project='*' for global search but does not document the global result limit or how results are ranked/ordered. Ambiguous behavior for multi-project queries.