Multi-platform community data scraping and AI chat service for LifeInk, supporting Douban, WeRead, and Flomo integrations with FastAPI scraper microservice and Go backend
This MCP server exhibits severe and pervasive quality issues across nearly all 25 tools. While tool names generally follow verb_noun conventions and input schemas are partially present, the implementation fails critical baselines: descriptions are minimal or absent (averaging ~15-25 chars, well below the 194-char baseline for A+ tools), parameter descriptions are sparse or missing entirely, output schemas are not documented, and error handling lacks recovery guidance. The server also mixes Python (scraper microservice) and Go (backend) across tools without clear abstraction, source files span backend/scraper/server.py, backend/pkg/auth/handler.go, and frontend routes, but actual tool definitions are not visible in the provided code excerpts. Authentication/secretmanagement tools (register, verify, login, change-password) expose security concerns: tool descriptions do not acknowledge password handling or encryption, and there is no evidence of secure credential storage in the MCP tool definitions themselves (this may be handled server-side, but the tool interface itself does not declare scope or permission requirements per the pattern:scope-declaration baseline). The chat and community platform binding tools reference SSE streaming and external platform integration but provide no documentation of response structures, pagination, or error recovery paths.
Start platform binding (QR login + initial sync). Returns SSE stream.
Change authenticated user password.
Delete multiple chat sessions.
Delete a chat session.
List all chat sessions for authenticated user.
Get all messages in a chat session.
Rename a chat session.
Send a message to chat and get streamed LLM response with optional reasoning.
Output schemas are not documented. No tools declare what fields they return, forcing LLMs to parse unstructured or inferred responses. This violates the pattern:response-shaper and pattern:tool baseline that 100% of A+ tools document return types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 30 | 2026-07-28+ | v2 |
Unbind and delete platform connection.
Refresh profile for bound platform.
Start platform binding process.
Get binding status for a platform.
Fetch all platform data for authenticated user.
Start data synchronization for a platform.
Delete authenticated user account.
Health check endpoint.
Login user with email and password.
Logout authenticated user.
Get current authenticated user profile.
Refresh profile for bound platform.
Register a new user with email and send verification code.
Data sync for bound platform. Returns SSE stream.
Logout from platform before unbinding.
Update authenticated user profile.
Verify email code and create user account.
Tool descriptions are uniformly minimal (15-25 characters, well below the 194-char baseline). Descriptions lack context for when to use each tool, prerequisites, or expected outcomes. Examples: 'Logout authenticated user' (26 chars), 'Verify email code and create user account' (41 chars, but missing detail on error cases and token handling), 'Health check endpoint' (20 chars). LLMs cannot reliably select the right tool with such sparse descriptions.
Parameter descriptions are missing or inadequate. Many parameters have no description at all (e.g., 'platform' in bind, sync, refresh, unbind is documented as generic 'Platform identifier: douban, weread, or flomo' but lacks guidance on how to use it or what happens if an invalid platform is passed). Complex parameters like 'session_state_json' in sync lack explanation of structure or serialization format. LLMs cannot validate input without clear constraints.
No error handling or recovery guidance. Tools like 'delete' (user account deletion), 'chat_batch_delete', and 'community_bind_delete' are destructive but provide no confirmation step, dry-run option, or error classification (retryable vs. fatal). Violates pattern:confirmation-request and pattern:error-classification.
Authentication tools (register, verify, login, change-password) expose security and governance concerns. Tool definitions do not declare permission scopes (pattern:scope-declaration), do not document credential handling or encryption, and do not guide recovery if verification fails. 'register' sends a code but does not document retry limits, expiration, or multi-attempt failure handling.
Tool definitions are inferred rather than directly visible in source code. The provided code excerpts include Dockerfile, go.mod, pyproject.toml, frontend/package.json, frontend component files, and a partial backend/scraper/server.py stub, but actual MCP tool registration code (tool name, schema, description) is not shown.
No pagination or result limits documented. Tools like 'chat_list', 'chat_messages', 'community_data', and 'chat_batch_delete' operate on potentially large collections but do not document pagination, limits, or total counts. Violates pattern:paginated-result and mxe:enforce-result-limits (baseline: cap results at 20-50).
Inconsistent naming conventions across related tools. 'chat_send', 'chat_list', 'chat_delete' use snake_case with underscore, but some auth tools use hyphenation ('update-profile', 'change-password'). Additionally, community platform tools use 'community_bind_status', 'community_bind_start', but earlier bind/sync/refresh/unbind tools use simple names. This creates confusion and violates the baseline principle of consistent naming for tool discovery.
SSE streaming tools (bind, sync, refresh, chat_send) mention returning SSE streams but do not document the event structure, message format, or how LLMs should consume the stream. This violates pattern:tool and makes it impossible for agents to plan downstream parsing.
Complex state parameters (session_state_json, bookmark_synckeys) are passed as strings/objects but lack schema or format documentation. LLMs cannot construct or validate these without examples or formal constraints. Violates pattern:constrained-input and review:param-validation-rules.