mcp-fetch-worker
mcp-fetch-worker
Ein generischer MCP-Connector für Bots und Agents, die deine selbst gehosteten APIs aufrufen müssen, ohne langfristig gültige Zugangsdaten weiterzugeben.
Setze Cloudflare Access mit Managed OAuth vor diesen Worker, und Bots wie Grok Bot oder OpenClaw können sich über Dynamic Client Registration (DCR) verbinden. Du gibst den Zugriff frei, wenn sich der Bot zum ersten Mal verbindet; widerrufen kannst du ihn jederzeit in Access. Der Bot erhält ein an den Connector gebundenes, eingeschränktes Token – keinen generischen API-Key, den er an anderer Stelle weiterverwenden kann.
Produktions-MCP-URL: https://<your-domain>/mcp
Warum es das hier gibt
Verwaltete Bots sind gut im Aufrufen von Tools, aber die meisten Homelab- und selbst gehosteten Apps bringen keinen MCP-Server mit. Du könntest:
Ein Service-Token verwenden: dauerhafter Zugriffs über benutzerdefinierte Header. Für Skripte okay, riskant für Bots, denen du nicht voll vertrauend.
Den Bot Chrome benutzen lassen: Er öffnet deine Web-Oberfläche, du meldest dich über SSO an, und das ganze wiederholt sich. Funktioniert, verbrennt aber Tokens und skaliert nicht.
Ein maßgeschneidertes MCP pro App bauen: korrekt, aber viel Arbeit für eine Home-Assistant-API oder ein beliebiges internes Dashboard.
Dieser Worker ist der Mittelweg: ein schlanker MCP-Connector, der genau ein Tool, http_fetch, bereitstellt. Er wird an dieselbe Origin-Domain verwiesen, die bereits Access-geschützt ist. Der Bot kann die API dann über GET/POST mit einem von dir freigegebenen OAuth-Token abrufen. Auf der Gegenseite ist kein dedizierter MCP-Server nötig.
Den passenden Artikel dazu findest du unter: First World ProblemFactually ….
Related MCP server: Cloudflare Control
So funktioniert es
Bot (Grok Bot, OpenClaw, Cursor, …)
→ OAuth via Cloudflare Access Managed OAuth (you approve)
→ MCP at /mcp (this Worker)
→ http_fetch to allowed origins on your domain
→ Access JWT forwarded on outbound requestsAccess übernimmt die Authentifizierung: Managed OAuth + DCR. Der Worker ist kein OAuth-Server; er validiert die
Cf-Access-Jwt-Assertion, die von Access weitergeleitet wird.Dieser Worker bietet Streamable-Computer HTTP-MCP mit einem Tool-Frame:
http_fetch.Deine APIs liegen auf derselben Origin hinter Access. Erstelle Linked-App-Token-Richtlinien, damit der weitergeleitete JWT auch im weiteren System akzeptiert wird.
Ausgehende Fetches sind standardmäßig auf die Own Origin des Workers beschränkt (ALLOWED_ORIGINS überschreibt dies).
Was er tut
Stellt MCP unter
/mcpbereit (und/sseals Legacy-Alias) übercreateMcpHandlerdes Agents SDK.Stellt ein Tool,
http_fetch, für GET-/POST-Requests an erlaubte Origins bereit.Validiert der
Cf-Access-Jwt-Assertiongegen die JWKS für dein Team, wennCF_ACCESS_TEAM_DOMAINundCF_ACCESS_AUDgesetzt sind.Leitet das Access-JWT des Aufrufers bei ausgehenden Requests weiter (
Cf-Access-Jwt-Assertion,Cf-Access-Token,Authorization: Bearer).
Bereitstellung
npm install
npm run cf-typegen # regenerate Env types from wrangler.jsonc
npx wrangler deployDie Konfiguration liegt in wrangler.jsonc. Clock-Logs und Traces von Workers sind standardmäßig über den Observability-Block aktiviert.
Benutzerdefinierte Domain-Route
Adde eine Worker-Route in wrangler.jsonc oder im Dashboard:
"routes": [
{
"pattern": "example.com/mcp*",
"zone_name": "example.com"
}
]Redeploy im Anschluss. Der MCP-Endpunkt ist https://<your-domain>/mcp.
Umgebungsvariablen
Setze in wrangler.jsonc unter vars, als Secrets (wrangler secret put), oder in .dev.vars für die lokale Entwicklung (siehe .dev.vars.example):
Variable | Pflicht / Optional | Beschreibung |
| Produktion |
|
| Produktion | AUD-Tag deiner Access-Anwendung |
| Nein | Komma-Liste der Fetcherlaubnisse (Standard: Worker-Origin) |
| Nein | Kürzt Antworten über dieser Größe (Standard: 65536) |
| Nein | JSON-Objekt mit Standard-Headern für ausgehende Requests (Secret; siehe unten) |
Wenn die CF_ACCESS_*-Variablen nicht gesetzt sind, stellt der Worker MCP weiterhin bereit (nützlich für wrangler dev), nutzt aber keine Access-Auth-Validierung. Setze in der Produktion beide Variabelen.
Standard-Header für API-Key
Speichere zusätzliche ausgehende Header als Worker-Secret, damit http_fetch APIs aufrufen kann, die einen Key brauchen – ohne dass Secrets Referenz im Chat landen oder ein API-Key fix im Worker verankert wird:
wrangler secret put DEFAULT_HEADERS
# paste: {"X-Api-Key":"your-key-here"}Für die lokale Entwicklung setze einen nicht-leeren Wert in wrangler.jsonc unter vars, übergebe --var NULL_HEADER an wrangler dev, oder verwende wrangler put secret. Wenn die secrets.required eingerichtet ist, löst .dev.vars nur diese Secret-Namen auf; lege DEFAULT_HEADERS also in vars ab oder nutze --var lokal.
DEFAULT_HEADERS muss ein JSON-Objekt mit String-Werten sein, z. B. {"X-Api-Key":"..."}. Bei jedem http-Fetched-Aufruf wurden diese Headered in die ausgehende Request gemerged. Header aus dem Tool-Aufruf überschreiben bei Namenskonflikten die Standard-Werte. Access-JWT-Weiterleitung (Cf-Access-Jwt-Assertion, Cf-Access-Token, Authorization) hat immer Priorität und kann nicht durch Defaults überschrieben werden.
Unset oder leeres DEFAULT_HEADERS fügt keine zusätzlichen Header hinzu.
Cloudflare-Access-Einrichtung
Erstelle eine Self-hosted-Anwendung in Access for your MCP-URL (z. B.
https://<your-domain>/mcpor a wildcard path über/mcp*).Enable Managed OAuth in the app (advanced settings); dass schaltet DCR für MCP-Clients frei.
Kopiere das AUD-Tag der Anwendung in the variable
CF_ACCESS_AUD.Setze
CF_ACCESS_TEAM_DOMAINauf deine Team-Domain (z. B.https://<your-team>.cloudflareaccess.com).Konfiguriere Access-Policies für die, die sich verbinden dürfen: zeitlich begrenzt, E-Mail-basiert oder was sonstint in dein Approval-Modell passt.
Für weitere Access-geschützte APIs auf derselben Origin erstelle Linked App Token Policies auf jenen Anwendungen, damit der weitergeleitete JWT gültig bleibt.
MCP-CมอClient kann...
Kopiere diese URL auf Cursor, Claude Desktop, Grok Bot, oder OpenClaw – alle capable Streamable HTTP MCP:
https://<your-domain>/mcpMCP = Streamable HTTP transport (not legacy SSE) unterstützen. When the client first connect, through Secure. Der OAuth-Flow Chan über Access Managed OAuth – that is your human-in-the-loop-Approval.
Lokale Entwicklung
npm run devMCP steht unter http://localhost:8787/mcp oben, ohne Access-Prüfung.
Tool http-fetch
{
"url": "/api/example",
"method": "GET"
}url: absolute URL oder Pfad zur Originmethod:GET(Standard) oderPOSTheaders: optional extra header (überschreiben bei Konflik die globaleDEFAULT_HEADERS)body: optionaler POST-body
Die DEFAULT_HEADERS (secret) werden zuerst angewendet, Tool-headers überschreiben sie. Access-JWT-Headers werden immer zuletzt gesetzt.
Return ein JSON mit status, headers, body and truncated (Flag).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to dynamically discover and invoke containerized tools that can be registered at runtime without redeployment. Built on Cloudflare Workers with scale-to-zero containers for secure, isolated tool execution.
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Cloudflare infrastructure including DNS records, cache purging, SSL settings, Workers, and analytics through the Cloudflare API. Eliminates dashboard context-switching by allowing natural language control of domain management and infrastructure operations.
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to create and manage short URLs via the MCP protocol, with OAuth authentication through Cloudflare Access.12Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables deploying a remote MCP server on Cloudflare Workers with OAuth, allowing MCP clients like Claude Desktop to call tools over the internet.
Related MCP Connectors
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
The bridge from K2 agents through Wrangler to your master AI - safe, approval-gated Cloudflare ops.
SaaS intelligence for AI agents. 5 unified tools cover 1,000+ services with 91-96% token savings.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jkpe/mcp-fetch-worker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server