Skip to main content
Glama
accesstechnology-mike

emma-transactions-mcp

README.md
# Emma Transactions MCP Server

A reusable [Model Context Protocol](https://modelcontextprotocol.io/) server for querying Emma-app transaction exports stored in Google Sheets.

The server is generic: you provide your own Google Sheet URL, published CSV URL, or Sheet ID at runtime. This repository contains no personal transaction data and no hard-coded Sheet IDs.

## Features

- `list_transactions` — list normalized transactions, with filters for category, account, search text, and date range.
- `get_spending_summary` — totals for income, expenses, net movement, category, account, and month.
- `get_metadata` — available accounts, categories, currencies, row count, and date range.
- `validate_sheet` — confirms the sheet can be parsed without returning transaction rows.
- Google Sheets URL helper — accepts a Sheet ID, a normal `/edit` URL, a `/pub?output=csv` URL, or an `/export?format=csv` URL.
- Robust CSV parsing — recognizes common column variants such as `Date`, `Transaction Date`, `Description`, `Name`, `Amount`, `Value`, `Category`, `Account`, and `Merchant`.

## Privacy model

This server does **not** store transaction data. It fetches the configured CSV when a tool is called and returns the requested result to the MCP client.

You still need to treat your Google Sheet URL as sensitive. If you publish a Google Sheet to the web as CSV, anyone with that URL may be able to access the data. Use a private runtime environment and do not commit your real Sheet URL to version control.

## Requirements

- Node.js 20+
- An Emma transaction export in Google Sheets, accessible to the process running the MCP server

Current implementation supports unauthenticated CSV access: published-to-web CSV links and Google Sheet export URLs that the runtime can fetch. OAuth/service-account support is intentionally not bundled yet, because credentials for personal finance data need a sharper knife than a README example.

## Install

From a checkout:

```bash
git clone https://github.com/accesstechnology-mike/emma-transactions-mcp.git
cd emma-transactions-mcp
npm install
npm run build
```

## MCP client configuration

Use an environment variable:

```json
{
  "mcpServers": {
    "emma-transactions": {
      "command": "node",
      "args": ["/absolute/path/to/emma-transactions-mcp/dist/index.js"],
      "env": {
        "EMMA_SHEET_URL": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/pub?output=csv",
        "EMMA_SHEET_GID": "0"
      }
    }
  }
}
```

Or pass `sheet_url` in each tool call.

Optional `gid` selects a specific tab. It defaults to `EMMA_SHEET_GID`, then `0`.

## Expected columns

At minimum, the CSV needs:

- date: `Date`, `Transaction Date`, `Timestamp`, or `Time`
- description: `Description`, `Name`, `Transaction`, `Transaction Name`, or `Title`
- amount: `Amount`, `Value`, `Transaction Amount`, `Money Out`, or `Money In`

Optional columns include `Currency`, `Category`, `Account`, `Merchant`, `Notes`, and `Type`.

## Development

```bash
npm install
npm test
npm run build
```

The test suite uses synthetic fixture rows only. Do not add real transaction exports to tests, issues, screenshots, or docs.

## License

MIT

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool serves a distinct function: metadata retrieval, spending summary, transaction listing, and sheet validation. No overlap in purposes.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (get_metadata, get_spending_summary, list_transactions, validate_sheet) with clear, descriptive verbs.

Tool Count5/5

4 tools is well-scoped for a transaction management server, covering essential operations without being excessive or insufficient.

Completeness4/5

The server provides metadata, summaries, and transaction listing, but lacks write operations or advanced filtering. This seems intentional for a read-only analysis tool, so the gap is minor.

Maintenance

ActivitySlowing
ResponsivenessNo issues