<?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: smallhandsome</title>
    <description>The latest articles on DEV Community by smallhandsome (@smallhandsome).</description>
    <link>https://dev.to/smallhandsome</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%2F3970171%2F3d37d811-320e-4d17-a61d-d4f3f551d89c.png</url>
      <title>DEV Community: smallhandsome</title>
      <link>https://dev.to/smallhandsome</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smallhandsome"/>
    <language>en</language>
    <item>
      <title>How to Build an Automated UI Monitoring Pipeline with MCP and ShotAPI</title>
      <dc:creator>smallhandsome</dc:creator>
      <pubDate>Thu, 18 Jun 2026 13:09:44 +0000</pubDate>
      <link>https://dev.to/smallhandsome/how-to-build-an-automated-ui-monitoring-pipeline-with-mcp-and-shotapi-5gg</link>
      <guid>https://dev.to/smallhandsome/how-to-build-an-automated-ui-monitoring-pipeline-with-mcp-and-shotapi-5gg</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: AI Agents Can't See the Web
&lt;/h2&gt;

&lt;p&gt;AI coding assistants like Claude and Cursor are incredibly powerful for writing and debugging code. But they have one fundamental limitation — they can only process text. When you ask "does my landing page look right?", they can't actually &lt;em&gt;see&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;ShotAPI MCP Server&lt;/strong&gt; comes in. It gives your AI agent the ability to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Screenshot any webpage&lt;/strong&gt; — QA testing, compliance monitoring, competitor tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render HTML/CSS visually&lt;/strong&gt; — write design code, see the result, iterate instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do it all without installing anything&lt;/strong&gt; — remote streamable-http mode, zero local resource usage&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  One-Line Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; streamable-http shotapi https://aiphotoshop.mynatapp.cc/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Cursor, add the same URL in Settings → MCP Servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial: Automated UI Change Detection
&lt;/h2&gt;

&lt;p&gt;Here's a practical pipeline you can set up today:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Connect ShotAPI
&lt;/h3&gt;

&lt;p&gt;Add the MCP server to your Claude Code or Cursor setup using the command above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create a Monitoring Prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Every day at 9am, screenshot these pages and compare with yesterday's screenshots:
&lt;span class="p"&gt;-&lt;/span&gt; https://my-app.com/ (homepage)
&lt;span class="p"&gt;-&lt;/span&gt; https://my-app.com/pricing (pricing page)
&lt;span class="p"&gt;-&lt;/span&gt; https://competitor.com/ (competitor homepage)

Report any visual differences you notice.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Let Your AI Agent Do the Work
&lt;/h3&gt;

&lt;p&gt;Your AI agent will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call ShotAPI's &lt;code&gt;screenshot_one_liner&lt;/code&gt; tool for each URL&lt;/li&gt;
&lt;li&gt;Compare the images pixel-by-pixel or describe differences&lt;/li&gt;
&lt;li&gt;Send you a summary report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Puppeteer installation. No browser resource usage. Just one MCP command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial: Design Code → Visual Preview
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Write Your HTML/CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  padding: 40px;
  border-radius: 16px;
  color: white;
  font-family: system-ui;
"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Premium Plan&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: 48px; font-weight: bold;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$29/month&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;5,000 screenshots + 5,000 renders&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Priority processing&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;API Key authentication&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Ask Your Agent to Render It
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please render this HTML/CSS code as an image using ShotAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Iterate
&lt;/h3&gt;

&lt;p&gt;See the result → adjust the CSS → render again → repeat until it looks perfect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Tier
&lt;/h2&gt;

&lt;p&gt;100 screenshots + 100 renders per month, IP-based, no signup required.&lt;/p&gt;

&lt;p&gt;Need more? Paid plans start at ¥29/month (5,000 calls) via &lt;a href="https://afdian.com/a/shotapi/plan" rel="noopener noreferrer"&gt;Afdian&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ShotAPI vs Puppeteer MCP?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ShotAPI&lt;/th&gt;
&lt;th&gt;Puppeteer MCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;Zero install, remote&lt;/td&gt;
&lt;td&gt;Install Chromium locally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resources&lt;/td&gt;
&lt;td&gt;No local browser&lt;/td&gt;
&lt;td&gt;~1GB+ for Chrome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Features&lt;/td&gt;
&lt;td&gt;Screenshot + Render&lt;/td&gt;
&lt;td&gt;Screenshot only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;China access&lt;/td&gt;
&lt;td&gt;Direct (natapp tunnel)&lt;/td&gt;
&lt;td&gt;Needs proxy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;100+100/month&lt;/td&gt;
&lt;td&gt;Unlimited but heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://aiphotoshop.mynatapp.cc/docs" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/docs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;MCP Command&lt;/strong&gt;: &lt;code&gt;claude mcp add --transport streamable-http shotapi https://aiphotoshop.mynatapp.cc/mcp&lt;/code&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>automation</category>
      <category>screenshot</category>
    </item>
    <item>
      <title>Give AI Agents Eyes: ShotAPI MCP Server for Web Screenshots</title>
      <dc:creator>smallhandsome</dc:creator>
      <pubDate>Thu, 11 Jun 2026 08:45:53 +0000</pubDate>
      <link>https://dev.to/smallhandsome/give-ai-agents-eyes-shotapi-mcp-server-for-web-screenshots-2kd5</link>
      <guid>https://dev.to/smallhandsome/give-ai-agents-eyes-shotapi-mcp-server-for-web-screenshots-2kd5</guid>
      <description>&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;When you're working with an AI coding agent, you often need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verify deployments&lt;/strong&gt; — "Does the landing page look right?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug UI issues&lt;/strong&gt; — "Why is the layout broken on mobile?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capture visual data&lt;/strong&gt; — "What does this dashboard chart show?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test responsive designs&lt;/strong&gt; — "How does this look at 1280px vs 768px?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your agent can fetch the HTML, but it can't render it. ShotAPI fills that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Command to Connect
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Claude Code&lt;/span&gt;
claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; streamable-http shotapi https://aiphotoshop.mynatapp.cc/mcp

&lt;span class="c"&gt;# Cursor → Settings → MCP → Add server&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"mcpServers"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"shotapi"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"type"&lt;/span&gt;: &lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;,
      &lt;span class="s2"&gt;"url"&lt;/span&gt;: &lt;span class="s2"&gt;"https://aiphotoshop.mynatapp.cc/mcp"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Python, no Playwright, no Docker. It's a remote MCP server — just connect and start screenshoting.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 MCP Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Example prompt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;screenshot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Capture a webpage screenshot&lt;/td&gt;
&lt;td&gt;"Screenshot github.com"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;render&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Render HTML string to an image&lt;/td&gt;
&lt;td&gt;"Render this HTML to an image"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;health&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Check service status&lt;/td&gt;
&lt;td&gt;"Is ShotAPI alive?"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  REST API (No MCP Required)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Screenshot&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://news.ycombinator.com"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; shot.png

&lt;span class="c"&gt;# Render HTML&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://aiphotoshop.mynatapp.cc/v1/render"&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;'{"html":"&amp;lt;h1&amp;gt;Hello ShotAPI&amp;lt;/h1&amp;gt;","width":800,"height":600}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; render.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Free Tier vs Paid
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free (10+10/mo)&lt;/th&gt;
&lt;th&gt;Paid ($4.90/mo)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Screenshot+Render&lt;/td&gt;
&lt;td&gt;10 each/month&lt;/td&gt;
&lt;td&gt;5,000+/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formats&lt;/td&gt;
&lt;td&gt;PNG/JPEG&lt;/td&gt;
&lt;td&gt;PNG/JPEG/WebP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-page screenshots&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSS selector capture&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom viewport sizes&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;IP-based&lt;/td&gt;
&lt;td&gt;API Key&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero install&lt;/strong&gt; — Remote streamable-http MCP, no local dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in caching&lt;/strong&gt; — Same URL returns instantly on repeat requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ad blocking&lt;/strong&gt; — &lt;code&gt;block_ads=true&lt;/code&gt; strips ads automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;China direct&lt;/strong&gt; — No VPN needed, domestic tunnel for Chinese users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Official MCP Registry&lt;/strong&gt; — Listed at registry.modelcontextprotocol.io&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Now
&lt;/h2&gt;

&lt;p&gt;Head to &lt;a href="https://aiphotoshop.mynatapp.cc/en/docs" rel="noopener noreferrer"&gt;ShotAPI Docs&lt;/a&gt; and click "Screenshot it" — see it work before you even configure MCP.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/smallhandsome/shotapi-mcp-server" rel="noopener noreferrer"&gt;smallhandsome/shotapi-mcp-server&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://aiphotoshop.mynatapp.cc/en/docs" rel="noopener noreferrer"&gt;aiphotoshop.mynatapp.cc/en/docs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Pricing&lt;/strong&gt;: &lt;a href="https://aiphotoshop.mynatapp.cc/en/pricing" rel="noopener noreferrer"&gt;aiphotoshop.mynatapp.cc/en/pricing&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Give Your AI Agent Eyes: Building a Visual MCP Server for Web Screenshots</title>
      <dc:creator>smallhandsome</dc:creator>
      <pubDate>Tue, 09 Jun 2026 08:07:16 +0000</pubDate>
      <link>https://dev.to/smallhandsome/give-your-ai-agent-eyes-building-a-visual-mcp-server-for-web-screenshots-3f49</link>
      <guid>https://dev.to/smallhandsome/give-your-ai-agent-eyes-building-a-visual-mcp-server-for-web-screenshots-3f49</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Launch Announcement:&lt;/strong&gt; ShotAPI MCP Server is launching on &lt;a href="https://www.producthunt.com" rel="noopener noreferrer"&gt;Product Hunt&lt;/a&gt; on Wednesday June 10! Come support us!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Give Your AI Agent Eyes: Building a Visual MCP Server for Web Screenshots
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why AI Agents Need to &lt;em&gt;See&lt;/em&gt; the Web
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) agents can fetch and parse web content, but they're blind to how it &lt;em&gt;looks&lt;/em&gt;. A broken layout, a misaligned element, a CSS rendering bug — these are visual problems that text alone can't diagnose.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;ShotAPI&lt;/strong&gt; — an MCP server that gives Claude, Cursor, and other AI agents screenshot and HTML rendering capabilities via a single remote connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Python, no Playwright, no local install.&lt;/strong&gt; One command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; streamable-http shotapi https://aiphotoshop.mynatapp.cc/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Three Tools, One Connection
&lt;/h2&gt;

&lt;p&gt;ShotAPI exposes three MCP tools through streamable-http (no stdio, no local setup):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;screenshot_one_liner(url)&lt;/code&gt;&lt;/strong&gt; — Quick screenshot of any URL. One parameter, one result.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;screenshot(url, selector?, fullpage?, viewport?, format?)&lt;/code&gt;&lt;/strong&gt; — Full control: CSS selectors, viewport sizing, full-page captures, PNG/JPEG/WebP output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;render(html)&lt;/code&gt;&lt;/strong&gt; — Render any HTML/CSS to an image. Write code, see the result, revise. This closes the visual feedback loop.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Visual Bug Detection
&lt;/h3&gt;

&lt;p&gt;Tell your agent to check a webpage, and it can &lt;em&gt;see&lt;/em&gt; the problem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; Take a screenshot of https://myapp.com/dashboard and check if the sidebar overlaps the main content
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent gets an actual image — not just the DOM text — and can identify layout issues, missing images, or broken responsive designs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Design Review Automation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; Compare screenshots of https://mysite.com before and after the CSS change
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent captures both states visually and describes the differences — something text-based tools can't do.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. HTML Prototyping with &lt;code&gt;render&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;render&lt;/code&gt; tool is where it gets interesting. Your agent can:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; Write a landing page hero section with Tailwind CSS, render it, and show me how it looks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent writes HTML -&amp;gt; renders it -&amp;gt; sees the visual result -&amp;gt; identifies issues -&amp;gt; revises -&amp;gt; renders again. A real visual feedback loop, all within the conversation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick test from your terminal&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://aiphotoshop.mynatapp.cc/v1/render"&lt;/span&gt;   &lt;span class="nt"&gt;-X&lt;/span&gt; POST   &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt;   &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"html": "&amp;lt;h1 style="color:#4f46e5;font-family:sans-serif"&amp;gt;ShotAPI Works!&amp;lt;/h1&amp;gt;"}'&lt;/span&gt;   &lt;span class="nt"&gt;-o&lt;/span&gt; rendered.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Batch Monitoring
&lt;/h3&gt;

&lt;p&gt;Take periodic screenshots of production sites to catch visual regressions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;

&lt;span class="n"&gt;sites&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://myap---
title: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="n"&gt;How&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="n"&gt;Built&lt;/span&gt; &lt;span class="n"&gt;ShotAPI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;An&lt;/span&gt; &lt;span class="n"&gt;MCP&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt; &lt;span class="n"&gt;That&lt;/span&gt; &lt;span class="n"&gt;Gives&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt; &lt;span class="n"&gt;Agents&lt;/span&gt; &lt;span class="n"&gt;Visual&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
published: false
description: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="n"&gt;practical&lt;/span&gt; &lt;span class="n"&gt;guide&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;building&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;deploying&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;MCP&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;HTML&lt;/span&gt; &lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;real&lt;/span&gt; &lt;span class="n"&gt;Claude&lt;/span&gt; &lt;span class="n"&gt;integration&lt;/span&gt; &lt;span class="n"&gt;examples&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
tags: mcp, ai, screenshot, claude, tutorial
cover_image: https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://github.com/smallhandsome/shotapi-mcp-server
---

## The Problem: AI Agents Are Blind

When you&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;re using Claude Code or Cursor to build web applications, there&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s a fundamental gap: **the AI can&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t see what it&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s building**. It writes HTML and CSS, but it has no way to verify the visual output. It can&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t tell if the layout is broken, if the colors look right, or if the responsive design actually works.

This isn just a minor inconvenience. It leads to:
- Iterative &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;tell&lt;/span&gt; &lt;span class="n"&gt;me&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;see&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; loops that waste time
- Deployments that look fine in code but broken in production
- No way for AI agents to autonomously verify UI changes

## The Solution: ShotAPI MCP Server

[ShotAPI](https://aiphotoshop.mynatapp.cc/docs) is an MCP (Model Context Protocol) server that provides two tools:

1. **`screenshot`** — Captures a full-page screenshot of any URL
2. **`render`** — Renders raw HTML/CSS and returns the visual result

It works as a remote MCP server via streamable-http transport. No browser install needed on your machine.

### Connect in One Command

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
claude mcp add --transport streamable-http shotapi &lt;a href="https://aiphotoshop.mynatapp.cc/mcp" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/mcp&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Or for Cursor:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
json&lt;br&gt;
{&lt;br&gt;
  "mcpServers": {&lt;br&gt;
    "shotapi": {&lt;br&gt;
      "url": "&lt;a href="https://aiphotoshop.mynatapp.cc/mcp" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/mcp&lt;/a&gt;",&lt;br&gt;
      "transport": "streamable-http"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Free tier: 100 screenshots + 100 renders per month, no signup needed.

## Real Use Cases

### 1. Claude Verifies Its Own Code

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;br&gt;
Human: Build a landing page with a hero section, testimonials, and pricing grid.&lt;/p&gt;

&lt;p&gt;Claude: [writes HTML/CSS code]&lt;/p&gt;

&lt;p&gt;Claude: Let me verify this looks correct. I'll use the render tool to check.&lt;/p&gt;

&lt;p&gt;[Claude calls ShotAPI render tool with the HTML it just wrote]&lt;/p&gt;

&lt;p&gt;Claude: I can see the hero section is working, but the pricing grid is overlapping on mobile. Let me fix the responsive breakpoints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
### 2. Deployment Verification

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;br&gt;
Human: I just deployed my app to production. Check if it looks right.&lt;/p&gt;

&lt;p&gt;Claude: [calls ShotAPI screenshot tool on &lt;a href="https://yourapp.com" rel="noopener noreferrer"&gt;https://yourapp.com&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Claude: The page loaded successfully. I notice the footer text is cut off — looks like a CSS overflow issue. Also the background image didn't load (404).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
### 3. Competitor/Reference Site Analysis

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;br&gt;
Human: I want my site to look like stripe.com. What layout patterns do they use?&lt;/p&gt;

&lt;p&gt;Claude: [calls ShotAPI screenshot tool on &lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;https://stripe.com&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Claude: Stripe uses a dark hero with gradient text, centered nav with minimal items, and a card-based feature grid. The hero has a large heading with animated gradient, and below it is a product screenshot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
### 4. Automated UI Regression Testing

In CI/CD pipelines, you can use the `/v1/screenshot` REST API to capture screenshots before and after changes:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;/p&gt;
&lt;h1&gt;
  
  
  Before deploy
&lt;/h1&gt;

&lt;p&gt;curl -s "&lt;a href="https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://staging.myapp.com" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://staging.myapp.com&lt;/a&gt;" -o before.png&lt;/p&gt;
&lt;h1&gt;
  
  
  After deploy
&lt;/h1&gt;

&lt;p&gt;curl -s "&lt;a href="https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://staging.myapp.com" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://staging.myapp.com&lt;/a&gt;" -o after.png&lt;/p&gt;
&lt;h1&gt;
  
  
  Compare
&lt;/h1&gt;
&lt;h1&gt;
  
  
  If visual regression detected, block the deploy
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
## Technical Architecture

ShotAPI is built with:
- **FastAPI** for the HTTP API and MCP server endpoints
- **Playwright** (Chromium) for headless browser rendering
- **Streamable-HTTP** MCP transport (no SSE, no WebSocket — simple POST-based)
- **NATAPP tunnel** for Chinese network accessibility

The MCP server follows the official MCP specification. It registers two tools with proper input schemas:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;br&gt;
python&lt;/p&gt;
&lt;h1&gt;
  
  
  Tool definition in MCP server
&lt;/h1&gt;

&lt;p&gt;tools = [&lt;br&gt;
    {&lt;br&gt;
        "name": "screenshot",&lt;br&gt;
        "description": "Capture a screenshot of a webpage",&lt;br&gt;
        "inputSchema": {&lt;br&gt;
            "type": "object",&lt;br&gt;
            "properties": {&lt;br&gt;
                "url": {"type": "string", "description": "URL to screenshot"},&lt;br&gt;
                "width": {"type": "integer", "description": "Viewport width (default 1280)"},&lt;br&gt;
                "full_page": {"type": "boolean", "description": "Capture full page (default true)"},&lt;br&gt;
            },&lt;br&gt;
            "required": ["url"]&lt;br&gt;
        }&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
        "name": "render",&lt;br&gt;
        "description": "Render HTML/CSS and return the visual result",&lt;br&gt;
        "inputSchema": {&lt;br&gt;
            "type": "object",&lt;br&gt;
            "properties": {&lt;br&gt;
                "html": {"type": "string", "description": "HTML content to render"},&lt;br&gt;
                "css": {"type": "string", "description": "Optional CSS to apply"},&lt;br&gt;
            },&lt;br&gt;
            "required": ["html"]&lt;br&gt;
        }&lt;br&gt;
    }&lt;br&gt;
]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
## REST API (for non-MCP usage)

If you're not using Claude/Cursor but still want screenshots:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;/p&gt;
&lt;h1&gt;
  
  
  Screenshot any URL (free, no API key needed)
&lt;/h1&gt;

&lt;p&gt;curl "&lt;a href="https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://github.com" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://github.com&lt;/a&gt;"&lt;/p&gt;
&lt;h1&gt;
  
  
  Render HTML
&lt;/h1&gt;

&lt;p&gt;curl -X POST "&lt;a href="https://aiphotoshop.mynatapp.cc/v1/render" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/v1/render&lt;/a&gt;"   -H "Content-Type: application/json"   -d '{"html": "&lt;/p&gt;
&lt;h1&gt;Hello World&lt;/h1&gt;"}'&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Response is a PNG image (or JSON with base64 data).

## What's Next

ShotAPI is listed in the [official MCP Registry](https://registry.modelcontextprotocol.io) and [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers). The free tier gives 100+100 calls/month with no signup.

If you're building AI agent workflows that need visual context, give it a try:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;br&gt;
bash&lt;br&gt;
claude mcp add --transport streamable-http shotapi &lt;a href="https://aiphotoshop.mynatapp.cc/mcp" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/mcp&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
[GitHub Repo](https://github.com/smallhandsome/shotapi-mcp-server) | [Docs](https://aiphotoshop.mynatapp.cc/docs) | [MCP Registry](https://registry.modelcontextprotocol.io)
p.com", "https://docs.myapp.com", "https://admin.myapp.com"]
for site in sites:
    resp = httpx.post("https://aiphotoshop.mynatapp.cc/v1/screenshot",
                      json={"url": site, "fullpage": True},
                      headers={"Authorization": "Bearer YOUR_KEY"})
    with open(f"{site.split('//')[1].replace('.','_')}.png", "wb") as f:
        f.write(resp.content)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
shell&lt;/p&gt;
&lt;h2&gt;
  
  
  Free Tier — No Signup Required
&lt;/h2&gt;

&lt;p&gt;ShotAPI has a free tier that works without any API key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;30 screenshots + 30 renders per month&lt;/strong&gt; per IP address&lt;/li&gt;
&lt;li&gt;All 3 MCP tools available&lt;/li&gt;
&lt;li&gt;Streamable-http remote connection (no VPN needed from China)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just add the MCP connection and start using it. No registration, no email, no keys.&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;
&lt;h3&gt;
  
  
  For Claude Code / Claude Desktop
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; streamable-http shotapi https://aiphotoshop.mynatapp.cc/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  For Cursor
&lt;/h3&gt;

&lt;p&gt;Add to your Cursor MCP config:&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;"shotapi"&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;"url"&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://aiphotoshop.mynatapp.cc/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;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&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;h3&gt;
  
  
  Direct API (no MCP)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Free screenshot (IP-based, no key)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://news.ycombinator.com"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; hn.png

&lt;span class="c"&gt;# With API key (dedicated quota)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://aiphotoshop.mynatapp.cc/v1/screenshot?url=https://github.com&amp;amp;selector=.Header"&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="nt"&gt;-o&lt;/span&gt; header.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Paid Tiers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Calls/Month&lt;/th&gt;
&lt;th&gt;Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;$4.90/mo&lt;/td&gt;
&lt;td&gt;5,000+5,000&lt;/td&gt;
&lt;td&gt;API Key, full params&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$9.90/mo&lt;/td&gt;
&lt;td&gt;20,000+20,000&lt;/td&gt;
&lt;td&gt;Full params, usage tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;30+30&lt;/td&gt;
&lt;td&gt;IP-based, no signup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Chinese users can pay via WeChat/Alipay on Afdian with instant activation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF export support&lt;/li&gt;
&lt;li&gt;Video/animation capture&lt;/li&gt;
&lt;li&gt;Batch screenshot API&lt;/li&gt;
&lt;li&gt;Webhook notifications for monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try it now&lt;/strong&gt; — just add the MCP connection and ask your agent to take a screenshot. No signup, no install, no waiting.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://aiphotoshop.mynatapp.cc/en/docs" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/en/docs&lt;/a&gt;&lt;br&gt;
Smithery: &lt;a href="https://smithery.ai/server/@ljs/shotapi" rel="noopener noreferrer"&gt;https://smithery.ai/server/@ljs/shotapi&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/smallhandsome/shotapi-mcp-server" rel="noopener noreferrer"&gt;https://github.com/smallhandsome/shotapi-mcp-server&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;ShotAPI is an open MCP server for web screenshots and HTML rendering. Free tier available with no registration required.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ShotAPI: An MCP Server for AI Agent Screenshots and HTML Rendering</title>
      <dc:creator>smallhandsome</dc:creator>
      <pubDate>Sat, 06 Jun 2026 04:04:57 +0000</pubDate>
      <link>https://dev.to/smallhandsome/shotapi-an-mcp-server-for-ai-agent-screenshots-and-html-rendering-4i5i</link>
      <guid>https://dev.to/smallhandsome/shotapi-an-mcp-server-for-ai-agent-screenshots-and-html-rendering-4i5i</guid>
      <description>&lt;p&gt;We just launched on Product Hunt! Check it out and support us: &lt;a href="https://www.producthunt.com/posts/shotapi" rel="noopener noreferrer"&gt;https://www.producthunt.com/posts/shotapi&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you're building AI-powered applications and need visual capabilities, &lt;strong&gt;ShotAPI&lt;/strong&gt; is an MCP server that gives your AI agents the ability to capture screenshots and render HTML to images.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ShotAPI?
&lt;/h2&gt;

&lt;p&gt;ShotAPI is an MCP (Model Context Protocol) server built with &lt;strong&gt;FastAPI + Playwright&lt;/strong&gt; that provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screenshot capture&lt;/strong&gt; of any URL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML rendering&lt;/strong&gt; to PNG/JPEG images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP compatibility&lt;/strong&gt; with Claude, Cursor, and any MCP client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;streamable-http transport&lt;/strong&gt; for remote access&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Via MCP protocol (Claude, Cursor, etc.)
# The server exposes two main tools:
&lt;/span&gt;
&lt;span class="mf"&gt;1.&lt;/span&gt; &lt;span class="nf"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;captures&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;any&lt;/span&gt; &lt;span class="n"&gt;URL&lt;/span&gt;
&lt;span class="mf"&gt;2.&lt;/span&gt; &lt;span class="nf"&gt;render_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;renders&lt;/span&gt; &lt;span class="n"&gt;HTML&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server runs at &lt;code&gt;https://aiphotoshop.mynatapp.cc/mcp&lt;/code&gt; and supports the standard MCP streamable-http transport.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free tier&lt;/strong&gt;: 100 calls/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starter&lt;/strong&gt;: $4.90/month (5,000 calls)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt;: $9.90/month (20,000 calls)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Add the MCP endpoint to your Claude/Cursor config&lt;/li&gt;
&lt;li&gt;Your AI agent can now capture screenshots and render HTML&lt;/li&gt;
&lt;li&gt;Check the docs at &lt;a href="https://aiphotoshop.mynatapp.cc/docs" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/smallhandsome/shotapi-mcp-server" rel="noopener noreferrer"&gt;https://github.com/smallhandsome/shotapi-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://aiphotoshop.mynatapp.cc/docs" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://aiphotoshop.mynatapp.cc/pricing" rel="noopener noreferrer"&gt;https://aiphotoshop.mynatapp.cc/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback welcome! What features would you find useful for your AI workflows?&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>ShotAPI - Let AI Agents See the Web: Screenshot and Render MCP Server</title>
      <dc:creator>smallhandsome</dc:creator>
      <pubDate>Fri, 05 Jun 2026 16:27:40 +0000</pubDate>
      <link>https://dev.to/smallhandsome/shotapi-let-ai-agents-see-the-web-screenshot-and-render-mcp-server-4ebp</link>
      <guid>https://dev.to/smallhandsome/shotapi-let-ai-agents-see-the-web-screenshot-and-render-mcp-server-4ebp</guid>
      <description>&lt;p&gt;The web is visual — but most AI agents can only read text. What if your AI assistant could actually &lt;strong&gt;see&lt;/strong&gt; a webpage, capture a screenshot, or render HTML to an image?&lt;/p&gt;

&lt;p&gt;That's exactly what &lt;strong&gt;ShotAPI&lt;/strong&gt; does. It's an MCP (Model Context Protocol) server that gives AI agents like Claude, Cursor, and Copilot the ability to take screenshots of any URL and render HTML/CSS to images.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ShotAPI?
&lt;/h2&gt;

&lt;p&gt;ShotAPI is a screenshot and render API built as an MCP Server. It runs on &lt;strong&gt;FastAPI + Playwright&lt;/strong&gt;, offering two core tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;screenshot&lt;/strong&gt; — Capture any webpage as a PNG/JPEG image&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;render&lt;/strong&gt; — Convert HTML/CSS markup into a rendered image&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How AI Agents Use ShotAPI
&lt;/h2&gt;

&lt;p&gt;Via the MCP protocol, any MCP-compatible AI client can connect to ShotAPI and use these tools natively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Desktop&lt;/strong&gt; — Add ShotAPI as an MCP server, and Claude can see any webpage you mention&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor/Windsurf&lt;/strong&gt; — AI coding assistants can screenshot sites for design reference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom agents&lt;/strong&gt; — Any agent using the MCP SDK can integrate visual web capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Two Transport Modes
&lt;/h2&gt;

&lt;p&gt;ShotAPI supports both MCP transport modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;stdio&lt;/strong&gt; — For local Claude Desktop integration (JSON-RPC over stdin/stdout)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;streamable-http&lt;/strong&gt; — For remote/Cursor integration (HTTP at &lt;code&gt;/mcp&lt;/code&gt; endpoint)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The streamable-http mode means you can host ShotAPI remotely and let multiple agents connect — no local installation needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start: Connect as MCP Server
&lt;/h2&gt;

&lt;p&gt;For Claude Desktop, add this to your MCP config:&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;"shotapi"&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;"url"&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://aiphotoshop.mynatapp.cc/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;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&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;For Cursor/Windsurf, the same config works in their MCP settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Tier + Paid Plans
&lt;/h2&gt;

&lt;p&gt;ShotAPI offers a generous free tier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30 screenshots + 30 renders per month (IP-based, no signup needed)&lt;/li&gt;
&lt;li&gt;No API key required for free usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paid plans for heavier usage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Starter&lt;/strong&gt; — 5,000 calls/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt; — 20,000 calls/month&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  API Endpoints
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /v1/screenshot?url=https://example.com&amp;amp;width=1280&amp;amp;height=720&amp;amp;format=png
GET /v1/render?html=&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;&amp;amp;width=800&amp;amp;height=600&amp;amp;format=png
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both endpoints return image data directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://aiphotoshop.mynatapp.cc" rel="noopener noreferrer"&gt;ShotAPI website&lt;/a&gt; to try it free&lt;/li&gt;
&lt;li&gt;Check the &lt;a href="https://aiphotoshop.mynatapp.cc/docs" rel="noopener noreferrer"&gt;API docs&lt;/a&gt; for integration details&lt;/li&gt;
&lt;li&gt;Connect as MCP server in your AI client config&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ShotAPI is open and ready — give your AI agent eyes on the web!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
