chuk-mcp Examples
October 17, 2025 · View on GitHub
This directory contains comprehensive examples demonstrating all features of the chuk-mcp library.
Quick Start Examples
Simple examples to get started quickly:
- quickstart_minimal.py - Minimal MCP client setup
- quickstart_sqlite.py - Working with SQLite MCP server
- quickstart_resources.py - Accessing server resources
- quickstart_complete.py - Multi-feature demo
- README_EXAMPLES.md - Detailed documentation for quick start examples
End-to-End (E2E) Examples
Complete client-server pairs demonstrating each MCP feature using stdio transport. Each pair includes a client and server implementation:
Core Features
-
e2e_tools - Tool registration, discovery, and invocation
- Server registers callable tools with schemas
- Client discovers and calls tools
-
e2e_resources - Resource listing and reading
- Server exposes resources (documents, data, configs)
- Client lists and reads resource contents
-
e2e_prompts - Reusable prompt templates
- Server provides parameterized prompt templates
- Client gets prompts with arguments applied
Advanced Features
-
e2e_roots - File system root management
- Server exposes available file system roots
- Client can notify when roots change
-
e2e_sampling - Server-initiated LLM requests
- Server requests client to sample from LLM
- Client handles approval and model selection
-
e2e_completion - Autocomplete functionality
- Server provides intelligent completions
- Client requests completions for partial input
-
e2e_subscriptions - Resource change notifications
- Server notifies on resource changes
- Client subscribes/unsubscribes to resources
-
e2e_cancellation - Operation cancellation
- Client can cancel long-running operations
- Server handles cancellation notifications
-
e2e_progress - Progress tracking
- Server sends progress updates during operations
- Client receives and displays progress
-
e2e_ping - Health checks and connection monitoring
- Client sends ping requests
- Server responds to maintain connection
-
e2e_elicitation - Server-initiated user input requests
- Server requests user input during operations
- Client handles elicitation requests from server
-
e2e_logging - Log message handling
- Server sends log messages to client
- Client sets logging level on server
-
e2e_annotations - Content metadata and prioritization
- Server attaches annotations to content (audience, priority)
- Client uses annotations to display/filter content
Helper Files
- server_helpers.py - Shared utilities for server implementations
Running Examples
E2E Examples
Each E2E example is self-contained. Simply run the client:
python examples/e2e_tools_client.py
The client will automatically start the corresponding server.
Quick Start Examples
Quick start examples demonstrate working with external MCP servers:
# Install external server
uv tool install mcp-server-sqlite
# Run example
python examples/quickstart_sqlite.py
Example Structure
All E2E examples follow a consistent pattern:
Client Pattern:
from chuk_mcp import stdio_client, StdioServerParameters
from chuk_mcp.protocol.messages import send_initialize
async def main():
server_params = StdioServerParameters(
command="python",
args=["examples/e2e_xxx_server.py"]
)
async with stdio_client(server_params) as (read, write):
init_result = await send_initialize(read, write)
# Use typed send_* functions for protocol messages
Server Pattern:
from chuk_mcp.server import MCPServer
from chuk_mcp.protocol.types import ServerCapabilities
async def main():
server = MCPServer(
name="example-server",
version="1.0.0",
capabilities=ServerCapabilities(...)
)
# Register handlers
async def handle_xxx(message, session_id):
return server.protocol_handler.create_response(message.id, result), None
server.protocol_handler.register_method("xxx/yyy", handle_xxx)
await run_stdio_server(server)
Coverage
The examples provide complete coverage of MCP protocol features:
- ✅ Initialization and capability negotiation
- ✅ Tools (list, call)
- ✅ Resources (list, read, subscribe/unsubscribe)
- ✅ Prompts (list, get)
- ✅ Roots (list, change notifications)
- ✅ Sampling (LLM requests from server)
- ✅ Completion (autocomplete)
- ✅ Progress tracking
- ✅ Cancellation
- ✅ Ping/health checks
- ✅ Multiple transports (stdio, HTTP, SSE)
Testing
All examples have been tested and verified to work correctly. To test all E2E examples:
# Test all E2E examples
for example in examples/e2e_*_client.py; do
echo "Testing $example"
python "$example" || exit 1
done