ClawOps plugin for Moso: dynamic manifest-based tool registration, server-side prompt management, and MCP server integration for infrastructure operations (SSH channels, host management, ops chat, best practices).
Moso exposes 24 tools via HTTP transport with mixed quality. Tool names follow verb_noun convention (edgeops_*), but descriptions are inconsistent: many are verbose, repetitive boilerplate (SSH channel tools repeat identical 40-word preamble), while others lack actionable context. Input schemas are present but sparse, most parameters have type and description, but lack constraints (enums, min/max, patterns). Output schemas are undocumented. Error handling is absent from descriptions. Security concerns: edgeops_invoke accepts arbitrary tool names and arguments, creating an injection risk. SSH channel tools expose session/channel IDs without clear lifecycle documentation. No pagination guidance for list tools. Descriptions average ~150 chars but often bury key details in Chinese technical jargon.
绑定默认 integration session_id(Token 仍来自 MCP 客户端 headers/env)。
检查毛竹(Moso)服务是否可达(GET /api/version)。
GET /api/hosts/{host_id}。
GET /api/ai/hosts/{host_id}/prompt。
GET /api/hosts/{host_id}/alive。
GET /api/hosts/stats。
**ClawOps 扩展**:按名称调用 Moso 集成工具(POST /api/integration/claw-ops/invoke)。manifest 尚未同步的新工具可先用本入口;Gateway 启动或 ping 后会自动注册具名工具。
edgeops_invoke accepts arbitrary tool names and arguments as strings, creating injection risk. No validation, enum constraints, or error guidance. LLM could pass malformed tool names or dangerous payloads.
SSH channel tools (11 tools) repeat identical 40-word boilerplate description. Descriptions lack actionable context: no guidance on when to use each variant (read vs read_lines vs has_new), no error recovery hints, no lifecycle documentation for channel_id/session_id.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
GET /api/host-tags。
分页列出毛竹(Moso)主机(GET /api/hosts)。
POST /api/integration/ops-chat/complete — 集成运维 Agent。
分段读取 SSH 通道/工具 spill 落盘文件(GET …/integration/spill/read)。ssh_channel read 返回 spill_id + storage_subdir 后用本工具读全量。
GET /api/best-practices。
按名称/IP/别名/标签/remark 检索主机。
在主机级 AI 提示词中搜索。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。手工关闭指定 channel_id。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。按 session_id 或 owner 关闭该会话下全部 open 通道。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。创建后返回 channel_id 与主机 IP/别名/用途/提示词摘要。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。将当前缓冲全文导出到 spill 文件,避免大输出占内存/上下文。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。轮询 after_line 之后是否有新行。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。含行号范围、别名、用途、主机提示词摘要。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。all_open=true 列出当前用户全部 open 通道。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。读最近 max_chars 字符;过大自动 spill。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。since_line/last_n 轮询交互输出;过大自动 spill。
**ClawOps — 无界面交互式 SSH TTY 管道**(REST /api/ssh-channel)。用于 sudo 密码、vi、多步向导、Ctrl+C;默认 600s 无读写自动关。大输出会 spill 落盘。向通道 stdin 发送文本、TUI 控制键占位符(<Ctrl+X>、<Esc>、方向键、<F1> 等)或密码(优先 send_service_password)。
Simple getter tools (edgeops_get_host, edgeops_get_host_prompt, edgeops_list_host_tags, edgeops_host_alive, edgeops_host_stats) have minimal descriptions (10-20 chars). LLM cannot determine when to call each vs alternatives. No output schema documented.
No output schemas documented for any tool. LLM cannot plan downstream calls or extract required fields. Pagination tools (edgeops_list_hosts, edgeops_search_hosts) lack total_count or next_cursor guidance.
Parameters lack constraints: no enums for mode/owner_type, no min/max for numeric fields (page_size, max_chars, idle_close_sec), no regex patterns. LLM can pass invalid values without validation.