Skip to main content
Glama
alex1092

Up Banking MCP Server

by alex1092
README.md
# Up Banking MCP Server

A Model Context Protocol (MCP) server that provides integration with the [Up Banking API](https://developer.up.com.au/). This server allows Claude to interact with your Up banking data, including accounts, transactions, and categories.

<a href="https://glama.ai/mcp/servers/@alex1092/up-bank-mcp-server">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@alex1092/up-bank-mcp-server/badge" alt="Up Banking Server MCP server" />
</a>

## Features

- **Account Management**: List all accounts, get account details and balances
- **Transaction History**: Query transactions with flexible filtering (date range, status, category, tags)
- **Category Information**: Access Up's spending categories for better transaction insights
- **Type-Safe**: Built with TypeScript for reliability and developer experience
- **Secure**: Uses Up's personal access token for authentication

## Prerequisites

- Node.js 18 or higher
- An Up bank account
- Up personal access token

## Installation

1. Clone or download this repository:
```bash
cd up-mcp-server
```

2. Install dependencies:
```bash
npm install
```

3. Build the server:
```bash
npm run build
```

## Getting Your Up API Token

1. Open the Up app on your phone
2. Swipe right and select "Data sharing"
3. Tap on 'Personal Access Token'
4. Select 'Generate a token'
5. Choose how long you want the token to last
6. Follow the prompts and copy your token securely

**Important**: Keep your token secure! Never share it or commit it to version control.

## Configuration

### Claude Desktop Configuration

Add this to your Claude Desktop configuration file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "up-banking": {
      "command": "node",
      "args": ["/absolute/path/to/up-mcp-server/build/index.js"],
      "env": {
        "UP_API_TOKEN": "your_up_api_token_here"
      }
    }
  }
}
```

Replace `/absolute/path/to/up-mcp-server` with the actual path to this directory, and replace `your_up_api_token_here` with your Up personal access token.

### Alternative: Using npx

You can also run the server directly with npx:

```json
{
  "mcpServers": {
    "up-banking": {
      "command": "npx",
      "args": ["-y", "/absolute/path/to/up-mcp-server"],
      "env": {
        "UP_API_TOKEN": "your_up_api_token_here"
      }
    }
  }
}
```

## Available Tools

### `up_ping`
Test the API connection and verify authentication is working.

### `up_list_accounts`
List all accounts with optional filtering by account type or ownership.

**Parameters:**
- `accountType` (optional): Filter by "SAVER", "TRANSACTIONAL", or "HOME_LOAN"
- `ownershipType` (optional): Filter by "INDIVIDUAL" or "JOINT"

### `up_get_account`
Get detailed information about a specific account.

**Parameters:**
- `accountId` (required): The account ID

### `up_list_transactions`
List transactions with comprehensive filtering options.

**Parameters:**
- `accountId` (optional): Filter to a specific account
- `status` (optional): "HELD" (pending) or "SETTLED"
- `since` (optional): Start date in RFC 3339 format (e.g., "2024-01-01T00:00:00+10:00")
- `until` (optional): End date in RFC 3339 format
- `category` (optional): Category ID (e.g., "restaurants-and-cafes")
- `tag` (optional): Transaction tag
- `pageSize` (optional): Number of results (1-100)

### `up_get_transaction`
Get detailed information about a specific transaction.

**Parameters:**
- `transactionId` (required): The transaction ID

### `up_list_categories`
List all spending categories in Up.

**Parameters:**
- `parentId` (optional): Filter to children of a specific parent category

### `up_get_category`
Get details about a specific category.

**Parameters:**
- `categoryId` (required): The category ID (e.g., "restaurants-and-cafes")

## Usage Examples

Once configured, you can ask Claude questions like:

- "What's my current account balance?"
- "Show me all transactions from last month"
- "How much did I spend on restaurants this week?"
- "List all my saver accounts"
- "What are the pending transactions in my spending account?"
- "Show me all transactions tagged with 'vacation'"

## Development

### Watch Mode
For development with automatic recompilation:
```bash
npm run dev
```

### Testing the Connection
After configuration, restart Claude Desktop and try:
```
Can you ping the Up API to verify the connection?
```

## Troubleshooting

### "UP_API_TOKEN environment variable is required"
Make sure you've added your Up API token to the `env` section of your Claude Desktop config.

### "Up API error: 401"
Your API token is invalid or expired. Generate a new token in the Up app.

### Server not appearing in Claude
1. Check that the path to `build/index.js` is absolute and correct
2. Verify the JSON syntax in your config file is valid
3. Restart Claude Desktop completely
4. Check Claude's logs for error messages

## Security Notes

- Your Up API token grants full read access to your banking data
- Never commit your token to version control
- Use environment variables or secure configuration management
- Token access can be revoked anytime in the Up app
- Consider setting an expiration date for your tokens

## API Rate Limits

The Up API has rate limits. The server will return error messages if limits are exceeded. Use pagination and filtering to minimize API calls.

## Contributing

This is a basic implementation covering the main read operations. Potential enhancements:

- Add webhook support for real-time transaction notifications
- Implement transaction categorization updates
- Add attachment/receipt support
- Support for pagination with cursor-based browsing

## License

MIT

## Related Links

- [Up Banking API Documentation](https://developer.up.com.au/)
- [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
- [Up Bank](https://up.com.au/)

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. The tools are organized around three main resources (accounts, categories, transactions) with specific get and list operations for each, plus a separate ping utility. The descriptions clearly differentiate between retrieving single items by ID versus listing multiple items with filtering options.

Naming Consistency5/5

All tools follow a perfectly consistent 'up_verb_noun' pattern throughout. The verb-noun combinations are logical and predictable (get_account, list_accounts, get_category, list_categories, etc.), with consistent snake_case formatting. The ping tool also fits this pattern as a special case.

Tool Count5/5

Seven tools is an ideal number for this banking API server. It provides complete coverage for the three core resource types (accounts, categories, transactions) with both get and list operations, plus a connection test utility. Each tool earns its place without being overwhelming or insufficient.

Completeness4/5

The toolset provides excellent read-only coverage for the banking domain with get and list operations for all major resources. The only minor gap is the absence of write operations (create/update/delete transactions or accounts), but this is likely intentional for a banking API focused on data retrieval rather than modification. The surface covers all essential querying workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues