Skip to main content
Glama
weyseing

Cloudflare MCP Logging

by weyseing

Setup

  • Start up container

    docker compose up -d

  • Initialize package.json

    • npm init -y (First time to create package.json)

    • npm install

MCP Server Creation

  • Create from CF template

    • npm create cloudflare@latest -- mcp-logging --template=cloudflare/ai/demos/remote-mcp-authless

    • If

      git clone https://github.com/cloudflare/ai.git

  • Start dev server

    • Update to use wrangler dev --ip 0.0.0.0 IP in package.json

    • Port mapping 8787:8787 in docker-compose.yml

    • npm start OR wrangler dev --ip 0.0.0.0

    • Access via localhost:8787/sse

Deploy CF Worker

  • Set CF account ID to wrangler.jsonc

    "account_id": "<EDIT-HERE>"

  • Set CF API key in env

    • API's permission template: Edit Cloudflare Workers

    • ENV: CLOUDFLARE_API_TOKEN=<EDIT-HERE>

  • Deploy worker to CF

    • npm run deploy OR npx wrangler deploy

MCP Inspector

  • Start inspector

    npx @modelcontextprotocol/inspector@latest

Connect via MCP Host/Client

  • mcp-remote

    {
      "mcpServers": {
        "CF Remote MCP": {
          "command": "npx",
          "args": [
            "-y",
            "mcp-remote",
            "https://<MCP_SERVER_URL>/sse"
          ]
        }
      }
    }

  • supergateway

    {
      "mcpServers": {
        "Basic Calculator": {
          "command": "npx",
          "args": [
            "-y",
            "supergateway",
            "--sse",
            "http://localhost:8787/sse",
            "--header",
            "X-UserID:USERID_123",
            "--header",
            "X-SecretKey:SKEY_456"
          ]
        }
      }
    }

LogPush

  • Enable logpush for CF worker

    • Set "logpush": true in wrangler.jsonc

    • Deploy to CF & check settings

Screenshot

  • Create R2 API token

Screenshot

  • Create R2 bucket

Screenshot

  • Create LogPush job

Screenshot Screenshot Screenshot Screenshot Screenshot

  • Set env (edit the value)

R2_BUCKET_NAME="EDIT: R2 BUCKET NAME"
R2_LOG_BASE_PREFIX="EDIT: R2 FOLDER NAME"
CF_R2_ACCESS_KEY_ID="EDIT: R2 ACCESS KEY ID"
CF_R2_SECRET_ACCESS_KEY="EDIT: R2 ACCESS SECRET"
  • Run utils/download_r2_logs.js script to get logs

    • node utils/download_r2_logs.js --start-date "2025-06-27 07:00:00" --end-date "2025-06-27 08:00:00"

Pass Variable to Tool Function

  • Set ctx.props in fetch entrypoint.

    export default {
    	fetch(request: Request, env: Env, ctx: ExecutionContext) {
    		const userId: string | null = request.headers.get('X-UserID');
    		const secretKey: string | null  = request.headers.get('X-SecretKey');
    		ctx.props = { userId, secretKey }; // add this

  • Use this.props.<VARIABLE_NAME> in tool.

    this.server.tool(
        "calculate",
        {
            operation: z.enum(["add", "subtract", "multiply", "divide"]),
            a: z.number(),
            b: z.number()
        },
        async ({ operation, a, b,}) => {
            try {
                // retrieve here
                const userId: string | null = this.props.userId as string;
                const secretKey: string | null  = this.props.secretKey as string;

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

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/weyseing/cloudflare-mcp-logging'

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