MCP 工具

YAMA 内置 MCP 服务端,让本地大模型通过自然语言调用你的主控能力。

📌 版本要求: 需主控(服务端)版本高于 1.3.8(不含 1.3.8)方可支持 MCP 工具,请先升级主控再使用。
⚠ 开发中 — MCP 工具支持仍在开发中,工具集与参数可能会增减或调整,敬请留意。

什么是 MCP

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 提出的开放协议,用于在大模型与外部工具、 数据源之间建立标准化连接。YAMA 主控内置了一个 MCP 服务端,把远程管理能力(查主机、看进程、截屏、读日志、执行命令、操控桌面等) 封装成一组标准工具。把这些工具挂到本地大模型(如 Claude Desktop)之后,模型就能理解你的自然语言指令, 自动挑选并调用对应工具,完成原本需要手动点来点去的操作。

如何使用

  1. 1. 在 YAMA 中启用 MCP。 请先将主控升级到 1.3.8 以上的版本(1.3.8 及更低版本不支持 MCP 工具), 然后打开主控 →「扩展 → MCP设置」,勾选「启用 MCP」,确认端口(默认 6544)、 绑定地址(默认 127.0.0.1)与 Token(首次打开会自动预填一个随机值)。 保存后需重启 YAMA 生效。Token 也可通过环境变量 YAMA_MCP_TOKEN 覆盖(优先级更高)。
  2. 2. 接入本地大模型。 把 MCP 服务端地址(http://127.0.0.1:6544/mcp)与 Token(Bearer 鉴权) 填到你的 MCP 客户端配置里(Claude Desktop、Cline 等)。
  3. 3. 用自然语言完成操作。 之后直接和模型对话,例如「帮我看看有哪些机器在线」——模型会调用 list_online_hosts 并把结果组织成可读的回答。
🔒 安全提示: MCP 服务默认只监听本机 127.0.0.1,请求需携带 Bearer Token 鉴权;请勿将端口直接暴露到公网。

支持的工具

21 个工具:其中 12 个只读工具默认可用, 9 个进阶能力(执行命令 / 持久终端 / 远程控制) 需在「MCP 设置」中开启对应开关(见下方「权限与开关」)。

工具说明示例(自然语言)
list_online_hosts
列出在线主机
返回所有在线主机(计算机名、IP、操作系统、版本、备注、分组、活动窗口、延迟等实时信息)。
  • “现在有哪些机器在线?”
  • “把延迟最高的几台列出来。”
search_hosts
搜索主机
按计算机名 / 备注、IP、分组、操作系统过滤在线主机,条件可任意组合。
  • “找一下 IP 含 10.0.0 的机器。”
  • “「广州」分组里有哪些 Windows 主机?”
get_host_detail
主机详情
返回单台在线主机的详细信息(ID、计算机名、IP、操作系统、备注、分组、活动窗口、屏幕分辨率、客户端类型等)。
  • “这台机器的屏幕分辨率是多少?”
  • “看看它的客户端类型和版本。”
list_processes
进程列表
返回指定主机的进程列表(PID、映像名称、架构、程序完整路径)。
  • “列出这台机的所有进程。”
  • “找出名字含 svchost 的进程。”
list_windows
窗口列表
返回指定主机的顶层窗口列表(句柄、窗口标题、状态、所属进程 PID)。
  • “这台机现在开着哪些窗口?”
  • “把标题含「会议」的窗口列出来。”
get_activity_history
历史活动
返回指定主机的历史活动记录(前台窗口驻留时长,每行一条「[时间] [标题] 时长」)。
  • “这台机今天都在干什么?”
  • “过去一小时前台窗口换了哪些?”
get_screenshot
屏幕截图
截取指定主机的一帧屏幕,返回 base64 JPEG(可用 max_width 控制输出宽度)。
  • “截个图看看这台机现在的画面。”
  • “给我一张 1920 宽的截图。”
list_files
列出文件
列举指定主机的目录:不传 path 返回驱动器列表,传 path 返回该目录一层内的文件 / 子目录(最多 500 条)。
  • “这台机有哪些盘?”
  • “看看 C:\Windows\Temp 里有什么。”
list_registry
注册表查询
查询指定 Windows 主机的注册表:不传 path 返回 5 个根键,传 path(如 HKEY_LOCAL_MACHINE\Software)返回该键一层内的子键与值(名称 / 类型 / 数据)。
  • “看看 HKEY_LOCAL_MACHINE\Software 下有哪些键。”
  • “查一下这台机的开机自启动项。”
list_services
服务列表
返回指定 Windows 主机的服务列表(显示名、服务名、可执行文件路径、运行状态、启动类型)。
  • “这台机有哪些服务?”
  • “有没有已停止的 MySQL 服务?”
get_client_log
客户端日志
返回指定主机 YAMA 客户端的内存运行日志(最近最多 1000 条,含时间戳 / 源文件 / 行号)。
  • “这台机的客户端日志有什么报错?”
  • “看看它最近在干什么。”
get_audit_log
服务端审计日志
返回 YAMA 服务端主界面的消息 / 审计日志(主机上线 / 下线、操作结果、告警、IP 封禁等,最多 1000 条)。
  • “最近有哪些机器上线 / 下线了?”
  • “有没有被临时封禁的 IP?”
exec_command
执行命令
需关只读
在指定 Windows 主机上执行一条命令,返回 stdout 与退出码。受命令白名单约束,默认仅允许只读命令前缀。
  • “在这台机跑一下 ipconfig。”
  • “看看 C 盘还剩多少空间。”
terminal_open
打开持久终端
需开持久终端 + 关只读
在指定 Windows 主机上打开一个持久 shell 会话,返回 session_id 与终端模式;cwd / 环境变量跨命令保持。
  • “给我开一个这台机的终端。”
terminal_exec
终端执行命令
需开持久终端 + 关只读
在已打开的持久会话中执行一条命令,返回 stdout 与退出码。命令不受白名单约束,但不能含 & 或 |(请拆成多条调用)。
  • “先 cd 到 C:\Windows,再 dir 一下。”
  • “设个环境变量,下一条再读回来。”
terminal_close
关闭持久终端
需开持久终端 + 关只读
关闭并释放指定持久会话(幂等:会话已不存在也返回成功)。
  • “用完终端了,关掉它。”
remote_open
打开远程控制会话
需开远程控制 + 关只读
在指定 Windows 主机上建立远程控制会话(隐藏屏幕子连接),返回 session_id 与物理屏幕分辨率(screen_w / screen_h)。仅支持单显示器主机。
  • “我要操作这台机的桌面。”
  • “帮我远程操作这台机器。”
remote_close
关闭远程控制会话
需开远程控制 + 关只读
关闭并释放指定远程控制会话(幂等:会话已不存在也返回成功)。
  • “操作完了,关闭远程控制。”
remote_keyboard
键盘输入
需开远程控制 + 关只读
向远程控制会话注入键盘事件:key_down / key_up / key_press / type。type 仅支持 ASCII;非 ASCII 文本请用 remote_clipboard 写入后再注入 Ctrl+V。
  • “在聊天框里输入文字(先剪贴板再 Ctrl+V)。”
  • “按下回车。”
remote_mouse
鼠标操作
需开远程控制 + 关只读
向远程控制会话注入鼠标事件:move / down / up / click / right_click / middle_click / drag / scroll。坐标 x / y 为归一化 0..1 浮点。
  • “点击屏幕正中间的按钮。”
  • “把窗口从左上角拖到右下角。”
remote_clipboard
写入剪贴板
需开远程控制 + 关只读
把文本写入远程主机剪贴板(UTF-8 → GBK,emoji 等非 GBK 字符会丢失)。只写剪贴板,粘贴需再注入 Ctrl+V。
  • “把这段文字放进远程剪贴板。”

每个工具对应一次 MCP tools/call 请求;以上示例是模型可能收到的自然语言提问,模型会自行把它们翻译成对应工具的调用。

权限与开关

为避免大模型误操作,写能力(执行命令 / 持久终端 / 远程控制)默认全部关闭,需在「扩展 → MCP设置」里逐个开启, 保存后重启 YAMA 生效。三个开关如下:

开关默认说明
只读模式关闭后才会出现 exec_command,并放行持久终端 / 远程控制的前提条件。
启用持久终端开启(且关闭只读)后提供 terminal_open / terminal_exec / terminal_close。终端内为完整 shell、无白名单,请谨慎使用。
启用远程控制开启(且关闭只读)后提供 remote_open / remote_close / remote_keyboard / remote_mouse / remote_clipboard,即「AI 操控桌面」。

远程控制有额外的安全约束:单设备单会话;闲置 300 秒自动回收;全程审计(get_audit_log 可查); 与人类 Web 观看互斥(有人在看这台机的画面时,AI 无法建立远程控制,反之亦然)。仅支持 Windows、单显示器主机。

已知局限

  • list_services 不含受保护服务: 客户端以全权限打开每个服务(OpenService(SERVICE_ALL_ACCESS)),对 ACL 拒绝全权限的服务会跳过, 因此 Windows Defender(WinDefend / WdNisSvc / Sense / SecurityHealthService / wscsvc)及部分系统核心服务 (BFE / DcomLaunch / RpcSs / mpssvc / MSDTC 等)不会出现在结果中。
  • get_activity_history 需较新客户端: 较老的客户端构建未实现活动历史上报,调用会返回超时(-32001);请使用较新的客户端构建方可查询。
  • list_registry 需较新客户端: 注册表查询依赖客户端以只读权限(KEY_READ)枚举并确定性回传子键 / 值两包, 较老的客户端可能跳过无权限的键、或在子键 / 值不全时超时(-32001);请使用较新的客户端构建。 另:REG_BINARY 值按协议定宽字段输出十六进制,尾部可能含零填充。
  • 远程控制仅 Windows、单显示器: Linux / macOS 主机暂不支持;多显示器主机会被拒绝(归一化坐标在虚拟桌面下会偏移)。需要定位界面元素时, 请配合 get_screenshot 截图观察。
  • remote_keyboard / remote_clipboard 编码限制: type 仅支持 ASCII 文本;剪贴板写入为 GBK/ANSI 编码,emoji 等非 GBK 字符会丢失。 含中文等非 ASCII 文本请走 remote_clipboard + Ctrl+V
  • terminal_exec 不支持 & / | 持久终端的单条命令不能包含 &|(会破坏输出哨兵捕获),请拆成多条调用; 重定向 > < 与转义 ^ 可用。