Skip to main content
Glama
CurrencyTransfer MCP Server

CurrencyTransfer MCP Server

Official

mcp-currencytransfer

MCP server for the CurrencyTransfer API. Lets AI assistants trade FX, manage beneficiaries, check balances, request quotes, and configure rate alerts, market orders and RSI alerts/market orders.

Prerequisites

  • Node.js 22 or newer (tested on Node 22 and 24 LTS)

  • A CurrencyTransfer account with API credentials

Related MCP server: Mono Banking MCP Server

Setup

git clone https://github.com/currencytransfer/mcp-currencytransfer.git
cd mcp-currencytransfer
npm install
npm run build

Environment variables

Variable

Required

Description

CT_API_KEY

Yes

Your CurrencyTransfer account ID (Basic auth username)

CT_API_SECRET

Yes

Your CurrencyTransfer API key (Basic auth password)

CT_ENV

No

Which environment to connect to: production, stage, or beta. Defaults to stage so an incomplete config never acts on a live account. This is the preferred way to select an environment.

CT_BASE_URL

No

Advanced override of the full base URL. Wins over CT_ENV. A URL that isn't one of the three known environments is only accepted when CT_DEV_MODE is set (e.g. a local mock). Embedded credentials (user:pass@host) are always rejected.

CT_DEV_MODE

No

Set to 1 to permit loopback (localhost/127.0.0.1) and other non-standard CT_BASE_URL hosts for local development. Never set in production.

CT_ENABLE_WRITES

No

Set to 1 to expose mutating (financial write) tools. Off by default — the server ships read-only.

CT_ENABLE_UNVERIFIED

No

Set to 1 to expose RSI tools, whose routes are absent from the public API contract. Off by default.

Choosing an environment

Select the tier by name with CT_ENV:

CT_ENV

Base URL

production

https://app.currencytransfer.com/api/v1

stage (default)

https://stage.currencytransfer.com/api/v1

beta

https://beta.currencytransfer.com/api/v1

Each tier has its own credentials, so run one server instance per environment. In your MCP host, add a separate entry per tier — e.g. "CurrencyTransfer (Prod)" with CT_ENV=production and its production key, and "CurrencyTransfer (Stage)" with CT_ENV=stage and its stage key. Don't try to switch tiers within a single running server. On startup the server logs the resolved environment to stderr so a prod/stage mix-up is immediately visible.

Supported surface

By default the server registers only read-only tools. Financial write tools (create/update/delete beneficiaries, payments, trades, quotes, alerts, top-ups) are hidden and rejected unless CT_ENABLE_WRITES=1. RSI market-order tools are disabled unless CT_ENABLE_UNVERIFIED=1. Disabled tools are absent from discovery and rejected if invoked directly.

MCP client configuration

This server uses stdio transport. Your MCP client will start it automatically — you do not need to run it in a terminal.

Add the following to your client's MCP config file. Most clients nest servers under an mcpServers key; VS Code's native .vscode/mcp.json uses servers instead (see the VS Code note below).

Client

Config file

Top-level key

Cursor

.cursor/mcp.json or ~/.cursor/mcp.json

mcpServers

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS)

mcpServers

VS Code

.vscode/mcp.json (native MCP support)

servers

Windsurf

.windsurf/mcp_config.json

mcpServers

{
  "mcpServers": {
    "currencytransfer": {
      "command": "node",
      "args": ["<git-repo-clone-location>/mcp-currencytransfer/dist/stdio.js"],
      "env": {
        "CT_API_KEY": "your-account-id",
        "CT_API_SECRET": "your-api-key",
        "CT_ENV": "stage"
      }
    }
  }
}

For VS Code, use servers instead of mcpServers:

{
  "servers": {
    "currencytransfer": {
      "command": "node",
      "args": ["<git-repo-clone-location>/mcp-currencytransfer/dist/stdio.js"],
      "env": {
        "CT_API_KEY": "your-account-id",
        "CT_API_SECRET": "your-api-key"
      }
    }
  }
}

Restart your MCP client after saving the config. The server should then appear in the client's MCP settings or tool list.

Tools

The server exposes tools for:

  • Currencies — tradable pairs, RSI pairs, payment methods, cut-off times

  • Countries — supported countries and payment methods

  • User — authenticated user profile and permissions

  • Quotes — FX quote requests

  • Trades — create, list, and manage trades and documents

  • Beneficiaries — manage payment beneficiaries

  • Balances — account balances

  • Rate alerts — standard and RSI (MOEX) rate alerts and market orders

Available Tools

51 tools
check_payment_purpose_requiredA

Checks if a payment purpose is required when creating a payment to a specific beneficiary.

Inputs: uuid (required).

create_beneficiaryB

Creates a new beneficiary (recipient bank account).

Inputs: nickname (required), type (required), currency (required), bank_account_country (required), +17 more.

create_beneficiary_email_requestB

Sends an email to a beneficiary asking them to provide their bank account details.

Inputs: email (required), currency (required), bank_account_country (required), nickname.

create_quoteA

Creates a quote for a currency exchange. Returns broker quotations valid for 15 seconds. Use refresh_quote to get new quotations after expiry.

Inputs: sell_currency (required), buy_currency (required), side (required), amount (required), +3 more.

create_rate_alertA

Creates a rate alert. When the market rate reaches target_rate, you are notified. If book=true the trade is automatically booked.

Inputs: sell_currency (required), buy_currency (required), side (required), amount (required), +7 more.

create_rsi_alertA

Creates an RSI (MOEX) market order. Triggers when the RSI indicator for the currency pair reaches target_rsi. Optionally auto-books the trade and splits the total amount into tranches.

Inputs: sell_currency (required), buy_currency (required), side (required), amount (required), +11 more.

create_tradeA

Books a trade using a broker quotation UUID. The client must agree to terms. Broker quotations expire after 15 seconds — use refresh_quote if needed.

Inputs: broker_quotation_uuid (required), agree_to_terms (required).

create_trade_paymentB

Creates a payment for a trade, allocating funds to a beneficiary.

Inputs: trade_uuid (required), beneficiary_uuid (required), amount (required), reference, +3 more.

delete_beneficiaryC

Soft-deletes a beneficiary.

Inputs: uuid (required).

delete_beneficiary_email_requestB

Cancels a pending beneficiary email request.

Inputs: uuid (required), request_uuid (required).

delete_rate_alertB

Cancels and deletes a rate alert.

Inputs: uuid (required).

delete_rsi_alertC

Cancels and deletes an RSI (MOEX) market order.

Inputs: uuid (required).

delete_trade_documentA

Deletes an attached invoice or proof of settlement document from a trade.

Inputs: trade_uuid (required), uuid (required).

delete_trade_paymentB

Deletes a payment from a trade.

Inputs: trade_uuid (required), uuid (required).

get_address_requirementsB

Returns address requirements for all countries.

Inputs: no named parameters.

get_address_requirements_by_countryC

Returns address requirements for a specific country.

Inputs: country_code (required).

get_balance_deposit_detailsC

Returns bank account details for depositing funds to top up a balance.

Inputs: no named parameters.

get_bank_account_fieldsC

Returns required bank account fields per currency and country combination.

Inputs: currency, bank_account_country.

get_beneficiaryC

Returns detailed information about a specific beneficiary.

Inputs: uuid (required).

get_currency_holidaysA

Returns holidays for each currency that affect settlement dates.

Inputs: no named parameters.

get_currency_pairsA

Returns currency pairs the user is allowed to trade and the earliest delivery date for each pair.

Inputs: no named parameters.

get_rate_alertC

Returns details of a specific rate alert.

Inputs: uuid (required).

get_rsi_alertA

Returns details of a specific RSI (MOEX) market order.

Inputs: uuid (required).

get_rsi_currency_pairsA

Returns currency pairs the user is allowed to create RSI (MOEX market order) alerts with.

Inputs: no named parameters.

get_same_currency_transfersB

Returns information about supported same-currency transfer options.

Inputs: no named parameters.

get_supported_countriesB

Returns all countries supported by the platform.

Inputs: no named parameters.

get_supported_currenciesA

Returns all currencies supported by the platform.

Inputs: no named parameters.

get_tradeA

Returns detailed information about a specific trade including settlement accounts and documents.

Inputs: uuid (required).

get_trade_metadataC

Returns metadata for a specific trade.

Inputs: uuid (required).

get_trade_paymentA

Returns details of a specific payment within a trade.

Inputs: trade_uuid (required), uuid (required).

get_userA

Returns information about the current authenticated trading user, including permissions, activated features, and relationship manager details.

Inputs: no named parameters.

initiate_balance_paymentC

Initiates a payment from a balance account.

Inputs: uuid (required), beneficiary_uuid (required), amount (required), reference, +1 more.

list_balancesB

Returns balance information for all accounts.

Inputs: no named parameters.

list_beneficiariesC

Returns a paginated list of beneficiaries.

Inputs: page, per_page, currency, order.

list_beneficiary_email_requestsB

Returns email requests sent to a beneficiary asking them to provide bank account details.

Inputs: uuid (required).

list_beneficiary_paymentsC

Returns a list of payments made to a specific beneficiary.

Inputs: uuid (required), page, per_page.

list_rate_alertsB

Returns a list of rate alerts (target-rate market orders). Active alerts auto-book a trade when the target rate is reached if book=true.

Inputs: page, per_page, status.

list_rsi_alertsC

Returns a list of RSI (MOEX) market orders. These trigger automatically when the RSI indicator reaches the target_rsi threshold.

Inputs: page, per_page, status.

list_trade_paymentsC

Returns a list of payments associated with a trade.

Inputs: trade_uuid (required), page, per_page.

list_tradesB

Returns a paginated list of trades.

Inputs: page, per_page, buy_currency, sell_currency, +4 more.

refresh_quoteA

Refreshes broker quotations for an existing quote after the 15-second validity window has expired.

Inputs: uuid (required).

update_beneficiaryC

Updates an existing beneficiary.

Inputs: uuid (required), nickname, email, line1, +5 more.

update_beneficiary_email_requestC

Updates and resends a pending beneficiary email request.

Inputs: uuid (required), request_uuid (required), email, currency, +1 more.

update_rate_alertC

Updates an existing rate alert.

Inputs: uuid (required), target_rate, expiration_date, note, +2 more.

update_rsi_alertC

Updates an existing RSI (MOEX) market order.

Inputs: uuid (required), expiration_date, minimal_rate, book_remaining_amount_on_expiration, +3 more.

update_trade_paymentC

Updates an existing payment within a trade.

Inputs: trade_uuid (required), uuid (required), amount, reference, +3 more.

upload_trade_documentB

Uploads an invoice or proof of settlement document for a trade.

Inputs: trade_uuid (required), category (required), file_name (required), content_type (required), +1 more.

validate_beneficiaryB

Validates beneficiary parameters before creating. Returns any validation errors.

Inputs: nickname, type, currency, bank_account_country, +7 more.

validate_rate_alertA

Validates rate alert parameters before creating or updating. Returns any validation errors.

Inputs: sell_currency, buy_currency, side, amount, +4 more.

validate_trade_paymentC

Validates payment parameters before creating a payment for a trade.

Inputs: trade_uuid (required), beneficiary_uuid (required), amount (required), reference, +2 more.

verify_beneficiaryC

Verifies a beneficiary bank account (e.g. CoP check in the UK).

Inputs: uuid, account_number, sort_code, iban, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 51 tools

    Disambiguation5/5

    Each tool targets a specific resource-action pair (e.g., create_beneficiary, validate_beneficiary, verify_beneficiary). Even closely related tools are differentiated by their verb, leaving no ambiguity.

    Naming Consistency5/5

    All tool names follow the verb_noun pattern in snake_case (e.g., create_quote, refresh_quote, get_trade). The convention is strictly applied across all 51 tools.

    Tool Count3/5

    With 51 tools, the server offers comprehensive coverage of currency exchange operations, but the large number may overwhelm agents and could be modularized into smaller, focused servers.

    Completeness4/5

    The tool surface covers core CRUD for beneficiaries, trades, payments, alerts, and metadata queries. Minor gaps exist (e.g., no delete_trade or update_trade, no list_quotes), but the essential workflow is fully supported.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI tools to manage financial operations through the Cresium Partner API, including transactions, payments, invoices, and wallet balances. It supports secure workflows such as bank address lookups, transfer previews, and signature request management.
      12
      5
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to perform Nigerian banking operations including account management, payments, and identity verification through the Mono Open Banking API.
      59
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Bridges AI assistants with the Revolut Business API to enable banking operations such as listing accounts, checking balances, viewing transactions, managing counterparties, and initiating transfers through natural language.
      88 npm
      38
      MIT