HUp.NET.Mcp
1.1.0
dotnet tool install --global HUp.NET.Mcp --version 1.1.0
dotnet new tool-manifest
dotnet tool install --local HUp.NET.Mcp --version 1.1.0
#tool dotnet:?package=HUp.NET.Mcp&version=1.1.0
nuke :add-package HUp.NET.Mcp --version 1.1.0
<div align="center">
Up.NET
<img alt="Up API" src="https://github.com/up-banking/api/raw/master/assets/up-api.jpg" />
.NET API wrapper for Up Bank
Native AOT Compatible | Zero Reflection | Source-Generated JSON Serialization
</div>
Installation
dotnet add package HUp.NET
Quick Start
using Up.NET.Api;
var upApi = new UpApi("your-personal-access-token");
// Verify your token
var ping = await upApi.GetPingAsync();
Console.WriteLine($"Authenticated as: {ping.Data.Meta.Id}");
// List accounts
var accounts = await upApi.GetAccountsAsync();
foreach (var account in accounts.Data.Data)
{
Console.WriteLine($"{account.Attributes.DisplayName}: {account.Attributes.Balance.Value}");
}
// Get recent transactions
var transactions = await upApi.GetTransactionsAsync(pageSize: 10);
foreach (var tx in transactions.Data.Data)
{
Console.WriteLine($"{tx.Attributes.Description}: {tx.Attributes.Amount.Value}");
}
API Coverage
Full coverage of the Up API (v1).
| Endpoint | Method |
|---|---|
| Accounts | GetAccountsAsync(), GetAccountAsync(id) |
| Transactions | GetTransactionsAsync(), GetTransactionAsync(id), GetTransactionsAsync(accountId) |
| Categories | GetCategoriesAsync(), GetCategoryAsync(id), CategorizeTransactionAsync() |
| Tags | GetTagsAsync(), AddTagsToTransactionAsync(), RemoveTagsFromTransactionAsync() |
| Attachments | GetAttachmentsAsync(), GetAttachmentAsync(id) |
| Webhooks | GetWebhooksAsync(), GetWebhookAsync(id), CreateWebhookAsync(), DeleteWebhookAsync(), PingWebhookAsync(), GetWebhookLogsAsync() |
| Utility | GetPingAsync() |
Pagination
All paginated responses include a GetNextPageAsync() helper:
var transactions = await upApi.GetTransactionsAsync(pageSize: 50);
while (transactions.Data?.Links?.Next != null)
{
// Process current page
foreach (var tx in transactions.Data.Data)
{
Console.WriteLine(tx.Attributes.Description);
}
// Fetch next page
transactions = await transactions.Data.GetNextPageAsync(upApi);
}
Filtering
// Filter accounts by type
var savers = await upApi.GetAccountsAsync(accountType: AccountType.Saver);
// Filter transactions by date range and status
var settled = await upApi.GetTransactionsAsync(
status: TransactionStatus.Settled,
since: DateTime.Now.AddDays(-30),
until: DateTime.Now
);
// Filter by category or tag
var groceries = await upApi.GetTransactionsAsync(category: "groceries");
var tagged = await upApi.GetTransactionsAsync(tag: "holiday");
Native AOT Support
Up.NET is fully compatible with .NET Native AOT compilation, making it ideal for:
- iOS/Android apps via .NET MAUI
- Serverless functions with minimal cold start
- CLI tools with instant startup
- Embedded/IoT scenarios
The library uses source-generated JSON serialization with zero runtime reflection, ensuring predictable performance and smaller binary sizes.
dotnet publish -c Release -p:PublishAot=true
Getting Your API Token
- Download the Up app and create an account
- Get your Personal Access Token at https://api.up.com.au
MCP Server
The included .NET MCP server exposes all 20 Up API v1 endpoint operations as tools over stdio. It also includes a tool that safely follows the opaque pagination links returned by list operations.
Install it as a global .NET tool:
dotnet tool install --global HUp.NET.Mcp
up-mcp auth login
The login command validates the token and stores it in Windows Credential Manager, macOS Keychain, or the Linux Secret Service. The token is not written to a configuration file.
up-mcp auth status
up-mcp auth logout
Use dotnet tool update --global HUp.NET.Mcp to update an existing installation.
Example MCP client configuration for the global tool:
{
"mcpServers": {
"up-bank": {
"command": "up-mcp"
}
}
}
On Linux, a desktop Secret Service such as GNOME Keyring, KWallet, or KeePassXC must be available. For CI, containers, and other headless systems, inject UP_ACCESS_TOKEN from the platform's secret manager instead.
Run from source
$env:UP_ACCESS_TOKEN = "your-personal-access-token"
dotnet run --project Up.NET.Mcp
Build once before adding the server to an MCP client:
dotnet build Up.NET.Mcp -c Release
Example MCP client configuration when running from source:
{
"mcpServers": {
"up-bank": {
"command": "dotnet",
"args": [
"C:\\Repos\\Hona\\Up.NET\\Up.NET.Mcp\\bin\\Release\\net10.0\\Up.NET.Mcp.dll"
],
"env": {
"UP_ACCESS_TOKEN": "your-personal-access-token"
}
}
}
}
Links
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.