Multi-level MCP server collection featuring weather API integration, PDF document parsing with LlamaParse, entity extraction, and dynamic schema-based data extraction using LlamaCloud services
This MCP server exhibits significant quality gaps across naming, descriptions, parameter documentation, and output schemas. While 11 tools are defined with basic JSON schemas, most lack sufficient documentation for LLM-driven agent selection. Naming is verb-driven but inconsistent (e.g., 'extract_entities' and 'extract_entities_2' violate the single-responsibility principle). Descriptions exist but many are generic and under 100 characters. Parameter schemas are present but minimally documented. Output schemas are not documented anywhere in the visible source code. Error handling is minimal, tools return dict objects with 'error' keys but provide no recovery guidance. The server spans multiple 'levels' (1-5) with disparate implementations, suggesting experimental/educational intent rather than production-grade quality. Most tools would score 30-50 individually due to missing output documentation and minimal parameter descriptions.
Add a list of numbers together.
Counts the total number of pages in a PDF document.
Creates a new extraction agent with a dynamic schema or retrieves an existing agent, then extracts data from a PDF document.
Simulate entity extraction from a document string.
Extracts specified entities from a PDF document. The PDF can be provided either as a file path or a base64 encoded string. It uses LlamaParse to process the document and then attempts to find entities by matching keys in the extracted text.
Extracts specified entities from a PDF document using LlamaParse markdown result type. Optionally normalizes output using Gemini AI.
Duplicate tool names with different implementations violate single-responsibility principle. 'extract_entities' and 'extract_entities_2' perform similar tasks with different LlamaParse result types but are named ambiguously, forcing LLMs to reason about which to select.
Output schemas are completely undocumented. Tools return Python dicts (e.g., {'error': '...'} or {'location': '...', 'country': '...', 'temperature_c': ..., 'condition': '...'}) with no formal schema declaration. LLMs cannot plan downstream calls or extract typed fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Retrieves extraction results from an existing agent for a PDF document.
Get current weather info for a given city or region.
Greet someone by name.
Detects and lists available entity names that can be extracted from a PDF document by scanning for key-value pairs.
Subtract a list of numbers in order (left to right).
Parameter descriptions are minimal or missing context. E.g., 'pdf_path' is described as 'The file path to the PDF document' (39 chars) but provides no format guidance, constraints, or hints about fallback to base64. Parameters 'entities' lacks information about valid entity types or constraints.
Error handling provides no recovery guidance. Tools return bare error dicts like {'error': 'API key is missing. Set WEATHER_API_KEY in .env'} or {'error': 'SDK parsing failed: ...'} but do not guide the agent on whether to retry, ask the user, or abort.
Tool 'create_agent_and_extract' combines two distinct operations (create agent + extract data). This violates single-responsibility. Split into 'create_extraction_agent' and 'extract_with_agent' to allow independent composition.
Tools 'add', 'subtract', 'hello', and 'extract' (calculator and simulated IDP) are demo/test tools mixed into a production server. They distract from the core domain (document extraction via LlamaParse). Either separate into a demo server or clearly document them as examples.
Mutually exclusive parameters (pdf_path vs pdf_base64) lack explicit documentation of the relationship. The get_pdf_path() helper function handles the logic, but tool descriptions do not state that exactly one must be provided or document the fallback behavior.
No pagination support for tools returning lists. 'list_available_entities' and 'extract_entities' (returning per-page results) lack limit/offset/cursor parameters, invite truncation, and may exhaust context windows with large documents.