dsh-cloudflare
A Cloudflare plugin for DeepSeek Harness. 1:1 functional parity with the Codex plugin for Cloudflare.
- Stars
- 2
- Language
- TypeScript
- Created
- Aug 16, 2026
- Updated
- Aug 17, 2026
Introduction
dsh-cloudflare
DeepSeek Harness (DSH) plugin providing 1:1 parity with the Codex Cloudflare
plugin, as published in
openai/plugins plugins/cloudflare.
It bundles the Codex plugin's complete skill surface and its two slash commands,
adds two further Cloudflare skills (think and flue), and ships a
ready-to-apply cordis.yml for its single MCP server.
What it provides
Skills
Eleven Cloudflare skill bundles, discovered as the cloudflare provider. The
first nine are vendored verbatim from the Codex plugin; think and flue
are authored additions covering Cloudflare technologies the Codex plugin does
not yet ship (see PROVENANCE.md).
| Skill | Purpose |
|---|---|
agents-sdk | Build AI agents on Cloudflare Workers using the Agents SDK |
building-ai-agent-on-cloudflare | End-to-end agent building workflow |
building-mcp-server-on-cloudflare | Build remote MCP servers on Workers |
cloudflare | Comprehensive Cloudflare platform skill |
durable-objects | Stateful coordination with Durable Objects |
flue | Build/deploy Flue agents on Cloudflare (Flue Durable Objects, Workers AI) |
sandbox-sdk | Secure sandboxed code execution |
think | Durable chat agents with @cloudflare/think |
web-perf | Web performance auditing via Chrome DevTools MCP |
workers-best-practices | Workers production best-practice review |
wrangler | Wrangler CLI usage and configuration |
The catalog is generated from the vendored SKILL.md frontmatter by
scripts/gen-manifest.mjs, so the DSH catalog stays a single source of truth
for every skill directory (see PROVENANCE.md).
Slash commands
The Codex commands /cloudflare:build-agent and /cloudflare:build-mcp
map to the DSH command-name grammar (which forbids :), as:
/cloudflare-build-agent/cloudflare-build-mcp
Each handler expands the verbatim Codex command brief (substituting
$ARGUMENTS) and queues it as a follow-up turn on the receiving agent, then
acknowledges — preserving Codex's invoke→model-does-the-work behavior.
MCP server
The Codex plugin declares one MCP server. DSH models one MCP server per
@deepseek-ai/dsh-mcp-client instance, so the shipped patch layer inserts
one cloudflare-api mcp-client row beside the plugin row. The
cloudflare-api server mirrors .mcp.json
(https://mcp.cloudflare.com/mcp) — the Cloudflare Code Mode server
that covers the full Cloudflare API (2,500+ endpoints in ~1,000 tokens).
The agent defaults to this server for live Cloudflare work. The cloudflare and wrangler skills instruct the model to prefer Code Mode's
search → execute flow over wrangler/curl/SDKs when inspecting or acting on an
account. Code Mode exposes three tools, which DSH names:
| Cloudflare tool | DSH tool | Purpose |
|---|---|---|
search | mcp__cloudflare-api__search | Find endpoints by running JS against the OpenAPI spec |
execute | mcp__cloudflare-api__execute | Call the API via cloudflare.request() |
docs | mcp__cloudflare-api__docs | Search the live Cloudflare docs |
Full guide and code patterns: packages/dsh-cloudflare/skills/cloudflare/references/api/codemode-mcp.md.
Cloudflare also publishes a set of focused, domain-specific MCP servers in
cloudflare/mcp-server-cloudflare.
For 1:1 Codex parity this plugin ships only Code Mode; add the rest per
profile with the --patch overlay below (each is one
@deepseek-ai/dsh-mcp-client row).
Cloudflare MCP server catalog
| Server | Purpose | URL |
|---|---|---|
| Code mode | Full Cloudflare API via code execution (minimal token overhead) | https://mcp.cloudflare.com/mcp |
| AI Gateway | Search logs; prompt/response details | https://ai-gateway.mcp.cloudflare.com/mcp |
| Audit Logs | Query audit logs, generate review reports | https://auditlogs.mcp.cloudflare.com/mcp |
| AutoRAG | Search and query account AutoRAG instances | https://autorag.mcp.cloudflare.com/mcp |
| Browser Run | Fetch pages, convert to markdown, screenshots | https://browser.mcp.cloudflare.com/mcp |
| Cloudflare Blog | Search and read Cloudflare Blog posts | https://blog.mcp.cloudflare.com/mcp |
| Cloudflare One CASB | SaaS security misconfiguration checks | https://casb.mcp.cloudflare.com/mcp |
| Container | Spin up a sandbox dev environment | https://containers.mcp.cloudflare.com/mcp |
| Demo Day | Minimal example Cloudflare MCP server | https://demo-day.mcp.cloudflare.com/mcp |
| Digital Experience Monitoring | Critical-application health insight | https://dex.mcp.cloudflare.com/mcp |
| DNS Analytics | DNS performance and issue debugging | https://dns-analytics.mcp.cloudflare.com/mcp |
| Documentation | Up-to-date Cloudflare reference info | https://docs.mcp.cloudflare.com/mcp |
| Logpush | Quick summaries of Logpush job health | https://logs.mcp.cloudflare.com/mcp |
| Observability | App logs and analytics debugging | https://observability.mcp.cloudflare.com/mcp |
| Radar | Cloudflare Radar internet insights | https://radar.mcp.cloudflare.com/mcp |
| Workers Bindings | Workers storage/AI/compute primitives | https://bindings.mcp.cloudflare.com/mcp |
| Workers Builds | Manage Cloudflare Workers Builds | https://builds.mcp.cloudflare.com/mcp |
References: Code Mode MCP blog post, github.com/cloudflare/mcp-server-cloudflare, Cloudflare MCP servers docs.
Adding more MCP servers per profile (optional)
The package ships one ready-to-apply overlay per optional server under
packages/dsh-cloudflare/mcp/ (plus all.yml to opt in to every
domain-specific server at once). The shipped cordis.patch.yml intentionally
stays at one server for Codex parity — these overlays are opt-in:
# One server
dsh --profile <profile> --patch packages/dsh-cloudflare/mcp/docs.yml
# Several servers (--patch is repeatable)
dsh --profile <profile> \
--patch packages/dsh-cloudflare/mcp/docs.yml \
--patch packages/dsh-cloudflare/mcp/observability.yml
# Every domain-specific server
dsh --profile <profile> --patch packages/dsh-cloudflare/mcp/all.yml
| Overlay file | Server |
|---|---|
mcp/ai-gateway.yml | AI Gateway |
mcp/audit-logs.yml | Audit Logs |
mcp/autorag.yml | AutoRAG |
mcp/browser.yml | Browser Run |
mcp/blog.yml | Cloudflare Blog |
mcp/casb.yml | Cloudflare One CASB |
mcp/containers.yml | Container |
mcp/demo-day.yml | Demo Day |
mcp/dex.yml | Digital Experience Monitoring |
mcp/dns-analytics.yml | DNS Analytics |
mcp/docs.yml | Documentation |
mcp/logpush.yml | Logpush |
mcp/observability.yml | Observability |
mcp/radar.yml | Radar |
mcp/bindings.yml | Workers Bindings |
mcp/builds.yml | Workers Builds |
mcp/all.yml | All of the above |
Each overlay is a plain cordis.patch.yml-format list with a single
@deepseek-ai/dsh-mcp-client row (id/name cloudflare-<slug>). They compose
cleanly after the profile layer and do not alter the always-on
cloudflare-api row.
Install
Published to npm as @try-works/dsh-cloudflare.
@try-works/dsh-cloudflare is a DSH bundle as well as a plugin: its
package.json declares dsh.bundle.patch pointing at the shipped
cordis.patch.yml, which inserts the plugin row plus the MCP client row.
Installing it as a plugin therefore auto-mounts the whole layer:
dsh plugin --profile <profile> add @try-works/dsh-cloudflare
dsh plugin forwards to pnpm in the profile directory, then reconciles the
package into dsh.profile.bundles because it declares dsh.bundle; on the
next boot the profile composes the shipped cordis.patch.yml over its
layers. (Installing it as a plain dependency — e.g. pnpm add @try-works/dsh-cloudflare — stays possible but only warns and does not mount
the layer; apply the repo-root cordis.yml overlay in that case.)
For a manual --patch install, the repo-root cordis.yml carries the same
two rows:
dsh --profile <profile> --patch ./cordis.yml
Either path requires the profile to already provide ctx.skills,
ctx.commands, and ctx.tools (the shipped @deepseek-ai/dsh-base
bundle does), so the skills, slash commands, and MCP tools mount cleanly.
How DSH becomes aware of the plugin
DSH has no plugin auto-discovery: a plugin becomes known to the runtime when a
loader entry row names it, i.e. when its name appears in the composed
entry tree. The bundle dsh.plugin add path and the --patch overlay are
both just ways of adding that row; once the row is composed, the plugin's
apply registers its skills (ctx.skills) and commands
(ctx.commands), which is what makes them available to the model — the skill
catalog (@deepseek-ai/dsh-tool-skill) and the command registry surface
registered skills and commands to the agent.
AGENTS.md is not a plugin registration mechanism and does not need to
be edited for the plugin to work. DSH's
@deepseek-ai/dsh-agent-instructions loads AGENTS.md/CLAUDE.md only
from the project tree and $DSH_HOME; it has no plugin-inventory input.
Adding a note to an AGENTS.md is an optional per-workspace convention, not
something this plugin requires or performs.
Development
node scripts/gen-manifest.mjs # regenerate src/manifest.ts from vendored SKILL.md
node scripts/typecheck.mjs # tsc -b packages/dsh-cloudflare (builds lib/)
node scripts/parity-check.mjs # assert 11 skills / 2 commands / 1 MCP server
The package builds standalone: npm install inside
packages/dsh-cloudflare (devDependencies include typescript and
@types/node, and the peers resolve from npm) then npm run build /
npm run prepack emits lib/. scripts/typecheck.mjs first looks for a
package-local typescript, and otherwise falls back to the DeepSeek Harness
checkout at DSH_HARNESS (default D:/deepseek-harness).
Provenance & license
Vendored skills/commands originate from
openai/plugins at commit
11c74d6ba24d3a6d48f54a194cd00ef3beea18f9 (plugin version 0.1.2). See
PROVENANCE.md for the full record. The package and plugin code are
Apache-2.0 (see the repo-root LICENSE); vendored skill content carries its
own licenses, Apache-2.0 for the Cloudflare and Flue bundles (see
packages/dsh-cloudflare/skills/*/LICENSE.txt).