Skip to main content
Glama
accesstechnology-mike

emma-transactions-mcp

Emma Transactions MCP Server

A reusable Model Context Protocol 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.

Related MCP server: google-sheets-mcp

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:

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:

{
  "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

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

Available Tools

4 tools
get_metadataA

Return available categories, accounts, currencies, row count, and date range

ParametersJSON Schema
NameRequiredDescriptionDefault
sheet_urlNoGoogle Sheet URL, published CSV URL, or Sheet ID. Optional when EMMA_SHEET_URL is set.
gidNoGoogle Sheet tab gid. Defaults to 0.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description carries full burden. It indicates a read operation ('return') but does not explicitly state it's non-destructive or disclose any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no superfluous words. Clearly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description must explain return values. It lists the main components (categories, accounts, etc.), but could be more precise about format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema, e.g., how parameters affect the returned data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns categories, accounts, currencies, row count, and date range. It distinguishes from siblings which return transactions or spending summaries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use versus alternatives. Implied that it provides metadata needed before using other tools, but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spending_summaryB

Summarize income, spending, net movement, and totals by category, account, and month

ParametersJSON Schema
NameRequiredDescriptionDefault
sheet_urlNoGoogle Sheet URL, published CSV URL, or Sheet ID. Optional when EMMA_SHEET_URL is set.
gidNoGoogle Sheet tab gid. Defaults to 0.
fromNoInclusive lower date bound. Works best with ISO dates.
toNoInclusive upper date bound. Works best with ISO dates.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavior. It only states what is summarized but does not indicate read-only nature, side effects, or data source behavior (e.g., fetching from sheet).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundant information. It is appropriately concise and front-loaded with the action 'Summarize'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description lacks details on return format, output structure, or constraints. It is incomplete for an agent to fully understand the tool's capabilities.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no additional meaning to the parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool summarizes income, spending, net movement, and totals by category, account, and month. It distinguishes itself from siblings like list_transactions (raw data) and validate_sheet (validation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It does not specify when not to use or mention sibling tools for comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_transactionsB

List normalized Emma transactions with optional filters

ParametersJSON Schema
NameRequiredDescriptionDefault
sheet_urlNoGoogle Sheet URL, published CSV URL, or Sheet ID. Optional when EMMA_SHEET_URL is set.
gidNoGoogle Sheet tab gid. Defaults to 0.
categoryNoCase-insensitive category filter.
accountNoCase-insensitive account filter.
searchNoCase-insensitive text search across description, merchant, category, and notes.
fromNoInclusive lower date bound. Works best with ISO dates.
toNoInclusive upper date bound. Works best with ISO dates.
limitNoMaximum transactions returned. Defaults to 50, max 500.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry full burden. It mentions 'normalized' but doesn't explain what normalization entails, nor any side effects, rate limits, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise single sentence with no redundant words; information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and no annotations, the description is too sparse. It doesn't explain return format, pagination, or how filters interact, leaving significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds minimal value beyond schema; it only reiterates 'optional filters' without enhancing understanding of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'List' and resource 'normalized Emma transactions' with optional filters, clearly distinguishing it from siblings like get_metadata or get_spending_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives; no context about typical use cases or when to choose other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_sheetB

Fetch and validate that the configured sheet can be parsed without returning transaction rows

ParametersJSON Schema
NameRequiredDescriptionDefault
sheet_urlNoGoogle Sheet URL, published CSV URL, or Sheet ID. Optional when EMMA_SHEET_URL is set.
gidNoGoogle Sheet tab gid. Defaults to 0.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It only states the tool fetches and validates without returning rows, but does not disclose what it does return, potential side effects, or error behavior. The behavioral transparency is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the core purpose. However, it could be slightly more structured (e.g., separating fetch from validate) or include additional context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (2 optional params, no output schema), the description is minimally adequate. It explains what the tool does but lacks details on success/failure outcomes, authentication requirements, or the nature of 'configured sheet'. For a validation tool, more completeness would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters (sheet_url and gid). The description adds no extra meaning beyond 'configured sheet', which is already implied. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'validate' and the resource 'sheet', specifying the action of fetching and validating that the sheet can be parsed without returning transaction rows. This distinguishes it from sibling tools like list_transactions which return rows, and get_metadata which fetches metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for testing sheet configurability before listing transactions (implied by 'without returning transaction rows'), but it does not explicitly state when to use versus alternatives like list_transactions or get_metadata. No guidance on prerequisites or context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.0.0
    • First observedget_metadata
    • First observedget_spending_summary
    • First observedlist_transactions
    • First observedvalidate_sheet

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

Related MCP Connectors

Related MCP Servers