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
- **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

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/)
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.
@ -479,11 +486,17 @@ Then configure your MCP client to build and run the local server. Replace `~/cod
},
"qr": {
"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": {
"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)
- [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)

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.
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
@ -96,7 +96,7 @@ sequenceDiagram
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.
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
@ -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)
- **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
@ -126,7 +126,7 @@ When this tool is called, the Host:
2. Renders it in a sandboxed iframe
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
@ -146,7 +146,7 @@ Views communicate with Hosts using JSON-RPC over [`postMessage`](https://develop
- 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
@ -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.
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
@ -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.
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
@ -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.
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
@ -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.
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
- [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

View file

@ -1,7 +1,7 @@
{
"homepage": "https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/basic-host",
"name": "@modelcontextprotocol/ext-apps-basic-host",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"scripts": {
"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": {
"basic-preact": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Basic MCP App Server example using Preact",
"repository": {

View file

@ -37,7 +37,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"basic-react": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Basic MCP App Server example using React",
"repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"basic-solid": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Basic MCP App Server example using Solid",
"repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"basic-svelte": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Basic MCP App Server example using Svelte",
"repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"basic-vanillajs": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Basic MCP App Server example using vanilla JavaScript",
"repository": {

View file

@ -35,7 +35,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"basic-vue": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Basic MCP App Server example using Vue",
"repository": {

View file

@ -40,7 +40,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"budget-allocator": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Budget allocator MCP App Server with interactive visualization",
"repository": {

View file

@ -40,7 +40,10 @@ To test local modifications, use this configuration (replace `~/code/ext-apps` w
"mcpServers": {
"cohort-heatmap": {
"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",
"version": "0.4.2",
"version": "1.0.0",
"type": "module",
"description": "Cohort heatmap MCP App Server for retention analysis",
"repository": {

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