Agentic RAG MCP Server
Sistema RAG Agéntico basado en MCP
Un sistema local y modular de Generación Aumentada por Recuperación (RAG) que utiliza el Protocolo de Contexto de Modelo (MCP) para conectar un LLM a herramientas externas como bases de datos vectoriales y cargadores de documentos.
Descripción general
Este proyecto implementa un sistema RAG agéntico que:
Recupera documentos relevantes de una base de datos vectorial local (ChromaDB)
Aumenta los prompts con el contexto recuperado
Genera respuestas informadas utilizando un LLM local (Ollama)
Expone la funcionalidad a través de una API REST con FastAPI
Related MCP server: MCP RAG with ChromaDB
Stack tecnológico
Componente | Herramienta/Biblioteca | Detalles |
Modelo de lenguaje | Ollama | Inferencia de LLM local (mistral, llama3, etc.) |
Framework de agente | mcp + FastAPI | Servidor API con registro de herramientas |
Pipeline RAG | LangChain + Personalizado | Recuperación de contexto e ingeniería de prompts |
Almacén vectorial | ChromaDB | Base de datos vectorial local y persistente |
Embeddings | SentenceTransformers | Modelo all-MiniLM-L6-v2 |
Gestión de archivos | pypdf, python-docx | Carga de PDF y documentos |
Frontend (Opcional) | Streamlit | Interfaz web interactiva |
Entorno | Python 3.10+ | virtualenv o Conda |
Estructura del proyecto
agentic-rag-mcp/
├── main.py # FastAPI MCP server
├── rag_agent.py # Agent query logic and RAG orchestration
├── mcp_config.yaml # Configuration file
├── requirements.txt # Python dependencies
├── vector_store/ # Persisted ChromaDB vector store
├── data/
│ └── sample_docs/ # Sample documents for ingestion
└── tools/
└── chromadb_tool.py # Vector search tool implementationInstalación y configuración
1. Clonar y crear entorno virtual
cd agentic-rag-mcp
python -m venv .venv
# On Windows
.venv\Scripts\activate
# On macOS/Linux
source .venv/bin/activate2. Instalar dependencias
pip install -U pip
pip install -r requirements.txt3. Configurar Ollama
Descargue e instale Ollama desde el sitio web oficial.
Inicie el servidor de Ollama:
# On the system terminal (not in virtual environment)
ollama serveEn otra terminal, descargue un modelo:
ollama pull mistral # Recommended for RAG
# or
ollama pull llama3Verifique que el servidor esté ejecutándose:
curl http://localhost:11434/api/tagsEjecución del sistema
Opción 1: Interfaz de chat (interactiva)
Ejecute el bucle de chat interactivo:
python rag_agent.pyEsto hará lo siguiente:
Cargar documentos de muestra en el almacén vectorial
Iniciar un chat interactivo donde puede hacer preguntas
El agente recuperará documentos relevantes y generará respuestas
Ejemplo de interacción:
You: What is MCP?
Agent: The Model Context Protocol (MCP) enables modular tool use for AI agents by providing a standardized way to connect language models to external services...
[Used 2 retrieved documents as context]Opción 2: Servidor API
Inicie el servidor MCP de FastAPI:
python main.pyEl servidor estará disponible en: http://localhost:8000
Endpoints de la API
Comprobación de estado (Health Check)
GET /healthAgente de consulta
POST /query
Content-Type: application/json
{
"query": "What is artificial intelligence?",
"use_context": true,
"n_results": 3
}Buscar documentos
POST /search
Content-Type: application/json
{
"query": "MCP protocol",
"n_results": 5
}Añadir documentos
POST /documents
Content-Type: application/json
{
"documents": [
"Document text 1",
"Document text 2"
],
"ids": ["doc1", "doc2"],
"metadata": [
{"source": "file1.txt"},
{"source": "file2.txt"}
]
}Obtener estadísticas
GET /statsEjemplos de uso en Python
from rag_agent import RAGAgent
# Initialize agent
agent = RAGAgent(
ollama_url="http://localhost:11434",
model="mistral"
)
# Get a response
result = agent.get_response("What is RAG?")
print(result["response"])
print(f"Retrieved {len(result['retrieved_documents'])} documents")Configuración
Edite mcp_config.yaml para personalizar:
Configuración del LLM: Modelo, temperatura, tokens máximos
Almacén vectorial: Modelo de embedding, nombre de la colección
RAG: Número de documentos recuperados, métrica de similitud
Servidor: Host, puerto, nivel de registro
Seguridad: Límites de tasa de API, autenticación
Añadir documentos personalizados
Programáticamente
from tools.chromadb_tool import ChromaTool
tool = ChromaTool()
documents = [
"Your document text 1",
"Your document text 2"
]
tool.add_documents(documents, ids=["id1", "id2"])Vía API
curl -X POST http://localhost:8000/documents \
-H "Content-Type: application/json" \
-d '{
"documents": ["Document 1", "Document 2"],
"ids": ["doc1", "doc2"]
}'Frontend opcional con Streamlit
Cree streamlit_app.py:
import streamlit as st
import requests
st.set_page_config(page_title="RAG Agent", layout="wide")
st.title("MCP-Powered Agentic RAG")
query = st.text_input("Ask a question:")
if query:
response = requests.post(
"http://localhost:8000/query",
json={"query": query}
)
result = response.json()
st.subheader("Response")
st.write(result["response"])
st.subheader("Retrieved Context")
for i, doc in enumerate(result["retrieved_documents"], 1):
st.write(f"**Doc {i}**: {doc[:200]}...")Ejecute Streamlit:
streamlit run streamlit_app.pyExtensiones y trabajo futuro
✅ RAG básico con ChromaDB
⬜ Integración de herramienta de búsqueda web
⬜ Interfaz de usuario para ingesta de documentos PDF
⬜ Memoria del agente (historial de conversación)
⬜ Soporte multimodal (imágenes, tablas)
⬜ Ajuste fino (fine-tuning) con datos específicos del dominio
⬜ Salida estructurada (esquemas JSON)
⬜ Respuestas en streaming en tiempo real
Solución de problemas
"Connection refused" para Ollama
Asegúrese de que el servidor de Ollama esté ejecutándose:
ollama serveCompruebe que sea accesible:
curl http://localhost:11434/api/tags
Errores de embedding en ChromaDB
Asegúrese de que sentence-transformers esté instalado:
pip install sentence-transformersLa primera ejecución descarga el modelo de embeddings (~30MB)
El almacén vectorial no persiste
Compruebe que el directorio
./vector_store/existe y tiene permisos de escrituraVerifique que
persist_diren la configuración coincida con la ruta real
Licencia
Licencia MIT - Consulte el archivo LICENSE para obtener más detalles
Contribución
¡Las contribuciones son bienvenidas! Por favor:
Haga un fork del repositorio
Cree una rama de funcionalidad
Confirme los cambios
Envíe un pull request
Referencias
This server cannot be deployed
Maintenance
Related MCP Connectors
Ingest, manage, and retrieve documents for RAG-powered AI applications
Universal persistent memory and knowledge retrieval layer for AI agents and LLMs.
LLM Orchestration Agent (Opentelemetry Instrumentation Fastapi)
Memory system for AI agents with semantic search. Store and recall memories with ease.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA FastAPI-based application that enables document embedding and semantic retrieval using Qdrant vector database, allowing users to convert documents into embeddings and retrieve relevant content through natural language queries.-
- AlicenseNot gradedqualityDmaintenanceProvides retrieval-augmented generation (RAG) capabilities by ingesting various document formats into a persistent ChromaDB vector store. It enables semantic search and retrieval using either OpenAI or Ollama embeddings for processing local files, directories, and URLs.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides token-efficient semantic search and document retrieval by indexing PDFs, text, and markdown files into local notebooks using ChromaDB. It enables AI agents to query relevant passages from large documents through local embedding models like Hugging Face or Ollama.1MIT
- FlicenseNot gradedqualityDmaintenanceA fully offline local RAG server that utilizes ChromaDB and Ollama to index and query PDF, text, and Markdown documents. It allows users to manage local knowledge bases and perform semantic searches with AI-generated responses.-