Session Desktop MCP Server - Read-only access to Session messenger data
11 tools with basic schemas and descriptions, but significant gaps. All tools have descriptions (10-50 chars, below the 50-200 char baseline for LLM optimization). Input schemas present for all tools with proper type definitions, but output schemas are completely undocumented, LLMs cannot plan downstream calls or extract structured data. No error handling guidance, no parameter constraints (enums), no pagination support despite list-returning tools. Tool naming is verb-first and clear (get_*, search_*, accept_*, etc.), but descriptions are too terse to guide LLM selection. No tool annotations (readOnlyHint/destructiveHint). Security: no audit logging visible, no permission gates documented.
Accept a pending contact or message request
Block a user and decline their request
Decline a pending request
Export a conversation to JSON, CSV, or HTML format
Get all conversations from Session database
Get messages from a specific conversation
Get our own Session ID
Output schemas completely undocumented. LLMs cannot infer what fields are returned, breaking downstream tool chaining and forcing discovery detours.
Descriptions too terse (10-50 chars vs 50-200 char baseline). Lack WHAT/WHEN/WHY context. E.g., 'Get all conversations from Session database' does not explain when to call it vs search_messages, or what structure is returned.
No pagination support on list-returning tools (get_conversations, get_messages, search_messages, get_pending_requests). No limit/offset params, no total_count in response. Large result sets will blow context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Get all pending contact and message requests
Get a specific pending request by ID
Get statistics about Session data
Search messages across conversations
No input validation or error guidance. Parameters like 'format' in export_conversation lack enum constraints. No recovery hints (e.g., 'If conversation_id not found, call get_conversations() first').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints. accept_request, decline_request, block_request should be marked destructiveHint=true.