MCP server that enables AI assistants to search and retrieve meeting transcriptions from MacWhisper's database
Server has 2 tools with clear action-verb naming (search_, get_) and moderately detailed descriptions. Both tools have explicit input schemas with types and parameter descriptions. However, output schemas are not formally documented, and error handling lacks recovery guidance. The search_meetings tool returns ResourceLinks (non-legacy mode), which is a structured output pattern, but the get_meeting tool returns plain Markdown text without a declared schema. Parameter descriptions are present and reasonably detailed (e.g., sessionType enum values documented inline), but some formatting guidance is missing (e.g., datetime format is stated but not validated). No tool annotations (readOnlyHint/destructiveHint/idempotentHint) are declared despite both tools being READ_ONLY operations.
Get meeting transcript by session ID. Returns full transcript in Markdown format.
Search MacWhisper meeting transcriptions by content, title, or date range. Returns resource URIs for matching sessions.
Output schemas not formally documented. search_meetings returns a mix of TextContent (JSON summary) and ResourceLinks; get_meeting returns unstructured Markdown. LLMs cannot plan downstream operations without knowing what fields to extract.
Tool annotations missing. Both tools declare Risk: READ_ONLY but do not use readOnlyHint in schema. This prevents MCP clients from optimizing caching, audit policies, or agent behavior based on operation class.
Error messages are generic and lack recovery guidance. Example: 'Search failed: %v' and 'Session not found or database error: %v'. Pattern:recovery-guide requires telling the LLM what action to take next (e.g., 'Try refining keywords' or 'Ensure the session ID is valid').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Pagination parameters present in search_meetings (limit, default 10, max 100) but no total count or next_cursor returned. LLMs cannot determine if there are more results or how to fetch them.
get_meeting tool is conditionally registered (legacyMode only) and operates outside the natural tool composition pattern. search_meetings returns ResourceURIs that should resolve to full transcripts, but the mechanism is not formalized via resource definitions or resource read handlers.