Repository navigation
Releases
v1.5.0 — site-side authoring kit
What's new
- sitekit/webmcp-register.js: zero-dependency snippet so ANY site author can expose actions to agents —
WebMCP.register({ name, description, inputSchema, annotations, execute }). Dual-mount detection, MCP worst-case annotation defaults, silent no-op, window.webmcp fallback. dsh-webmcp-serve --check <url>: agent-readiness audit (score/schema/annotation coverage; exit 0/1/2).- Official demo on GitHub Pages: https://t-markus-liang.github.io/dsh-webmcp/demo/ — a discoverable, annotated, agent-ready page.
This fills the ecosystem's biggest gap: everyone builds the agent side; now publishing the "make your site agent-ready" kit is one script include.
67 tests all green.
v1.4.0 — gateway remote
What's new
- HTTP/SSE transport for the MCP gateway: POST /mcp (request/response) + GET /sse for server→client notifications — one gateway now serves many MCP clients over LAN/tailscale
- Bearer-token auth via
--token(missing/wrong → 401) - Multi-client concurrency +
tools/list_changedbroadcast to all live SSE subscribers - Transport-agnostic
createCoreshared by stdio and HTTP
dsh-webmcp-serve <url> --http --host 0.0.0.0 --port 9000 --token <secret>
62 tests all green (incl. new HTTP transport tests).
v1.3.0 — types contract
What's new
- dsh-webmcp-types: fully typed bridge contract via
types/index.d.ts(no build step) —import type { DiscoverResult, InvokeResult, BridgeConfig, BridgeErrorCode } from 'dsh-webmcp/types' - Runtime/type consistency audit (dedicated review): readiness() now returns full
DiscoveredTool[](fixed dashboard showing 0 schema completeness); invoke failures carry url; gateway maps outputSchema; readiness helpers re-exported from the package entry; error shapes corrected - Elicitation (
input_required) evaluated and deferred — no proven client yet; argsWarning + confirm-required cover the loop
58 tests all green (incl. new contract-render guards). npm publish still pending registry auth.
v1.2.0 — push & readiness
What's new
- list_changed push: gateway advertises
tools.listChanged:true; subscribing clients getnotifications/tools/list_changedon manifest drift - outputSchema passthrough + structured-preserving truncation (trim human-text fields, keep structured data intact)
- Agent-readiness: per-origin score/schema-completeness/annotation-coverage/read-only/destructive via
lib/readiness.mjs— the free/open answer to $49/mo readiness scanners - Interactive Tool tester on the dashboard (
POST /webmcp/tester)
54 tests all green (incl. new list_changed push + readiness + dashboard-render blocks).
v1.1.0 — agent-interface alignment
What's new
- Tool annotations passthrough (readOnlyHint / destructiveHint / idempotentHint / openWorldHint) across discover + gateway tools/list — verified live on a real WebMCP site
- Host-side destructive guard:
destructiveHint:truetools requireconfirm:true(confirm-requiredotherwise); enforced host-side so page JS cannot bypass - Well-known probing:
/.well-known/webmcp+/.well-known/mcp.jsonas a fifth discovery surface - Error taxonomy gains
confirm-required
46 tests all green incl. guard roundtrip through the MCP gateway (_meta.confirm).
v1.0.0 — stable
v1.0.0 — stabilization
Capability surface frozen since v0.5.x; this release hardens the project around it.
- Security self-review (
docs/security-review.md): threat model, controls matrix with verbatim test-evidence citations, honest residual risks - Real-site probing dataset (
docs/real-sites.md): five sites probed with our own pipeline; three coexisting exposure models documented - Observability: JSONL trace + live
/webmcp/dashboard+ manifest-drift detection - stdio MCP gateway: any MCP client consumes site tools
- Per-origin session pool: concurrency + LRU + idle reclamation
- 46 tests all green (incl. real-browser e2e)
Install: dsh plugin --profile web add github:T-Markus-Liang/dsh-webmcp
npm publish pending registry auth.
v0.3.0 — stdio MCP gateway
The step-change release
Any MCP client (Claude Code/Desktop, Codex, …) can now consume a website's WebMCP tools as a local MCP server:
dsh-webmcp-serve <url> [--allow-private-hosts] [--no-cache]
Claude Desktop config:
{ "mcpServers": { "my-site": { "command": "node", "args": ["/path/to/dsh-webmcp/bin/dsh-webmcp-serve.mjs", "https://example.com/app"] } } }- Newline-delimited JSON-RPC 2.0: initialize / ping / tools/list / tools/call
- Reuses the full BrowserSession pipeline (dual-mount, Map/Promise stores, executeToolByName, argsWarning, result budget)
- Manifest cache ~/.dsh-webmcp/manifests/ (TTL 300s)
- 25/25 tests incl. spawned-gateway e2e with 35 assertion checks
v0.2.0 — intranet shield + session reuse
Highlights
- Private-network shield: loopback/private/link-local/unique-local targets are default-denied — an agent following a prompt-injected instruction can no longer be turned into an intranet scanner.
allowPrivateHosts: truere-enables for local fixtures. - Same-URL session reuse: repeated calls against the same page inside
sessionTtlMsskip re-navigation; per-callrefresh: trueforces it._meta.{reused,navigations}surfaced on results. - Dual-mount probing hardened in v0.1.1 (
navigator.modelContext+document.modelContext) carried forward.
Install: dsh plugin --profile web add github:T-Markus-Liang/dsh-webmcp