chore: stable spec release 2026-01-26 and SDK v1.0.0 (#362)

* chore: add stable spec release 2026-01-26

- Use git mv to copy specification from draft to specification/2026-01-26/apps.mdx (preserves history)
- Update status from 'Draft' to 'Stable (2026-01-26)'
- Add specification version table to README
- Update Resources section with links to both stable and draft specs

* chore: bump version to 1.0.0

- Update main package version from 0.4.2 to 1.0.0
- Update all example package versions to 1.0.0
- Regenerate package-lock.json

* prettier

* chore: align protocol version with spec release 2026-01-26

- Add 'Protocol Version: 2026-01-26' to spec header
- Update LATEST_PROTOCOL_VERSION from '2025-11-21' to '2026-01-26'
- Update spec examples to use '2026-01-26' protocol version
- Add '2025-11-21' to SUPPORTED_PROTOCOL_VERSIONS for backwards compatibility

* chore: update spec references to stable 2026-01-26

- Update typedoc.config.mjs navigation link
- Update docs/overview.md spec links (10 occurrences)
- Update plugins/mcp-apps/skills/create-mcp-app/SKILL.md spec link
- Update src/spec.types.ts @see links
- Update AGENTS.md spec path
- Regenerate src/generated/schema.ts with updated links

* chore: simplify versioning - first stable release

- Remove backwards compatibility version (2025-11-21) - this is the first stable release
- Remove redundant 'Protocol Version' header - spec version IS the protocol version

* chore: add history reference comment to stable spec
This commit is contained in:
Olivier Chafik 2026-01-26 17:31:33 +00:00 • committed by GitHub
commit 298e884ec3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
53 changed files with 1935 additions and 91 deletions

View file

@ -10,7 +10,7 @@ Key abstractions:
- **Host** - Chat client embedding the iframe, uses `AppBridge` class to proxy MCP requests - **Host** - Chat client embedding the iframe, uses `AppBridge` class to proxy MCP requests
- **Server** - MCP server that registers tools/resources with UI metadata - **Server** - MCP server that registers tools/resources with UI metadata
Specification (draft): `specification/draft/apps.mdx` Specification (stable): `specification/2026-01-26/apps.mdx`
## Commands ## Commands

View file

@ -2,7 +2,14 @@
[![npm version](https://img.shields.io/npm/v/@modelcontextprotocol/ext-apps.svg)](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps) [![API Documentation](https://img.shields.io/badge/docs-API%20Reference-blue)](https://modelcontextprotocol.github.io/ext-apps/api/) [![npm version](https://img.shields.io/npm/v/@modelcontextprotocol/ext-apps.svg)](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps) [![API Documentation](https://img.shields.io/badge/docs-API%20Reference-blue)](https://modelcontextprotocol.github.io/ext-apps/api/)
This repo contains the SDK and [specification](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx) for MCP Apps Extension ([SEP-1865](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865)). This repo contains the SDK and specification for MCP Apps Extension ([SEP-1865](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865)).
## Specification
| Version | Status | Link |
| -------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **2026-01-26** | Stable | [specification/2026-01-26/apps.mdx](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx) |
| draft | Development | [specification/draft/apps.mdx](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx) |
MCP Apps are a proposed standard inspired by [MCP-UI](https://mcpui.dev/) and [OpenAI's Apps SDK](https://developers.openai.com/apps-sdk/) to allow MCP Servers to display interactive UI elements in conversational MCP clients / chatbots. MCP Apps are a proposed standard inspired by [MCP-UI](https://mcpui.dev/) and [OpenAI's Apps SDK](https://developers.openai.com/apps-sdk/) to allow MCP Servers to display interactive UI elements in conversational MCP clients / chatbots.
@ -479,11 +486,17 @@ Then configure your MCP client to build and run the local server. Replace `~/cod
}, },
"qr": { "qr": {
"command": "bash", "command": "bash",
"args": ["-c", "uv run ~/code/ext-apps/examples/qr-server/server.py --stdio"] "args": [
"-c",
"uv run ~/code/ext-apps/examples/qr-server/server.py --stdio"
]
}, },
"say": { "say": {
"command": "bash", "command": "bash",
"args": ["-c", "uv run --index https://pypi.org/simple ~/code/ext-apps/examples/say-server/server.py --stdio"] "args": [
"-c",
"uv run --index https://pypi.org/simple ~/code/ext-apps/examples/say-server/server.py --stdio"
]
} }
} }
} }
@ -497,5 +510,5 @@ This configuration rebuilds each server on launch, ensuring your local changes a
- [Quickstart Guide](https://modelcontextprotocol.github.io/ext-apps/api/documents/Quickstart.html) - [Quickstart Guide](https://modelcontextprotocol.github.io/ext-apps/api/documents/Quickstart.html)
- [API Documentation](https://modelcontextprotocol.github.io/ext-apps/api/) - [API Documentation](https://modelcontextprotocol.github.io/ext-apps/api/)
- [Draft Specification](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx) - [Specification (2026-01-26)](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx) ([Draft](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx))
- [SEP-1865 Discussion](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865) - [SEP-1865 Discussion](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865)

View file

@ -25,7 +25,7 @@ MCP Apps is designed for graceful degradation. Hosts advertise their UI support
This is fundamental: UI is a progressive enhancement, not a requirement. Your server works everywhere; hosts that support UI get a richer experience. This is fundamental: UI is a progressive enhancement, not a requirement. Your server works everywhere; hosts that support UI get a richer experience.
See the [Client<>Server Capability Negotiation](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#clientserver-capability-negotiation) section of the specification. See the [Client<>Server Capability Negotiation](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#clientserver-capability-negotiation) section of the specification.
## Architecture ## Architecture
@ -96,7 +96,7 @@ sequenceDiagram
4. **Interactive phase** — The user interacts with the View. The View can call tools, send messages, or update context. 4. **Interactive phase** — The user interacts with the View. The View can call tools, send messages, or update context.
5. **Teardown** — Before unmounting, the Host notifies the View so it can save state or release resources. 5. **Teardown** — Before unmounting, the Host notifies the View so it can save state or release resources.
See the [Lifecycle](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#lifecycle) section of the specification for the complete sequence diagrams. See the [Lifecycle](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#lifecycle) section of the specification for the complete sequence diagrams.
## UI Resources ## UI Resources
@ -108,7 +108,7 @@ Resources are declared upfront, during tool registration. This design enables:
- **Separation of concerns** — Templates (presentation) are separate from tool results (data) - **Separation of concerns** — Templates (presentation) are separate from tool results (data)
- **Review** — Hosts can inspect UI templates during connection setup - **Review** — Hosts can inspect UI templates during connection setup
See the [UI Resource Format](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#ui-resource-format) section of the specification for the full schema. See the [UI Resource Format](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#ui-resource-format) section of the specification for the full schema.
## Tool-UI Linkage ## Tool-UI Linkage
@ -126,7 +126,7 @@ When this tool is called, the Host:
2. Renders it in a sandboxed iframe 2. Renders it in a sandboxed iframe
3. Passes the tool arguments and results to the View 3. Passes the tool arguments and results to the View
See the [Resource Discovery](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#resource-discovery) section of the specification for details. See the [Resource Discovery](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#resource-discovery) section of the specification for details.
## Bidirectional Communication ## Bidirectional Communication
@ -146,7 +146,7 @@ Views communicate with Hosts using JSON-RPC over [`postMessage`](https://develop
- Open external links (`ui/open-link`) - Open external links (`ui/open-link`)
See the {@link app!App} class for the View-side API and the [Communication Protocol](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#communication-protocol) section of the specification. See the {@link app!App} class for the View-side API and the [Communication Protocol](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#communication-protocol) section of the specification.
## Tool Visibility ## Tool Visibility
@ -168,7 +168,7 @@ Views use this context to adapt their presentation. For example, a chart might u
The Host notifies Views when context changes (e.g., the user toggles dark mode), allowing dynamic updates without reloading. The Host notifies Views when context changes (e.g., the user toggles dark mode), allowing dynamic updates without reloading.
See the [Host Context](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#host-context-in-mcpuiinitializeresult) section of the specification for the full schema. See the [Host Context](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#host-context-in-mcpuiinitializeresult) section of the specification for the full schema.
## Theming ## Theming
@ -183,7 +183,7 @@ Hosts provide CSS custom properties for colors, typography, and borders. Views u
Theme changes (light/dark toggle) are sent via notifications, allowing Views to update dynamically. Theme changes (light/dark toggle) are sent via notifications, allowing Views to update dynamically.
See the [Theming](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#theming) section of the specification for the full list of CSS variables. See the [Theming](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#theming) section of the specification for the full list of CSS variables.
## Display Modes ## Display Modes
@ -195,7 +195,7 @@ Views can be displayed in different modes:
Views declare which modes they support; Hosts declare which they can provide. Views can request mode changes, but the Host decides whether to honor them — the Host always has final say over its own UI. Views declare which modes they support; Hosts declare which they can provide. Views can request mode changes, but the Host decides whether to honor them — the Host always has final say over its own UI.
See the [Display Modes](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#display-modes) section of the specification. See the [Display Modes](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#display-modes) section of the specification.
## Security ## Security
@ -203,9 +203,9 @@ All Views run in sandboxed iframes with no access to the Host's DOM, cookies, or
Servers declare which external domains their UI needs via [CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) metadata. Hosts enforce these declarations — if no domains are declared, no external connections are allowed. This "restrictive by default" approach prevents data exfiltration to undeclared servers. Servers declare which external domains their UI needs via [CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) metadata. Hosts enforce these declarations — if no domains are declared, no external connections are allowed. This "restrictive by default" approach prevents data exfiltration to undeclared servers.
See the [Security Implications](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#security-implications) section of the specification for the threat model and mitigations. See the [Security Implications](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx#security-implications) section of the specification for the threat model and mitigations.
## Learn More ## Learn More
- [Specification](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx) — Full protocol specification - [Specification](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx) — Full protocol specification
- [Quickstart](./quickstart.md) — Build your first MCP App - [Quickstart](./quickstart.md) — Build your first MCP App

View file

@ -1,7 +1,7 @@
{ {
"homepage": "https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/basic-host", "homepage": "https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/basic-host",
"name": "@modelcontextprotocol/ext-apps-basic-host", "name": "@modelcontextprotocol/ext-apps-basic-host",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "tsc --noEmit && concurrently \"cross-env INPUT=index.html vite build\" \"cross-env INPUT=sandbox.html vite build\"", "build": "tsc --noEmit && concurrently \"cross-env INPUT=index.html vite build\" \"cross-env INPUT=sandbox.html vite build\"",

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"basic-preact": { "basic-preact": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/basic-server-preact && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/basic-server-preact && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-basic-preact", "name": "@modelcontextprotocol/server-basic-preact",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Basic MCP App Server example using Preact", "description": "Basic MCP App Server example using Preact",
"repository": { "repository": {

View file

@ -37,7 +37,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"basic-react": { "basic-react": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/basic-server-react && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/basic-server-react && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-basic-react", "name": "@modelcontextprotocol/server-basic-react",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Basic MCP App Server example using React", "description": "Basic MCP App Server example using React",
"repository": { "repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"basic-solid": { "basic-solid": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/basic-server-solid && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/basic-server-solid && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-basic-solid", "name": "@modelcontextprotocol/server-basic-solid",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Basic MCP App Server example using Solid", "description": "Basic MCP App Server example using Solid",
"repository": { "repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"basic-svelte": { "basic-svelte": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/basic-server-svelte && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/basic-server-svelte && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-basic-svelte", "name": "@modelcontextprotocol/server-basic-svelte",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Basic MCP App Server example using Svelte", "description": "Basic MCP App Server example using Svelte",
"repository": { "repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"basic-vanillajs": { "basic-vanillajs": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/basic-server-vanillajs && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/basic-server-vanillajs && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-basic-vanillajs", "name": "@modelcontextprotocol/server-basic-vanillajs",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Basic MCP App Server example using vanilla JavaScript", "description": "Basic MCP App Server example using vanilla JavaScript",
"repository": { "repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"basic-vue": { "basic-vue": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/basic-server-vue && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/basic-server-vue && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-basic-vue", "name": "@modelcontextprotocol/server-basic-vue",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Basic MCP App Server example using Vue", "description": "Basic MCP App Server example using Vue",
"repository": { "repository": {

View file

@ -40,7 +40,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"budget-allocator": { "budget-allocator": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/budget-allocator-server && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/budget-allocator-server && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-budget-allocator", "name": "@modelcontextprotocol/server-budget-allocator",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Budget allocator MCP App Server with interactive visualization", "description": "Budget allocator MCP App Server with interactive visualization",
"repository": { "repository": {

View file

@ -40,7 +40,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": { "mcpServers": {
"cohort-heatmap": { "cohort-heatmap": {
"command": "bash", "command": "bash",
"args": ["-c", "cd ~/code/ext-apps/examples/cohort-heatmap-server && npm run build >&2 && node dist/index.js --stdio"] "args": [
"-c",
"cd ~/code/ext-apps/examples/cohort-heatmap-server && npm run build >&2 && node dist/index.js --stdio"
]
} }
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@modelcontextprotocol/server-cohort-heatmap", "name": "@modelcontextprotocol/server-cohort-heatmap",
"version": "0.4.2", "version": "1.0.0",
"type": "module", "type": "module",
"description": "Cohort heatmap MCP App Server for retention analysis", "description": "Cohort heatmap MCP App Server for retention analysis",
"repository": { "repository": {

Some files were not shown because too many files have changed in this diff Show more