A local MCP-style AI infrastructure project using Python, SQLite, structured files, and controlled tools for task and document management.
ContextForge has clear naming conventions (verb_noun pattern) and complete input schemas with type definitions and descriptions. However, tool descriptions are minimal (10-30 chars), falling well below the 50-200 char LLM-optimized baseline. Output schemas are undocumented, callers cannot predict response structure. Error handling is absent; no recovery guidance or categorization. Parameter descriptions lack constraints (e.g., max lengths stated in code but not in schema descriptions). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Composition is sound (single responsibility per tool), but missing idempotency guarantees and chaining metadata.
Mark a task complete.
Create a task without exposing SQL to callers.
Delete a task by id.
Open a known document by id.
List document metadata.
List tasks, optionally filtered by status.
Search document metadata and content through a safe operation.
Tool descriptions are critically short (10-30 chars). LLM-optimized descriptions should be 50-200 chars, explaining WHAT the tool does, WHEN to use it, and any prerequisites. Current descriptions lack context for tool selection.
Output schemas are completely undocumented. Callers cannot predict response structure (e.g., does list_tasks return {id, title, status} or {task_id, task_title, task_status}?). LLMs cannot plan downstream tool calls without knowing output fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Search tasks by natural-language text.
Return aggregate document metadata.
No error handling or recovery guidance. Tools can fail (e.g., invalid task_id, database error) but provide no actionable error messages. LLMs cannot self-correct or know whether to retry.
Parameter constraints (max lengths, enum values) are defined in code but not exposed in schema descriptions. LLMs cannot see that 'title' has a 160-char limit or that 'status' must be one of {todo, in_progress, done}. Descriptions should state: 'Task status: one of todo, in_progress, or done (default: todo)'.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are clear from code (delete_task is DESTRUCTIVE, list_tasks is READ_ONLY) but not declared in tool metadata. Agents cannot reason about safety or retry semantics.