跳到主要内容

MCP 服务器

Otto 提供第一方 MCP(Model Context Protocol)服务器用于编程式代理访问。服务器通过 stdio 传输将 Otto 的完整命令面作为 MCP 工具暴露。

启动服务器

otto mcp

服务器在 stdio 传输上运行,旨在由 MCP 客户端(代理框架)启动。它不接受交互式输入。

传输和范围

  • 传输:stdio(stdout 上为 JSON-RPC 消息,stderr 上为日志)
  • 目标用途:本地进程启动的 MCP 客户端
  • 协议:MCP 1.0,支持 initialize、tools/list 和 tools/call

可用工具

服务器暴露 25 个按类别分组的工具:

状态工具

工具描述
otto_status显示中继守护进程状态(运行中、端口、pid)
otto_commands_list列出已连接节点上的可用命令

执行工具

工具描述
otto_cmd向已连接节点发送命令
otto_test运行站点命令进行测试(需要时自动注册控制器)
otto_screenshot捕获 URL 截图
otto_extract_content使用一个工具提取内容(markdowndistilled_htmlclean_htmlraw_htmltext

观测工具

工具描述
otto_logs_list列出历史中继日志,支持可选过滤器
otto_logs_follow在有界持续时间内跟踪实时中继日志
otto_logs_export将中继日志导出为结构化数据
otto_listener_subscribe_network在标签页上订阅网络拦截更新
otto_listener_unsubscribe取消订阅活跃的监听器

生命周期工具

工具描述
otto_setup运行 Otto setup
otto_start启动中继守护进程
otto_stop停止中继守护进程
otto_extension_update下载并安装最新的扩展构件
otto_extension_info显示已安装扩展的元数据

身份工具

工具描述
otto_pair批准配对码以注册节点
otto_authcode列出待处理的配对授权码
otto_revoke撤销存储的刷新令牌并清除本地认证
otto_client_register注册新的控制器客户端
otto_client_login将客户端凭据交换为访问/刷新令牌
otto_client_status显示本地控制器客户端状态
otto_client_forget删除存储的客户端密钥并清除本地认证
otto_client_remove在中继上移除已注册的控制器客户端

配置工具

工具描述
otto_config读取或更新 Otto 配置

MCP 调用示例

列出工具

{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}

检查状态

{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "otto_status",
"arguments": {}
}
}

你也可以使用 nodes: true 请求已连接的节点 ID:

{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "otto_status",
"arguments": { "nodes": true }
}
}

运行命令

{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "otto_cmd",
"arguments": {
"action": "command.run",
"payload": "{\"site\":\"reddit.com\",\"command\":\"getPosts\"}"
}
}
}

提取内容(默认 markdown)

{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "otto_extract_content",
"arguments": {
"url": "https://example.com"
}
}
}

otto_extract_content 输入要点:

  • formatmarkdown(默认)、distilled_htmlclean_htmlraw_htmltext
  • 目标选择:提供 urltabSession
  • selector:支持 clean_htmlraw_htmltext
  • distillMode / fallbackToReadability:用于 markdowndistilled_html

对于选择器发现和命令编写流程,使用 format: "clean_html"

错误处理

所有工具以 MCP 标准格式返回错误:

{
"content": [{ "type": "text", "text": "Error message" }],
"isError": true
}

常见错误码:

错误含义
Missing controllerAccessToken运行 otto client loginotto pair <code>
Missing targetNodeId有多个节点已连接;传入 nodeId 参数
manual_login_required请求用户手动登录站点
acl_missing_node_grant请求用户在扩展弹窗中批准控制器

故障排查

症状可能原因修复
服务器立即退出Stdio 传输错误确保在正确的 MCP 客户端上下文中运行
代理中看不到工具服务器未注册运行 otto agent install <runtime>
命令因认证错误失败控制器未认证运行 otto client login
targetNodeId 错误没有节点连接验证扩展已加载并已连接

相关页面