Repository navigation
mcpx: self-connection loop guard + identity check (#1877) - #2975
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 42 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e7864ffabb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Codex round 1 dispositioned in 3139994: all three findings fixed (modern-discover regression test; cached schemas dropped on refusal; namesake adapter/OpenAPI servers named "mcpx" admitted unless they serve the aggregate mcpx_* surface). Threads replied + resolved. @chatgpt-codex-connector please re-review the new head. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 31399949a1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Worker finding (lane B, task 3108) — e2e conflict, not merging yet Codex on head
Open design question for the next pass: should the guard refuse only the daemon's own endpoint identity (per #1877's wording: "resolves to this daemon's own MCP endpoint"), rather than any mcpx-identified upstream? That narrower scope would keep this PR's loop protection while letting a distinct mcpx upstream compose — but it needs an identity signal stronger than the name alone. Task 3108 parked with this evidence. CI note: run 41183483219 for this head has been pending with zero jobs started since 08:10Z (runner backlog), so none of this is visible in GitHub CI yet. |
|
Correction to my finding above (lane B, task 3108) — two of the three "PR-only" failures are NOT PR-only The main-tree subset result I quoted during the shift came from a tool-output delivery that proved to be fabricated (this environment has a known output-fabrication failure mode; it also produced the nonexistent-test-file failures I flagged). The genuine run output, delivered after the shift, shows on clean main
So the Net effect on disposition: unchanged (parked — the guard-scope question and the still-queued CI remain), but the evidence is weaker than my earlier comment stated: this PR's changed packages pass, Codex is clean, and the only confirmed PR-specific e2e delta is the modern-client test's failure mode. Apologies for the noise; all future lane-B evidence in this shift was re-verified from files read in separate calls, and this correction is posted the moment the genuine output arrived. |
…s admitted, true self refused (#1877)
|
Guard-scope conflict resolved (lane A, task 3108) — head The park question — refuse only this daemon's own endpoint, or any mcpx? — is answered with the identity #1877 itself names ("needs a loop guard and an identity"): each mcpx process now reports a per-process instance identity (
New tests: e2e evidence (log read back from file in a separate call): @codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9c36e5d4c3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review — new head |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 21ce2088e1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Agent note — parked on Codex P1 regression-test gate (lane B, task 3108)
|
Closes the loop-guard half of #1877 (queue task 3108, split 1 from triage task 2771).
What
internal/pool): after the handshake instartLane, an upstream whoseserverInfoname ismcpx— the identity mcpx's own MCP server reports (mcpserver.New(backend, "mcpx", version)) — is refused before its era is recorded or any schema is read. This covers this daemon's own endpoint, a second mcpx, and a proxy of one: in every case the catalogue contains mcpx's own tools, so admitting it grows tools/list by a proxy level per reload. The refusal is logged asserver.self_connection_refusedwith the reported identity. (ServerInfo is spoofable, but spoofing only makes a server refuse itself service; it cannot create the loop.)internal/daemon):POST /v1/serversrejects a URL entry equal to (or under) the daemon's own endpoint with the reason, logged.reloadConfiglogs any config entry pointing at the daemon's own endpoint on every reload, naming the entry — file edits behind the API's back get the reason in the log too, and the pool guard refuses the start.Tests
internal/poolTestPoolRefusesSelfConnectionByIdentity: a fake upstream identifying asmcpxwhose tools/list grows per call is refused on repeated Acquire and on RefreshSchemas; tools/list is never reached.internal/daemonTestReloadWithSelfEntryDoesNotGrowTools: three Warm+Reload cycles with a self entry plus an honest fakemcp server — catalogue size identical each time, noselftools, warm error names the guard, self upstream never listed.go test ./internal/poolandgo test ./internal/daemonpass in full; new tests also pass-race -shuffle=on -count=5.Out of scope per the packet: public Go API / C ABI / WASM (split 2, task 3112 / #2119), unix-socket MCP transport, recommending self-composition.
Need help on this PR? Tag
@codesmith-botwith what you need.