An AI-powered web scraping and search agent that uses LangGraph to orchestrate web content scraping, URL extraction, and news fetching with an LLM backbone.
This server has significant definition quality issues across all dimensions. Tool names lack action verbs and are inconsistent with naming conventions (contentScrapper vs urlExtractor vs news). Descriptions are present but often vague, contradictory, or misleading, for example, urlExtractor's description claims it 'searches the web for current information' but the code actually wraps Tavily's search API, not URL extraction. Input schemas exist but are minimal: all three tools accept only a single string parameter with minimal constraint documentation. Output schemas are entirely undocumented, callers cannot predict what fields will be returned or structure of responses. Error handling is basic (returns error strings) without guidance on recovery or retry logic. No parameter validation or actionable error messages. Tools lack composition awareness: there is no clear relationship between which tool to call for what task beyond vague natural language hints in docstrings. The codebase shows langgraph usage but no explicit MCP server implementation visible, this appears to be a langgraph agent, not an MCP server.
use this tool to scrap the web content and to fetch extra information from internet, But in order to use this tool, you need to provide a url as input, i.e provide url as input and take structured output
use this tool to fetch news information like news regarding tesla/apple/hollywood etc so provide as a single word input for ex:tesla
Search the web for current information. Use this for: search queries, factual lookups (e.g. winners, dates, events), and finding up-to-date information. Input: the search query or topic (e.g. 'Nobel Prize winners 2025', 'latest AI news'). Returns search results from the web.
Tool names lack action verbs and are inconsistent. 'contentScrapper' should be 'scrape_webpage' or 'scrape_content'; 'urlExtractor' should be 'search_web'; 'news' should be 'get_news' or 'search_news'. Names do not follow verb_noun convention.
urlExtractor description is misleading. It claims to 'extract URLs' but actually performs web search via Tavily API. The description does not match the implementation, causing LLM confusion about when to invoke this tool vs contentScrapper.
Input schemas are minimal and under-constrained. All three tools accept a single 'input' string with only a description. No format constraints, length limits, regex patterns, or enum values. contentScrapper requires a valid URL but the schema does not enforce this; urlExtractor requires a 'search query' but does not explain length or character restrictions; news requires 'single word' but schema does not validate this constraint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 25 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Output schemas are completely undocumented. Callers cannot predict the structure of responses. contentScrapper returns a string (markdown or error message), urlExtractor returns a formatted string with answer + results, news returns a formatted string with article summaries. None of these output types are formally documented in JSON Schema, forcing LLMs to infer structure from trial-and-error.
Error messages are generic and provide minimal recovery guidance. Examples: 'Could not scrape URL: {e}', 'Tavily API key not configured', 'Could not load news: {e}'. These tell the LLM nothing about whether to retry, ask the user, or try an alternative tool.
Tool composition is unclear. No documentation explains which tool to use for which task. contentScrapper and urlExtractor both return web content but via different mechanisms (direct scraping vs search results), yet the distinction is not explicit. The langgraph prompt hints at this (contentScrapper for URLs, urlExtractor for searches) but this logic should be encoded in tool descriptions, not hidden in agent prompts.
Parameter descriptions contain example values (contentScrapper: 'provide url as input'; urlExtractor: 'Nobel Prize winners 2025'; news: 'tesla, apple'). LLMs tend to reuse example values literally rather than adapting to context. Replace examples with formal constraints (regex patterns, enums, length limits).
No parameter validation or input sanitization visible in tool implementations. contentScrapper accepts any string as a URL without validation (will crash if not a valid URL). urlExtractor does not validate query length or character content. news assumes single-word input but does not enforce this constraint.