MCP server for landscape and gardening business budget management system (Proflores). Provides tools for managing companies, clients, projects, budgets, concepts, APUs (unit price analysis), resources, and price lists.
The server provides 20 well-named tools with consistent verb-noun conventions (list_, get_, create_, update_, add_, set_). All tools have descriptions in Spanish ranging 50-300+ characters. Input schemas are present for all tools with typed parameters and descriptions. However, there are significant gaps: (1) output schemas are completely undocumented, no tool specifies what fields it returns, forcing LLMs to infer structure; (2) parameter descriptions often lack constraints (enums, ranges, formats) that should guide LLM input; (3) no pagination guidance despite several list_ tools; (4) error handling is absent from all tool definitions; (5) no tool includes actionable recovery guidance. The fastmcp framework handles registration cleanly, but the definitions themselves lack production-grade rigor around error handling, output documentation, and LLM-optimized constraint expression. Spanish descriptions are clear but would benefit from more prescriptive language (e.g., 'must be YYYY-MM-DD' rather than 'fecha').
Agrega un recurso a un APU. Cada ítem del APU representa un insumo (material, mano de obra, equipo) con su cantidad y porcentaje de desperdicio.
Agrega una partida (línea) a un presupuesto. Cada partida liga un Concepto (qué se hace) con un APU (desglose de costos) y una cantidad.
Crea un APU (Análisis de Precio Unitario) para un concepto. El APU desglosa el costo unitario de un concepto en recursos individuales. Después de crearlo, usa add_apu_item para regregar los recursos que lo componen.
Crea un nuevo presupuesto vacío para un proyecto. El presupuesto se crea en estado DRAFT. Después usa add_budget_item para agregar partidas una por una.
Crea un nuevo cliente. Solo el nombre comercial es obligatorio; los demás campos son opcionales.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields from responses without explicit schema documentation.
List tools (list_companies, list_clients, list_projects, list_concepts, list_resources, list_price_lists, list_suppliers, list_budgets) lack pagination parameters (limit, offset, page_size). No total_count or next_cursor documented. Large result sets risk context window exhaustion.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Crea un nuevo concepto (partida de obra) en el catálogo. Un concepto es un tipo de trabajo, ej: "Suministro y colocación de pasto en rollo". Se asocia a una unidad de medida.
Crea un nuevo recurso (material, mano de obra o equipo). Los recursos son los insumos base que componen los APUs.
Obtiene el detalle completo de un presupuesto. Incluye: proyecto, empresa, cliente, todas las partidas con sus conceptos (unidad de medida), APUs con sus ítems y recursos. Es la consulta más completa del sistema.
Lista presupuestos existentes. Incluye proyecto, empresa y cliente asociados.
Lista o busca clientes. Sin argumentos retorna todos. Con 'search' filtra por nombre, email o teléfono (búsqueda parcial, case-insensitive).
Lista todas las empresas registradas. Retorna uuid, nombre comercial, razón social, RFC y datos de contacto. Útil para seleccionar la empresa al crear un proyecto.
Lista conceptos del catálogo (partidas de obra). Un concepto es un tipo de trabajo, ej: "Suministro y colocación de pasto". Tiene unidad de medida y puede tener APUs asociados.
Lista todas las listas de precios. Incluye nombre, región, moneda, vigencia y si es la lista por defecto.
Lista proyectos con filtros opcionales. Incluye empresa y cliente asociados.
Lista recursos (materiales, mano de obra, equipo). Los recursos son los insumos que componen un APU.
Lista proveedores.
Lista todas las unidades de medida disponibles (m2, kg, pieza, etc.).
Asigna un precio a un recurso en una lista de precios. Permite registrar el costo unitario de un recurso según la lista de precios, proveedor y periodo de vigencia.
Actualiza campos de un presupuesto existente. Solo los campos proporcionados serán modificados.
Actualiza una partida de un presupuesto. Solo los campos proporcionados serán modificados.
Parameters lacking formal constraints. Examples: 'status' in list_budgets and update_budget should declare enum [DRAFT, SENT, APPROVED, REJECTED, EXPIRED]; 'currency' should constrain to valid ISO 4217 codes; 'resource_type' in list_resources and create_resource should declare enum. Descriptions list examples but lack formal schema constraints.
No error handling guidance in tool definitions. Agents receive failures but get no recovery steps. E.g., what if a budget_uuid does not exist? What if add_budget_item is called with invalid concept_uuid or apu_uuid? Should agent list_concepts first? No guidance provided.
Parameter descriptions use natural language (Spanish) without explicit format/length constraints. Examples: 'Fecha de inicio de vigencia (YYYY-MM-DD)' in create_apu lacks minLength/maxLength/pattern in schema; 'Porcentaje de IVA como decimal, ej 0.16' lacks min/max bounds; UUID parameters lack pattern validation. Relying on description text alone invites LLM hallucination.
Tools accepting UUIDs (budget_uuid, project_uuid, concept_uuid, etc.) do not document resolution strategy. Can LLMs pass the UUID directly, or must they call list_* first? Should tools accept both UUIDs and human-readable names? Current design forces UUID-only lookups, breaking the chat data model (users operate with names, not opaque IDs).
Destructive/write tools (create_*, update_*, add_*) lack confirmation or dry-run capability. No mechanism to prevent accidental budget creation or incorrect item additions. Agents can trigger irreversible actions without safeguards.
Tool composition assumes multi-step workflows but does not document required prerequisites. E.g., to call add_budget_item, agent must already possess budget_uuid, concept_uuid, and apu_uuid. If these are not returned from prior calls, agent faces forced lookup detours. Response chaining IDs not documented.