@pancake-apps/server 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-CVG3DAN6.js +172 -0
- package/dist/chunk-CVG3DAN6.js.map +1 -0
- package/dist/index.cjs +274 -71
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/{server-Z5QP7DSX.js → server-MALUPZBT.js} +56 -45
- package/dist/server-MALUPZBT.js.map +1 -0
- package/dist/{stdio-TAQIWN3E.js → stdio-ZTUR5PV4.js} +24 -40
- package/dist/stdio-ZTUR5PV4.js.map +1 -0
- package/package.json +1 -1
- package/dist/server-Z5QP7DSX.js.map +0 -1
- package/dist/stdio-TAQIWN3E.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/mcp.ts","../src/server/dev-proxy.ts","../src/server/routes.ts","../src/server/index.ts"],"names":["resolve"],"mappings":"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","file":"server-Z5QP7DSX.js","sourcesContent":["import type { RequestHandler } from 'express';\nimport type { InternalTool } from '../types/tool.js';\nimport type { UIDefinition } from '../types/protocol.js';\n\n/**\n * UI resource for serving\n */\ninterface UIResource {\n name: string;\n uri: string;\n definition: UIDefinition;\n}\n\n/**\n * MCP handler configuration\n */\ninterface McpHandlerConfig {\n name: string;\n version: string;\n tools: Map<string, InternalTool>;\n uiResources: Map<string, UIResource>;\n executeTool: (toolName: string, input: unknown, metadata?: Record<string, unknown>) => Promise<unknown>;\n}\n\n/**\n * MCP JSON-RPC request structure\n */\ninterface JsonRpcRequest {\n jsonrpc: '2.0';\n id: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\n/**\n * MCP JSON-RPC response structure\n */\ninterface JsonRpcResponse {\n jsonrpc: '2.0';\n id: string | number;\n result?: unknown;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\n/**\n * Convert visibility to MCP audience format\n */\nfunction visibilityToAudience(visibility: 'model' | 'app' | 'both'): string[] {\n switch (visibility) {\n case 'model':\n return ['assistant'];\n case 'app':\n return ['user'];\n case 'both':\n default:\n return ['assistant', 'user'];\n }\n}\n\n/**\n * Create an Express handler for MCP JSON-RPC requests\n */\nexport function createMcpHandler(config: McpHandlerConfig): RequestHandler {\n return async (req, res) => {\n const request = req.body as JsonRpcRequest;\n\n if (request.jsonrpc !== '2.0') {\n res.status(400).json({\n jsonrpc: '2.0',\n id: request.id ?? null,\n error: { code: -32600, message: 'Invalid Request: Not JSON-RPC 2.0' },\n });\n return;\n }\n\n try {\n const result = await handleMethod(config, request.method, request.params ?? {});\n const response: JsonRpcResponse = {\n jsonrpc: '2.0',\n id: request.id,\n result,\n };\n res.json(response);\n } catch (error) {\n const response: JsonRpcResponse = {\n jsonrpc: '2.0',\n id: request.id,\n error: {\n code: -32603,\n message: error instanceof Error ? error.message : 'Internal error',\n data: error instanceof Error ? { stack: error.stack } : undefined,\n },\n };\n res.json(response);\n }\n };\n}\n\n/**\n * Handle MCP method calls\n */\nasync function handleMethod(\n config: McpHandlerConfig,\n method: string,\n params: Record<string, unknown>\n): Promise<unknown> {\n switch (method) {\n case 'initialize':\n return {\n protocolVersion: '2024-11-05',\n capabilities: {\n tools: {},\n resources: {},\n },\n serverInfo: {\n name: config.name,\n version: config.version,\n },\n };\n\n case 'tools/list':\n return {\n tools: Array.from(config.tools.values())\n // Filter out app-only tools (they shouldn't be visible to the model)\n .filter((tool) => tool.visibility !== 'app')\n .map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n annotations: {\n audience: visibilityToAudience(tool.visibility),\n },\n _meta: tool.ui\n ? {\n ui: {\n visibility: visibilityToAudience(tool.visibility),\n resourceUri: getUIResourceUri(tool.name, tool.category),\n },\n }\n : undefined,\n })),\n };\n\n case 'tools/call': {\n const toolName = params['name'] as string;\n const args = (params['arguments'] as Record<string, unknown>) ?? {};\n\n const result = await config.executeTool(toolName, args);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result),\n },\n ],\n structuredContent: result,\n };\n }\n\n case 'resources/list':\n return {\n resources: Array.from(config.uiResources.values()).map((resource) => ({\n uri: resource.uri,\n name: resource.name,\n mimeType: 'text/html;profile=mcp-app',\n _meta: {\n ui: {\n prefersBorder: resource.definition.prefersBorder,\n autoResize: resource.definition.autoResize,\n csp: resource.definition.csp,\n },\n },\n })),\n };\n\n case 'resources/read': {\n const uri = params['uri'] as string;\n const resource = config.uiResources.get(uri);\n\n if (!resource) {\n throw new Error(`Resource not found: ${uri}`);\n }\n\n // Read actual file content\n let htmlContent: string;\n const htmlPath = resource.definition.html;\n\n if (htmlPath.trim().startsWith('<')) {\n // Inline HTML\n htmlContent = htmlPath;\n } else {\n // File path - read content\n const fsPromises = await import('node:fs/promises');\n const pathModule = await import('node:path');\n const fullPath = pathModule.resolve(process.cwd(), htmlPath);\n htmlContent = await fsPromises.readFile(fullPath, 'utf-8');\n }\n\n return {\n contents: [\n {\n uri,\n mimeType: 'text/html',\n text: htmlContent,\n },\n ],\n };\n }\n\n case 'notifications/initialized':\n case 'ping':\n return {};\n\n default:\n throw new Error(`Unknown method: ${method}`);\n }\n}\n\n/**\n * Get the UI resource URI for a tool\n */\nfunction getUIResourceUri(toolName: string, category: string): string {\n // Extract the name without prefix\n const name = toolName.replace(/^(view|action|data|tool):/, '');\n return `pancake://ui/${category}/${name}`;\n}\n","import type { RequestHandler } from 'express';\nimport type { DevServerConfig } from '../types/app.js';\n\n/**\n * Check if running in development mode\n */\nexport function isDevelopment(): boolean {\n return process.env['NODE_ENV'] !== 'production';\n}\n\n/**\n * Create a proxy middleware for Vite dev server\n */\nexport function createViteProxy(config: DevServerConfig): RequestHandler {\n const vitePort = config.vitePort ?? 5173;\n const viteUrl = `http://localhost:${vitePort}`;\n\n // Paths to proxy to Vite\n const vitePaths = [\n '/@vite/',\n '/@react-refresh',\n '/assets/',\n '/src/',\n '/__vite_ping',\n '/@fs/',\n '/node_modules/.vite/',\n ];\n\n return async (req, res, next) => {\n const shouldProxy = vitePaths.some((p) => req.path.startsWith(p));\n\n if (!shouldProxy) {\n next();\n return;\n }\n\n try {\n // Dynamically import node-fetch for proxying\n const targetUrl = `${viteUrl}${req.url}`;\n const response = await fetch(targetUrl, {\n method: req.method,\n headers: {\n ...Object.fromEntries(\n Object.entries(req.headers).filter(([key]) =>\n !['host', 'connection'].includes(key.toLowerCase())\n )\n ),\n } as Record<string, string>,\n });\n\n // Copy response headers\n response.headers.forEach((value, key) => {\n res.setHeader(key, value);\n });\n\n res.status(response.status);\n\n // Stream response body\n if (response.body) {\n const reader = response.body.getReader();\n const pump = async (): Promise<void> => {\n const { done, value } = await reader.read();\n if (done) {\n res.end();\n return;\n }\n res.write(Buffer.from(value));\n return pump();\n };\n await pump();\n } else {\n res.end();\n }\n } catch (error) {\n // Vite might not be running, pass through\n if (isDevelopment()) {\n console.warn(`[Pancake] Vite proxy failed for ${req.path}:`, error);\n }\n next();\n }\n };\n}\n\n/**\n * Generate HTML template with Vite HMR support\n */\nexport function generateHMRTemplate(serverUrl: string, viewName: string): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${viewName}</title>\n <base href=\"${serverUrl}/\" />\n <script type=\"module\">\n import { injectIntoGlobalHook } from \"${serverUrl}/@react-refresh\";\n injectIntoGlobalHook(window);\n window.$RefreshReg$ = () => {};\n window.$RefreshSig$ = () => (type) => type;\n window.__vite_plugin_react_preamble_installed__ = true;\n </script>\n <script type=\"module\" src=\"${serverUrl}/@vite/client\"></script>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\">\n // Initialize Pancake client before loading the view\n import('${serverUrl}/src/pancake-init.ts')\n .then(async (mod) => {\n if (mod.init) await mod.init();\n })\n .catch(() => {\n // pancake-init.ts might not exist, that's ok\n })\n .finally(() => {\n import('${serverUrl}/src/views/${viewName}/index.tsx')\n .catch(() => import('${serverUrl}/src/views/${viewName}.tsx'))\n .catch(() => import('${serverUrl}/src/views/${viewName}/index.ts'))\n .catch(() => import('${serverUrl}/src/views/${viewName}.ts'))\n .catch((err) => {\n console.error('Failed to load view:', err);\n document.body.innerHTML = '<pre style=\"color: red;\">Failed to load view: ' + err.message + '</pre>';\n });\n });\n </script>\n </body>\n</html>`;\n}\n","import { Router } from 'express';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { UIDefinition } from '../types/protocol.js';\nimport type { DevServerConfig } from '../types/app.js';\nimport { generateHMRTemplate, isDevelopment } from './dev-proxy.js';\n\n/**\n * UI resource for serving\n */\ninterface UIResource {\n name: string;\n uri: string;\n definition: UIDefinition;\n}\n\n/**\n * Create routes for serving UI resources\n */\nexport function createUIRoutes(\n uiResources: Map<string, UIResource>,\n devServerConfig?: DevServerConfig\n): Router {\n const router = Router();\n\n // Serve UI by name\n router.get('/:category/:name', async (req, res) => {\n const { category, name } = req.params;\n const uri = `pancake://ui/${category}/${name}`;\n const resource = uiResources.get(uri);\n\n if (!resource) {\n res.status(404).json({ error: `UI not found: ${category}/${name}` });\n return;\n }\n\n try {\n const html = await getUIHtml(resource.definition, name, devServerConfig);\n res.type('html').send(html);\n } catch (error) {\n res.status(500).json({\n error: 'Failed to load UI',\n details: error instanceof Error ? error.message : String(error),\n });\n }\n });\n\n // Short form: /ui/:name (defaults to view category)\n router.get('/:name', async (req, res) => {\n const { name } = req.params;\n\n // Try view first, then action, then tool\n for (const category of ['view', 'action', 'tool']) {\n const uri = `pancake://ui/${category}/${name}`;\n const resource = uiResources.get(uri);\n\n if (resource) {\n try {\n const html = await getUIHtml(resource.definition, name, devServerConfig);\n res.type('html').send(html);\n return;\n } catch (error) {\n res.status(500).json({\n error: 'Failed to load UI',\n details: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n }\n\n res.status(404).json({ error: `UI not found: ${name}` });\n });\n\n return router;\n}\n\n/**\n * Get HTML content for a UI definition\n */\nasync function getUIHtml(\n ui: UIDefinition,\n viewName: string,\n devServerConfig?: DevServerConfig\n): Promise<string> {\n // In development mode, generate HMR template\n if (isDevelopment() && devServerConfig) {\n const vitePort = devServerConfig.vitePort ?? 5173;\n return generateHMRTemplate(`http://localhost:${vitePort}`, viewName);\n }\n\n // Check if html is inline (starts with <)\n if (ui.html.trim().startsWith('<')) {\n return ui.html;\n }\n\n // Otherwise, read from file\n const htmlPath = path.resolve(process.cwd(), ui.html);\n const content = await fs.readFile(htmlPath, 'utf-8');\n return content;\n}\n","import express, { type Express } from 'express';\nimport type { InternalTool } from '../types/tool.js';\nimport type { UIDefinition } from '../types/protocol.js';\nimport type { EventMap, CorsConfig, DevServerConfig } from '../types/app.js';\nimport type { ToolContext } from '../types/context.js';\nimport { createMcpHandler } from './mcp.js';\nimport { createUIRoutes } from './routes.js';\nimport { createViteProxy, isDevelopment } from './dev-proxy.js';\n\n/**\n * UI resource for serving\n */\ninterface UIResource {\n name: string;\n uri: string;\n definition: UIDefinition;\n}\n\n/**\n * Middleware chain interface\n */\ninterface MiddlewareChain {\n execute(\n ctx: { toolName: string; input: unknown; metadata: Record<string, unknown> },\n handler: () => Promise<unknown>\n ): Promise<unknown>;\n}\n\n/**\n * Event emitter interface\n */\ninterface TypedEventEmitter<TEvents extends { [K in keyof TEvents]: unknown }> {\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void;\n}\n\n/**\n * Server configuration\n */\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: Map<string, InternalTool>;\n uiResources: Map<string, UIResource>;\n middlewareChain: MiddlewareChain;\n events: TypedEventEmitter<EventMap>;\n config?: {\n cors?: CorsConfig;\n debug?: boolean;\n serverRoute?: string;\n devServer?: DevServerConfig;\n };\n port: number;\n host: string;\n transport: 'http' | 'stdio' | 'sse';\n // Names for debug output\n viewNames?: string[];\n actionNames?: string[];\n dataNames?: string[];\n}\n\n/**\n * Generate a unique request ID\n */\nfunction generateRequestId(): string {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`;\n}\n\n/**\n * Create the server instance\n */\nexport async function createServer(config: ServerConfig): Promise<{ close: () => Promise<void> }> {\n const app: Express = express();\n\n // Middleware\n app.use(express.json());\n\n // CORS handling\n if (config.config?.cors) {\n const corsConfig = config.config.cors;\n app.use((req, res, next) => {\n const origin = corsConfig.origin;\n if (origin === true) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n } else if (typeof origin === 'string') {\n res.setHeader('Access-Control-Allow-Origin', origin);\n } else if (Array.isArray(origin)) {\n const requestOrigin = req.headers.origin;\n if (requestOrigin && origin.includes(requestOrigin)) {\n res.setHeader('Access-Control-Allow-Origin', requestOrigin);\n }\n }\n\n if (corsConfig.credentials) {\n res.setHeader('Access-Control-Allow-Credentials', 'true');\n }\n if (corsConfig.methods) {\n res.setHeader('Access-Control-Allow-Methods', corsConfig.methods.join(', '));\n }\n if (corsConfig.allowedHeaders) {\n res.setHeader('Access-Control-Allow-Headers', corsConfig.allowedHeaders.join(', '));\n }\n\n if (req.method === 'OPTIONS') {\n res.status(204).end();\n return;\n }\n\n next();\n });\n }\n\n // Development mode: Vite HMR proxy\n if (isDevelopment() && config.config?.devServer) {\n const viteProxy = createViteProxy(config.config.devServer);\n app.use(viteProxy);\n }\n\n // UI serving routes\n const uiRoutes = createUIRoutes(config.uiResources, config.config?.devServer);\n app.use('/ui', uiRoutes);\n\n // Tool execution helper\n const executeTool = async (\n toolName: string,\n input: unknown,\n metadata: Record<string, unknown> = {}\n ): Promise<unknown> => {\n const tool = config.tools.get(toolName);\n if (!tool) {\n throw new Error(`Unknown tool: ${toolName}`);\n }\n\n const ctx: ToolContext = {\n requestId: generateRequestId(),\n toolName,\n metadata,\n };\n\n const startTime = Date.now();\n\n try {\n const result = await config.middlewareChain.execute(\n { toolName, input, metadata },\n () => tool.handler(input, ctx)\n );\n\n config.events.emit('tool:success', {\n toolName,\n result,\n durationMs: Date.now() - startTime,\n });\n\n return result;\n } catch (error) {\n config.events.emit('tool:error', {\n toolName,\n error: error as Error,\n durationMs: Date.now() - startTime,\n });\n throw error;\n }\n };\n\n // MCP endpoint\n const mcpRoute = config.config?.serverRoute ?? '/mcp';\n const mcpHandler = createMcpHandler({\n name: config.name,\n version: config.version,\n tools: config.tools,\n uiResources: config.uiResources,\n executeTool,\n });\n app.post(mcpRoute, mcpHandler);\n\n // Health check\n app.get('/health', (_req, res) => {\n res.json({ status: 'ok', name: config.name, version: config.version });\n });\n\n // Start server based on transport\n if (config.transport === 'stdio') {\n // Import and start stdio transport\n const { startStdioServer } = await import('./stdio.js');\n return startStdioServer({\n name: config.name,\n version: config.version,\n tools: config.tools,\n uiResources: config.uiResources,\n executeTool,\n });\n }\n\n // HTTP server\n return new Promise((resolve) => {\n const httpServer = app.listen(config.port, config.host, () => {\n if (config.config?.debug) {\n const baseUrl = `http://localhost:${config.port}`;\n const viewNames = config.viewNames ?? [];\n const actionNames = config.actionNames ?? [];\n const dataNames = config.dataNames ?? [];\n\n console.log('');\n console.log(` \\x1b[1m\\x1b[32m✓\\x1b[0m \\x1b[1m${config.name}\\x1b[0m is running`);\n console.log('');\n console.log(` \\x1b[2m➜\\x1b[0m \\x1b[1mServer:\\x1b[0m ${baseUrl}`);\n console.log(` \\x1b[2m➜\\x1b[0m \\x1b[1mMCP:\\x1b[0m ${baseUrl}${mcpRoute}`);\n if (viewNames.length > 0) {\n console.log(` \\x1b[2m➜\\x1b[0m \\x1b[1mViews:\\x1b[0m ${viewNames.map(v => `${baseUrl}/ui/${v}`).join('\\n ')}`);\n }\n console.log('');\n console.log(` \\x1b[2mRegistered:\\x1b[0m`);\n console.log(` ${viewNames.length} view${viewNames.length !== 1 ? 's' : ''}${viewNames.length > 0 ? ` (${viewNames.join(', ')})` : ''}`);\n console.log(` ${actionNames.length} action${actionNames.length !== 1 ? 's' : ''}${actionNames.length > 0 ? ` (${actionNames.join(', ')})` : ''}`);\n console.log(` ${dataNames.length} data fetcher${dataNames.length !== 1 ? 's' : ''}${dataNames.length > 0 ? ` (${dataNames.join(', ')})` : ''}`);\n console.log('');\n console.log(` \\x1b[2mNext steps:\\x1b[0m`);\n console.log(` \\x1b[36m1.\\x1b[0m Open a view in your browser: ${baseUrl}/ui/${viewNames[0] || 'yourView'}`);\n console.log(` \\x1b[36m2.\\x1b[0m Connect an MCP client to: ${baseUrl}${mcpRoute}`);\n console.log(` \\x1b[36m3.\\x1b[0m Or use Claude Desktop with this server URL`);\n console.log('');\n }\n\n resolve({\n close: () => new Promise((resolveClose) => {\n httpServer.close(() => resolveClose());\n }),\n });\n });\n });\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/stdio.ts"],"names":[],"mappings":";;;;;AAkCA,SAAS,qBAAqB,UAAA,EAAgD;AAC5E,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,WAAW,CAAA;AAAA,IACrB,KAAK,KAAA;AACH,MAAA,OAAO,CAAC,MAAM,CAAA;AAAA,IAChB,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAO,CAAC,aAAa,MAAM,CAAA;AAAA;AAEjC;AAKA,eAAsB,iBACpB,MAAA,EACyC;AACzC,EAAA,MAAM,SAAS,IAAI,MAAA;AAAA,IACjB;AAAA,MACE,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA;AAAA,MACE,YAAA,EAAc;AAAA,QACZ,OAAO,EAAC;AAAA,QACR,WAAW;AAAC;AACd;AACF,GACF;AAGA,EAAA,MAAA,CAAO,iBAAA;AAAA,IACL,sBAAA;AAAA,IACA,YAAY;AACV,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UACtD,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,WAAA,EAAa;AAAA,YACX,QAAA,EAAU,oBAAA,CAAqB,IAAA,CAAK,UAAU;AAAA,WAChD;AAAA,UACA,KAAA,EAAO,KAAK,EAAA,GACR;AAAA,YACE,EAAA,EAAI;AAAA,cACF,UAAA,EAAY,oBAAA,CAAqB,IAAA,CAAK,UAAU,CAAA;AAAA,cAChD,WAAA,EAAa,gBAAA,CAAiB,IAAA,CAAK,IAAA,EAAM,KAAK,QAAQ;AAAA;AACxD,WACF,GACA;AAAA,SACN,CAAE;AAAA,OACJ;AAAA,IACF;AAAA,GACF;AAGA,EAAA,MAAA,CAAO,iBAAA;AAAA,IACL,qBAAA;AAAA,IACA,OAAO,OAAA,KAAY;AACjB,MAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,EAAC,KAAM,OAAA,CAAQ,MAAA;AAC/C,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,WAAA,CAAY,MAAM,IAAI,CAAA;AAElD,MAAA,OAAO;AAAA,QACL,OAAA,EAAS;AAAA,UACP;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAM;AAAA;AAC7B,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAAA,GACF;AAGA,EAAA,MAAA,CAAO,iBAAA;AAAA,IACL,0BAAA;AAAA,IACA,YAAY;AACV,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,UACpE,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAM,QAAA,CAAS,IAAA;AAAA,UACf,QAAA,EAAU,2BAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,EAAA,EAAI;AAAA,cACF,aAAA,EAAe,SAAS,UAAA,CAAW,aAAA;AAAA,cACnC,UAAA,EAAY,SAAS,UAAA,CAAW,UAAA;AAAA,cAChC,GAAA,EAAK,SAAS,UAAA,CAAW;AAAA;AAC3B;AACF,SACF,CAAE;AAAA,OACJ;AAAA,IACF;AAAA,GACF;AAGA,EAAA,MAAA,CAAO,iBAAA;AAAA,IACL,yBAAA;AAAA,IACA,OAAO,OAAA,KAAY;AACjB,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAE3C,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAE,CAAA;AAAA,MAC9C;AAEA,MAAA,OAAO;AAAA,QACL,QAAA,EAAU;AAAA,UACR;AAAA,YACE,GAAA;AAAA,YACA,QAAA,EAAU,WAAA;AAAA,YACV,IAAA,EAAM,SAAS,UAAA,CAAW;AAAA;AAC5B;AACF,OACF;AAAA,IACF;AAAA,GACF;AAGA,EAAA,MAAM,SAAA,GAAY,IAAI,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAE9B,EAAA,OAAO;AAAA,IACL,OAAO,YAAY;AACjB,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB;AAAA,GACF;AACF;AAKA,SAAS,gBAAA,CAAiB,UAAkB,QAAA,EAA0B;AACpE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,2BAAA,EAA6B,EAAE,CAAA;AAC7D,EAAA,OAAO,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACzC","file":"stdio-TAQIWN3E.js","sourcesContent":["import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n ListToolsRequestSchema,\n CallToolRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type { InternalTool } from '../types/tool.js';\nimport type { UIDefinition } from '../types/protocol.js';\n\n/**\n * UI resource for serving\n */\ninterface UIResource {\n name: string;\n uri: string;\n definition: UIDefinition;\n}\n\n/**\n * Stdio server configuration\n */\ninterface StdioServerConfig {\n name: string;\n version: string;\n tools: Map<string, InternalTool>;\n uiResources: Map<string, UIResource>;\n executeTool: (toolName: string, input: unknown, metadata?: Record<string, unknown>) => Promise<unknown>;\n}\n\n/**\n * Convert visibility to MCP audience format\n */\nfunction visibilityToAudience(visibility: 'model' | 'app' | 'both'): string[] {\n switch (visibility) {\n case 'model':\n return ['assistant'];\n case 'app':\n return ['user'];\n case 'both':\n default:\n return ['assistant', 'user'];\n }\n}\n\n/**\n * Start the MCP server using stdio transport\n */\nexport async function startStdioServer(\n config: StdioServerConfig\n): Promise<{ close: () => Promise<void> }> {\n const server = new Server(\n {\n name: config.name,\n version: config.version,\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n );\n\n // Handle list tools\n server.setRequestHandler(\n ListToolsRequestSchema,\n async () => {\n return {\n tools: Array.from(config.tools.values()).map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n annotations: {\n audience: visibilityToAudience(tool.visibility),\n },\n _meta: tool.ui\n ? {\n ui: {\n visibility: visibilityToAudience(tool.visibility),\n resourceUri: getUIResourceUri(tool.name, tool.category),\n },\n }\n : undefined,\n })),\n };\n }\n );\n\n // Handle call tool\n server.setRequestHandler(\n CallToolRequestSchema,\n async (request) => {\n const { name, arguments: args = {} } = request.params;\n const result = await config.executeTool(name, args);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result),\n },\n ],\n structuredContent: result,\n };\n }\n );\n\n // Handle list resources\n server.setRequestHandler(\n ListResourcesRequestSchema,\n async () => {\n return {\n resources: Array.from(config.uiResources.values()).map((resource) => ({\n uri: resource.uri,\n name: resource.name,\n mimeType: 'text/html;profile=mcp-app',\n _meta: {\n ui: {\n prefersBorder: resource.definition.prefersBorder,\n autoResize: resource.definition.autoResize,\n csp: resource.definition.csp,\n },\n },\n })),\n };\n }\n );\n\n // Handle read resource\n server.setRequestHandler(\n ReadResourceRequestSchema,\n async (request) => {\n const { uri } = request.params;\n const resource = config.uiResources.get(uri);\n\n if (!resource) {\n throw new Error(`Resource not found: ${uri}`);\n }\n\n return {\n contents: [\n {\n uri,\n mimeType: 'text/html',\n text: resource.definition.html,\n },\n ],\n };\n }\n );\n\n // Connect to stdio transport\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n return {\n close: async () => {\n await server.close();\n },\n };\n}\n\n/**\n * Get the UI resource URI for a tool\n */\nfunction getUIResourceUri(toolName: string, category: string): string {\n const name = toolName.replace(/^(view|action|data|tool):/, '');\n return `pancake://ui/${category}/${name}`;\n}\n"]}
|