Skip to main content
Glama
SantoshpHiremath

rag-tool-agent

RAG Tool Agent — MCP Server

Stellt die beiden Werkzeuge hinter dem Projekt rag-tool-agent-demo (retrieval-gestütztes Q&A über Notizen des FordA-Datensatzes und einen sicheren arithmetischen Taschenrechner) als einen richtigen Server für das Model Context Protocol bereit, sodass jeder MCP-kompatible Client — Claude Desktop, eine MCP-fähige Agent-Umgebung oder ein benutzerdefinierter Host — sie direkt aufrufen kann, statt nur über die eigene CLI des Projekts oder über den Flask-HTTP-Wrapper in rag-tool-api-docker.

Entwickelt, um eine konkrete, benannte Lücke zu schließen: Mehrere aktuelle Stellenausschreibungen im Bereich KI-Engineering/Agentic-Anwendungen verlangen ausdrücklich praktische Erfahrung mit MCP (und verwandten Agent-to-Agent-/Agent-to-UI-Protokollen). Dies ist eine kleine, echte, getestete Implementierung, keine Behauptung von Protokollerfahrung ohne Belege dahinter.

Warum es so aufgebaut ist

Der ursprüngliche Agent übernimmt sein Routing intern — ein handgeschriebenes if/else, das für jede eingehende Frage entscheidet: „calculator“ vs. „retrieval“ vs. „direct answer“. MCP kehrt das um: Der Client (der LLM-/Agent-Host) übernimmt das Routing, indem er Name, Beschreibung und JSON-Schema-Parameter jedes Tools liest und entscheidet, welches aufgerufen werden soll. Dieser Server implementiert also nicht die ursprüngliche Routing-Logik neu — er stellt die beiden zugrunde liegenden Fähigkeiten als eigenständige, unabhängig aufrufbare MCP-Tools bereit und überlässt das Routing jedem MCP-Client selbst. Das ist der eigentliche Punkt des Protokolls: Tools werden host-agnostisch, statt fest in die Dispatch-Logik eines einzelnen Agenten verdrahtet zu sein.

  • search_notes(query: str) -> str — eine Suche im Retrieval-Stil über ein kleines eingebettetes Notizkorpus zum FordA-Datensatz, zurückgegeben mit demselben Provenienz-Suffix [Grounded in N retrieved chunk(s) from ...], das auch der ursprüngliche Agent verwendet, damit ein Client eine fundierte Antwort von einer nicht fundierten unterscheiden kann. Verwendet einen einfachen Keyword-Overlap-Ranker, anstatt den FAISS-/Embeddings-Index des ursprünglichen Projekts neu abzuleiten — der Sinn dieses Projekts ist die MCP-Expositionsebene, nicht die Duplizierung dieser Arbeit.

  • calculate(expression: str) -> str — Arithmetik-Tool, beschränkt auf + - * / () und numerische Literale; es wird ein sicherer Evaluator auf Basis von ast verwendet (kein bloßes eval() für beliebige Eingaben). Es wurde verifiziert, dass sowohl nicht-arithmetische Eingaben als auch Injektionsversuche wie __import__('os').system(...) abgelehnt werden.

  • Erstellt mit dem offiziellen mcp-Python-SDK (FastMCP), demselben SDK, das Anthropic für den Bau von MCP-Servern veröffentlicht.

Related MCP server: rag-mcp

Ausführen

pip install -r requirements.txt
python server.py

Läuft über stdio — den standardmäßigen lokalen Transport, den MCP-Clients wie Claude Desktop verwenden, um einen Server als Subprozess zu starten und mit ihm zu kommunizieren. Um Claude Desktop darauf auszurichten, fügen Sie in der MCP-Server-Konfiguration Folgendes hinzu:

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

Tests ausführen

pytest tests/ -v

11 Tests, alle erfolgreich — rufen die Tool-Funktionen direkt auf (kein MCP-Transport für die Abdeckung der Tool-Logik selbst auf Unit-Ebene erforderlich): fundierte Retrieval-Antworten, der Grounding-Count-Vertrag, arithmetische Korrektheit (einschließlich eines Divisionsbeispiels, das dem eigenen dokumentierten Beispiel des ursprünglichen Agenten entspricht), Ablehnung von nicht-arithmetischen Eingaben und Injektionsversuchen, Behandlung der Division durch Null sowie Selbstregistrierung der Tools mit Beschreibungen.

Als echter MCP-Server verifiziert, nicht nur als Funktionen

Über die Unit-Tests hinaus wurde dies Ende-zu-Ende mit dem echten mcp-Client-SDK (ClientSession + stdio_client) verifiziert — Starten von server.py als tatsächlichem Subprozess, Abschließen des MCP-initialize-Handshakes, Aufrufen von list_tools() und Aufrufen beider Tools über das echte Protokoll:

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')" ...

Das bestätigt, dass der Server echtes MCP spricht (Handshake, Tool-Erkennung, Tool-Aufruf) und nicht nur, dass die zugrunde liegenden Python-Funktionen in Isolation funktionieren.

Beziehung zu den anderen beiden Projekten

  • rag-tool-agent-demo — der ursprüngliche CLI-Agent: LangChain, FAISS, Ollama, LCEL-Retrieval-Kette, Taschenrechner-Tool, LLM-gesteuertes Routing.

  • rag-tool-api-docker — dieser Agent als Flask-HTTP-API gekapselt, containerisiert (Docker, Multi-Stage-Build, Nicht-Root-Benutzer, Health Check), mit echten HTTP-Anfragen gegen einen laufenden Container verifiziert.

  • Dieses Projekt — dieselben zugrunde liegenden Fähigkeiten (Retrieval, Taschenrechner) werden über MCP statt über HTTP bereitgestellt, sodass sie von jedem MCP-Host aufgerufen werden können und nicht nur von einem REST-Client.

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