policy-rag-mcp-server
Policy Document Q&A-Assistent — RAG + MCP-Server (LangChain, Azure AI Foundry, PostgreSQL/pgvector, Docker, Langfuse)
Ein Frage-Antwort-Assistent für echte australische öffentliche Politikdokumente (Queensland Government Financial/ICT-Policy und ATO-Bundessteuerrichtlinien), aufgebaut als Retrieval-Augmented-Generation-Pipeline (RAG) und bereitgestellt als MCP-Server (Model Context Protocol) — sodass er als aufrufbares Tool in Claude Desktop oder jeden anderen MCP-kompatiblen Client eingebunden werden kann, nicht nur als einmaliges Skript. Die gesamte Pipeline, von der PDF-Erfassung bis zum Tool selbst, läuft containerisiert mit Docker und ist durchgängig mit Langfuse-Tracing instrumentiert.
ZIEL
Entwickelt, um eine bestimmte Reihe von AI-Engineer-Kompetenzlücken zu schließen, die in aktuellen Bewerbungen identifiziert wurden (Queensland Treasury, Warren and Mahoney, McCosker, CI&T, Datacom) — Agent-Tooling über MCP, LangChain-basierte Orchestrierung, eine echte Vektordatenbank (kein eingebetteter/Spielzeug-Store), Containerisierung, eine benannte cloud-native KI-Plattform (speziell Azure AI Foundry, nicht nur „ein OpenAI-API-Schlüssel") und LLMOps-Observability. Statt Zertifikate zu sammeln, war das Ziel ein einziges, reales, funktionierendes End-to-End-System, das alle sechs praktisch demonstriert — derselbe Ansatz wie beim verwandten Projekt lead-scoring-databricks-pipeline.
Die Anwendung selbst spiegelt einen realistischen Enterprise-Anwendungsfall wider: „Mitarbeitern erlauben, natürliche Sprachfragen gegen unsere eigenen Richtliniendokumente zu stellen, wobei jede Antwort auf eine echte Quellseite zurückführbar ist" — thematisch relevant speziell für regierungsnahe Rollen.
Related MCP server: AusLaw MCP
VERWENDETER DATENSATZ
8 echte PDF-Dokumente (insgesamt 162 Seiten), direkt von offiziellen .gov.au-Domains bezogen — keine Drittanbieter-Spiegel:
FAH_Volume_1_Introduction_2025.pdf— Queensland Financial Accountability Handbook, Vol. 1Overview-of-Queensland-Financial-Accountability-Framework-as-at-Jan-2020.pdfict-as-a-service_decision_framework-overview_v1_0_0.pdfpaf-policy-overview.pdf/paf-supporting-guidelines.pdf— Queensland Project Assurance Framework (inkl. Public-Private-Partnerships)n75057 [DE-81739] - 2026 Tax Time toolkit for small business_DIGITAL.pdf— ATOn75127 [DE-73758] - Residency for tax purposes - factsheet_DIGITAL.pdf— ATOtr2023-001.pdf— ATO Taxation Ruling 2023/1
Das Korpus ist bewusst in zwei Cluster aufgeteilt — Queensland-Staatspolitik und australische Bundessteuerrichtlinien — sodass das Retrieval wirklich zwischen staatlichen und bundesstaatlichen Quellen sowie zwischen einer formellen Richtlinie und einer allgemeinverständlichen Zusammenfassung eines verwandten Themas unterscheiden muss, anstatt trivial auf ein einzelnes offensichtliches Schlüsselwort zu matchen. Ein anfänglicher Satz von 11 Dokumenten (344 Seiten) wurde auf diese 8 (162 Seiten) reduziert, um das Korpus groß genug für ein echtes Retrieval-Problem zu halten, aber dennoch schnell iterieren zu können.
ARCHITEKTUR & PIPELINE
flowchart LR
subgraph Ingestion["Ingestion (run once, re-run on doc changes)"]
A[Policy PDFs] --> B[Chunking\nLangChain RecursiveCharacterTextSplitter]
B --> C[Embed\nAzure text-embedding-3-small]
C --> D[(PostgreSQL + pgvector\nvia Docker)]
end
subgraph Query["Query time"]
E[MCP Client\ne.g. Claude Desktop] --> F[MCP Server\nPython, containerized]
F --> G[LangChain RAG chain]
G --> D
G --> H[Azure AI Foundry\ngpt-5-mini]
H --> G --> F --> E
end
G -. traces .-> I[Langfuse\nobservability]Erfassung: Jedes PDF wird mit LangChains PyPDFLoader Seite für Seite geladen (Quelldateiname + Seitenzahl als Metadaten für spätere Zitate beibehalten), dann mit RecursiveCharacterTextSplitter bei 1000 Zeichen / 150 Überlappung aufgeteilt — gewählt gegenüber einem kleineren 500/50-Split, nachdem beide direkt am realen Korpus verglichen wurden (950 vs. 521 Chunks); die größere Chunk-Größe passt besser zu diesen prozeduralen, strukturell dichten Richtliniendokumenten und gibt dem Modell mehr umgebenden Kontext pro abgerufenem Stück. Jeder der 521 resultierenden Chunks wird über Azure text-embedding-3-small eingebettet und in eine PostgreSQL-Datenbank geschrieben, die in Docker läuft, wobei die pgvector-Erweiterung Vektorähnlichkeitssuche direkt in der relationalen Datenbank ermöglicht, anstatt in einem separaten dedizierten Vektor-Store — ein produktionsnäheres Muster, da viele reale Organisationen Vektorsuche zu einer bereits betriebenen Postgres-Instanz hinzufügen.
Abfragezeit: Eine Frage wird mit demselben Modell eingebettet, PostgreSQL gibt die Top-4 ähnlichsten Chunks per Vektorähnlichkeit zurück, und diese Chunks werden in einen Prompt „gestopft", der gpt-5-mini anweist, nur aus diesem abgerufenen Kontext zu antworten — oder „Ich weiß es nicht" zu sagen, anstatt auf das eigene Allgemeinwissen zurückzugreifen. Die Antwort wird zusammen mit dem genauen Quelldokument und der Seitenzahl für jeden verwendeten Chunk zurückgegeben, sodass jede Antwort unabhängig verifizierbar ist.
Schnittstelle: Die RAG-Kette ist als MCP-Server mit dem offiziellen Python-MCP-SDK umschlossen und stellt zwei Tools bereit — query_policy_docs (die Kern-Q&A-Fähigkeit) und list_indexed_documents (ermöglicht einem Client, vor dem Fragen anzuzeigen, was tatsächlich abgedeckt ist). Die RAG-Logik und die MCP-Protokollebene sind bewusst in separaten Dateien gehalten, sodass die zugrunde liegende Fähigkeit später hinter einer anderen Schnittstelle wiederverwendet werden könnte, ohne sie anzufassen. Der Server ist mit Docker containerisiert; da der stdio-Transport von MCP erfordert, dass der Server direkt an stdin/stdout seines Clients angeschlossen ist, läuft er als kurzlebiges Container, das bei Bedarf pro Verbindung erzeugt wird (docker compose run --rm -i), im Gegensatz zum ständig laufenden PostgreSQL-Container.
Observability: Jede Abfrage wird End-to-End mit Langfuse getracet — Retrieval und Generierung verschachtelt unter einem verbundenen Trace pro Frage, mit Anzeige des genauen Prompts, der abgerufenen Chunks, Latenz und Token-Kosten.
VERWENDETES MODELL
Beide Modelle werden über Azure AI Foundry bereitgestellt (bewusst gewählt gegenüber dem klassischen „Azure OpenAI"-Ressourcentyp, da Foundry in mehreren Ziel-Stellenausschreibungen explizit genannt wird):
gpt-5-mini— Generierung,temperature=0für treue, wörtliche Antworten, die im abgerufenen Text verankert sind, statt kreativer Antworten.text-embedding-3-small— Einbettungen, sowohl für das Dokumentkorpus als auch für eingehende Fragen.
Diese Foundry-Ressource verwendet die neuere einheitliche v1-API-Oberfläche von Azure (.../openai/v1), daher verwendet die Integration LangChains einfache ChatOpenAI- / OpenAIEmbeddings-Klassen mit base_url + api_key + model, anstelle der Azure-spezifischen AzureChatOpenAI- / AzureOpenAIEmbeddings-Klassen, die auf das ältere Schema mit datierten API-Versionen abzielen und bei dieser Ressource 404 liefern.
ERGEBNISSE & ERKENNTNISSE
Manuell mit 5 echten Testfragen bewertet, die durch das Live-System liefen:
„Wofür soll das Financial Accountability Handbook Behörden unterstützen?" → korrekt, nahezu wörtlich verankerte Antwort mit genauen Zitaten.
„Was hilft das ICT-as-a-Service-Entscheidungsframework Behörden zu entscheiden?" → korrekt, erfasste die echte Nuance (Bereitstellungs-/Servicemodelle, Risikobewertung).
„Was ist die Hauptstadt von Frankreich?" (bewusst außerhalb des Rahmens) → korrekt mit „Ich weiß es nicht" beantwortet, anstatt das eigene Allgemeinwissen des Modells zu verwenden — der entscheidende Anti-Halluzinationstest.
„Was ist eine Public-Private-Partnership gemäß der PPP-Policy von Queensland?" → mit „Ich weiß es nicht" beantwortet. Unabhängig verifiziert durch direkte Inspektion des extrahierten Texts des Quell-PDFs: Das Dokument definiert den Begriff tatsächlich nirgendwo in einfacher Sprache in seinen 23 Seiten — eine echte, vertretbare Korpuslücke, die korrekt identifiziert wurde, statt eines Retrieval-Fehlers oder einer erfundenen Antwort.
„Welche Aufbewahrungspflichten erwähnt das Tax Time Toolkit für kleine Unternehmen?" → korrekt, spezifisches Detail, genaues Zitat.
5/5 sinnvolles Verhalten — 3 korrekte verankerte Antworten und 2 korrekte Verweigerungen (eine wirklich außerhalb des Rahmens, eine echte Korpuslücke korrekt erkannt statt halluziniert). Die Unterscheidung zwischen „Retrieval hat den richtigen Chunk verfehlt" und „das Korpus enthält die Antwort wirklich nicht" ist eine echte RAG-Bewertungsfähigkeit, und diese Runde zeigte, dass beide Fehlermodi korrekt behandelt wurden — nicht nur ein oberflächliches Bestanden/Nicht bestanden.
Verifiziert gegen einen echten MCP-Client (Claude Desktop) End-to-End, sowohl lokal über .venv als auch vollständig containerisiert über Docker, wobei jede Abfrage in Langfuse getracet wurde.
EINRICHTUNG & VERWENDUNG
Anforderungen: Docker Desktop, Python 3.13, eine Azure-AI-Foundry-Ressource mit bereitgestelltem gpt-5-mini und text-embedding-3-small sowie (optional) ein kostenloses Langfuse-Cloud-Konto für Tracing.
Kopieren Sie
.env.examplein.envund füllen Sie Ihre eigenen Azure-, Postgres- und (optional) Langfuse-Anmeldedaten aus.Starten Sie den Vektor-Store:
docker compose up -d postgresErfassen Sie die Dokumente (einmalig oder bei jeder Änderung des Dokumentsatzes):
pip install -r requirements-ingest.txt python embed_and_store.pyFühren Sie den Assistenten direkt über die CLI aus:
python rag_chain.pyOder verbinden Sie ihn als MCP-Tool: Bauen Sie das Server-Image (
docker compose build mcp-server) und fügen Sie es dann zur Konfiguration Ihres MCP-Clients hinzu (z. B.claude_desktop_config.jsonvon Claude Desktop):"policy-rag": { "command": "docker", "args": ["compose", "-f", "<path-to-repo>/docker-compose.yml", "run", "--rm", "-i", "mcp-server"] }
SCHLUSSFOLGERUNGEN
Die Pipeline funktioniert vollständig End-to-End: Echte Regierungs-PDFs werden gechunkt, eingebettet und in einer echten Vektordatenbank gespeichert; Retrieval und Generierung sind verankert und verweigern korrekt Antworten außerhalb des Korpus; die gesamte Fähigkeit ist als standardkonformes MCP-Tool bereitgestellt, live gegen einen echten MCP-Client verifiziert; der Server ist containerisiert und portabel; und jede Abfrage wird mit Kosten, Latenz und vollem Kontext für Observability getracet. Jede als Ziel-Kompetenzlücke benannte Ebene — MCP, LangChain, eine echte Vektordatenbank, Docker, Azure AI Foundry und LLMOps-Tracing — wird mit funktionierendem, getestetem Code demonstriert, nicht nur mit einer Tutorial-Implementierung.
AUTORENINFORMATIONEN
Varun Vikas Jaiswal 2026
SCHLÜSSELWÖRTER
RAG, Retrieval-Augmented Generation, LangChain, MCP, Model Context Protocol, Azure AI Foundry, Azure OpenAI, pgvector, PostgreSQL, Vektordatenbank, Vektorähnlichkeitssuche, Docker, Docker Compose, Langfuse, LLMOps, Observability, Python, AI Engineer
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI agents to search AustLII (Australian Legal Information Institute) for real Australian legislation and case law. Provides citations with direct links for legal research and verification.
- AlicenseAqualityAmaintenanceEnables users to search and retrieve Australian legislation and case law with full-text content extraction. Provides structured results with citation metadata and OCR support for archival PDFs.122333Apache 2.0
- FlicenseNot gradedqualityNot gradedmaintenanceEnables local indexing and semantic search of PDF documents (like AGLC4 style guide) with OCR support, allowing LLM tools to query PDF content and retrieve relevant text snippets with context.
- FlicenseNot gradedqualityCmaintenanceConnects policy documents to Claude.ai via vector search, allowing natural language querying and retrieval of indexed documents.
Related MCP Connectors
Australian tax knowledge base for agents: 34,500+ ATO documents, cited answers to any tax question.
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Resolve, search and verify legal citations against the official sources, with provenance.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VarunJaiswal05/policy-rag-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server