#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const appUri = "ui://conformance/app";
const appModuleUrl =
"https://cdn.jsdelivr.net/npm/@modelcontextprotocol/ext-apps@1.7.5/dist/src/app-with-deps.js";
const appHtml = `
`;
const server = new McpServer({ name: "mcp-app-conformance", version: "1.0.0" });
const show = server.tool("show", "Show the conformance app", async () => ({
content: [{ type: "text", text: "initial-result" }],
structuredContent: { value: "initial-result" },
}));
show.update({ _meta: { ui: { resourceUri: appUri } } });
const appOnly = server.tool("app_companion", "App-only companion", async () => ({
content: [{ type: "text", text: "companion-called" }],
structuredContent: { value: "companion-called" },
}));
appOnly.update({ _meta: { ui: { visibility: ["app"] } } });
server.registerResource(
"conformance_app",
appUri,
{ mimeType: "text/html;profile=mcp-app" },
async (uri) => ({
contents: [
{
uri: uri.href,
mimeType: "text/html;profile=mcp-app",
text: appHtml,
_meta: { ui: { csp: { resourceDomains: ["https://cdn.jsdelivr.net"] } } },
},
],
}),
);
server.registerResource(
"conformance_data",
"data://conformance/value",
{ mimeType: "text/plain" },
async (uri) => ({
contents: [{ uri: uri.href, mimeType: "text/plain", text: "resource-ok" }],
}),
);
await server.connect(new StdioServerTransport());