README.md•4.22 kB
# CF-MCP: REST API + MCP Server on Cloudflare Workers
A single Cloudflare Worker that serves both a REST API and an MCP (Model Context Protocol) interface.
## Architecture
```
┌─────────────────────────────────────┐
│ Cloudflare Worker (Edge) │
│ │
│ ┌────────────────────────────────┐ │
│ │ Hono Router │ │
│ │ │ │
│ │ /api/* ─── REST API │ │
│ │ │ │
│ │ /mcp ─── MCP Protocol │ │
│ │ (wraps REST) │ │
│ └────────────────────────────────┘ │
└─────────────────────────────────────┘
```
## Features
### REST API Endpoints
- `GET /api/products` - List all products (with filtering)
- `GET /api/products/:id` - Get a single product
- `POST /api/products` - Create a new product
- `PUT /api/products/:id` - Update a product
- `DELETE /api/products/:id` - Delete a product
### MCP Tools
The MCP endpoint wraps all REST operations as tools:
- `list_products` - Query products with filters
- `get_product` - Retrieve product details
- `create_product` - Add new products
- `update_product` - Modify existing products
- `delete_product` - Remove products
## Getting Started
### Install Dependencies
```bash
npm install
```
### Run Locally
```bash
npm run dev
```
The server will start at `http://localhost:8787`
### Test REST API
```bash
# List all products
curl http://localhost:8787/api/products
# Get a specific product
curl http://localhost:8787/api/products/1
# Filter by category
curl http://localhost:8787/api/products?category=Electronics
# Create a product
curl -X POST http://localhost:8787/api/products \
-H "Content-Type: application/json" \
-d '{"name":"Laptop","price":999,"description":"Powerful laptop","category":"Electronics"}'
```
### Test MCP Endpoint
```bash
# List available tools
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-d '{"method":"tools/list","params":{}}'
# Call a tool
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-d '{"method":"tools/call","params":{"name":"list_products","arguments":{"category":"Electronics"}}}'
```
## Deploy to Cloudflare
```bash
npm run deploy
```
After deployment, your API will be available globally on Cloudflare's edge network!
## Key Patterns Demonstrated
### 1. REST-to-MCP Translation
Each REST endpoint maps to an MCP tool:
- REST parameters → MCP tool arguments
- REST responses → MCP tool results
- REST authentication → MCP tool context
### 2. Edge Deployment
- Single worker serves both interfaces
- Global distribution via Cloudflare's network
- Low latency for both REST and MCP calls
### 3. Unified Codebase
- Share business logic between REST and MCP
- DRY principle: define operations once
- Easy to maintain and extend
## Project Structure
```
cf-mcp/
├── src/
│ ├── index.ts # Main Hono app + routing
│ ├── api.ts # REST API endpoints
│ └── mcp.ts # MCP protocol handler
├── wrangler.toml # Cloudflare config
├── package.json
└── tsconfig.json
```
## Next Steps
1. Add authentication (API keys, OAuth)
2. Implement rate limiting
3. Add caching with Cloudflare KV
4. Connect to Cloudflare D1 for persistent storage
5. Add streaming responses
6. Implement pagination
## Learn More
- [Hono Documentation](https://hono.dev)
- [Model Context Protocol](https://modelcontextprotocol.io)
- [Cloudflare Workers](https://workers.cloudflare.com)
## Course Title
**"From the Edge and Back: Turn Any REST API into an MCP Server"**
A practical, code-heavy session showing how to wrap any REST API with the Model Context Protocol and deploy it to Cloudflare Workers for lightning-fast, globally distributed access.