@adcp/sdk 12.0.1 → 12.0.3

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.
Files changed (52) hide show
  1. package/dist/lib/index.d.mts +2 -2
  2. package/dist/lib/index.d.ts +2 -2
  3. package/dist/lib/index.d.ts.map +1 -1
  4. package/dist/lib/index.js +2 -0
  5. package/dist/lib/index.js.map +1 -1
  6. package/dist/lib/index.mjs +3 -1
  7. package/dist/lib/index.mjs.map +1 -1
  8. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  9. package/dist/lib/server/adcp-server.d.ts.map +1 -1
  10. package/dist/lib/server/adcp-server.js +18 -0
  11. package/dist/lib/server/adcp-server.js.map +1 -1
  12. package/dist/lib/server/adcp-server.mjs +15 -0
  13. package/dist/lib/server/adcp-server.mjs.map +1 -1
  14. package/dist/lib/server/create-adcp-server.d.mts +24 -0
  15. package/dist/lib/server/create-adcp-server.d.ts +24 -0
  16. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  17. package/dist/lib/server/create-adcp-server.js +24 -2
  18. package/dist/lib/server/create-adcp-server.js.map +1 -1
  19. package/dist/lib/server/create-adcp-server.mjs +29 -2
  20. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  21. package/dist/lib/server/index.d.mts +3 -1
  22. package/dist/lib/server/index.d.ts +3 -1
  23. package/dist/lib/server/index.d.ts.map +1 -1
  24. package/dist/lib/server/index.js +3 -0
  25. package/dist/lib/server/index.js.map +1 -1
  26. package/dist/lib/server/index.mjs +2 -0
  27. package/dist/lib/server/index.mjs.map +1 -1
  28. package/dist/lib/server/legacy/v5/index.d.mts +1 -1
  29. package/dist/lib/server/legacy/v5/index.d.ts +1 -1
  30. package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
  31. package/dist/lib/server/legacy/v5/index.js.map +1 -1
  32. package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
  33. package/dist/lib/server/mcp-app.d.mts +57 -0
  34. package/dist/lib/server/mcp-app.d.ts +58 -0
  35. package/dist/lib/server/mcp-app.d.ts.map +1 -0
  36. package/dist/lib/server/mcp-app.js +110 -0
  37. package/dist/lib/server/mcp-app.js.map +1 -0
  38. package/dist/lib/server/mcp-app.mjs +83 -0
  39. package/dist/lib/server/mcp-app.mjs.map +1 -0
  40. package/dist/lib/server/mcp-modern-server.d.ts.map +1 -1
  41. package/dist/lib/server/mcp-modern-server.js +23 -1
  42. package/dist/lib/server/mcp-modern-server.js.map +1 -1
  43. package/dist/lib/server/mcp-modern-server.mjs +24 -1
  44. package/dist/lib/server/mcp-modern-server.mjs.map +1 -1
  45. package/dist/lib/version.d.mts +3 -3
  46. package/dist/lib/version.d.ts +3 -3
  47. package/dist/lib/version.js +3 -3
  48. package/dist/lib/version.js.map +1 -1
  49. package/dist/lib/version.mjs +3 -3
  50. package/dist/lib/version.mjs.map +1 -1
  51. package/docs/guides/BUILD-AN-AGENT.md +70 -0
  52. package/package.json +1 -1
@@ -562,6 +562,76 @@ createAdcpServerFromPlatform(platform, {
562
562
 
563
563
  See [SIGNING-GUIDE.md](./SIGNING-GUIDE.md) for the full walkthrough: key generation, JWKS publication, brand.json, conformance testing, and KMS-backed production deployment.
564
564
 
565
+ ### Portable MCP Apps for custom tools
566
+
567
+ Use `resources` with custom-tool `_meta.ui` to attach one host-neutral MCP
568
+ App to a tool. The framework registers the `ui://` resource on both legacy
569
+ MCP connections and every modern per-request server reconstruction; the same
570
+ configuration therefore works in compliant Claude, ChatGPT, and future hosts.
571
+
572
+ ```typescript
573
+ import {
574
+ createAdcpServerFromPlatform,
575
+ MCP_APP_RESOURCE_MIME_TYPE,
576
+ } from '@adcp/sdk/server';
577
+
578
+ const server = createAdcpServerFromPlatform(platform, {
579
+ name: 'My Publisher',
580
+ version: '1.0.0',
581
+ resources: [
582
+ {
583
+ name: 'creative_upload',
584
+ uri: 'ui://creative/upload',
585
+ mimeType: MCP_APP_RESOURCE_MIME_TYPE,
586
+ _meta: {
587
+ ui: {
588
+ csp: {
589
+ connectDomains: ['https://uploads.example.com'],
590
+ resourceDomains: ['https://assets.example.com'],
591
+ },
592
+ prefersBorder: true,
593
+ },
594
+ },
595
+ handler: async () => renderUploadApp(),
596
+ },
597
+ ],
598
+ customTools: {
599
+ upload_creative_asset: {
600
+ description: 'Open the creative upload flow.',
601
+ _meta: { ui: { resourceUri: 'ui://creative/upload' } },
602
+ handler: async () => ({
603
+ // Required text-only fallback for hosts without MCP Apps support.
604
+ content: [{ type: 'text', text: 'Upload a creative asset.' }],
605
+ }),
606
+ },
607
+ prepare_creative_upload: {
608
+ _meta: { ui: { visibility: ['app'] } },
609
+ handler: prepareCreativeUpload,
610
+ },
611
+ finalize_creative_upload: {
612
+ _meta: { ui: { visibility: ['app'] } },
613
+ handler: finalizeCreativeUpload,
614
+ },
615
+ },
616
+ });
617
+ ```
618
+
619
+ MCP App resources always use a `ui://` URI and
620
+ `text/html;profile=mcp-app`; the public types and construction-time checks
621
+ reject other shapes. The resource `_meta.ui` object carries CSP domains,
622
+ permissions, a dedicated host domain, and border preference, and is emitted
623
+ consistently by both `resources/list` and `resources/read`.
624
+
625
+ `ui.visibility` is host routing metadata, not an authorization boundary.
626
+ App-only handlers must still authenticate and authorize every request, and
627
+ tools should always return meaningful text content so clients that do not
628
+ negotiate `io.modelcontextprotocol/ui` degrade gracefully. A startup warning
629
+ identifies any tool `resourceUri` that does not match a configured resource.
630
+ Resource handlers intentionally receive no authentication material: the HTML
631
+ bundle must be principal-independent and cache-safe. Fetch tenant data or mint
632
+ short-lived upload URLs through authenticated app-only tools after the app has
633
+ loaded.
634
+
565
635
  ### createTaskCapableServer (Low-Level)
566
636
 
567
637
  For advanced cases where you need direct control over MCP tool registration, schema wiring, and response formatting. `createAdcpServerFromPlatform` calls into this internally.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcp/sdk",
3
- "version": "12.0.1",
3
+ "version": "12.0.3",
4
4
  "description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
5
5
  "workspaces": [
6
6
  ".",