Skip to main content
Glama
IBM

ChukMCPServer

Official
by IBM

ChukMCPServer

The fastest, most developer-friendly MCP server framework for Python.

Build production-ready Model Context Protocol servers in minutes with decorator-based tools, zero-config deployment, and world-class performance.

PyPI Python Tests Coverage License

from chuk_mcp_server import tool, run

@tool
def add(a: int, b: int) -> int:
    """Add two numbers together."""
    return a + b

run()  # That's it! Server running on stdio

โšก Quick Start

Installation

# Basic installation
pip install chuk-mcp-server

# With optional features
pip install chuk-mcp-server[google_drive]  # Google Drive OAuth

Your First Server (30 seconds)

Option 1: Use the scaffolder (recommended)

uvx chuk-mcp-server init my-server
cd my-server
uv run my-server

Option 2: Write it yourself (5 lines of code)

from chuk_mcp_server import tool, run

@tool
def greet(name: str) -> str:
    """Greet someone by name."""
    return f"Hello, {name}!"

run()

Option 3: Add to Claude Desktop (instant integration)

uvx chuk-mcp-server init my-server --claude
# Automatically adds to claude_desktop_config.json

Use with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "my-server": {
      "command": "uv",
      "args": ["run", "my-server"]
    }
  }
}

Restart Claude Desktop - your tools are now available!

๐Ÿš€ Why ChukMCPServer?

  • ๐Ÿ† World-Class Performance: 36,000+ requests/second, <3ms overhead

  • ๐Ÿ“‹ Full MCP 2025-11-25: Complete conformance with the latest MCP specification

  • ๐Ÿค– Claude Desktop Ready: Zero-config stdio transport

  • โšก Zero Configuration: Smart defaults detect everything automatically

  • ๐Ÿ” OAuth 2.1 Built-In: Full OAuth support with @requires_auth decorator

  • โ˜๏ธ Cloud Native: Auto-detects GCP, AWS, Azure, Vercel

  • ๐Ÿ”’ Type Safe: Automatic schema generation from Python type hints

  • ๐Ÿท๏ธ Tool Annotations: read_only_hint, destructive_hint, idempotent_hint, open_world_hint

  • ๐Ÿ“Š Structured Output: output_schema on tools with typed structuredContent responses

  • ๐ŸŽจ Icons: Icons on tools, resources, prompts, and server info

  • ๐Ÿ“ฆ Dual Transport: STDIO + Streamable HTTP (with GET SSE streams), both with bidirectional support

  • ๐Ÿงฉ Full Protocol Surface: Sampling, elicitation, progress, roots, subscriptions, completions, tasks, cancellation

  • ๐Ÿ›ก๏ธ Production Hardened: Rate limiting, request validation, graceful shutdown, thread safety, health probes

  • ๐Ÿงช ToolRunner: Test tools without transport overhead

  • ๐Ÿ“„ OpenAPI: Auto-generated OpenAPI 3.1.0 spec at /openapi.json

๐Ÿ“š Documentation

Full documentation available at: https://IBM.github.io/chuk-mcp-server/

๐ŸŽฏ Core Features

Decorators for Everything

from chuk_mcp_server import tool, resource, resource_template, prompt, requires_auth

@tool(read_only_hint=True, idempotent_hint=True,
      output_schema={"type": "object", "properties": {"result": {"type": "integer"}}})
def calculate(x: int, y: int) -> dict:
    """Perform calculations with structured output."""
    return {"result": x + y}

@resource("config://settings",
          icons=[{"uri": "https://example.com/gear.svg", "mimeType": "image/svg+xml"}])
def get_settings() -> dict:
    """Access configuration."""
    return {"theme": "dark", "version": "1.0"}

@resource_template("users://{user_id}/profile")
def get_user_profile(user_id: str) -> dict:
    """Parameterized resource template (RFC 6570)."""
    return {"user_id": user_id, "name": "Example User"}

@prompt
def code_review(code: str, language: str) -> str:
    """Generate code review prompt."""
    return f"Review this {language} code:\n{code}"

@tool
@requires_auth()
async def publish_post(content: str, _external_access_token: str | None = None) -> dict:
    """OAuth-protected tool."""
    # Token automatically injected and validated
    ...

HTTP Mode for Web Apps

from chuk_mcp_server import ChukMCPServer

mcp = ChukMCPServer(
    name="my-api",
    description="My production API server",
    icons=[{"uri": "https://example.com/icon.png", "mimeType": "image/png"}],
    website_url="https://example.com",
)

@mcp.tool
async def process_data(data: str) -> dict:
    return {"processed": data}

mcp.run(host="0.0.0.0", port=8000)  # HTTP server

MCP Apps โ€” Rich UI Views in Claude.ai

Render interactive charts, maps, tables, and more directly in Claude.ai using MCP Apps structured content.

from chuk_mcp_server import ChukMCPServer

mcp = ChukMCPServer(name="my-view-server", version="1.0.0")

@mcp.tool(
    name="show_chart",
    description="Show sales data as a chart.",
    meta={
        "ui": {
            "resourceUri": "ui://my-view-server/chart",
            "viewUrl": "https://chuk-mcp-ui-views.fly.dev/chart/v1",
        }
    },
)
async def show_chart(chart_type: str = "bar") -> dict:
    return {
        "content": [{"type": "text", "text": "Sales chart."}],
        "structuredContent": {
            "type": "chart",
            "version": "1.0",
            "title": "Q1 Sales",
            "chartType": chart_type,
            "data": [{"label": "Revenue", "values": [
                {"label": "Jan", "value": 4200},
                {"label": "Feb", "value": 5100},
                {"label": "Mar", "value": 4800},
            ]}],
        },
    }

mcp.run()

How it works:

  • meta.ui.resourceUri โ€” a ui:// URI identifying the view

  • meta.ui.viewUrl โ€” HTTPS URL serving the view's HTML/JS bundle

  • The server automatically registers an MCP resource at the resourceUri that fetches the HTML from viewUrl

  • The server automatically enables the experimental capability

  • Claude.ai reads the HTML via resources/read, renders it in an iframe, and passes structuredContent as the data payload

See examples/mcp_apps_view_example.py for a complete example.

Cloud Deployment (Auto-Detection)

# Same code works everywhere - cloud platform auto-detected!
from chuk_mcp_server import tool, run

@tool
def my_tool(x: int) -> int:
    return x * 2

run()  # Automatically adapts to GCP, AWS, Azure, Vercel, etc.

Server Composition (Mix Local & Remote Tools)

Combine multiple MCP servers into one unified interface. Import tools from local Python modules or remote servers (STDIO/HTTP/SSE):

# config.yaml
composition:
  import:
    # Local Python module
    - name: "echo"
      type: "module"
      module: "chuk_mcp_echo.server:echo_service"
      prefix: "echo"

    # Remote MCP server via STDIO
    - name: "fetch"
      type: "stdio"
      command: "uvx"
      args: ["mcp-server-fetch"]
      prefix: "fetch"

    # Remote MCP server via HTTP
    - name: "weather"
      type: "http"
      url: "https://api.weather.com/mcp"
      prefix: "weather"
from chuk_mcp_server import ChukMCPServer

mcp = ChukMCPServer("composed-server")
mcp.load_config("config.yaml")
mcp.run()  # All tools available under unified namespaces

What you get:

  • โœ… Module imports: Direct Python imports (fastest)

  • โœ… STDIO proxy: Connect to subprocess servers (uvx, npx, python -m)

  • โœ… HTTP proxy: Connect to remote HTTP MCP servers

  • โœ… Built-in resilience: Automatic timeouts, retries, circuit breakers (via chuk-tool-processor)

  • โœ… Unified namespace: Tools prefixed by source (e.g., fetch.fetch, echo.echo_text)

๐Ÿ† Performance

ChukMCPServer is built for high throughput:

  • 36,348 RPS peak throughput (performance test)

  • 39,261 RPS with max optimizations (ultra test)

  • <3ms overhead per tool call

  • 100% success rate under sustained load

See Performance Benchmarks for detailed results.

๐Ÿ“– Learn More

Real-World Examples

๐Ÿค Contributing

Contributions welcome! See Contributing Guide for details.

๐Ÿ“„ License

Apache 2.0 License - see LICENSE file for details.

  • Documentation: https://IBM.github.io/chuk-mcp-server/

  • PyPI Package: https://pypi.org/project/chuk-mcp-server/

  • GitHub: https://github.com/IBM/chuk-mcp-server

  • Issues: https://github.com/IBM/chuk-mcp-server/issues

  • Model Context Protocol: https://modelcontextprotocol.io


A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

โ€“Maintainers
1hResponse time
5dRelease cycle
31Releases (12mo)
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IBM/chuk-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server