Multi-Agent Orchestration System with ticketing, collaboration tools, and workspace management
The server defines 14 tools with explicit schemas and descriptions. Most tools have properly typed input schemas with parameter descriptions. However, the definitions lack critical LLM-optimization elements: descriptions are functional but often generic (90-150 chars), output schemas are not documented, error handling lacks recovery guidance, and some parameters are underspecified. Tool naming follows verb_noun patterns correctly (create_ticket, update_ticket, search_tickets). The ticketing tools (1-9) are well-structured with enums for constrained fields (priority, status, search_type). Collaboration tools (10-14) lack specificity, e.g., 'broadcast_message' accepts a free-form 'context' object without guidance on structure, and 'request_handoff' parameters like 'target_agent_type' lack enum constraints. No tool declares output schemas explicitly, forcing LLMs to infer response structure. Security concerns: tools accept 'agent_id' as a string parameter with no validation hint, raising injection risk.
Broadcast a message to all agents.
Get messages for an agent.
Mark a message as read.
Add a comment to a ticket.
Change ticket status with optional commit linkage.
Create a new ticket in the workflow tracking system.
Get details of a single ticket.
List tickets with filters and pagination.
Output schemas not documented: No tool declares what fields are returned. LLMs cannot infer response structure or plan chained calls. E.g., create_ticket likely returns ticket_id, but this is nowhere specified.
update_ticket accepts generic 'updates' object (type: object, no schema). LLMs cannot know which fields are valid or what types they accept. Forces guessing and trial-and-error.
broadcast_message and send_message accept free-form 'context' objects (type: object, no schema) with default {}. LLMs have no guidance on valid structure, keys, or values. Should either provide schema or use strongly-typed named parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Link a commit to a ticket.
Resolve a ticket with resolution comment.
Search tickets (hybrid by default: semantic + keyword).
Update fields of an existing ticket.
Request a handoff to another agent or phase.
Send a message to a specific agent.
request_handoff parameter 'target_agent_type' accepts freeform string with no enum. Example given: 'specialist', 'reviewer'. LLM will hallucinate invalid types. Should declare enum: ['specialist', 'reviewer', ...].
Many tools accept 'agent_id' as a bare string with no validation. No description addresses format, length, or security. Tools should validate input format and return actionable errors for invalid IDs.
No error handling guidance. Tools lack descriptions of failure modes, retryable vs. fatal errors, or recovery actions. E.g., what happens if workflow_id or ticket_id is invalid? No guidance for LLM.
get_ticket description is only 34 chars ('Get details of a single ticket'). Too brief to explain context or failure modes. Should expand to ~100-150 chars explaining what data is returned.
mark_message_read description is only 25 chars ('Mark a message as read'). Insufficient for LLM context. Expand to explain what happens next (message no longer in unread filter?) and any side effects.
No tool documents pagination behavior. get_tickets accepts limit (default 50) and offset (default 0), but no description explains total count, whether offset is stable across deletes, or if next_cursor is available. LLMs cannot reliably paginate without this.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot infer which tools are safe to retry or have irreversible effects. E.g., resolve_ticket and delete operations should be marked destructiveHint=true.