MCP RAG
MCP-RAG
✨100% escrito por IA
Servicio RAG orientado a clientes de IA, centrado actualmente en servicios HTTP FastAPI y puntos finales MCP HTTP transmitibles (Streamable).
El código proporciona actualmente una capa de backend unificada:
Servicio HTTP FastAPI
MCP HTTP transmitible
Tiempo de ejecución compartido, actualización en caliente de configuración, autenticación, limitación de tasa, cuotas, observabilidad
Recuperación y gestión de documentos basada en un registro de bases de conocimiento
Capacidades actuales
Importación de documentos: admite la adición directa de texto, así como la carga de
txt,md,pdf,docxRecuperación: fusión de búsqueda vectorial + búsqueda por palabras clave
Preguntas y respuestas:
/search,/chat, MCPrag_askBases de conocimiento múltiples: admite bases de conocimiento únicas y recuperación/diálogo agregado de bases de conocimiento múltiples mediante
kb_idsÁmbito de la base de conocimiento:
publicyagent_privateContexto de inquilino:
base_collection + user_id + agent_idGobernanza en tiempo de ejecución: clave API, limitación de tasa de memoria, cuotas de carga/indexación, caché de recuperación a nivel de solicitud
Gobernanza de proveedores: presupuesto de proveedor, disyuntor, fallback
Observabilidad:
/health,/ready,/metricsFrontend: panel de gestión de página única integrado
/app
Arquitectura
Enlace principal:
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/Archivos clave:
src/mcp_rag/cli.py: Punto de entrada CLI, proporcionaserveeinitsrc/mcp_rag/main.py: Punto de entrada de inicio del servicio HTTPsrc/mcp_rag/http_server.py: API HTTP, entrada SPA, montaje de MCP HTTP transmitiblesrc/mcp_rag/mcp_server.py: Definición de herramientas MCP yrag_asksrc/mcp_rag/app_factory.py: Ensamblaje unificado del contexto de la aplicación, tiempo de ejecución, guardrailssrc/mcp_rag/knowledge_bases.py: Registro de bases de conocimiento y resolución de bases de conocimiento predeterminadassrc/mcp_rag/config.py: Modelo de configuración, persistencia JSON/SQLite, actualización en caliente
Requisitos del entorno
Python
>= 3.13uv
Instalación
Instalar CLI:
uv tool install mcp-ragEjecutar directamente después de la instalación:
mcp-rag serveDesarrollar en el repositorio:
uv syncSi se requiere embedding local:
uv sync --extra local-embeddingsNotas sobre los límites:
Los usuarios que instalan con
uv tool install mcp-ragno necesitan Node.js nipnpmpnpmsolo se utiliza para mantener la construcción del frontend, no es una dependencia de tiempo de ejecución del servicio
Inicio e inicialización
Iniciar servicio:
uv run mcp-rag serveInicializar directorio de datos:
uv run mcp-rag init --data-dir ./dataEl puerto predeterminado es 8060, el servicio escucha por defecto en 0.0.0.0:8060.
Entradas comunes:
Panel de gestión:
http://127.0.0.1:8060/appDocumentación de API:
http://127.0.0.1:8060/docsPunto final MCP:
http://127.0.0.1:8060/mcp
Entradas compatibles:
/redirigirá a/app/docredirigirá a/docs/documents-pageredirigirá a/app/documents/config-pageredirigirá a/app/config
Comportamiento en el primer inicio:
Si
./data/config.jsonno existe, se utilizarán los valores predeterminados al leer la configuraciónAl iniciar el servicio se llamará a
ensure_config_file(), escribiendo la configuración predeterminada en el disco./data/chromay los archivos SQLite relacionados en el directorio de datos se crearán según sea necesario
Frontend y recursos estáticos
El paquete de publicación incluirá src/mcp_rag/static/ en el wheel / sdist.
Esto significa:
Los usuarios que instalen
uv tool install mcp-ragpueden acceder directamente a/appNo es necesario construir el frontend por separado, ni se requiere Node.js
Los mantenedores del frontend deben generar los recursos estáticos más recientes antes de la publicación
El código fuente del frontend está en frontend/, la salida de construcción va a src/mcp_rag/static/app.
Flujo típico:
cd frontend
pnpm install
pnpm buildModelo de base de conocimiento
El proyecto actual ya no depende solo de collection para organizar los datos, sino principalmente de un registro de bases de conocimiento.
Características de la base de conocimiento:
Registro persistente en el archivo SQLite apuntado por
knowledge_base_db_pathPor defecto, se asegura la existencia de una base de conocimiento pública
Al pasar
user_id + agent_id, se asegura la existencia de la base de conocimientoagent_privatepredeterminada correspondienteTras crear una nueva base de conocimiento, se asignará un nombre de colección interno estable, por ejemplo
kb_<id>
La capa de interfaz aún conserva el parámetro collection debido a la necesidad de compatibilidad con métodos de llamada antiguos. El comportamiento actual es:
Se puede pasar explícitamente
kb_idTambién se puede seguir pasando la
collectionantiguaEl servicio resolverá la solicitud a la base de conocimiento específica y al nombre de colección real
Interfaz HTTP
Interfaces del sistema:
GET /healthGET /readyGET /metrics
Interfaces de configuración:
GET /configPOST /configPOST /config/bulkPOST /config/resetPOST /config/reload
Interfaces de proveedor:
GET /providers/{provider}/models
Interfaces de base de conocimiento:
GET /collectionsGET /knowledge-basesPOST /knowledge-bases
Interfaces de documentos:
POST /add-documentPOST /upload-filesGET /list-documentsDELETE /delete-documentGET /list-filesDELETE /delete-file
Recuperación y preguntas y respuestas:
GET /searchPOST /chat
Interfaces de depuración MCP:
GET /debug/mcp/toolsPOST /debug/mcp/call
Algunos puntos a aclarar:
/searchy/chatadmitenkb_id/searchy/chattambién admitenkb_idspara la agregación de múltiples bases de conocimiento/upload-filesutilizamultipart/form-data/delete-documenty/delete-filepasan los parámetros de eliminación a través del cuerpo de la solicitud
Si se han habilitado políticas de seguridad, la clave API se puede pasar de las siguientes maneras:
Cabecera HTTP:
x-api-keyCabecera:
Authorization: Bearer <token>Parámetro de consulta, cuerpo JSON o
api_keyen el formulario
MCP
La forma principal actual es MCP HTTP transmitible:
{
"mcpServers": {
"rag": {
"url": "http://127.0.0.1:8060/mcp"
}
}
}Herramientas MCP implementadas:
rag_ask
Parámetros principales de rag_ask:
querymode:rawosummarycollectionkb_idscopelimitthresholdtenantuser_id/agent_id_user_id/_agent_idapi_keyrequest_idtrace_id
Ejemplo:
{
"name": "rag_ask",
"arguments": {
"query": "FastAPI 是什么",
"kb_id": 1,
"mode": "summary",
"limit": 5
}
}Configuración
Archivo de configuración predeterminado:
./data/config.jsonBase de datos de conocimiento predeterminada:
./data/knowledge_bases.sqlite3La configuración actual tiene un cambio importante:
La configuración de ejecución normal se guarda en
config.jsonLa configuración relacionada con el proveedor se persistirá en SQLite, en lugar de seguir escribiéndose completamente en
config.json
Es decir, estos campos se guardarán en service_provider_settings dentro de SQLite:
embedding_providerembedding_fallback_providerprovider_configsllm_providerllm_fallback_providerllm_modelllm_base_urlllm_api_key
El resto de la configuración se sigue guardando en config.json, por ejemplo:
{
"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
}
}Capacidades relacionadas con el proveedor integradas actualmente:
El valor predeterminado del proveedor de embedding es
zhipuEl valor predeterminado del proveedor LLM es
doubaoLa configuración del proveedor integrado incluye
doubao,zhipu,aliyunqwen/dashscopese normalizarán aaliyun/providers/{provider}/modelsadmite la obtención de listas de modelos desde servicios de modelos compatibles con OpenAIEl embedding local admite
m3e-smallye5-smallLLM admite adicionalmente
ollama
Actualización en caliente y refresco en tiempo de ejecución
Comportamiento de actualización en caliente:
Tras modificar mediante
/config,/config/bulk,/config/reset,/config/reload, el tiempo de ejecución se actualizará inmediatamenteAl entrar una solicitud, se detectará si la configuración del disco ha cambiado mediante
reload_if_changed()Después de cambiar la configuración del proveedor o de recuperación, se reconstruirán las dependencias de tiempo de ejecución relacionadas y se limpiará la caché de recuperación
Readiness y métricas
/healthdevuelve un resumen de salud, instantánea de tiempo de ejecución yconfig_revision/readydevuelve503si el bootstrap no se ha completado o si las dependencias críticas no están listas/metricsdevuelve métricas de observación agregadas por operación / proveedor
La instantánea de readiness actual incluirá:
document_processorembedding_modelvector_storehybrid_servicellm_modelretrieval_cacheprovider_budget
Pruebas
Ejecutar pruebas completas:
uv run python -m unittest discover -s testsComprobación de compilación:
uv run python -m compileall srcCobertura de pruebas actual:
Valores predeterminados de configuración, recarga de disco y migración de configuración de proveedor
Comportamiento de la capa HTTP y la capa MCP
Resolución de contexto de solicitud / inquilino
Caché de recuperación a nivel de solicitud
Presupuesto de proveedor / fallback
Readiness / health / metrics
Metadatos de empaquetado y recursos estáticos
Licencia
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