mcpField
S
Stables

Stables

远程服务
docs.stables.money金融数据02 天前更新

关于 Stables

Stables 是面向需要调用 Stables 法币与加密货币 API 的 AI Agent 和应用的 MCP 服务。工具涵盖客户合规、稳定币报价与转账、虚拟账户、余额、文档和 Webhook,并提供托管及本地运行方式。

主要功能

  1. 01管理客户、验证和合规请求
  2. 02创建 USDC 和 USDT 报价
  3. 03验证和跟踪转账
  4. 04管理虚拟账户和支付路由
  5. 05查看余额、文档和 Webhook

适用场景

  1. 01准备稳定币兑换法币的报价
  2. 02查看客户验证状态和合规要求
  3. 03为法币入金创建虚拟账户
  4. 04核对转账及 Webhook 投递

MCP 相关

它通过 11 个类别的 51 种工具向 MCP 客户端提供 Stables API 操作。可使用支持 API 密钥或 OAuth 的托管 HTTP 端点,也可作为本地 stdio 进程运行。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.stables.money/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npmstables-mcp-server2.6.11

工具

详细介绍

Stables MCP 服务

一个 MCP(Model Context Protocol)服务,可将 Stables 法币到加密货币的 API 提供给 AI Agent 使用。借助它,Claude、ChatGPT、Cursor、Codex 等 AI 助手以及其他兼容 MCP 的客户端,可以通过编程方式管理客户、创建 USDC 和 USDT 报价、执行已获批准的转账,并管理虚拟账户。

可用它为 AI Agent 和 Agentic Commerce 构建稳定币支付工作流:付款、虚拟账户入金、资金调拨、法币出金和 webhook 对账。

什么是 MCP?

MCP(Model Context Protocol)是一种开放标准,提供将 AI 应用连接到外部工具和数据源的标准方式。可以把它想象成「AI 的 USB-C 接口」——任何支持 MCP 的 AI 都能使用任何 MCP 服务。

功能

此 MCP 服务提供 11 个类别共 51 个工具,涵盖 docs.stables.money 中记录的每项操作(下文提到的合约测试会对此进行检查):

客户管理
  • create_customer - 创建个人或企业客户
  • create_customer_onboarding_link - 一次调用即可创建客户并生成托管验证链接
  • get_customer - 获取客户详情和验证状态
  • list_customers - 列出所有客户
  • get_verification_link - 生成 KYC 验证链接
  • update_customer - 更新客户详情和权限
  • update_customer_metadata - 更新客户元数据键值对
权限
  • list_available_entitlements - 列出客户仍可申请的产品和支付通道
  • request_entitlements - 为现有客户申请权限(例如 aed_local)
  • submit_entitlement_requirements - 提交 Stables 要求的额外验证材料
合规请求(RFI)
  • list_rfis - 列出机构的 RFI:合规部门在释放被暂扣的付款或验证之前所需的信息
  • list_customer_rfis - 列出某位客户的 RFI
  • get_rfi - 获取单个 RFI、其要求以及每项要求的答复方式
  • get_rfi_evidence_form - 获取 evidence 要求所需的表单
  • submit_rfi_evidence - 提交 evidence 要求所需的答复和文件
  • get_kyc_capabilities - 获取客户拥有的验证能力
文档
  • add_document - 为转账或入金附加发票、合同或其他文件
  • list_documents - 列出转账或入金的相关文件
  • get_document_download_url - 获取文档的短时有效下载链接
  • delete_document - 删除文档
报价
  • create_quote - 获取汇率报价(USDC/USDT 兑换法币)
  • get_quote - 查看报价状态和详情
转账
  • validate_payment_method - 转账前,根据支付通道规则检查付款信息
  • create_transfer - 使用有效报价执行转账,可通过入金付款或从余额中付款
  • get_transfer - 查看转账状态
  • list_transfers - 按筛选条件列出转账
虚拟账户
  • create_virtual_account - 创建用于法币入金的虚拟银行账户
  • list_virtual_accounts - 列出某位客户的虚拟账户,或列出所有客户的虚拟账户
  • update_virtual_account - 更新虚拟账户设置
  • register_route_payid - 在 AUD 付款路由上注册 PayID
  • get_virtual_account_history - 获取支付路由的入金及其付款记录
  • update_route_destination - 更改现有路由的付款钱包
  • list_route_whitelist / add_route_whitelist_account / update_route_whitelist_account - 管理 AUD 路由的来源账户白名单
余额
  • get_balance - 获取机构按资产和网络划分的余额
  • get_balance_wallet / create_balance_wallet - 用于为余额充值的入金钱包
  • list_balance_activity - 列出已计入余额的入金
  • list_pending_balance_deposits - 列出计入余额前被暂扣的入金及原因
  • list_whitelisted_wallets - 列出获准为余额充值的钱包
沙盒
  • simulate_route_deposit - 模拟向支付路由存入法币(仅限沙盒)
  • simulate_transfer_deposit - 模拟入金加密货币,这是出金转账所等待的资金(仅限沙盒)
API 密钥
  • create_api_key - 创建新的 API 密钥
  • list_api_keys - 列出所有 API 密钥
  • get_api_key - 获取 API 密钥详情
  • revoke_api_key - 撤销 API 密钥
Webhook
  • create_webhook - 通过 Webhook 订阅事件
  • list_webhooks - 列出所有 Webhook 订阅
  • delete_webhook - 删除 Webhook 订阅
  • list_webhook_deliveries - 查看近期投递尝试、状态码和重试状态

托管服务(推荐)

该服务以托管服务的形式运行,无需安装任何内容。将 MCP 客户端指向:

https://mcp.stables.money/mcp

然后将 Stables API 密钥作为 bearer token 发送,或通过 OAuth 登录。你在引导流程中获取的密钥就足够了:sti_test_… 密钥访问沙盒,sti_live_… 密钥访问生产环境并处理真实资金。无法保存密钥的客户端(Claude.ai、ChatGPT)可改为登录;请参阅下文。

Claude Code
claude mcp add --transport http stables https://mcp.stables.money/mcp --header "Authorization: Bearer ${STABLES_API_KEY}"
Cursor、VS Code、Windsurf 和其他具有 url 字段的客户端
{
  "mcpServers": {
    "stables": {
      "url": "https://mcp.stables.money/mcp",
      "headers": {
        "Authorization": "Bearer sti_test_..."
      }
    }
  }
}
Codex
[mcp_servers.stables]
url = "https://mcp.stables.money/mcp"
bearer_token_env_var = "STABLES_API_KEY"
Claude.ai、ChatGPT 和其他通过 OAuth 登录的客户端

将 https://mcp.stables.money/mcp 添加为自定义连接器,不填写密钥。客户端会发现服务的 OAuth 端点并注册自身,然后将你带到 Stables 页面,该页面会询问两项内容:连接沙盒还是生产环境,以及是否允许该客户端访问。随后,使用你的 Stables 控制面板账户登录(如果你属于多个组织,还需选择一个组织)。

你可以选择 只读(默认)或 读取并进行更改;选择只读时,Agent 可以查看信息,但在你重新连接并允许更改之前,所有会更改内容的工具都会被拒绝。以此方式连接的 Agent 永远无法创建或撤销 API 密钥。每个工具都会标明为只读或具有破坏性,因此 Claude 等客户端会在每次更改前询问你。Auth0 每次都会要求你提供凭据(以及第二重验证),不会重复使用现有浏览器会话来连接 Agent;如果你属于多个组织,还会询问要使用哪个组织。连接成功后,服务会在该组织中创建一个 API 密钥,名称由客户端名称和登录账户组成(例如 Claude via MCP ([email protected])),并将其用于客户端发起的每次调用。你可以随时在控制面板的 Developer → API keys 下撤销该密钥,这会断开客户端连接。除此之外,不会保存任何内容:登录令牌只用于创建密钥,之后便会丢弃。

  • **Claude.ai / Claude Desktop:**Settings → Connectors → Add custom connector,URL 填写 https://mcp.stables.money/mcp,OAuth 客户端字段保留默认值。
  • **ChatGPT:**Settings → Connectors → Create(developer mode),MCP 服务 URL 填写 https://mcp.stables.money/mcp,身份验证选择 OAuth。
  • **不使用密钥的 Claude Code:**运行 claude mcp add --transport http stables https://mcp.stables.money/mcp,然后运行 /mcp 登录。

OAuth 端点符合标准:/.well-known/oauth-protected-resource/mcp、/.well-known/oauth-authorization-server、/authorize、/oauth/token、/oauth/register。同时支持客户端 ID 元数据文档和动态注册;必须使用 PKCE(S256)。

本地运行

同一服务也可以通过 stdio 作为本地进程运行,npx stables-mcp-server 就是这样运行的。可使用此方式通过 sti_local_… 密钥连接你自己的部署,或在客户端无法访问互联网时使用。

安装
# Install from npm
npm install -g stables-mcp-server

# Or clone and build from source
git clone https://github.com/stables-money/mcp-server.git
cd mcp-server
npm install
npm run build
配置

服务需要以下环境变量:

变量必填说明
STABLES_API_KEY是你的 Stables API 密钥
STABLES_API_URL否API 基础 URL。默认使用你的密钥所属环境(见下文)。必须使用 HTTPS。
你正在使用的环境

Stables 密钥会标明其环境:sti_test_… 是沙盒密钥,sti_live_… 是生产环境密钥,API 会拒绝在错误环境中使用的密钥。因此,你无需设置 URL —— 将 STABLES_API_URL 留空,由密钥决定:

你的密钥请求发送至
sti_test_…https://api.sandbox.stables.money
sti_live_…https://api.stables.money — 真实资金
sti_local_… 或其他任何值生产环境,除非你设置了 STABLES_API_URL

设置 STABLES_API_URL 后,它始终优先,因此你可以借此访问 staging、开发环境或本地部署。

请从沙盒密钥开始。 持有生产环境密钥的 Agent 可以代表你转移真实资金;请参阅Agent 安全。

用法
使用 Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "stables": {
      "command": "npx",
      "args": ["stables-mcp-server"],
      "env": {
        "STABLES_API_KEY": "your-api-key",
        "STABLES_API_URL": "https://api.sandbox.stables.money"
      }
    }
  }
}

然后重启 Claude Desktop。

使用 Cursor、Codex、ChatGPT 或其他 MCP 客户端

在任何兼容 MCP 的客户端中使用相同的命令和环境变量:

{
  "mcpServers": {
    "stables": {
      "command": "npx",
      "args": ["stables-mcp-server"],
      "env": {
        "STABLES_API_KEY": "your-api-key",
        "STABLES_API_URL": "https://api.sandbox.stables.money"
      }
    }
  }
}

Agent 安全

Stables 是金融基础设施。Agent 应创建报价、准备付款对象并核对 webhook,但在创建转账或进行其他资金转移之前,应要求获得明确的人工批准。执行交易操作前,请检查客户的 KYC/KYB 状态和权限;遇到制裁、司法管辖区不受支持、验证或合规失败时,应立即停止。

使用 MCP Inspector(用于测试)
# Set environment variables
export STABLES_API_KEY=your-api-key
export STABLES_API_URL=https://api.sandbox.stables.money

# Run the inspector
npm run inspect
直接执行
STABLES_API_KEY=your-api-key node build/index.js

对话示例

创建客户并获取报价

用户:“为 [email protected] 创建客户,并获取将 1000 USDT 兑换成 EUR 的报价”

AI(使用 MCP 工具):

  1. 使用电子邮件和类型调用 create_customer
  2. 使用源 USDT + 网络、目标 EUR + 国家/地区,以及 destinationNetwork(swift 或 bank)调用 create_quote
  3. 返回客户详情和报价信息
查看转账状态

用户:“我所有待处理转账的状态是什么?”

AI(使用 MCP 工具):

  1. 使用 status=created 或 status=in_progress 调用 list_transfers(状态值为小写)
  2. 返回格式化的进行中转账列表
设置自动付款

用户:“为客户 abc123 创建一条付款路线,将 AUD 入金付到我的 Polygon USDT 钱包 0x...”

AI(使用 MCP 工具):

  1. 使用客户 ID、AUD 源货币和 Polygon 目标调用 create_virtual_account(必须提供付款地址)
  2. 返回可分享给客户的存款说明
向欧洲受益人付款

用户:“向这个德国银行账户支付 500 EUR”

AI(使用 MCP 工具):

  1. 先收集 EUR 付款所需的额外受益人信息 — recipientType、完整地址,以及个人的 dateOfBirth
  2. 调用 create_quote,然后在人类批准后调用 create_transfer

运行托管服务

托管服务是 src/worker.ts(wrangler.toml)中的 Cloudflare Worker。它需要:

  • OAUTH_KV:用于存储 OAuth 客户端、授权和令牌的 KV 命名空间。令牌和密钥以哈希形式存储;授权的 API 密钥经过加密,只有该授权的令牌才能解密。
  • 变量 MCP_PUBLIC_URL、AUTH0_DOMAIN、AUTH0_CLIENT_ID:公共源地址、Auth0 自定义域名,以及「Stables MCP」常规 Web 应用(回调地址为 https://mcp.stables.money/callback)。
  • 密钥 AUTH0_CLIENT_SECRET:该应用的密钥。
  • 密钥 MCP_GATEWAY_SIGNING_SECRET:与 API 网关的 IP 授权器共享。Worker 没有固定的出口 IP,因此会为每个转发请求签名(X-Stables-Mcp-Signature),生产环境接受此签名以替代源 IP 检查。没有该密钥时,生产环境会拒绝通过托管服务发出的网关调用;沙盒不受影响。
wrangler secret put AUTH0_CLIENT_SECRET
wrangler secret put MCP_GATEWAY_SIGNING_SECRET

如果没有 OAUTH_KV,Worker 将仅使用 bearer 密钥运行,单元测试会以这种方式对其进行测试。

开发

# Watch mode for development
npm run dev

# Build for production
npm run build

# Run tests
npm test

# Run linter
npm run lint

# Format code
npm run format

# Test with MCP Inspector
npm run inspect

项目结构

stables-mcp-server/
├── src/
│   ├── index.ts              # Main entry point
│   ├── lib/
│   │   ├── stables-client.ts # Stables API client (with retries, timeouts)
│   │   └── stables-client.test.ts
│   └── tools/
│       ├── customers.ts      # Customer management tools (7)
│       ├── entitlements.ts   # Entitlement tools (3)
│       ├── compliance.ts     # RFI and KYC capability tools (6)
│       ├── documents.ts      # Transfer and deposit document tools (4)
│       ├── quotes.ts         # Quote tools (2)
│       ├── transfers.ts      # Transfer tools (4)
│       ├── virtual-accounts.ts # Payment route tools (9)
│       ├── balances.ts       # Balance tools (6)
│       ├── api-keys.ts       # API key tools (4)
│       ├── webhooks.ts       # Webhook tools (3)
│       └── sandbox.ts        # Sandbox deposit simulation (2)
├── package.json
├── tsconfig.json
├── vitest.config.ts
├── eslint.config.js
└── README.md

API 参考

客户工具
create_customer

创建新客户,用于 KYC 和转账。

参数类型必填描述
emailstring是客户的电子邮箱
customerType"individual" | "business"是客户类型
firstNamestring否名字(个人客户)
lastNamestring否姓氏(个人客户)
companyNamestring否公司名称(企业客户)
entitlementsstring[]否要申请的权益(例如,["base_payout", "virtual_account"])
get_customer

获取客户详情。

参数类型必填描述
customerIdstring是客户 ID
list_customers

列出已认证租户的所有客户。无需参数。

get_verification_link

生成 KYC 验证链接。

参数类型必填描述
customerIdstring是客户 ID
ttlInSecsnumber否链接过期时间,单位为秒(默认值:1800)
successUrlstring否验证成功后的重定向 URL
rejectUrlstring否验证被拒后的重定向 URL
update_customer

更新客户详情或权益。

参数类型必填描述
customerIdstring是客户 ID
emailstring否更新后的电子邮箱
phonestring否更新后的电话
firstNamestring否更新后的名字
lastNamestring否更新后的姓氏
entitlementsstring[]否更新后的权益
update_customer_metadata

更新客户元数据键值对。

参数类型必填描述
customerIdstring是客户 ID
metadataobject是要设置的键值对
报价工具
create_quote

获取货币兑换报价(加密货币兑换为法定货币)。

参数类型必填描述
fromCurrency"USDC" | "USDT"是来源加密货币
fromAmountstring是要兑换的金额
fromNetwork"ethereum" | "polygon" | "polygon-amoy"是区块链网络
toCurrencystring是目标货币(例如,"EUR")
toCountrystring是目标国家/地区代码(例如,"GR")
paymentMethodType"SWIFT" | "LOCAL"是出款支付方式
get_quote

获取报价详情。

参数类型必填描述
quoteIdstring是报价 ID
转账工具
create_transfer

根据报价执行转账。

ParameterTypeRequiredDescription
customerIdstringYes客户 ID
quoteIdstringYes要执行的报价 ID
accountHolderNamestringNo银行账户持有人姓名
ibanstringNoIBAN
accountNumberstringNo银行账号
bankNamestringNo银行名称
bankCountrystringNo银行国家/地区代码
bankCurrencystringNo收款币种
accountType"savings" | "checking" | "payment"No账户类型
swiftCodestringNoSWIFT/BIC 代码
routingNumberstringNoABA 路由号码(美国)
sortCodestringNoSort 代码(英国)
ifscCodestringNoIFSC 代码(印度)
bsbCodestringNoBSB 代码(澳大利亚)
get_transfer

获取转账状态。

ParameterTypeRequiredDescription
transferIdstringYes转账 ID
list_transfers

列出符合筛选条件的转账。

ParameterTypeRequiredDescription
statusstringNo按状态筛选
typestringNo按类型筛选
customerIdstringNo按客户筛选
pageSizenumberNo每页结果数
pageTokenstringNo分页令牌
虚拟账户工具
create_virtual_account

创建虚拟银行账户。

ParameterTypeRequiredDescription
customerIdstringYes客户 ID
sourceCurrencystringYes币种(例如,“USD”)
depositHandlingModestringNo"auto_payout"、"hold" 或 "manual"
destinationAddressstringNo加密货币钱包地址
destinationPaymentRailstringNo区块链网络
destinationCurrencystringNo稳定币(默认值:"usdc")
list_virtual_accounts

列出客户的虚拟账户。

ParameterTypeRequiredDescription
customerIdstringYes客户 ID
statusstringNo按状态筛选
limitnumberNo最大结果数
update_virtual_account

更新虚拟账户设置。

ParameterTypeRequiredDescription
customerIdstringYes客户 ID
virtualAccountIdstringYes虚拟账户 ID
depositHandlingModestringYes新的存款处理模式
get_virtual_account_history

获取虚拟账户的活动历史记录。

ParameterTypeRequiredDescription
customerIdstringYes客户 ID
virtualAccountIdstringYes虚拟账户 ID
limitnumberNo返回的最大事件数
eventTypestringNo按事件类型筛选
API 密钥工具
create_api_key

创建新的 API 密钥。

ParameterTypeRequiredDescription
namestringYes密钥的描述性名称
metadataobjectNo可选元数据
list_api_keys

列出所有 API 密钥。

ParameterTypeRequiredDescription
pageSizenumberNo每页结果数
pageTokenstringNo分页令牌
get_api_key

获取 API 密钥详情。

ParameterTypeRequiredDescription
apiKeyIdstringYesAPI 密钥 ID
revoke_api_key

撤销 API 密钥(永久)。

ParameterTypeRequiredDescription
apiKeyIdstringYesAPI 密钥 ID
Webhook 工具
create_webhook

通过 webhook 订阅事件。

ParameterTypeRequiredDescription
namestring是Webhook 名称
urlstring是HTTPS 端点 URL
eventTypesstring[]是要订阅的事件
secretstring否HMAC-SHA256 签名密钥

可用事件类型:

  • WEBHOOK_EVENT_TYPE_CUSTOMER_CREATED
  • WEBHOOK_EVENT_TYPE_CUSTOMER_UPDATED
  • WEBHOOK_EVENT_TYPE_KYC_STATUS_CHANGED
  • WEBHOOK_EVENT_TYPE_PAYMENT_CREATED
  • WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED
  • WEBHOOK_EVENT_TYPE_QUOTE_CREATED
  • WEBHOOK_EVENT_TYPE_QUOTE_EXPIRED
  • WEBHOOK_EVENT_TYPE_VA_DEPOSIT_RECEIVED
  • WEBHOOK_EVENT_TYPE_VA_PAYOUT_COMPLETED
  • WEBHOOK_EVENT_TYPE_VA_PAYOUT_FAILED
  • WEBHOOK_EVENT_TYPE_ALL
list_webhooks

列出所有 webhook 订阅。无需参数。

delete_webhook

删除 webhook 订阅。

ParameterTypeRequiredDescription
webhookIdstring是Webhook 订阅 ID

安全

  • API 密钥仅从环境变量读取
  • API URL 必须使用 HTTPS(启动时强制检查)
  • 不向 stderr 输出调试日志(否则会破坏 MCP STDIO 传输)
  • 使用 Zod schema 验证所有输入
  • 请求超时(30s)可防止连接挂起
  • 对暂时性故障进行自动重试,并采用指数退避

许可证

MIT

链接

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。