feat(probe): wire bridge / host SEP-1865 conformance probe into host-probe#19
Open
chelojimenez wants to merge 1 commit into
Open
feat(probe): wire bridge / host SEP-1865 conformance probe into host-probe#19chelojimenez wants to merge 1 commit into
chelojimenez wants to merge 1 commit into
Conversation
…face
Wires the new `@modelcontextprotocol/ext-apps/probe` module into the
host-probe View and exposes a server-side conformance tool, completing
the bridge / host surface that `assert-window-openai-surface` opened
for the OpenAI Apps SDK shim.
View (`src/host-probe.ts`):
- `attachBridgeProbe(app)` is called BEFORE `app.connect()` so one-shot
lifecycle notifications (`tool-input`, `tool-result`,
`host-context-changed`) fired during the initial `ui/initialize`
handshake are observed without missing the window.
- After connect, `probe.capture({ activeProbes: false })` populates the
snapshot with declared `hostCapabilities` + the observed-notification
timeline. Safe at startup (no method probing).
- New "Run bridge active probes" button issues each known View -> Host
method with a benign payload and reclassifies based on response. Some
methods may trigger host confirmation dialogs (`ui/open-link`,
`ui/message`, etc.) — the probe still treats denials as `supported`
(only `-32601` counts as absent).
- New `section-bridge` panel renders the matrix alongside `windowOpenai`.
Snapshot schema (`src/host-probe-types.ts`):
- Added `bridge?: BridgeProbeSnapshot` field. Width widened in
`record-host-probe`'s Zod schema so the View can upload it.
Server (`src/index.ts`):
- New `assert-bridge-surface` tool. Inputs: `preset`
(`spec-minimal | chatgpt | claude-desktop | copilot | mcpjam-inspector`),
`expectedPresentMethods`, `expectedAbsentMethods`,
`expectedNotifications`, `expectedHostCapabilities`,
`expectedAbsentHostCapabilities`. Returns the standard
`{ pass, checks[], methods, incoming, hostCapabilities }` structure
using `assertBridgeMethods` + `assertHostCapabilities` from
`@modelcontextprotocol/ext-apps/probe`.
- Catches unknown method names in the input lists and reports them as
failed checks (typo guard).
Depends on the bridge-probe module landing in ext-apps and a release
that surfaces the `./probe` package export.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
mcp-app-example | 4ed8cdb | May 27 2026, 05:10 PM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Wires
@modelcontextprotocol/ext-apps/probe(proposed upstream in modelcontextprotocol/ext-apps#675) into the host-probe View and exposes a new server-sideassert-bridge-surfacetool. Completes the bridge / host conformance surface thatassert-window-openai-surfaceopened for the OpenAI Apps SDK shim.Builds on the existing host-probe pattern: View captures, uploads via
record-host-probe, server tools assert against the snapshot.What changes
Snapshot (
src/host-probe-types.ts)bridge?: BridgeProbeSnapshotfield onHostProbeSnapshot.View (
src/host-probe.ts)attachBridgeProbe(app)runs beforeapp.connect()— required to observe one-shot lifecycle notifications (tool-input,tool-result,host-context-changed) fired during the initialui/initializehandshake.{ activeProbes: false }) at startup populates declaredhostCapabilities+ observed-notification timeline.ping,tools/*,resources/*,prompts/list,sampling/createMessage,ui/open-link,ui/download-file,ui/message,ui/request-display-mode,ui/update-model-context) with benign payloads and reclassifies based on response. Hosts that gate on consent may show denial dialogs — the probe still treats denials assupported(only-32601counts asnot-supported).section-bridgepanel renders the matrix alongsidewindowOpenai.Server (
src/index.ts)record-host-probeZod schema withbridge: z.any().optional().assert-bridge-surfaceMCP tool. Inputs:preset:spec-minimal | chatgpt | claude-desktop | copilot | mcpjam-inspectorexpectedPresentMethods/expectedAbsentMethods(bridge method names)expectedNotifications(Host → View notification methods)expectedHostCapabilities/expectedAbsentHostCapabilities(dot-paths into hostCapabilities){ pass, checks[], methods, incoming, hostCapabilities }shape usingassertBridgeMethods+assertHostCapabilitiesfrom ext-apps/probe.Dependency
Blocked on modelcontextprotocol/ext-apps#675 landing and a release that ships the
./probepackage export. Locally verified againstfile:../ext-apps; reverted to canonical^1.0.0in this PR. Bump to the version that introduces./probebefore merging.Test plan
./probeis published, bump dependency in package.jsonnpm run buildcleanstart-host-probe, click "Run bridge active probes" in the View, then callassert-bridge-surface { preset: \"chatgpt\" }(or\"mcpjam-inspector\") and verify the report🤖 Generated with Claude Code