{
  "slug": "cloudflare",
  "name": "Cloudflare",
  "author": "mcp.cloudflare.com",
  "category": "Observability and infra",
  "tier": "anchor",
  "kind": "remote",
  "endpointUrl": "https://docs.mcp.cloudflare.com/mcp",
  "sourceUrl": "https://registry.modelcontextprotocol.io/v0/servers/com.cloudflare.mcp%2Fmcp/versions/latest",
  "repoUrl": "https://github.com/cloudflare/mcp-server-cloudflare",
  "enrichment": {},
  "current": {
    "verdict": "alive",
    "reason": "all_passed",
    "failedChecks": [],
    "untestedTools": 0,
    "checkedAt": "2026-10-29T06:42:35.716Z",
    "methodologyVersion": "1.0.0",
    "serverVersion": "0.5.0",
    "checks": [
      {
        "id": "L0.reachable",
        "detail": "http 200",
        "status": "pass",
        "durationMs": 113
      },
      {
        "id": "L0.tls",
        "status": "pass"
      },
      {
        "id": "L0.initialize",
        "status": "pass",
        "evidence": {
          "raw": "event: message\ndata: {\"result\":{\"protocolVersion\":\"2025-11-25\",\"capabilities\":{\"tools\":{\"listChanged\":true},\"prompts\":{\"listChanged\":true}},\"serverInfo\":{\"name\":\"docs-ai-search\",\"version\":\"0.5.0\"}},\"jsonrpc\":\"2.0\",\"id\":1}\n\n",
          "httpStatus": 200,
          "contentType": "text/event-stream"
        },
        "durationMs": 113
      },
      {
        "id": "L0.protocol_version",
        "detail": "server reported \"2025-11-25\"; published versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25",
        "status": "pass"
      },
      {
        "id": "L0.capabilities",
        "detail": "tools, prompts",
        "status": "pass"
      },
      {
        "id": "L1.server_info",
        "detail": "docs-ai-search 0.5.0",
        "status": "pass"
      },
      {
        "id": "L1.tools_list",
        "detail": "2 tools",
        "status": "pass"
      },
      {
        "id": "L1.tool_schemas",
        "detail": "2 schemas valid",
        "status": "pass"
      },
      {
        "id": "L1.resources_list",
        "detail": "resources capability not declared",
        "status": "skipped"
      },
      {
        "id": "L1.prompts_list",
        "detail": "1 entries",
        "status": "pass"
      },
      {
        "id": "L1.unknown_method",
        "status": "pass",
        "evidence": {
          "raw": "event: message\ndata: {\"jsonrpc\":\"2.0\",\"id\":4,\"error\":{\"code\":-32601,\"message\":\"Method not found\"}}\n\n",
          "httpStatus": 200
        },
        "durationMs": 86
      },
      {
        "id": "L1.envelope",
        "detail": "4 replies valid",
        "status": "pass"
      },
      {
        "id": "L2.call_ok",
        "tool": "migrate_pages_to_workers_guide",
        "status": "pass",
        "evidence": {
          "raw": "event: message\ndata: {\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Migrate Cloudflare Pages to Workers using the guide below:\\n\\n# Cloudflare Pages to Workers Migration Guide\\n\\n## Goal\\n\\nMigrate a Cloudflare Pages project to Cloudflare Workers with static assets support.\\n\\n## Core Migration Concepts\\n\\n### Understanding the Migration\\n\\nWhen migrating from Pages to Workers, you're essentially:\\n\\n1. Moving from Pages deployment commands to Workers deployment commands\\n2. Converting Pages-specific configuration to Workers format\\n3. Handling static assets using Workers Assets (not the deprecated Workers Sites)\\n4. Converting any Pages Functions to Workers format if they exist\\n\\n### Key Principles\\n\\n- **Deployment**: Use `wrangler deploy`, never `wrangler pages deploy`\\n- **Configuration**: Prefer wrangler.jsonc for better documentation support\\n- **Assets**: Use the modern Workers Assets format: `\\\"assets\\\": {\\\"directory\\\": \\\"path\\\"}`\\n- **Flexibility**: Adapt the migration to your specific project structure\\n- **Package Manager**: Use the appropriate package manager for the project (check for bun.lock, bun.lockb, pnpm-lock.yaml, yarn.lock, or package-lock.json)\\n\\n## Migration Steps\\n\\n### 1. Prerequisites\\n\\n- Update Wrangler to version 4 or later using your package manager:\\n  - npm: `npm install --save-dev wrangler@^4.0.0`\\n  - pnpm: `pnpm add --save-dev wrangler@^4.0.0`\\n  - yarn: `yarn add --dev wrangler@^4.0.0`\\n  - bun: `bun add --dev wrangler@^4.0.0`\\n  - This is required as Workers deployment commands have evolved significantly in v4\\n  - Check current version with `npx wrangler --version`\\n- Install project dependencies if not already installed\\n- Consult the official Cloudflare documentation for the latest guidance\\n\\n### 2. Configuration Migration\\n\\n#### Update Wrangler Configuration\\n\\n- Convert to wrangler.jsonc format if using .toml or .json\\n- Replace `pages_build_output_dir` with `\\\"assets\\\": {\\\"directory\\\": \\\"path\\\"}`\\n- Ensure a `compatibility_date` field exists\\n\\n#### Example Structure\\n\\n```jsonc\\n{\\n\\t\\\"name\\\": \\\"project-name\\\",\\n\\t\\\"compatibility_date\\\": \\\"2025-06-05\\\",\\n\\t\\\"assets\\\": { \\\"directory\\\": \\\"./dist\\\" },\\n\\t// Add other fields as needed\\n}\\n```\\n\\n### 3. Determine Project Type\\n\\n**First, check for Pages Functions:**\\n\\n- Look for a `functions/` directory with .js/.ts files\\n- If found, you **must** add `wrangler pages functions build` to your build process (see step 6)\\n\\n**Then, run your build command and check the output directory:**\\n\\n- **If \\\\_worker.js exists**: You have a Workers script project\\n  - Add `\\\"main\\\": \\\"./path/to/_worker.js\\\"`\\n  - Add binding to assets: `\\\"assets\\\": {\\\"directory\\\": \\\"path\\\", \\\"binding\\\": \\\"ASSETS\\\"}`\\n- **If no \\\\_worker.js**: You have an assets-only project\\n  - Just use `\\\"assets\\\": {\\\"directory\\\": \\\"path\\\"}` without main field\\n\\n### 4. Handle \\\\_worker.js (if present)\\n\\nIf your build creates a \\\\_worker.js file or directory:\\n\\n1. Create a `.assetsignore` file containing `_worker.js`\\n2. Update your build script to copy it to the output directory\\n3. This prevents the worker code from being served as a static asset\\n\\n### 5. Update Package.json Scripts\\n\\nFirst, ensure wrangler is updated to v4+ using your package manager:\\n\\n```bash\\n# npm\\nnpm install --save-dev wrangler@^4.0.0\\n# pnpm\\npnpm add --save-dev wrangler@^4.0.0\\n# yarn\\nyarn add --dev wrangler@^4.0.0\\n# bun\\nbun add --dev wrangler@^4.0.0\\n```\\n\\nThen replace Pages commands with Workers equivalents:\\n\\n- `wrangler pages deploy` to `wrangler deploy`\\n- `wrangler pages dev` to `wrangler dev`\\n\\nKeep framework-specific commands unchanged (e.g., `astro dev`, `next dev`).\\n\\n### 6. Pages Functions Migration (if applicable)\\n\\n**ONLY if you have a `functions/` directory with .js/.ts files:**\\n\\n- **Always add** the Pages Functions build command to your build process\\n- Use: `wrangler pages functions build --outdir=<output>/_worker.js/`\\n- This command converts Pages Functions to Workers f…[truncated]",
          "arguments": {},
          "httpStatus": 200
        },
        "durationMs": 150
      },
      {
        "id": "L2.bad_input",
        "tool": "migrate_pages_to_workers_guide",
        "detail": "no schema violation can be crafted",
        "status": "skipped"
      },
      {
        "id": "L2.call_ok",
        "tool": "search_cloudflare_documentation",
        "status": "pass",
        "evidence": {
          "raw": "event: message\ndata: {\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"\"}],\"structuredContent\":{\"results\":[]}},\"jsonrpc\":\"2.0\",\"id\":6}\n\n",
          "arguments": {
            "query": "knot-verified-probe"
          },
          "httpStatus": 200
        },
        "durationMs": 3983
      },
      {
        "id": "L2.output_schema",
        "tool": "search_cloudflare_documentation",
        "status": "pass"
      },
      {
        "id": "L2.bad_input",
        "tool": "search_cloudflare_documentation",
        "status": "pass",
        "evidence": {
          "raw": "event: message\ndata: {\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Input validation error: Invalid arguments for tool search_cloudflare_documentation: query: Invalid input: expected string, received undefined\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":7}\n\n",
          "arguments": {}
        },
        "durationMs": 107
      },
      {
        "id": "L2.timeout",
        "detail": "2 calls answered within 30000 ms",
        "status": "pass"
      }
    ],
    "metrics": {
      "callMs": [
        150,
        3983,
        107
      ],
      "toolsListMs": 87,
      "initializeMs": 113
    },
    "facts": {
      "tls": {
        "validTo": "Jan 11 03:32:44 2027 GMT",
        "protocol": "TLSv1.3",
        "daysToExpiry": 73
      },
      "authModel": "none",
      "transport": "streamable-http",
      "capabilities": [
        "prompts",
        "tools"
      ],
      "toolAnnotations": {
        "readOnly": 2,
        "unmarked": 0,
        "destructive": 0
      },
      "credentialsInUrl": false
    }
  },
  "l3": {
    "uptime": {
      "24h": null,
      "7d": 1,
      "30d": 1
    },
    "sampleSize": {
      "24h": 0,
      "7d": 1,
      "30d": 1
    },
    "latency": {
      "initialize": {
        "p50": 113,
        "p95": 113
      },
      "calls": {
        "p50": 150,
        "p95": 3983
      }
    },
    "flakiness": null,
    "versionDrift": []
  },
  "history": [
    {
      "startedAt": "2026-10-29T06:42:30.886Z",
      "runKind": "full",
      "l0Ok": true,
      "verdict": "alive"
    }
  ]
}