<?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: NickPury</title>
    <description>The latest articles on DEV Community by NickPury (@karonlabs).</description>
    <link>https://dev.to/karonlabs</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3871946%2F6f8c7199-220d-412a-bf8e-ffbbda707efc.jpg</url>
      <title>DEV Community: NickPury</title>
      <link>https://dev.to/karonlabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karonlabs"/>
    <language>en</language>
    <item>
      <title>I built MCP Sub-50ms fetches for protected websites</title>
      <dc:creator>NickPury</dc:creator>
      <pubDate>Fri, 10 Apr 2026 14:22:12 +0000</pubDate>
      <link>https://dev.to/karonlabs/i-built-mcp-sub-50ms-fetches-for-protected-websites-pgk</link>
      <guid>https://dev.to/karonlabs/i-built-mcp-sub-50ms-fetches-for-protected-websites-pgk</guid>
      <description>&lt;p&gt;I built Karon.&lt;/p&gt;

&lt;p&gt;A lot of "AI agent infrastructure" feels backwards to me: lots of abstraction, lots of demos, and not much that actually helps an agent reach a real page on the live web.&lt;/p&gt;

&lt;p&gt;So I built something simpler: an API that fetches pages that normal HTTP clients often fail to reach, plus an agent-friendly endpoint that returns clean markdown/text instead of raw HTML.&lt;/p&gt;

&lt;p&gt;The basic flow is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first request clears the WAF challenge (3–10s)&lt;/li&gt;
&lt;li&gt;Session state gets cached&lt;/li&gt;
&lt;li&gt;Subsequent requests to the same site reuse the session (~45ms)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/v1/agent/browse&lt;/code&gt; returns cleaned content for agent workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I wanted was not a "platform" pitch, just infrastructure that is immediately usable.&lt;/p&gt;

&lt;p&gt;Available now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free tier&lt;/li&gt;
&lt;li&gt;No credit card&lt;/li&gt;
&lt;li&gt;Failed requests are free&lt;/li&gt;
&lt;li&gt;Google sign-in for self-serve API keys&lt;/li&gt;
&lt;li&gt;MCP package for agent workflows: &lt;code&gt;pip install karon-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/v1/agent/browse&lt;/code&gt; for markdown / text extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Raw HTML:&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;-X&lt;/span&gt; POST https://api.karonlabs.net/v1/fetch &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url":"https://www.nike.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean markdown for agent workflows:&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;-X&lt;/span&gt; POST https://api.karonlabs.net/v1/agent/browse &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"url":"https://www.nike.com","extract":"markdown"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP (Claude / Cursor — no install needed, uvx handles it):&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;"karon"&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;"uvx"&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;"karon-mcp"&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;"KARON_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_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;A few boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ticketing, login automation, financial sites, and similar abuse-heavy categories are blocked by default&lt;/li&gt;
&lt;li&gt;Rate limits are per key&lt;/li&gt;
&lt;li&gt;Content is not stored beyond cache TTL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docs: &lt;a href="https://api.karonlabs.net/docs" rel="noopener noreferrer"&gt;https://api.karonlabs.net/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sign up: &lt;a href="https://api.karonlabs.net/auth/google" rel="noopener noreferrer"&gt;https://api.karonlabs.net/auth/google&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP package: &lt;a href="https://pypi.org/project/karon-mcp/" rel="noopener noreferrer"&gt;https://pypi.org/project/karon-mcp/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AUP: &lt;a href="https://karonlabs.net/aup.html" rel="noopener noreferrer"&gt;https://karonlabs.net/aup.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about caching, agent integration, where it works well, and where it breaks.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>mcp</category>
      <category>showdev</category>
      <category>webscraping</category>
    </item>
  </channel>
</rss>
