Wise MCP server for AI agents

Live

BEARER TOKEN

MONEY TRANSFERS

Accounting & Finance

Wise gives your agent money transfers on each user's Wise account: quote and create transfers, fund them from balances, manage recipients and batch payments, and read balances, statements, and exchange rates.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Wise
agent · Acme Q3
Run
Which transfers are still waiting for funds?
S
wise_list_transfers
109ms
Treasury agent
3 transfers are waiting for funds, 4,850 GBP in total. The oldest is to Lumen Studio from 2 days ago.
Sources: Wise transfers, 3 pending
wise
3 transfers
18:29
Message Claude...

Tools your treasury agent reaches for on Wise, scoped per user.

CALL ANY TOOL
32 tools for money transfers on Wise: create quotes and transfers, fund them from balances, run batch payments, manage recipients, and read balances, statements, and exchange rates.
wise_cancel_transfer
Cancel transfer
Cancel a Wise transfer that is still waiting for funds. Returns the transfer with its updated status. Only transfers in the incoming_payment_waiting state can be cancelled; others return 409 Conflict. Use wise_get_transfer first to check the status.
Parameters
Name
Type
Required
Description
transfer_id
integer
Required
Numeric ID of the transfer to cancel. Example: 16521632.
wise_compare_prices
Compare prices
wise_convert_between_balances
Convert between balances
wise_create_balance
Create balance
wise_create_batch_group
Create batch group
wise_create_batch_group_transfer
Create batch group transfer
wise_create_quote
Create quote
wise_create_recipient
Create recipient
wise_create_transfer
Create transfer
wise_deactivate_recipient
Deactivate recipient
wise_fund_batch_group
Fund batch group
wise_fund_transfer
Fund transfer
wise_get_balance
Get balance
wise_get_balance_statement
Get balance statement
wise_get_batch_group
Get batch group
wise_get_exchange_rates
Get exchange rates
wise_get_quote
Get quote
wise_get_recipient
Get recipient
wise_get_recipient_requirements
Get recipient requirements
wise_get_total_funds
Get total funds
wise_list_activities
List activities
wise_list_balances
List balances
wise_list_currencies
List currencies
wise_list_profiles
List profiles
wise_list_recipients
List recipients
wise_list_transfer_payments
List transfer payments
wise_list_transfers
List transfers
wise_update_batch_group
Update batch group
wise_update_quote
Update quote
wise_validate_transfer_requirements
Validate transfer requirements

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Wise tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wise"], toolNames: [
    "wise_list_transfers",
    "wise_create_quote",
    "wise_create_transfer"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Send 2,000 USD to our Berlin contractor in EUR" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wise"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Send 2,000 USD to our Berlin contractor in EUR" }],
  tools,
});

// Execute the tool call with the user's vaulted Wise access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wise"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Send 2,000 USD to our Berlin contractor in EUR" }],
  tools,
});

// Tool call runs with the user's vaulted Wise access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wise"] }, pageSize: 100,
});

const agent = new Agent({
  name: "treasury_agent",
  model: "gemini-2.5-pro",
  instruction: "Wise tools scoped to this user",
  tools,
});

await agent.run("Send 2,000 USD to our Berlin contractor in EUR");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Wise tool. Click to copy, paste into your agent, done.
Transfers
Copy the prompt
Copied
Quote 2,000 USD to EUR for our Berlin contractor.
Copy the prompt
Copied
Create the transfer to Lumen Studio from that quote.
Copy the prompt
Copied
Cancel the transfer to Lumen Studio that is still waiting for funds.
Balances
Copy the prompt
Copied
List our balances and their current amounts.
Copy the prompt
Copied
Get the EUR balance statement for last month.
Copy the prompt
Copied
Convert 1,000 GBP from our GBP balance to EUR.
Recipients and batches
Copy the prompt
Copied
Which details does Wise need to add a recipient in Mexico?
Copy the prompt
Copied
List our saved EUR recipients.
Copy the prompt
Copied
Create a batch group for this month's contractor payouts.
SEE HOW AUTH WORKS
Each user connects their own Wise access token once, and Scalekit sends it with every call. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Wise
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Wise
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Wise
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Wise
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other payments and finance connectors.
GTM and RevOps Teams
Revenue forecast commentary
Pulls open pipeline from Salesforce and HubSpot, calculates coverage against quota, flags at-risk stages, posts commentary to Slack, and logs every snapshot to Google Sheets.
Test other agents
See the same per-user auth pattern across other payments and finance connectors.
GTM
Revenue forecast agent
Score pipeline coverage against quota across Salesforce and HubSpot, post forecast commentary to Slack, log snapshots to Sheets.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Wise access token looks fine in a demo. In production every quote, transfer, and funding step looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Wise today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Wise as the user or through a shared token?
As the user. Each user connects their own Wise access token once, and Scalekit sends it with every call. Every quote, transfer, and funding action is attributed to that user in your audit trail, not a shared service account.
Where is the Wise access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Wise?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the balance, rate, and transfer read tools without wise_fund_transfer, which sends the money, or wise_deactivate_recipient. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Wise access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which Wise profile does the agent act on?
A Wise account can hold a personal and a business profile. wise_list_profiles returns every profile that belongs to the connected user, and the balance, transfer, and recipient tools take a profile ID, so the agent picks the profile before it reads balances or creates a transfer.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""wise"": {
""url"": ""https://mcp.scalekit.com/wise"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.wise]
url = ""https://mcp.scalekit.com/wise""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""wise"": {
""url"": ""https://mcp.scalekit.com/wise"",
""type"": ""http""
}
}
}