Skip to main content
Glama
SSM MCP Server

SSM MCP Server

by BrooksIan

SSM MCP Server

SMM Home Interface The Streams Messaging Manager home interface showing cluster overview and navigation

Model Context Protocol server providing access to Cloudera Streams Messaging Manager (SMM) with support for both direct SMM access and CDP integration.

Works with both standalone SMM deployments and Cloudera Data Platform (CDP) SMM deployments - provides core SMM functionality through Claude Desktop.

⚠️ Current Status

34.4% Success Rate - 22 out of 64 MCP tools are currently working. Core functionality including cluster management, topic listing, and admin operations is operational. Many advanced features (metrics, alerts, consumer groups) are not yet working due to API endpoint limitations.

Working Features:

  • ✅ Core SMM Management (100%)

  • ✅ Cluster Management (100%)

  • ✅ Broker Management (100%)

  • ✅ Topic Management (100%)

  • ✅ Configuration Management (100%)

  • ✅ Admin Endpoints (100%) - NEW!

Related MCP server: MCP cldkctl Server

Features

  • Multiple Authentication Methods:

    • Direct SMM Authentication: Basic auth for standalone SMM deployments

    • Apache Knox Integration: JWT tokens, cookies, and passcode tokens for CDP deployments

  • Read-only by default - Safe exploration of SMM clusters and configuration

  • Working SMM API coverage with 22 verified MCP tools for core SMM management:

    • ✅ Core SMM Management: Version info, system details (100% working)

    • ✅ Cluster Management: Cluster details, broker information (100% working)

    • ✅ Broker Management: Broker details, metrics, configurations (100% working)

    • ✅ Topic Management: List topics, get topic info, configurations (100% working)

    • ✅ Configuration Management: Broker configs, topic configs (100% working)

    • ✅ Admin Endpoints: Detailed cluster, broker, and topic data (100% working)

    • ⚠️ Consumer Group Management: Not available through SMM API (0% working)

    • ⚠️ Metrics & Monitoring: Not available through SMM API (0% working)

    • ⚠️ Alert Management: Not available through SMM API (0% working)

    • ⚠️ Topic Data Sampling: Not available through SMM API (0% working)

    • ⚠️ Kafka Connect: Not available through SMM API (0% working)

    • ⚠️ Health Monitoring: Not available through SMM API (0% working)

Quick Start

SMM Home Interface The Streams Messaging Manager home interface showing cluster overview and navigation

For Standalone SMM Deployments

  1. Install and setup:

    git clone https://github.com/your-org/ssm-mcp-server.git
    cd ssm-mcp-server
    
    # Option A: Using uv (recommended)
    make setup  # Installs uv if needed and dependencies
    
    # Option B: Using pip
    python3 -m venv .venv
    source .venv/bin/activate
    pip install -e .
  2. Configure Claude Desktop - Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

    {
      "mcpServers": {
        "ssm-mcp-server": {
          "command": "/FULL/PATH/TO/SSM-MCP-Server/run_mcp_server.sh",
          "args": [],
          "cwd": "/FULL/PATH/TO/SSM-MCP-Server",
          "env": {
            "MCP_TRANSPORT": "stdio",
            "SMM_API_BASE": "http://localhost:8080/api/v2",
            "SMM_USER": "admin",
            "SMM_PASSWORD": "admin",
            "SMM_READONLY": "true"
          }
        }
      }
    }
  3. Set your credentials:

    # Option A: Interactive setup (recommended)
    python setup_config.py
    
    # Option B: Manual setup
    cp config.template .env
    nano .env  # Edit with your actual credentials
  4. Restart Claude Desktop and start interacting with your SMM cluster!

For CDP SMM deployments (via Apache Knox)

Your Knox gateway URL will typically be:

https://<your-knox-gateway>:8444/gateway/smm

Get your Knox JWT token from the CDP UI and use it with the configurations below.

Knox Configuration Examples

Option A: JWT Token Authentication

{
  "mcpServers": {
    "ssm-mcp-server": {
      "command": "/FULL/PATH/TO/SSM-MCP-Server/run_mcp_server.sh",
      "args": [],
      "cwd": "/FULL/PATH/TO/SSM-MCP-Server",
      "env": {
        "MCP_TRANSPORT": "stdio",
        "KNOX_GATEWAY_URL": "https://your-knox-gateway:8444/gateway/smm",
        "KNOX_TOKEN": "your-knox-jwt-token",
        "SMM_READONLY": "true"
      }
    }
  }
}

Option B: Username/Password Authentication

{
  "mcpServers": {
    "ssm-mcp-server": {
      "command": "/FULL/PATH/TO/SSM-MCP-Server/run_mcp_server.sh",
      "args": [],
      "cwd": "/FULL/PATH/TO/SSM-MCP-Server",
      "env": {
        "MCP_TRANSPORT": "stdio",
        "KNOX_GATEWAY_URL": "https://your-knox-gateway:8444/gateway/smm",
        "KNOX_USER": "your-username",
        "KNOX_PASSWORD": "your-password",
        "KNOX_TOKEN_ENDPOINT": "https://your-knox-gateway:8444/gateway/knoxsso/api/v1/websso",
        "SMM_READONLY": "true"
      }
    }
  }
}

Configuration Options

All configuration is done via environment variables:

Direct SMM Authentication (Standalone)

Variable

Required

Description

SMM_API_BASE

Yes

Full SMM API URL (e.g., http://localhost:8080/api/v2)

SMM_USER

Yes

SMM username (e.g., admin)

SMM_PASSWORD

Yes

SMM password (e.g., admin)

SMM_READONLY

No

Read-only mode (default: true)

HTTP_TIMEOUT_SECONDS

No

HTTP timeout in seconds (default: 30)

Knox Authentication (CDP)

Variable

Required

Description

KNOX_GATEWAY_URL

Yes*

Knox gateway URL (e.g., https://host:8444/gateway/smm)

KNOX_TOKEN

Yes*

Knox JWT token for authentication

KNOX_COOKIE

No

Alternative: provide full cookie string instead of token

KNOX_PASSCODE_TOKEN

No

Alternative: Knox passcode token (auto-exchanged for JWT)

KNOX_USER

No

Knox username for basic auth

KNOX_PASSWORD

No

Knox password for basic auth

KNOX_TOKEN_ENDPOINT

No

Knox token endpoint for JWT exchange

KNOX_VERIFY_SSL

No

Verify SSL certificates (default: true)

KNOX_CA_BUNDLE

No

Path to CA certificate bundle

SMM_READONLY

No

Read-only mode (default: true)

HTTP_TIMEOUT_SECONDS

No

HTTP timeout in seconds (default: 30)

* Either SMM_API_BASE (for direct) or KNOX_GATEWAY_URL (for Knox) is required

Development with uv

This project uses uv for fast dependency management and Python project management.

Quick Commands

# Install uv and dependencies
make setup

# Run the server
make run

# Run tests
make test

# Run linting
make lint

# Format code
make format

# Show all available commands
make help

Manual uv Commands

# Install dependencies
uv sync

# Run the server
uv run python -m ssm_mcp_server.server

# Run tests
uv run python test_connection_uv.py

# Add a new dependency
uv add package-name

# Add a development dependency
uv add --dev package-name

# Update dependencies
uv sync --upgrade

Example Usage

Once configured, you can ask Claude questions like:

Basic Information

  • "What version of SMM am I running?"

  • "Show me the cluster details"

  • "List all brokers in the cluster"

  • "What topics are available?"

  • "Show me all consumer groups"

Cluster Health Example: Cluster health and broker information display

Topic Management

  • "Show me the configuration for topic 'sales-data'"

  • "Show me the content of topic 'logs' partition 0"

  • "List all topics in the cluster"

  • "What are the metrics for topic 'user-events'?"

List All User Topics Example: Listing all user topics in the cluster

Topic Information Example: Detailed topic information and configuration

Configuration Management Example: Topic configuration management and analysis

Note: SMM is primarily a monitoring tool. For topic creation/deletion, use Kafka admin tools:

  • kafka-topics.sh --create --topic user-events --partitions 3 --bootstrap-server localhost:9092

  • kafka-topics.sh --delete --topic test-topic --bootstrap-server localhost:9092

Broker Management

  • "Show me all brokers in the cluster"

  • "What are the details for broker 1?"

  • "Show me broker metrics for the last hour"

  • "What are the broker configurations?"

Broker Information Example: Detailed broker information and monitoring

Configuration Management

  • "Show me broker configurations"

  • "What are the topic configurations for 'heartbeats'?"

  • "Show me default topic configurations"

  • "What are the cluster configuration details?"

Available Tools

Current Status: 34.4% success rate (22 out of 64 MCP tools working)

The following tools are currently working and functional:

🔧 Core SMM Management (100% working)

  • get_smm_info() - Get SMM version and system information

  • get_smm_version() - Get SMM version details

🏢 Cluster Management (100% working)

  • get_cluster_details() - Get cluster details and information

🖥️ Broker Management (100% working)

  • get_brokers() - Get all brokers in the cluster

  • get_broker(broker_id) - Get details of a specific broker

  • get_broker_metrics(broker_id, duration?, from_time?, to_time?) - Get metrics for a specific broker

  • get_all_broker_details() - Get all broker details with configurations

  • get_broker_details(broker_id) - Get detailed broker information including configuration

📊 Topic Management (100% working)

  • get_all_topic_infos() - Get all topic information

  • get_topic_description(topic_name) - Get detailed description of a specific topic

  • get_topic_info(topic_name) - Get basic information about a specific topic

  • get_topic_partitions(topic_name) - Get partition information for a specific topic

  • get_topic_partition_infos(topic_name) - Get detailed partition information for a specific topic

  • get_topic_configs(topic_name) - Get configuration for a specific topic

  • get_all_topic_configs() - Get configurations for all topics

  • get_default_topic_configs() - Get default topic configurations

⚙️ Configuration Management (100% working)

  • get_broker_configs() - Get broker configurations

🔧 Admin Endpoints (100% working) - NEW!

  • get_admin_cluster() - Get admin cluster information with detailed broker and controller data

  • get_admin_brokers() - Get admin brokers information with detailed broker data

  • get_admin_topics() - Get admin topics information with detailed topic and partition data

  • get_admin_topic_details(topic_name) - Get admin topic details for a specific topic

  • get_admin_topic_partitions(topic_name) - Get admin topic partitions for a specific topic


📋 For complete information about non-working tools and limitations, see LimitationsREADME.md

Write Operations

By default, the server runs in read-only mode for CDP deployments and write-enabled for standalone deployments. To change this:

  1. Set SMM_READONLY=false (enable writes) or SMM_READONLY=true (read-only)

  2. Restart the MCP server

⚠️ Important Limitations: SMM is primarily a monitoring tool and does not actually perform write operations on topics.

Supported Write Operations:

  • Creating and managing alert policies

  • Managing Kafka Connect connectors

  • Schema registry operations

  • Consumer group offset management

Not Supported (SMM Limitations):

  • Topic creation/deletion: SMM API accepts requests but doesn't create/delete topics

  • Topic configuration changes: SMM API accepts requests but doesn't modify topic configs

  • Partition management: SMM API accepts requests but doesn't create/modify partitions

For topic management, use Kafka admin tools or the Kafka Admin API directly.

Limitations

For detailed information about current limitations, non-working features, and known issues, please see:

📋 LimitationsREADME.md - Comprehensive documentation of:

  • SMM topic creation limitations

  • Non-working MCP tools (65.6% currently not working)

  • Working MCP tools (34.4% success rate)

  • API endpoint limitations and resolution status

  • Contributing guidelines for fixes

Quick Summary: The server currently has a 34.4% success rate (22/64 tools working) due to SMM API limitations. Core functionality like cluster management, topic listing, broker monitoring, and admin operations is operational. Many advanced features are not available through the SMM API.

Security

  • All sensitive data (passwords, tokens, secrets) is automatically redacted in responses

  • Large collections are truncated to prevent overwhelming the LLM

  • Read-only mode is enabled by default for CDP deployments to prevent accidental modifications

  • Direct SMM authentication uses basic auth over HTTP (suitable for local development)

  • CDP integration uses secure JWT token authentication

Troubleshooting

Common Issues

  1. "Unauthorized" errors: Check your authentication credentials

    • For direct SMM: Verify SMM_USER and SMM_PASSWORD

    • For CDP: Verify SMM_TOKEN or SMM_USER/SMM_PASSWORD

  2. "Connection refused" errors: Ensure SMM services are running

    • Check SMM service status

    • Verify port mappings and network connectivity

  3. "Topic not found" errors: Verify topic names and cluster access

    • Use get_all_topic_infos() to list available topics

    • Check topic permissions and access rights

  4. SSL certificate errors: For CDP deployments

    • Set SMM_VERIFY_SSL=false for self-signed certificates

    • Or provide proper CA bundle with SMM_CA_BUNDLE

Debug Mode

Enable debug logging by setting environment variable:

export MCP_LOG_LEVEL=DEBUG

Summary

The SSM MCP Server is a focused management platform for Cloudera Streams Messaging Manager, providing Claude Desktop with access to core SMM functionality through 22 verified MCP tools.

🎯 What You Get:

  • Core SMM Control: Manage clusters, brokers, and topics

  • Comprehensive Monitoring: Detailed cluster and broker information

  • Configuration Management: Broker and topic configuration access

  • Admin Operations: Advanced cluster, broker, and topic data access

  • Enterprise Features: Multi-environment support and secure authentication

🚀 Key Benefits:

  • 34.4% API Coverage: Access to core SMM functionality that's actually available

  • 22 Working Tools: Reliable toolset for essential SMM operations

  • 6 Functional Categories: Organized, discoverable capabilities

  • Production Ready: Stable, tested functionality for real-world use

  • User Friendly: Natural language interaction through Claude Desktop

  • Flexible: Supports both standalone and CDP deployments

📈 Perfect For:

  • Data Engineers: Topic management, cluster monitoring, configuration analysis

  • DevOps Teams: Cluster management, broker monitoring, system health

  • Platform Admins: System monitoring, configuration management, cluster oversight

  • Kafka Users: Topic exploration, broker details, cluster information

The SSM MCP Server transforms Claude Desktop into a reliable SMM management interface, enabling natural language interaction with your Streams Messaging Manager environment! 🎉

License

Apache License 2.0

Available Tools

78 tools
disable_alert_policyD

Disable an alert policy.

Inputs: policy_id (required). Returns: result

enable_alert_policyC

Enable an alert policy.

Inputs: policy_id (required). Returns: result

get_accessC

Get access information.

Inputs: no named parameters. Returns: result

get_admin_brokersC

Get admin brokers information with detailed broker data.

Inputs: no named parameters. Returns: result

get_admin_clusterA

Get admin cluster information with detailed broker and controller data.

Inputs: no named parameters. Returns: result

get_admin_topic_detailsC

Get admin topic details for a specific topic.

Inputs: topic_name (required). Returns: result

get_admin_topic_partitionsC

Get admin topic partitions for a specific topic.

Inputs: topic_name (required). Returns: result

get_admin_topicsC

Get admin topics information with detailed topic and partition data.

Inputs: no named parameters. Returns: result

get_alert_notificationsB

Get all alert notifications.

Inputs: no named parameters. Returns: result

get_alert_notifications_by_entityC

Get alert notifications by entity type and ID.

Inputs: entity_type (required), entity_id (required). Returns: result

get_alert_notifications_by_entity_typeC

Get alert notifications by entity type.

Inputs: entity_type (required). Returns: result

get_alert_notifications_by_entity_type_and_nameC

Get alert notifications by entity type and name.

Inputs: entity_type (required), entity_name (required). Returns: result

get_alert_policyC

Get details of a specific alert policy.

Inputs: policy_id (required). Returns: result

get_alert_policy_automataC

Get alert policy automata details.

Inputs: policy_id (required). Returns: result

get_all_alert_policiesA

Get all alert policies.

Inputs: no named parameters. Returns: result

get_all_broker_detailsC

Get all broker details with configurations.

Inputs: no named parameters. Returns: result

get_all_consumer_group_metricsC

Get metrics for all consumer groups.

Inputs: duration, from_time, to_time, state, +2 more. Returns: result

get_all_consumer_infoB

Get information about all consumers.

Inputs: no named parameters. Returns: result

get_all_producer_metricsC

Get metrics for all producers.

Inputs: duration, from_time, to_time. Returns: result

get_all_topic_configsC

Get configurations for all topics.

Inputs: no named parameters. Returns: result

get_all_topic_infosC

Get all topic information.

Inputs: no named parameters. Returns: result

get_brokerC

Get details of a specific broker.

Inputs: broker_id (required). Returns: result

get_broker_detailsC

Get detailed broker information including configuration.

Inputs: broker_id (required). Returns: result

get_broker_metricsC

Get metrics for a specific broker.

Inputs: broker_id (required), duration, from_time, to_time. Returns: result

get_brokersB

Get all brokers in the cluster.

Inputs: no named parameters. Returns: result

get_cluster_detailsC

Get cluster details and information.

Inputs: no named parameters. Returns: result

get_cluster_with_broker_metricsC

Get cluster metrics including broker metrics.

Inputs: duration, from_time, to_time. Returns: result

get_cluster_with_topic_metricsC

Get cluster metrics including topic metrics.

Inputs: duration, from_time, to_time. Returns: result

get_connectorC

Get details of a specific connector.

Inputs: connector_name (required). Returns: result

get_connector_config_defC

Get connector configuration definition.

Inputs: connector_name (required). Returns: result

get_connector_config_definitionsC

Get connector configuration definitions.

Inputs: connector_plugin_class (required). Returns: result

get_connector_config_sampleC

Get sample connector configuration.

Inputs: name (required), connector_plugin_class (required), version (required). Returns: result

get_connector_permissionsC

Get connector permissions.

Inputs: connector_name (required). Returns: result

get_connectorsA

Get all Kafka Connect connectors.

Inputs: no named parameters. Returns: result

get_connector_sink_metricsC

Get connector sink metrics.

Inputs: connector_name (required). Returns: result

get_connector_templatesA

Get available connector templates.

Inputs: no named parameters. Returns: result

get_connect_worker_metricsC

Get Kafka Connect worker metrics.

Inputs: duration, from_time, to_time. Returns: result

get_consumer_group_infoC

Get detailed information about a specific consumer group.

Inputs: group_name (required). Returns: result

get_consumer_group_lineageC

Get lineage information for a consumer group.

Inputs: group_name (required). Returns: result

get_consumer_group_metricsC

Get metrics for a specific consumer group.

Inputs: group_name (required), duration, from_time, to_time. Returns: result

get_consumer_group_namesB

Get all consumer group names.

Inputs: no named parameters. Returns: result

get_consumer_groupsC

Get all consumer groups.

Inputs: no named parameters. Returns: result

get_consumer_infoC

Get information about a specific consumer.

Inputs: consumer_id (required). Returns: result

get_default_topic_configsC

Get default topic configurations.

Inputs: no named parameters. Returns: result

get_key_schema_version_infosC

Get key schema version information for a topic.

Inputs: topic_name (required). Returns: result

get_notifierC

Get specific notifier details.

Inputs: notifier_id (required). Returns: result

get_notifier_provider_configsB

Get notifier provider configurations.

Inputs: no named parameters. Returns: result

get_notifiersA

Get all notifiers.

Inputs: no named parameters. Returns: result

get_producer_lineageC

Get lineage information for a producer.

Inputs: producer_id (required). Returns: result

get_producer_metricsC

Get metrics for a specific producer.

Inputs: producer_id (required), duration, from_time, to_time. Returns: result

get_replication_statsC

Get replication statistics.

Inputs: no named parameters. Returns: result

get_replication_stats_by_clusterC

Get replication stats by source and target clusters.

Inputs: source (required), target (required). Returns: result

get_schema_meta_for_topicC

Get schema metadata for a specific topic.

Inputs: topic_name (required). Returns: result

get_schema_registry_infoC

Get schema registry information.

Inputs: no named parameters. Returns: result

get_smm_infoA

Get SMM version and system information.

Inputs: no named parameters. Returns: result

get_smm_versionB

Get SMM version information.

Inputs: no named parameters. Returns: result

get_topic_configsC

Get configuration for a specific topic.

Inputs: topic_name (required). Returns: result

get_topic_contentC

Get content from a topic partition.

Inputs: topic_name (required), partition (required), offset (required), limit. Returns: result

get_topic_descriptionC

Get detailed description of a specific topic.

Inputs: topic_name (required). Returns: result

get_topic_etelatencyC

Get end-to-end latency for a topic.

Inputs: topic_name (required), duration, from_time, to_time. Returns: result

get_topic_group_etelatencyC

Get end-to-end latency for topic and consumer group.

Inputs: topic_name (required), group_name (required), duration, from_time, +1 more. Returns: result

get_topic_infoC

Get basic information about a specific topic.

Inputs: topic_name (required). Returns: result

get_topic_lineageC

Get lineage information for a topic.

Inputs: topic_name (required). Returns: result

get_topic_metricsC

Get metrics for a specific topic.

Inputs: topic_name (required), duration, from_time, to_time. Returns: result

get_topic_offsetsC

Get offset information for a topic.

Inputs: topic_name (required). Returns: result

get_topic_partition_infosC

Get detailed partition information for a specific topic.

Inputs: topic_name (required). Returns: result

get_topic_partition_lineageC

Get lineage information for a topic partition.

Inputs: topic_name (required), partition (required). Returns: result

get_topic_partition_metricsB

Get metrics for a specific topic partition.

Inputs: topic_name (required), partition_num (required), duration, from_time, +1 more. Returns: result

get_topic_partitionsC

Get partition information for a specific topic.

Inputs: topic_name (required). Returns: result

get_topic_replication_statsC

Get replication stats for specific topic.

Inputs: source (required), target (required), topic_name (required). Returns: result

get_topic_replication_stats_simpleC

Get simple replication stats for topic.

Inputs: topic_name (required). Returns: result

get_value_schema_version_infosB

Get value schema version information for a topic.

Inputs: topic_name (required). Returns: result

is_connect_configuredB

Check if Kafka Connect is configured.

Inputs: no named parameters. Returns: result

is_replication_configuredB

Check if replication is configured.

Inputs: no named parameters. Returns: result

mark_alert_notifications_readC

Mark alert notifications as read.

Inputs: notification_ids (required). Returns: result

perform_connector_actionC

Perform connector actions (start, stop, restart, etc.).

Inputs: connector_name (required), action (required). Returns: result

reset_offsetC

Reset consumer group offset.

Inputs: group_name (required), topic_name (required), partition (required), offset (required). Returns: result

validate_connector_configC

Validate connector configuration.

Inputs: config (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.4/5.0

    Scored across 78 tools

    Disambiguation2/5

    Many tools have overlapping purposes, e.g., get_broker vs get_broker_details vs get_broker_metrics, and get_topic_info vs get_topic_description. The abundance of similarly named tools makes it difficult for an agent to select the correct one without confusion.

    Naming Consistency3/5

    Most tools follow a get_<noun> pattern, but there are inconsistencies like get_admin_brokers vs get_broker, and variations like get_all_consumer_info vs get_consumer_info. Plural vs singular usage is inconsistent.

    Tool Count2/5

    78 tools is excessive for a server focused on monitoring and management. The granularity creates unnecessary complexity, with many tools covering similar concerns.

    Completeness3/5

    The set covers a wide range of read operations across brokers, topics, consumer groups, connectors, and alerts. However, it lacks mutation tools for most entities (e.g., create/update/delete topics or connectors), leaving notable gaps in lifecycle coverage.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      C
      maintenance
      A Model Context Protocol server that provides access to Cloudeka's cldkctl CLI functionality through Claude Desktop, Cursor, and other MCP-compatible clients.
      100
      1
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      A comprehensive MCP server for Apache Kafka operations, enabling seamless integration with Claude Desktop and other MCP clients for cluster management, topic operations, and message streaming.
      2
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      A Model Context Protocol server that surfaces Fontem entities and queries to Claude via standard MCP tools.
      Apache 2.0