Workshop
MCP server: Workshop
Installation
npx mcp-workshopAsk AI about Workshop
Powered by Claude Β· Grounded in docs
I know everything about Workshop. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
π MCP Workshop β Build a Pizza Ordering AI Agent
A hands-on 2-hour workshop for intermediate developers: build a real MCP server from scratch and order pizza via an LLM assistant.
π§ What You'll Learn
- What MCP (Model Context Protocol) is and why it matters
- How to build an MCP server with the official TypeScript SDK
- How to expose tools to Claude Desktop via stdio transport
- How to serve an MCP server over HTTP with ngrok
- How to add interactive UI with the MCP Apps extension (
ext-apps)
ποΈ Repo Structure
mcp-workshop/
βββ sdk-pizza/ # Step 1 β MCP server using @modelcontextprotocol/sdk (stdio)
βββ fastmcp-pizza/ # Bonus β same server built with FastMCP (less boilerplate)
βββ apps-pizza/ # Step 2 β HTTP server with interactive pizza order UI (MCP Apps)
β Prerequisites
Make sure you have these installed before the workshop:
| Tool | Version | Install |
|---|---|---|
| Node.js | v18+ | nodejs.org |
| ngrok | latest | ngrok.com/download |
| MCP Inspector | latest | npx @modelcontextprotocol/inspector |
| Claude Desktop | latest | claude.ai/download |
Verify your setup:
node --version
ngrok --version
π Workshop Steps
Step 1 β stdio MCP Server (plain text)
The simplest MCP server: runs as a local process, communicates via stdin/stdout.
cd sdk-pizza
npm install
Test with MCP Inspector:
npx @modelcontextprotocol/inspector npx tsx index.ts
Connect to Claude Desktop β add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"sdk-pizza": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/sdk-pizza/index.ts"]
}
}
}
Available tools:
get_menuβ returns the Domino's pizza menuplace_orderβ places an order (pizza_id, customer_name, address)
Try it in Claude:
"Show me the pizza menu and order a Margherita for John Doe at 123 Main St"
Bonus β FastMCP variant
Same functionality, less boilerplate using FastMCP:
cd fastmcp-pizza
npm install
npx @modelcontextprotocol/inspector npx tsx index.ts
Step 2 β HTTP + MCP Apps (interactive UI)
Serves the MCP server over HTTP and renders an interactive order form inside Claude using the ext-apps extension.
cd apps-pizza
npm install
npm run build # builds the mcp-app.html UI
npx tsx index.ts # starts server on http://localhost:3001
Expose via ngrok:
ngrok http 3001
β οΈ Important: Claude Desktop does not support remote MCP servers via claude_desktop_config.json. Add the ngrok URL through the Claude UI (Settings β Integrations).
Available tools:
order_pizzaβ opens the interactive order form UIplace_orderβ submits the order programmatically
π§ Claude Desktop Config Reference
{
"mcpServers": {
"sdk-pizza": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/sdk-pizza/index.ts"]
},
"fastmcp-pizza": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/fastmcp-pizza/index.ts"]
}
}
}
Remote HTTP servers (
apps-pizza) must be added via the Claude Desktop UI, not the config file.
π§© Tech Stack
@modelcontextprotocol/sdkβ official MCP TypeScript SDK@modelcontextprotocol/ext-appsβ MCP Apps extension for interactive UIfastmcpβ high-level MCP server frameworkzodβ schema validation for tool inputsexpress+ngrokβ HTTP transport layer
π Resources
π¨βπ» Author
Stepan Suvorov β Google Developer Expert in Angular, conference speaker, MCP enthusiast
π¦ @stevermeister Β· πΌ LinkedIn Β· π GitHub
