An MCP server that implements an AI Council - a deliberative system where multiple AI personas propose responses, vote on proposals, handle evictions, and practice on candidate pools.
Two tools with partial definitions. Both have reasonable names (vote, council_status) and descriptions, but schema quality is mixed. The 'vote' tool has a clearly-visible Zod schema with one parameter; 'council_status' has an empty input schema. Descriptions are functional but brief (53 chars for vote, 62 chars for council_status, both within acceptable range but toward the short end). No parameter descriptions beyond the schema itself. Output structure is formatted as text via formatVoteResult(), not a structured schema. No error classification, no recovery guidance beyond a generic catch block. No tool annotations (readOnlyHint, idempotentHint). No pagination, no chaining IDs, no rich output metadata. Both tools are READ_ONLY operations, which reduces risk, but the lack of structured output and incomplete error handling limits agent reasoning and integration.
Get the current status of the council including members, candidates, and pool statistics.
Submit a query to the AI council for deliberation. The council will propose responses, vote on them, and return the winning response with full reasoning and vote breakdown.
No structured output schema documented. Both tools return text/markdown instead of typed objects. LLMs cannot parse results reliably or chain outputs to downstream tools.
Parameter descriptions missing. The 'prompt' parameter in 'vote' tool has only a schema description ('The query or request to submit to the council') but no constraint hints, format guidance, or length expectations. LLMs cannot validate input quality.
Empty input schema for council_status. The tool accepts no parameters (inputSchema: {}), which is valid, but lacks any metadata or optional hints for future extensibility.
No error classification or recovery guidance. The vote tool catches errors generically and returns isError: true with a message, but does not differentiate retryable (e.g., insufficient council members) from user-fixable (e.g., invalid prompt) errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 43 | - | v1 |
No tool annotations. Neither tool is marked with readOnlyHint or idempotentHint, even though both are read-only and side-effect-free (council_status) or have background mutations (vote's practice round).