{
  "markdown": "# mcp-debezium\n\n[![CI](https://github.com/dockndevai/mcp-debezium/actions/workflows/ci.yml/badge.svg)](https://github.com/dockndevai/mcp-debezium/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/@dockndevai/mcp-debezium)](https://www.npmjs.com/package/@dockndevai/mcp-debezium)\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server for **Debezium** (via the **Kafka Connect** REST API). It lets an MCP-capable client (Claude Desktop, Claude Code, etc.) **monitor and manage change-data-capture connectors** — status, config, restarts, lifecycle — with behaviour controlled entirely by flags.\n\nSafe by default: it starts read-only, can be scoped to an allowlist of connectors, protects critical connectors from mutation, redacts credentials in connector configs, and gates deletion behind an explicit opt-in.\n\n## Features\n\n- **Monitoring** — worker/cluster info, connector list, plugins, per-connector config, status (with failed-task traces), and topics.\n- **Management** — create/update, pause/resume, restart connector or a single task.\n- **Lifecycle** — delete connectors (admin).\n- **Access modes** — `read-only` → `read-write` → `admin`, layered so a mode never exposes tools above its level.\n- **Credential redaction** — `database.password` and other secret-shaped config values are replaced with `***REDACTED***` before results are returned.\n- **Security flags** — connector allowlist, protected connectors, delete gating, dry-run, and JSON audit logging (see below).\n\n## Security model\n\n| Concern | Flag | Default | Effect |\n| --- | --- | --- | --- |\n| What can the server do? | `DEBEZIUM_MODE` | `read-only` | `read-only` exposes monitoring only; `read-write` adds lifecycle management; `admin` adds delete. Tools above the mode are **never registered**. |\n| Which connectors are in scope? | `DEBEZIUM_CONNECTOR_ALLOWLIST` | *(all)* | When set, operations on other connectors are refused. |\n| Which connectors are read-only forever? | `DEBEZIUM_PROTECTED_CONNECTORS` | *(none)* | Inspectable but never paused/reconfigured/deleted. |\n| Can it delete? | `DEBEZIUM_ALLOW_DELETE` | `false` | `delete_connector` needs this **and** admin mode. |\n| Preview without touching Connect | `DEBEZIUM_DRY_RUN` | `false` | Write/admin tools validate + log intent, then return. |\n| Audit trail | `DEBEZIUM_AUDIT_LOG` | `true` | Emits a JSON line to stderr per guarded operation. |\n| Credential redaction | *(always on)* | — | Secret-shaped config values are redacted before return. |\n\n## Tools\n\n**Read** (`read-only`+): `cluster_info`, `list_connectors`, `list_connector_plugins`, `get_connector`, `get_connector_config`, `get_connector_status`, `get_connector_topics`\n\n**Write** (`read-write`+): `create_connector`, `update_connector_config`, `pause_connector`, `resume_connector`, `restart_connector`, `restart_task`\n\n**Admin** (`admin`): `delete_connector` (needs `DEBEZIUM_ALLOW_DELETE`)\n\n## Quickstart — add to your agent\n\nPublished on npm as [`@dockndevai/mcp-debezium`](https://www.npmjs.com/package/@dockndevai/mcp-debezium). No clone or build needed — your MCP client runs it on demand with `npx`. **Start in `read-only` mode**; see [`.env.example`](.env.example) for every variable and [docs/CLIENTS.md](docs/CLIENTS.md) for the full per-client guide.\n\n**Claude Code** (CLI)\n\n```bash\nclaude mcp add debezium -e CONNECT_URL=\"http://localhost:8083\" -e DEBEZIUM_MODE=\"read-only\" -- npx -y @dockndevai/mcp-debezium\n```\n\n**Claude Desktop · Cursor · Windsurf** — same block in `claude_desktop_config.json`, `.cursor/mcp.json`, or `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"debezium\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@dockndevai/mcp-debezium\"\n      ],\n      \"env\": {\n        \"CONNECT_URL\": \"http://localhost:8083\",\n        \"DEBEZIUM_MODE\": \"read-only\"\n      }\n    }\n  }\n}\n```\n\n**OpenAI Codex CLI** — in `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.debezium]\ncommand = \"npx\"\nargs = [\"-y\", \"@dockndevai/mcp-debezium\"]\nenv = { CONNECT_URL = \"http://localhost:8083\", DEBEZIUM_MODE = \"read-only\" }\n```\n\n**VS Code (GitHub Copilot, Agent mode)** — in `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"debezium\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@dockndevai/mcp-debezium\"\n      ],\n      \"env\": {\n        \"CONNECT_URL\": \"http://localhost:8083\",\n        \"DEBEZIUM_MODE\": \"read-only\"\n      }\n    }\n  }\n}\n```\n\n## Example prompts\n\n- *\"Which connectors are FAILED, and why?\"*\n- *\"Restart the failed task on `pg-orders`.\"* (needs `read-write`)\n- *\"Show the config for `mysql-inventory`.\"* (credentials come back redacted)\n\n## Run from source (development)\n\nPrefer the published package above. To run from a clone:\n\n```bash\nnpm install\nnpm run build\nnode dist/index.js   # with the environment variables set\n```\n\n## Develop\n\n```bash\nnpm run dev\nnpm test          # security policy + config redaction\nnpm run typecheck\n```\n\n## Publishing\n\nThis server ships a [`server.json`](server.json) for the official MCP registry and an [`mcpName`](package.json) for npm ownership validation. See **[PUBLISHING.md](PUBLISHING.md)** for publishing to npm and listing on the MCP registry, Smithery, Glama, Cursor, and PulseMCP.\n\n## License\n\nMIT\n",
  "bytes": 5340,
  "sha": "0a638fe10dd165a784aa5d6e60a5147a59c5b0b3e73f445da89739c4f537dfb7",
  "repo_slug": "dockndevai/mcp-debezium",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_dockndevai_mcp_debezium_6a5c94d5/readme"
}