<?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: Anton Kirilchuk</title>
    <description>The latest articles on DEV Community by Anton Kirilchuk (@antonkirilchuk).</description>
    <link>https://dev.to/antonkirilchuk</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%2F3993909%2F5ba1990e-302d-495e-adc8-d381c9375d76.jpg</url>
      <title>DEV Community: Anton Kirilchuk</title>
      <link>https://dev.to/antonkirilchuk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/antonkirilchuk"/>
    <language>en</language>
    <item>
      <title>How I stopped building Postman collections by hand (Claude + Postman MCP)</title>
      <dc:creator>Anton Kirilchuk</dc:creator>
      <pubDate>Sat, 20 Jun 2026 10:30:43 +0000</pubDate>
      <link>https://dev.to/antonkirilchuk/how-i-stopped-building-postman-collections-by-hand-claude-postman-mcp-41f9</link>
      <guid>https://dev.to/antonkirilchuk/how-i-stopped-building-postman-collections-by-hand-claude-postman-mcp-41f9</guid>
      <description>&lt;p&gt;If you test backend services, you know the &lt;br&gt;
 ritual. A new service shows up, you need to poke its endpoints, so you open Postman and start building a collection request by request. Method, URL, headers, auth, request body, fix the folder structure, name everything so future-you can read it. On a service with a few dozen endpoints, that's an hour or two gone before you send a single request.&lt;/p&gt;

&lt;p&gt;I haven't done that in months.&lt;/p&gt;

&lt;p&gt;Now I hand the API definition to Claude, and it builds the whole collection through the Postman MCP server in a few seconds - laid out as a step-by-step runbook, with values already filled in. I just hit Send and read the responses. This post is how I set it up and how I actually use it day to day.&lt;/p&gt;
&lt;h2&gt;
  
  
  The usual way, and why it's a waste
&lt;/h2&gt;

&lt;p&gt;The information about an API lives in different places depending on the team. Sometimes it's a clean Swagger / OpenAPI page. Sometimes it's a description in a Jira ticket. Sometimes a Confluence page, or just a message from the developer who wrote the endpoint. Wherever it lives, the manual move is the same: read it, then re-type each endpoint into Postman.&lt;/p&gt;

&lt;p&gt;It's not hard work. It's just slow, repetitive, and easy to get subtly wrong - a missing header here, a wrong content type there. And none of it is actually testing. It's setup that stands between you and the part of the job that matters.&lt;/p&gt;
&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;p&gt;Three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Postman account and an API key&lt;/li&gt;
&lt;li&gt;Claude (Claude Code or the desktop app) with the Postman MCP server connected&lt;/li&gt;
&lt;li&gt;The API definition - from wherever it lives&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  1. Get your Postman API key
&lt;/h3&gt;

&lt;p&gt;In Postman: &lt;strong&gt;Settings -&amp;gt; API keys -&amp;gt; Generate API Key&lt;/strong&gt;. Copy it somewhere safe - you'll pass it to the MCP server, not paste it into chats.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Connect the Postman MCP server to Claude
&lt;/h3&gt;

&lt;p&gt;MCP (Model Context Protocol) lets Claude talk directly to Postman instead of you copy-pasting back and forth. Add the server to your &lt;code&gt;.mcp.json&lt;/code&gt; (project root, or &lt;code&gt;~/.claude/mcp.json&lt;/code&gt; for global):&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;"postman"&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="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;"@postman/postman-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--full"&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;"POSTMAN_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;"${POSTMAN_API_KEY}"&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;Set &lt;code&gt;POSTMAN_API_KEY&lt;/code&gt; in your environment, restart Claude, and run &lt;code&gt;/mcp&lt;/code&gt; to confirm it connected. Now Claude can create and edit collections in your workspace on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Point it at the API
&lt;/h3&gt;

&lt;p&gt;If you have Swagger, even better - Spring services expose the full method library as OpenAPI at &lt;code&gt;/v3/api-docs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://your-service/v3/api-docs &lt;span class="nt"&gt;-o&lt;/span&gt; api.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the source doesn't have to be Swagger. Paste the Jira ticket text, the Confluence export, or the endpoint description straight into Claude. It pulls the endpoints out either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it actually works
&lt;/h2&gt;

&lt;p&gt;Here's the part I like. I don't just get a flat dump of requests - I ask Claude to build the collection as a &lt;strong&gt;runbook&lt;/strong&gt;, where the order of the requests is the order I run the test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;request names are steps: &lt;code&gt;1) create threshold&lt;/code&gt;, &lt;code&gt;2) get by id&lt;/code&gt;, &lt;code&gt;3) update&lt;/code&gt;, &lt;code&gt;4) delete and verify&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;top to bottom is the test sequence&lt;/li&gt;
&lt;li&gt;every value (host, ids, request bodies) is hardcoded right into the request - no &lt;code&gt;{{variables}}&lt;/code&gt; to fill in by hand&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then testing looks like this: I open the collection and press Send, top to bottom. When a request creates something and returns a new id, Claude reads it from the response and patches it into the next requests through the Postman API. I keep pressing Send.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick example
&lt;/h2&gt;

&lt;p&gt;Say I give Claude an endpoint spec like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/threshold - create a detection threshold for a resource
GET /api/threshold/{id} - read it back
PUT /api/threshold/{id} - update it
DELETE /api/threshold/{id}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I ask: &lt;em&gt;"Build a Postman collection in my workspace as a step-by-step runbook to create a threshold, read it, update it, and delete it. Hardcode the values, name each request as a numbered step."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A few seconds later there's a collection with four ordered requests, bodies filled in, auth set at the collection level. I run them in order. After step 1 returns the new threshold id, the GET/PUT/DELETE steps already point at it. I read each response and decide whether the service behaved correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this helps, and where it doesn't
&lt;/h2&gt;

&lt;p&gt;The setup work mostly disappears. The thinking doesn't, and that's the point.&lt;/p&gt;

&lt;p&gt;AI is good at: turning a spec into a structured collection, naming and ordering requests, filling in boilerplate, patching ids between steps.&lt;/p&gt;

&lt;p&gt;AI does &lt;strong&gt;not&lt;/strong&gt; do the actual QA: deciding which scenarios matter, what the edge cases are, whether a &lt;code&gt;201&lt;/code&gt; actually means the business logic is correct, reading logs to find why something failed. A green response is not a passing test - that judgment is still mine.&lt;/p&gt;

&lt;p&gt;So this isn't "AI tests for me". It's "AI clears the busywork so I spend my time on the part that needs a tester".&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;If you do REST API testing and haven't tried Claude + Postman MCP yet, it's worth half an hour to set up. The first time a collection you'd have spent an hour building shows up ready in seconds, it clicks.&lt;/p&gt;

&lt;p&gt;I wrote up my full setup, prompt templates, and honest notes on where AI breaks down here: &lt;a href="https://github.com/anton-kirilchuk/ai-assisted-qa-mcp" rel="noopener noreferrer"&gt;github.com/anton-kirilchuk/ai-assisted-qa-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I post more about backend QA and AI-augmented testing on &lt;a href="https://www.linkedin.com/in/anton-kirilchuk/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; - happy to compare notes.&lt;/p&gt;

&lt;p&gt;How much of your testing time still goes to setup before the real testing starts?&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>claude</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
