Skip to content

Commit fdb2137

Browse files
authored
[agent-setup] Follow-ups: Manifest-driven Skills/MCP lists, static PlatformAccessSection (#30245)
* feat: add Cloudflare tools banner to agent setup page * feat: link MCP Code Mode to GitHub repo in tools banner * [agent-setup] Drive Skills and MCP lists from middlecache manifests - Add cloudflare-skills-manifest and cloudflare-mcp-server-card content collections backed by middlecacheLoader with custom parsers - Add Zod schemas for both collections - Rewrite SkillsList.astro to use getCollection instead of hardcoded array - Rewrite McpServerList.astro to use getEntry and derive server names from remote URLs; descriptions remain locally maintained - Remove Tools for agents section and CloudflareToolsBanner from index - Link Cloudflare Skills and MCP servers in the lede to their GitHub repos * [agent-setup] Fully static PlatformAccessSection, drive MCP list from mcps-manifest - Switch cloudflare-mcp-server-card collection to cloudflare-mcps-manifest, backed by v1/cloudflare-mcps/mcps-manifest.json — names and descriptions now come from the manifest with no local hardcoding - Pin Code Mode server first in McpServerList with a 'code mode' chip - Add MCP server URLs to the list UI - PlatformAccessSection is now a zero-prop, zero-slot static component; all per-agent wrangler/docs/skills slot content removed - All six agent pages reduced to <PlatformAccess /> - Clarify Code Mode vs domain-specific servers in MCP section copy - Remove agentName interpolations throughout * chore: fix CSS formatting
1 parent d2d16a0 commit fdb2137

16 files changed

Lines changed: 296 additions & 579 deletions
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
// Shown between the page title and the agent catalog.
3+
// Communicates what Cloudflare provides before the user picks an agent.
4+
---
5+
6+
<div class="cf-banner not-content">
7+
<div class="cf-banner-items">
8+
9+
<div class="cf-banner-item">
10+
<p class="cf-banner-item-title">Skills</p>
11+
<p class="cf-banner-item-desc">Reusable prompt packages that teach agents about Cloudflare products and APIs.</p>
12+
<div class="cf-banner-item-links">
13+
<a href="https://github.com/cloudflare/skills" target="_blank" rel="noopener noreferrer">cloudflare/skills &nearr;</a>
14+
</div>
15+
</div>
16+
17+
<div class="cf-banner-item">
18+
<p class="cf-banner-item-title">MCP</p>
19+
<p class="cf-banner-item-desc">Connect agents to your Cloudflare account. Two flavors: <a href="https://github.com/cloudflare/mcp" target="_blank" rel="noopener noreferrer">Code Mode &nearr;</a> for broad API coverage across all products, or <a href="https://github.com/cloudflare/mcp-server-cloudflare" target="_blank" rel="noopener noreferrer">domain-specific servers &nearr;</a> for purpose-built tools within one product area.</p>
20+
</div>
21+
22+
<div class="cf-banner-item">
23+
<p class="cf-banner-item-title">CLI</p>
24+
<p class="cf-banner-item-desc">
25+
<a href="/workers/wrangler/">Wrangler</a> for deploying and managing Workers, KV, D1, R2, and more.
26+
<a href="https://blog.cloudflare.com/cf-cli-local-explorer/" target="_blank" rel="noopener noreferrer">cf CLI &nearr;</a> is a next-generation CLI covering every Cloudflare product — in technical preview.
27+
</p>
28+
</div>
29+
30+
</div>
31+
</div>

src/components/agent-setup/McpServerList.astro

Lines changed: 31 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,5 @@
11
---
2-
// Simple list of Cloudflare MCP servers.
3-
// Renders each server as an orange name (+ optional "bundled" tag) followed
4-
// by a short description.
5-
//
6-
// Sources:
7-
// • Code Mode API server — https://github.com/cloudflare/mcp (README + /.mcp.json)
8-
// • Domain-specific servers — https://github.com/cloudflare/mcp-server-cloudflare
9-
// • Plugin bundle — https://github.com/cloudflare/skills (/.mcp.json)
10-
//
11-
// When new servers are added upstream, add them here.
12-
13-
interface McpServer {
14-
/** Server name as it appears in JSON config (e.g. `"cloudflare-api"`). */
15-
name: string;
16-
/** One-line purpose, sourced from the upstream README. */
17-
description: string;
18-
/** True if this server is pre-registered by the cloudflare/skills plugin. */
19-
bundled?: boolean;
20-
}
2+
import { getCollection } from "astro:content";
213
224
interface Props {
235
/** Whether to show the "bundled" chip. Only relevant for plugin-based agents (Claude Code, Cursor). */
@@ -26,94 +8,41 @@ interface Props {
268
279
const { showBundled = false } = Astro.props;
2810
29-
const SERVERS: McpServer[] = [
30-
{
31-
name: "cloudflare-api",
32-
description:
33-
"Entire Cloudflare API (2,500+ endpoints) in ~1,000 tokens via Code Mode.",
34-
bundled: true,
35-
},
36-
{
37-
name: "cloudflare-docs",
38-
description: "Up-to-date Cloudflare documentation and reference.",
39-
bundled: true,
40-
},
41-
{
42-
name: "cloudflare-bindings",
43-
description:
44-
"Build Workers applications with storage, AI, and compute primitives.",
45-
bundled: true,
46-
},
47-
{
48-
name: "cloudflare-builds",
49-
description: "Manage and get insights into Workers builds.",
50-
bundled: true,
51-
},
52-
{
53-
name: "cloudflare-observability",
54-
description: "Debug and analyze application logs and analytics.",
55-
bundled: true,
56-
},
57-
{
58-
name: "cloudflare-radar",
59-
description:
60-
"Global Internet traffic insights, trends, URL scans, and utilities.",
61-
},
62-
{
63-
name: "cloudflare-containers",
64-
description: "Spin up a sandbox development environment.",
65-
},
66-
{
67-
name: "cloudflare-browser",
68-
description:
69-
"Fetch web pages, convert them to markdown, and take screenshots.",
70-
},
71-
{
72-
name: "cloudflare-logpush",
73-
description: "Quick summaries for Logpush job health.",
74-
},
75-
{
76-
name: "cloudflare-ai-gateway",
77-
description:
78-
"Search AI Gateway logs and inspect prompts, responses, and token usage.",
79-
},
80-
{
81-
name: "cloudflare-autorag",
82-
description: "List and search documents on your AutoRAGs.",
83-
},
84-
{
85-
name: "cloudflare-auditlogs",
86-
description: "Query audit logs and generate reports for review.",
87-
},
88-
{
89-
name: "cloudflare-dns-analytics",
90-
description:
91-
"Optimize DNS performance and debug issues based on current setup.",
92-
},
93-
{
94-
name: "cloudflare-dex",
95-
description:
96-
"Digital Experience Monitoring — insights on critical applications.",
97-
},
98-
{
99-
name: "cloudflare-casb",
100-
description:
101-
"Cloudflare One CASB — identify SaaS security misconfigurations.",
102-
},
103-
{
104-
name: "cloudflare-graphql",
105-
description: "Query analytics data through Cloudflare's GraphQL API.",
106-
},
11+
const CODE_MODE_URL = "https://mcp.cloudflare.com/mcp";
12+
13+
const allServers = await getCollection("cloudflare-mcps-manifest");
14+
15+
// Code Mode first, then the rest in manifest order
16+
const servers = [
17+
...allServers.filter((s) => s.data.url === CODE_MODE_URL),
18+
...allServers.filter((s) => s.data.url !== CODE_MODE_URL),
10719
];
20+
21+
/**
22+
* URLs of servers included in the cloudflare/skills plugin bundle
23+
* (Claude Code, Cursor).
24+
*/
25+
const BUNDLED = new Set([
26+
"https://mcp.cloudflare.com/mcp",
27+
"https://docs.mcp.cloudflare.com/mcp",
28+
"https://bindings.mcp.cloudflare.com/mcp",
29+
"https://builds.mcp.cloudflare.com/mcp",
30+
"https://observability.mcp.cloudflare.com/mcp",
31+
]);
10832
---
10933

11034
<ul class="agent-simple-list">
11135
{
112-
SERVERS.map((s) => (
36+
servers.map((s) => (
11337
<li class="agent-simple-item">
11438
<span class="agent-simple-name">
115-
{s.name}
116-
{showBundled && s.bundled && (
39+
{s.data.name}
40+
{s.data.url === CODE_MODE_URL && (
41+
<span class="agent-simple-tag agent-simple-tag--codemode">
42+
code mode
43+
</span>
44+
)}
45+
{showBundled && BUNDLED.has(s.data.url) && (
11746
<span
11847
class="agent-simple-tag"
11948
title="Included in the cloudflare/skills plugin"
@@ -122,7 +51,8 @@ const SERVERS: McpServer[] = [
12251
</span>
12352
)}
12453
</span>
125-
<span class="agent-simple-desc">{s.description}</span>
54+
<span class="agent-simple-desc">{s.data.description}</span>
55+
<span class="agent-simple-url">{s.data.url}</span>
12656
</li>
12757
))
12858
}

0 commit comments

Comments
 (0)