Skip to main content
Introducing TSK-1Introducing TSK-1·Taskade's intelligence layer.
taskade
PricingHelpDashboard →Dashboard →
PricingLoginSign up for free →Sign up for free →
Dashboard →Dashboard →
Sign up →Sign up →
Loved by 1M+ users·Hosting 150,000+ apps·Deploying 500K+ AI agents·Running 1M+ automations·Backed by Y Combinator·Powered by TSK-1
TaskadeAppsTSK-1BuilderPricingFeaturesContact usIntegrationsMCP ServerPressAbout
ConnectProductivityVideosReviewsFAQ
LearnGenesisProjectsAI Agents
AutomationConnectorsAccount & BillingImport & ExportVideo TutorialsSearch Articles
DocsGetting StartedREST APIAction API
MCP ServersGuides & SDKModels
Community
FeaturedQuick AppsToolsDashboardsWebsites
WorkflowsProjectsFormsCreators
DownloadsMobile appsDesktop appsAndroidiOSMacWindows
ChromeFirefoxEdge
Compare
vs Cursorvs Boltvs Lovablevs V0vs Windsurf
vs Replitvs Emergentvs Devinvs Claude Codevs ChatGPTvs Claudevs Perplexityvs GitHub Copilotvs Figma AIvs Notionvs ClickUpvs Asanavs Mondayvs Trellovs Jiravs Linearvs Todoistvs Evernotevs Obsidianvs Airtablevs Basecampvs Mirovs Slackvs Bubblevs Retoolvs Webflowvs Framervs Softrvs Glidevs FlutterFlowvs Base44vs Adalovs Durablevs Gammavs Squarespacevs WordPressvs UI Bakeryvs Zapiervs Makevs n8nvs Jaspervs Copy.aivs Writervs Rytrvs Manusvs Crewvs Lindyvs Relevance AIvs Wrikevs Smartsheetvs Monday Magicvs Codavs TickTickvs Any.dovs Thingsvs OmniFocusvs MeisterTaskvs Teamworkvs Workfrontvs Bitrix24vs Process Streetvs Toggl Planvs Motionvs Momentumvs Habiticavs Zenkitvs Google Docsvs Google Keepvs Google Tasksvs Microsoft Teamsvs Dropbox Papervs Quipvs Roam Researchvs Logseqvs Memvs WorkFlowyvs Dynalistvs XMindvs Whimsicalvs Zoomvs Remember The Milkvs Wunderlist
Taskade AIVideo GuideAI App BuilderVibe CodingAgent BuilderDashboard Builder
CRM BuilderWebsite BuilderForm BuilderWorkflow AutomationWorkflow BuilderBusiness-in-a-BoxAI for MarketingAI for Developers
AI Agents
FeaturedProject ManagementOperations IntelligenceProductivityMarketing
TranslatorContentWorkflowResearchPersonalSalesSocial MediaTo-Do ListCRMTask AutomationCoachingCreativityTask ManagementBrandingFinanceLearning and DevelopmentBusinessCommunity ManagementMeetingsAnalyticsDigital AdvertisingContent CurationKnowledge ManagementProduct DevelopmentPublic RelationsProgrammingHuman ResourcesE-CommerceEducationLegalEmailSEODeveloperVideo ProductionDesignFlowchartDataPromptNonprofitAssistantsTeamsCustomer ServiceTrainingTravel PlanningUML DiagramER DiagramMath TutorLanguage LearningCode ReviewerLogo DesignerUI WireframeFitness CoachLead EnrichmentFounder OSSales DevelopmentBookkeepingRecruitingWebsite MonitoringField ServiceLicensingAll Categories
Automations
FeaturedAI Agent AutomationAI WorkflowsLogic AutomationsTrigger Automations
Agentic Process AutomationAction AutomationsAI Models in WorkflowsAgentic AutomationMulti-Agent AutomationBusiness-in-a-BoxOperations IntelligenceInvestor OperationsEducation & LearningHealthcare & ClinicsReal EstateStripeSalesHR & People OpsField Service & DispatchRenewals & LicensesE-commerceContentMarketingEmailCustomer SupportHubSpotProject ManagementAgentic WorkflowsAppointment SchedulingCalendarReportsSlackWebsiteFormTaskWeb ScrapingWeb SearchChatGPTText to ActionYoutubeLinkedInTwitterGitHubDiscordMicrosoft TeamsWebflowIndustry News & RSS FeedsGoogle WorkspaceManufacturing & OperationsAI Agent TeamsNotion AutomationsProposalBookkeeping & ExpensesClient OnboardingGoogle SheetsGoogle DriveGoogle CalendarGoogle FormsShopifyAsanaAirtableTrelloTodoistMailchimpClickUpGoogle DocsGmailGoogle TasksJiraLinearMicrosoft OutlookTelegramCalendlyTypeformSalesforceMonday.comTwilioWhatsApp BusinessWordPressZoomHTTP and WebhooksMCP AutomationFacebook PagesRedditApolloAll Categories
Wiki
Taskade GenesisAI AgentsAutomation
ProjectsLiving DNAAutonomous Workspaces, Agents & AppsQuantum AI & Taskade Genesis QuantumFoundations: The Theory Under Modern AIPlatformAI InfrastructureIntegrationsProductivityMethodsProject ManagementAgileScrumAI ConceptsCommunityTerminologyFeatures
Templates
FeaturedChatGPTOperations IntelligenceTablePersonal
Project ManagementSalesFlowchartTask ManagementEngineeringEducationDesignTo-Do ListMarketingMind MapGantt ChartOrganizationalPlanningMeetingsTeam ManagementStrategyGamingProductionProduct ManagementStartupRemote WorkY CombinatorRoadmapCustomer ServiceLegalEmailBudgetsContentConsultingE-CommerceStandard Operating Procedure (SOP)Human ResourcesProgrammingMaintenanceCoachingSocial MediaHow-TosResearchMusicTrip PlanningCRMClient OnboardingEmployee OnboardingSOPBug TrackerRecruitment TrackerFormSales PipelineContent CalendarMarketing PlanProduct RoadmapBusiness PlanSWOT Analysis30-60-90 Day PlanInterviewNotion AlternativeKPIStrategic PlanMeeting AgendaInvoiceRisk RegisterIT Asset ManagementKanban BoardChange ManagementCommunication PlanRFPScope of WorkStatement of WorkHelpdeskKnowledge BaseCreative BriefGoal SettingExecutive SummaryGap AnalysisBooking SystemEvent ManagementPortfolio TrackerCustomer Onboarding PortalsClient PortalAgency OperationsFinance TrackingAll Categories
Generators
AI SoftwareNo-Code AI AppAI AppAI WebsiteAI Dashboard
AI FinanceAI Operations IntelligenceAI FormAI AgentAI Client Portal BuilderAI WorkspaceAI ProductivityAI To-Do ListAI WorkflowsAI EducationAI Mind MapsAI FlowchartAI Scrum Project ManagementAI Agile Project ManagementAI MarketingAI Project ManagementAI Social Media ManagementAI BloggingAI Agency WorkflowsAI ContentAI Software DevelopmentAI MeetingAI PersonasAI OutlineAI SalesAI ProgrammingAI DesignAI FreelancingAI ResumeAI Human ResourceAI SOPAI E-CommerceAI EmailAI Public RelationsAI InfluencersAI Content CreatorsAI Customer ServiceAI BusinessAI PromptsAI Tool BuilderAI SEOAI Gantt ChartAI CalendarsAI BoardAI TableAI ResearchAI LegalAI ProposalAI Video ProductionAI Health and WellnessAI WritingAI PublishingAI NonprofitAI DataAI Event PlanningAI Game DevelopmentAI Project Management AgentAI Productivity AgentAI Marketing AgentAI Personal AgentAI Business and Work AgentAI Education and Learning AgentAI Task Management AgentAI Customer Relations AgentAI Programming AgentAI SchemaAI Business PlanAI Pitch DeckAI InvoiceAI Lesson PlanAI Social Media CalendarAI API DocumentationAI Database SchemaAI Marketing PlanAI Sales Pipeline GeneratorAI Course BuilderInternal ToolsBooking SystemReal Estate CRMInventory ManagementAI CRM BuilderAI TimesheetAI DispatchAI NewsletterAI Clinic OperationsAI Directory BuilderAll Categories
Converters
AI Featured ConvertersAI PDF ConvertersAI CSV ConvertersAI Markdown ConvertersAI Prompt to App Converters
AI Data to Dashboard ConvertersAI Workflow to App ConvertersAI Idea to App ConvertersAI Flowcharts ConvertersAI Mind Map ConvertersAI Text ConvertersAI Youtube ConvertersAI Knowledge ConvertersAI Spreadsheet ConvertersAI Email ConvertersAI Web Page ConvertersAI Video ConvertersAI Coding ConvertersAI Task ConvertersAI Kanban Board ConvertersAI Notes ConvertersAI Education ConvertersAI Language TranslatorsAI Business → Backend App ConvertersAI File → App ConvertersAI SOP → Workflow App ConvertersAI Portal → App ConvertersAI Form → App ConvertersAI Schedule → Booking App ConvertersAI Metrics → Dashboard ConvertersAI Game → Playable App ConvertersAI Catalog → Directory App ConvertersAI Creative → Studio App ConvertersAI Agent → Agent App ConvertersAI Audio ConvertersAI DOCX ConvertersAI EPUB ConvertersAI Image ConvertersAI Resume & Career ConvertersAI Presentation ConvertersAI PDF to Spreadsheet ConvertersAI PDF to Database ConvertersAI PDF to Quiz ConvertersAI Image to Notes ConvertersAI Audio to Notes ConvertersAI Email to Tasks ConvertersAI CSV to Dashboard ConvertersAI YouTube to Flashcards ConvertersURL to NotesVideo → SummaryAI Receipts to Expense Tracker ConvertersAI Docs to Knowledge Base ConvertersAI Form to Client Portal ConvertersSpreadsheet to CRMAll Categories
Prompts
Client PortalsDocument IntakeField Service
Operations IntelligenceCRMAdvertisingDesignInvoicing and PaymentsSocial MediaQuotes and EstimatesCalculatorsCodingBooking and SchedulingConsultingCustomer SupportComplianceTime TrackingRetail OperationsSaaS and SubscriptionsInsuranceGovernance and OversightNonprofitPatient IntakeBlog WritingBrandingPersonal FinanceHuman ResourcesPublic RelationsTeam CollaborationProduct ManagementSupportAgencyReal EstateMarketingResearchSalesCopywritingContentProject ManagementWebsite CreationStrategyE-commerceEngineeringSEOEducationEmail MarketingUX/UIProductivityInfluencer MarketingAnalyticsEntrepreneurshipLegalVibe CodingRecruitingAll Categories
Blog
Introducing Taskade TSK-1: The System Kernel Behind Every App (2026)Replay Simulators Explained: How AI Agents Learn From Runs They Already Paid For (2026)Image to Prompt Generators 2026: 10 Tools, One Real Photo Test
The Product We Didn't Know We Were Building: How Taskade Became Taskade Genesis (2026)The Agentic AI Glossary (2026): 200+ AI Agent, LLM, and Brain Terms ExplainedAI Sycophancy Explained: Why Chatbots Agree With You, the Science Behind It, and How to Stop It (2026)When Was Claude Released? Every Claude Release Date, 2023 to 2026Structure Beats Instruction: Why AI Agent Prompt Rules Fail (2026)AI Subagents vs Agent Teams: When to Use Each (2026)Always-On AI Agents: Dots, Muse, Grok Bot Explained (2026)Claude Models Explained: Opus vs Sonnet vs Haiku, Every Version to Sonnet 5.5 (2026)Best AI Game Generators 2026: 21 Tools Sorted by What They Actually MakeAI Cost per Task (2026): What AI Work Really Costs to RunA Year of AI Agent Memory Experiments: Four Negative Results (2026)What Is GPT? GPT vs LLM vs ChatGPT, and Why Models Come in Tiers (2026)Clients, Projects, Teams: Your Workspace, Now an App (September 2026)Agent Handoff Explained: The Narrow Channel Between AI Agents (2026)The Complete Connectome Explained: What a Finished Brain Map Tells Us About AI Agents (2026)RL Environments Explained: How AI Labs Now Train Models on Real Work (2026)Run Your Whole Business in One App with Taskade Genesis (June 2026)
AIAutomationProductivityProject ManagementRemote WorkStartupsKnowledge ManagementCollaborative WorkUpdates
Changelog
A New Model for TSK-Auto & Workspace Overview (Oct 2, 2026)Agent Mode in the Model Menu & App Shortcuts (Oct 1, 2026)Your Apps Up Front & A New Button in the Header (Oct 1, 2026)
Require Sign-In for Your App & Invite-Only Sign-Up (Sep 30, 2026)Board Column Width & Most Used Automation Steps (Sep 30, 2026)Sign-In Only When You Ask & Live Agent Teams (Sep 29, 2026)Apps Start as Drafts & Easier App Branding (Sep 29, 2026)
Wiki
Taskade GenesisAI AgentsAutomation
ProjectsLiving DNAAutonomous Workspaces, Agents & AppsQuantum AI & Taskade Genesis QuantumFoundations: The Theory Under Modern AIPlatformAI InfrastructureIntegrationsProductivityMethodsProject ManagementAgileScrumAI ConceptsCommunityTerminologyFeatures
Prompts
Client PortalsDocument IntakeField Service
Operations IntelligenceCRMAdvertisingDesignInvoicing and PaymentsSocial MediaQuotes and EstimatesCalculatorsCodingBooking and SchedulingConsultingCustomer SupportComplianceTime TrackingRetail OperationsSaaS and SubscriptionsInsuranceGovernance and OversightNonprofitPatient IntakeBlog WritingBrandingPersonal FinanceHuman ResourcesPublic RelationsTeam CollaborationProduct ManagementSupportAgencyReal EstateMarketingResearchSalesCopywritingContentProject ManagementWebsite CreationStrategyE-commerceEngineeringSEOEducationEmail MarketingUX/UIProductivityInfluencer MarketingAnalyticsEntrepreneurshipLegalVibe CodingRecruitingAll Categories
© 2026 Taskade
PrivacyTermsSecurity
Made withTaskade AIforBuilders
BlogAITurn Any REST API into MCP…

Turn Any REST API into MCP Tools in 5 Minutes

Auto-generate type-safe MCP tools from any OpenAPI 3.0 spec. One command, zero boilerplate. Connect your REST API to Claude, Cursor, Windsurf, and any MCP client. Open source.

Turn Any REST API into MCP Tools in 5 Minutes — @taskade/mcp-openapi-codegen
February 14, 2026Updated September 29, 202615 min readJohn XieAI·#mcp#openapi#codegen
On this page (25)
What Is MCP?The Problem: Manual MCP Tool CreationThe Solution: @taskade/mcp-openapi-codegenStep-by-Step TutorialStep 1: InstallStep 2: Create Your Codegen ScriptStep 3: Run the GeneratorStep 4: Create Your MCP ServerStep 5: Connect to Claude DesktopStep 6: Test ItAdvanced FeaturesSelective Tool Exposure (Allowlists)Response NormalizersCustom AuthenticationMonorepo SupportReal-World: How Taskade Uses This in ProductionCompetitive Landscape: OpenAPI-to-MCP Tools in 2026Production HardeningSecurityError HandlingMonitoringWhat's Next: MCP Ecosystem in 2026Quick Start ChecklistFrequently Asked QuestionsRelated Reading

Your REST API has 200 endpoints. Your AI agent can call exactly zero of them.

That is the gap MCP was built to close. The Model Context Protocol gives AI models a universal interface for calling external tools — like USB-C for software. But turning your API into MCP tools means writing a tool definition for every single endpoint: input schemas, output parsing, error handling, authentication, and description text that an LLM can actually understand.

For a 50-endpoint API, that is 1,500+ lines of hand-written boilerplate. For a 200-endpoint API, it is a full-time job.

@taskade/mcp-openapi-codegen eliminates that job entirely. Point it at any OpenAPI 3.0 spec — a URL or a local file — and it generates the complete set of type-safe MCP tools in seconds. One command. Zero hand-written definitions. The generated TypeScript is human-readable, Prettier-formatted, and ready to commit.

This is how Taskade auto-generates its MCP tools from a single spec. Zero manual maintenance. When the API changes, the tools update automatically.

This guide walks through the full process — from installation to production deployment — and compares every major approach to OpenAPI-to-MCP conversion in 2026.

Developer building MCP tools


What Is MCP?

The Model Context Protocol is an open standard introduced by Anthropic in November 2024. It defines how AI models discover and call external tools through a structured JSON-RPC interface.

Think of it this way: before MCP, every AI integration was a custom adapter. Connecting Claude to your database meant writing one integration. Connecting it to your CRM meant writing another. Each tool had its own schema, its own error format, its own authentication flow. The result was a fragmented ecosystem where AI agents could not interoperate with each other's tools.

MCP fixes this with a single protocol:

┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   MCP: THE UNIVERSAL TOOL PROTOCOL                          │
│                                                             │
│   ┌──────────┐     ┌──────────────┐     ┌───────────────┐   │
│   │  Claude   │────▶│  MCP Server  │────▶│  Your API     │   │
│   │  Cursor   │◀────│  (Tools)     │◀────│  (REST/gRPC)  │   │
│   │  Windsurf │     └──────────────┘     └───────────────┘   │
│   │  VS Code  │                                             │
│   └──────────┘                                              │
│                                                             │
│   One protocol. Any client. Any server. Any tool.           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

The adoption numbers speak for themselves:

  • 97M+ MCP SDK downloads per month
  • 10,000+ MCP servers in the ecosystem
  • Backed by Anthropic, OpenAI, Google, Microsoft
  • Supported in Claude Desktop, Cursor, Windsurf, VS Code, Continue.dev, n8n

MCP is not a proposal. It is the standard. And if your API does not have an MCP server, your API is invisible to the fastest-growing class of software users: AI agents.


The Problem: Manual MCP Tool Creation

Here is what a single hand-written MCP tool definition looks like:

Typescript
server.tool(
  "createProject",
  "Create a new project in a workspace",
  {
    workspaceId: z.string().describe("The workspace ID"),
    name: z.string().describe("Project name"),
    description: z.string().optional().describe("Project description"),
    color: z.string().optional().describe("Color hex code"),
    templateId: z.string().optional().describe("Template ID to clone"),
  },
  async ({ workspaceId, name, description, color, templateId }) => {
    const response = await fetch(
      `https://api.example.com/workspaces/${workspaceId}/projects`,
      {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${API_KEY}`,
        },
        body: JSON.stringify({ name, description, color, templateId }),
      }
    );
    const data = await response.json();
    return { content: [{ type: "text", text: JSON.stringify(data) }] };
  }
);

That is 28 lines for a single endpoint. A typical SaaS API has 50-200 endpoints.

Endpoints Lines of Boilerplate Time to Write Time to Maintain
10 ~280 2-3 hours 1 hour/month
50 ~1,400 1-2 days 4 hours/month
200 ~5,600 1-2 weeks 2 days/month

And the boilerplate is the easy part. The hard part is keeping tool descriptions accurate enough for an LLM to use correctly, handling every authentication flow, normalizing complex response types, and updating everything when your API spec changes.

This is a code generation problem. You already have the API specification. The tool definitions should be derived automatically.

A word of caution: auto-generating MCP tools from an OpenAPI spec is not the same as blindly exposing every endpoint. Jeremiah Lowin, creator of FastMCP, argues that the biggest MCP anti-pattern is "REST-brain" — mirroring CRUD operations instead of designing for agent outcomes. Agent performance degrades above approximately 50 tools, nested parameter schemas confuse models, and raw API responses waste tokens. The right approach is codegen combined with curation: generate the tool definitions automatically, then use allowlists and response normalizers to expose only the tools agents actually need, with flat arguments and concise responses.


The Solution: @taskade/mcp-openapi-codegen

┌───────────────────────────────────────────────────────────────┐
│                                                               │
│   THE CODEGEN PIPELINE                                        │
│                                                               │
│   ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐  │
│   │ OpenAPI  │──▶│  Parse   │──▶│ Generate │──▶│  .ts     │  │
│   │ 3.0 Spec │   │ + Deref  │   │ Zod +    │   │  Output  │  │
│   │ (YAML/   │   │ + Flat   │   │ Tool     │   │ (commit- │  │
│   │  JSON)   │   │          │   │ Defs     │   │  table)  │  │
│   └──────────┘   └──────────┘   └──────────┘   └──────────┘  │
│                                                               │
│   Input:   Your existing API spec                             │
│   Output:  Type-safe MCP tools (TypeScript + Zod)             │
│   Time:    < 10 seconds                                       │
│                                                               │
└───────────────────────────────────────────────────────────────┘

@taskade/mcp-openapi-codegen reads your OpenAPI 3.0 specification, resolves $ref references, flattens nested schemas into self-contained $defs, and generates a complete TypeScript file with:

  • Zod schemas for every input parameter (type-safe validation)
  • Tool definitions with LLM-friendly descriptions derived from your spec
  • Path parameter handling (e.g., /projects/{projectId})
  • Query parameter handling with correct types and defaults
  • Request body parsing for POST/PUT/PATCH operations
  • Prettier formatting — the output is clean, readable, and ready to commit

The key difference from runtime proxies (which translate API calls on the fly) is that codegen produces actual source code you own. You can inspect every generated tool, customize descriptions, and version-control changes alongside your codebase.


Step-by-Step Tutorial

Step 1: Install

Bash
npm install @taskade/mcp-openapi-codegen
# or
yarn add @taskade/mcp-openapi-codegen

Step 2: Create Your Codegen Script

Create a file called generate-mcp-tools.ts:

Typescript
import { generateMcpTools } from "@taskade/mcp-openapi-codegen";
import * as path from "path";

async function main() {
await generateMcpTools({
// Point to your OpenAPI spec (URL or local file)
specPath: "https://api.example.com/openapi.yaml",

// Where to write the generated tools
outputPath: path.resolve(__dirname, &quot;tools.generated.ts&quot;),

});

console.log("MCP tools generated successfully!");
}

main();

Step 3: Run the Generator

Bash
npx tsx generate-mcp-tools.ts

The generator reads your spec, resolves all references, and writes a complete tools.generated.ts file. Every endpoint in your spec becomes a type-safe MCP tool definition.

Step 4: Create Your MCP Server

Typescript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { registerTools } from "./tools.generated.js";

const server = new McpServer({
name: "my-api-mcp-server",
version: "1.0.0",
});

// Register all generated tools with a custom fetch function
registerTools(server, {
baseUrl: "https://api.example.com",
fetchFn: async (url, init) => {
return fetch(url, {
...init,
headers: {
...init?.headers,
Authorization: Bearer ${process.env.API_KEY},
},
});
},
});

// Start the server
const transport = new StdioServerTransport();
server.connect(transport);

Step 5: Connect to Claude Desktop

Add this to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

Json
{
  "mcpServers": {
    "my-api": {
      "command": "npx",
      "args": ["tsx", "/path/to/your/server.ts"],
      "env": {
        "API_KEY": "your-api-key-here"
      }
    }
  }
}

Step 6: Test It

Restart Claude Desktop. Open a new conversation and ask:

"List all my projects and create a new one called Q1 Planning."

Claude will discover your MCP tools, call the correct endpoints, parse the responses, and execute multi-step workflows — all without you writing a single tool definition by hand.

The same configuration works with Cursor, Windsurf, Continue.dev, and any other MCP-compatible client.


Advanced Features

Selective Tool Exposure (Allowlists)

A 200-endpoint API should not expose 200 tools to an LLM. Context window overflow causes tool confusion and degraded performance. Research shows that selective curation dramatically improves agent accuracy.

Filter endpoints with an allowlist:

Typescript
await generateMcpTools({
  specPath: "https://api.example.com/openapi.yaml",
  outputPath: "./tools.generated.ts",
  // Only expose these operations
  allowOperations: [
    "listProjects",
    "createProject",
    "getProjectById",
    "listTasks",
    "createTask",
    "updateTask",
  ],
});

Or use a predicate function for dynamic filtering:

Typescript
await generateMcpTools({
  specPath: "https://api.example.com/openapi.yaml",
  outputPath: "./tools.generated.ts",
  allowOperations: (operationId, method, path) => {
    // Exclude all DELETE operations
    if (method === "delete") return false;
    // Exclude admin-only endpoints
    if (path.startsWith("/admin")) return false;
    return true;
  },
});

Response Normalizers

This is the feature that makes @taskade/mcp-openapi-codegen unique. Response normalizers let you inject contextual information into API responses before the LLM sees them. This transforms raw JSON data into actionable intelligence.

Typescript
registerTools(server, {
  baseUrl: "https://api.example.com",
  responseNormalizers: {
    listProjects: (data) => {
      // Add clickable URLs so Claude can link to real resources
      return data.items.map((project) => ({
        ...project,
        url: `https://app.example.com/projects/${project.id}`,
        hint: "You can open this project in the browser.",
      }));
    },
  },
});

Without normalizers, Claude returns: "Project ID: abc123". With normalizers, Claude returns: "Here's your project: [Q1 Planning](https://www.taskade.com/d/abc123)". The difference is the gap between information and action.

Custom Authentication

Inject any auth strategy — API keys, OAuth2 tokens, session cookies, or custom headers:

Typescript
registerTools(server, {
  baseUrl: "https://api.example.com",
  fetchFn: async (url, init) => {
    const token = await getOAuth2Token(); // Your auth logic
    return fetch(url, {
      ...init,
      headers: {
        ...init?.headers,
        Authorization: `Bearer ${token}`,
        "X-Custom-Header": "value",
      },
    });
  },
});

Monorepo Support

For large projects, split the codegen and server into separate packages. Taskade's own MCP repository uses this pattern:

packages/
├── openapi-codegen/    # The generator library (npm: @taskade/mcp-openapi-codegen)
├── taskade-mcp-tools/  # Generated tools for Taskade's API
└── mcp-server/         # The MCP server (npm: @taskade/mcp-server)

Each package has a clear responsibility. When the API spec changes, you re-run codegen in taskade-mcp-tools/ and the server package picks up the new tools automatically.


Real-World: How Taskade Uses This in Production

Taskade does not just publish @taskade/mcp-openapi-codegen. We use it every day to power our own MCP server, @taskade/mcp-server, which exposes its workspace tools to Claude, Cursor, and every MCP-compatible client.

Here is the actual pipeline:

┌───────────────────────────────────────────────────────────────┐
│                                                               │
│   TASKADE MCP PIPELINE (PRODUCTION)                           │
│                                                               │
│   1. Fetch latest spec                                        │
│      $ yarn fetch:openapi                                     │
│      → Downloads taskade.com/api/documentation/yaml           │
│                                                               │
│   2. Generate tools                                           │
│      $ yarn generate:taskade-mcp-tools                        │
│      → Parses spec → allowlist filter → codegen               │
│      → Output: tools.generated.ts (all workspace tools)       │
│                                                               │
│   3. Commit + publish                                         │
│      → tools.generated.ts → @taskade/mcp-server on npm        │
│      → Users install: npx @taskade/mcp-server                 │
│                                                               │
│   API changes? Re-run steps 1-3. Zero manual updates.         │
│                                                               │
└───────────────────────────────────────────────────────────────┘

What the tools cover:

Domain Examples
Workspaces List, navigate, create projects
Projects CRUD, copy, share, complete, get blocks/tasks
Tasks Full lifecycle: assignees, dates, notes, custom fields
AI Agents Generate, create, publish, manage knowledge, conversations
Templates List and instantiate
Media List, get, delete

Response normalizers in action: When Claude lists your projects, the normalizer injects direct URLs so Claude can say "Here is your project: Q1 Planning" instead of dumping raw JSON. When an agent is created, the normalizer adds the public embed URL. Every response becomes actionable.

The result: Taskade users can manage their entire workspace through natural language in Claude Desktop or Cursor — creating projects, assigning tasks, training agents, and triggering automations — all through MCP tools that were auto-generated from a single OpenAPI spec.

See Taskade AI Agents in action — the same agents these MCP tools connect to.

Competitive Landscape: OpenAPI-to-MCP Tools in 2026

The MCP ecosystem is growing fast. Here is how every major approach to OpenAPI-to-MCP conversion compares:

Tool Approach Language Auth Selective Exposure Response Customization Production Use
@taskade/mcp-openapi-codegen Codegen (source output) TypeScript Custom fetch Allowlist + predicate Response normalizers Powers the Taskade MCP server
openapi-mcp-generator Codegen TypeScript Basic x-mcp extension flags No Community
openapi-mcp-server (AWS) Runtime proxy TypeScript API key, Bearer allowedOperations array No AWS-backed
FastMCP Runtime (Python) Python Built-in Route-level Custom response types Python ecosystem
Speakeasy Managed codegen Multi-lang OAuth2 + custom x-speakeasy-mcp Managed transforms Enterprise
Stainless SDK-integrated TypeScript Full OAuth2 SDK-level Sandboxed execution Enterprise

When to use each:

  • @taskade/mcp-openapi-codegen — You want inspectable, committable TypeScript with full customization. You have a Node.js codebase and want zero vendor lock-in. You need response normalizers.
  • openapi-mcp-generator — Quick start for simple APIs. Good community momentum (500+ stars).
  • AWS openapi-mcp-server — You trust AWS, need dynamic tool creation at runtime without a build step.
  • FastMCP — You are in the Python ecosystem and want a Pythonic developer experience.
  • Speakeasy / Stainless — Enterprise teams with complex APIs, budget for managed services, and need OAuth2 flows handled automatically.

Production Hardening

Generating tools is step one. Running them safely in production requires attention to security, reliability, and observability.

Security

┌──────────────────────────────────────────────────────┐
│                                                      │
│   MCP SECURITY CHECKLIST                             │
│                                                      │
│   ☐ Scope tokens to minimum required permissions     │
│   ☐ Use allowlists — never expose all endpoints      │
│   ☐ Validate inputs with Zod schemas (built-in)      │
│   ☐ Sanitize responses to prevent data leakage       │
│   ☐ Rate limit tool calls at the server level        │
│   ☐ Log every tool invocation for audit trails       │
│   ☐ Never embed secrets in generated code            │
│   ☐ Use environment variables for all credentials    │
│                                                      │
└──────────────────────────────────────────────────────┘

MCP servers run with the privileges of the API tokens they hold. In January 2026, security researchers disclosed critical vulnerabilities in several popular MCP servers — including prompt injection paths and SSRF vectors. The lesson: treat your MCP server as a production service, not a toy.

The generated Zod schemas from @taskade/mcp-openapi-codegen provide input validation out of the box. But you should also: (1) scope your API tokens to the minimum required permissions, (2) use allowlists to limit which endpoints are exposed, and (3) sanitize any response data that could contain sensitive information.

Error Handling

Wrap your fetchFn with retry logic and structured error responses:

Typescript
fetchFn: async (url, init) => {
  const response = await fetch(url, { ...init, signal: AbortSignal.timeout(10000) });
  if (!response.ok) {
    const error = await response.text();
    throw new Error(`API error ${response.status}: ${error}`);
  }
  return response;
}

Monitoring

Log every tool call with structured metadata — operation name, latency, status code, and input parameters (minus sensitive values). This gives you observability into how AI agents use your API and which tools see the most traffic.


What's Next: MCP Ecosystem in 2026

The MCP ecosystem is evolving rapidly:

  • Streamable HTTP transport is replacing SSE as the preferred remote transport, enabling stateless MCP servers that scale horizontally.
  • The OpenAPI Initiative's Moonwalk SIG is working on making API specifications natively "agent-ready" — richer descriptions, semantic annotations, and tool-level metadata baked into the spec itself.
  • Remote MCP servers (hosted, authenticated, shared across clients) are becoming the deployment model for production use cases, replacing local stdio servers.
  • Agentic AI Foundation (under the Linux Foundation) now governs the MCP specification, ensuring vendor-neutral evolution.

The direction is clear: every API will need an MCP interface. The question is whether you write 5,600 lines of boilerplate by hand or let a codegen tool do it in 10 seconds.


Quick Start Checklist

┌──────────────────────────────────────────────────────┐
│                                                      │
│   GET STARTED IN 5 MINUTES                           │
│                                                      │
│   1. $ npm install @taskade/mcp-openapi-codegen      │
│   2. Point specPath at your OpenAPI spec              │
│   3. $ npx tsx generate-mcp-tools.ts                  │
│   4. Create MCP server with registerTools()           │
│   5. Add to Claude Desktop / Cursor config            │
│   6. Start talking to your API                        │
│                                                      │
│   GitHub: github.com/taskade/mcp                      │
│   npm:    @taskade/mcp-openapi-codegen                │
│                                                      │
└──────────────────────────────────────────────────────┘

Frequently Asked Questions

What is MCP and why does it matter for REST APIs?

MCP (Model Context Protocol) is an open standard that lets AI models call external tools through a structured interface. It was introduced by Anthropic and is now backed by OpenAI, Google, and Microsoft, with 97M+ SDK downloads per month. MCP matters because it gives AI agents like Claude, Cursor, and Windsurf a universal way to interact with any service. Without an MCP server, your API is invisible to the fastest-growing class of software users.

How is @taskade/mcp-openapi-codegen different from runtime proxies?

Runtime proxies (like openapi-mcp-server) translate API calls on the fly without generating source code. Codegen produces actual TypeScript files you can inspect, modify, test, and version-control. This means you see exactly what each tool does, you can customize descriptions for better LLM performance, and you can review changes in code review. Codegen also enables unique features like response normalizers that are impossible in a pure proxy architecture.

Can I use this with APIs I do not own?

Yes. Any publicly documented API with an OpenAPI 3.0+ specification works. Many popular services publish their specs: Stripe, GitHub, Twilio, and others. Point the codegen at their spec URL and you have MCP tools for their API.

What if my API does not have an OpenAPI spec?

You can write one. Tools like Swagger Editor make it straightforward to describe existing endpoints. Alternatively, several tools can auto-generate OpenAPI specs from existing code — including Express, FastAPI, NestJS, and Spring Boot annotations.

How does Taskade use this?

Taskade uses @taskade/mcp-openapi-codegen to auto-generate MCP tools from our public API spec. The generated tools power @taskade/mcp-server, which lets users manage their entire Taskade workspace (projects, tasks, AI agents, and automations) through Claude Desktop, Cursor, or any MCP client.


Related Reading

Taskade Developer Resources:

  • GitHub: taskade/mcp — Source code, examples, and documentation
  • npm: @taskade/mcp-openapi-codegen — The codegen package
  • npm: @taskade/mcp-server — Taskade's production MCP server
  • Taskade API Documentation — The API spec this codegen powers

MCP Ecosystem:

  • Model Context Protocol — Official Site
  • MCP Specification
  • awesome-mcp-servers — 30K+ star community directory

From the Taskade Blog:

  • How to Build Your First AI Agent in 60 Seconds — Getting started with AI agents
  • Best AI Agent Builders in 2026 — Comparison of agent platforms
  • How to Build AI Agents Faster — Speed up agent development
  • Best Vibe Coding Tools 2026 — Compare AI development tools
  • The Ultimate Guide to Taskade Genesis — Complete platform reference
  • What Is Vibe Coding? — The new era of building software with natural language

Explore Taskade:

  • AI Agent Builder — Create intelligent AI teammates with custom tools
  • AI App Builder — Build complete apps from one prompt
  • Automation Workflows — Connect 100+ integrations
  • Community Gallery — 150,000+ apps to clone

Taskade Genesis

0%

On this page

What Is MCP?The Problem: Manual MCP Tool CreationThe Solution: @taskade/mcp-openapi-codegenStep-by-Step TutorialStep 1: InstallStep 2: Create Your Codegen ScriptStep 3: Run the GeneratorStep 4: Create Your MCP ServerStep 5: Connect to Claude DesktopStep 6: Test ItAdvanced FeaturesSelective Tool Exposure (Allowlists)Response NormalizersCustom AuthenticationMonorepo SupportReal-World: How Taskade Uses This in ProductionCompetitive Landscape: OpenAPI-to-MCP Tools in 2026Production HardeningSecurityError HandlingMonitoringWhat's Next: MCP Ecosystem in 2026Quick Start ChecklistFrequently Asked QuestionsRelated Reading

Related Articles

How Taskade became Taskade Genesis: the 2019 AI workspace primitives (Projects, AI, Workflows, Workspace) evolving into Memory, Agents, Automations, and Apps, converging into Taskade Genesis and TSK-1
September 30, 2026AI

The Product We Didn't Know We Were Building: How Taskade Became Taskade Genesis (2026)

Taskade joined Y Combinator in 2019 as a collaborative workspace. We kept building projects, AI agents, automations, and...

Agentic AI glossary 2026: a fluorescence microscopy image of a dense network of cortical neurons, the biological network that gave AI words like neuron, attention, and memory
September 29, 2026AI

The Agentic AI Glossary (2026): 200+ AI Agent, LLM, and Brain Terms Explained

The agentic AI glossary for 2026: 200+ AI agent, LLM, security, and brain-science terms in 13 families, each with a plai...

A thumbs-up icon, the approval signal behind AI sycophancy, the habit of chatbots agreeing with everything you say
September 29, 2026AI

AI Sycophancy Explained: Why Chatbots Agree With You, the Science Behind It, and How to Stop It (2026)

Why AI chatbots agree with everything you say: the training cause, the cognitive science of confirmation, 2022-2026 rese...

Creating an AI agent team in Taskade by choosing agents such as a researcher, sales agent and project manager for group work, illustrating subagents vs agent teams
September 29, 2026AI

AI Subagents vs Agent Teams: When to Use Each (2026)

Subagents vs agent teams, defined. A read-shaped vs write-shaped test, a cost worksheet with the arithmetic, failure mod...

Always-on AI agents that keep working while you sleep: OpenAI dots, Meta Muse, Grok Bot and Gemini Spark compared
September 29, 2026AI

Always-On AI Agents: Dots, Muse, Grok Bot Explained (2026)

Always-on AI agents explained: how OpenAI dots, Meta Muse, Grok Bot, Gemini Spark and OpenClaw differ, what they cost, w...

Automation steps executing in sequence inside a Taskade workspace, illustrating how work passes from one step to the next
September 23, 2026AI

Agent Handoff Explained: The Narrow Channel Between AI Agents (2026)

Multi-agent systems fail at the seams, not inside the agents. What a handoff carries, the five ways it breaks, and how t...

View All Articles