MCP RAG
MCP-RAG
✨100% von KI geschrieben
Ein dienstorientierter RAG-Service für KI-Clients, der derzeit hauptsächlich auf FastAPI HTTP-Diensten und Streamable HTTP MCP-Endpunkten basiert.
Der Code bietet derzeit eine einheitliche Backend-Shell:
FastAPI HTTP-Dienst
Streamable HTTP MCP
Gemeinsame Laufzeit, Konfigurations-Hot-Reload, Authentifizierung, Ratenbegrenzung, Quoten, Beobachtbarkeit
Abruf und Dokumentenverwaltung basierend auf einem Wissensdatenbank-Register
Aktuelle Funktionen
Dokumentenimport: Unterstützt das direkte Hinzufügen von Text sowie das Hochladen von
txt,md,pdf,docxAbruf: Kombination aus Vektorabruf + Schlüsselwortabruf
Q&A:
/search,/chat, MCPrag_askMehrere Wissensdatenbanken: Unterstützt einzelne Wissensdatenbanken und aggregierte Abrufe/Dialoge über mehrere
kb_idshinwegWissensdatenbank-Geltungsbereich:
publicundagent_privateMandantenkontext:
base_collection + user_id + agent_idLaufzeit-Governance: API-Key, Speicher-Ratenbegrenzung, Upload-/Index-Quoten, Request-Level Retrieval Cache
Provider-Governance: Provider-Budget, Circuit Breaking, Fallback
Beobachtbarkeit:
/health,/ready,/metricsFrontend: Integriertes Single-Page-Verwaltungspanel
/app
Architektur
Haupt-Link:
HTTP / MCP
-> app_factory.py
-> http_server.py / mcp_server.py
-> context.py
-> service_facade.py
-> services/
- runtime.py
- indexing_service.py
- retrieval_service.py
- chat_service.py
-> knowledge_bases.py
-> core/indexing/
-> retrieval/Schlüsseldateien:
src/mcp_rag/cli.py: CLI-Einstiegspunkt, bietetserveundinitsrc/mcp_rag/main.py: Start-Einstiegspunkt für den HTTP-Dienstsrc/mcp_rag/http_server.py: HTTP API, SPA-Einstiegspunkt, Einbindung von Streamable HTTP MCPsrc/mcp_rag/mcp_server.py: MCP-Tool-Definition undrag_asksrc/mcp_rag/app_factory.py: Einheitliche Assemblierung von App-Kontext, Laufzeit und Guardrailssrc/mcp_rag/knowledge_bases.py: Wissensdatenbank-Register und Standard-Wissensdatenbank-Auflösungsrc/mcp_rag/config.py: Konfigurationsmodell, JSON/SQLite-Persistenz, Hot-Reload
Systemanforderungen
Python
>= 3.13uv
Installation
CLI installieren:
uv tool install mcp-ragNach der Installation direkt ausführen:
mcp-rag serveEntwicklung im Repository:
uv syncFalls lokales Embedding benötigt wird:
uv sync --extra local-embeddingsHinweise zu den Grenzen:
Benutzer, die
uv tool install mcp-ragverwenden, benötigen kein Node.js und keinpnpmpnpmwird nur für die Wartung des Frontend-Builds verwendet, nicht als Laufzeitabhängigkeit des Dienstes
Start und Initialisierung
Dienst starten:
uv run mcp-rag serveDatenverzeichnis initialisieren:
uv run mcp-rag init --data-dir ./dataDer Standardport ist 8060, der Dienst lauscht standardmäßig auf 0.0.0.0:8060.
Gebräuchliche Einstiegspunkte:
Verwaltungspanel:
http://127.0.0.1:8060/appAPI-Dokumentation:
http://127.0.0.1:8060/docsMCP-Endpunkt:
http://127.0.0.1:8060/mcp
Kompatible Einstiegspunkte:
/leitet zu/appweiter/docleitet zu/docsweiter/documents-pageleitet zu/app/documentsweiter/config-pageleitet zu/app/configweiter
Verhalten beim ersten Start:
Wenn
./data/config.jsonnicht existiert, werden beim Lesen der Konfiguration Standardwerte verwendetBeim Start des Dienstes wird
ensure_config_file()aufgerufen, um die Standardkonfiguration auf die Festplatte zu schreiben./data/chromaund zugehörige SQLite-Dateien im Datenverzeichnis werden bei Bedarf erstellt
Frontend und statische Ressourcen
Das Release-Paket packt src/mcp_rag/static/ zusammen in das Wheel / sdist.
Das bedeutet:
Benutzer, die
uv tool install mcp-ragausführen, können direkt auf/appzugreifenEs ist kein separates Build des Frontends erforderlich, auch kein Node.js
Frontend-Maintainer müssen vor der Veröffentlichung die neuesten statischen Ressourcen generieren
Der Frontend-Quellcode befindet sich in frontend/, der Build wird nach src/mcp_rag/static/app ausgegeben.
Typischer Ablauf:
cd frontend
pnpm install
pnpm buildWissensdatenbank-Modell
Das aktuelle Projekt verlässt sich nicht mehr nur auf nackte collection zur Datenorganisation, sondern primär auf ein Wissensdatenbank-Register.
Wissensdatenbank-Eigenschaften:
Das persistente Register befindet sich in der SQLite-Datei, auf die
knowledge_base_db_pathverweistStandardmäßig wird sichergestellt, dass eine öffentliche Wissensdatenbank existiert
Wenn
user_id + agent_idübergeben werden, wird sichergestellt, dass eine entsprechendeagent_privateWissensdatenbank existiertNach dem Erstellen einer neuen Wissensdatenbank wird ein stabiler interner Sammlungsname zugewiesen, z. B.
kb_<id>
Die Schnittstellenebene behält den collection-Parameter bei, um Kompatibilität mit alten Aufrufmethoden zu gewährleisten. Das aktuelle tatsächliche Verhalten ist:
Es kann explizit eine
kb_idübergeben werdenEs kann weiterhin die alte
collectionübergeben werdenDer Dienst löst die Anfrage in die spezifische Wissensdatenbank und den tatsächlichen Sammlungsnamen auf
HTTP-Schnittstellen
Systemschnittstellen:
GET /healthGET /readyGET /metrics
Konfigurationsschnittstellen:
GET /configPOST /configPOST /config/bulkPOST /config/resetPOST /config/reload
Anbieterschnittstellen:
GET /providers/{provider}/models
Wissensdatenbank-Schnittstellen:
GET /collectionsGET /knowledge-basesPOST /knowledge-bases
Dokumentenschnittstellen:
POST /add-documentPOST /upload-filesGET /list-documentsDELETE /delete-documentGET /list-filesDELETE /delete-file
Abruf und Q&A:
GET /searchPOST /chat
MCP-Debug-Schnittstellen:
GET /debug/mcp/toolsPOST /debug/mcp/call
Einige Punkte zur Klarstellung:
/searchund/chatunterstützenkb_id/searchund/chatunterstützen auchkb_idsfür die aggregierte Suche über mehrere Wissensdatenbanken/upload-filesverwendetmultipart/form-data/delete-documentund/delete-fileübergeben Löschparameter über den Request-Body
Wenn Sicherheitsrichtlinien aktiviert sind, kann der API-Key wie folgt übergeben werden:
HTTP Header:
x-api-keyHeader:
Authorization: Bearer <token>api_keyin Abfrageparametern, JSON-Body oder Formular
MCP
Die aktuelle Hauptform ist Streamable HTTP MCP:
{
"mcpServers": {
"rag": {
"url": "http://127.0.0.1:8060/mcp"
}
}
}Implementierte MCP-Tools:
rag_ask
Hauptparameter von rag_ask:
querymode:rawodersummarycollectionkb_idscopelimitthresholdtenantuser_id/agent_id_user_id/_agent_idapi_keyrequest_idtrace_id
Beispiel:
{
"name": "rag_ask",
"arguments": {
"query": "FastAPI 是什么",
"kb_id": 1,
"mode": "summary",
"limit": 5
}
}Konfiguration
Standard-Konfigurationsdatei:
./data/config.jsonStandard-Wissensdatenbank-Datenbank:
./data/knowledge_bases.sqlite3Die aktuelle Konfiguration weist eine wichtige Änderung auf:
Allgemeine Laufzeitkonfigurationen werden in
config.jsongespeichertProvider-bezogene Konfigurationen werden in SQLite persistiert, anstatt sie weiterhin vollständig in
config.jsonzurückzuschreiben
Das bedeutet, dass diese Felder in service_provider_settings in SQLite gespeichert werden:
embedding_providerembedding_fallback_providerprovider_configsllm_providerllm_fallback_providerllm_modelllm_base_urlllm_api_key
Die übrigen Konfigurationen werden weiterhin in config.json gespeichert, zum Beispiel:
{
"http_port": 8060,
"chroma_persist_directory": "./data/chroma",
"knowledge_base_db_path": "./data/knowledge_bases.sqlite3",
"enable_llm_summary": false,
"security": {
"enabled": false,
"allow_anonymous": true,
"api_keys": [],
"tenant_api_keys": {}
},
"rate_limit": {
"requests_per_window": 120,
"window_seconds": 60,
"burst": 30
},
"quotas": {
"max_upload_files": 20,
"max_upload_bytes": 52428800,
"max_upload_file_bytes": 10485760,
"max_index_documents": 500,
"max_index_chunks": 2000,
"max_index_chars": 500000
},
"cache": {
"enabled": false,
"max_entries": 256,
"ttl_seconds": 300
},
"provider_budget": {
"enabled": true
}
}Aktuelle integrierte Provider-Funktionen:
Standardwert für Embedding-Provider ist
zhipuStandardwert für LLM-Provider ist
doubaoIntegrierte Provider-Konfigurationen umfassen
doubao,zhipu,aliyunqwen/dashscopewerden zualiyunnormalisiert/providers/{provider}/modelsunterstützt das Abrufen von Modelllisten von OpenAI-kompatiblen ModelldienstenLokales Embedding unterstützt
m3e-smallunde5-smallLLM unterstützt zusätzlich
ollama
Hot-Reload und Laufzeit-Aktualisierung
Verhalten bei Hot-Reload:
Nach Änderungen über
/config,/config/bulk,/config/reset,/config/reloadwird die Laufzeit sofort aktualisiertWenn eine Anfrage eingeht, wird über
reload_if_changed()geprüft, ob sich die Festplattenkonfiguration geändert hatNach Änderungen an Provider-Einstellungen oder Abrufkonfigurationen werden die zugehörigen Laufzeitabhängigkeiten neu erstellt und der Abruf-Cache geleert
Readiness und Metrics
/healthgibt eine Gesundheitszusammenfassung, einen Laufzeit-Snapshot undconfig_revisionzurück/readygibt503zurück, wenn das Bootstrap nicht abgeschlossen ist oder kritische Abhängigkeiten nicht bereit sind/metricsgibt Beobachtungsmetriken zurück, aggregiert nach Operation / Provider
Der aktuelle Readiness-Snapshot enthält:
document_processorembedding_modelvector_storehybrid_servicellm_modelretrieval_cacheprovider_budget
Tests
Alle Tests ausführen:
uv run python -m unittest discover -s testsKompilierungsprüfung:
uv run python -m compileall srcAktuelle Testabdeckung:
Konfigurations-Standardwerte, Festplatten-Reload und Provider-Konfigurationsmigration
Verhalten der HTTP-Shell und MCP-Shell
Request-Kontext / Mandanten-Auflösung
Request-Level Retrieval Cache
Provider-Budget / Fallback
Readiness / Health / Metrics
Paket-Metadaten und statische Ressourcen
Lizenz
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
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/kalicyh/mcp-rag'
If you have feedback or need assistance with the MCP directory API, please join our Discord server