<?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: yeongjin</title>
    <description>The latest articles on DEV Community by yeongjin (@yyeongjin).</description>
    <link>https://dev.to/yyeongjin</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%2F4090129%2Ff35762c6-a369-4c8c-9111-659d868d3d74.png</url>
      <title>DEV Community: yeongjin</title>
      <link>https://dev.to/yyeongjin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yyeongjin"/>
    <language>en</language>
    <item>
      <title>One Reference, One Request: Building an Evidence-Isolated Design Analysis MCP</title>
      <dc:creator>yeongjin</dc:creator>
      <pubDate>Sat, 22 Aug 2026 20:31:07 +0000</pubDate>
      <link>https://dev.to/yyeongjin/one-reference-one-request-building-an-evidence-isolated-design-analysis-mcp-i2b</link>
      <guid>https://dev.to/yyeongjin/one-reference-one-request-building-an-evidence-isolated-design-analysis-mcp-i2b</guid>
      <description>&lt;p&gt;Most screenshot-to-code workflows start with a simple idea: give a model several good references and ask it to synthesize a design. The practical problem is traceability. Once screenshots from different sites enter the same context, it becomes difficult to tell which reference supports a color, layout, component, or responsive rule.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/yyeongjin/secret_mcp" rel="noopener noreferrer"&gt;Secret MCP&lt;/a&gt; to test a stricter boundary: &lt;strong&gt;one design reference produces one MCP sampling request and one implementation document&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F65yjrge78igxn1qnikag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F65yjrge78igxn1qnikag.png" alt="Secret MCP target architecture" width="800" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Secret MCP is a local, open-source Model Context Protocol server. It searches GDWEB for recent public design references, prepares visual evidence for each work, and asks the connected MCP client to analyze every result independently. The output is not a mood board or a combined inspiration summary. It is a separate &lt;code&gt;DESIGN_INDEX&lt;/code&gt; file for each reference, with routes, coordinates, colors, components, responsive behavior, accessibility requirements, implementation tasks, acceptance criteria, and explicit uncertainty labels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why isolate the references?
&lt;/h2&gt;

&lt;p&gt;Suppose a search returns three works. A combined prompt can be convenient, but it creates an attribution problem: a later specification may contain the navigation of reference A, the color palette of reference B, and an inferred component from reference C without preserving those boundaries.&lt;/p&gt;

&lt;p&gt;Secret MCP instead runs a sequential queue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search for eligible references.&lt;/li&gt;
&lt;li&gt;Prepare desktop and mobile evidence for work 1.&lt;/li&gt;
&lt;li&gt;Send one &lt;code&gt;sampling/createMessage&lt;/code&gt; request with &lt;code&gt;includeContext: none&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save one &lt;code&gt;DESIGN_INDEX_gdweb-&amp;lt;id&amp;gt;.md&lt;/code&gt; document.&lt;/li&gt;
&lt;li&gt;Only then prepare the next work.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Formally, the prepared evidence for reference &lt;code&gt;r_i&lt;/code&gt; is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E_i = { I_i,k, B_i,k, P_i,k, M_i }
q_i = sampling/createMessage(C, E_i; includeContext = none)
D_i = G_theta(q_i)

References(q_i) = { r_i }
For every i != j: referenceId(r_j) is absent from q_i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;I&lt;/code&gt; is the set of prepared image tiles, &lt;code&gt;B&lt;/code&gt; is the crop geometry, &lt;code&gt;P&lt;/code&gt; is the representative-color measurement, &lt;code&gt;M&lt;/code&gt; is source metadata, and &lt;code&gt;C&lt;/code&gt; is the fixed 19-section specification contract. This is an operational isolation invariant. It does not claim that an external model provider has no memory outside the MCP message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning long screenshots into inspectable evidence
&lt;/h2&gt;

&lt;p&gt;Full-page design captures can be thousands of pixels tall. Sending the original image as one large base64 payload makes fine layout details easy to miss and can exceed transport limits. Before sampling, Secret MCP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;resizes desktop evidence to a maximum width of 1,200 pixels;&lt;/li&gt;
&lt;li&gt;divides long pages into overlapping 1,600-pixel vertical tiles;&lt;/li&gt;
&lt;li&gt;keeps mobile evidence separate;&lt;/li&gt;
&lt;li&gt;records prepared and source-space coordinates for every tile;&lt;/li&gt;
&lt;li&gt;measures eight representative colors per tile in HEX, RGB, and HSL;&lt;/li&gt;
&lt;li&gt;labels measured values separately from inferred implementation tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coordinates map back to the original capture with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x_source = (cropLeft + x_tile) / scaleX
y_source = (cropTop + y_tile) / scaleY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The local viewer exposes the evidence, request contract, generation log, and final document for one work at a time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffb5g5sum6y44mei2cvaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffb5g5sum6y44mei2cvaa.png" alt="The fixed request contract shown in the Secret MCP viewer" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the current tests show
&lt;/h2&gt;

&lt;p&gt;There are two deliberately small evaluations in version 0.6.0.&lt;/p&gt;

&lt;p&gt;The live smoke test used two sampled references. Each request contained its own reference ID, zero occurrences of the other sampled ID, its own visual evidence, and &lt;code&gt;includeContext: none&lt;/code&gt;. Two requests produced two Markdown files.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sampling request&lt;/th&gt;
&lt;th&gt;Own reference present&lt;/th&gt;
&lt;th&gt;Other sampled reference present&lt;/th&gt;
&lt;th&gt;Output documents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Request 1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request 2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A preserved three-reference run recorded the following descriptive measurements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;Desktop source height&lt;/th&gt;
&lt;th&gt;Prepared images&lt;/th&gt;
&lt;th&gt;Image payload&lt;/th&gt;
&lt;th&gt;Color measurements&lt;/th&gt;
&lt;th&gt;Document tokens&lt;/th&gt;
&lt;th&gt;Document size&lt;/th&gt;
&lt;th&gt;Required headings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gdweb-27294&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2,675 px&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;126.6 KB&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;7,921&lt;/td&gt;
&lt;td&gt;54.0 KB&lt;/td&gt;
&lt;td&gt;19/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gdweb-25378&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7,043 px&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;302.5 KB&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;9,953&lt;/td&gt;
&lt;td&gt;69.8 KB&lt;/td&gt;
&lt;td&gt;19/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gdweb-24234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7,832 px&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;387.8 KB&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;9,517&lt;/td&gt;
&lt;td&gt;63.2 KB&lt;/td&gt;
&lt;td&gt;19/19&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Across those three references, the pipeline prepared 12 evidence images totaling 816.9 decimal KB, recorded 96 representative-color measurements, and produced three documents totaling 27,391 whitespace-delimited tokens and 187.0 decimal KB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fctv8dvbxfqlbqqdtsqfw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fctv8dvbxfqlbqqdtsqfw.png" alt="A generation log showing independent per-work requests and document saves" width="799" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These results verify request composition and artifact separation within the test scope. They do &lt;strong&gt;not&lt;/strong&gt; establish superior design quality. The current evaluation has no control group, human rating, repeated trials, confidence intervals, or benchmark comparison. A 19/19 heading result measures structural completeness, not factual correctness.&lt;/p&gt;

&lt;h2&gt;
  
  
  From specification to a distinct implementation
&lt;/h2&gt;

&lt;p&gt;The repository also preserves a qualitative case study. A Korean Air reference was converted into a per-work specification, then its information hierarchy and layout relationships were applied to a new Godot aviation project called AEROFLOW. The resulting site uses new branding, content, imagery, and functionality; it is not a pixel clone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpa3mc33qknql5jbvoef0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpa3mc33qknql5jbvoef0.png" alt="AEROFLOW, a specification-driven implementation included in the repository" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This case demonstrates that measured structural evidence can guide a concrete implementation while still allowing a different visual identity. It remains an existence example, not a controlled fidelity study.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 19-section output contract
&lt;/h2&gt;

&lt;p&gt;Every generated document must cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reconstruction goals and evidence coordinates;&lt;/li&gt;
&lt;li&gt;site map, shared shell, and navigation;&lt;/li&gt;
&lt;li&gt;per-page geometry and layout;&lt;/li&gt;
&lt;li&gt;component abstraction and design tokens;&lt;/li&gt;
&lt;li&gt;typography, assets, and responsive behavior;&lt;/li&gt;
&lt;li&gt;interaction, accessibility, and data states;&lt;/li&gt;
&lt;li&gt;frontend architecture and implementation tasks;&lt;/li&gt;
&lt;li&gt;per-page acceptance criteria;&lt;/li&gt;
&lt;li&gt;uncertainties and adopted decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Major claims are marked &lt;code&gt;OBSERVED&lt;/code&gt;, &lt;code&gt;MEASURED&lt;/code&gt;, &lt;code&gt;INFERRED&lt;/code&gt;, or &lt;code&gt;UNKNOWN&lt;/code&gt;. This makes the document useful as an implementation handoff without pretending that static screenshots reveal invisible DOM structure or production CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Secret MCP
&lt;/h2&gt;

&lt;p&gt;Node.js 20.19 or later is required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; secret-design-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An MCP client configuration looks like this:&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;"secret-mcp"&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;"secret-design-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;"DESIGN_INDEX_OUTPUT_DIR"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/absolute/path/to/design-index"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SECRET_MCP_WEB_ORIGIN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://127.0.0.1:4317"&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;The client must support MCP &lt;code&gt;sampling/createMessage&lt;/code&gt;. The server is registered in the official MCP Registry as &lt;code&gt;io.github.yyeongjin/secret-mcp&lt;/code&gt;, distributed on npm as &lt;code&gt;secret-design-mcp&lt;/code&gt;, and licensed under MIT.&lt;/p&gt;

&lt;p&gt;The full implementation, viewer screenshots, smoke test, generated specifications, and limitations are available in the &lt;a href="https://github.com/yyeongjin/secret_mcp" rel="noopener noreferrer"&gt;Secret MCP repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related work
&lt;/h2&gt;

&lt;p&gt;Secret MCP is an implementation artifact adjacent to multimodal UI understanding and screenshot-to-code research. It has not been evaluated on the datasets used by the papers below, so their results should not be interpreted as Secret MCP results.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si et al., &lt;strong&gt;Design2Code: Benchmarking Multimodal Code Generation for Automated Front-End Engineering&lt;/strong&gt;, NAACL 2025.&lt;/li&gt;
&lt;li&gt;Wang et al., &lt;strong&gt;Screen2Words: Automatic Mobile UI Summarization with Multimodal Learning&lt;/strong&gt;, UIST 2021.&lt;/li&gt;
&lt;li&gt;Koh et al., &lt;strong&gt;VisualWebArena: Evaluating Multimodal Agents on Realistic Visually Grounded Web Tasks&lt;/strong&gt;, ACL 2024.&lt;/li&gt;
&lt;li&gt;Model Context Protocol, &lt;strong&gt;Sampling specification&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Secret MCP v0.6.0 is software with a working implementation report, not a peer-reviewed publication.&lt;/p&gt;

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