MCP Dummy DB Integration
by muniasamyk
README.md
# MCP Agent POC
This project demonstrates a secure, production-ready implementation of the **Model Context Protocol (MCP)** as a connector layer between AI agents and PostgreSQL databases. The solution enables natural language queries without exposing database credentials to the LLM.
**Key Achievement**: LLM cannot access database directly - only through predefined MCP tools.
---
## šļø Architecture Overview
```
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā USER QUERY ā
ā "Fetch employees in AI department" ā
āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā PLANNER AGENT (LLM) ā
ā ā Natural Language Understanding ā
ā ā NO database credentials ā
ā Output: {"tool": "get_employees_by_department", ā
ā "parameters": {"department": "AI"}} ā
āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā EXECUTOR AGENT ā
ā ā Validates tool request ā
ā ā Maps to allowed operations only ā
ā ā Cannot execute arbitrary SQL ā
āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā MCP TOOLS LAYER (Sandbox) ā
ā ā get_employees_by_department("AI") ā
ā ā get_projects_by_status("Completed") ā
ā ā get_issues_by_priority("High") ā
ā ā Cannot run arbitrary SQL ā
āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā DATABASE CONNECTION (Secure) ā
ā ā Credentials in environment variables ā
ā ā Only parameterized queries (SQL injection safe) ā
āāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā RESULT TO USER ā
ā [Secure data retrieval via MCP] ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
```
## š Security Features
| Feature | With MCP
|--------- |---------
| **DB Credentials** | Secure in .env ā
| **SQL Access** | Predefined tools only ā
| **Attack Surface** | Limited operations only ā
| **Audit Trail** | Full logging ā
| **Connection Pool** | Yes ā
## Project Structure
- `app/agents/`: The brain (Planner, Executor, Orchestrator)
- `app/mcp/`: The tool layer (Connector to DB)
- `app/database/`: Low-level DB connection pool
- `app/api/`: FastAPI routes
## Getting Started
### 1. Setup Env
Copy the example config:
```sh
cp .env.example .env
```
### 2. Run with Docker
The easiest way to stand it up (Postgres + API):
```sh
docker-compose up --build
```
The API listens on **http://localhost:8000**.
### 3. Test It
You can use the swagger UI at `/docs` or curl:
```sh
curl -X POST "http://localhost:8000/api/v1/query" \
-H "Content-Type: application/json" \
-d '{"query": "Find all projects that are in progress"}'
```
## Local Dev (No Docker)
If you have Python 3.11+ and a local Postgres running:
1. `pip install -r requirements.txt`
2. Update `.env` with your DB credentials
3. `python -m app.main`
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues