@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
JavaScript
// 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