Skip to main content
Glama
SantoshpHiremath

rag-tool-agent

RAG Tool Agent — Servidor MCP

Expone las dos herramientas que hay detrás del proyecto rag-tool-agent-demo (Q&A basado en recuperación sobre las notas del conjunto de datos FordA, y una calculadora aritmética segura) como un auténtico servidor Model Context Protocol, de modo que cualquier cliente compatible con MCP — Claude Desktop, un entorno de agente compatible con MCP o un host personalizado — pueda llamarlas directamente en lugar de hacerlo solo a través de la CLI del propio proyecto o del envoltorio HTTP Flask en rag-tool-api-docker.

Construido para cerrar una brecha concreta y bien definida: varias ofertas de empleo actuales para puestos de ingeniería de IA y de aplicaciones basadas en agentes piden explícitamente experiencia práctica con MCP (y protocolos relacionados de agente a agente/agente a UI). Esta es una implementación pequeña, real y probada, no una afirmación de experiencia en protocolos sin evidencia que la respalde.

Por qué está estructurado así

El agente original hace su propio enrutamiento internamente — un if/else hecho a mano que decide entre "calculator", "retrieval" o "direct answer" para cada pregunta entrante. MCP invierte eso: el cliente (el host LLM/agente) hace el enrutamiento, leyendo el nombre, la descripción y los parámetros de esquema JSON de cada herramienta y decidiendo cuál llamar. Por lo tanto, este servidor no reimplementa la lógica de enrutamiento original — expone las dos capacidades subyacentes como herramientas MCP independientes y llamables por separado, y deja que cualquier cliente MCP enrute hacia ellas. Ese es el verdadero propósito del protocolo: las herramientas se vuelven agnósticas al host en lugar de estar rígidamente integradas en la lógica de despacho de un único agente.

  • search_notes(query: str) -> str — búsqueda de tipo recuperación sobre un pequeño corpus de notas integrado sobre el conjunto de datos FordA, devuelta con el mismo sufijo de procedencia [Grounded in N retrieved chunk(s) from ...] que usa el agente original, de modo que un cliente pueda distinguir una respuesta fundamentada de una que no lo está. Utiliza un pequeño clasificador por solapamiento de palabras clave en lugar de volver a derivar el índice FAISS/embeddings del proyecto original — el objetivo de este proyecto es la capa de exposición MCP, no duplicar ese trabajo.

  • calculate(expression: str) -> str — herramienta aritmética, restringida a + - * / () y literales numéricos mediante un evaluador seguro basado en ast (no un simple eval() sobre entrada arbitraria). Se ha verificado que rechaza tanto entradas no aritméticas como intentos de inyección como __import__('os').system(...).

  • Construido con el SDK oficial de Python mcp (FastMCP), el mismo SDK que Anthropic publica para construir servidores MCP.

Related MCP server: rag-mcp

Cómo ejecutarlo

pip install -r requirements.txt
python server.py

Se ejecuta a través de stdio — el transporte local estándar que los clientes MCP como Claude Desktop usan para lanzar un servidor como subproceso y comunicarse con él. Para que Claude Desktop lo use, añade lo siguiente a su configuración de servidores MCP:

{
  "mcpServers": {
    "rag-tool-agent": {
      "command": "python",
      "args": ["/absolute/path/to/server.py"]
    }
  }
}

Ejecutar las pruebas

pytest tests/ -v

11 pruebas, todas pasando — llaman a las funciones de las herramientas directamente (no se necesita transporte MCP para la cobertura a nivel de unidad de la lógica de la herramienta en sí): respuestas de recuperación fundamentadas, el contrato de recuento de fundamentación, corrección aritmética (incluido un ejemplo de división que coincide con el ejemplo documentado del propio agente original), rechazo de entradas no aritméticas y de inyección, manejo de división por cero y autorregistro de herramientas con descripciones.

Verificado como un servidor MCP real, no solo como funciones

Más allá de las pruebas unitarias, esto se verificó de extremo a extremo utilizando el SDK de cliente mcp real (ClientSession + stdio_client): lanzando server.py como un subproceso real, completando el handshake initialize de MCP, llamando a list_tools() y llamando a ambas herramientas a través del protocolo real:

TOOLS: ['search_notes', 'calculate']
calculate -> 1320 / (3601 + 1320) = 0.2682381629750051
search_notes -> The FordA dataset is a univariate time-series
  classification dataset... [Grounded in 3 retrieved chunk(s) from
  forda_dataset_notes.md]
calculate(injection) -> Error: could not evaluate "__import__('os')" ...

Eso confirma que el servidor habla MCP real (handshake, descubrimiento de herramientas, invocación de herramientas) y no solo que las funciones de Python subyacentes funcionan de forma aislada.

Relación con los otros dos proyectos

  • rag-tool-agent-demo — el agente CLI original: LangChain, FAISS, Ollama, cadena de recuperación LCEL, herramienta de calculadora, enrutamiento impulsado por LLM.

  • rag-tool-api-docker — ese agente envuelto en una API HTTP Flask, contenerizado (Docker, compilación multi-etapa, usuario no root, health check), verificado con solicitudes HTTP reales contra un contenedor en ejecución.

  • Este proyecto — las mismas capacidades subyacentes (recuperación, calculadora) expuestas a través de MCP en lugar de HTTP, de modo que cualquier host MCP pueda llamarlas en lugar de solo un cliente REST.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables document search, read-only SQL querying, arithmetic calculation, and corpus introspection through MCP tools, allowing Claude to dynamically discover and chain these tools together to answer multi-step questions.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables querying local documents via retrieval-augmented generation, along with current UTC datetime and safe arithmetic evaluation through MCP tools over HTTP.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Provides a document store, web search, and safe calculator as MCP tools, enabling both offline and LLM-driven clients to discover and call them over the Model Context Protocol.
    6
    MIT