使用说明
英国开放银行MCP服务器
一个基于Java 21+和Spring Boot 3的模型上下文协议(MCP)服务器,它集成了英国开放银行API与Claude桌面应用,实现了与银行账户、余额、交易和支付的自然语言交互。
目录
特点/特性
开放银行能力
-
账户信息(AISP)
- 检索所有银行账户
- 获取账户余额
- 按日期筛选获取交易记录
-
支付启动(PISP)
- 发起国内支付
- 支持英镑转账
MCP协议支持
- 完整的JSON-RPC 2.0实现
- 工具发现与调用
- Claude Desktop的Stdio通信桥
- 错误处理和验证
建筑学
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────────┐
│ Claude Desktop │ ◄─────► │ MCP Stdio Bridge │ ◄─────► │ Spring Boot Server │
│ │ stdio │ (McpStdioBridge) │ HTTP │ (Port 8080) │
└─────────────────┘ └──────────────────┘ └─────────────────────┘
│
▼
┌─────────────────────┐
│ UK Open Banking │
│ APIs │
└─────────────────────┘
先决条件
- Java 21及以上版本 (推荐 Java 25)
- Maven 3.8及以上版本
- Claude Desktop(可译为“克劳德桌面版”或根据具体语境简化为“克劳德桌面”,但为保持原名特色,通常直接音译加说明性描述) (最新版本)
- 英国开放银行凭证 (来自您银行的开发者门户)
检查先决条件
# Check Java version
java -version # Should be 21 or higher
# Check Maven
mvn -version
# Check Claude Desktop is installed
ls -la "/Applications/Claude.app"
安装
1. 克隆或创建项目
mkdir -p ~/dev/learning/openbanking-mcp-server/
cd ~/dev/learning/openbanking-mcp-server/
这会产生: target/OpenBankingMcpServerApplication-0.0.1-SNAPSHOT.jar
2. 创建Stdio桥接器
创造 McpStdioBridge.java 在项目根目录下并进行编译:
cd ~/dev/learning/mcpserver
# Copy the McpStdioBridge.java content from the artifact
javac McpStdioBridge.java
配置
环境变量
创建一个 .env 文件(可选):
# Open Banking Configuration
export OPENBANKING_CLIENT_ID="your_client_id"
export OPENBANKING_CLIENT_SECRET="your_client_secret"
export OPENBANKING_API_BASE_URL="https://api.sandbox.yourbank.co.uk"
export OPENBANKING_FINANCIAL_ID="your_financial_id"
# MCP Bridge Configuration
export MCP_SERVER_URL="http://localhost:8081/mcp"
export DEBUG="false"
加载环境:
source .env
获取开放银行凭证
- 注册成为开发者 与一家英国银行合作(例如,国民西敏寺银行、劳埃德银行、巴克莱银行)
- 创建一个应用程序 在他们的开发者门户中
- 获取凭据:
- 客户端ID
- 客户端密钥
- 金融身份证(或金融识别码)
- API 基础 URL
- 配置OAuth重定向URI:
http://localhost:8080/login/oauth2/code/openbanking
英国热门银行开发者门户
- 国民西敏寺银行/苏格兰皇家银行 (NatWest/RBS) https://bankofapis.com/ 翻译为中文是:“https://api银行.com/”(注:实际翻译时,“bankofapis.com”作为一个特定网站名,通常不直接翻译,但为了说明其含义,可理解为“API银行”的网站,因此这里做了意译处理,实际使用时可能需要根据具体情况调整)。不过,更常见的做法是直接保留原网址不变,因为网址是专有名词,直接使用即可
运行服务器
直接运行
cd ~/dev/learning/mcpserver
mvn spring-boot:run
验证服务器是否正在运行
# Check port
lsof -i :8081
# Test endpoint
curl -X POST http://localhost:8081/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}'
预期响应:包含4个工具的JSON列表。
Claude 桌面集成
1. 定位Claude桌面配置
# macOS
~/Library/Application Support/Claude/claude_desktop_config.json
# Create directory if it doesn't exist
mkdir -p ~/Library/Application\ Support/Claude
2. 配置MCP服务器
编辑 claude_desktop_config.json:
选项A:使用编译后的.class文件
{
"mcpServers": {
"uk-openbanking": {
"command": "java",
"args": [
"-cp",
"/Users/YOUR_USERNAME/dev/learning/openbanking-mcp-server/bridge",
"McpStdioBridge"
],
"env": {
"MCP_SERVER_URL": "http://localhost:8081/mcp",
"DEBUG": "false"
}
}
}
}
重要提示: 替换您实际的 macOS 文件位置!
3. 重启Claude桌面版
4. 验证连接
在Claude桌面版的右下角寻找⚡️图标。点击它即可查看:
- UK-OpenBanking(英国开放银行) 应显示为“已连接”
- 绿色指示灯亮起表示它正在工作
测试
手动测试(命令行)
测试1:初始化连接
echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test","version":"1.0"}},"id":1}' | java McpStdioBridge
测试2:列出工具
echo '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}' | java McpStdioBridge
测试3:调用工具(没有有效令牌将失败)
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_accounts","arguments":{"access_token":"test_token"}},"id":1}' | java McpStdioBridge
使用Postman进行测试
导入这些请求:
收藏集: 英国开放银行MCP服务器
-
初始化
- POST(邮政)
http://localhost:8080/mcp - 正文:
{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}
- POST(邮政)
-
列出工具
- POST(邮政服务)
http://localhost:8080/mcp - 正文:
{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}
- POST(邮政服务)
-
获取账户
- POST(邮政)
http://localhost:8080/mcp - 正文:
{ "jsonrpc":"2.0", "method":"tools/call", "params":{ "name":"get_accounts", "arguments":{"access_token":"YOUR_TOKEN"} }, "id":1 } - POST(邮政)
在Claude桌面端进行测试
一旦连接成功,请尝试以下自然语言查询:
What banking tools do you have available?
Can you list my bank accounts? (requires valid OAuth token)
Show me the balance of account 12345678 (requires valid OAuth token)
使用示例
示例1:检查可用工具
用户: “你们有哪些开放银行工具?”
克劳德回应:
I have access to 4 UK Open Banking tools:
1. get_accounts - Retrieve all bank accounts
2. get_balances - Get account balances for specific account
3. get_transactions - Fetch transactions with date filtering
4. initiate_payment - Initiate domestic GBP payments
示例2:获取账户余额
用户: “给我看看我的账户余额”
克劳德: 将尝试调用 get_balances 工具。注:需要有效的OAuth访问令牌。
示例3:分析支出
用户: “我上个月在食品杂货上花了多少钱?”
克劳德: 将致电 get_transactions 选择合适的时间范围,然后分析结果。
示例4:进行支付
用户: “我需要向账号12345678支付500英镑,银行代码为12-34-56。”
克劳德: 凭电话叫号领取 initiate_payment 确认后提供详细信息。
API 文档
可用工具
1. 获取账户信息
描述: 获取已验证用户的全部银行账户
参数:
access_token(字符串,必填):OAuth2 访问令牌
返回值: 包含ID、类型和标识符的账户列表
2. 获取余额
描述: 获取特定账户的余额
参数:
account_id(字符串,必填):账户标识符access_token(字符串,必填):OAuth2 访问令牌
返回值: 余额信息,包括金额、货币种类和类型
3. 获取交易记录(或“获取交易”)
描述: 检索指定日期范围内的交易
参数:
account_id(字符串,必填):账户标识符access_token(字符串,必填):OAuth2 访问令牌
返回: 包含金额、日期和描述的交易列表
4. 发起支付
描述: 发起国内支付
参数:
amount(字符串,必填):支付金额currency(字符串,必填):货币代码(例如,“GBP”)creditor_account_number(字符串,必填):收款人账号creditor_sort_code(字符串,必填):收款人排序代码reference(字符串,可选):付款参考信息access_token(字符串,必填):OAuth2 访问令牌
返回值: 带有状态的支付启动响应
MCP协议方法
initialize- 建立连接tools/list- 获取可用工具tools/call- 调用一个工具resources/list- 列出资源(空)prompts/list- 列出提示(为空)
项目结构
mcpserver/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/openbanking/mcp/
│ │ │ ├── OpenBankingMcpServerApplication.java
│ │ │ ├── controller/
│ │ │ │ └── McpController.java
│ │ │ ├── service/
│ │ │ │ └── OpenBankingService.java
│ │ │ ├── model/
│ │ │ │ ├── McpRequest.java
│ │ │ │ ├── McpResponse.java
│ │ │ │ └── openbanking/
│ │ │ │ ├── Account.java
│ │ │ │ ├── Balance.java
│ │ │ │ └── Transaction.java
│ │ │ └── config/
│ │ │ └── SecurityConfig.java
│ │ └── resources/
│ │ └── application.yml
├── target/
│ └── OpenBankingMcpServerApplication-0.0.1-SNAPSHOT.jar
├── McpStdioBridge.java
├── McpStdioBridge.class
├── mcp-bridge.jar (optional)
├── pom.xml
└── README.md
