CtrlK
BlogDocsLog inGet started
Tessl Logo

connect-apps-plugin

Composio Claude Agents SDK - 全局外部应用连接插件

Install with Tessl CLI

npx tessl i github:Lingjie-chen/MT5 --skill connect-apps-plugin
What are skills?

58

3.33x

Quality

36%

Does it follow best practices?

Impact

100%

3.33x

Average score across 3 eval scenarios

Optimize this skill with Tessl

npx tessl skill review --optimize ./.trae/skills/connect-apps-plugin/SKILL.md
SKILL.md
Review
Evals

Connect Apps Plugin - Composio Claude Agents SDK

概述

此技能为所有 Claude Agent 提供统一的外部应用连接能力,通过 Composio 平台集成超过 90+ 第三方应用(Gmail, GitHub, Slack, Jira, Notion 等)。

核心功能

1. 安装依赖

pip install composio composio-claude-agent-sdk claude-agent-sdk

2. 创建连接的 Agent

import asyncio
from composio import Composio
from composio_claude_agent_sdk import ClaudeAgentSDKProvider
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, create_sdk_mcp_server

# 初始化 Composio
composio = Composio(
    api_key="YOUR_API_KEY",  # 从 Composio 获取
    provider=ClaudeAgentSDKProvider()
)

external_user_id = "unique-user-id"

# 创建工具路由会话
session = composio.create(
    user_id=external_user_id,
)

# 获取会话中的工具(原生)
tools = session.tools()
custom_server = create_sdk_mcp_server(name="composio", version="1.0.0", tools=tools)

# 使用 MCP 工具查询 Claude
async def main():
    options = ClaudeAgentOptions(
        system_prompt="You are a helpful assistant",
        permission_mode="bypassPermissions",
        mcp_servers={
            "composio": custom_server,
        },
    )

    async with ClaudeSDKClient(options=options) as client:
        await client.query("Send an email to user@example.com with the subject 'Hello'")
        async for msg in client.receive_response():
            print(msg)

asyncio.run(main())

3. 用户授权处理

# 创建工具路由会话(禁用自动连接管理)
session = composio.create(
    user_id=external_user_id,
    manage_connections=False,
)

# 手动授权用户使用特定 API(例如 Gmail)
connection_request = session.authorize(
    toolkit='gmail',
    callback_url='https://your-app.com/callback-path'
)

# 重定向用户到 OAuth 流程
print(f"请访问以下 URL 授权应用: {connection_request.redirect_url}")

# 等待用户授权应用
connected_account = connection_request.wait_for_connection()
print(f"连接成功建立!连接账户 ID: {connected_account.id}")

支持的应用类别

类别应用示例
邮件Gmail, Outlook
代码托管GitHub, GitLab, Bitbucket
项目管理Jira, Trello, Asana
文档Notion, Google Docs, Confluence
通讯Slack, Discord, Telegram
数据存储Google Drive, Dropbox, OneDrive
日历Google Calendar, Outlook Calendar
CRMSalesforce, HubSpot
支付Stripe
更多完整列表

在量化交易系统中的应用场景

1. 交易通知(Gmail/Slack)

await client.query("""
通过 Gmail 发送交易报告:
- 今日盈亏: +$1,250
- 胜率: 65%
- 交易次数: 8
收件人: trader@example.com
""")

2. 策略更新(GitHub)

await client.query("""
将最新的策略参数更新推送到 GitHub:
- 文件: config/strategy_params.yaml
- 更新: basket_tp 从 50 改为 55
- 提交信息: "调整 basket_tp 参数至 55"
""")

3. 风险警报(Slack)

await client.query("""
在 #trading-alerts 频道发送风险警报:
- 账户回撤超过 15%
- 当前回撤: 17.2%
- 建议立即降仓
""")

4. 数据备份(Google Drive)

await client.query("""
将今日交易日志上传到 Google Drive:
- 文件: logs/trading_2025-02-23.csv
- 文件夹: /trading_logs/2025/
""")

5. 日报生成(Notion)

await client.query("""
在 Notion 中创建今日交易日报:
- 页面标题: 2025-02-23 交易日报
- 包含: 盈亏明细、持仓状态、明日计划
- 数据库: Trading Reports
""")

配置说明

环境变量

# Composio API 密钥
export COMPOSIO_API_KEY="ak_your_api_key"

# 可选:外部用户 ID(默认从环境或会话获取)
export COMPOSIO_USER_ID="your-unique-user-id"

全局启用

此技能已注册在 skills/skills-registry.yaml 中,所有 Agent 将自动获得外部应用连接能力。

权限模式

模式说明
bypassPermissions绕过权限检查(仅限可信环境)
requirePermissions每次操作需要用户确认(推荐)
selectivePermissions敏感操作需要确认

最佳实践

1. 错误处理

try:
    await client.query("Send email to user@example.com")
except ConnectionError as e:
    print(f"连接未建立: {e}")
    session.authorize(toolkit='gmail')

2. 连接管理

# 检查现有连接
connections = session.list_connections()

# 删除特定连接
session.delete_connection(connection_id="conn_123")

3. 多账户支持

# 为同一应用创建多个连接
gmail_personal = session.authorize(toolkit='gmail', label='personal')
gmail_work = session.authorize(toolkit='gmail', label='work')

安全注意事项

  1. API 密钥安全: 将 API 密钥存储在环境变量或密钥管理服务中,不要硬编码
  2. OAuth 流程: 使用 HTTPS 的 callback URL
  3. 权限范围: 只请求必要的权限范围
  4. 会话管理: 定期清理过期的连接

文档资源

全局同步

更新此技能后,运行以下命令同步到 Trae:

cp skills/connect-apps-plugin/SKILL.md .trae/skills/connect-apps-plugin/SKILL.md

快速开始模板

# 快速启动模板 - 全局外部应用连接
from composio import Composio
from composio_claude_agent_sdk import ClaudeAgentSDKProvider
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, create_sdk_mcp_server

async def run_connected_agent(prompt: str, toolkits: list = None):
    """运行带外部应用连接的 Agent"""

    # 初始化
    composio = Composio(api_key=os.getenv("COMPOSIO_API_KEY"),
                        provider=ClaudeAgentSDKProvider())
    session = composio.create(user_id="default_user")

    # 获取工具
    tools = session.tools(toolkits=toolkits)
    mcp_server = create_sdk_mcp_server(name="composio", tools=tools)

    # 运行 Agent
    options = ClaudeAgentOptions(
        system_prompt="You are a trading bot assistant with external app access.",
        permission_mode="selectivePermissions",
        mcp_servers={"composio": mcp_server},
    )

    async with ClaudeSDKClient(options=options) as client:
        await client.query(prompt)
        async for msg in client.receive_response():
            yield msg

# 使用示例
async for response in run_connected_agent(
    "Send Slack message: Trade completed with +$500 profit",
    toolkits=["slack"]
):
    print(response)

版本历史:

  • v1.0.0 (2025-02-23): 初始版本,支持 90+ 外部应用连接
Repository
Lingjie-chen/MT5
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.