Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
8d9ea9d
Adding a simple (bad) pdf icon for directory (#330)
tobinsouth Jan 23, 2026
5de3ebd
chore: bump version to 0.4.2
ochafik Jan 23, 2026
8c72dd7
fix(e2e): update Map Server display name to CesiumJS Map Server (#324)
liady Jan 23, 2026
f0f6ddc
feat(server): add getUiCapability helper for capability negotiation (…
ochafik Jan 23, 2026
75b60a8
Merge branch 'main' into ochafik/version-bump-0.4.2
ochafik Jan 23, 2026
29ff294
fix: update playwright docker image to v1.58.0
ochafik Jan 23, 2026
f29544e
fix: use -i instead of -it for docker commands (no TTY needed)
ochafik Jan 23, 2026
6ee0c90
fix: Python server dependency resolution and Docker host validation (…
ochafik Jan 23, 2026
51e984f
feat(basic-host): Add theme toggle and MCP style variables (#336)
ochafik Jan 23, 2026
cf9fed1
[MCP Apps] Add appCapabilities.availableDisplayModes documentation to…
martinalong Jan 23, 2026
fc0689b
feat(say-server): add light/dark theme support (#338)
ochafik Jan 23, 2026
3c40362
fix: followup app -> view terminology (#339)
idosal Jan 24, 2026
655b05e
chore: husky env fix, version pins, update-lock:docker script (#341)
ochafik Jan 24, 2026
0efc7be
Merge branch 'main' into ochafik/version-bump-0.4.2
ochafik Jan 24, 2026
49100e8
fix: pin seroval to 1.4.1 for dev compatibility
ochafik Jan 24, 2026
b197935
Refactor server startup functions
jonathanhefner Jan 23, 2026
381521b
Support full-file inclusion in synced code snippets
jonathanhefner Jan 23, 2026
de4dd8d
Rewrite Quickstart guide with type-checked code examples
jonathanhefner Jan 24, 2026
64cac26
Merge pull request #342 from jonathanhefner/type-checked-quickstart
jonathanhefner Jan 24, 2026
a5a86e6
Add MCP Apps Overview document
jonathanhefner Jan 24, 2026
8b1da4e
Merge pull request #343 from jonathanhefner/overview-guide
jonathanhefner Jan 24, 2026
d055a5d
Add Agent Skills installation guide
jonathanhefner Jan 24, 2026
9b95994
Polish OpenAI migration reference for readability
jonathanhefner Jan 24, 2026
c747be5
Merge pull request #344 from jonathanhefner/skill-how-to
jonathanhefner Jan 24, 2026
edb5f93
Merge pull request #345 from jonathanhefner/polish-oai-migration-refe…
jonathanhefner Jan 24, 2026
f6d3512
Fix mermaid diagram arrowheads not rendering
jonathanhefner Jan 24, 2026
960faa4
Merge pull request #347 from jonathanhefner/fix-typedoc-mermaid-diagr…
jonathanhefner Jan 24, 2026
30c13c8
fix(docs): improve OpenAI migration guide accuracy (#349)
liady Jan 25, 2026
f093c33
Add Testing MCP Apps guide
jonathanhefner Jan 25, 2026
b9c49bc
Fix `onhostcontextchanged` handler invocation in examples
jonathanhefner Jan 25, 2026
02817ee
Merge pull request #350 from jonathanhefner/testing-mcp-apps-doc
jonathanhefner Jan 25, 2026
2da8d86
Merge pull request #351 from jonathanhefner/no-onhostcontextchanged-g…
jonathanhefner Jan 25, 2026
bb2658d
Expand Agent Skills guide
jonathanhefner Jan 25, 2026
6ab5741
fix(e2e): improve test stability and developer experience (#337)
ochafik Jan 25, 2026
1b1edc3
Merge pull request #352 from jonathanhefner/expand-agent-skills-guide
jonathanhefner Jan 25, 2026
7b25cb4
Improve README structure and clarity
jonathanhefner Jan 25, 2026
e411fac
Merge pull request #356 from jonathanhefner/tweak-readme
jonathanhefner Jan 25, 2026
4c28d01
Add Codex and Goose to documentation
jonathanhefner Jan 26, 2026
b118fd0
Merge pull request #357 from jonathanhefner/supporting-clients
jonathanhefner Jan 26, 2026
aa5986d
Merge branch 'main' into ochafik/version-bump-0.4.2
ochafik Jan 26, 2026
0a396a6
chore: regenerate lockfile with public registry, use ^0.4.2 for ext-a…
ochafik Jan 26, 2026
aad5e63
Merge branch 'main' into ochafik/version-bump-0.4.2
ochafik Jan 26, 2026
5273143
fix: update quickstart example to use workspace reference
ochafik Jan 26, 2026
3b82522
chore: remove internal registry references from lockfile
ochafik Jan 26, 2026
b5484cf
feat(ci): add /update-snapshots comment trigger for PRs
ochafik Jan 26, 2026
f714584
docs: document /update-snapshots PR comment trigger
ochafik Jan 26, 2026
7197610
fix: pin @hono/node-server to 1.19.7 for dev compatibility
ochafik Jan 26, 2026
b9a459a
fix: pin @modelcontextprotocol/sdk to 1.25.2
ochafik Jan 26, 2026
aac291e
fix: restore flexible SDK peerDep range (^1.24.0)
ochafik Jan 26, 2026
6046599
fix: pin @types/node to avoid unpublished versions
ochafik Jan 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 59 additions & 9 deletions .github/workflows/update-snapshots.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,50 @@ on:
description: "Branch to update snapshots on"
required: true
default: "main"
# Temporary: auto-run on this branch to update snapshots
push:
branches:
- "ochafik/fix-e2e-flaky-tests"
paths:
- ".github/workflows/update-snapshots.yml"
issue_comment:
types: [created]

permissions:
contents: write
pull-requests: write

jobs:
update-snapshots:
# Run on workflow_dispatch OR when someone comments "/update-snapshots" on a PR
if: >
github.event_name == 'workflow_dispatch' ||
(github.event.issue.pull_request && contains(github.event.comment.body, '/update-snapshots'))
runs-on: ubuntu-latest
steps:
- name: Get PR branch
if: github.event_name == 'issue_comment'
id: pr
uses: actions/github-script@v7
with:
script: |
const pr = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number
});
core.setOutput('ref', pr.data.head.ref);
core.setOutput('sha', pr.data.head.sha);

- name: Add reaction to comment
if: github.event_name == 'issue_comment'
uses: actions/github-script@v7
with:
script: |
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: 'rocket'
});

- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.branch || github.ref }}
ref: ${{ github.event.inputs.branch || steps.pr.outputs.ref || github.ref }}
token: ${{ secrets.GITHUB_TOKEN }}

- uses: oven-sh/setup-bun@v2
Expand All @@ -45,9 +72,32 @@ jobs:
run: npx playwright test --update-snapshots --reporter=list

- name: Commit updated snapshots
id: commit
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add tests/e2e/**/*.png
git diff --staged --quiet || git commit -m "chore: update e2e snapshots [skip ci]"
git push
if git diff --staged --quiet; then
echo "changed=false" >> $GITHUB_OUTPUT
echo "No snapshot changes to commit"
else
git commit -m "chore: update e2e snapshots [skip ci]"
git push
echo "changed=true" >> $GITHUB_OUTPUT
fi

- name: Comment on PR
if: github.event_name == 'issue_comment'
uses: actions/github-script@v7
with:
script: |
const changed = '${{ steps.commit.outputs.changed }}' === 'true';
const body = changed
? '✅ Snapshots updated and pushed to this branch.'
: '✅ No snapshot changes needed - all snapshots are up to date.';
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body
});
10 changes: 10 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,16 @@ npm run test:e2e:update -- --grep "Three.js"

**Note**: Golden screenshots are platform-agnostic. Tests use canvas masking and tolerance thresholds to handle minor cross-platform rendering differences.

#### Updating Snapshots in CI

If E2E tests fail in CI due to screenshot mismatches, you can update snapshots directly from your PR:

1. Comment `/update-snapshots` on the PR
2. The workflow will update snapshots and push to your branch
3. A comment will confirm when complete

Alternatively, use the [workflow dispatch](https://github.com/modelcontextprotocol/ext-apps/actions/workflows/update-snapshots.yml) to manually trigger updates for any branch.

## Code of Conduct

This project follows our [Code of Conduct](CODE_OF_CONDUCT.md). Please review it before contributing.
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-host/package.json
Original file line number Diff line number Diff line change
@@ -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.1",
"version": "0.4.2",
"type": "module",
"scripts": {
"build": "tsc --noEmit && concurrently \"cross-env INPUT=index.html vite build\" \"cross-env INPUT=sandbox.html vite build\"",
Expand All @@ -11,15 +11,15 @@
"dev": "cross-env NODE_ENV=development concurrently \"npm run watch\" \"npm run serve\""
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"zod": "^4.1.13"
},
"devDependencies": {
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^4.3.4",
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-server-preact/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-basic-preact",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Basic MCP App Server example using Preact",
"repository": {
Expand All @@ -22,7 +22,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -33,7 +33,7 @@
"@preact/preset-vite": "^2.0.0",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"typescript": "^5.9.3",
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-server-react/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-basic-react",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Basic MCP App Server example using React",
"repository": {
Expand Down Expand Up @@ -32,7 +32,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -43,7 +43,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^4.3.4",
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-server-solid/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-basic-solid",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Basic MCP App Server example using Solid",
"repository": {
Expand All @@ -22,7 +22,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -32,7 +32,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"typescript": "^5.9.3",
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-server-svelte/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-basic-svelte",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Basic MCP App Server example using Svelte",
"repository": {
Expand All @@ -22,7 +22,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -33,7 +33,7 @@
"@sveltejs/vite-plugin-svelte": "^5.0.0",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"typescript": "^5.9.3",
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-server-vanillajs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-basic-vanillajs",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Basic MCP App Server example using vanilla JavaScript",
"repository": {
Expand All @@ -22,7 +22,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -31,7 +31,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"typescript": "^5.9.3",
Expand Down
6 changes: 3 additions & 3 deletions examples/basic-server-vue/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-basic-vue",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Basic MCP App Server example using Vue",
"repository": {
Expand All @@ -22,7 +22,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -32,7 +32,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"@vitejs/plugin-vue": "^5.0.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
Expand Down
6 changes: 3 additions & 3 deletions examples/budget-allocator-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-budget-allocator",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Budget allocator MCP App Server with interactive visualization",
"repository": {
Expand All @@ -26,7 +26,7 @@
"serve": "bun --watch main.ts"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"chart.js": "^4.4.0",
"cors": "^2.8.5",
Expand All @@ -36,7 +36,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"typescript": "^5.9.3",
Expand Down
6 changes: 3 additions & 3 deletions examples/cohort-heatmap-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-cohort-heatmap",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Cohort heatmap MCP App Server for retention analysis",
"repository": {
Expand All @@ -26,7 +26,7 @@
"serve": "bun --watch main.ts"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"cors": "^2.8.5",
"express": "^5.1.0",
Expand All @@ -37,7 +37,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^4.3.4",
Expand Down
6 changes: 3 additions & 3 deletions examples/customer-segmentation-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-customer-segmentation",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Customer segmentation MCP App Server with filtering",
"repository": {
Expand All @@ -26,7 +26,7 @@
"serve": "bun --watch main.ts"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"chart.js": "^4.4.0",
"cors": "^2.8.5",
Expand All @@ -36,7 +36,7 @@
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cross-env": "^10.1.0",
"typescript": "^5.9.3",
Expand Down
6 changes: 3 additions & 3 deletions examples/debug-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@modelcontextprotocol/server-debug",
"version": "0.4.1",
"version": "0.4.2",
"type": "module",
"description": "Debug MCP App Server for testing all SDK capabilities",
"repository": {
Expand All @@ -23,14 +23,14 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.4.1",
"@modelcontextprotocol/ext-apps": "../..",
"@modelcontextprotocol/sdk": "^1.24.0",
"zod": "^4.1.13"
},
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"@types/node": "22.10.0",
"concurrently": "^9.2.1",
"cors": "^2.8.5",
"cross-env": "^10.1.0",
Expand Down
Loading
Loading