Expense Tracker MCP Server

Expense Tracker MCP Server

Manage your finances through natural language directly in your AI assistant. Add, edit, delete, and query expenses; set monthly budgets; and generate comprehensive spending reports seamlessly.

Category
访问服务器

README

Expense Tracker MCP Server

A powerful, highly detailed MCP (Model Context Protocol) server that exposes a full-featured personal expense tracker to any MCP-compatible AI client — including Claude Desktop, Claude Code, and the MCP Inspector.

Manage your finances through natural language directly in your AI assistant. Add, edit, delete, and query expenses; set monthly budgets; and generate comprehensive spending reports seamlessly.


🌟 Key Features

  • 💸 Natural Language Expense Management: Add, list, edit, and delete expenses effortlessly using AI prompts (e.g., "I just spent 500 on dinner, add it to Food").
  • 🗂️ Intelligent Categorization: Group expenses into categories. Automatically provisions default categories (Food, Transport, Utilities, Entertainment, Shopping) on user signup.
  • 💰 Proactive Budgeting: Set per-category or overall monthly spending limits. Get overspend warnings directly in your AI chats.
  • 📊 Advanced Analytics & Reporting: View monthly summaries with month-over-month (MoM) spending comparisons and percentage changes.
  • 📄 Data Export: Generate full expense reports exported as Markdown or CSV strings right in your AI assistant's context.
  • 🔗 Contextual Resources: Expose read-only MCP resources for browsing expenses and budget statuses (e.g. expenses://month/2026-07).
  • ☁️ Cloud-Native Storage: Uses PostgreSQL for robust, ACID-compliant data storage. Fully prepared for SSE-based cloud deployment.
  • 🔐 Secure OAuth Authentication: Uses Google OAuth for seamless and secure user authentication. Automatically provisions isolated accounts for each user, ensuring your financial data remains private and strictly sandboxed.

🏗️ Architecture & Stack

  • Framework: Built on FastMCP, a modern declarative framework for writing MCP servers in Python.
  • Database: PostgreSQL via the asyncpg driver for high-performance, async database operations. Schema migrations execute automatically and idempotently on server startup.
  • Authentication Flow:
    1. The MCP Client initializes the connection.
    2. The server requests OAuth authentication via FastMCP's OAuthProxy.
    3. The user logs in via Google OAuth.
    4. The DatabaseGoogleTokenVerifier intercepts the Google token, extracts the email, and gracefully provisions a new user record in the PostgreSQL database if they don't exist.
    5. Subsequent tool calls securely map to that specific user's user_id.

Database Schema

The PostgreSQL database enforces strong relational integrity. All financial amounts are stored safely as integer cents to avoid floating-point math errors.

  • users: Stores OAuth-provisioned accounts with a secure token_hash and salt.
  • categories: User-specific expense categories (Unique per user_id + name).
  • expenses: Individual transactions linking a user_id, category_id, amount_cents, and expense_date.
  • budgets: Monthly limits (overall or category-specific) tracked by YYYY-MM.

🚀 Getting Started

Prerequisites

  • Python 3.13+
  • uv (Extremely fast Python package installer and resolver)
  • PostgreSQL database (Local, Docker, or managed cloud like Neon or Supabase)
  • Google Cloud Console account (for setting up OAuth Credentials)

1. Installation

git clone <repo-url>
cd expense-tracker-mcp-server
uv sync

2. Google OAuth Setup

  1. Go to the Google Cloud Console.
  2. Create a new project (or use an existing one).
  3. Navigate to APIs & Services > Credentials.
  4. Click Create Credentials > OAuth client ID.
  5. Choose Web application.
  6. Set the Authorized redirect URIs to your deployed server URL (or http://localhost:8000/callback if testing locally via SSE).
  7. Copy your Client ID and Client Secret.

3. Environment Configuration

Copy the .env.example file to .env and configure your environment:

cp .env.example .env
Variable Requirement Default Description
DATABASE_URL Required None Postgres connection string (e.g. postgresql://user:pass@localhost:5432/expenses)
OAUTH_CLIENT_ID Required None Your Google OAuth Client ID
OAUTH_CLIENT_SECRET Required None Your Google OAuth Client Secret
OAUTH_AUTH_URL Optional https://accounts.google.com/o/oauth2/auth Google Auth endpoint
OAUTH_TOKEN_URL Optional https://oauth2.googleapis.com/token Google Token endpoint
EXPENSE_DEFAULT_CURRENCY Optional INR Default currency formatting (e.g., USD, EUR, GBP)

4. Running the Server Locally

# Run over STDIO (Standard input/output) — For direct Claude Desktop integration
uv run python -m expense_tracker_mcp_server

# Or use the installed CLI script
uv run expense-tracker-mcp

# Development mode with the web-based MCP Inspector UI
uv run fastmcp dev inspector src/expense_tracker_mcp_server/server.py

🤖 Claude Desktop Configuration

To use this server with Claude Desktop over STDIO, add it to your claude_desktop_config.json file.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "Expense Tracker": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/expense-tracker-mcp-server",
        "expense-tracker-mcp"
      ],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/expenses",
        "EXPENSE_DEFAULT_CURRENCY": "USD"
      }
    }
  }
}

Note: OAuth is typically used for Cloud/SSE deployments. For local STDIO usage, FastMCP may skip authentication depending on the client setup.

Restart Claude Desktop after saving the configuration. The expense tracker tools will appear in the tools panel (the hammer icon).


🛠️ MCP Capabilities Reference

Available Tools

Tool Parameters Description
add_expense amount (float), category (str), description (str, opt), date (str, opt) Add a new expense (date defaults to today).
list_expenses month (str, opt), category (str, opt), limit (int, opt) List expenses for a specific month (format: YYYY-MM).
update_expense id (int), amount (float, opt), category (str, opt), description (str, opt), date (str, opt) Edit an existing expense record.
delete_expense id (int) Permanently delete an expense record.
list_categories — List all available categories.
set_budget limit_amount (float), category (str, opt), month (str, opt) Set a monthly spending limit (overall or per category).
get_budget_status month (str, opt) Show spending vs budget limits with percentage utilized.
get_summary month (str, opt) Get a monthly summary with category breakdown & MoM comparison.
export_report month (str, opt), format (str, opt) Export a full report as a formatted Markdown or CSV string.

Available Resources

URI Template Description
expenses://month/{month} Read-only view of all expenses for a month (e.g. expenses://month/2026-07)
budget://status/{month} Read-only view of budget status for a specific month
categories://all Read-only list of all available expense categories

💬 Example AI Prompts

Once connected to your AI assistant, try asking:

  • "List my expense categories."
  • "I just paid my electric bill. Add an expense of $120 to Utilities."
  • "Set an overall monthly budget of $2000 for this month."
  • "Show me my budget status for this month. Am I close to my limit in any category?"
  • "Give me a summary of my spending for July 2026. How does it compare to June?"
  • "Export my expense report for this month as a CSV so I can put it in Excel."

☁️ Cloud Deployment

This server is fully prepared for cloud deployment using Server-Sent Events (SSE) transport over HTTP.

Docker Deployment (Render, Fly.io, Railway, etc.)

The included Dockerfile starts the FastMCP server over SSE transport on port 8000. To deploy, link your GitHub repository to your cloud provider (like Render), and they will automatically build and run the Docker image.

Critical Deployment Steps:

  1. Set the DATABASE_URL environment variable to your production PostgreSQL connection string.
  2. Set your OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET environment variables.
  3. Update your Google OAuth Credentials in the Cloud Console to include your deployed URL as an Authorized redirect URI (e.g., https://your-app.onrender.com/callback).

FastMCP Cloud

If deploying via the fastmcp CLI (e.g., to Prefect Horizon), the project is already configured in fastmcp.json to use sse transport on port 8000.


🧪 Development & Testing

We use pytest for unit testing. The test suite is configured to automatically provision and drop a fresh database schema for isolated testing.

Make sure you have set TEST_DATABASE_URL in your .env file before running tests.

# Run all tests with verbose output
uv run pytest tests/ -v

📜 License

This project is licensed under the MIT License — see the LICENSE file for details.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选