Kafka MCP Enterprise Server
Reference implementation of KIP-1318, a secure Model Context Protocol server for Apache Kafka that enables AI agents to interact with Kafka clusters through governed tools and resources.
README
Kafka MCP Enterprise Server

Product packaging image for the PyPI package (not a web UI).
PyPI
pip install kafka-mcp-enterprise
echo {"jsonrpc":"2.0","id":1,"method":"tools/list"} | kafka-mcp-enterprise
| Package | kafka-mcp-enterprise |
| CLI | kafka-mcp-enterprise |
| Import | import kafka_mcp |
| Optional | pip install kafka-mcp-enterprise[otel] |
| Publish | Tag v* → .github/workflows/publish.yml (Trusted Publishing / OIDC - see doc/publishing.md) |
Agents & skills (Cursor, Kiro, ChatGPT, Gemini, Copilot, …)
| AGENTS.md | AGENTS.md - canonical instructions for every coding agent |
| Skills | .cursor/skills/ (Cursor) · skills/ (portable) |
| Guide | doc/agents-and-skills.md - how to load in each IDE |
Reference implementation of KIP-1318: a first-party Model Context Protocol (MCP) server for Apache Kafka-secure by design, fail-closed by default, and built for agent workloads that must not become a confused deputy on your cluster.
| KIP | KIP-1318: MCP Server for Apache Kafka |
| Jira | KAFKA-20436 - Implement KIP-1318 |
| Discuss | [DISCUSS] KIP-1318 on dev@kafka.apache.org |
| This repo | Stdlib Python reference / conformance server (teaching, demos, security validation) |
| KIP production target | Java module (tools/mcp-server) wrapping native Kafka clients - see the KIP |
Scope clarity: The Apache Kafka project tracks the official implementation under KAFKA-20436. This repository is an independent, zero-dependency reference that encodes the enterprise control plane, error model, and conformance tests so designs can be validated before or alongside the Java work. It is not a drop-in replacement for the forthcoming first-party Java MCP server.
Why this exists
AI agents need governed Kafka access-not ad-hoc scripts, unbounded consumes, or shared “god” principals. KIP-1318 proposes a standalone MCP process (stdio / HTTP) that exposes tools and kafka:// resources without changing the Kafka wire protocol. This reference implements the full enterprise control plane below.
Broker ACLs remain authoritative. Guardrails here complement them; they never replace them.
What’s included

Documentation product image (not a web UI). Checklist of what this Python stdio reference implements: fail-closed pipeline, DLP, 11 tools, kafka:// resources, tests, and examples.
How it runs
flowchart LR
Agent["Agent / IDE"]
MCP["kafka-mcp-enterprise<br/>stdio JSON-RPC + pipeline"]
Kafka["Kafka<br/>ACLs authoritative"]
Agent -->|"MCP tools/call"| MCP
MCP -->|"Admin / Produce / Consume"| Kafka
This repo: Python stdlib reference (in-memory Kafka for tests). KIP production track: Java (tools/mcp-server / KAFKA-20436), not shipped here.
Fail-closed pipeline (overview)
flowchart TB
A["1 Auth"] --> B["2 Deny-list"] --> C["3 Allow / readonly"]
C --> D["4 Scope"] --> E["5 Policy"] --> F["6 Taint / IFC"]
F --> G["7 Approval"] --> H["8 Rate limit"] --> I["9 Breaker execute"]
Full detail: doc/security-controls.md · architecture: doc/architecture.md.
Complete features, security controls & guardrails
Nothing below is optional marketing - every item is implemented in kafka_mcp/ and covered by the 85/85 conformance suite and/or demos/examples unless noted as a documented reference gap.
A. MCP protocol & surface
| Feature | Detail |
|---|---|
| JSON-RPC 2.0 | Strict jsonrpc: "2.0" request/response |
initialize |
protocolVersion, serverInfo, capabilities |
tools/list |
Visible tools honor deny-list, allow-list, and readonly |
tools/call |
Full fail-closed pipeline + handler |
resources/list |
Catalog of kafka:// URIs |
resources/read |
Topic/cluster/group/audit/health reads |
| stdio transport | Newline-delimited JSON (serve_stdio / kafka-mcp-enterprise) |
| HTTP notes | Stateless HTTP design documented; full HTTP listener is a KIP/Java concern |
| Stateless approvals | HMAC tokens self-contained (no sticky session required for authz correctness) |
| Correlation IDs | Per-call corr_id on audit entries |
B. Tools (11) - classified
| Tool | kind | module | Kafka op |
|---|---|---|---|
list_topics |
read | control_plane | DESCRIBE |
describe_topic |
read | control_plane | DESCRIBE |
describe_cluster |
read | control_plane | DESCRIBE |
list_consumer_groups |
read | control_plane | DESCRIBE |
describe_consumer_group |
read | control_plane | DESCRIBE |
consume_messages |
read | data_plane | READ |
create_topic |
mutate | control_plane | CREATE |
alter_topic_config |
mutate | control_plane | ALTER |
produce_message |
mutate | data_plane | WRITE |
delete_topic |
destructive | control_plane | DELETE |
create_acls |
destructive | control_plane | ALTER |
C. Resources (kafka://)
| URI | Purpose |
|---|---|
kafka://topics |
List topics |
kafka://topics/{name} |
Describe topic |
kafka://cluster |
Cluster id + brokers |
kafka://groups |
Consumer groups |
kafka://audit/recent |
Recent audit entries |
kafka://health |
Liveness + per-module circuit breaker state |
D. Fail-closed security pipeline (exact order)
Every tools/call - first denial wins:
| Step | Control | Denial code |
|---|---|---|
| 1 | Bearer auth - audience / issuer validation (off until configured) | -32001 UNAUTHORIZED |
| 2 | Deny-list (tools_denied) |
-32044 POLICY_DENIED |
| 3 | Allow-list (tools_allowed) + readonly (blocks all non-read, including produce) |
-32044 |
| 4 | Topic prefix scope + group prefix scope | -32041 SCOPE_VIOLATION |
| 5 | Policy engine - callable; deny or exception → fail-closed | -32044 |
| 6 | Taint guard / IFC - destructive tools; optional ifc_strict; approval bypasses |
-32040 TAINT_VIOLATION |
| 7 | Approval gate - HMAC signed TTL token (_approval_token) |
-32042 APPROVAL_REQUIRED |
| 8 | Rate limit - general vs admin/control-plane buckets | -32029 RATE_LIMITED |
| 9 | Execute via per-module circuit breaker + dependency check | -32043 DEPENDENCY_UNAVAILABLE |
Pre / around execute (also enforced):
| Guardrail | Behavior | Code |
|---|---|---|
| Input validation | Identifier charset; max_value_bytes on produce values |
-32046 VALIDATION_FAILED |
| Rogue-agent kill-switch | Per-identity destructive burst → quarantine | -32047 QUARANTINED |
| Identity propagation | Optional per-principal broker ACL check before execute | -32044 |
| Sensitive-topic gating | Pattern match on consume → requires approval | -32042 |
| Egress DLP | Block secret categories on produce | -32045 SENSITIVE_DATA_BLOCKED |
| Dry-run tools | dryrun_tools returns plan without mutation |
- |
| Consume clamp | maxMessages capped by hard_max_records |
- |
| Byte bounds | hard_max_bytes trims consume payload; max_output_bytes truncates scrubbed output |
truncation tags |
| Post-execute DLP scrub | Redact/scrub whole result tree | - |
| Taint registration | Consumed values registered into session taint set | - |
| Audit | ALLOW/DENY recorded (params truncated, hash-chained) | - |
E. Data-protection guardrails (DLP)
| Capability | Detail |
|---|---|
| Modes | redact | block | off (dlp_mode) |
| Default block categories | private_key, aws_access_key, jwt |
| Detectors (10) | email, ssn, credit_card (Luhn-validated), phone, ipv4, aws_access_key, private_key, jwt, iban, secret_assignment |
| Consume path | Redact PII in records; block-mode can refuse |
| Produce path | Egress scan → -32045 |
| Sensitive configs | Mask password/secret-like keys on describe (redact_sensitive_configs) |
| Scrub all outputs | Walk entire JSON result (scrub_all_outputs) |
| Legacy interceptor | interceptor.redact_record kept for compatibility; DLP is primary |
F. Approval, taint & IFC
| Capability | Detail |
|---|---|
| HMAC approval tokens | mint / verify; TTL (default 300s); tool-bound |
| Forged / expired tokens | Rejected → -32042 |
| Default approval-required tools | delete_topic, delete_records, create_acls, delete_acls, alter_partition_reassignments, alter_broker_config |
| Taint guard | Best-effort substring match of session tainted values into destructive args |
ifc_strict |
After untrusted read, blocks destructive/control-plane without approval |
| Honesty | Taint is defeatable by laundering; least-privilege broker ACLs are load-bearing |
G. Scoping, exposure & identity
| Capability | Detail |
|---|---|
| Tool allow-list / deny-list | tools_allowed, tools_denied |
| Secure-by-default guidance | Ops should set allow-list to read/non-destructive (harness default * - tighten in prod) |
| Readonly mode | Disables create/produce/alter/delete/ACLs |
| Topic prefixes | allowed_topic_prefixes |
| Group prefixes | allowed_group_prefixes |
| Identity propagation | identity_propagation + in-memory per-principal ACLs (set_principal_acl / authorize) |
| Session identity | session["identity"] for audit, quarantine, ACL principal |
H. Resilience & blast-radius controls
| Capability | Detail |
|---|---|
| Circuit breakers | Per module: data_plane, control_plane, ecosystem |
| Breaker isolation | Control-plane open does not take down data-plane consume/produce |
| Dependency failure hook | _inject_dependency_failure / _fail_module → -32043 |
| Rate limits | rate_requests_per_second + rate_admin_requests_per_second |
| Quarantine | max_destructive_per_minute per identity |
| Health resource | Breaker states on kafka://health |
I. Consume semantics (Direct Partition Assignment)
| Mode | Behavior |
|---|---|
No groupId |
assignment=direct, no consumer group, no rebalance |
With groupId |
Classic group path; register offsets; rebalance counter increments |
J. Backend surface (in-memory Kafka)
create_topic, delete_topic, list_topics, describe_topic, alter_topic_config, produce, consume, list_groups, describe_group, group_lag, create_acls, list_acls, describe_cluster, principal ACLs, rebalance counter, dependency hooks.
K. Audit
| Capability | Detail |
|---|---|
| Ring buffer | Recent entries (maxlen=1000) |
| Hash chaining | Tamper-resistant best-effort chain |
| Param truncation | Long params truncated (>64 chars) |
| Decisions | ALLOW / DENY with identity, tool, corr_id |
| Resource | kafka://audit/recent |
audit_topic |
Config name present; durable Kafka mirror is a documented reference gap |
L. Error codes (complete - 15)
| Code | Constant | Meaning |
|---|---|---|
| -32700 | PARSE_ERROR | JSON parse error |
| -32600 | INVALID_REQUEST | Invalid request |
| -32601 | METHOD_NOT_FOUND | Unknown method/tool |
| -32602 | INVALID_PARAMS | Invalid params / structured Kafka errors |
| -32603 | INTERNAL_ERROR | Internal error |
| -32001 | UNAUTHORIZED | Bad/missing bearer |
| -32029 | RATE_LIMITED | Rate limited |
| -32040 | TAINT_VIOLATION | Tainted value into destructive tool |
| -32041 | SCOPE_VIOLATION | Topic/group out of scope |
| -32042 | APPROVAL_REQUIRED | Destructive/sensitive needs approval |
| -32043 | DEPENDENCY_UNAVAILABLE | Circuit breaker open / dependency down |
| -32044 | POLICY_DENIED | Deny/allow/readonly/policy/ACL propagation |
| -32045 | SENSITIVE_DATA_BLOCKED | Egress / DLP block |
| -32046 | VALIDATION_FAILED | Malformed identifier / oversized value |
| -32047 | QUARANTINED | Rogue-agent kill-switch |
M. Configuration surface (32 fields)
bootstrap_servers, transport, tools_allowed, tools_denied, readonly, allowed_topic_prefixes, allowed_group_prefixes, taint_guard_enabled, approval_required_tools, dryrun_tools, audit_topic, policy_engine, circuit_breaker_enabled, dependency_timeout_ms, rate_requests_per_second, rate_admin_requests_per_second, oauth_expected_audience, oauth_expected_issuer, approval_signing_secret, redaction_enabled, dlp_mode, dlp_block_categories, scrub_all_outputs, redact_sensitive_configs, sensitive_topic_patterns, max_value_bytes, max_output_bytes, max_destructive_per_minute, ifc_strict, hard_max_records, hard_max_bytes, identity_propagation.
Full defaults: doc/configuration.md.
N. Quality, packaging & agent DX
| Feature | Detail |
|---|---|
| Conformance suite | 85/85 checks (functional, security, guardrails, mechanisms, resources, stdio, audit hardening) |
| Smoke + demo | test_kafka_mcp.py (16), demo_end_to_end.py (22 steps, all security codes) |
| Examples | Six folders with real-world data/ fixtures |
| PyPI | kafka-mcp-enterprise · CLI kafka-mcp-enterprise |
| Stdlib-only core | No hard third-party deps |
| Optional OTel | pip install …[otel] - not required (doc/observability.md) |
| AGENTS.md + skills | Cursor / Kiro / Copilot / ChatGPT / Gemini (doc/agents-and-skills.md) |
O. Documented reference gaps (intentional)
HTTP full server · real brokers · HTTP policy URL client · durable audit_topic publish · wall-clock dependency_timeout_ms · some approval tool names reserved but not all registered · production language = Java (this package is the Python reference). See doc/kip-alignment.md.
Quick start
Requires Python 3.8+. Core has no third-party packages.
# From source
python run_tests.py
python demo_end_to_end.py
python examples/01_sre_readonly_triage/run.py
echo {"jsonrpc":"2.0","id":1,"method":"tools/list"} | python serve_stdio.py
See the PyPI section at the top for pip install, or doc/publishing.md to publish a release.
Documentation & examples
| Resource | Description |
|---|---|
| doc/ | End-to-end guides: getting started, architecture, security, config, tools, errors, testing |
| doc/kip-alignment.md | Feature matrix vs KIP-1318 - what is implemented vs intentional reference gaps |
| doc/publishing.md | PyPI package kafka-mcp-enterprise |
| doc/observability.md | OpenTelemetry: optional, not required |
| doc/agents-and-skills.md | AGENTS.md + skills for all IDEs |
| examples/ | Six folder-based scenarios (run.py + real-world data/ fixtures) |
Repository layout
flowchart TB
root["kafka-mcp-enterprise-server"]
pkg["kafka_mcp/<br/>reference server"]
tests["tests/<br/>85-check suite"]
docs["doc/<br/>guides + diagrams"]
ex["examples/<br/>6 scenarios"]
entry["serve_stdio.py · run_tests.py · demo_end_to_end.py"]
root --> pkg
root --> tests
root --> docs
root --> ex
root --> entry
Engineering standards
This reference aims at production-grade practice even while staying a teaching implementation:
| Practice | How it shows up |
|---|---|
| Fail-closed | First denial wins; no execute-then-check paths |
| Least privilege | Prefix scopes, allow/deny lists, readonly, approval for destructive ops |
| Defense in depth | MCP controls + explicit honesty that broker ACLs are load-bearing |
| Bounded blast radius | Hard record/byte caps, rate limits, per-plane breakers, quarantine |
| Observable denials | Stable error codes, correlation IDs, audit ALLOW/DENY |
| Testability | Deterministic in-memory backend; security + integration coverage |
| Zero dependency debt | Python stdlib only - easy to audit and run in CI |
| Clear product boundary | Official Kafka delivery tracked on KAFKA-20436 (Java) |
Honest limitations (by design)
- Taint / IFC is best-effort - defeatable by data laundering; do not treat as complete mediation.
- In-memory Kafka - validates control logic; not a broker client.
- stdio-first - HTTP is specified in the KIP; this reference documents notes, full HTTP is a Java/production concern.
- Secure-by-default in ops - tighten
tools_allowedto read/non-destructive in real deployments (see configuration guide).
Related links
- KIP-1318 (wiki): https://cwiki.apache.org/confluence/display/KAFKA/KIP-1318%3A+Model+Context+Protocol+%28MCP%29+Server+for+Apache+Kafka
- Jira: https://issues.apache.org/jira/browse/KAFKA-20436
- MCP specification: https://modelcontextprotocol.io/
License & affiliation
Apache Kafka, KIP-1318, and KAFKA-20436 are trademarks / projects of the Apache Software Foundation. This repository is a community reference aligned with that proposal; it is not the official ASF deliverable unless and until merged under the Kafka project.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。