<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Storm</title>
    <description>The latest articles on DEV Community by Storm (@stormliveai).</description>
    <link>https://dev.to/stormliveai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4123195%2F7d2d07d9-ab38-463e-aec2-9c47db9bbf17.png</url>
      <title>DEV Community: Storm</title>
      <link>https://dev.to/stormliveai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stormliveai"/>
    <language>en</language>
    <item>
      <title>How to Turn Any OpenAPI Specification into an MCP Tool for Claude Desktop (In 60 Seconds)</title>
      <dc:creator>Storm</dc:creator>
      <pubDate>Sun, 13 Sep 2026 13:45:14 +0000</pubDate>
      <link>https://dev.to/stormliveai/how-to-turn-any-openapi-specification-into-an-mcp-tool-for-claude-desktop-in-60-seconds-2f07</link>
      <guid>https://dev.to/stormliveai/how-to-turn-any-openapi-specification-into-an-mcp-tool-for-claude-desktop-in-60-seconds-2f07</guid>
      <description>&lt;p&gt;The Model Context Protocol (MCP) has made it possible to connect Large Language Models directly to external environments. But if your team already has a REST API documented in OpenAPI v3 / Swagger, writing a custom FastMCP server just to test it in Claude Desktop feels like unnecessary boilerplate.&lt;/p&gt;

&lt;p&gt;In this guide, we'll look at how to convert any standard OpenAPI definition into a fully functional Claude Desktop tool in under 60 seconds without running a backend server.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture Problem
&lt;/h3&gt;

&lt;p&gt;OpenAPI describes HTTP endpoints, path parameters, and request bodies. Claude Desktop, on the other hand, speaks JSON-RPC 2.0 over standard input/output (&lt;code&gt;stdio&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;To bridge the two, you traditionally had to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a Python or TypeScript wrapper using the MCP SDK.&lt;/li&gt;
&lt;li&gt;Manually map each OpenAPI &lt;code&gt;operationId&lt;/code&gt; to an MCP tool declaration.&lt;/li&gt;
&lt;li&gt;Define JSON Schema objects for each argument.&lt;/li&gt;
&lt;li&gt;Manage child process execution in &lt;code&gt;claude_desktop_config.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Converting In-Browser with MCP Bridge
&lt;/h3&gt;

&lt;p&gt;Instead of writing this code manually, you can use the open-source client parser at &lt;a href="https://mcpbridge.org/convert/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=openapi_guide" rel="noopener noreferrer"&gt;MCP Bridge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Because the converter runs 100% in your browser using client-side JavaScript and WebAssembly, your API tokens and internal schemas never leave your computer.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Export your OpenAPI Spec
&lt;/h4&gt;

&lt;p&gt;Grab your raw OpenAPI JSON or YAML URL (e.g. from Swagger UI, FastAPI, or Postman).&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Generate the Config
&lt;/h4&gt;

&lt;p&gt;Paste the URL into &lt;a href="https://mcpbridge.org/convert/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=openapi_guide" rel="noopener noreferrer"&gt;mcpbridge.org/convert&lt;/a&gt; and select &lt;strong&gt;Claude Desktop&lt;/strong&gt; as your target client.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Add to Claude Desktop
&lt;/h4&gt;

&lt;p&gt;Open your configuration file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; &lt;code&gt;%APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add the generated snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"my-custom-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-openapi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"https://api.example.com/openapi.json"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_SECRET_TOKEN_HERE"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Desktop, and your API tools will appear under the hammer icon!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;For a directory of hand-verified native MCP servers and configuration guides, check out &lt;a href="https://mcpbridge.org/?utm_source=devto&amp;amp;utm_medium=article" rel="noopener noreferrer"&gt;MCP Bridge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
