expense-tracker

expense-tracker

Enables tracking business trip expenses and calculating settlements using Google Sheets, with natural language parsing of expenses.

Category
Visit Server

README

Expense Tracker MCP Server

A Model Context Protocol (MCP) server for tracking business trip expenses and calculating settlement amounts using Google Sheets.

Overview

This server provides tools to:

  • Create Google Sheets for expense tracking
  • Parse expenses from natural language input
  • Track who paid what and calculate who owes whom
  • Support multiple participants and settlement calculations

Prerequisites

  • Node.js 18+
  • Google Cloud project with Sheets API enabled
  • Google OAuth 2.0 credentials (or Service Account)

Installation

npm install
npm run build
npm test  # Verify all 18 tests pass

Setup

Option 1: Google OAuth 2.0 (Recommended for Small Projects)

  1. Create a Google Cloud project and enable Sheets + Drive APIs
  2. Create OAuth 2.0 credentials (Desktop application)
  3. Copy .env.example to .env and add your credentials:
    GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
    GOOGLE_CLIENT_SECRET=your-client-secret
    GOOGLE_REDIRECT_URI=http://localhost:3000/oauth/callback
    DEFAULT_PARTICIPANTS=Mike,Chris
    DEFAULT_CURRENCY=MXN
    
  4. Complete OAuth authorization to get refresh token:
    npm run build
    node get-refresh-token.js
    
  5. Copy the generated GOOGLE_REFRESH_TOKEN to your .env

Option 2: Service Account (Better for Production)

  1. Create a Service Account in Google Cloud Console
  2. Download the JSON key file
  3. Update configuration to use Service Account credentials

Configuration

Create a .env file from .env.example with:

  • Google OAuth credentials
  • Default participants list
  • Preferred currency

Tools

  1. create-expense-sheet - Create a new expense tracking spreadsheet
  2. add-expense - Add a single expense entry
  3. add-expenses-bulk - Parse and add multiple expenses
  4. get-expenses - Query expenses with filters
  5. get-settlement-summary - Calculate final settlement

Using with Claude

Add to your Claude Desktop config (~/.config/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "expense-tracker": {
      "command": "node",
      "args": ["/path/to/expense-tracker-mcp/dist/index.js"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-secret",
        "GOOGLE_REDIRECT_URI": "http://localhost:3000/oauth/callback",
        "GOOGLE_REFRESH_TOKEN": "your-refresh-token",
        "DEFAULT_PARTICIPANTS": "Mike,Chris",
        "DEFAULT_CURRENCY": "MXN"
      }
    }
  }
}

Development

npm run watch     # Watch TypeScript compilation
npm run dev       # Build and start server
npm test          # Run all tests (18 tests)
npm start         # Start the server

Architecture

  • src/index.ts - MCP server entry point and tool handlers
  • src/config.ts - Environment configuration with Zod validation
  • src/types.ts - TypeScript type definitions
  • src/google/ - Google Sheets API integration
    • auth.ts - OAuth 2.0 authentication
    • client.ts - Sheets API client
    • types.ts - Google API types
  • src/utils/ - Utility functions
    • parsers.ts - Natural language expense parsing
    • settlement.ts - Settlement calculation logic
    • formatters.ts - Output formatting

Security Notes

  • Never commit .env file - it contains credentials
  • Never expose refresh tokens in code or logs
  • Use environment variables for all sensitive data
  • Consider Service Account for production deployments

Testing

All functionality is tested with 18 comprehensive tests:

npm test

License

MIT

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured