gpt-action-mcp-demo
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gpt-action-mcp-demoWhat's the latest USD to EUR exchange rate?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A custom GPT action, rebuilt as a remote MCP server
The worked example for the DEV tutorial "Rebuild a custom GPT action as a remote MCP server". Code: https://github.com/brasspage/gpt-action-to-mcp (MIT).
openapi.json is a custom GPT action schema for the free Frankfurter exchange rate API (no key, commercial use allowed). The Worker turns each operation into one MCP tool and serves them over stateless Streamable HTTP on Cloudflare Workers, with the official MCP TypeScript SDK.
Live demo: https://gpt-action-mcp-demo.brasspage.workers.dev/mcp (60 requests a minute for each IP address).
Action operation | MCP tool |
|
|
|
|
|
|
Files
openapi.json: the action schema, as you would paste it into the GPT editor.src/tools.js: schema to tools (one per operation), argument checks, and the call to the API.src/index.js: the Worker. A fresh SDK server and transport for each POST to/mcp.wrangler.toml: Worker name, workers.dev URL, and the rate limit.tools.test.js: the mapping and the argument checks, with a fake fetch (no network).check.mjs: an SDK client that lists the tools and calls each one.output.txt: the real output ofcheck.mjsand the MCP Inspector against the live demo.
Related MCP server: codemode-workers
Run it
npm install
node --test --test-concurrency=1 tools.test.js
npx wrangler dev # local, on http://localhost:8787
node check.mjs http://localhost:8787/mcp
npx wrangler login && npx wrangler deploy
npx @modelcontextprotocol/inspector --cli https://<your worker>/mcp --method tools/listLimits
The mapper handles GET operations with path and query parameters. A POST body or a header parameter throws when the Worker loads; map those by hand.
No sign-in. For an API key, keep it as a Worker secret (
npx wrangler secret put API_KEY) and add it to the request incallTool, never to tool arguments. For per-user data, use OAuth.Checked with the SDK client and the MCP Inspector, not inside a plugin.
This server cannot be deployed
Maintenance
Related MCP Connectors
Frankfurter MCP — wraps Frankfurter API (api.frankfurter.dev)
Exchange MCP — wraps the Frankfurter currency exchange API (free, no auth)
Live and historical FX rates (ECB via Frankfurter) — paid per call (x402/credits), 2 tools
ExchangeRate MCP — wraps open.er-api.com (free, no auth)
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA Cloudflare Workers-based implementation of Model Context Protocol (MCP) server that enables AI models like Claude to access custom tools without requiring authentication.-
- AlicenseNot gradedqualityDmaintenanceExpose any API to an LLM agent as two sandboxed MCP tools (search + execute) on Cloudflare Workers.5 npm2MIT
- FlicenseNot gradedqualityDmaintenanceDeploys a stateless, authentication-free remote MCP server on Cloudflare Workers, enabling custom tool registration and seamless connection from clients like Cloudflare AI Playground or Claude Desktop via mcp-remote.-
- FlicenseNot gradedqualityCmaintenanceA stateless remote MCP server deployed on Cloudflare Workers without authentication, implementing the MCP 2026-07-28 specification and supporting custom tools. Can be connected to Cloudflare AI Playground and local MCP clients like Claude Desktop via mcp-remote proxy.-