A multi-agent FastAPI-based chatbot application with vector store memory, MCP tools for web search and scraping, and voice mode using LiveKit
This MCP server has critical gaps in definition quality. Both tools have minimal descriptions (under 50 chars), lack parameter descriptions entirely, and have no visible output schema documentation. The input schemas are present but sparse. Naming is acceptable but descriptions fail to meet baseline standards for LLM-optimized tool selection. Per the rubric baseline of 194 chars average for tool descriptions and 100% of A+ tools having param descriptions, this server falls significantly short.
Search related to the query.
Web scrapping related to the url.
Tool descriptions are critically short (both under 50 chars). 'Search related to the query' and 'Web scrapping related to the url' are generic and do not convey context, dependencies, or return structure. Baseline is 194 chars; these are ~30-40 chars.
Input parameters lack descriptions entirely. The 'query' param in search_server.py and 'url' param in web_scrapping_server.py have minimal docstring documentation ('User query', 'User url').
No output schema documented in tool definitions. The search tool returns a dict from Tavily API; web_scrapping returns a ScrapeResponse object. LLMs cannot plan downstream tool calls without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
No error handling guidance. If Tavily API fails, if FIRECRAWL_API_KEY is missing, or if a URL is unreachable, the tools provide no recovery hints.
Tool naming has minor issues. 'web_scrapping' uses gerund form (web_scrapping) instead of verb_noun (scrape_web or scrape_url). 'search' is generic, does it search the web, database, files? Context is missing from the name alone.
No input validation hints. The 'url' parameter in web_scrapping has no format constraints (must be valid URL? http/https only?). The 'query' parameter has no length limits or format guidance.
API credentials (TAVILY_API_KEY, FIRECRAWL_API_KEY) are injected server-side via settings, which is correct. However, no tool description documents what these keys are for or what happens if they are missing, limiting LLM understanding of failure modes.