🛠 ACI.dev:4.7k Stars 的开源工具调用平台,600+ 集成怼到一个 MCP Server 里
项目地址:https://github.com/aipotheosis-labs/aci | ⭐ 4,773 Stars | 🛠 Python | 作者 Aipolabs
老实说,现在搞 Agent 开发最烦的不是 Agent 写不好,是工具集成太特么多了。你要给 Agent 接个 Gmail,要配 OAuth;接个 Slack,再配一套 OAuth;接个 GitHub、Supabase、Vercel、Cloudflare……每一家都要配 OAuth、API Key、Scope。写到后面你都不记得自己配了什么东西。
说的就是这玩意儿。ACI.dev 想解决的就是这个问题——600+ 工具的调用接口统一化。不管你是用 Claude Code、Cursor、还是自己搭的 Agent 框架,接一个 MCP Server 就能调所有工具。
怎么干的?
ACI.dev 的核心思路很简单:把 600+ 工具的认证、权限、调用全部统一到一个平台层,暴露成两种方式:
- Unified MCP Server:Claude Desktop / Cursor 里配一个 MCP 端点,就能搜工具、调用工具
- Python SDK:代码里直接
client.functions.execute(),兼容任何 LLM 框架
架构图大概长这样:
Your Agent / IDE
↕ MCP / SDK
┌─────────────────┐
│ ACI.dev API │ ← OAuth、API Key 统一管理
├─────────────────┤
│ 600+ Tools │ ← Gmail, Slack, Vercel, ...
│ 权限控制 + 日志 │
└─────────────────┘
安装 & 使用
装 MCP Server 很简单,一行 uvx 的事:
# Unified MCP Server — 能搜所有可用的工具并调用
uvx aci-mcp unified-server --linked-account-owner-id <你的ID>
# 或者只暴露特定 App 的工具
uvx aci-mcp apps-server --apps "BRAVE_SEARCH,GMAIL" --linked-account-owner-id <你的ID>
如果要用 Python SDK:
pip install aci-sdk
from aci import ACI
client = ACI() # 默认读 ACI_API_KEY 环境变量
# 搜索可用工具
tools = client.apps.search(intent="I want to search the web")
# 调用 Brave Search
result = client.functions.execute(
app_name="BRAVE_SEARCH",
function_name="web_search",
arguments={"query": "latest AI agents news"}
)
Docker 部署也支持:
docker run --rm -i -e ACI_API_KEY=*** aci-mcp unified-server
在 Claude Code 里配
最骚的操作是把它接进 Claude Desktop 或 Claude Code。编辑 MCP 配置:
{
"mcpServers": {
"aci-unified": {
"command": "uvx",
"args": ["aci-mcp", "unified-server", "--linked-account-owner-id", "xxx"],
"env": {
"ACI_API_KEY": "sk-xxx"
}
}
}
}
装完之后,你跟 Claude 说「帮我查一下 Gmail 里昨天没回的邮件,然后在 Slack 里发个提醒」,它就自己调两个工具了——你再也不用手动配两套 OAuth。
和直接接 MCP 有什么区别?
| 维度 | 每接一个工具写一次 MCP Server | ACI.dev Unified MCP |
|---|---|---|
| 认证 | 每个服务手动 OAuth/API Key | 统一管理,一次配好 |
| 上下文开销 | 工具多了 Prompt 塞爆 | 动态发现,按需加载 |
| 权限 | 要么全有要么全无 | 自然语言权限边界 |
| 日志 | 没有 | 每次调用都有记录 |
说实话,如果你只接两三个工具,自己写 MCP Server 也还行。但如果你在搞 VibeOps——想让 Agent 帮你部署到 Vercel、查 Supabase 数据、看 Sentry 错误——ACI.dev 这种统一平台就香多了。
有什么坑?
4.7k★ 还算早期项目,Python SDK 和 MCP Server 都还在 beta。文档写得还行,但有些边界情况(比如某些工具返回的特殊格式处理)需要自己试。另外平台依赖 ACI.dev 的云服务做 OAuth 回调,如果你完全离线部署,有些功能受限。
总结
- 600+ 工具的认证 + 调用统一到一个平台
- 支持 MCP Server 和 Python SDK 两种接入方式
- 动态工具发现,不占 Prompt 上下文
- 自然语言权限边界 + 调用日志
- Apache 2.0 开源,可自部署
如果你手头的 Agent 要接很多第三方服务,值得一试。
🛠 ACI.dev: 4.7k★ Open-Source Tool-Calling Platform, 600+ Integrations Into One MCP Server
GitHub: https://github.com/aipotheosis-labs/aci | ⭐ 4,773 Stars | 🛠 Python
Honestly, the worst part of building agents isn't writing the agent loop — it's integrating tools. Gmail needs OAuth. Slack needs another OAuth. GitHub, Supabase, Vercel, Cloudflare all need their own credentials and scopes. It becomes a mess fast.
ACI.dev solves this by unifying 600+ tool integrations behind a single MCP server or Python SDK. One connection, all your tools.
Quick Start
# Single command to start the unified MCP server
uvx aci-mcp unified-server --linked-account-owner-id <YOUR_ID>
# Or limit to specific apps
uvx aci-mcp apps-server --apps "BRAVE_SEARCH,GMAIL" --linked-account-owner-id <YOUR_ID>
Python SDK
from aci import ACI
client = ACI()
# Search for available tools
tools = client.apps.search(intent="I want to search the web")
# Execute a function
result = client.functions.execute(
app_name="BRAVE_SEARCH",
function_name="web_search",
arguments={"query": "latest AI agents"}
)
Claude Code Integration
Add to your MCP config:
{
"mcpServers": {
"aci-unified": {
"command": "uvx",
"args": ["aci-mcp", "unified-server", "--linked-account-owner-id", "xxx"],
"env": {"ACI_API_KEY": "sk-xxx"}
}
}
}
Now Claude can call Gmail, Slack, Brave Search, and more — all through one unified endpoint.
Why It Matters
- 600+ tools, auth centrally managed
- Dynamic discovery — tools load on demand, no context bloat
- Natural-language permissions — human-readable capability boundaries
- Full audit logs — every tool call is recorded
- Apache 2.0, self-hostable
If your agent talks to multiple SaaS services, ACI.dev saves you a lot of boilerplate.