Skip to content

spike: MCP elicitations PoC (do not merge) - #359

Draft
barryroodt wants to merge 20 commits into
mainfrom
barryroodt/mcp-elicitations-poc
Draft

spike: MCP elicitations PoC (do not merge)#359
barryroodt wants to merge 20 commits into
mainfrom
barryroodt/mcp-elicitations-poc

Conversation

@barryroodt

@barryroodt barryroodt commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Do not merge. This is a record of the MCP elicitations spike, opened so the findings and the test suite are reviewable in one place instead of a Slack summary. packages/mcp-elicitations-poc is private: true and sits outside release-please-config.json.

Based on main, not on raulb/spike-mcp-v2. The PoC package pins @modelcontextprotocol/{client,node,server}@2.0.0 directly rather than catalog:, so it already validates against the v2 SDK end state while the rest of the workspace stays on v1. Both majors coexist under different package names. The lockfile change is additive (+89, -0) and no existing package is touched.

What it answers

FINDINGS.md carries the per-risk verdicts. Two of them are why this is worth reading:

  • risk-3, replay dedupe. Single-use jti enforcement needs one atomic store shared across every server instance. Two instances with separate stores both accept the same replay (replay-dedupe.test.ts). Fail-closed on a store outage is not built.
  • risk-6, URL-mode lifetime. A real 175s human round survived only because URL mode's TTL is 300s. The approved design's fixed 120s cap would have killed it (NOTES.risk6-inspector.md).

risk-4 is a PASS with a caveat worth naming in the RFC: the PoC hand-authors capability gating inside one tool. That is the wrong shape to ship, since the approved design puts routing in the shared server runtime.

Checks

The new Elicitations PoC workflow runs typecheck plus vitest run on this package (8 files, 49 tests, no network, no credentials). The existing Tests job stays filtered to the three published packages, so it reports nothing about this package by design. That is deliberate, not an oversight.

Manual path

README.md. pnpm --filter @supabase/mcp-elicitations-poc dev brings up form mode on :3900/mcp, URL mode on :3902/mcp, and the mock connect page on :3901/connect. Drive it from MCP Inspector's web UI in Chrome, with the connection's Protocol Era set to Modern (2026-07-28). It defaults to Legacy, which silently exercises the deterministic token path instead. The Inspector CLI never declares elicitation capability, so it cannot reach MRTR at all (NOTES.risk5.md).

Real staging project creation is env-gated behind MANAGEMENT_API_URL + MANAGEMENT_API_TOKEN and restricted to https + *.supabase.green. Mock mode is the default and needs no account.

Not included

Two later spikes on session correlation and auth-grant derivation are still local. They carry no tests and no FINDINGS entry, so they would weaken the record. I'll fold them in as a risk-7 if they turn out to matter for the RFC.

@barryroodt
barryroodt force-pushed the barryroodt/mcp-elicitations-poc branch from ecdf8b4 to 59af11a Compare August 12, 2026 08:30
@coveralls

coveralls commented Aug 12, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 31578643635

Coverage decreased (-0.001%) to 96.512%

Details

  • Coverage decreased (-0.001%) from the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 3030
Covered Lines: 2945
Line Coverage: 97.19%
Relevant Branches: 382
Covered Branches: 348
Branch Coverage: 91.1%
Branches in Coverage %: Yes
Coverage Strength: 49.82 hits per line

💛 - Coveralls

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.

2 participants