The runtime-agnostic framework for production MCP servers

Define tools, resources, and prompts once. Run on Bun or Node; adapt to Cloudflare or Vercel. Host on Railway, Cloud Run, Fly, and more.

index.ts
01import { Redop } from "@redopjs/redop";
02import { z } from "zod";
03 
04const app = new Redop({
05 serverInfo: {
06 name: "docs-server",
07 title: "Docs Server",
08 version: "0.1.0",
09 description: "Search docs and return answers.",
10 },
11})
12 .tool("search_docs", {
13 description: "Search internal docs",
14 inputSchema: z.object({
15 query: z.string().min(1),
16 }),
17 handler: ({ input }) => ({
18 query: input.query,
19 results: [],
20 }),
21 });
22 
23app.listen(3000);

Runtime agnostic

One app definition for Bun, Node, Cloudflare, and Vercel — host on Railway, Cloud Run, Fly, and more.

Typed tools

Define tools with Zod, Standard Schema, TypeBox, or plain JSON Schema and keep inference.

Middleware and plugins

Compose auth, rate limits, logging, and custom plugins without bolting on a second framework.

Lifecycle hooks

Use before, after, and afterResponse hooks for analytics and best-effort work after the reply.

Transports that fit

HTTP and stdio from one API, with MCP 2026-07-28 support for scalable deployments.

First-class local DX

Start local in seconds with create-redop-app, then pick a deploy preset when you are ready.

One MCP surface. Many runtimes.

Same tools, resources, and prompts. Swap only the last lines for Bun, Node, Cloudflare, or Vercel — then deploy to Railway, Cloud Run, Fly, Workers, or Vercel Functions.