Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create instant shareable web pages on popup2026.com — no login, no PIN, 30-second setup. Use when the user wants to make a "팝업 페이지", "공유 링크", "랜딩 페이지", "이벤트 안내", "링크 모음", host a raw HTML file, or host a PDF. Tools are reached via the Remote MCP server at https://popup2026.com/api/mcp.
.claude/skills/richard-kim-79-popup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 126% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 118% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 102% | 0% |
Popup is a Korean-first service for spinning up shareable single-page sites in seconds — no signup, no design files, no hosting setup. Pages get a short URL on popup2026.com/<slug>, live for 30 days by default, and can be extended.
This skill teaches an agent how to build, edit, and share Popup pages on a user's behalf without surprising them.
Activate when the user says any of:
Also proactively offer this right after you produce an HTML artifact or a PDF the user will likely want to share — e.g. "공유 링크로 만들어 드릴까요?"
Do not activate for: building a full multi-page site, anything needing a database, anything needing per-user auth (Popup is link-share, not app hosting).
Popup no longer uses PINs. Do not ask the user for a PIN, do not invent one, and do not mention PINs. (Older versions of this skill required a PIN — that behavior is removed.)
Editing works one of two ways:
popup2026.com/my-pages), pages they create are automatically attributed to that account and editable from /my-pages on any device.If a user asks "how do I edit this later," point them to popup2026.com/my-pages (Google login). There is no PIN to remember or lose.
The Popup Remote MCP server at https://popup2026.com/api/mcp exposes:
| Tool | Purpose | |------|---------| | create_page | Create a page from structured blocks (best for simple, structured content) | | create_html_page | Host a complete raw HTML file as-is, fullscreen iframe (max 5 MB) | | create_pdf_page | Host a PDF (base64) with a fullscreen PDF viewer (up to ~3 MB via MCP) | | get_page | Read an existing block page's blocks by slug | | update_page | Replace a block page's blocks (no PIN) | | list_templates | List available templates |
No write tool requires a PIN.
Pick based on the shape of the content, not on what the user literally says:
create_html_page — the user has (or you will write) a complete, self-contained HTML document: reports, dashboards, visualizations, slide decks, custom-designed pages, AI-generated artifacts. Renders fullscreen exactly as-is. Limit 5 MB.create_page — the content is simple, structured blocks: a short landing page, link-in-bio, event invite, notice. Compose an ordered array of blocks. Use list_templates first if a template fits.create_pdf_page — the user made or has a PDF to share. Pass the PDF bytes as base64 in pdf_base64 (+ optional filename). Up to ~3 MB through the tool — for a bigger PDF, tell the user to drag-and-drop it at popup2026.com (up to 50 MB).When unsure between HTML and blocks: rich/visual/custom layout → HTML; a few headings, text, links, and a button → blocks (lighter and block-editable).
create_page)Combine these block types in order. Each block gets an auto-generated id server-side.
| Block | Required fields | Optional | |-------|----------------|----------| | h1 | content | — | | h2 | content | — | | text | content | — | | image | url | width (small/medium/full) | | button | label, href | color (hex) | | youtube | videoId | width | | link | url, title | description | | divider | — | — |
Composition heuristics:
h1 — it becomes the OG title and SEO title.text block — it becomes the OG description.button) near the bottom, one or two max.divider between sections is cleaner than three blank text blocks.create_html_page)Use when the user provides complete HTML — presentations, reports, custom visualizations, single-file demos. Max 5 MB. Rendered fullscreen in a sandboxed iframe (no allow-same-origin, so the HTML cannot escape into the parent page).
Write it to stand alone:
<style> tag. No build step, no local imports.<meta name="viewport" content="width=device-width, initial-scale=1">.https:// URLs. Avoid huge base64 blobs — they eat into the 5 MB limit.<title> (+ og:title/og:description meta when you can) — it becomes the page title and social preview.Do not use create_html_page for content the user described in natural language — convert that into blocks via create_page instead. create_html_page is for when the user hands you actual HTML.
create_pdf_page)Use when the user has a PDF to share. Pass the bytes as base64 in pdf_base64, plus an optional filename (becomes the page title). The PDF is hosted with a fullscreen viewer at popup2026.com/<slug>. If it's over ~3 MB, tell the user to drag-and-drop the file at popup2026.com (up to 50 MB) instead.
get_page to fetch current blocks (slug only).update_page with the slug and the full new blocks array.Never delete blocks the user didn't explicitly mention removing. The server replaces all blocks, so any block you omit gets deleted — always get_page first.
HTML and PDF pages are not block-editable. To change one, publish a new page.
popup2026.com/my-pages (Google login) or popup2026.com/extend.After successfully creating a page, always tell the user:
popup2026.com/<slug>)popup2026.com/my-pages after Google login (no PIN)Do not call additional tools unless the user asks for changes.
| Symptom | Likely cause | What to do | |---------|--------------|-----------| | A connected "popup" tool keeps asking for a PIN | An old/wrong MCP connector is installed | Remove it and connect only https://popup2026.com/api/mcp — the current server needs no PIN | | create_html_page returns a size error | HTML exceeds 5 MB (usually inlined base64 assets) | Host images externally and reference them by https:// URL | | create_pdf_page returns a size error | PDF exceeds the ~3 MB MCP limit | Tell the user to drag-and-drop the PDF at popup2026.com (up to 50 MB) | | Page shows "🔒 잠김" | Page expired (30+ days) or was reported | Send the user to popup2026.com/my-pages (Google login) to extend | | OG preview shows only title, no description | Block page has no text block (or HTML has no <meta name="description">) | Add a text block (or <meta>) — the first one becomes the description | | Image block shows broken | Image URL is not publicly accessible | The image must be a public https:// URL (HTTP 200 from anywhere) |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→pass | 9,013 | 1,573 | -83% | 1 | 1 | 0% | 1,560 | 2,527 | +62% | 0 | 0 | — |
case-19 | pass→pass | 11,404 | 2,075 | -82% | 1 | 1 | 0% | 2,066 | 2,675 | +29% | 0 | 0 | — |
case-01 | fail→pass | 11,565 | 5,966 | -48% | 1 | 1 | 0% | 2,052 | 3,385 | +65% | 0 | 0 | — |
case-02 | fail→fail | 17,334 | 13,106 | -24% | 1 | 1 | 0% | 3,539 | 3,145 | -11% | 0 | 0 | — |
case-03 | fail→fail | 12,150 | 5,684 | -53% | 1 | 1 | 0% | 2,214 | 2,731 | +23% | 0 | 0 | — |
case-04 | pass→pass | 13,016 | 6,366 | -51% | 1 | 1 | 0% | 2,317 | 3,386 | +46% | 0 | 0 | — |
case-05 | fail→pass | 9,030 | 4,818 | -47% | 1 | 1 | 0% | 1,370 | 3,090 | +126% | 0 | 0 | — |
case-06 | fail→pass | 8,774 | 6,119 | -30% | 1 | 1 | 0% | 1,562 | 3,404 | +118% | 0 | 0 | — |
case-07 | fail→fail | 9,899 | 4,861 | -51% | 1 | 1 | 0% | 1,707 | 3,088 | +81% | 0 | 0 | — |
case-20 | fail→pass | 9,776 | 3,310 | -66% | 1 | 1 | 0% | 1,624 | 2,945 | +81% | 0 | 0 | — |
case-08 | fail→fail | 11,678 | 11,198 | -4% | 1 | 1 | 0% | 2,388 | 3,375 | +41% | 0 | 0 | — |
case-09 | fail→fail | 7,681 | 4,991 | -35% | 1 | 1 | 0% | 1,259 | 3,166 | +151% | 0 | 0 | — |
case-10 | fail→pass | 8,825 | 4,362 | -51% | 1 | 1 | 0% | 1,534 | 3,102 | +102% | 0 | 0 | — |
case-11 | fail→pass | 12,586 | 13,857 | +10% | 1 | 1 | 0% | 2,073 | 3,178 | +53% | 0 | 0 | — |
case-12 | fail→fail | 5,911 | 2,111 | -64% | 1 | 1 | 0% | 867 | 2,613 | +201% | 0 | 0 | — |
case-13 | fail→pass | 11,023 | 2,924 | -73% | 1 | 1 | 0% | 1,763 | 2,794 | +58% | 0 | 0 | — |
case-14 | fail→pass | 12,101 | 4,938 | -59% | 1 | 1 | 0% | 2,048 | 3,069 | +50% | 0 | 0 | — |
case-15 | pass→pass | 15,935 | 11,910 | -25% | 1 | 1 | 0% | 3,316 | 4,772 | +44% | 0 | 0 | — |
case-16 | fail→pass | 9,431 | 1,964 | -79% | 1 | 1 | 0% | 1,616 | 2,671 | +65% | 0 | 0 | — |
case-17 | pass→pass | 5,138 | 3,075 | -40% | 1 | 1 | 0% | 891 | 2,888 | +224% | 0 | 0 | — |
case-21 | pass→pass | 9,209 | 2,743 | -70% | 1 | 1 | 0% | 1,610 | 2,676 | +66% | 0 | 0 | — |
case-22 | fail→pass | 12,788 | 2,873 | -78% | 1 | 1 | 0% | 1,978 | 2,804 | +42% | 0 | 0 | — |
case-23 | pass→pass | 8,867 | 4,345 | -51% | 1 | 1 | 0% | 1,461 | 3,063 | +110% | 0 | 0 | — |
case-24 | fail→pass | 6,149 | 1,475 | -76% | 1 | 1 | 0% | 1,016 | 2,501 | +146% | 0 | 0 | — |
case-25 | fail→pass | 6,170 | 1,504 | -76% | 1 | 1 | 0% | 1,009 | 2,518 | +150% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 22 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.