Skip to main content
Glama
akutishevsky

LunchMoney MCP Server

by akutishevsky

get_transactions

Read-only

Retrieve financial transactions with filters for date range, account, category, tag, status, and more. Supports pagination and includes pending/group options.

Instructions

Retrieve transactions, optionally filtered by date range, account, category, tag, recurring item, status, and more. Returns at most limit transactions (default 1000, max 2000); has_more is set on the response when more match the filters. Pending and split-parent / group-child transactions are excluded by default.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to return (1-2000, default 1000).
offsetNoOffset for pagination. Use with `has_more` from a previous response.
statusNo
tag_idNo
end_dateNoEnd of the date range. Required if start_date is set.
is_pendingNoFilter by pending status. Takes precedence over include_pending when set.
start_dateNoBeginning of the date range. Required if end_date is set.
category_idNoFilter by category ID. 0 returns only un-categorized transactions. Matches both leaf categories and category groups.
recurring_idNo
created_sinceNoOnly return transactions created after this timestamp.
include_filesNoInclude the `files` array (attachment metadata) on each transaction.
updated_sinceNoOnly return transactions updated after this timestamp.
include_pendingNoInclude imported pending transactions in results.
is_group_parentNoIf true, returns only transaction groups (group parents).
include_childrenNoPopulate the `children` array on group/split parent transactions.
include_metadataNoInclude plaid_metadata and custom_metadata fields on each transaction.
plaid_account_idNoFilter by Plaid account ID, or 0 to omit all Plaid-account transactions.
manual_account_idNoFilter by manual account ID, or 0 to omit all manual-account transactions.
include_split_parentsNoInclude the original parent transactions of split transactions.
include_group_childrenNoInclude the original transactions that were combined into transaction groups.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.0.3
  2. Removedv1.0.2
  3. Changed24 schema fields changedv1.0.1
    • addedInput schema / $schema
      Added value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / category_id
      Added value: +{
      +  "description": "Filter by category ID. 0 returns only un-categorized transactions. Matches both leaf categories and category groups.",
      +  "type": "number"
      +}
    • addedInput schema / properties / created_since
      Added value: +{
      +  "description": "Only return transactions created after this timestamp.",
      +  "type": "string"
      +}
    • addedInput schema / properties / end_date
      Added value: +{
      +  "$ref": "#/properties/start_date",
      +  "description": "End of the date range. Required if start_date is set."
      +}
    • addedInput schema / properties / include_children
      Added value: +{
      +  "description": "Populate the `children` array on group/split parent transactions.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_files
      Added value: +{
      +  "description": "Include the `files` array (attachment metadata) on each transaction.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_group_children
      Added value: +{
      +  "description": "Include the original transactions that were combined into transaction groups.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_metadata
      Added value: +{
      +  "description": "Include plaid_metadata and custom_metadata fields on each transaction.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_pending
      Added value: +{
      +  "description": "Include imported pending transactions in results.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / include_split_parents
      Added value: +{
      +  "description": "Include the original parent transactions of split transactions.",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / input
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "asset_id": {
      -      "description": "Filter by asset ID",
      -      "type": "number"
      -    },
      -    "category_id": {
      -      "description": "Filter by category ID",
      -      "type": "number"
      -    },
      -    "debit_as_negative": {
      -      "description": "Pass true to return debit amounts as negative",
      -      "type": "boolean"
      -    },
      -    "end_date": {
      -      "description": "End date in YYYY-MM-DD format",
      -      "type": "string"
      -    },
      -    "is_group": {
      -      "description": "Filter by transaction groups",
      -      "type": "boolean"
      -    },
      -    "limit": {
      -      "description": "Maximum number of transactions to return (max 500)",
      -      "type": "number"
      -    },
      -    "offset": {
      -      "description": "Number of transactions to skip",
      -      "type": "number"
      -    },
      -    "plaid_account_id": {
      -      "description": "Filter by Plaid account ID",
      -      "type": "number"
      -    },
      -    "recurring_id": {
      -      "description": "Filter by recurring expense ID",
      -      "type": "number"
      -    },
      -    "start_date": {
      -      "description": "Start date in YYYY-MM-DD format",
      -      "type": "string"
      -    },
      -    "status": {
      -      "description": "Filter by status: cleared, uncleared, pending",
      -      "type": "string"
      -    },
      -    "tag_id": {
      -      "description": "Filter by tag ID",
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "start_date",
      -    "end_date"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / properties / is_group_parent
      Added value: +{
      +  "description": "If true, returns only transaction groups (group parents).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / is_pending
      Added value: +{
      +  "description": "Filter by pending status. Takes precedence over include_pending when set.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Max transactions to return (1-2000, default 1000).",
      +  "maximum": 2000,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • addedInput schema / properties / manual_account_id
      Added value: +{
      +  "description": "Filter by manual account ID, or 0 to omit all manual-account transactions.",
      +  "type": "number"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Offset for pagination. Use with `has_more` from a previous response.",
      +  "type": "number"
      +}
    • addedInput schema / properties / plaid_account_id
      Added value: +{
      +  "description": "Filter by Plaid account ID, or 0 to omit all Plaid-account transactions.",
      +  "type": "number"
      +}
    • addedInput schema / properties / recurring_id
      Added value: +{
      +  "type": "number"
      +}
    • addedInput schema / properties / start_date
      Added value: +{
      +  "description": "Beginning of the date range. Required if end_date is set.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "reviewed",
      +    "unreviewed",
      +    "delete_pending"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / tag_id
      Added value: +{
      +  "type": "number"
      +}
    • addedInput schema / properties / updated_since
      Added value: +{
      +  "$ref": "#/properties/created_since",
      +  "description": "Only return transactions updated after this timestamp."
      +}
    • removedInput schema / required
      Removed value: -[
      -  "input"
      -]
  4. First observedv1.0.0

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true. The description adds critical behavioral details: pagination behavior (limit, has_more, offset), default exclusions (pending, split-parents, group-children), and that include_* flags can override. No contradictions.

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?

Two sentences: first lists filter options, second explains pagination and default exclusions. Efficient, front-loaded, no wasted words.

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?

For a retrieval tool with 20 parameters and no output schema, the description covers pagination, default filters, and override flags. It could mention the response format (e.g., array of transaction objects) but is otherwise complete.

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 85%, so the schema already documents most parameters. The description summarizes filter types (e.g., 'date range, account, category, tag') but does not add meaningful details beyond what the schema descriptions provide, e.g., no explanation of the 'status' enum values.

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 'Retrieve transactions' and enumerates numerous filtering dimensions (date, account, category, etc.), distinguishing it from siblings like get_single_transaction or create_transactions.

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

Usage Guidelines4/5

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

The description explains optional filters, default limit, and that pending/split-group exclusions apply by default. It does not explicitly contrast with sibling tools (e.g., get_single_transaction) but provides enough context for when to use this tool.

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