Skip to main content
Glama
README.md4.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.

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/HeyGarrison/cf-mcp'

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