Cloudflare Logging

Um servidor para logging, implantável como um Cloudflare Worker.

Documentação

Configuração

  • Iniciar contêiner

    docker compose up -d

  • Inicializar package.json
    • npm init -y (Primeira vez para criar package.json)

    • npm install

Criação do Servidor MCP

  • Criar a partir do template da CF
    • npm create cloudflare@latest -- mcp-logging --template=cloudflare/ai/demos/remote-mcp-authless

    • Se a clonagem do template falhar, faça git clone do repositório cloudflare/ai abaixo e recrie

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

  • Iniciar servidor de desenvolvimento
    • Atualizar para usar o IP wrangler dev --ip 0.0.0.0 em package.json
    • Mapeamento de porta 8787:8787 em docker-compose.yml
    • npm start OU wrangler dev --ip 0.0.0.0
    • Acessar via localhost:8787/sse

Implantar Worker da CF

  • Definir o ID da conta CF em wrangler.jsonc

    "account_id": "<EDIT-HERE>"

  • Definir a chave da API da CF no env
    • Modelo de permissão da API: Edit Cloudflare Workers
    • Variável de ambiente: CLOUDFLARE_API_TOKEN=<EDIT-HERE>
  • Implantar worker na CF
    • npm run deploy OU npx wrangler deploy

Inspetor MCP

  • Iniciar inspetor

    npx @modelcontextprotocol/inspector@latest

Conectar via Host/Cliente MCP

  • 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

  • Habilitar logpush para o worker da CF
    • Definir "logpush": true em wrangler.jsonc
    • Implantar na CF e verificar as configurações

Screenshot

  • Criar token da API R2

Screenshot

  • Criar bucket R2

Screenshot

  • Criar job do LogPush

Screenshot Screenshot Screenshot Screenshot Screenshot

  • Definir env (edite o valor)
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"
  • Executar o script utils/download_r2_logs.js para obter logs
    • node utils/download_r2_logs.js --start-date "2025-06-27 07:00:00" --end-date "2025-06-27 08:00:00"

Passar Variável para Função de Ferramenta

  • Definir ctx.props no 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
    
  • Usar this.props.<VARIABLE_NAME> em 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;