For agents / Reference

Tool catalog

10 tools, generated from the definitions used by the MCP server. Read tools return your ledger data; logging tools default to pending proposals. Direct add tools default to confirmed. Both accept confirm: true or false; true requires complete structured data, while false creates a pending proposal.

Connect an MCP client to call these tools. For a plain-text reference, use llms.txt.

Read

list_transactions

List ledger entries, newest first — expenses, income, or both. Returns amounts as integer minor units alongside the currency exponent — never divide by 100 without checking it. Amounts are always positive; read `direction` to know which way the money went. Defaults to confirmed entries only; pending ones are unreviewed proposals and are excluded from every total.

Input schema for list_transactions
{
  "type": "object",
  "properties": {
    "direction": {
      "type": "string",
      "enum": [
        "expense",
        "income"
      ],
      "description": "Omit for both sides of the ledger."
    },
    "status": {
      "type": "string",
      "enum": [
        "confirmed",
        "pending",
        "rejected"
      ],
      "description": "Defaults to confirmed."
    },
    "from": {
      "type": "string",
      "description": "Inclusive start date, yyyy-mm-dd"
    },
    "to": {
      "type": "string",
      "description": "Inclusive end date, yyyy-mm-dd"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "description": "Integer from 1 to 200; defaults to 50 when omitted. Invalid values are rejected."
    }
  },
  "additionalProperties": false
}

Read

get_totals

Totals for a period: money in, money out, and the net between them, plus the VAT position and what is still unbilled to clients. Counts confirmed entries only.

Input schema for get_totals
{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Inclusive start date, yyyy-mm-dd"
    },
    "to": {
      "type": "string",
      "description": "Inclusive end date, yyyy-mm-dd"
    }
  },
  "additionalProperties": false
}

Read

totals_by_category

Confirmed totals grouped by category for a period, largest first. Defaults to expenses; pass direction to break income down instead.

Input schema for totals_by_category
{
  "type": "object",
  "properties": {
    "direction": {
      "type": "string",
      "enum": [
        "expense",
        "income"
      ],
      "description": "Defaults to expense."
    },
    "from": {
      "type": "string",
      "description": "Inclusive start date, yyyy-mm-dd"
    },
    "to": {
      "type": "string",
      "description": "Inclusive end date, yyyy-mm-dd"
    }
  },
  "additionalProperties": false
}

Read

list_categories

The category vocabulary for this ledger, split by which side it belongs to. Use these slugs verbatim when logging; an unrecognised slug — or one from the wrong side — is dropped rather than created.

Input schema for list_categories
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Write / pending-or-confirmed

log_expense

Propose money SPENT. Defaults to PENDING, excluded from totals. Pass confirm: true only to explicitly record complete structured data. Confirmed writes require description, positive string amount, currency and yyyy-mm-dd date, plus fxRate for foreign currency. Transcribe supplied amounts and rates; never invent them.

Input schema for log_expense
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "amount": {
      "type": "string",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "occurredAt": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "merchantName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "categorySlug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "taxAmount": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "taxRate": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "supplierTaxId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "reference": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 80
        },
        {
          "type": "null"
        }
      ]
    },
    "isBillable": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ]
    },
    "clientName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "notes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "lineItems": {
      "anyOf": [
        {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "quantity": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitAmount": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "totalAmount": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "description",
              "totalAmount"
            ]
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "confirm": {
      "default": false,
      "description": "Defaults to false. True records complete structured data and requires occurredAt and a supplied foreign-currency fxRate. False creates a pending proposal.",
      "type": "boolean"
    },
    "fxRate": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^\\d+(?:\\.\\d+)?$"
    }
  },
  "required": [
    "description",
    "amount",
    "currency"
  ]
}

Write / pending-or-confirmed

log_income

Propose money RECEIVED. Defaults to PENDING, excluded from totals. Pass confirm: true only to explicitly record complete structured data. Confirmed writes require description, positive string amount, currency and yyyy-mm-dd date, plus fxRate for foreign currency. Transcribe supplied amounts and rates; never invent them.

Input schema for log_income
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "amount": {
      "type": "string",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "occurredAt": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "merchantName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "categorySlug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "taxAmount": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "taxRate": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "supplierTaxId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "reference": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 80
        },
        {
          "type": "null"
        }
      ]
    },
    "isBillable": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ]
    },
    "clientName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "notes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "lineItems": {
      "anyOf": [
        {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "quantity": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitAmount": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "totalAmount": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "description",
              "totalAmount"
            ]
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "confirm": {
      "default": false,
      "description": "Defaults to false. True records complete structured data and requires occurredAt and a supplied foreign-currency fxRate. False creates a pending proposal.",
      "type": "boolean"
    },
    "fxRate": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^\\d+(?:\\.\\d+)?$"
    }
  },
  "required": [
    "description",
    "amount",
    "currency"
  ]
}

Write / confirmed-by-default

add_expense

Add money SPENT. confirm defaults to true: records complete structured data immediately and includes it in totals. Pass confirm: false to create a pending proposal instead. Confirmed writes require description, positive string amount, currency and yyyy-mm-dd date, plus fxRate for foreign currency. Transcribe supplied amounts and rates; never invent them.

Input schema for add_expense
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "amount": {
      "type": "string",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "occurredAt": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "merchantName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "categorySlug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "taxAmount": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "taxRate": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "supplierTaxId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "reference": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 80
        },
        {
          "type": "null"
        }
      ]
    },
    "isBillable": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ]
    },
    "clientName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "notes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "lineItems": {
      "anyOf": [
        {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "quantity": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitAmount": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "totalAmount": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "description",
              "totalAmount"
            ]
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "confirm": {
      "default": true,
      "description": "Defaults to true. True records complete structured data and requires occurredAt and a supplied foreign-currency fxRate. False creates a pending proposal.",
      "type": "boolean"
    },
    "fxRate": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^\\d+(?:\\.\\d+)?$"
    }
  },
  "required": [
    "description",
    "amount",
    "currency"
  ]
}

Write / confirmed-by-default

add_income

Add money RECEIVED. confirm defaults to true: records complete structured data immediately and includes it in totals. Pass confirm: false to create a pending proposal instead. Confirmed writes require description, positive string amount, currency and yyyy-mm-dd date, plus fxRate for foreign currency. Transcribe supplied amounts and rates; never invent them.

Input schema for add_income
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "amount": {
      "type": "string",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "occurredAt": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "merchantName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "categorySlug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "taxAmount": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "taxRate": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "supplierTaxId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "reference": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 80
        },
        {
          "type": "null"
        }
      ]
    },
    "isBillable": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ]
    },
    "clientName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 120
        },
        {
          "type": "null"
        }
      ]
    },
    "notes": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 1000
        },
        {
          "type": "null"
        }
      ]
    },
    "lineItems": {
      "anyOf": [
        {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "quantity": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "unitAmount": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "totalAmount": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "description",
              "totalAmount"
            ]
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "confirm": {
      "default": true,
      "description": "Defaults to true. True records complete structured data and requires occurredAt and a supplied foreign-currency fxRate. False creates a pending proposal.",
      "type": "boolean"
    },
    "fxRate": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^\\d+(?:\\.\\d+)?$"
    }
  },
  "required": [
    "description",
    "amount",
    "currency"
  ]
}

Read

list_pending_review

Entries captured automatically that are waiting for the account holder to confirm or reject. These are excluded from all totals.

Input schema for list_pending_review
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Read

list_recurring

Standing instructions that write to this ledger on a schedule — rent, retainers, subscriptions. Read-only: creating, editing or cancelling a rule is the account holder's to do in the app. Use this to explain why an entry exists, or what is coming.

Input schema for list_recurring
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Human decisions stay human

There is no tool to change existing entry status, assign projects, or create, edit or cancel recurring rules. Pending entries are excluded from totals. Read operations can bring due entries from existing human-authored recurring rules into the ledger before returning results.