Skip to main content
Glama

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