{
  "markdown": "# ServerOps\n\n<!-- mcp-name: io.github.cyyprezz/codex-serverops-mcp -->\n\n[![CI](https://github.com/cyyprezz/codex-serverops-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/cyyprezz/codex-serverops-mcp/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/codex-serverops-mcp)](https://pypi.org/project/codex-serverops-mcp/)\n[![Python](https://img.shields.io/pypi/pyversions/codex-serverops-mcp)](https://pypi.org/project/codex-serverops-mcp/)\n[![License](https://img.shields.io/github/license/cyyprezz/codex-serverops-mcp)](LICENSE)\n\nOperate the Linux servers you choose from Codex or Claude Code—through normal conversation,\nwithout installing a ServerOps agent on them.\n\nServerOps keeps useful Bash state between operations, returns structured evidence, and opens\nvisible local windows when OpenSSH or sudo needs input. It is for freelancers, agencies, support\nteams, project owners, and operators who need reliable server work without living in an SSH\nterminal.\n\n## Three promises\n\n### Easy to start\n\nThin Codex and Claude Code plugins connect to one shared ServerOps core. A guided local assistant\ncreates explicit server profiles without putting credentials into chat.\n\n### Easy to operate\n\nAsk for an outcome in normal language. ServerOps keeps the working directory and shell environment\nin a held Bash session, supports interactive terminal work, and returns bounded, structured\nresults instead of an uncontrolled wall of terminal text.\n\n### Reliable when outcomes matter\n\nSessions belong to a local broker-owned worker rather than the disposable MCP process. If the\nresult of a remote mutation is uncertain, ServerOps reports `outcome_unknown` and never retries it\nautomatically. Linux permissions, explicit profiles, visible authentication, controlled elevation,\nhash preconditions, and a redacted local audit form the trust layer.\n\n## See it in action\n\nThese are realistic prompts for the eight tools available today:\n\n```text\nList my ServerOps profiles. Do not connect to a server or change anything.\n```\n\n```text\nUse the customer-web profile. Start read-only, identify the host and current user, then explain\nwhy the service is unhealthy. Narrow the diagnosis with evidence instead of dumping every log.\n```\n\n```text\nOpen the project profile, enter /srv/my-app, inspect the current Git and Compose state, and keep\nthe session open so we can continue from the same directory.\n```\n\n```text\nRead /srv/my-app/.env.example with the structured file tool. Propose a minimal change and show me\nthe observed SHA-256, but do not apply anything until I approve it.\n```\n\nSee the step-by-step [reproducible demo](docs/demo.md) for expected evidence and safe boundaries.\n\n## Available today\n\n- <!-- capability:profiles -->Explicit profiles and a visible local profile assistant.\n- <!-- capability:broker_sessions -->Broker-owned, stateful Bash sessions with completed-command\n  and interactive-terminal modes.\n- <!-- capability:mcp_restart_rediscovery -->Rediscovery after an MCP-client restart when the\n  optional managed broker task is installed and the broker, worker, and Bash remain alive.\n- <!-- capability:unknown_outcomes -->Explicit unknown-outcome errors with no automatic retry of\n  uncertain mutations.\n- <!-- capability:structured_files -->Bounded structured UTF-8 text operations inside configured\n  roots, with optional SHA-256 preconditions for edits.\n- <!-- capability:visible_auth -->Visible local OpenSSH authentication and host-key decisions,\n  plus guided sudo and optional root sessions.\n- <!-- capability:local_audit -->Redacted local JSONL audit events without remote output or file\n  contents.\n- <!-- capability:shared_core -->One eight-tool MCP core with thin Codex and Claude Code wrappers.\n- <!-- capability:automatic_bootstrap -->Automatic, idempotent local bootstrap on first MCP start.\n- <!-- capability:claude_plugin -->A native Claude Code marketplace and plugin beside Codex.\n- <!-- capability:no_remote_agent -->No ServerOps agent or daemon installed on the Linux server.\n\nThe current runtime is Windows-first and uses Windows OpenSSH to reach Linux. The detailed\n[tool reference](docs/tool-reference.md) defines the exact operations and schemas.\n\n## Codex quickstart\n\nInstall the repository marketplace and plugin. The pinned `0.1.1` MCP creates its own local state\non first start; no prior setup command is required:\n\n```powershell\ncodex plugin marketplace add cyyprezz/codex-serverops-mcp\ncodex plugin add codex-serverops-mcp@serverops-codex\n```\n\nStart a new Codex task. Do not add a separate user-wide `[mcp_servers.serverops]` block when using\nthe plugin. If a previous installer created that alternative block, preview its removal with\n`serverops-install codex-config --remove`, then repeat with `--apply` only after review. This keeps\nprofiles and audit data. Begin without contacting a server:\n\n```text\nList my ServerOps profiles. Do not create, edit, remove, test, or connect to a profile. If no\nsuitable profile exists, wait for me to provide non-secret suggestions before opening the visible\nprofile assistant. Credentials and host-key decisions belong only in the local ServerOps window.\n```\n\n## Claude Code quickstart\n\nThe Claude Code wrapper uses the same pinned `0.1.1` runtime and client-neutral skills:\n\n```powershell\nclaude plugin marketplace add cyyprezz/codex-serverops-mcp\nclaude plugin install serverops@serverops-claude\n```\n\nIf the GitHub shorthand requires an SSH key that is not configured, add the marketplace through\nHTTPS instead:\n\n```powershell\nclaude plugin marketplace add https://github.com/cyyprezz/codex-serverops-mcp.git\n```\n\nStart a new Claude Code session (or reload plugins) and use the same safe first prompt.\n\n## Automatic local bootstrap\n\nVersion `0.1.1` starts without a separate setup command. MCP, broker, setup, check, Doctor, and\nupdate share one idempotent bootstrap that prepares only ServerOps-owned local state: the app,\nconfiguration, runtime, audit, migration, and status paths for the current user.\n\nThe bootstrap does **not** edit Codex or Claude configuration, install a Scheduled Task, create a\nprofile, contact a server, request administrator rights, or overwrite an unmanaged file. The\nvisible profile assistant remains the first possible server contact.\n\nThe explicit `serverops-install setup` command remains compatible and idempotent for maintenance\nand for previewing the optional broker task; it is no longer a plugin prerequisite.\n\n## Optional installer and broker task\n\nThe version-pinned installer can check the shared runtime or a client path:\n\n```powershell\nuvx --from \"codex-serverops-mcp==0.1.1\" serverops-install check --client core\nuvx --from \"codex-serverops-mcp==0.1.1\" serverops-install doctor --client claude\n```\n\n`doctor --client codex` also checks the alternative installer-managed user configuration. A\nplugin-only Codex installation can therefore warn that this optional block is absent; that warning\ndoes not prove the plugin is broken.\n\nInstall the managed current-user broker task only when live sessions must be reliably rediscovered\nafter an MCP client process restarts. Preview first, then apply explicitly:\n\n```powershell\nuvx --from \"codex-serverops-mcp==0.1.1\" serverops-install setup --broker-task\nuvx --from \"codex-serverops-mcp==0.1.1\" serverops-install setup --broker-task --apply\n```\n\nThe task requests no administrator elevation and stores no password. It does not make sessions\nsurvive a Windows reboot or broker crash; the current broker does not adopt orphaned workers.\n\n## Typical workflows\n\n### Customer server check\n\nSelect the named customer profile, start read-only, confirm target and identity, inspect only the\nrelevant service evidence, and report facts, hypotheses, gaps, and any changes separately.\n\n### Remote project work\n\nEnter a project directory once, retain its shell environment across calls, run bounded commands,\nand use structured file reads or preconditioned text edits for configured paths.\n\n### Interactive or longer-running work\n\nUse the terminal only when a command genuinely needs interaction, incremental output, interrupt,\nresize, or retained terminal state. Completed commands can run for up to the configured maximum of\n3600 seconds and return exit code, duration, CWD, and truncation state.\n\n### Configured remote files\n\nList, inspect, search, read, hash, write, patch, rename, create, or remove UTF-8 text paths inside a\nprofile's configured roots. These roots constrain the structured file tools; they do not sandbox\nshell commands or replace backups.\n\n### Authentication and sudo\n\nPasswords, key passphrases, host-key decisions, and interactive sudo input stay in separate visible\nlocal windows. ServerOps can use existing OpenSSH behavior or guide a controlled key transition.\nSudo remains governed by the server's PAM and sudoers policy.\n\n## One-off SSH command or ServerOps?\n\n| Need | `ssh host \"command\"` | ServerOps |\n|---|---|---|\n| One isolated command | Smallest direct option | Works, but often unnecessary |\n| Keep CWD and shell environment | Reconstruct it each time | Held in one live Bash session |\n| Interactive terminal control | Requires a terminal workflow | Cursor reads, input, interrupt, resize, status |\n| Structured text files | Parse and quote shell output | Bounded results and optional hash preconditions |\n| Authentication prompts | Terminal-owned | Separate visible local windows |\n| Uncertain remote mutation | Operator must reason from transport loss | Explicit unknown-outcome result; no automatic retry |\n| Continue after MCP restart | New SSH command | Rediscoverable with the optional broker task while processes remain alive |\n\nServerOps does not replace SSH. It uses OpenSSH and adds a stateful, structured boundary for AI-led\noperations where repeated one-off commands become fragile or difficult to review.\n\n## Architecture\n\n```mermaid\nflowchart LR\n    C[\"Codex plugin\"] --> M[\"Shared ServerOps MCP core\"]\n    A[\"Claude Code plugin\"] --> M\n    M --> B[\"Local per-user broker\"]\n    B --> W[\"One worker per live session\"]\n    W --> S[\"Windows OpenSSH\"]\n    S --> L[\"Configured Linux server<br/>Bash + common utilities\"]\n    W -. \"visible local prompts\" .-> U[\"Operator\"]\n    M --> F[\"Local profiles + redacted audit\"]\n```\n\nThe MCP process exposes eight tools. The broker owns session routing, each worker owns exactly one\nSSH/Bash process, and no ServerOps component is installed remotely. See\n[Architecture](docs/architecture.md) and [Broker lifecycle](docs/broker.md).\n\n## Requirements and honest limits\n\n- Windows 10 or 11, Python 3.12, `uv`/`uvx`, and Windows OpenSSH Client for the current release.\n- An SSH-accessible Linux account with Bash; structured files require the common utilities listed\n  in [Structured remote files](docs/structured-files.md).\n- ServerOps is alpha software. Start with a disposable or non-production account and narrow Linux\n  permissions.\n- Stateful means process-held: no durable jobs, resume after reboot, or worker adoption after a\n  broker crash.\n- Structured files are bounded UTF-8 text operations, not binary or resumable transfers and not a\n  transactional filesystem.\n- `allowed_roots` constrain only structured file tools. Shell commands retain the SSH user's real\n  permissions.\n- ServerOps makes no exactly-once promise. A timeout or connection loss after delivery can leave an\n  effect unknown and requires read-only verification.\n- First-class clients today are Codex and Claude Code. Claude Desktop, Cherry Studio, and other\n  desktop-client onboarding are planned, not shipped.\n- There is no `ServerOpsSetup.exe` yet; the public release requires Python 3.12 and `uvx`.\n\n## Capability status\n\n| Capability | Status | Boundary |\n|---|---|---|\n| Profiles, completed commands, interactive terminal | Available | Eight-tool MCP core |\n| Stateful broker-owned sessions | Available | While broker, worker, and Bash remain alive |\n| MCP-restart rediscovery | Available | Requires optional managed broker task for reliability |\n| Structured UTF-8 text files | Available | Configured roots, bounded data, optional SHA-256 preconditions |\n| Visible auth, guided sudo, local audit | Available | Local trust layer; Linux policy remains authoritative |\n| Codex plugin | Available in 0.1.1 | Exact `0.1.1` runtime pin |\n| Claude Code plugin | Available in 0.1.1 | Exact `0.1.1` runtime pin |\n| Automatic local bootstrap | Available in 0.1.1 | No setup prerequisite; own state only |\n| <!-- planned:windows_exe -->`ServerOpsSetup.exe` and self-contained Windows runtime | Planned 0.1.2 | No Python/uv prerequisite after delivery |\n| <!-- planned:persistent_jobs --><!-- planned:eventlog --><!-- planned:log_engine --><!-- planned:binary_resume_transfers -->Persistent jobs, receipts, eventlog, logs, resumable transfers | Planned 0.2 | Durable operation state, not command wrappers |\n| <!-- planned:incident_system -->Persistent investigations and incident timelines | Planned 0.3 | Built on the operation store |\n| <!-- planned:fleet_rollouts --><!-- planned:transactional_changes -->Transactional changes and fleet rollouts | Planned 0.4 | Preconditions, verification, compensation; no exactly-once claim |\n| <!-- planned:backup_assurance --><!-- planned:native_database_adapters -->Backup assurance and native database adapters | Planned 0.5 | Only where shell prompting is insufficient |\n\nThe machine-readable [capability contract](docs/capabilities.json) keeps this table, evidence paths,\ntool names, marketplace identities, and public version pins testable.\n\n## Roadmap\n\n- **0.1.1A:** Claude Code, neutral branding, automatic local bootstrap, project foundations.\n- **0.1.1B:** this evidence-led product presentation and reproducible demo.\n- **0.1.1C:** synchronized version pins, clean-machine cold starts, lifecycle regressions,\n  commit-bound release evidence, and publication hardening.\n- **0.1.2:** self-contained Windows packaging, graphical onboarding, and explicitly confirmed\n  desktop-client integration.\n- **0.2–0.5:** durable operations, investigations, fleet-safe changes, backup assurance, and narrow\n  native adapters.\n\nSee [ROADMAP.md](ROADMAP.md) for the phase definitions. Planned items are not available features.\n\n## Documentation and project\n\n- [Getting started](docs/getting-started.md) and [reproducible demo](docs/demo.md)\n- [Installation, update, Doctor, and uninstall](docs/installation.md)\n- [Profiles](docs/configuration.md), [tools](docs/tool-reference.md), and\n  [troubleshooting](docs/troubleshooting.md)\n- [Authentication](docs/authentication.md), [elevation](docs/elevation.md),\n  [structured files](docs/structured-files.md), and [security model](docs/security.md)\n- [Architecture](docs/architecture.md), [ADRs](docs/adr/README.md), and\n  [release evidence](docs/release-evidence.md)\n- [0.1.1 release notes](docs/release-notes-0.1.1.md),\n  [migration and rollback](docs/migration-rollback-evidence.md), and\n  [release checklist](docs/release-candidate-checklist.md)\n- [Changelog](CHANGELOG.md), [artifact plan](docs/artifact-plan.md), and\n  [contributing guide](CONTRIBUTING.md)\n\nFor support, open a [GitHub issue](https://github.com/cyyprezz/codex-serverops-mcp/issues) without\ncredentials, private keys, customer hostnames, or production output. Report vulnerabilities through\n[SECURITY.md](SECURITY.md). ServerOps is available under the [MIT License](LICENSE).\n",
  "bytes": 15360,
  "sha": "5c949552266ae106085a3dfab6b3210d93319682914dfe35628bfbce47f0244b",
  "repo_slug": "cyyprezz/codex-serverops-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_cyyprezz_codex_serverops_mcp_fb6ae717/readme"
}