开放银行MCP服务器

一个基于Java 21+和Spring Boot 3的MCP服务器,集成英国开放银行API,支持通过自然语言交互查询银行账户、余额、交易和支付。

  • by Frictionlessdev
  • Java
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Frictionlessdev/openbanking-mcp-server

使用说明

英国开放银行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

获取开放银行凭证

  1. 注册成为开发者 与一家英国银行合作(例如,国民西敏寺银行、劳埃德银行、巴克莱银行)
  2. 创建一个应用程序 在他们的开发者门户中
  3. 获取凭据:
    • 客户端ID
    • 客户端密钥
    • 金融身份证(或金融识别码)
    • API 基础 URL
  4. 配置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服务器

  1. 初始化

    • POST(邮政) http://localhost:8080/mcp
    • 正文: {"jsonrpc":"2.0","method":"initialize","params":{},"id":1}
  2. 列出工具

    • POST(邮政服务) http://localhost:8080/mcp
    • 正文: {"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}
  3. 获取账户

    • POST(邮政) http://localhost:8080/mcp
    • 正文:
    {
      "jsonrpc":"2.0",
      "method":"tools/call",
      "params":{
        "name":"get_accounts",
        "arguments":{"access_token":"YOUR_TOKEN"}
      },
      "id":1
    }
    

在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