Skip to content

Add optional Streamable HTTP conformance checks - #10

Merged
jonathanhefner merged 1 commit into
mainfrom
agent/optional-http
Sep 20, 2026
Merged

jonathanhefner merged 1 commit into
mainfrom
agent/optional-http

Conversation

@jonathanhefner

@jonathanhefner jonathanhefner commented Sep 19, 2026 •

Copy link
Copy Markdown
Member

Add optional Streamable HTTP coverage with a standalone server bundled in the core fixture. Users or CI start it before the client loads the plugins; the guide collects its native MCP observation and the reporter checks literal URL/query and header delivery. Other checks continue when the server is absent.

Each HTTP entry in observations contains the native evidence payload or null after an unsuccessful collection attempt. On every HTTP recording, the reporter checks the server's identifying health endpoint and adds serverHealthCheck: "passed" | "failed". Native evidence passes availability; without it, a passed health check makes availability fail and a failed health check leaves it not_verified. Missing observations alone never produce failure. Recording replaces the previous observation for that component, and subsequent evaluation uses saved evidence without network access.

Validation:

  • Build and distributable checks pass; all 86 automated tests pass locally. CI passes on Linux and Windows with Node.js 22 and 24.
  • Real endpoint integration verifies null evidence with a running server fails only HTTP availability, while a stopped server leaves the HTTP checks not_verified.
  • Native Codex 0.155.0-alpha.9.2 verification used committed plugins through native marketplace installation and the ordinary documented prompt; the runtime and guide are unchanged by the documentation edits. Server present: all 23 checks pass. Server absent: 20 pass and the 3 HTTP checks remain not_verified, with evidence: null and serverHealthCheck: "failed" recorded. Native evidence transfer and deterministic reevaluation match exactly; recording is sequential. The present run also recorded a failed reporter health check (cause not established); successful native evidence correctly kept HTTP availability passing. The separate real-endpoint test covers a passed reporter health check.
  • Earlier native Copilot 1.0.83 verification of the unchanged HTTP fixture exposed placeholder expansion in the configured header. Those runs used the previous reporter schema and do not validate the revised guide. Copilot also issued some recording calls in parallel and masked the HTTP header in its trace, limiting workflow and raw-header transfer verification.

@jonathanhefner
jonathanhefner force-pushed the agent/optional-http branch 2 times, most recently from f5c3b89 to 902cf39 Compare September 20, 2026 17:15
This plugin exercises valid stdio configurations; invalid configuration handling, failure isolation, and remote MCP transports are outside its coverage.
| `mcp.streamable-http.tool-availability` | The client exposes the HTTP tool and it returns a valid observation. A completed discovery or call attempt with no observation fails this check only when the reporter confirms that the local fixture is healthy. |
| `mcp.streamable-http.url.literal-route-and-query` | The tool request reaches `/conformance/mcp` with the single decoded query pair `value=$APC_HTTP_VALUE`, preserving the placeholder-like text literally. |
| `mcp.streamable-http.headers.literal-value` | The tool request includes `x-apc-fixture` with the literal value `${PLUGIN_ROOT}\|${PLUGIN_DATA}\|fixture value with spaces`. |

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

with the literal value ${PLUGIN_ROOT}\|${PLUGIN_DATA}\|fixture value with spaces

That description seems overly specific.

Comment on lines +74 to +89
Every HTTP observation contains the native tool's `evidence` payload, or `null` when a completed discovery or call attempt produced no observation. The reporter checks the local fixture's health for each HTTP recording and adds `serverHealthCheck`, either `"passed"` or `"failed"`. For example, this report excerpt records an unsuccessful native attempt while the fixture was healthy:

```json
{
"observations": [
{
"kind": "mcp-streamable-http",
"server": "http",
"evidence": null,
"serverHealthCheck": "passed"
}
]
}
```

Valid native evidence makes `mcp.streamable-http.tool-availability` pass, even if the health check fails. With `evidence: null`, availability fails when the health check passes and remains `not_verified` otherwise. The URL and header checks require native evidence.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Why are we going into this detail here? Is there a rationale, or did a subagent turn this README into an information dumping ground?

If it is the latter, do not let it happen again.

Comment thread README.md Outdated
Install these plugins through the client's Agent Plugins support:
Node.js 22 or newer must be available as `node` on the client's executable search path, and the agent must be able to execute commands. The packaged plugins require no build or dependency installation. Each directory below is an installable plugin; the repository root is the development project.

To include the optional Streamable HTTP checks, follow the [Core fixture's HTTP setup](plugins/agent-plugins-conformance-core/#optional-http-setup) **before the client loads the plugins**. This starts a bundled local server in a separate terminal; CI can launch the same command. Without the server, HTTP checks remain `not_verified` and the agent continues collecting the other checks.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I think this paragraph might be better positioned after the table below.

Ship a standalone HTTP fixture with core so users and CI can opt into
HTTP checks by starting it before client loading. Observe configured URL
and header values through the native MCP tool while leaving other checks
usable without the server.

Keep each HTTP attempt in observations, with native evidence or null
when collection produces none. The reporter adds serverHealthCheck after
independently checking the local HTTP server. A passed health check
makes unsuccessful native collection fail availability; missing evidence
alone remains not verified. Preserve the latest observation for each
component and reevaluate saved evidence without network access.
@jonathanhefner
jonathanhefner marked this pull request as ready for review September 20, 2026 17:50
@jonathanhefner
jonathanhefner merged commit 2d759bd into main Sep 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant