monzo-mcp
Provides tools to interact with Monzo banking API, including listing accounts, retrieving balances, viewing transactions, managing pots, and annotating transactions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@monzo-mcpshow my recent transactions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
monzo-mcp
A TypeScript MCP server for interacting with the Monzo API from Claude Desktop or any other MCP client.
What is MCP?
MCP (Model Context Protocol) is an open standard that lets AI assistants discover and call tools exposed by local or remote servers. In this project, Claude Desktop launches a local Node.js process, sends JSON-RPC messages over standard input/output, and that process turns tool calls into HTTPS requests to Monzo.
+----------------+ JSON-RPC over stdio +----------------+ HTTPS +-----------+
| Claude Desktop | <---------------------------> | Monzo MCP | <------------> | Monzo API |
| (MCP client) | | Server | | |
+----------------+ +----------------+ +-----------+Related MCP server: Monzo Claude Connector
Setup
Clone the repo.
Install dependencies:
npm installCreate a Monzo developer app at https://developers.monzo.com.
Set the redirect URI to
http://localhost:3000/callbackSet the client type to confidential
Copy
.env.exampleto.envand fill in your client ID and client secret.cp .env.example .envComplete the OAuth flow.
Visit this exact authorization URL after replacing
YOUR_CLIENT_ID:https://auth.monzo.com/?client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost:3000/callback&response_type=code&state=random123Approve access in Monzo. Monzo redirects back to:
http://localhost:3000/callback?code=YOUR_AUTH_CODE&state=random123Copy the
codevalue and exchange it for tokens:curl --request POST https://api.monzo.com/oauth2/token \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'client_secret=YOUR_CLIENT_SECRET' \ --data-urlencode 'redirect_uri=http://localhost:3000/callback' \ --data-urlencode 'code=YOUR_AUTH_CODE'Copy the returned
access_tokenandrefresh_tokeninto.env. The server will also persist refreshed tokens intotokens.jsonautomatically.
Building and running
Build the server:
npm run buildRun it manually if you want to test stdio startup:
npm startAdding to Claude Desktop
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS:
{
"mcpServers": {
"monzo": {
"command": "node",
"args": [
"/absolute/path/to/monzo-mcp/dist/index.js"
]
}
}
}Replace /absolute/path/to/monzo-mcp/dist/index.js with your real path after building. The server reads .env from the repository root, so you can keep secrets out of the Claude Desktop config file.
Available tools
Tool | Description |
| List Monzo accounts available to the authenticated user. |
| Read the available balance, total balance, and today's spend for an account. |
| List transactions for an account with optional date filters and limit. |
| Fetch the full details for a specific transaction. |
| Add a note to a transaction's metadata. |
| Fetch up to 100 transactions and filter by merchant or description locally. |
| List pots linked to an account. |
| Move money from an account into a pot. |
| Move money from a pot back into an account. |
Security notes
OAuth tokens are stored in
tokens.json, which is gitignored.Never commit
.envor real tokens.This MCP server is intended to run locally on your machine.
For personal use, local disk token storage is standard; production deployments should use a proper secrets manager.
Available Tools
9 toolsannotate_transactionA
Add a note to a transaction's metadata
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | The note to add to transaction metadata | |
| transaction_id | Yes | The transaction ID to annotate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing side effects, but it only says 'Add a note...' It does not clarify whether the note appends to existing notes or replaces them, whether the operation is reversible or idempotent, or what authorization or response behavior to expect. This leaves the agent uncertain about the mutation's exact effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It states the operation and target in a single clear phrase, so every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the input model is clear and fully schematized. However, with no annotations and no output schema, the definition leaves gaps about the mutation behavior and expected result, making it workable but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both `transaction_id` and `notes` include meaningful descriptions, so the schema already documents the parameters. The tool description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Add') and resource ('a note to a transaction's metadata'), so an agent knows exactly what this operation does. It is clearly distinct from sibling tools that list/get/search transactions or move money into/out of pots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: use this tool when a note needs to be attached to a transaction's metadata. However, it does not explicitly state when not to use it or name alternatives, leaving the guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deposit_to_potB
Move money from an account into a Monzo pot
| Name | Required | Description | Default |
|---|---|---|---|
| pot_id | Yes | The pot ID to deposit into | |
| account_id | Yes | The source account ID | |
| amount_pounds | Yes | Amount to deposit in pounds, for example 12.34 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description must disclose behavioral traits, but it does not. It fails to state that this is a write operation, that it will alter account and pot balances, or that it may have side effects like fees or reversibility. The verb 'move' vaguely implies a state change but offers no detail on consequences, making it dangerously opaque for a financial mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the action and resource. No filler or redundant phrasing; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a money-moving tool with no output schema and no annotations, the description is underspecified. It omits critical context such as that the operation debits the source account and credits the pot, potential failure modes (e.g., insufficient funds, invalid pot), or whether confirmation is returned. An agent may not anticipate these outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (pot_id, account_id, amount_pounds) already described. The tool description adds no additional meaning about parameter relationships or format beyond the schema, so it meets the baseline for high coverage without adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('move') and resource ('money from an account into a Monzo pot'), making the tool's purpose immediately obvious. It also differentiates from the sibling withdraw_from_pot by specifying direction, so an agent can distinguish without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool relative to alternatives. There's no mention of prerequisites, conditions for depositing, or a pointer to withdraw_from_pot for the reverse operation. The agent is left to infer usage solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceC
Get the balance for a Monzo account
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | The Monzo account ID to inspect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. 'Get' implies a read operation and suggests the tool does not modify data, but the description does not state that explicitly. It also doesn't clarify what kind of balance is returned, in what units or currency, or whether pending transactions are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler or irrelevant details. It is front-loaded and concise, though it could have packed in more useful guidance about behavior or return value without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one well-documented required parameter, so the description is minimally adequate for invocation. However, with no output schema and no annotations, the description should say more about what 'balance' means (available/current/cleared), the units/currency, and that account_id is likely obtained from list_accounts. These gaps prevent it from being complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes account_id as 'The Monzo account ID to inspect'. The tool description adds no additional parameter context, but because the schema fully documents the only parameter, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and a specific resource ('the balance for a Monzo account'), so an agent can tell this is a read-only balance lookup rather than a transaction or account listing tool. It is not maximally detailed because it doesn't clarify whether this is the available, current, or cleared balance, nor does it explicitly differentiate from siblings, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool instead of siblings like list_accounts or list_transactions. It also doesn't mention that account_id comes from list_accounts or any prerequisite/context. The intended usage is only implied by the tool name and description, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionA
Get the full details of a specific Monzo transaction
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | The transaction ID to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. 'Get' implies a read operation, but the description does not explicitly state that it has no side effects, what the return format is, or how errors are handled. It adds little beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler words. It conveys the essential purpose and scope efficiently, and every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter get-by-ID tool, the description is adequate but not complete. There is no output schema and no description of the return structure; it also does not guide the agent on how this tool relates to list_transactions or search_transactions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter transaction_id is already described as 'The transaction ID to fetch'. The description does not add meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), the resource ('a specific Monzo transaction'), and the scope ('full details'). The word 'specific' distinguishes this from sibling list/search tools, so an agent can tell it apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for fetching one transaction by ID, especially given the required transaction_id parameter. However, it does not explicitly say when to use it versus list_transactions or search_transactions, nor does it mention any alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List Monzo accounts available to the user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states scope ('available to the user'); it does not mention authentication requirements, whether the operation is read-only, what fields are returned, or any ordering/pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler and the core action is front-loaded. It is appropriately sized for a zero-parameter listing operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with no parameters, the description is minimally viable. However, since there is no output schema and no mention of what fields are returned or how account IDs are used by downstream sibling tools, an agent cannot fully predict how to consume the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% coverage, so there is nothing for the description to add about parameter meaning or formats. This matches the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('Monzo accounts') and adds a useful scope qualifier ('available to the user'). This clearly distinguishes it from sibling tools that operate on balances, transactions, or pots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit or implicit guidance about when to choose this tool over siblings such as get_balance or list_transactions, and no prerequisites or exclusions are mentioned. An agent would have to infer that listing accounts is the natural first step before account-scoped calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_potsB
List Monzo pots linked to an account
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | The account ID whose pots should be listed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not explicitly state that this is a read-only operation, nor does it describe what happens with an invalid account_id, whether results are paginated, or what pot properties are returned. The verb 'List' implies non-mutation, but this is not an explicit disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that front-loads the action and resource. Every word is necessary and there is no filler, redundancy, or over-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool, the description covers the core action, but it omits expected return shape (no output schema) and does not tell the agent how to source a valid account_id. The absent output schema suggests the description should mention what a 'pot' listing contains; this is a clear but non-critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the sole parameter account_id with a descriptive comment, giving 100% coverage. The tool description adds no extra parameter semantics beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses an active verb (List) with a specific resource (Monzo pots) and clear scope (linked to an account). It is immediately distinguishable from sibling tools like list_accounts, which return accounts, and deposit/withdraw tools, which modify pots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention prerequisites such as obtaining a valid account_id from list_accounts, nor does it say when a different tool would be more appropriate. The description only states the action, not the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transactionsC
List recent transactions for an account
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of transactions to return (default 20) | |
| since | No | Optional RFC3339/ISO timestamp lower bound | |
| before | No | Optional RFC3339/ISO timestamp upper bound | |
| account_id | Yes | The account ID to list transactions for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the only behavioral signal. It communicates that this is a read ('List') operation but does not disclose ordering semantics of 'recent', pagination behavior beyond the schema default, or any account-access expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to identifying what the tool does, and the key action and object appear first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a four-parameter schema and no output schema, the description says nothing about default behavior, interpretation of 'recent', or how this differs from search_transactions. An agent is left without enough context to choose it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already explains account_id, limit, since, and before. The description adds no parameter semantics beyond labeling the list as 'recent'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with a clear resource ('recent transactions for an account'), so an agent can tell what the tool targets. However, it doesn't explicitly distinguish this from sibling search_transactions or get_transaction, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. With a sibling named search_transactions, the description should state whether list_transactions is for simple recent listings and search is for filtered/advanced queries, but it leaves that entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transactionsA
Search transactions by merchant or description text
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Case-insensitive text to match | |
| since | No | Optional RFC3339/ISO timestamp lower bound | |
| before | No | Optional RFC3339/ISO timestamp upper bound | |
| account_id | Yes | The account ID to search |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It only states the matching fields and does not describe result shape, ordering, pagination, matching semantics (e.g., substring vs exact), or any other runtime behavior beyond 'search'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler words. Every word contributes: the action, the resource, and the search criteria are all immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description omits information an agent would need to use the tool effectively, such as return format, pagination, or ordering. It also lacks routing guidance relative to list_transactions, making the overall tool description incomplete for a 4-parameter search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying that the 'query' parameter is matched against merchant or description text, which is not explicitly captured in the schema's generic 'Case-insensitive text to match' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search'), names the resource ('transactions'), and states the search criteria ('by merchant or description text'). This clearly distinguishes it from sibling tools like list_transactions, which would list rather than text-search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for finding transactions by text, but it does not explicitly say when to prefer this tool over list_transactions or get_transaction, nor does it mention any exclusions. Usage context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdraw_from_potC
Move money from a Monzo pot back into an account
| Name | Required | Description | Default |
|---|---|---|---|
| pot_id | Yes | The pot ID to withdraw from | |
| account_id | Yes | The destination account ID | |
| amount_pounds | Yes | Amount to withdraw in pounds, for example 12.34 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It states a money-moving mutation but does not mention prerequisites, side effects, reversibility, failure modes, or whether the transfer is internal-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repetition. Every word adds meaning and it is appropriately sized for the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, this one-line description is too thin. It lacks information about prerequisites, expected response, and edge cases, leaving an agent to infer important operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds no extra parameter meaning, but the schema's property descriptions are sufficient to reach the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Move money from a Monzo pot back into an account.' It clearly identifies a transfer operation and is unambiguous about direction, though it does not explicitly name or contrast the sibling deposit_to_pot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention that deposit_to_pot is the inverse operation or that list_pots/list_accounts may be needed first to obtain valid IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
annotate_transaction - First observed
deposit_to_pot - First observed
get_balance - First observed
get_transaction - First observed
list_accounts - First observed
list_pots - First observed
list_transactions - First observed
search_transactions - First observed
withdraw_from_pot
TDQS
Scored across 9 tools
Most tools are clearly distinct: accounts, balances, transactions, and pots each have separate operations. The only minor overlap is between list_transactions and search_transactions, though the search tool's merchant/description filtering gives it a different purpose.
Tool names follow a consistent snake_case verb_noun pattern throughout, such as list_accounts, get_balance, and annotate_transaction. Even multi-word actions like deposit_to_pot and withdraw_from_pot follow a predictable and readable structure.
Nine tools is a well-scoped size for a personal banking API server. Each tool covers a distinct core operation without unnecessary bloat, and the set feels appropriately bounded for the domain.
The toolset covers account listing, balance checks, transaction viewing/searching/annotating, and pot deposits/withdrawals, which covers most common Monzo workflows. It lacks pot creation/deletion and account-level transfers, but these are reasonable minor gaps rather than critical dead ends.
Maintenance
Related MCP Connectors
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
- BankSyncOAuthio.banksync
Connect AI agents to bank accounts, transactions, balances, and investments.
- ManiloOAuthapp.ledgy.api
Log, query, and edit expenses, budgets, and accounts in Manilo (formerly Ledgy) from any MCP-compatible AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceGive Claude AI read-only access to your Monzo bank account through the Model Context Protocol, enabling insights into spending, balances, and transactions via natural conversation.MIT
- AlicenseNot gradedqualityCmaintenanceA remote MCP server on Cloudflare Workers that gives Claude read-only access to your Monzo account, enabling balance checks, transaction listing, and pot management via natural language.MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables interaction with Monzo bank accounts for balance checking, transaction management, pot operations, and reconciliation through natural language.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access Wise multi-currency account data, including balances, transactions, transfers, and card purchases via MCP protocol.MIT