MCP server for retrieving and generating transcription content from Genesys conversations
This server has critical quality gaps across naming, descriptions, schemas, and error handling. All four tools are directly visible and registered via @mcp.tool() decorator with Python type hints. However, descriptions are generic and lack actionable detail, parameter descriptions are missing or minimal, output schemas are not documented, and error handling provides no recovery guidance. The server follows a simple proxy pattern to a remote backend but exposes raw API responses without shaping or validation.
Generate transcription based on Conversation IDs to get communication ids. Transcription is saved to files. Args: conversation_ids: List of conversation ids folder_id: id of the folder where transcription files are saved Returns: A dictionary containing success status and a message
Retrieve/get example transcription. Returns: A dictionary containing success status and a message
Retrieve/get transcription content based on Conversation IDs. Args: folder_id: id of the folder where transcription files are saved conversation_ids: List of conversation ids or ´None'. 'None' is to return all conversations that belong to stated folder. Returns: A dictionary containing success status and a message
Getting conversations happened in Genesys during provided interval. This requires connection authentication to Genesys to be able to call its apis. if it errors due to authentication, get authentication then try again. Args: start: Start of interval as year-month-day hour:minute:second (2025-05-14 13:00:00) end: End of interval as year-month-day hour:minute:second (2025-05-14 13:00:00) Returns: List of conversation ids happened during the provided interval.
Output schemas are not documented. All four tools return Dict[str, Any], list[types.TextContent], or str without specifying the actual fields, structure, or field types. LLMs cannot plan downstream tool calls or extract chaining IDs (e.g., if get_transcript returns message_id, a hypothetical add_comment tool needs it).
Descriptions are too generic or too brief. 'Retrieve/get example transcription.' (31 chars) is below the 50-char minimum from the rubric baseline. 'Retrieve/get transcription content based on Conversation IDs' (63 chars) lacks context for WHEN to use this tool vs. interval_conversations or generate_transcription. Per the rubric, descriptions should answer: What does it do? When should the LLM call it instead of a similar tool? What does it return?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Parameter descriptions are missing or insufficient. 'conversation_ids' in get_transcript is described as 'List of conversation ids or 'None'. 'None' is to return all conversations that belong to stated folder.', but the schema marks it optional, and the description is confusing about the meaning of None vs. an empty list vs. omission. Similarly, 'start' and 'end' in interval_conversations are described with examples ('2025-05-14 13:00:00') rather than formal format constraints. Per the rubric, descriptions should state the expected format, range, and allowed values.
No error handling or recovery guidance. Tools return raw response.json() from a backend HTTP service, but there is no validation, no error categorization (retryable vs. user-fixable vs. fatal), and no guidance for the LLM if something fails. E.g., if interval_conversations fails due to auth, the description says 'get authentication then try again', but there is no authentication tool, and the error response structure is undocumented.
Return type mismatch: interval_conversations is annotated as returning 'str', but the docstring says it returns 'List of conversation ids happened during the provided interval.' This is a logic error that could cause runtime failures or LLM confusion.
State-modifying tool (generate_transcription) lacks clear state-change declarations. The description does not explicitly state that this tool saves files (mutates state), making it ambiguous whether the tool is idempotent or has side effects. Agents need to know if they can safely retry this call.
No input validation or constraint documentation. Parameters like 'folder_id' and 'conversation_ids' have no documented constraints (length, format, allowed characters). The rubric requires specifying range and allowed values; e.g., 'folder_id: 1-50 alphanumeric characters, e.g. FOLD_ABC123'.
Return type union (generate_transcription: Dict[str, Any] | list[types.TextContent]) is undocumented. The LLM cannot predict which branch is returned or how to handle the response. No documentation of what triggers each branch.