mcp-agentic-rag
README.md
# Agentic RAG MCP
A minimal FastAPI + FastMCP project that combines local RAG retrieval with Firecrawl web fallback.
## What this project does
- Loads a FastAPI application for document ingestion and vector queries.
- Uses ChromaDB for local vector storage and SentenceTransformers for embeddings.
- Provides an MCP tool server via `fastmcp` to expose RAG tools over stdio transport.
- Falls back to Firecrawl web search only when the local vector DB returns no documents.
## Repository structure
- `app/` - application source code
- `api/` - FastAPI routes and schemas
- `core/` - RAG logic, embeddings, fallback helper
- `services/` - ChromaDB service integration
- `mcp/` - FastMCP server entrypoint
- `scripts/` - utility scripts (seed data, etc.)
- `data/` - storage and persistence directories
- `.env.example` - environment variable template
- `pyproject.toml` - project dependencies and packaging config
## Setup for a new user
### 1. Clone the repository
```bash
git clone https://github.com/sampathpulukurthi/agentic-rag-mcp.git
cd agentic-rag-mcp
```
### 2. Create a Python virtual environment
```bash
python3 -m venv .venv
source .venv/bin/activate
```
### 3. Install dependencies
```bash
python -m pip install -e .
```
### 4. Create environment variables
```bash
cp .env.example .env
```
Edit `.env` and set:
```ini
FIRECRAWL_API_KEY=your_firecrawl_api_key_here
```
### 5. Run the FastAPI backend
```bash
uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload
```
Then verify:
```bash
curl http://127.0.0.1:8000/api/health
```
### 6. Run the MCP server
With the virtualenv active:
```bash
.venv/bin/python -m app.mcp.server
```
This starts the FastMCP server named `mcp-agentic-rag` using stdio transport.
## How to use
### Ingest documents
```bash
curl -X POST http://127.0.0.1:8000/api/ingest \
-H "Content-Type: application/json" \
-d '{"documents": [{"id":"doc1","text":"Machine learning models can classify text.","metadata":{"topic":"ml"}}]}'
```
### Query local vector store
```bash
curl -X POST http://127.0.0.1:8000/api/query \
-H "Content-Type: application/json" \
-d '{"query_text":"How do text classification models work?","k":3}'
```
### Query with fallback to Firecrawl
```bash
curl -X POST http://127.0.0.1:8000/api/query_with_fallback \
-H "Content-Type: application/json" \
-d '{"query_text":"What is machine learning?","k":5}'
```
If the vector store returns no documents, the endpoint will return `fallback: true` and `web_results` from Firecrawl.
## Notes
- There is currently no chat UI included in this repository.
- The app returns vector DB matches by default and only uses Firecrawl when local results are empty.
- If you want stronger fallback behavior, the `query_with_fallback` logic can be updated to use a similarity threshold.
TDQS
C2.7/5.0
Scored across 3 tools
Disambiguation4/5
The two query tools are distinguished by the fallback feature, and seed is clearly separate. Some confusion possible but descriptions help.
Naming Consistency5/5
All tools follow a consistent snake_case verb_noun pattern, making naming predictable and logical.
Tool Count3/5
With only 3 tools, the set feels minimal but is within acceptable bounds for a simple RAG server. However, missing management tools make it slightly thin.
Completeness2/5
The toolset lacks capabilities to update, delete, or list documents, which are essential for a complete RAG knowledge base management. This is a significant gap.
Maintenance
ActivityInactive
ResponsivenessNo issues