MCP server for Xiaohongshu (XHS/RedNote) content extraction and downloading, providing tools to extract links, download media files, and manage download records
This MCP server has severe quality gaps across naming, descriptions, parameters, and schema documentation. Of 15 tools, only 2 have reasonably clear descriptions. Most parameters lack type definitions in visible schemas. Tool names are inconsistent (mix of verb_noun and verb_cli). The server attempts domain-specific functionality (Xiaohongshu content extraction) but the MCP interface is poorly designed for agent usage. No visible output schemas, no error handling guidance, no parameter validation rules documented. Several tools expose questionable design: run_mcp_server and run_api_server should not be MCP tools (they manage the server itself). Callback parameters (progress_callback, result_callback) are not actionable in typical MCP contexts. Overall, this reads like a domain tool hastily wrapped in fastmcp without consideration for agent patterns.
Cancel a running or queued task
Create download tasks from input URLs and image indices
Extract and optionally download Xiaohongshu work data including metadata, images, and videos
Extract Xiaohongshu work data with CLI output formatting
Extract Xiaohongshu work links from input URLs
Retrieve download history records
Retrieve current application settings
Get detailed information for a specific task
run_mcp_server and run_api_server should NOT be MCP tools. These control the server itself, not the domain functionality. Exposing server management as tools is a critical architectural error that breaks agent semantics and creates security risks.
No visible output schemas for any tool. The source code shows tool registration but does not include documented return types or response structures. LLMs cannot plan downstream tool chains without knowing what fields to expect.
Callback parameters (progress_callback, result_callback) in extract() are not meaningful in MCP context. Agents cannot pass Python callables. These should be removed or replaced with polling or server-sent events.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Retrieve all tasks in the queue
Get clipboard content
Run the FastAPI server for HTTP API access
Run the MCP server with specified transport and configuration
Start clipboard monitor for automatic task creation
Stop the clipboard monitor
Update application settings
Many parameters lack type definitions in visible schemas. E.g., 'settings' parameter in update_settings is typed as 'object' with no structure documentation. Agents cannot construct valid payloads without knowing required fields.
Inconsistent naming conventions. Some tools use verb_noun (extract_links, cancel_task), others use verb_cli (extract_cli). 'extract_cli' suggests multiple implementations, split them or choose one consistent pattern.
Descriptions for start_monitor, stop_monitor, paste_content are vague (under 50 chars). LLMs need to understand WHEN to call these tools and what state they affect. E.g., 'Start clipboard monitor for automatic task creation' doesn't explain if this is global, what triggers task creation, or if it persists across sessions.
No error handling guidance. Tool descriptions do not explain failure modes or recovery steps. If extract() fails (network error, invalid URL, rate limit), the LLM has no actionable guidance.
No input validation rules documented. The 'url' parameter accepts a string, but no pattern or format is specified. Is it a full URL or shortlink? Does it accept arbitrary URLs or only Xiaohongshu domains? LLMs will guess wrong.
No pagination documented for get_task_queue and get_download_history. If hundreds of tasks or records exist, returning all of them will blow the context window. Tools should accept limit/offset and return total_count.
Proxy parameter in extract_links and extract is exposed as a plain string. If this requires authentication credentials, it should never appear as a tool parameter. Use server-side secret injection instead.