Skip to main content
Glama
muness

Xero Expenses MCP

by muness
README.md
# xero-expenses-mcp

MCP (Model Context Protocol) server for Xero accounting. Supports Invoices, Bills, Expenses (Bank Transactions), and Expense Claims with PKCE authentication.

## Features

- **Invoices (ACCREC)** - Create sales invoices to send to customers
- **Bills (ACCPAY)** - Create bills you'll pay later
- **Expenses** - Create "Spend Money" bank transactions for already-paid expenses
- **Expense Claims** - Create receipts and submit expense claims for reimbursement
- **Attachments** - Attach PDFs and images to invoices, bills, expenses, and receipts
- **PKCE Auth** - Desktop app OAuth flow (no client secret required)

## Installation

```bash
npx xero-expenses-mcp
```

Or install globally:

```bash
npm install -g xero-expenses-mcp
```

## Xero App Setup

1. Go to [Xero Developer Portal](https://developer.xero.com/app/manage)
2. Create a new app:
   - **App name**: Your choice (e.g., "Expense Manager")
   - **Integration type**: "Mobile or desktop app" (uses PKCE, no secret needed)
   - **Redirect URI**: `http://localhost:3000/callback`
3. Note your **Client ID**

## Claude Code Configuration

Add to your Claude Code MCP settings:

```json
{
  "mcpServers": {
    "xero-expenses": {
      "command": "npx",
      "args": ["xero-expenses-mcp"],
      "env": {
        "XERO_CLIENT_ID": "YOUR_CLIENT_ID"
      }
    }
  }
}
```

Or use the CLI:

```bash
claude mcp add xero-expenses -- npx xero-expenses-mcp
```

Then set environment variables in your shell or `.env` file.

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `XERO_CLIENT_ID` | Yes | Your Xero app's client ID |
| `XERO_CLIENT_SECRET` | No | Only for Web apps (not PKCE) |
| `XERO_REDIRECT_URI` | No | Default: `http://localhost:3000/callback` |

## Authentication

On first use, the server will open a browser for Xero OAuth. After authenticating, tokens are stored in `~/.xero-mcp/token.json`.

## Available Tools

### Accounts & Contacts
- `xero_list_accounts` - List expense accounts/categories
- `xero_list_bank_accounts` - List bank accounts
- `xero_list_contacts` - Search vendors/contacts
- `xero_list_users` - List organization users (for expense claims)

### Invoices (Accounts Receivable)
- `xero_create_invoice` - Create a sales invoice to send to customers
- `xero_attach_file_to_invoice` - Attach file to an invoice

### Bills (Accounts Payable)
- `xero_create_bill` - Create a bill for future payment
- `xero_attach_file` - Attach file to a bill

### Expenses (Bank Transactions)
- `xero_create_expense` - Create a "Spend Money" transaction
- `xero_attach_file_to_expense` - Attach file to an expense

### Expense Claims (deprecated Feb 2026)
- `xero_create_expense_claim` - Create receipt + expense claim
- `xero_attach_file_to_receipt` - Attach file to a receipt

## Example Usage

In Claude Code:

```
"Create an expense for $45.50 lunch at Cafe Example on 2024-01-15, categorize as Business Meals (account 620)"
```

Claude will use the `xero_create_expense_claim` tool with:
```json
{
  "vendorName": "Cafe Example",
  "amount": 45.50,
  "description": "Lunch",
  "accountCode": "620",
  "date": "2024-01-15"
}
```

## Token Storage

Tokens are stored in `~/.xero-mcp/token.json`. To re-authenticate, delete this file.

## License

MIT

TDQS

A3.5/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific Xero entities (bills, expenses, invoices, receipts) with clear action verbs, but there is some potential confusion between xero_create_expense and xero_create_receipt as both handle expense-related creation. The descriptions help clarify, but the overlap in domain could cause misselection without careful reading.

Naming Consistency5/5

All tool names follow a consistent xero_verb_noun pattern with snake_case throughout, such as xero_create_bill, xero_list_expense_claims, and xero_attach_file_to_invoice. This predictability makes it easy for agents to understand and navigate the toolset without confusion from mixed conventions.

Tool Count4/5

With 21 tools, the count is on the higher side but reasonable for the comprehensive expense management domain, covering CRUD operations, file attachments, and listing across multiple entities. It might feel slightly heavy, but each tool appears to serve a specific function without obvious redundancy.

Completeness5/5

The toolset provides complete coverage for Xero expense management, including creation, retrieval, listing, and submission for bills, expenses, invoices, receipts, and claims, along with supporting operations like file attachments and listing accounts/contacts. There are no apparent gaps that would hinder agent workflows in this domain.

Maintenance

ActivityInactive
ResponsivenessNo issues