MCP server for maigret - OSINT username search across social networks
The server defines 2 tools with explicit schemas and descriptions. Both tools have clear naming with action verbs (search_, parse_), structured input schemas with typed parameters, and basic descriptions. However, descriptions are minimal (under 100 chars), parameter descriptions are absent or generic, output schemas are not documented, and error handling lacks recovery guidance. The code shows good input validation (sanitization functions for username, URL, tags) but this defensive coding is not reflected in parameter constraint documentation. Overall, the definitions meet baseline clarity but fall short of LLM-optimized quality.
Parse a URL to extract information and search for associated usernames
Search for a username across social networks and sites
Tool descriptions are too brief and lack actionable guidance. 'Search for a username across social networks and sites' (67 chars) does not explain WHEN to use this tool vs parse_url, what structure is returned, or what prerequisites exist (Docker requirement, API limits, etc.).
Parameter descriptions are missing or minimal. The 'format' enum parameter lacks explanation of when each format is appropriate (txt vs json vs pdf). The 'tags' parameter has only 'Filter sites by tags (e.g. photo, dating, us)', no guidance on valid tag values, max count, or interaction with use_all_sites.
Output schemas are not documented. Neither tool specifies what fields are returned, data types, or structure. An LLM cannot plan downstream actions or extract relevant data without knowing the response format. This forces the agent to infer from execution, wasting tokens and inviting parsing errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Error handling lacks recovery guidance. The code validates inputs and throws McpError for invalid usernames/URLs, but error messages are generic (validation failures only). When Docker is unavailable or maigret image pull fails, errors are logged to stderr but not returned as structured, actionable tool responses. An LLM receives no guidance on retry strategy or alternatives.
No documentation of parameter constraints in descriptions. The code enforces username length (0-100), alphanumeric+underscore+hyphen+period, and tag length (0-50) with regex validation, but these constraints are invisible to the LLM. Descriptions should state: 'Username must be 1-100 characters, alphanumeric with hyphens, underscores, and periods only.'
The 'format' parameter default is 'pdf' but no explanation of why or when other formats are preferred. JSON format is typically preferred for agents (structured output); PDF is human-readable but hard for LLMs to parse. The description should guide selection: 'Use json for agent processing, pdf for human reports, html for web display.'
No dependency documentation. Both tools depend on Docker and the maigret image being available. If Docker is missing or the image pull fails, the tool will fail with a timeout or error. The descriptions should note: 'Requires Docker and soxoj/maigret:latest image. First execution may take time to pull the image.'
No pagination support documented. If search_username returns thousands of matches, there is no limit stated or offset/limit parameters offered. The agent will receive an unbounded result, wasting tokens and potentially hitting context window limits. The description should state a result cap: 'Returns up to 100 matches per format.'