AI Agent Automation Hub MCP Server
Enables AI agents to manage personal expenses via natural language through add, query, summarize, and delete expense tools.
README
AI Agent Automation Hub — MCP-Based Multi-Tool Backend Platform
A production-quality personal expense tracker whose REST endpoints are also exposed as MCP (Model Context Protocol) tools, enabling AI agents (Claude, GPT-4) to add, query, and summarise expenses through natural language. Includes a LangChain agent layer and an n8n scheduled workflow for daily email summaries.
Built: April 2 – April 4, 2026
Author: Bharath Kumar Kalavakunta
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ AI Agent Automation Hub │
│ │
│ ┌──────────────┐ ┌───────────────┐ ┌─────────────────┐ │
│ │ FastAPI App │ │ MCP Server │ │ LangChain Agent │ │
│ │ (Port 8000) │◄───│ (Port 8001) │◄───│ (OpenAI/ │ │
│ │ │ │ │ │ Anthropic) │ │
│ │ /api/... │ │ add_expense │ │ │ │
│ │ CRUD + auth │ │ get_expenses │ │ "Add ₹500 │ │
│ └──────┬───────┘ │ get_summary │ │ grocery" │ │
│ │ │ delete_exp. │ └─────────────────┘ │
│ │ └───────────────┘ │
│ ┌──────▼───────┐ │
│ │ PostgreSQL │ ┌───────────────┐ ┌─────────────────┐ │
│ │ (or SQLite) │ │ Django Admin │ │ n8n Workflow │ │
│ └──────────────┘ │ (Port 8080) │ │ Daily Summary │ │
│ │ /admin/ │ │ → Email/Slack │ │
│ └───────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Project Structure
AI-Agent-Automation-Hub/
├── fastapi_app/ # Core REST API (FastAPI + SQLAlchemy)
│ ├── main.py # App entry point, router registration
│ ├── models.py # SQLAlchemy ORM models (User, Expense)
│ ├── schemas.py # Pydantic request/response schemas
│ ├── database.py # DB engine, session, init_db()
│ ├── auth.py # JWT auth, password hashing
│ └── routers/
│ ├── expenses.py # CRUD + summary endpoints
│ ├── users.py # Register, login, /me
│ └── agent.py # POST /api/agent/query
│
├── django_app/ # Django admin panel + auth
│ ├── manage.py
│ ├── config/ # Django project settings, URLs, WSGI
│ └── expenses/ # Django app: models, admin, views, URLs
│
├── mcp_server/ # MCP server wrapping FastAPI as tools
│ ├── server.py # MCP tool definitions + server loop
│ └── example_client.py # End-to-end demo client
│
├── agent/ # LangChain agent layer
│ ├── agent.py # AgentExecutor, OpenAI/Anthropic switch
│ └── tools.py # LangChain Tool wrappers around REST API
│
├── n8n_workflow/ # n8n automation workflow
│ ├── workflow.json # Importable n8n workflow definition
│ └── README.md # Setup and usage guide
│
├── seed.py # Seed script — 18 sample expenses
├── requirements.txt # All Python dependencies
├── .env.example # Environment variable template
└── README.md # This file
Quick Start
1. Clone and install dependencies
git clone https://github.com/kalavakuntabharathkumar/AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform.git
cd AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
2. Configure environment
cp .env.example .env
# Edit .env with your database URL and API keys
3. Start the FastAPI server
uvicorn fastapi_app.main:app --reload --port 8000
The API is now live at http://localhost:8000.
Interactive docs: http://localhost:8000/api/docs
4. Start the Django admin panel
# Apply migrations
python -m django_app.manage migrate --settings=django_app.config.settings
# Create a superuser
python -m django_app.manage createsuperuser --settings=django_app.config.settings
# Run Django dev server
python -m django_app.manage runserver 8080 --settings=django_app.config.settings
Django admin: http://localhost:8080/admin/
Expense dashboard: http://localhost:8080/dashboard/
5. Seed sample data
# Ensure the FastAPI server is running first
python seed.py
Adds 18 sample expenses across 8 categories. Demo credentials:
- Username:
demo_user - Password:
demopassword123
API Reference
Authentication
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Create a new user account |
POST |
/api/auth/login |
Login and receive a JWT token |
GET |
/api/auth/me |
Get current user profile |
All expense endpoints require Authorization: Bearer <token>.
Expenses
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/expenses/ |
Create a new expense |
GET |
/api/expenses/ |
List expenses (filterable) |
GET |
/api/expenses/summary |
Spending summary by category |
GET |
/api/expenses/{id} |
Get a single expense |
PUT |
/api/expenses/{id} |
Update an expense |
DELETE |
/api/expenses/{id} |
Delete an expense |
Query parameters for GET /api/expenses/:
| Parameter | Type | Description |
|---|---|---|
category |
string | Filter by category (partial match) |
start_date |
date | Start of date range (YYYY-MM-DD) |
end_date |
date | End of date range (YYYY-MM-DD) |
limit |
integer | Max results (default 50, max 200) |
Query parameters for GET /api/expenses/summary:
| Parameter | Type | Values |
|---|---|---|
period |
string | week | month | year | all |
AI Agent
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/agent/query |
Submit a natural language instruction |
Request body:
{ "query": "How much did I spend on groceries this month?" }
MCP Tool Schemas
The MCP server (mcp_server/server.py) exposes four tools:
add_expense
{
"name": "add_expense",
"inputSchema": {
"type": "object",
"required": ["amount", "category"],
"properties": {
"amount": { "type": "number", "description": "Amount in INR (positive)" },
"category": { "type": "string", "description": "Expense category" },
"description": { "type": "string", "description": "Optional note" },
"date": { "type": "string", "format": "date", "description": "YYYY-MM-DD, defaults to today" }
}
}
}
get_expenses
{
"name": "get_expenses",
"inputSchema": {
"type": "object",
"properties": {
"category": { "type": "string" },
"start_date": { "type": "string", "format": "date" },
"end_date": { "type": "string", "format": "date" },
"limit": { "type": "integer", "minimum": 1, "maximum": 200 }
}
}
}
get_summary
{
"name": "get_summary",
"inputSchema": {
"type": "object",
"properties": {
"period": { "type": "string", "enum": ["week", "month", "year", "all"] }
}
}
}
delete_expense
{
"name": "delete_expense",
"inputSchema": {
"type": "object",
"required": ["expense_id"],
"properties": {
"expense_id": { "type": "integer" }
}
}
}
LangChain Agent — Example Commands
| Natural Language Input | Expected Response |
|---|---|
Add ₹500 grocery expense |
"Added ₹500 expense under 'Groceries' ✅ ID: 21, Date: 2026-04-03" |
How much did I spend this month? |
"Spending summary for this month: Total ₹8,456.50 across 17 transactions..." |
Show all transport expenses |
Lists all expenses in the Transport category |
Delete expense #5 |
"Expense #5 deleted successfully. ✅" |
What's my biggest spending category this week? |
Calls get_summary with period=week and interprets results |
Running the agent via CLI
python -m agent.agent "Add ₹750 food expense — dinner at a restaurant"
python -m agent.agent "How much did I spend on transport this week?"
python -m agent.agent "Show my last 5 expenses"
Running via the REST endpoint
TOKEN="your_jwt_token_here"
curl -X POST http://localhost:8000/api/agent/query \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "Summarise my expenses for this month"}'
Switching AI Providers
Set AI_PROVIDER in your .env file:
# Use OpenAI (default)
AI_PROVIDER=openai
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
# Use Anthropic Claude
AI_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_MODEL=claude-3-5-haiku-20241022
Deploying to AWS EC2 (Ubuntu)
1. Launch EC2 Instance
- AMI: Ubuntu 24.04 LTS
- Instance type:
t3.smallor larger - Security group: open ports 22 (SSH), 8000 (FastAPI), 8080 (Django), 8001 (MCP)
2. Install Dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3.11 python3.11-venv python3-pip postgresql postgresql-contrib
# Create DB
sudo -u postgres psql -c "CREATE USER expenseuser WITH PASSWORD 'yourpassword';"
sudo -u postgres psql -c "CREATE DATABASE expense_tracker OWNER expenseuser;"
# Clone and set up
git clone https://github.com/kalavakuntabharathkumar/AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform.git
cd AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform
python3.11 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env && nano .env # fill in DATABASE_URL, API keys
3. Run FastAPI with Gunicorn + Uvicorn
gunicorn fastapi_app.main:app \
-w 4 \
-k uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000 \
--daemon \
--access-logfile /var/log/expense_api.log
4. MCP Server as a systemd Service
Create /etc/systemd/system/mcp-server.service:
[Unit]
Description=Expense Tracker MCP Server
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform
Environment=PATH=/home/ubuntu/AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform/venv/bin
ExecStart=/home/ubuntu/AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform/venv/bin/python -m mcp_server.server
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable mcp-server
sudo systemctl start mcp-server
5. Django Admin
python -m django_app.manage migrate --settings=django_app.config.settings
python -m django_app.manage collectstatic --settings=django_app.config.settings
gunicorn django_app.config.wsgi:application --bind 0.0.0.0:8080 --daemon
6. Security Hardening
# Configure UFW firewall
sudo ufw allow 22/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 8080/tcp
sudo ufw enable
# Use Nginx as a reverse proxy (recommended for production)
sudo apt install nginx
# Configure /etc/nginx/sites-available/expense-tracker to proxy to ports 8000 and 8080
Environment Variables Reference
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL or SQLite connection string |
DJANGO_SECRET_KEY |
Yes | Django secret key |
JWT_SECRET_KEY |
Yes | FastAPI JWT signing key |
AI_PROVIDER |
Yes | openai or anthropic |
OPENAI_API_KEY |
If using OpenAI | OpenAI API key |
ANTHROPIC_API_KEY |
If using Anthropic | Anthropic API key |
FASTAPI_BASE_URL |
Yes | Base URL of FastAPI server for MCP/agent |
N8N_WEBHOOK_URL |
Optional | n8n webhook URL for automation triggers |
NOTIFICATION_EMAIL |
Optional | Email for daily summary reports |
License
MIT License — free to use, modify, and distribute.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.