Skip to main content
Glama
kalavakuntabharathkumar

AI Agent Automation Hub MCP Server

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  │  │
│                      └───────────────┘    └─────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

Related MCP server: Expense Tracker MCP Server

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.small or 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.

F
license - not found
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/kalavakuntabharathkumar/AI-Agent-Automation-Hub-MCP-Based-Multi-Tool-Backend-Platform'

If you have feedback or need assistance with the MCP directory API, please join our Discord server