MCP server for the Wise (TransferWise) API. Check balances, exchange rates, recipients, transfers, and quotes.
Wise MCP demonstrates solid tool design with consistent naming (verb_noun pattern), comprehensive parameter descriptions, and proper schema definitions using Zod. All 20 tools are explicitly registered with descriptions and input schemas. Tool annotations (readOnlyHint, destructiveHint) are present. However, output schemas are not documented, responses are JSON-stringified without field-level documentation, forcing LLMs to parse unstructured text. Error handling is minimal; no recovery guidance or actionable error messages visible. Some parameter descriptions could be more prescriptive (e.g., 'details' object in create_recipient lacks field enumeration). Descriptions average ~120 chars, within baseline (p10=34, p90=392). No security issues detected, API token is injected server-side via environment variable.
Cancel a transfer (only possible if not yet completed)
Create a quote for a money transfer. Specify either sourceAmount OR targetAmount (not both). Returns exchange rate, fees, and delivery estimate.
Create a new recipient account. The 'details' object varies by currency/type. Use get_account_requirements first to know which fields are needed.
Create a new transfer. Requires a quote ID and recipient account ID. The customerTransactionId ensures idempotency — reuse the same value when retrying a failed request to avoid duplicate transfers. NOTE: In EU/UK, funding from balance via personal token is restricted by PSD2.
Delete (deactivate) a recipient account
Fund a transfer from your Wise balance. NOTE: This may NOT work with personal tokens in EU/UK due to PSD2 regulations.
Output schemas not documented. Tools return JSON.stringify(result) without field-level documentation. LLMs cannot predict response structure, forcing unstructured parsing and increasing hallucination risk.
Minimal error handling. No recovery guidance, error classification, or actionable messages. LLMs receive raw API errors with no context for retry logic or user-fixable issues.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get the required fields for creating a recipient in a specific currency route. Returns field definitions with validation rules.
Get a specific balance account by ID
Get the estimated delivery date for a transfer
Get the current exchange rate between two currencies
Get historical exchange rates between two currencies over a time period
Get a specific profile by ID
Get an existing quote by ID
Get a specific recipient account by ID
Get a temporary (non-stored) quote to check rates and fees without creating one
Get a specific transfer by ID
List all balance accounts for a profile. Returns currency balances with available amounts. Types: STANDARD (one per currency) or SAVINGS (jars, multiple per currency).
List all profiles (personal and business) associated with your Wise account
List all recipient accounts for a profile, optionally filtered by currency
List transfers for a profile with optional filters
'details' parameter in create_recipient is an untyped object. Description says 'use get_account_requirements first' but does not enumerate required fields. LLMs cannot validate input without field-level schema.
Mutually exclusive parameters (sourceAmount vs targetAmount) in create_quote and get_temporary_quote are documented in description but not enforced. LLMs may pass both, causing ambiguous API calls.
Generic 'get_*' descriptions (e.g., 'Get a specific balance account by ID') lack context on when to use vs list_*. LLMs may choose wrong tool when both are available.