MCP server overview
# cloudflare-api-mcp
This is a lightweight Model Control Protocol (MCP) server bootstrapped with [create-mcp](https://github.com/zueai/create-mcp) and deployed on Cloudflare Workers.
This MCP server allows agents (such as Cursor) to interface with the [Cloudflare REST API](https://developers.cloudflare.com/api/).
It’s still under development, I will be adding more tools as I find myself needing them.
Available Tools
See [src/index.ts](src/index.ts) for the current list of tools. Every method in the class is an MCP tool.
Installation
- Run the automated install script to clone this MCP server and deploy it to your Cloudflare account:
```bash bun create mcp --clone https://github.com/zueai/cloudflare-api-mcp ```
-
Open `Cursor Settings -> MCP -> Add new MCP server` and paste the command that was copied to your clipboard.
-
Upload your Cloudflare API key and email to your worker secrets:
```bash bunx wrangler secret put CLOUDFLARE_API_KEY bunx wrangler secret put CLOUDFLARE_API_EMAIL ```
Local Development
Add your Cloudflare API key and email to the `.dev.vars` file:
```bash CLOUDFLARE_API_KEY=<your-cloudflare-api-key> CLOUDFLARE_API_EMAIL=<your-cloudflare-api-email> ```
Deploying
- Run the deploy script:
```bash bun run deploy ```
- Reload your Cursor window to see the new tools.
How to Create New MCP Tools
To create new MCP tools, add methods to the `MyWorker` class in `src/index.ts`. Each function will automatically become an MCP tool that your agent can use.
Example:
```typescript /** * Create a new DNS record in a zone. * @param zoneId {string} The ID of the zone to create the record in. * @param name {string} The name of the DNS record. * @param content {string} The content of the DNS record. * @param type {string} The type of DNS record (CNAME, A, TXT, or MX). * @param comment {string} Optional comment for the DNS record. * @param proxied {boolean} Optional whether to proxy the record through Cloudflare. * @return {object} The created DNS record. */ createDNSRecord(zoneId: string, name: string, content: string, type: string, comment?: string, proxied?: boolean) { // Implementation } ```
The JSDoc comments are important:
- First line becomes the tool’s description
- `@param` tags define the tool’s parameters with types and descriptions
- `@return` tag specifies the return value and type
Learn More
- [Model Control Protocol Documentation](https://modelcontextprotocol.io)
- [create-mcp Documentation](https://github.com/zueai/create-mcp)
- [workers-mcp](https://github.com/cloudflare/workers-mcp)
- [Cloudflare Workers documentation](https://developers.cloudflare.com/workers/)
- [Cloudflare API Documentation](https://developers.cloudflare.com/api/)