Skip to main content
Glama

MCP2ANP Bridge Server

MCP2ANP

MCP to ANP Bridge Server - 让任何支持 MCP 的应用,像"本地工具"一样访问 ANP 智能体

Python 3.11+ License: MIT

概述

MCP2ANP 是一个 MCP 桥接服务器,将 ANP (Agent Network Protocol) 的"爬虫式"交互范式转换为 MCP (Model Control Protocol) 工具,使 Claude Desktop、Cursor、各类 IDE 等 MCP 客户端无需改造即可访问 ANP 智能体。

核心特性

  • 🔧 两个核心工具: anp.fetchDocanp.invokeOpenRPC

  • 🔐 DID 认证支持: 本地 DID 文档和私钥管理

  • 🌐 协议适配: ANP 爬虫式交互 ↔ MCP 工具式交互

  • 🚀 双模式支持: 本地 stdio 模式 + 远程 HTTP API 模式

  • 📊 结构化日志: 完整的操作追踪和调试信息

  • 🧪 全面测试: 单元测试和集成测试覆盖

运行模式

  • 本地模式(stdio): 通过标准输入输出与 MCP 客户端通信,适用于 Claude Desktop 等桌面应用

  • 远程模式(HTTP): 通过 FastAPI 提供 HTTP API,支持远程调用,使用 API Key 进行鉴权

详见 远程服务器文档

架构设计

flowchart LR subgraph MCP Client U[LLM / 前端] -->|call tool| T1[anp.fetchDoc] U -->|call tool| T2[anp.invokeOpenRPC] U -->|optional| T0[anp.setAuth] end subgraph MCP2ANP Bridge T0 --> AC[ANPCrawler创建/更新] T1 --> AC T2 --> AC AC --> DID[DID认证] DID --> AGL[agent-connect库] end subgraph ANP Side AGL -->|HTTP+DID| D1[AgentDescription] AGL -->|HTTP+DID| D2[Informations] AGL -->|HTTP+DID| D3[Interfaces] AGL -->|JSON-RPC+DID| E1[OpenRPC Endpoint] end

快速开始

安装

# 克隆项目 git clone git@github.com:agent-network-protocol/mcp2anp.git cd mcp2anp # 创建 Python 3.11 虚拟环境 uv venv --python 3.11 # 安装依赖 uv sync

启动服务器

本地模式(stdio)

# 使用统一CLI uv run mcp2anp local --log-level INFO # 或使用专用命令 uv run mcp2anp-local --log-level INFO # 开发模式(带热重载) uv run mcp2anp local --reload --log-level DEBUG

远程模式(HTTP API)

# 设置API Key(必需) export MCP2ANP_API_KEY="your-secret-api-key" # 启动远程服务器 uv run mcp2anp remote --host 0.0.0.0 --port 8000 # 或使用专用命令 uv run mcp2anp-remote

详细的远程模式使用方法请参见 远程服务器文档

运行官方 Demo(推荐)

项目提供了基于 MCP 官方 SDK 的完整客户端演示脚本,能够从启动服务器到调用所有工具一次跑通。推荐使用下列命令直接体验:

uv run python examples/mcp_client_demo.py

该脚本会通过 stdio 启动 mcp2anp.server,依次演示 anp.setAuthanp.fetchDocanp.invokeOpenRPC。如需与真实 ANP 服务联调,请确保本地或远程 JSON-RPC 端点可达。

Claude code中添加此mcp server

助于:下面的路径需要更改为你自己路径

在mcp2anp目录安装

cd mcp2anp claude mcp add mcp2anp \ --env ANP_DID_DOCUMENT_PATH=docs/did_public/public-did-doc.json \ --env ANP_DID_PRIVATE_KEY_PATH=docs/did_public/public-private-key.pem \ -- uv run python -m mcp2anp.server

在其他目录安装

claude mcp add mcp2anp \ --env ANP_DID_DOCUMENT_PATH=/Users/cs/work/mcp2anp/docs/did_public/public-did-doc.json \ --env ANP_DID_PRIVATE_KEY_PATH=/Users/cs/work/mcp2anp/docs/did_public/public-private-key.pem \ -- uv run --directory /Users/cs/work/mcp2anp python -m mcp2anp.server

基本使用

  1. 设置认证(可选):

    { "didDocumentPath": "docs/did_public/public-did-doc.json", "didPrivateKeyPath": "docs/did_public/public-private-key.pem" }

    注:如果不调用setAuth,系统会自动使用docs/did_public/中的公共DID凭证

  2. 获取 ANP 文档:

    { "url": "https://agent-connect.ai/agents/travel/mcp/agents/amap/ad.json" }
  3. 调用 OpenRPC 方法:

    { "endpoint": "https://example.com/rpc", "method": "searchLocations", "params": { "query": "北京天安门", "city": "北京" } }

工具说明

注意: anp.setAuth 工具已移除。系统现在自动使用环境变量或默认的公共 DID 凭证进行认证。

anp.fetchDoc

获取并解析 ANP 文档,提取可跟进的链接。这是访问 ANP 生态中 URL 的唯一入口

输入:

  • url: 要获取的 ANP 文档 URL

输出:

  • contentType: 内容类型

  • text: 原始文本内容

  • json: 解析的 JSON 内容(如适用)

  • links: 可跟进的链接列表

anp.invokeOpenRPC

调用 OpenRPC 端点的 JSON-RPC 2.0 方法。

输入:

  • endpoint: OpenRPC 端点 URL

  • method: 要调用的方法名

  • params: 方法参数(可选)

  • id: 请求 ID(可选)

输出:

  • result: 方法返回结果

  • raw: 原始 JSON-RPC 响应

项目结构

. ├── mcp2anp/ # 核心服务实现 │ ├── __main__.py # 统一CLI入口 │ ├── server.py # 本地stdio模式服务器 │ ├── server_remote.py # 远程HTTP模式服务器 │ ├── core/ # 共享核心模块 │ │ └── handlers.py # ANP工具处理逻辑 │ └── utils/ # 公共模型与日志工具 │ ├── logging.py │ └── models.py ├── examples/ # 官方示例与辅助脚本 │ ├── mcp_client_demo.py # ⭐ 推荐:使用官方 MCP SDK 的客户端演示 │ ├── test_with_local_server.py │ ├── README.md │ └── SDK_MIGRATION.md ├── docs/ # 文档与示例配置 │ ├── usage.md │ ├── REMOTE_SERVER.md # 远程服务器文档 │ ├── did_public/ │ │ ├── public-did-doc.json │ │ └── public-private-key.pem │ └── examples/ │ ├── anp-agent-description.example.json │ ├── did-document.example.json │ ├── openrpc-interface.example.json │ └── private-key.example.pem ├── assets/ # 参考资源(图示、日志等) ├── spec.md # 协议说明草案 ├── run_tests.sh # 本地测试脚本 ├── pyproject.toml # 构建与依赖配置 ├── uv.toml # uv 设置 └── uv.lock # 依赖锁定文件

开发

环境准备

# 安装开发依赖 uv sync --group dev # 安装 pre-commit hooks pre-commit install

运行测试

# 运行所有测试 uv run pytest # 运行特定测试 uv run pytest tests/unit/test_tools.py -v # 运行测试并生成覆盖率报告 uv run pytest --cov=mcp2anp --cov-report=html

代码质量

# 格式化代码 uv run black mcp2anp/ tests/ # 代码检查 uv run ruff mcp2anp/ tests/

使用示例

官方 MCP 客户端 Demo(examples/mcp_client_demo.py

examples/mcp_client_demo.py 通过 MCP 官方 SDK 的 stdio_client 启动 mcp2anp.server 并串联所有工具,是最快速了解桥接工作方式的脚本:

uv run python examples/mcp_client_demo.py

脚本会自动:

  • 列出 mcp2anp 暴露的工具

  • 使用 docs/did_public/ 内的公共凭证调用 anp.setAuth

  • 访问 anp.fetchDoc 并展示返回的链接

  • 调用 anp.invokeOpenRPCechogetStatus 方法验证回路

如需与真实环境交互,可将脚本中的测试 URL 替换为目标 ANP 服务地址。

完整的酒店预订工作流

# 1. 设置认证 await set_auth_tool.execute({ "didDocumentPath": "docs/examples/did-document.json", "didPrivateKeyPath": "docs/examples/private-key.pem" }) # 2. 获取智能体描述 agent_info = await fetch_doc_tool.execute({ "url": "https://grand-hotel.com/agents/hotel-assistant/ad.json" }) # 3. 获取预订接口规范 interface_spec = await fetch_doc_tool.execute({ "url": agent_info["links"][0]["url"] # 第一个接口链接 }) # 4. 搜索可用房间 rooms = await invoke_openrpc_tool.execute({ "endpoint": "https://grand-hotel.com/api/booking", "method": "searchRooms", "params": { "checkIn": "2025-10-01", "checkOut": "2025-10-03", "guests": 2 } }) # 5. 确认预订 booking = await invoke_openrpc_tool.execute({ "endpoint": "https://grand-hotel.com/api/booking", "method": "confirmBooking", "params": { "checkIn": "2025-10-01", "checkOut": "2025-10-03", "roomType": "standard", "guestInfo": { "name": "张三", "email": "zhangsan@example.com" } } })

配置

环境变量

  • ANP_LOG_LEVEL: 日志级别 (DEBUG, INFO, WARNING, ERROR)

  • ANP_TIMEOUT: HTTP 请求超时时间(秒)

  • ANP_MAX_RETRIES: 最大重试次数

命令行选项

  • --log-level: 设置日志级别

  • --reload: 启用热重载(开发模式)

安全注意事项

  • ⚠️ DID 私钥保护: 不要将私钥文件提交到版本控制

  • 🔒 本地运行: 服务器仅在本地运行,不暴露到网络

  • 🛡️ 输入验证: 所有工具输入都经过 Pydantic 验证

  • 📝 审计日志: 所有操作都有详细的结构化日志

贡献

  1. Fork 本仓库

  2. 创建功能分支 (git checkout -b feature/amazing-feature)

  3. 提交更改 (git commit -m 'Add amazing feature')

  4. 推送到分支 (git push origin feature/amazing-feature)

  5. 打开 Pull Request

提交规范

  • 使用 Google Python 编码规范

  • 确保所有测试通过: uv run pytest

  • 运行代码检查: uv run ruff mcp2anp/ tests/

  • 保持 ≥90% 测试覆盖率

许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

相关项目

支持

Deploy Server
-
security - not tested
A
license - permissive license
-
quality - not tested

local-only server

The server can only run on the client's local machine because it depends on local resources.

Enables MCP clients like Claude Desktop to interact with ANP (Agent Network Protocol) agents through three core tools: authentication setup, document fetching, and OpenRPC method invocation. Converts ANP's crawler-style interaction paradigm into MCP-compatible tools for seamless agent communication.

  1. 概述
    1. 核心特性
    2. 运行模式
  2. 架构设计
    1. 快速开始
      1. 安装
      2. 启动服务器
      3. 运行官方 Demo(推荐)
      4. Claude code中添加此mcp server
      5. 在mcp2anp目录安装
      6. 在其他目录安装
      7. 基本使用
    2. 工具说明
      1. anp.fetchDoc
      2. anp.invokeOpenRPC
    3. 项目结构
      1. 开发
        1. 环境准备
        2. 运行测试
        3. 代码质量
      2. 使用示例
        1. 官方 MCP 客户端 Demo(examples/mcp_client_demo.py)
        2. 完整的酒店预订工作流
      3. 配置
        1. 环境变量
        2. 命令行选项
      4. 安全注意事项
        1. 贡献
          1. 提交规范
        2. 许可证
          1. 相关项目
            1. 支持

              MCP directory API

              We provide all the information about MCP servers via our MCP API.

              curl -X GET 'https://glama.ai/api/mcp/v1/servers/agent-network-protocol/mcp2anp'

              If you have feedback or need assistance with the MCP directory API, please join our Discord server