Strands CLI代理
基于CLI的代理,具有 MCP任务和通知 支持。当MCP服务器完成后台任务时,代理会自动用结果重新触发——推送,而不是拉取。
为什么存在
大多数MCP客户端(Kiro、Claude Desktop)还不支持MCP任务。此CLI代理演示了 客户端 MCP任务:
- 任务感知执行 --当您调用返回MCP任务的工具时,代理会自动跟踪它
- 基于推送的完成 --当任务完成时,代理会根据结果重新触发。用户不进行投票。
- 通知 --CLI中显示的实时服务器日志和状态更新
- 重新触发循环 --任务完成→ 已获取结果→ 反馈给代理→ 代理处理和响应
运作原理
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-cliMCP配置
使用与Kiro/Claude Desktop相同的格式。放置在以下任何位置:
~/.strands-cli/mcp.json./mcp.json(当前目录)~/.kiro/settings/mcp.json(Kiro配置)STRANDS_MCP_CONFIGenv var(路径)MCP_SERVERSenv-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--清除已完成/失败的任务!--运行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
