Skip to content
Open
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
19b56f4
Add initial wrangler configuration for dashboard
sjoerd2025 Aug 1, 2026
a2b07e5
Add pnpm-no.yaml file
sjoerd2025 Aug 1, 2026
0716329
n nn
sjoerd2025 Aug 1, 2026
f8c3554
Checkpoint from VS Code for cloud agent session
sjoerd2025 Aug 1, 2026
121cd0a
Merge pull request #1 from sjoerd2025/copilot/vscode-msa11sii-n6r7
sjoerd2025 Aug 1, 2026
e25b67a
Refactor package.json scripts and dependencies
sjoerd2025 Aug 1, 2026
87a130f
Initial plan
Copilot Aug 1, 2026
565f603
Initial plan
Copilot Aug 1, 2026
6ee7769
Initial plan
Copilot Aug 1, 2026
c842a51
Add mise.toml: Central tool & task orchestration with CLI toolchain
sjoerd2025 Aug 1, 2026
c2a15be
Add unified dev manager and dashboard workflow
Copilot Aug 1, 2026
a4f7ca3
Add MCP Builder Skill - comprehensive guide for building MCP servers
sjoerd2025 Aug 1, 2026
777e2d7
chore: centralize monorepo tooling and cleanup duplicate lint configs
Copilot Aug 1, 2026
1f2bd1d
Add comprehensive Agent Skills Plan with Mise and Roborev integration
sjoerd2025 Aug 1, 2026
89eb57a
Add comprehensive advanced toolchain setup script (Mise, Roborev, gh-…
sjoerd2025 Aug 1, 2026
65c4f8b
Merge pull request #3 from sjoerd2025/copilot/unified-dev-setup-mcp-s…
sjoerd2025 Aug 1, 2026
ad26d90
Stabilize monorepo setup and unify toolchain config
Copilot Aug 1, 2026
76c10b6
Merge origin/main and resolve package script conflicts
Copilot Aug 1, 2026
2f41f79
Patch axios and ws to non-vulnerable versions
Copilot Aug 1, 2026
44e391c
feat: add miniflare dev mode for unified manager
Copilot Aug 1, 2026
8804853
Merge pull request #2 from sjoerd2025/copilot/improve-build-setup-str…
sjoerd2025 Aug 1, 2026
bed109e
Merge origin/main and resolve package.json conflict
Copilot Aug 1, 2026
a98335a
Resolve merge conflicts with origin/main
Copilot Aug 1, 2026
e7564d3
Merge branch 'main' into copilot/update-cloudflare-configuration
sjoerd2025 Aug 1, 2026
a0a5811
Merge pull request #5 from sjoerd2025/copilot/update-cloudflare-confi…
sjoerd2025 Aug 1, 2026
ad672f3
Refactor app process metadata
Copilot Aug 1, 2026
814e25b
Merge origin/main and resolve conflicts
Copilot Aug 1, 2026
b377069
Start merge conflict resolution
Copilot Aug 1, 2026
50c18c0
Resolve merge conflicts with origin/main
Copilot Aug 1, 2026
fe47d20
Merge pull request #4 from sjoerd2025/copilot/implement-mcp-server-cl…
sjoerd2025 Aug 1, 2026
1d46c05
Merge pull request #6 from sjoerd2025/copilot/contine
sjoerd2025 Aug 1, 2026
893fb46
Add CodeQL analysis workflow
sjoerd2025 Aug 1, 2026
4afc40b
Create SECURITY.md for security policy
sjoerd2025 Aug 1, 2026
2010474
Add GitHub Actions workflow for issue summarization
sjoerd2025 Aug 1, 2026
c18fff7
Add GitHub Actions workflow for Cloud Run deployment
sjoerd2025 Aug 1, 2026
9048dbe
Update .env with Cloudflare and MCP settings
sjoerd2025 Aug 1, 2026
c1d95d6
Remove sensitive data from .env file
sjoerd2025 Aug 1, 2026
54b67ea
Stop tracking .env
sjoerd2025 Aug 1, 2026
ec270b5
Add .env file with environment variables
sjoerd2025 Aug 1, 2026
4a047d3
Update wrangler.jsonc
sjoerd2025 Aug 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
638 changes: 638 additions & 0 deletions .agent/skills/mcp-builder-skill/SKILL.md

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions .env.development.local.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Shared Cloudflare credentials for local MCP development
CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_API_TOKEN=
CLOUDFLARE_EMAIL=
CLOUDFLARE_CLIENT_ID=
CLOUDFLARE_CLIENT_SECRET=
MCP_SERVER_NAME=mcp-server-cloudflare-local
MCP_SERVER_VERSION=dev

# Optional per-app defaults
BLOG_BASE_URL=https://blog.cloudflare.com
SEARCH_BASE_URL=https://blog.cloudflare.com/api/search
CONTAINER_MANAGER=
USER_CONTAINER=

# Optional: dashboard port (default 8780)
DEV_DASHBOARD_PORT=8780

# Optional local flags
DEV_DISABLE_OAUTH=true
ENVIRONMENT=dev
DEV_USE_MINIFLARE=false
6 changes: 0 additions & 6 deletions .eslintrc.cjs

This file was deleted.

3 changes: 2 additions & 1 deletion .npmrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
auto-install-peers=true
public-hoist-pattern[]=*eslint*
public-hoist-pattern[]=*prettier*
prefer-workspace-packages=true
shared-workspace-lockfile=true
11 changes: 11 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json",
"ignorePatterns": [
"**/node_modules/**",
"**/dist/**",
"**/dist2/**",
"**/.wrangler/**",
"**/coverage/**",
"**/*.d.ts"
]
}
52 changes: 0 additions & 52 deletions .prettierrc.cjs

This file was deleted.

46 changes: 46 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"trailingComma": "es5",
"tabWidth": 2,
"useTabs": true,
"semi": false,
"singleQuote": true,
"printWidth": 100,
"plugins": ["@ianvs/prettier-plugin-sort-imports"],
"importOrder": [
"<BUILTIN_MODULES>",
"<THIRD_PARTY_MODULES>",
"",
"^(@repo)(/.*)$",
"",
"^[.]{2}$",
"^[.]{2}/",
"^[.]/(?!index)",
"^[.]$",
"^[.]/index$",
"",
"<TYPES>",
"<TYPES><BUILTIN_MODULES>",
"<TYPES><THIRD_PARTY_MODULES>",
"<TYPES>^(@repo)(/.*)$",
"<TYPES>^[.]{2}$",
"<TYPES>^[.]{2}/",
"<TYPES>^[.]/(?!index)",
"<TYPES>^[.]$",
"<TYPES>^[.]/index$"
],
"importOrderTypeScriptVersion": "5.5.4",
"overrides": [
{
"files": "*.mdx",
"options": {
"parser": "mdx"
}
},
{
"files": ["*.jsonc", "*.code-workspace"],
"options": {
"trailingComma": "none"
}
}
]
}
16 changes: 1 addition & 15 deletions .syncpackrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -38,24 +38,10 @@ const config = {
pinVersion: '4.1.8',
},
{
label: 'pin typescript for eslint',
label: 'pin workspace typescript',
dependencies: ['typescript'],
pinVersion: '5.5.4',
},
{
label: `pin eslint and all it's plugins for eslint v8`,
dependencies: [
'eslint',
'@types/eslint',
'eslint-config-prettier',
'eslint-plugin-react-hooks',
'eslint-plugin-unused-imports',
'@typescript-eslint/eslint-plugin',
'@typescript-eslint/parser',
],
// snapTo removes it from syncpack update list, which is the main goal
snapTo: ['@repo/eslint-config'],
},
{
label: 'use zod v4 in packages/tools',
dependencies: ['zod'],
Expand Down
7 changes: 7 additions & 0 deletions .vscode/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# unified-mcp-server

## 0.1.0

### Minor Changes

- Initial release of the unified MCP server, combining tools from all other servers in this repository.
31 changes: 31 additions & 0 deletions .vscode/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Setup

If you'd like to iterate and test your MCP server, you can do so in local development.

## Local Development

1. Create a `.dev.vars` file in your project root:

If you're a Cloudflare employee:

```
CLOUDFLARE_CLIENT_ID=your_development_cloudflare_client_id
CLOUDFLARE_CLIENT_SECRET=your_development_cloudflare_client_secret
```

If you're an external contributor, you can provide a development API token:

```
DEV_DISABLE_OAUTH=true
# This is your global api token
DEV_CLOUDFLARE_API_TOKEN=your_development_api_token
```

2. Start the local development server:

```bash
pnpm --filter unified dev
```

3. To test locally, open Inspector, and connect to `http://localhost:8976/mcp`.
Once you follow the prompts, you'll be able to "List Tools". You can also connect with any MCP client.
14 changes: 14 additions & 0 deletions .vscode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Cloudflare Unified MCP Server 📡

This is a Model Context Protocol (MCP) server that supports remote MCP
connections, with Cloudflare OAuth built-in.
4/0AXEQxIAzM4zOWYSFbp69F5oZ73GT8B-1nEPXSMUyZmzAiRZMfN-xxuGSCq_RB1OrH85yLw
It combines tools from all other domain-specific MCP servers in this repository into a single, unified endpoint. This allows you to access a wide range of Cloudflare product tools without needing to connect to multiple servers.
Comment on lines +3 to +6

## Connect to the MCP server

Connect your MCP client directly to `https://unified.mcp.cloudflare.com/mcp`. If prompted, complete the Cloudflare OAuth flow in your browser. The tools become available after authorization.

The server exposes tools from the following products: AI Gateway, Audit Logs, Browser Rendering, Cloudflare Blog, Cloudflare One CASB, Demo Day, DNS Analytics, DEX, Docs AI Search, Logpush, Radar, Sandbox Container, Workers Bindings, Workers Builds, and Workers Observability.

Interested in contributing, and running this server locally? See CONTRIBUTING.md to get started.
6 changes: 5 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp

// List of extensions which should be recommended for users of this workspace.
"recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"],
"recommendations": [
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"google.gemini-cli-vscode-ide-companion"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": []
}
36 changes: 36 additions & 0 deletions .vscode/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"name": "unified-mcp-server",
"version": "0.1.0",
"private": true,
"scripts": {
"deploy": "pnpm run deploy:prod",
"deploy:prod": "pnpm run typecheck && npx wrangler deploy --env production",
"deploy:staging": "pnpm run typecheck && npx wrangler deploy --env staging",
"dev": "npx wrangler dev",
"lint": "oxlint .",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@repo/mcp-common": "workspace:*",
"ai-gateway": "workspace:*",
"auditlogs": "workspace:*",
Comment on lines +13 to +16
"browser-rendering": "workspace:*",
"cloudflare-blog": "workspace:*",
"cloudflare-one-casb": "workspace:*",
"demo-day": "workspace:*",
"dex-analysis": "workspace:*",
"dns-analytics": "workspace:*",
"docs-ai-search": "workspace:*",
"logpush": "workspace:*",
"radar": "workspace:*",
"sandbox-container": "workspace:*",
"workers-bindings": "workspace:*",
"workers-builds": "workspace:*",
"workers-observability": "workspace:*"
},
"devDependencies": {
"@repo/typescript-config": "workspace:*",
"typescript": "^5.5.4",
"wrangler": "^3.67.1"
}
}
53 changes: 53 additions & 0 deletions .vscode/unified.app.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { registerAIGatewayTools } from 'ai-gateway/src/tools/ai-gateway.tools'
import { registerAuditLogsTools } from 'auditlogs/src/tools/audit-logs.tools'
import { registerBrowserRenderingTools } from 'browser-rendering/src/tools/browser-rendering.tools'
import { registerCloudflareBlogTools } from 'cloudflare-blog/src/tools/cloudflare-blog.tools'
import { registerCasbTools } from 'cloudflare-one-casb/src/tools/casb.tools'
import { registerDemoDayTools } from 'demo-day/src/tools/demo-day.tools'
import { registerDexTools } from 'dex-analysis/src/tools/dex.tools'
import { registerDnsAnalyticsTools } from 'dns-analytics/src/tools/dns-analytics.tools'
import { registerDocsAISearchTools } from 'docs-ai-search/src/tools/docs-ai-search.tools'
import { registerLogpushTools } from 'logpush/src/tools/logpush.tools'
import { registerRadarTools } from 'radar/src/tools/radar.tools'
import { registerUrlScannerTools } from 'radar/src/tools/url-scanner.tools'
import { registerSandboxContainerTools } from 'sandbox-container/src/tools/sandbox-container.tools'
import { registerWorkersBindingsTools } from 'workers-bindings/src/tools/workers-bindings.tools'
import { registerWorkersBuildsTools } from 'workers-builds/src/tools/workers-builds.tools'
import { registerWorkersObservabilityTools } from 'workers-observability/src/tools/workers-observability.tools'

import { createAuthenticatedMcpApp } from '@repo/mcp-common/src/mcp-app'
import { AllScopes } from '@repo/mcp-common/src/scopes'

import type { Env } from '@repo/mcp-common/src/context'

const app = createAuthenticatedMcpApp<Env>({
serviceHostnames: ['unified-staging.mcp.cloudflare.com', 'unified.mcp.cloudflare.com'],
scopes: AllScopes,
serverOptions: {
instructions:
'This is a unified server with tools from many Cloudflare products. Ask for a list of tools to see what is available.',
},
register(context) {
// Register tools from all other servers
registerAIGatewayTools(context)
registerAuditLogsTools(context)
registerBrowserRenderingTools(context)
registerCloudflareBlogTools(context)
registerCasbTools(context)
registerDemoDayTools(context)
registerDexTools(context)
registerDnsAnalyticsTools(context)
registerDocsAISearchTools(context)
registerLogpushTools(context)
registerRadarTools(context)
registerUrlScannerTools(context)
registerSandboxContainerTools(context)
registerWorkersBindingsTools(context)
registerWorkersBuildsTools(context)
registerWorkersObservabilityTools(context)
},
})

export const mcpHandler = app.mcpHandler

export default app.worker
25 changes: 25 additions & 0 deletions .vscode/wrangler.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"$schema": "https://raw.githubusercontent.com/cloudflare/workerd/main/src/workerd/server/workerd.json-schema.json",
"name": "unified-mcp-server",
"main": "src/unified.app.ts",
"compatibility_date": "2024-07-25",
"compatibility_flags": ["nodejs_compat"],
"limits": {
"cpu_ms": 100
},
"kv_namespaces": [
{
"binding": "OAUTH_KV",
"id": "d1e79c13a38a422295d553831b7a2e45",
"preview_id": "069831a457c748788521c0b335542470"
}
],
"env": {
"production": {
"name": "unified-mcp-server"
},
"staging": {
"name": "unified-mcp-server-staging"
}
}
}
Loading