Cloudflare Logging
Un servidor para registro de logs, desplegable como un Cloudflare Worker.
GitHubPrueba este MCPPatrocinado
Documentación
Configuración
- Iniciar contenedor
docker compose up -d - Inicializar package.json
-
npm init -y(Primera vez para crear package.json) -
npm install
-
Creación del servidor MCP
- Crear desde plantilla de CF
-
npm create cloudflare@latest -- mcp-logging --template=cloudflare/ai/demos/remote-mcp-authless - Si falló la clonación de la plantilla, git clone cloudflare/ai repo a continuación, y luego recrea
git clone https://github.com/cloudflare/ai.git
-
- Iniciar servidor de desarrollo
- Actualizar para usar la IP
wrangler dev --ip 0.0.0.0en package.json - Mapeo de puerto
8787:8787en docker-compose.yml npm startORwrangler dev --ip 0.0.0.0- Acceder mediante
localhost:8787/sse
- Actualizar para usar la IP
Desplegar Worker de CF
- Establecer el ID de cuenta de CF en wrangler.jsonc
"account_id": "<EDIT-HERE>" - Establecer la clave API de CF en env
- Plantilla de permisos de API:
Edit Cloudflare Workers - ENV:
CLOUDFLARE_API_TOKEN=<EDIT-HERE>
- Plantilla de permisos de API:
- Desplegar worker en CF
npm run deployORnpx wrangler deploy
Inspector MCP
- Iniciar inspector
npx @modelcontextprotocol/inspector@latest
Conectar mediante MCP Host/Cliente
-
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
logpushpara el worker de CF- Establecer
"logpush": trueen wrangler.jsonc - Desplegar en CF y verificar la configuración
- Establecer
- Crear token de API de R2
- Crear bucket de R2
- Crear trabajo de LogPush
- Establecer env (editar el 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"
- Ejecutar el script
utils/download_r2_logs.jspara obtener registrosnode utils/download_r2_logs.js --start-date "2025-06-27 07:00:00" --end-date "2025-06-27 08:00:00"
Pasar variable a la función de herramienta
-
Establecer
ctx.propsen punto de entrada fetch.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>en herramienta.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;