MCP server for Witself, a realm-private closed system for managing facts, transcripts, messages, and agent memories with full audit and versioning capabilities
Critical failures across all dimensions. Tool definitions exist only in test files (mcp_tool_annotations_test.go), not in actual tool registration code, this violates the 'must see explicit registration' rule, capping all tools at 50 max. Descriptions are present but extremely terse (10-50 chars), well below the 50-200 char LLM-optimized baseline. No input schemas visible for 43 of 45 tools, only 2 tools (witself.fact.confirm, witself.fact.reject) show partial schemas with 2 params each. No output schemas documented anywhere. Parameter descriptions are missing entirely for most tools. No error handling guidance, no recovery paths, no actionable error messages. Tool naming uses dot notation (witself.fact.set) rather than verb_noun convention (set_fact), making intent parsing harder for LLMs. No evidence of idempotency hints, permission gates, or security annotations beyond risk labels. This server is a skeleton definition with test coverage but no production-grade tool interface.
List peer agents in the realm
Get a candidate fact by ID
Confirm a proposed fact candidate
Delete a fact
Get a fact by ID
List facts with optional filtering and pagination
Propose a new fact for review
Tool definitions exist only in test file (mcp_tool_annotations_test.go), not in actual tool registration code. Cannot verify explicit registration with schemas in production code.
43 of 45 tools have NO visible input schemas. Only witself.fact.confirm and witself.fact.reject show partial schemas with candidate_id and idempotency_key.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 31 | 2026-07-28+ | v2 |
Propose a fact extracted from a transcript
Reject a proposed fact candidate
Review facts with optional filtering and pagination
Set/create a fact
Get the status of a fact
Create an alias for a fact subject
List fact subjects
Set a fact subject
List upcoming facts
Memory archival and versioning tool
Memory curation and organization tool
Memory quality assessment and management tool
Memory recall and retrieval tool
Acknowledge a message
Claim a message for processing
Mark a message as complete
List messages with optional filtering and pagination
Listen for incoming messages
Mark a message as read
Release a claimed message
Renew a message claim
Reply to a message
Cancel a message request
Claim a message request for processing
Mark a message request as complete
Decline a message request
List message requests
Offer a response to a message request
Open a message request
Release a claimed message request
Renew a message request claim
Select an offered response for a message request
Show details of a message request
Send a message
Show the current self/agent identity and realm information
Get a transcript by ID
List transcripts with optional filtering and pagination
Get the tail/recent entries of a transcript
All tool descriptions are extremely terse (10-50 chars), far below the 50-200 char LLM-optimized baseline. Descriptions lack WHAT the tool does, WHEN to use it, and prerequisites. Examples: 'Show the current self/agent identity and realm information' (54 chars) is borderline; 'List peer agents in the realm' (29 chars) is too short.
Tool naming uses dot notation (witself.fact.set, witself.message.send) instead of verb_noun convention (set_fact, send_message). Dot notation is less LLM-friendly for intent parsing and does not follow the 90% baseline of A+ tools starting with action verbs.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields without knowing response structure. No pagination parameters (limit, offset, cursor) visible for list tools despite 14 list-like tools present.