Skip to main content
Glama

🏦 MCP Banking Server

A production-ready banking server built with FastMCP (Model Context Protocol) featuring modern API design patterns, real-time updates, and enterprise-grade features.

✨ Features

Feature

Description

πŸ”

API Key Authentication

Secure endpoints with

X-API-Key

header

πŸ”„

Idempotency Support

Prevent duplicate transactions with

Idempotency-Key

πŸ“‘

WebSocket Updates

Real-time transaction notifications

πŸ“Š

CSV Export

Stream transaction history as CSV

πŸ“š

OpenAPI Docs

Auto-generated Swagger UI at

/docs

🐳

Docker Ready

One-command containerized deployment

πŸ€–

MCP Integration

LLM-compatible tools for AI assistants

πŸš€ Quick Start

Prerequisites

  • Python 3.10+

  • pip or uv package manager

Installation

# Clone or navigate to the project directory cd mcp # Install dependencies pip install -r requirements.txt

Run the Server

# Start the server python server.py # Or use uvicorn directly uvicorn server:app --reload --port 8000

The server will start and display:

  • πŸ”‘ Your default API key (save this!)

  • πŸ“š API documentation URL

Access the API

πŸ”‘ Authentication

All endpoints (except health check and root) require an API key.

Include the X-API-Key header in your requests:

curl -H "X-API-Key: YOUR_API_KEY" http://localhost:8000/accounts/1234567890

The default API key is displayed when the server starts.

Disabling Authentication (for Demo/Testing)

To run the server without authentication (useful for demos or when being scanned by other services):

# Windows PowerShell $env:DISABLE_AUTH="true"; python server.py # Windows CMD set DISABLE_AUTH=true && python server.py # Linux/Mac DISABLE_AUTH=true python server.py

When disabled, all endpoints become publicly accessible without needing the X-API-Key header.

πŸ“– API Reference

Accounts

Create Account

curl -X POST http://localhost:8000/accounts \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"holder_name": "John Doe"}'

Get Account Details

curl http://localhost:8000/accounts/1234567890 \ -H "X-API-Key: YOUR_API_KEY"

Transactions

Deposit (with idempotency)

curl -X POST http://localhost:8000/accounts/1234567890/deposit \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: unique-key-123" \ -d '{"amount": 100.00}'

Withdraw

curl -X POST http://localhost:8000/accounts/1234567890/withdraw \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"amount": 50.00}'

Get Transaction History

curl "http://localhost:8000/accounts/1234567890/transactions?limit=20" \ -H "X-API-Key: YOUR_API_KEY"

Export Transactions as CSV

curl http://localhost:8000/accounts/1234567890/transactions/export \ -H "X-API-Key: YOUR_API_KEY" \ -o transactions.csv

πŸ“‘ WebSocket Live Updates

Connect to receive real-time transaction notifications:

// Browser JavaScript example const ws = new WebSocket('ws://localhost:8000/ws/transactions/1234567890'); ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log('Transaction update:', data); }; ws.onopen = () => { console.log('Connected to transaction updates'); };

WebSocket Message Types

// Connection established {"type": "connected", "message": "Connected to transaction updates", "account_number": "1234567890"} // Transaction notification {"type": "transaction", "data": {"id": 1, "type": "DEPOSIT", "amount": 100.0, ...}} // Ping response {"type": "pong"}

πŸ€– MCP Tools

For LLM integration, the following MCP tools are available:

Tool

Description

create_account

Create a new bank account

deposit

Add funds to an account

withdraw

Remove funds from an account

get_balance

Check account balance

get_transaction_history

View recent transactions

Using with FastMCP CLI

# Run in MCP mode fastmcp run server.py:mcp --transport http --port 8000 # Development mode with inspector fastmcp dev server.py:mcp

🐳 Docker Deployment

Build and Run

# Build the image docker build -t mcp-banking-server . # Run the container docker run -d -p 8000:8000 --name banking-server mcp-banking-server

Docker Compose (optional)

version: '3.8' services: banking-server: build: . ports: - "8000:8000" volumes: - ./data:/app/data restart: unless-stopped

πŸ“ Project Structure

mcp/ β”œβ”€β”€ server.py # Main FastMCP server with MCP tools & REST API β”œβ”€β”€ database.py # SQLite database operations β”œβ”€β”€ auth.py # API key authentication β”œβ”€β”€ websocket_manager.py # WebSocket connection management β”œβ”€β”€ requirements.txt # Python dependencies β”œβ”€β”€ Dockerfile # Container configuration β”œβ”€β”€ README.md # This file └── bank.db # SQLite database (created at runtime)

πŸ”„ Idempotency

The deposit and withdraw endpoints support idempotency to prevent duplicate transactions:

  1. Include an Idempotency-Key header with a unique identifier

  2. If the same key is used again within 24 hours, the original response is returned

  3. The idempotent_replay: true flag indicates a cached response

# First request - processes the transaction curl -X POST ... -H "Idempotency-Key: txn-abc-123" -d '{"amount": 100}' # Second request with same key - returns cached response curl -X POST ... -H "Idempotency-Key: txn-abc-123" -d '{"amount": 100}' # Response includes: "idempotent_replay": true

πŸ›‘οΈ Security Features

  • API Key Authentication: All sensitive endpoints protected

  • Non-root Docker User: Container runs as unprivileged user

  • Input Validation: Pydantic models validate all inputs

  • SQL Injection Prevention: Parameterized queries throughout

πŸ“ License

MIT License - Feel free to use and modify for your projects.


Built with ❀️ using FastMCP

-
security - not tested
F
license - not found
-
quality - not tested

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/sksingh2005/MCP'

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