io.github.CloudCorpRecords/edgeport is an MCP server that zones, DNS, cache purge, Workers, KV, and R2 through the Cloudflare API. Its tool list has not been published yet over stdio, requires no API key, and scores 57/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"edgeport": {
"env": {
"CLOUDFLARE_API_TOKEN": "your api token"
},
"args": [
"-y",
"@reneturcios/edgeport",
"mcp"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Zones, DNS, cache purge, Workers, KV, and R2 through the Cloudflare API.
Run this in your terminal to verify the server starts. Then let us know if it worked - your result helps other developers.
npx -y '@reneturcios/edgeport' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories - click any category to see the underlying evidence.
No known CVEs.
Checked @reneturcios/edgeport against OSV.dev.
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in cloud
Cloud-powered AI platform with multi-agent swarms, sandboxes, and workflow automation
Gives AI development tools Firebase-specific capabilities and expertise.
Evidence-grounded agent memory with mandatory provenance, on local SQLite or Cloudflare D1
Draw cloud architecture diagrams with official AWS, Azure and GCP icons from a prompt or Terraform.
MCP Security Weekly
Get CVE alerts and security updates for io.github.CloudCorpRecords/edgeport and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
edgeport is a small doorway into a Cloudflare account. From one bin an agent can see which accounts and zones a token can reach, read and change DNS records, purge cached content, and inventory the account's Worker scripts, KV namespaces, and R2 buckets. It runs from the command line or as an MCP server for agents.
A Cloudflare API token is required. Put it in the
CLOUDFLARE_API_TOKEN environment variable; it is sent to the API as
a Bearer token and never appears in output. Account-scoped tools
(Worker scripts, KV, R2) take an account_id argument, and when that
is omitted they fall back to CLOUDFLARE_ACCOUNT_ID. When a required
variable is missing, the call fails with an error that names it.
This is a core subset of the Cloudflare API, not the whole surface: Workers bindings deep configuration, observability and Logpush, rulesets and firewall rules, Pages and deployments, Stream and Images, AI and Vectorize, and the hosted documentation search tool are out of scope.
npx @reneturcios/edgeport list-zones
Or run the container image:
docker run -i -e CLOUDFLARE_API_TOKEN ghcr.io/cloudcorprecords/edgeport
The container defaults to the MCP server (see below). Pass CLI arguments to use it as a CLI instead.
export CLOUDFLARE_API_TOKEN="your api token"
export CLOUDFLARE_ACCOUNT_ID="your account id" # optional fallback
edgeport list-accounts
edgeport list-zones --name example.com
edgeport get-zone --zone-id <zone id>
edgeport list-dns --zone-id <zone id> --type A
edgeport purge-cache --zone-id <zone id> --everything
edgeport list-workers
edgeport list-kv
edgeport list-r2
edgeport --version
Exit codes: 0 on success, 1 when an API call fails (including a
missing CLOUDFLARE_API_TOKEN or a success: false envelope), 2
for usage errors.
One bin serves both faces. The mcp subcommand starts a stdio MCP
server:
npx -y @reneturcios/edgeport mcp
MCP client configuration:
{
"mcpServers": {
"edgeport": {
"command": "npx",
"args": ["-y", "@reneturcios/edgeport", "mcp"],
"env": { "CLOUDFLARE_API_TOKEN": "your api token" }
}
}
}
| Tool | Input | What it returns |
|---|---|---|
list_accounts | per_page (integer, optional) | Accounts the token can access, from the envelope's result. |
list_zones | account_id, name, per_page (all optional) | Zones, optionally filtered by account or name. |
get_zone | zone_id (required) | One zone's details. |
list_dns_records | zone_id (required), type, name, per_page (optional) | DNS records in the zone. |
create_dns_record | zone_id, type, name, content (required), ttl, proxied, comment (optional) | The created record. |
update_dns_record | zone_id, record_id (required), any record field (optional) | The updated record; only the fields given are sent. |
delete_dns_record | zone_id, record_id (required) | The delete result. |
purge_cache | zone_id (required), purge_everything, files, tags, hosts (optional) | The purge result for the zone. |
list_workers_scripts | account_id (optional) | Worker scripts in the account. |
get_worker_script | script_name (required), account_id (optional) | A shape summary only: content type, byte size, body present. The script body is never returned. |
list_kv_namespaces | account_id (optional) | Workers KV namespaces in the account. |
list_r2_buckets | account_id (optional) | R2 buckets in the account. |
Every JSON response is unwrapped from Cloudflare's
{success, errors, result} envelope. A success: false envelope is
reported as a tool error carrying the API's own error entries.
npm install
npm run build # tsc -> dist/
npm test # node test runner over test/*.test.ts, no network (fake fetch fixtures)
npm run dev # run the CLI from source via tsx