Static source inference · medium confidence · evidence: structured output
No deprecated protocol patterns detected
Summary
context0 defines 3 tools with visible schemas and descriptions in src/mcp.rs. Tool naming follows the verb_noun pattern (get_context, save_context, list_context), which is appropriate. However, descriptions are minimal (28-94 characters), falling short of the production baseline of 194 chars. Parameter descriptions are present but terse. Output schemas are not explicitly documented in the source, the rubric requires evidence of documented return types for A-grade tools. Error handling is basic; there is no recovery guidance or actionable error messages visible in the code. The server accepts natural identifiers (repo_path, branch) which is good for the chat data model, but lacks input validation rules, enums for constrained values, and comprehensive parameter documentation. Overall execution is functional but lacks the detail and polish expected for confident production recommendations.
Tools (3)
get_contextread onlysource verified67/100
Retrieve the latest checkpoint for a given repo and branch
list_contextread onlysource verified68/100
List recent checkpoints for a given repo and branch
save_contextwritesource verified62/100
Save a checkpoint with structured summary for current repo, branch, and commit
Output schemas not documented. The source code defines input parameters clearly but does not explicitly document what fields are returned by each tool. LLMs cannot plan chained calls without knowing the response structure (e.g., does get_context return commit_sha, done, next, blockers, tests, files, timestamp?).
Descriptions are too brief (28 - 94 chars vs. production baseline of 194 chars). They state WHAT the tool does but lack WHEN to use it, WHAT is returned, and dependencies between tools. For example, 'Retrieve the latest checkpoint for a given repo and branch' does not explain whether this returns structured metadata, raw diffs, or a summary suitable for feeding to save_context.
Document the output schema for each tool. For get_context, explicitly list returned fields (repo_path, branch, commit_sha, done, next, blockers, tests, files, created_at). For list_context, document the array structure and whether total_count, has_more, or next_cursor are included.
Expand tool descriptions to 150 - 250 characters, following the pattern: 'Retrieves the most recent checkpoint (saved context) for a given repository and branch. Use this to resume work after an interruption. Returns structured metadata including completion status, next steps, blockers, test results, and involved files. Returns null if no checkpoint exists for this repo/branch pair.'
Add validation and constraints to parameter descriptions. For repo_path: 'Absolute or relative filesystem path to the Git repository root (e.g. /home/user/myrepo or ./myrepo). Must be a valid directory containing a .git folder.' For branch: 'Git branch name (e.g. main, feature/xyz). No slashes, spaces, or special characters; must match valid Git refnames.' For limit: 'Maximum number of checkpoints to return (1 - 100, default 20). Requests exceeding 100 are clamped to 100.'
Mark optional parameters explicitly: 'Optional. Human-readable description of completed work (free text, 0 - 1000 chars). If omitted, defaults to empty string.' for done_text, next_text, blockers_text, tests_text, and session_id in save_context.
Document error scenarios and recovery paths. Add to each tool's description: 'Errors: repo_path not found (check path spelling); permission denied (ensure read access to repo and database); database corrupted (reinitialize with context0 init). On error, the tool returns an error code with a descriptive message; the agent should ask the user for clarification or try again with corrected parameters.'
Score history
Overall score trend
↑ 34 points across a rubric change (v1 → v2)
57/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
D
57
2025-06-18+
v2
2026-03-09
F
23
-
v1
Parameter descriptions are minimal. 'repo_path' is labeled 'The repository path to retrieve context for' (42 chars) but does not explain format expectations (absolute vs. relative), whether it must exist, or how it resolves if not found. 'branch' similarly lacks format guidance (e.g., can it contain slashes? spaces?).
No input validation rules visible in source. Parameters like limit in list_context declare a minimum (1) in the description but lack validation logic or enum constraints in the schema itself. This forces the LLM to reason about bounds rather than the tool rejecting invalid input with actionable error text.
Error handling is not described. Callers do not know what errors are possible (e.g., repo not found, permission denied, database error, invalid branch name) or what to do next. The code includes error handling (Result<T, Error>) but the tool definitions do not document error scenarios or recovery paths.
Optional parameters (done_text, next_text, blockers_text, tests_text, files, session_id in save_context) are not clearly marked as optional in descriptions. LLMs may assume all parameters are required and fail to construct minimal valid calls.
No pagination guidance in list_context despite accepting a limit parameter. Documentation does not clarify: does limit enforce a maximum result count? Is there a cursor or offset? Does the response include total_count or has_more? This forces the LLM to guess the pagination model.
list_context
For list_context, clarify pagination: 'Returns up to limit checkpoints, ordered by creation time (newest first). If more checkpoints exist, the response includes a next_cursor field; pass it to the next call to fetch older checkpoints. Always returns total_count (total checkpoints available for this repo/branch) so the agent knows if pagination is needed.'
Add tool annotation hints to save_context: this tool is destructive (can overwrite prior checkpoints) and may benefit from a confirmation pattern. Document: 'Idempotent if called with the same (repo_path, branch, commit_sha): overwrites any prior checkpoint with the same key.'
Add dependency documentation: 'save_context accepts optional files array. To resolve file paths from user names (e.g. "main.py"), the calling agent should use external tools or user input. context0 does not resolve file paths internally.'
Validate inputs and return structured error messages. E.g., if repo_path does not exist, return {error: 'invalid_repo_path', message: 'Repository not found at /nonexistent/path. Check spelling and try again.', recovery: 'Verify the repo path with pwd or ls.'} instead of a generic 'not found' error.