README.mdā¢5.15 kB
# MCP Server on Cloudflare Workers & Azure Functions
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that can be deployed to **Cloudflare Workers** or **Azure Functions**. This server provides tools, prompts, and resources that can be accessed via the MCP protocol, enabling AI assistants to interact with your deployed services.
## Features
- š Deployed on Cloudflare Workers (edge computing)
- š§ Example tools: `get_time`, `echo`, `add`
- š HTTP endpoints for health checks and MCP requests
- š¦ TypeScript with full type safety
- š Local development with Wrangler
## Prerequisites
- Node.js 18+ installed
- A Cloudflare account (free tier works)
- npm or yarn package manager
## Installation
Install dependencies:
```bash
npm install
```
## Development
Run the development server locally:
```bash
npm run dev
```
This will start a local Cloudflare Workers environment at `http://localhost:8787`
## Available Endpoints
### Health Check
```bash
GET http://localhost:8787/health
```
Returns server status and version information.
### MCP Protocol Endpoint
```bash
POST http://localhost:8787/mcp
Content-Type: application/json
{
"method": "tools/list"
}
```
### Available Capabilities
#### Tools
The server includes three example tools with change notifications:
1. **get_time**: Returns the current server time
2. **echo**: Echoes back your message
3. **add**: Adds two numbers together
#### Prompts
The server includes five prompt templates with change notifications:
1. **code_review**: Get assistance reviewing code
2. **explain_concept**: Get explanations of technical concepts
3. **debug_helper**: Get help debugging issues
4. **api_design**: Get guidance on API design
5. **refactor_suggestion**: Get suggestions for refactoring code
#### Resource Access
The server provides contextual information through resources:
1. **config://server/info**: Server metadata and configuration
2. **config://server/status**: Current server status and metrics
3. **docs://mcp/getting-started**: Getting started guide
Resources support:
- **Subscriptions**: Clients can subscribe to resource changes
- **Templates**: Parameterized resources (e.g., `log://{level}/{message}`)
- **Multiple MIME types**: JSON and Markdown content
#### Logging
Configurable logging with support for standard log levels:
- debug, info, notice, warning, error, critical, alert, emergency
## Deployment
### Option 1: Cloudflare Workers (Recommended for Edge)
#### 1. Login to Cloudflare
```bash
npx wrangler login
```
#### 2. Deploy to Cloudflare Workers
```bash
npm run deploy
```
Your MCP server will be deployed and you'll receive a URL like:
`https://mcp-server.<your-subdomain>.workers.dev`
### Option 2: Azure Functions (Recommended for Azure Ecosystem)
For detailed Azure deployment instructions, see [AZURE_DEPLOYMENT.md](./AZURE_DEPLOYMENT.md).
#### Quick Start
```bash
# Install dependencies
npm install
# Login to Azure
az login
# Deploy to Azure Functions
npm run deploy:azure
```
Your MCP server will be available at:
`https://<your-function-app>.azurewebsites.net`
## Testing Deployed Server
```bash
# Health check
curl https://mcp-server.<your-subdomain>.workers.dev/health
# Test MCP endpoint
curl -X POST https://mcp-server.<your-subdomain>.workers.dev/mcp \
-H "Content-Type: application/json" \
-d '{"method": "tools/list"}'
```
## Project Structure
```
.
āāā src/
ā āāā index.ts # Main server implementation
āāā .github/
ā āāā copilot-instructions.md
āāā package.json # Dependencies and scripts
āāā tsconfig.json # TypeScript configuration
āāā wrangler.toml # Cloudflare Workers config
āāā README.md # This file
```
## Adding New Tools
To add a new tool, edit `src/index.ts`:
1. Add tool definition in `ListToolsRequestSchema` handler
2. Add tool implementation in `CallToolRequestSchema` handler
Example:
```typescript
// In ListToolsRequestSchema handler
{
name: 'my_tool',
description: 'Description of what it does',
inputSchema: {
type: 'object',
properties: {
param1: {
type: 'string',
description: 'Parameter description',
},
},
required: ['param1'],
},
}
// In CallToolRequestSchema handler
case 'my_tool':
return {
content: [
{
type: 'text',
text: `Result: ${args.param1}`,
},
],
};
```
## Configuration
### Cloudflare Workers Settings
Edit `wrangler.toml` to configure:
- Worker name
- Compatibility date
- KV namespaces (for storage)
- D1 databases (for SQL)
- Environment variables
## Troubleshooting
### Build Errors
Check TypeScript types:
```bash
npm run types
```
### Deployment Issues
View deployment logs:
```bash
npx wrangler tail
```
## Resources
- [Model Context Protocol](https://modelcontextprotocol.io)
- [Cloudflare Workers Docs](https://developers.cloudflare.com/workers/)
- [Wrangler CLI Docs](https://developers.cloudflare.com/workers/wrangler/)
- [MCP SDK](https://github.com/modelcontextprotocol/typescript-sdk)
## License
MIT