mcp-lab-workshop
š MCP Lab Workshop
Learn Model Context Protocol (MCP) with Cloudflare Workers
šÆ What is This?
An interactive workshop for SE interns to learn about Model Context Protocol (MCP) servers. Deploy a live dashboard app that can be controlled in real-time via MCP tools.
What You'll Build
šØ Interactive Dashboard - A beautiful dark-themed web app with real-time stats
š§ MCP Server - A fully functional MCP server with 8 tools to control the dashboard
š” Real-time Connection - Watch the dashboard update live as you call MCP tools
⨠Features
Demo App
š Dark-themed beautiful UI with Cloudflare branding
š Live statistics that update in real-time
šļø Feature toggles (Analytics, Notifications, Dark Mode, Animations)
š” Activity feed showing all MCP actions
ā” Server-Sent Events for instant updates
MCP Server
š ļø 8 MCP Tools for controlling the dashboard
š No authentication required - perfect for learning
š Edge deployed - runs on Cloudflare's global network
š¦ KV storage for state management
š Quick Deploy
One-Click Deploy
Click the button above to deploy to your Cloudflare account:
The deploy process will:
ā Clone the repo to your GitHub
ā Create a KV namespace automatically
ā Deploy TWO workers:
mcp-demo-app(dashboard) andmcp-server(MCP tools)ā Give you live URLs instantly
Important: The deployment creates two separate workers. Make sure both are deployed successfully!
Manual Deploy
If you prefer to deploy manually:
# Clone the repo
git clone https://github.com/MattDMitch/mcp-lab-workshop.git
cd mcp-lab-workshop
# Install dependencies
npm install
# Login to Cloudflare
npx wrangler login
# Run deploy script (creates KV namespace and deploys both workers)
npm run deployThis will deploy:
ā
mcp-demo-app- The monitoring dashboard UIā
mcp-server- The MCP tools server
š® Using the MCP Server
Once deployed, you'll get ONE worker with multiple endpoints:
Dashboard:
https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/MCP Server:
https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/mcp
Both the dashboard and MCP server run in the same worker using path-based routing
Connect to MCP Server
Add the MCP server to your OpenCode or MCP client:
{
"mcpServers": {
"demo": {
"url": "https://REPO-NAME-mcp.YOUR-SUBDOMAIN.workers.dev"
}
}
}Available Tools
Tool | Description | Example |
| Toggle features on/off | Toggle dark mode |
| Change dashboard numbers | Set visitors to 9999 |
| Update banner message | "Hello Interns! š" |
| View current app state | Get all settings |
| Reset to defaults | Clean slate |
| Generate fake activity | Simulate high traffic |
| Turn on all features | Enable everything |
| Turn off all features | Disable everything |
š” Try These Examples
Toggle Dark Mode
curl -X POST https://mcp-server.YOUR-SUBDOMAIN.workers.dev/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{
"tool": "toggle_feature",
"arguments": {"feature": "darkMode"}
}'Set Custom Message
curl -X POST https://mcp-server.YOUR-SUBDOMAIN.workers.dev/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{
"tool": "set_message",
"arguments": {"message": "Welcome SE Interns! š"}
}'Simulate High Traffic
curl -X POST https://mcp-server.YOUR-SUBDOMAIN.workers.dev/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{
"tool": "simulate_traffic",
"arguments": {"amount": "high"}
}'Update Stats
curl -X POST https://mcp-server.YOUR-SUBDOMAIN.workers.dev/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{
"tool": "update_stats",
"arguments": {"stat": "visitors", "value": 9999}
}'šļø Architecture
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Demo App Worker ā
ā - Dark-themed dashboard ā
ā - Server-Sent Events ā
ā - Real-time updates ā
āāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā
ā
ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Cloudflare KV Namespace ā
ā - App state storage ā
ā - Activity logs ā
āāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāā
ā
ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā MCP Server Worker ā
ā - 8 MCP tools ā
ā - Tool execution ā
ā - State management ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāš Workshop Guide
Part 1: Deploy (10 min)
Click "Deploy to Cloudflare"
Authorize GitHub and Cloudflare
Get your live URLs
Part 2: Explore the Dashboard (10 min)
Open the dashboard URL
See the dark-themed interface
Observe the stats and features
Part 3: Connect MCP Client (10 min)
Add MCP server to OpenCode
List available tools
Verify connection
Part 4: Control the Dashboard (15 min)
Toggle dark mode
Update statistics
Change the message
Simulate traffic
Watch real-time updates!
Part 5: Explore the Code (15 min)
Review MCP server implementation
Understand tool schemas
See KV storage in action
Learn about SSE for real-time updates
š Learning Objectives
After this workshop, you'll understand:
ā What MCP is and why it's useful
ā How to build an MCP server
ā Tool schemas and execution
ā Real-time web applications with SSE
ā Cloudflare Workers and KV storage
ā Edge computing concepts
š ļø Tech Stack
Cloudflare Workers - Serverless execution
Workers KV - Edge storage
MCP Protocol - Tool calling interface
Server-Sent Events - Real-time updates
Vanilla JS - No framework complexity
š Project Structure
mcp-lab-complete/
āāā README.md # This file
āāā wrangler.toml # Cloudflare config
āāā package.json # Project metadata
āāā demo-app/
ā āāā index.js # Dashboard worker
āāā mcp-server/
āāā index.js # MCP server workeršØ Customization Ideas
For Students:
Add new MCP tools
Create custom themes
Add more statistics
Build a notification system
Add WebSocket support
For Instructors:
Create coding challenges
Add quiz questions
Build team competitions
Create extension exercises
š Resources
š License
MIT License - Free to use for educational purposes
š Credits
Built for Cloudflare SE Intern Workshops
Made with ā¤ļø and ā
Ready to learn MCP?