Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ wf-glsp-server-node.js
wf-glsp-server-node.js.map
wf-glsp-server-webworker.js
wf-glsp-server-webworker.js.map
examples/workflow-server-bundled-web/mcp-service-worker.js
examples/workflow-server-bundled-web/index.bundle.js
examples/workflow-server-bundled-web/index.bundle.js.map

.claude/settings.local.json
CLAUDE.local.md
Expand Down
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ dist/
# Generated files
*.min.js
*.min.css
examples/*/wf-glsp-server-webworker.js
examples/*/wf-glsp-server-webworker.js.map
examples/*/index.bundle.js
examples/*/index.bundle.js.map

# Lock files
package-lock.json
Expand Down
6 changes: 6 additions & 0 deletions examples/workflow-server-bundled-web/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ See [our project website](https://www.eclipse.org/glsp/documentation/#workflowov

<https://user-images.githubusercontent.com/588090/154459938-849ca684-11b3-472c-8a59-98ea6cb0b4c1.mp4>

## MCP demo

A self-contained dev demo that drives this bundle through `@eclipse-glsp/server-mcp` lives in
its own private workspace at
[`examples/workflow-server-mcp-demo`](../workflow-server-mcp-demo). See its README for how to run.

## More information

For more information, please visit the [Eclipse GLSP Umbrella repository](https://github.com/eclipse-glsp/glsp) and the [Eclipse GLSP Website](https://www.eclipse.org/glsp/).
Expand Down
2 changes: 2 additions & 0 deletions examples/workflow-server-mcp-demo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Populated by `yarn start` (verbatim assets + synced worker bundle + webpack output)
dist/
67 changes: 67 additions & 0 deletions examples/workflow-server-mcp-demo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Workflow Server MCP Demo (browser)

A browser demo for the `@eclipse-glsp/server-mcp` portable Fetch handler. The page opens a
workflow GLSP session inside an in-page Web Worker and drives the MCP server through a
Service Worker that intercepts `fetch('/mcp', …)` and proxies the request to the Worker via
`MessageChannel`.

This package is **private** — it ships nothing; it's a local demo and manual test bench for
the portable handler.

## Why only a browser demo?

The browser variant needs a custom harness because **external MCP clients can't reach an
in-page launcher**: a browser tab doesn't accept inbound network traffic. The Service Worker
in this demo is what makes the in-page launcher reachable to a same-origin MCP client.

For the **Node variant**, no demo is needed in this repo — the launcher binds a real HTTP
listener and announces its URL via stdout (`[GLSP-MCP-Server]:Ready. {…}`). Point any MCP
client at that URL:

- The official **[MCP Inspector](https://github.com/modelcontextprotocol/inspector)** is the
best manual debug tool — runs as a local web UI and lets you exercise tools, prompts and
resources interactively.
- **Claude Code**, **Cursor**, or any other MCP-aware client also work.

The Node path is additionally covered by the automated end-to-end spec at
`packages/server-mcp/src/node/server/mcp-http-transport-e2e.spec.ts`, which runs an MCP SDK
`Client` over real HTTP against the launcher.

## Running

From the repository root:

```bash
yarn workspace @eclipse-glsp-examples/workflow-server build
yarn workspace @eclipse-glsp-examples/workflow-server-mcp-demo start
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yarn start:mcp-demo should be fine here right?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, switched to yarn start:mcp-demo. Thanks!

```

The `start` script copies the worker bundle from
`@eclipse-glsp-examples/workflow-server-bundled-web`, builds the page-side bundle, and serves
the directory on `http://localhost:8000/`.

Open `http://localhost:8000/` in a Chromium-based browser. Step through the buttons
top-to-bottom; the workflow auto-renders once MCP is initialized, and **Create task**
mutates the live session.

## What it exercises

1. The page acts as a minimal GLSP JSON-RPC client over `postMessage` to the in-page Web
Worker (using `vscode-jsonrpc/browser`, bundled).
2. GLSP `initialize` carries `mcpServer: {}` — the Worker's per-connection child container
activates `BrowserMcpServerModule`'s launcher as a `GLSPServerInitializer`.
3. `initializeClientSession` opens a real workflow GLSP session with
`diagramType: workflow-diagram`.
4. A Service Worker (`mcp-service-worker.js`) intercepts `fetch('/mcp', …)` and proxies the
request through a `MessageChannel` to the Worker.
5. MCP tools (`initialize`, `tools/list`, `session-info`, `query-elements`, `diagram-model`,
`create-nodes`) round-trip end-to-end against the live session.

The on-page SVG is a minimal schematic renderer — **not** the GLSP client; its only purpose
is to make the MCP handlers' output visible so the demo can be eyeballed end-to-end.

## Hard reset

If a stale Service Worker is misbehaving: DevTools → Application → Service Workers →
Unregister, then close the tab and re-open. The page's Worker bundle URL is cache-busted per
load, but the SW itself updates only on full lifecycle restart.
30 changes: 30 additions & 0 deletions examples/workflow-server-mcp-demo/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "@eclipse-glsp-examples/workflow-server-mcp-demo",
"version": "2.7.0-next",
"private": true,
"description": "Browser demo that drives the @eclipse-glsp/server-mcp portable Fetch handler against the workflow web server bundle.",
"homepage": "https://www.eclipse.org/glsp/",
"bugs": "https://github.com/eclipse-glsp/glsp/issues",
"repository": {
"type": "git",
"url": "https://github.com/eclipse-glsp/glsp-server-node.git"
},
"license": "(EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0)",
"author": {
"name": "Eclipse GLSP"
},
"scripts": {
"build": "webpack",
"clean": "rimraf dist",
"prestart": "node ./scripts/prepare-dist.mjs && yarn build",
"start": "npx -y serve -l 8000 ./dist"
},
"dependencies": {
"@eclipse-glsp-examples/workflow-server-bundled-web": "2.7.0-next"
},
"devDependencies": {
"vscode-jsonrpc": "8.2.0",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1"
}
}
Loading
Loading