WebSocket server for real-time collaboration based on Hocuspocus (CRDT/Yjs) with SQLite persistence, exposing MCP tools for workspace and project inspection
Four read-only tools with solid descriptions (150-200 chars) and well-structured input schemas. All parameters have types and descriptions. However, output schemas are not documented in the source code, only inferred from implementation. Parameter descriptions could be more prescriptive about constraints and formats. No error handling guidance in descriptions. Tool composition is clean (each does one thing), but missing pagination support for list_documents and list_projects despite potentially large result sets.
Get full project context including all task groups (current, upcoming, completed), notes, and metadata. Useful for detailed project analysis and task planning.
Get a compact workspace overview for LLM context. By default returns each project's id, title, short description, and current focus. Use sections to include full descriptions, additional task groups, or notes.
List all documents (workspaces) in the Focus Compass database. By default returns compact workspace summaries with project counts and timestamps; set include_summaries=false for a lighter metadata-only response.
List projects in a document with IDs, titles, and short descriptions for quick LLM-friendly scanning. Use get_project for full project context, task groups, and notes.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'compact workspace overview', 'full project context') but do not specify the JSON structure, field names, or types. LLMs cannot plan downstream operations without knowing response shape.
No pagination support. list_documents and list_projects lack limit/offset or cursor parameters and do not document result count limits. If a workspace contains hundreds of projects, the response could exhaust context windows.
Error handling not documented. Tool descriptions do not explain what errors can occur (e.g., 'Document not found', 'Database locked') or how to recover. The implementation catches SQLite errors (SQLITE_CANTOPEN, SQLITE_BUSY, SQLITE_CORRUPT) but descriptions do not guide LLMs on retry logic or fallback actions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
Parameter constraints not explicit. 'document' and 'project_id' parameters lack format/length constraints in descriptions. Code validates max lengths (512 and 256 chars) but descriptions do not state this, forcing LLMs to guess valid input ranges.
Sections parameter in get_workspace uses nested boolean flags without clear guidance on mutual exclusivity or defaults. Description lists options but does not explain which combinations are valid or what happens if all are false.