A multi-agent system with MCP servers for article generation, research, creative text generation, web search, and cloud storage operations. Includes agents for task management, research coordination, and article drafting.
This MCP server suite exhibits significant quality gaps. Of 7 tools listed, 2 are exact duplicates (generate_text appears twice with identical schemas). Tools have basic descriptions but lack depth for LLM-optimal selection. Input schemas are present but minimal, most parameters lack type constraints (enums, min/max). Output schemas are not documented. Parameter descriptions are present but generic. Critical issues: (1) duplicate tool registration reduces usability and confuses LLM tool selection; (2) parameters lack constraints (e.g., bucket_name has no format rules, temperature lacks 0-1 bounds); (3) no output schema documentation means LLMs cannot predict downstream tool inputs; (4) error handling is minimal, tools return raw error messages without recovery guidance. The codebase shows HTTP transport via FastAPI (good), but tool definitions themselves are underdeveloped.
Deletes a file from Google Cloud Storage.
Downloads a file from Google Cloud Storage and returns its content as a string.
Useful for generating creative text like articles, poems, or drafts from a prompt.
Useful for generating creative text like articles, poems, or drafts from a prompt.
Useful for searching the web to find information about a given query.
Simulates web search using Claude LLM to generate relevant search results with title, URL, and snippet for a given query.
Duplicate tool definition: 'generate_text' registered twice (tools/generate_text_tool.py line ~25 and again in list item #7). This forces LLMs to reason about which instance to call and wastes tokens. Consolidate into a single tool.
No output schemas documented. Tools like search_web return 'search_results' (inferred from code), download_file returns file content (assumed), but LLMs have no formal schema to validate expected fields. This breaks tool chaining, if the next tool expects 'url' vs 'link', the LLM must guess.
Parameter constraints missing. 'bucket_name' (string) has no pattern/format; 'temperature' (number) lacks explicit 0.0 - 1.0 bounds (code shows 0.7 default but no min/max); 'max_tokens' (integer) unbounded. LLMs will hallucinate invalid values (temperature=5.0, bucket_name='../../etc/passwd').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Useful for uploading a file (provided as string content) to Google Cloud Storage. Returns the public URL of the uploaded file.
Error handling minimal and non-actionable. Code (mcp_tool_adapter.py) returns generic MCPToolResult with status/error but no recovery guidance. E.g., 'MCP_CALL_FAILED: [ConnectionError]' tells LLM nothing. Should return 'Failed to reach MCP server at <URL>. Verify network connectivity and try again.' or 'Bucket not found. Available buckets: [list].'
Destructive operations (delete_file) lack confirmation mechanism. Code does not show dry-run, pre-check, or confirmation_required pattern. Agents can irreversibly delete GCS objects without approval. Pattern recommend: support a 'confirm' step or require explicit 'force_delete=true' with strong warnings.
Tool descriptions are generic and under-optimized for LLM selection. 'Useful for uploading a file...' and 'Useful for searching the web...' appear in multiple tools. Current descriptions do not answer 'When should I use this vs research_web vs search_web?'
Two tools (search_web, research_web) appear to perform the same function ('search the web') but have different names and unclear differentiation. LLMs will waste reasoning cycles choosing between them. Consolidate to one canonical tool or document explicit differences (e.g., 'search_web returns snippets; research_web returns full articles').
GCS credentials (bucket access) are not visible in parameter definitions. Assuming server-side injection (good), but source code does not confirm. If credentials are stored in environment variables (config.CREATIVE_LLM_MCP_URL suggests config-driven setup), this is correct. Verify no API keys, tokens, or GCS service account JSON leak into tool parameters or responses.