{
  "markdown": "# contract-ops-mcp\n\nOne [MCP](https://modelcontextprotocol.io) server for the whole **[contract-ops CLI suite](https://cli.drbaher.com/)** — wire it up once and an agent (Claude, Cursor, Codex, …) gets all nine local-first CLIs as tools: extract, draft, lint, compare, convert, review, and the template + signed-contract vaults. **Signing stays human-gated.**\n\n## Run this\n\n```jsonc\n// e.g. Claude Desktop / Cursor MCP config\n{\n  \"mcpServers\": {\n    \"contract-ops\": { \"command\": \"npx\", \"args\": [\"-y\", \"contract-ops-mcp\"] }\n  }\n}\n```\n\nThe CLIs themselves must be installed (the server shells out to them). Fastest way to get all nine:\n\n```bash\ncurl -fsSL https://cli.drbaher.com/install.sh | sh     # local\n# …or run the server + CLIs in one container: ghcr.io/drbaher/contract-ops\n```\n\nCall **`suite_status`** any time to see which CLIs are present and how to install any that aren't.\n\n> **Prefer a ready-made agent?** [**contract-ops-agent**](https://github.com/DrBaher/contract-ops-agent) is a\n> terminal agent that already wraps this server in an *enclosure* — the model's only tools are the contract-ops\n> tools, no shell/filesystem/signing by construction. Bring your own model (Claude, OpenAI, or any\n> OpenAI-compatible endpoint): `npm i -g contract-ops-agent`.\n\n## Tools\n\nCurated, ergonomic tools (typed inputs, JSON out) for the common operations, plus two escape hatches for the long tail:\n\n| Tool | What it does |\n|---|---|\n| `extract_contract` | Any contract (.md/.txt/.html/.docx/.pdf) → structured JSON (parties, dates, clauses, …) |\n| `lint_contract` | Internal-consistency findings (placeholders, broken refs, defined-term/numbering/date defects) |\n| `compare_versions` | Clause-aware drift between two versions (exit 0 clean · 2 substantive · 3 cosmetic · 4 moved) |\n| `fill_template` | Fill a template's placeholders with typed params (deterministic) |\n| `convert_to_pdf` | DOCX → PDF (needs a PDF backend, e.g. LibreOffice) |\n| `review_nda` | Score an NDA against a house playbook, with evidence |\n| `template_vault_find` / `template_vault_get` | Search / resolve versioned templates (read-only) |\n| `contract_vault_query` / `contract_vault_due` / `contract_vault_risk` | Query the signed-contract register; project renewal/notice deadlines; renewal-exposure (read-only) |\n| `verify_signature` / `verify_receipt` / `audit_show` | Verify a signed PDF / a receipt bundle / walk the audit log (**read-only**) |\n| `catalog(cli)` | Return any CLI's full `--catalog json` — discover the long tail |\n| `run(cli, args)` | Escape hatch: run any suite CLI with raw args (no shell) |\n| `suite_status` | Which CLIs are installed (+ versions) and how to install the rest |\n\nThe curated set and `catalog`/`run` are **discovery-driven** — they ride the suite's uniform `--catalog json` contract, so they stay in sync as the CLIs evolve.\n\n## Safety\n\n- **Signing is human-gated.** Only sign-cli's **read/verify** operations are exposed (`verify_signature`, `verify_receipt`, `audit_show`) — never request-create or sign. This is enforced: the `run`/`catalog` escape hatches reject any `sign` subcommand outside a read-only allowlist, so request-create/send/sign/approve can't be reached here. Those stay behind [sign-cli](https://github.com/DrBaher/sign-cli)'s own MCP server with its per-signer approval tokens, so this server can't become an unguarded signing path.\n- **Filesystem lockdown.** File-path arguments to the curated tools are confined to `CONTRACT_OPS_MCP_BASE_DIR` (default: the working directory). Set it to widen the sandbox.\n- **No shell.** CLIs are invoked with `execFile` (no shell interpolation).\n\n## License\n\nMIT. Part of the [contract-ops CLI suite](https://cli.drbaher.com/). See [`AGENTS.md`](AGENTS.md) for the agent contract.\n",
  "bytes": 3755,
  "sha": "1a31391792a6a802740e263c29b3b3038cbd4a94f8371ce43c5fa36ce9ca6938",
  "repo_slug": "drbaher/contract-ops-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_drbaher_contract_ops_mcp_ba8908b3/readme"
}