Skip to main content
The EdgeFastMCP class provides edge runtime compatibility for FastMCP, enabling deployment to Cloudflare Workers, Deno Deploy, and other edge platforms. It uses only web-standard APIs (no Node.js dependencies).

Constructor

Create a new EdgeFastMCP server instance.
import { EdgeFastMCP } from "fastmcp/edge";

const server = new EdgeFastMCP({
  name: "my-edge-server",
  version: "1.0.0",
});
name
string
required
Server name identifier
version
string
required
Semantic version string (e.g., “1.0.0”)
description
string
Server description
logger
EdgeLogger
Custom logger instance (defaults to console)
mcpPath
string
default:"/mcp"
Base path for MCP endpoints

Methods

addTool()

Register a tool that can be called by the MCP client.
import { z } from "zod";

server.addTool({
  name: "get_time",
  description: "Get current time",
  parameters: z.object({
    timezone: z.string().optional(),
  }),
  execute: async ({ timezone }) => {
    return new Date().toLocaleString("en-US", { timeZone: timezone });
  },
});
tool
EdgeTool
required
Tool configuration object

addResource()

Register a static resource.
server.addResource({
  uri: "edge://config",
  name: "Configuration",
  description: "Edge server config",
  mimeType: "application/json",
  load: async () => ({
    text: JSON.stringify({ edge: true }),
  }),
});
resource
EdgeResource
required
Resource configuration object

addPrompt()

Register a prompt template.
server.addPrompt({
  name: "summarize",
  description: "Summarize text",
  arguments: [
    { name: "text", description: "Text to summarize", required: true },
  ],
  load: async ({ text }) => ({
    messages: [
      {
        role: "user",
        content: { type: "text", text: `Summarize: ${text}` },
      },
    ],
  }),
});
prompt
EdgePrompt
required
Prompt configuration object

fetch()

Handle incoming requests. This is the main entry point for edge runtimes.
// Cloudflare Workers
export default {
  async fetch(request: Request): Promise<Response> {
    return server.fetch(request);
  },
};

// Deno Deploy
Deno.serve((request) => server.fetch(request));

// Bun
Bun.serve({
  fetch: (request) => server.fetch(request),
  port: 8000,
});
request
Request
required
Web API Request object
response
Response
Web API Response object

getApp()

Get the underlying Hono app instance for adding custom routes.
const app = server.getApp();

app.get("/health", (c) => c.text("OK"));
app.post("/webhook", async (c) => {
  const data = await c.req.json();
  return c.json({ received: true });
});
app
Hono
Hono application instance

Differences from FastMCP

EdgeFastMCP is a simplified implementation optimized for edge environments:
  • No Node.js dependencies: Uses only web-standard APIs
  • Stateless: No session management or persistent connections
  • Simplified authentication: No built-in OAuth support
  • No stdio transport: Only HTTP-based protocols
  • Limited features: No resource templates, completions, or sampling

Deployment Examples

Cloudflare Workers

import { EdgeFastMCP } from "fastmcp/edge";
import { z } from "zod";

const server = new EdgeFastMCP({
  name: "cloudflare-mcp",
  version: "1.0.0",
});

server.addTool({
  name: "kv_get",
  description: "Get value from KV",
  parameters: z.object({ key: z.string() }),
  execute: async ({ key }, env) => {
    const value = await env.MY_KV.get(key);
    return value || "Not found";
  },
});

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    return server.fetch(request);
  },
};

Deno Deploy

import { EdgeFastMCP } from "npm:fastmcp/edge";

const server = new EdgeFastMCP({
  name: "deno-mcp",
  version: "1.0.0",
});

server.addTool({
  name: "env_get",
  description: "Get environment variable",
  execute: async ({ key }) => {
    return Deno.env.get(key) || "Not set";
  },
});

Deno.serve((request) => server.fetch(request));

Bun

import { EdgeFastMCP } from "fastmcp/edge";

const server = new EdgeFastMCP({
  name: "bun-mcp",
  version: "1.0.0",
});

server.addTool({
  name: "hash",
  description: "Hash a string",
  execute: async ({ text }) => {
    const hash = Bun.hash(text);
    return hash.toString();
  },
});

Bun.serve({
  fetch: (request) => server.fetch(request),
  port: 8000,
});