Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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/
66 changes: 66 additions & 0 deletions examples/workflow-server-mcp-demo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# 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 start:mcp-demo
```

This builds the workflow server, 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 any modern 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