You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The MCP App workspace. The server now exposes one portable MCP App —
a single bundled HTML resource registered at ui://getcompetitive/workspace
(text/html;profile=mcp-app) and linked from the three App tools. It renders
three Views over the existing deterministic engine: Team Doctor
(analyze_team synergy/diagnose — six sets, labelled heuristic score,
stacked weaknesses, coverage, speed and top fixes), Team Builder
(optimize_team — select a proposed member, validate with team_io
legality, export the paste), and Matchup Board (prepare_matchup —
bring four, speed races, calculated damage and heuristic leads, with the
opponent's set assumptions shown beside each roll). The bundle is built by scripts/build-app.mjs with esbuild and embedded in the compiled server JS,
so the stdio, HTTP and serverless Worker entrypoints serve byte-identical
markup with no runtime filesystem read, no external CDN, fonts or scripts.
A pinned App SDK.@modelcontextprotocol/ext-apps@1.7.5 (the release
line that pairs with this server's @modelcontextprotocol/sdk@^1.30.0) is
used for resource registration and App-side messages; the App itself imports
the SDK's app-with-deps bundle. Host support is negotiated through the
extension capability where the SDK requires it, and ordinary text output is
preserved unchanged for hosts without Apps support.
Changed
Breaking: the three App tools wrap structuredContent in a versioned
envelope.analyze_team, optimize_team and prepare_matchup now return { schemaVersion: 1, view, tool, mode, regulation, data } in structuredContent, where data is the unchanged analytics payload at the
requested detail level. The model-facing text (the compact JSON summary) is
byte-for-byte the same; only structuredContent consumers migrate their
reads to …structuredContent.data.<field>. schemaVersion is the migration
hook: a View that does not recognise the number renders an unsupported-schema
state instead of guessing. Every other tool's structuredContent is
untouched, and no tool's analytics field was renamed or reshaped.
The evidence app and the App are now distinct surfaces. The HTTP
entrypoint's / page (the model-converses browser page) is unchanged; the
MCP App is the sandboxed iframe served through resources/read.
Not included
App-only tools (_meta.ui.visibility: ["app"]) are deferred: every View
interaction uses the existing public tools, so the model catalog stays at
nine tools and app-initiated drilldowns request detail: "evidence" without
adding to the model's history. Private endpoints (e.g. ui_get_team_detail)
will only be added if a focused drilldown needs one.