MCP server for LLM optimization analysis, providing tools to query domain reports, visibility scores, and actionable recommendations (todos) for improving AI visibility across multiple analysis dimensions.
Server has 5 well-defined tools with action verbs, clear descriptions (avg 200+ chars), and proper input schemas using mark3labs/mcp-go framework. All tools have descriptions and parameters are typed with descriptions. However, output schemas are not explicitly documented in code, and error handling guidance is minimal. Parameter constraints are well-applied (enums for report_type, status). Missing output documentation and recovery guidance prevent higher scores.
Get a specific analysis report for a domain. Returns the full report data for the requested type. Available report types: 'analysis' (site structure), 'optimizations' (answer engine scores), 'video' (video authority), 'reddit' (Reddit authority), 'search' (search visibility), 'summary' (executive summary), 'tests' (LLM knowledge tests), 'brand' (brand intelligence profile).
Get the composite AI visibility score for a domain. Returns a weighted score (0-100) computed from five components: Optimization (30%), Video Authority (20%), Reddit Authority (20%), Search Visibility (15%), and LLM Test (15%). Each component shows its individual score and availability.
List all domains tracked for your LLM Optimizer account. Returns an array of domain names that have analysis data. Use this to discover which domains are available before requesting specific reports.
List action items (todos) generated from LLM optimization analyses. Todos are actionable recommendations for improving AI visibility. Filter by status or domain to focus on specific areas.
Output schemas not documented in visible source code. While handlers exist (listDomains, getReport, etc.), the tool definitions do not include explicit mcp.WithObject() or schema documentation for return types. LLMs cannot infer response structure.
Error handling in handlers returns mcp.NewToolResultError() with minimal context. No recovery guidance provided. E.g., 'domain is required' gives the LLM nothing about next steps. Should include 'Use llmopt_list_domains() first to discover available domains.'
llmopt_list_todos and llmopt_list_domains lack pagination parameters (limit, offset, cursor). No documented max result count. Large result sets will blow context window without pagination support.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Update the status of a todo item. Requires admin or owner role. Valid transitions: 'todo' (reopen), 'completed' (mark done), 'backlogged' (defer), 'archived' (dismiss). Use llmopt_list_todos first to find the todo ID.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) declared in mcp.NewTool() calls. llmopt_update_todo is destructive (WRITE risk) but has no annotation. This prevents MCP clients from applying appropriate safety guards.
Parameter descriptions in llmopt_list_todos mention enum values inline ('todo' (open), 'completed', etc.) but do not explain the business logic of status transitions. E.g., can a 'completed' todo be moved back to 'todo'? What are valid transitions?