CMDOP Machine Care

CMDOP Machine Care

Read-only health and storage diagnostics for an enrolled CMDOP machine fleet.

Category
访问服务器

README

cmdop-care

<p align="center"> <img src="assets/cmdop-care-read-only-diagnostics.png" alt="Read-only machine-care diagnostics: a central inspection relay connected to three machine nodes" width="900"> </p>

A small, read-only Model Context Protocol (MCP) stdio server exposing 4 read-only tools over an already-enrolled cmdop machine fleet: roster visibility, machine health, one bounded live diagnostic, and cmdop-owned storage usage.

Published: io.github.commandoperator/cmdop-care · Current version: v0.1.2 · License: Apache-2.0

If you already use cmdop on a machine, this is the conservative MCP entry point: connect an MCP-aware assistant to read fleet health without exposing a shell, arbitrary file reads, or open-ended machine delegation. The host must already be enrolled; credentials stay in the host operating system keyring. For broader machine operations, use the main cmdop MCP server instead.

This is not the full cmdop MCP surface. It intentionally omits ask_machine, run_command, read_file, and list_dir — every tool that executes a command, reads an arbitrary file, or delegates an open-ended task to another machine. If you need those, use the main cmdop CLI's own MCP server (cmdop mcp stdio), which is a separate, broader, product-integration surface with its own review requirements. cmdop-care exists specifically to offer a narrower, safer, publishable subset for the official MCP Registry.

Requirement: an already-enrolled cmdop CLI on the host

cmdop-care requires the host machine to already be enrolled via the main cmdop CLI. It does not implement enrollment itself, and it does not accept a relay token via an environment variable or a mounted secret as a primary credential path. On startup it reads:

  • the relay OAuth/enrollment Bearer token the cmdop CLI already stored in the OS keyring (macOS Keychain / Linux Secret Service / Windows Credential Manager) when you ran cmdop enroll <enrollment-password>;
  • any per-machine connection PIN the cmdop CLI has already cached in the same keyring (e.g. from a prior cmdop connect), for care_diagnose only.

If no token is found, every tool responds with a clear "not enrolled" message instead of failing silently or hanging.

This "host-keyring passthrough" model was a deliberate design decision (see security-architecture-2026-07-18.md in this artifact's source repository) to avoid introducing a second, weaker credential-handling path for the product — this binary is not a fully standalone identity; it rides the same enrollment as the CLI already installed on the host.

The 4 tools

list_machines

Lists the machines in the enrolled fleet.

  • Input: none.
  • Output: an array of {host, online, os}. No machine ID/UUID is ever returned — this is a deliberate redaction decision (the internal relay identifier is dropped before serialization, not merely omitted from rendering).

care_status

Reads the durable Machine Care projection (facts, findings, coverage, freshness) for one enrolled machine.

  • Input: machine (string, required) — exact display name from list_machines.
  • Output: aggregate facts/findings with closed-vocabulary codes, coverage flags, and reason codes. No raw paths, commands, environment variables, or machine identity.
  • Read-only; works even while the target machine is offline (it reads a relay-stored projection, not a live round-trip).

care_diagnose

Runs one bounded, typed process/startup diagnostic on a live enrolled machine — useful for "why is this machine slow?"

  • Input: machine (string, required).
  • Output: a bounded snapshot of process and startup-item facts.

Two disclosures, read before using this tool:

  1. PIN forwarding. If the target machine requires a connection PIN, it is forwarded automatically from this host's local OS-keyring PIN cache. You cannot and do not need to pass a PIN as a tool argument. If the machine requires a PIN and none is cached on this host, the call fails closed with a permission error — it never proceeds without one.
  2. Process data reaches your LLM provider. The response includes raw OS process IDs (PIDs) and process names from the target machine. That means whatever MCP client and LLM you are using — Claude Code, Codex, or any other MCP-speaking assistant — will see the names of processes running on that machine. This is a deliberate, reviewed part of the diagnostic contract (it is bounded: at most 20 process entries, no command lines, no arguments, no environment variables, no file paths), but you should know it before enabling this tool on a machine whose process list you don't want an external LLM provider to see.

It never executes a shell command, accepts no PID or command argument, and performs no mutation.

care_storage_inventory

Reads the latest validated cmdop-owned storage inventory for one enrolled machine.

  • Input: machine (string, required).
  • Output: aggregate byte totals per closed-vocabulary storage source (e.g. cmdop_logs, devcache_go_build). Accepts no path argument and deletes nothing.

What every tool call does not do

  • No tool accepts a shell command, a file path, or a raw PID as an argument.
  • The only free-form input across all 4 tools is the machine string, used purely as an opaque lookup key resolved server-side against your own fleet — never interpolated into a path, command, or query.
  • Every call is wrapped in a 15-second timeout independent of the relay's own transport defaults, and a small per-tool rate limit, so a stuck or abused backend cannot hang the process or become a high-volume exfiltration channel.

Build and run

go build -o cmdop-care .
./cmdop-care

Or via Docker (after resolving and pinning the base image digest — see the <PIN-BEFORE-BUILD> comment in Dockerfile):

docker build -t cmdop-care:0.1.2 .
docker run --rm -i cmdop-care:0.1.2

The server speaks MCP over stdio only — there is no listening port. Point your MCP client (Claude Code, Codex, or any other MCP-speaking assistant) at the built binary or image the way you would any other stdio MCP server.

For AI-client setup notes, including a minimal MCP JSON configuration and first prompt, see llms-install.md.

For marketplace submissions that require a square logo image, use the canonical 400×400 PNG in assets/cmdop-care-400.png.

Releasing a new version

Maintainers: see RELEASE.md — the short version is make publish, always run manually, never triggered by any CI or by cmdop_go's own release.

Relay address

By default cmdop-care dials the local embedded cmdop relay on loopback (127.0.0.1:63142). Set CMDOP_CARE_RELAY_ADDR to override the dial target for advanced self-hosted setups. This is a transport address only — never a credential.

Compatibility

cmdop-care version Compatible cmdop relay wire contract
v0.1.2 AiAgentService.GetMachineCare / RunMachineCareDiagnostic / roster-list shape as of 2026-07-18

Contributing to this repository

This repository enables a tracked pre-commit hook that rejects staged environment files, private keys, and probable API tokens. After cloning, run:

git config core.hooksPath .githooks

Security

This artifact went through an explicit threat-model and code-audit review before implementation (see the Cmdop organization's internal security-architecture-2026-07-18.md and code-audit-2026-07-18.md, referenced from this repository's delivery track). Report a security issue to security@cmdop.com (confirm this mailbox is live and monitored before relying on it — this repository's maintainers must verify that before publication).

License

Apache-2.0 — see LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选