CLI任务代理

一个支持MCP任务和通知的命令行代理工具,用于自动化任务执行和结果推送。

  • by agent-of-mkmeral
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 agent-of-mkmeral/strands-cli-agent

使用说明

Strands CLI代理

基于CLI的代理,具有 MCP任务和通知 支持。当MCP服务器完成后台任务时,代理会自动用结果重新触发——推送,而不是拉取。

为什么存在

大多数MCP客户端(Kiro、Claude Desktop)还不支持MCP任务。此CLI代理演示了 客户端 MCP任务:

  1. 任务感知执行 --当您调用返回MCP任务的工具时,代理会自动跟踪它
  2. 基于推送的完成 --当任务完成时,代理会根据结果重新触发。用户不进行投票。
  3. 通知 --CLI中显示的实时服务器日志和状态更新
  4. 重新触发循环 --任务完成→ 已获取结果→ 反馈给代理→ 代理处理和响应

运作原理

User: "Research all open MCP issues"
  │
  ▼
Agent calls send_message("researcher", "find all open MCP issues")
  │
  ▼
MCP Server returns: Task { taskId: "task-123", status: "working" }
  │
  ▼
Agent: "I've dispatched a researcher agent. I'll let you know when it's done."
  │
  ▼
... user can keep chatting or wait ...
  │
  ▼
[Background] TaskManager detects task completed via polling/notification
  │
  ▼
Agent is re-invoked: "[Task Completed] researcher found 12 issues..."
  │
  ▼
Agent: "The researcher found 12 open MCP issues. Here's the summary: ..."

快速开始

# Install
pip install -e .

# Configure MCP servers (same format as Kiro/Claude Desktop)
cp mcp.json.example ~/.strands-cli/mcp.json
# Edit with your MCP server configs

# Run
strands-cli

MCP配置

使用与Kiro/Claude Desktop相同的格式。放置在以下任何位置:

  • ~/.strands-cli/mcp.json
  • ./mcp.json (当前目录)
  • ~/.kiro/settings/mcp.json (Kiro配置)
  • STRANDS_MCP_CONFIG env var(路径)
  • MCP_SERVERS env-var(内联JSON)

环境变量传递

使用 ${VAR_NAME} 配置值中引用环境变量的语法。这样,您就可以在不暴露令牌的情况下共享配置文件:

{
  "mcpServers": {
    "containerized-strands-agents": {
      "command": "containerized-strands-agents-server",
      "env": {
        "CONTAINERIZED_AGENTS_GITHUB_TOKEN": "${STRANDS_CODER_TOKEN}",
        "PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}"
      }
    },
    "github": {
      "command": "uvx",
      "args": ["mcp-server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "remote-api": {
      "url": "https://${API_HOST}/mcp",
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}"
      }
    }
  }
}

Env-var解析在以下情况下工作:

  • env 价值观-- "${MY_TOKEN}" → 实际代币价值
  • args — ["--token", "${MY_TOKEN}"]
  • command — "${BINARY_PATH}"
  • url — "https://${HOST}/mcp"
  • headers — "Bearer ${TOKEN}"

如果未设置env变量 ${VAR_NAME} 参考保持原样,并记录警告。

用法

交互模式

strands-cli

命令:

  • /tasks --显示所有跟踪的任务及其状态
  • /clear --清除已完成/失败的任务
  • !<command> --运行shell命令
  • exit --退出

一次性模式

strands-cli "Research the top MCP servers and summarize"

在单次模式下,如果创建了任务,CLI会在退出前等待任务完成。

选项

strands-cli --mcp-config ./my-mcp.json     # Custom MCP config
strands-cli --model-provider bedrock         # Model provider
strands-cli --model-id us.anthropic.claude-sonnet-4-5-20250929-v1:0  # Model
strands-cli -v                                # Verbose logging
strands-cli --no-tasks                        # Disable task tracking

建筑

┌──────────────────────────────────────────────┐
│                CLI (cli.py)                  │
│  ┌─────────┐  ┌──────────┐  ┌───────────┐  │
│  │  Agent   │  │ Callback │  │  Welcome   │  │
│  │ (Strands)│  │ Handler  │  │  /Tasks UI │  │
│  └────┬─────┘  └──────────┘  └───────────┘  │
│       │                                      │
│  ┌────┼────────────────────────────────────┐ │
│  │         MCP Clients (mcp_loader.py)     │ │
│  │  ┌──────────┐  ┌──────────┐             │ │
│  │  │ Server A │  │ Server B │  ...        │ │
│  │  │(tasks ✓) │  │(tasks ✓) │             │ │
│  │  └────┬─────┘  └────┬─────┘             │ │
│  └───────┼──────────────┼──────────────────┘ │
│          │              │                    │
│  ┌───────┼──────────────┼──────────────────┐ │
│  │       TaskManager (task_manager.py)     │ │
│  │                                         │ │
│  │  • Tracks tasks from all servers        │ │
│  │  • Polls via MCP tasks/get protocol     │ │
│  │  • Receives notifications/tasks/status  │ │
│  │  • On completion → re-triggers agent    │ │
│  │  • Persists to ~/.strands-cli/tasks.json│ │
│  └─────────────────────────────────────────┘ │
│                                              │
│  ┌─────────────────────────────────────────┐ │
│  │    NotificationHandler                  │ │
│  │  • notifications/tasks/status → push    │ │
│  │  • notifications/message → CLI logs     │ │
│  │  • notifications/progress → progress bar│ │
│  └─────────────────────────────────────────┘ │
└──────────────────────────────────────────────┘

使用的MCP功能(客户端)

MCP功能 我们如何使用它
工具 在连接的MCP服务器上调用工具
任务 通过以下方式跟踪长时间运行的工具调用 tasks/get, tasks/result, tasks/cancel
任务通知 接收 notifications/tasks/status 用于基于推送的更新
日志记录通知 在CLI中显示实时服务器日志
进度通知 显示长期操作的进度指示器
任务增强执行 使用 call_tool_as_task 对于支持它的服务器

与集装箱化线束试剂配对

此CLI旨在与 集装箱化线束代理 作为MCP服务器:

{
  "mcpServers": {
    "agents": {
      "command": "containerized-strands-agents-server",
      "env": {
        "CONTAINERIZED_AGENTS_GITHUB_TOKEN": "${STRANDS_CODER_TOKEN}",
        "PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}"
      }
    }
  }
}

然后:

~ send a message to researcher to find all open MCP issues
📋 Task dispatched → agents (task: task-abc123...)
I've dispatched a researcher agent to find open MCP issues. I'll let you know when results come back.

... time passes ...

✅ Task completed ← agents (task: task-abc123...)
🔔 Processing completed task result...
The researcher found 12 open issues related to MCP. Here's the breakdown:
1. ...

环境变量

变量 描述 默认值
STRANDS_MCP_CONFIG MCP配置文件的路径 ~/.strands-cli/mcp.json
MCP_SERVERS 内联MCP配置JSON -
STRANDS_SYSTEM_PROMPT 自定义系统提示 -
STRANDS_MODEL_ID 型号标识符 us.anthropic.claude-sonnet-4-5-20250929-v1:0
STRANDS_CLI_NOTIFICATIONS 启用桌面通知 true

许可证

阿帕奇-2.0