UNPKG

@withpica/mcp-server

Version:

MCP Server for withPICA — enables AI assistants to interact with your withPICA music catalog

69 lines (62 loc) • 2.63 kB
// Copyright (c) 2025-2026 Withpica Ltd. All rights reserved. /** * pica_release_show MCP App card — Phase 3 stub render. * * Renders three fields from `structuredContent`: title, markdown summary, * cover image. No interactive affordances yet — full track-list expand, * inline streaming embeds, and per-track agent links are queued under * the ADR-200 Phase 1.x backlog. * * MCP Apps clients (Claude Desktop, Cursor) iframe this. Every other * client ignores `_meta.ui` and renders the universal floor (image + * text content blocks) per the 2025-11-25 image primitive. * * DOM API only — never innerHTML. */ import { buildAppHtml } from "./shared.js"; const RELEASE_BODY = ` <div class="stack gap-6"> <div id="rel-cover-wrap" style="display: none; text-align: center;"> <img id="rel-cover" alt="release cover art" style="max-width: 320px; max-height: 320px; border-radius: 12px; border: 1px solid var(--card-border);" /> </div> <header> <h1 class="heading heading-lg" id="rel-title">release</h1> </header> <article id="rel-summary" class="card-flat" style="padding: 16px 20px;"> <div id="rel-markdown" class="text-primary" style="white-space: pre-wrap; font-size: 14px; line-height: 1.6;"></div> </article> </div> <style> #rel-cover { display: block; margin: 0 auto; } #rel-markdown { font-family: inherit; } #rel-summary { background: rgba(255,255,255,0.03); } </style> `; const RELEASE_JS = ` var relState = { title: null, markdown: null, cover_base64: null, cover_mime_type: null }; function relRender() { var titleEl = document.getElementById("rel-title"); if (titleEl && relState.title) titleEl.textContent = relState.title; var mdEl = document.getElementById("rel-markdown"); if (mdEl && relState.markdown) mdEl.textContent = relState.markdown; if (relState.cover_base64 && relState.cover_mime_type) { var coverEl = document.getElementById("rel-cover"); var wrapEl = document.getElementById("rel-cover-wrap"); if (coverEl && wrapEl) { coverEl.src = "data:" + relState.cover_mime_type + ";base64," + relState.cover_base64; wrapEl.style.display = "block"; } } } window.onPicaToolResult = function (data) { if (!data) return; if (data.title) relState.title = data.title; if (data.markdown) relState.markdown = data.markdown; if (data.cover_base64) relState.cover_base64 = data.cover_base64; if (data.cover_mime_type) relState.cover_mime_type = data.cover_mime_type; relRender(); }; `; export const RELEASE_HTML = buildAppHtml("pica — release", RELEASE_BODY, RELEASE_JS); //# sourceMappingURL=release.js.map