arcade-mcp
厂商中立的 MCP 服务器 Python 框架,用装饰器 API 快速构建 AI Agent 可调用的工具,带 OAuth 授权工具调用机制
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
厂商中立的 MCP 服务器 Python 框架,用装饰器 API 快速构建 AI Agent 可调用的工具,带 OAuth 授权工具调用机制
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:Arcade AI 官方 Logo
2024年4月,一个名为 Arcade AI 的团队在 GitHub 上悄悄开源了一个框架。他们没有举办发布会,没有铺天盖地的 PR 稿,却在短短一年内吸引了近千名开发者关注,获得 924 颗 GitHub Stars。这个框架的名字叫 arcade-mcp——一个专门用来构建 MCP(Model Context Protocol)服务器的 Python 框架。
故事要从一个让所有 AI 开发者都头疼的问题说起:当你用 Claude、GPT 或者国产大模型写了一个 Agent,想要让它「帮我查 GitHub 最新 issue」「给 Slack 发条消息」「读取公司内部 API」——你会发现,这个看似简单的需求,实际上需要写大量重复的胶水代码,处理 OAuth 认证、token 刷新、错误重试、协议对接……每个工具都要重新来一遍。更糟糕的是,你的 Agent 可能同时需要调用 10 个不同的服务,这意味着你可能需要维护 10 套完全不同的集成代码。
Arcade MCP 就是来解决这个问题的。
很多开发者第一眼看到 arcade-mcp,会误以为它又是一个类似 LangChain 或 AutoGen 的 Agent 开发框架。实际上,这是一个完全不同的定位。arcade-mcp 的核心职责是:帮助开发者构建符合 MCP 规范的服务器(Server),让这些服务器可以被任何 MCP Client(即 AI Agent)无缝调用。
MCP(Model Context Protocol)是 Anthropic 在 2024 年初提出的开放协议,目标是建立 AI 与数据源/工具之间的标准通信规范。你可以把它理解为「AI 世界的 USB 接口」——无论你的 USB 设备是什么品牌,只要符合 USB 协议,就能插上电脑工作。类似地,无论你用 Claude、GPT、国产大模型还是自己写的 Agent,只要它们支持 MCP Client,就能调用任何符合 MCP 规范的服务器提供的工具。
Arcade MCP 的核心价值就在于此:它是一个「Vendor-neutral」(厂商中立)的框架。你不需要绑定任何特定的 AI 提供商,也不需要选择某个特定的 Agent 框架。LangChain、Mastra、Pydantic AI、CrewAI、Google ADK、OpenAI Agents……都可以通过 MCP 协议调用 arcade-mcp 构建的工具。这解决了 AI 领域一个由来已久的「锁定焦虑」——你今天用 LangChain 写的工具,明天换一个框架就要重写,这在 Arcade MCP 中不再发生。
arcade-mcp 的设计哲学是「让简单的事情保持简单」。从代码示例来看,构建一个 MCP 工具的体验非常接近 Flask 的路由装饰器:
from arcade_mcp_server import MCPApp
from arcade_mcp_server.metadata import Behavior, Operation, ToolMetadata
app = MCPApp("EchoServer")
@app.tool(
metadata=ToolMetadata(
behavior=Behavior(
operations=[Operation.READ],
read_only=True,
destructive=False,
idempotent=True,
open_world=False,
),
),
)
def echo(message: str) -> str:
return message
if __name__ == "__main__":
app.run(transport="http")
仅仅 20 行代码,一个符合 MCP 规范的 Echo 服务器就完成了。而这个极简示例背后,MCPApp 类封装了完整的 MCP 协议实现,包括 JSON-RPC 消息处理、工具调用路由、参数验证、错误处理等。开发者不需要了解协议细节,只需要定义业务逻辑。
ToolMetadata 是 arcade-mcp 设计中的一个亮点——它允许开发者声明工具的「行为特征」(Behavior):是读操作还是写操作?是否幂等?是否会产生副作用?是否访问开放世界(外部网络)?这些元数据对于 AI Agent 正确决策至关重要。当一个 Agent 知道自己即将调用的工具「是只读的、幂等的、不访问外部网络的」,它就能更安全地使用它。
如果只是提供装饰器 API,arcade-mcp 只是一个「更好的 MCP 实现」。真正让它与众不同的是 Authorized Tool Calling——授权工具调用机制。
在传统的 AI 工具集成中,如果你想写一个「读取我的 GitHub 仓库」的工具,通常需要把 GitHub API Token 直接暴露给 Agent。这带来了显而易见的安全风险:Agent(或控制 Agent 的人)可以用这个 Token 访问你授权范围之外的数据。OAuth 协议虽然能解决这个问题,但自己实现 OAuth 流程(获取 Token、刷新过期 Token、管理 Scope)又非常繁琐。
Arcade MCP 的解决方案是:requires_auth=GitHub(scopes=["repo"])。开发者只需要声明工具需要哪个 OAuth Provider 和哪些权限范围,Arcade 框架就会自动处理完整的 OAuth 流程,包括 Token 获取、自动刷新、以及每次调用时按需注入相应 Scope 的 Token。更重要的是,Client(AI Agent)和 LLM 本身永远看不到真实的 OAuth Token——Token 只在 Arcade 的服务端流动。
这种设计在安全性和易用性之间找到了一个难得的最佳平衡点。它解决了 AI 工具集成中最棘手的信任问题:如何让 AI 使用你的凭证,同时确保它只能做你授权的事情。
从仓库结构来看,arcade-mcp 绝非一个「玩具项目」。它采用了 uv workspace monorepo 架构,将框架拆分为四个独立但协作的库:arcade-core(核心运行时)、arcade-tdk(工具开发套件)、arcade-serve(服务端运行时)和 arcade-mcp-server(MCP 协议实现)。这种拆分使得每一层都可以独立演进和测试。
代码质量方面,仓库强制使用 mypy 严格模式(disallow_any_unimported = true、disallow_untyped_defs = true),不允许任何未声明类型的函数,也不允许隐式 Optional。这意味着 Arcade 团队对类型安全有近乎苛刻的要求——这在 Python 项目中相当罕见。同时,项目使用 pre-commit 钩子处理格式化(ruff、prettier)和代码质量检查,CI 流水线覆盖所有 Pull Request。
测试方面,项目使用 pytest + pytest-asyncio 处理异步测试,覆盖率报告通过 pytest-cov 生成并在 CI 中强制检查。从 pyproject.toml 的配置来看,测试文件统一放在 libs/tests/ 目录下,每个 lib 包都有独立的测试套件。
arcade evals 子命令是另一个值得关注的特性——它提供了测试工具调用准确性的评估框架,支持对真实 LLM 进行评测。这对于构建可靠的生产级 AI Agent 至关重要:你可以用 evals 来验证你的 MCP 工具是否按预期工作,是否能被不同 LLM 正确理解和调用。
arcade-mcp 不只是一个代码库,它配套提供了完整的部署工具链。
本地开发极为简单:uv sync 安装依赖,arcade CLI 启动服务。uv_setup.sh 脚本自动化了环境配置流程(检测 uv、检查 Python 版本、创建虚拟环境),开发者几乎不需要手动配置。对于习惯 conda 的用户,只需在已有 Python 3.10+ 环境中 pip install arcade-mcp 即可。
Docker 部署通过 examples/docker-template/ 提供模板。模板中包含一个基于 ghcr.io/astral-sh/uv:python3.11-bookworm-slim 的多阶段 Dockerfile,配合 docker-compose.yml 定义服务端口和环境变量。Dockerfile 的设计相当精巧:它从 pyproject.toml 自动检测包名,推断 src/<package_name>/server.py 为入口点,无需手动指定。开发者只需将模板复制到自己的 MCP 服务器目录,修改 pyproject.toml 中的包名,即可完成容器化。
云端部署通过 arcade deploy 一键完成,推送到 Arcade Cloud。但这是可选的——arcade-mcp 完全支持本地自托管,核心框架本身没有任何云绑定。
尽管 arcade-mcp 定位清晰,但它也存在一些需要注意的问题。
PyPI 依赖链路较深。表面上 arcade-mcp 是一个独立包,但 pyproject.toml 显示它依赖 arcade-core、arcade-tdk、arcade-serve、arcade-mcp-server 等一系列内部包,并通过 arcadepy==1.8.0 和 arcade-core 与 Arcade 官方云服务产生依赖关系。如果 Arcade 公司战略调整或服务条款变化,这些隐式依赖可能带来供应链风险。
文档与实际功能的差距。README 中提到的 arcade evals 功能需要安装 openai 和 anthropic 等 LLM Provider 依赖,而评估脚本本身(eval_project_tracker_mcp.py 等)体积不小(最大的一个超过 59KB),意味着这个功能目前更像是一个内部工具而非开箱即用的产品。
协议锁定风险。MCP 协议本身由 Anthropic 主导推进,虽然已开源且有多方参与,但协议的演进方向仍主要受 Anthropic 影响。开发者选择 arcade-mcp 实际上也是对 MCP 协议生态的押注——如果 MCP 被另一个更开放的协议超越,arcade-mcp 的价值也会随之变化。
从更宏观的视角来看,arcade-mcp 的出现反映了 AI 行业正在经历的一场深刻变革:从「训练更好的模型」到「连接更好的工具」。
2023-2024 年,AI 行业的主流叙事是「Scaling Law」——更大的模型意味着更强的能力。但到了 2024 年底,越来越多的人意识到,模型本身的能力是有上限的,真正的差异化和护城河在于 Agent 能连接多少工具、能获取多少上下文、能做多少事情。MCP 协议和 arcade-mcp 正是这场基础设施之争的产物。
Arcade 官方已经基于这套框架搭建了 arcade.dev,收录了超过 7,500 个预构建工具,覆盖 81 个 MCP 服务器。这些工具已经经过 Arcade 团队的测试和认证,开发者可以直接使用而无需从零构建。开源 arcade-mcp 的策略非常聪明:吸引社区开发者贡献更多工具,丰富 arcade.dev 的生态,最终形成一个「工具市场」——而这个市场的底层基础设施,正是 arcade-mcp。
从 GitHub 数据来看,该仓库活跃度很高(最近一次 push 为 2026-06-16),Stars 增长稳健。对于想在 AI Agent 领域深耕的开发者而言,学习 arcade-mcp 的设计和实现,是理解 MCP 协议生态的最佳切入点。而对于企业开发者而言,arcade-mcp 提供了一条通往生产级 AI 工具集成的务实路径——无需从零造轮子,站在协议的肩膀上构建自己的工具生态。
本报告基于 GitHub 仓库 arcade-mcp(v1.15.0)源码分析,图片来源:docs.arcade.dev 官方文档。