feat(workflows): support Codex MCP nodes#1459
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (21)
📝 WalkthroughWalkthroughAdds a shared MCP config loader, enables MCP support and config conversion for Codex, adjusts provider exports, and makes CLI title generation provider-aware by resolving assistant type and forwarding per-assistant config to generateAndSetTitle. Tests and docs updated accordingly. ChangesProvider-Aware Title Generation & Assistant Configuration
Shared MCP Infrastructure & Codex MCP Support
Sequence DiagramsequenceDiagram
participant CLI as CLI Workflow Command
participant WC as Workflow Config
participant TG as Title Generator
participant CP as Codex Provider
participant MCP as MCP Config Module
participant Codex as Codex SDK Client
CLI->>WC: loadConfig(cwd)
WC-->>CLI: { assistants: { codex: { model: 'gpt-5.4' } } }
CLI->>CLI: resolveTitleAssistantType(workflow.provider='codex')
CLI->>TG: generateAndSetTitle(conversationId, message, 'codex', cwd, workflowName, assistantConfig)
TG->>TG: Build prompt, call AI provider
TG->>CP: client.sendQuery(..., { assistantConfig })
Note over CP: If nodeConfig.mcp set
CP->>MCP: loadMcpConfig(mcpPath, cwd, envSource)
MCP->>MCP: Parse JSON, expand $VAR_NAME, validate
MCP-->>CP: { servers, serverNames, missingVars }
CP->>CP: convert servers -> codex mcp_servers override
CP->>Codex: createCodexClient(requestEnv, { config: { mcp_servers: ... } })
Codex-->>CP: client instance/response
CP-->>TG: provider response
TG-->>CLI: (title set on conversation)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
checked in my workflow (i'm human), mcp has been started to working |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (4)
packages/core/src/services/title-generator.test.ts (1)
180-196: Good test coverage for assistantConfig passthrough.The test correctly verifies that
assistantConfigis forwarded to the provider'ssendQuerycall.Minor nit: Line 186 uses
'conv-12'but line 208 (the double failure test) also uses'conv-12'. This doesn't affect test correctness sincebeforeEachclears mocks, but updating to'conv-17'would maintain the sequential naming convention used throughout the file.Optional: Update conversation ID to avoid duplicate
await generateAndSetTitle( - 'conv-12', + 'conv-17', 'Some message', 'codex',🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/core/src/services/title-generator.test.ts` around lines 180 - 196, Update the conversation id in the test named "passes assistantConfig through to the provider" from 'conv-12' to 'conv-17' so it doesn't duplicate the id used by the "double failure" test; modify the call to generateAndSetTitle in that test (which ultimately drives mockSendQuery) to use 'conv-17' so naming remains sequential while behavior and assertions (inspecting mockSendQuery.mock.calls[0][3] and expect(optionsArg.assistantConfig)) remain unchanged.packages/providers/src/mcp/config.ts (1)
35-35: Document the uppercase-only environment variable convention.The regex
/\$([A-Z_][A-Z0-9_]*)/gdeliberately restricts variable references to uppercase identifiers (e.g.,$GITHUB_TOKEN,$API_KEY). This aligns with the documented example inmcp-servers.mdand appears consistent with Archon's workflow variable naming convention (which uses uppercase throughout:$ARTIFACTS_DIR,$WORKFLOW_ID,$BASE_BRANCH, etc.).However, this design choice should be documented in the function comment or in the MCP config guide to clarify that only uppercase env var references are expanded. This helps prevent user confusion when lowercase or mixed-case references are silently ignored.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/providers/src/mcp/config.ts` at line 35, Add a short comment above the replacement logic explaining that only uppercase environment variable references are expanded (per the regex /\$([A-Z_][A-Z0-9_]*)/g), so references like $GITHUB_TOKEN or $API_KEY will be substituted but lowercase or mixed-case names will be ignored; update the MCP config guide or mcp-servers.md to call out this uppercase-only convention so users know why result[key] = val.replace(...) only matches uppercase identifiers.packages/workflows/src/dag-executor.test.ts (1)
26-32: Add explicit return types to new@archon/pathsmock functions.The newly added mock functions rely on inferred return types; please annotate them explicitly for consistency with strict TS guidelines.
Suggested patch
- getWorkflowFolderSearchPaths: () => ['.archon/workflows'], + getWorkflowFolderSearchPaths: (): string[] => ['.archon/workflows'], getDefaultCommandsPath: () => '/nonexistent/defaults', - getDefaultWorkflowsPath: () => '/nonexistent/defaults/workflows', - getHomeWorkflowsPath: () => '/nonexistent/home/workflows', - getLegacyHomeWorkflowsPath: () => '/nonexistent/home/.archon/workflows', - getArchonHome: () => '/nonexistent/home', + getDefaultWorkflowsPath: (): string => '/nonexistent/defaults/workflows', + getHomeWorkflowsPath: (): string => '/nonexistent/home/workflows', + getLegacyHomeWorkflowsPath: (): string => '/nonexistent/home/.archon/workflows', + getArchonHome: (): string => '/nonexistent/home',As per coding guidelines: "
**/*.{ts,tsx}: Enforce strict TypeScript configuration with complete type annotations on all functions; noanytypes without explicit justification".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/workflows/src/dag-executor.test.ts` around lines 26 - 32, The mock functions added (getWorkflowFolderSearchPaths, getDefaultCommandsPath, getDefaultWorkflowsPath, getHomeWorkflowsPath, getLegacyHomeWorkflowsPath, getArchonHome) lack explicit return type annotations; update each mock to include the correct TypeScript return types (getWorkflowFolderSearchPaths: () => string[], and the others: () => string) so the mocked API signatures are fully typed and satisfy the project's strict TS rules.packages/cli/src/commands/workflow.ts (1)
671-677: Use resolved workflow name when generating titles.Consider passing
workflow.nameinstead of the raw CLI inputworkflowNameso suffix/substring-resolved runs generate consistent canonical titles.Suggested tweak
await generateAndSetTitle( conversation.id, userMessage, titleAssistantType, workingCwd, - workflowName, + workflow.name, titleAssistantConfig );🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/cli/src/commands/workflow.ts` around lines 671 - 677, The call to generateAndSetTitle currently passes the raw CLI input workflowName, which can differ from the resolved workflow object; update the invocation to pass the resolved workflow.name instead so canonical titles use the finalized workflow identifier—locate the generateAndSetTitle(...) call (parameters: conversation.id, userMessage, titleAssistantType, workingCwd, workflowName, titleAssistantConfig) and replace the workflowName argument with workflow.name (the resolved workflow object available in this scope).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/providers/src/codex/provider.test.ts`:
- Around line 901-905: The test "prefixes workflow MCP warnings for workflow
forwarding" mutates process.env.ARCHON_CODEX_MISSING_TOKEN without restoring it;
capture the original value at test start (e.g., const orig =
process.env.ARCHON_CODEX_MISSING_TOKEN), delete or modify it for the test, and
then restore it in a finally block or afterEach so the environment is returned
to orig (also apply the same save/restore pattern for the other test around
lines 933-935 that deletes this env var); reference the test block name and
ensure restoration happens even on failures.
---
Nitpick comments:
In `@packages/cli/src/commands/workflow.ts`:
- Around line 671-677: The call to generateAndSetTitle currently passes the raw
CLI input workflowName, which can differ from the resolved workflow object;
update the invocation to pass the resolved workflow.name instead so canonical
titles use the finalized workflow identifier—locate the generateAndSetTitle(...)
call (parameters: conversation.id, userMessage, titleAssistantType, workingCwd,
workflowName, titleAssistantConfig) and replace the workflowName argument with
workflow.name (the resolved workflow object available in this scope).
In `@packages/core/src/services/title-generator.test.ts`:
- Around line 180-196: Update the conversation id in the test named "passes
assistantConfig through to the provider" from 'conv-12' to 'conv-17' so it
doesn't duplicate the id used by the "double failure" test; modify the call to
generateAndSetTitle in that test (which ultimately drives mockSendQuery) to use
'conv-17' so naming remains sequential while behavior and assertions (inspecting
mockSendQuery.mock.calls[0][3] and expect(optionsArg.assistantConfig)) remain
unchanged.
In `@packages/providers/src/mcp/config.ts`:
- Line 35: Add a short comment above the replacement logic explaining that only
uppercase environment variable references are expanded (per the regex
/\$([A-Z_][A-Z0-9_]*)/g), so references like $GITHUB_TOKEN or $API_KEY will be
substituted but lowercase or mixed-case names will be ignored; update the MCP
config guide or mcp-servers.md to call out this uppercase-only convention so
users know why result[key] = val.replace(...) only matches uppercase
identifiers.
In `@packages/workflows/src/dag-executor.test.ts`:
- Around line 26-32: The mock functions added (getWorkflowFolderSearchPaths,
getDefaultCommandsPath, getDefaultWorkflowsPath, getHomeWorkflowsPath,
getLegacyHomeWorkflowsPath, getArchonHome) lack explicit return type
annotations; update each mock to include the correct TypeScript return types
(getWorkflowFolderSearchPaths: () => string[], and the others: () => string) so
the mocked API signatures are fully typed and satisfy the project's strict TS
rules.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 9c0ae4dd-b13a-4abb-8e7e-767b6e14ea4b
⛔ Files ignored due to path filters (1)
bun.lockis excluded by!**/*.lock
📒 Files selected for processing (20)
packages/cli/src/commands/workflow.test.tspackages/cli/src/commands/workflow.tspackages/core/src/services/title-generator.test.tspackages/core/src/services/title-generator.tspackages/docs-web/src/content/docs/guides/authoring-workflows.mdpackages/docs-web/src/content/docs/guides/mcp-servers.mdpackages/providers/package.jsonpackages/providers/src/claude/index.tspackages/providers/src/claude/provider.tspackages/providers/src/codex/capabilities.tspackages/providers/src/codex/provider.test.tspackages/providers/src/codex/provider.tspackages/providers/src/index.tspackages/providers/src/mcp/config.tspackages/providers/src/registry.test.tspackages/workflows/package.jsonpackages/workflows/src/dag-executor.test.tspackages/workflows/src/dag-executor.tspackages/workflows/src/loader.test.tspackages/workflows/src/validator.test.ts
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c5a34ce557
ℹ️ 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".
| const isMcpClientError = errorEvent.message.toLowerCase().includes('mcp client'); | ||
| if (surfaceMcpClientErrors || !isMcpClientError) { | ||
| yield { type: 'system', content: `⚠️ ${errorEvent.message}` }; |
There was a problem hiding this comment.
Keep unrelated MCP client errors suppressed
When nodeConfig.mcp is set, this branch now emits every "mcp client" stream error to users. Because Codex config overrides are additive (global ~/.codex/config.toml MCP servers still load), a broken user-level/plugin MCP server can produce the same error string and get surfaced during workflow runs even if the failing server is not in the workflow MCP file. That regresses the prior behavior (always suppressing MCP-client noise) and can mislead users into debugging the wrong MCP config.
Useful? React with 👍 / 👎.
|
Updated this PR branch against current What changed in the update:
Validation:
The temporary smoke workflow/config files and local artifacts were removed after validation. |
|
Hi @borshyo — thanks for opening this PR. This repository uses a PR template at
Could you fill those out (even briefly)? The template If a section genuinely doesn't apply, just write "N/A" in |
Review SummaryVerdict: minor-fixes-needed Your PR extends MCP server support from Claude to Codex provider nodes, adds a shared config loader, and fixes title generation to use the workflow's actual provider. The code is well-structured, thoroughly tested, and error handling is solid throughout. Two small items need attention before merge. Suggested fixes
Minor / nice-to-have
Compliments
Reviewed via maintainer-review-pr workflow (Pi/Minimax). Aspects run: code-review, error-handling, test-coverage, comment-quality, docs-impact. |
Review SummaryVerdict: blocking-issues This PR adds excellent MCP support for Codex workflow nodes — the shared config module, error surfacing, and documentation updates are all well done. However, one CRITICAL issue must be resolved before merge: the import of a non-existent module will cause CI to fail. Blocking issues
Suggested fixes
Minor / nice-to-have
Compliments
Reviewed via maintainer-review-pr workflow (Pi/Minimax). Aspects run: code-review, error-handling, test-coverage, comment-quality, docs-impact. |
- Drop the broken `inferProviderFromModel` import from packages/cli/src/commands/workflow.ts. The module it referenced (@archon/workflows/model-validation) does not exist, which caused the CLI package's type-check to fail. Per CLAUDE.md, provider is resolved via an explicit chain (`node.provider ?? workflow.provider ?? config.assistant`) and model never influences provider selection — vendor SDKs add new model names faster than we can keep a mapping in sync, so the model-based inference fallback was the wrong primitive anyway. Removed the use site and added a comment anchoring the explicit-chain rule. - Drop "for Claude workflows" from the `dag.mcp_plugin_connection_suppressed` documentation in mcp-servers.md. The log event is provider-agnostic and the qualifier was misleading once Codex got MCP support too. - Add CHANGELOG.md entry under [Unreleased] for the MCP-for-Codex feature with a short note on the system-chunk surfacing behavior.
ac1af58 to
4795be8
Compare
* feat(workflows): support Codex MCP nodes * fix: address MCP workflow review feedback * fix: address review feedback on Codex MCP support - Drop the broken `inferProviderFromModel` import from packages/cli/src/commands/workflow.ts. The module it referenced (@archon/workflows/model-validation) does not exist, which caused the CLI package's type-check to fail. Per CLAUDE.md, provider is resolved via an explicit chain (`node.provider ?? workflow.provider ?? config.assistant`) and model never influences provider selection — vendor SDKs add new model names faster than we can keep a mapping in sync, so the model-based inference fallback was the wrong primitive anyway. Removed the use site and added a comment anchoring the explicit-chain rule. - Drop "for Claude workflows" from the `dag.mcp_plugin_connection_suppressed` documentation in mcp-servers.md. The log event is provider-agnostic and the qualifier was misleading once Codex got MCP support too. - Add CHANGELOG.md entry under [Unreleased] for the MCP-for-Codex feature with a short note on the system-chunk surfacing behavior. --------- Co-authored-by: Kirill <borshyo@users.noreply.github.com> Co-authored-by: Rasmus Widing <rasmus.widing@gmail.com>
- Update loadMcpConfig import to ../../mcp/config — coleam00#1459 (Codex MCP nodes) extracted it out of claude/provider.ts into its own module. - Regenerate bun.lock from current dev (configVersion: 1). Old commits on this branch carried configVersion: 0; rebased forward unchanged but produced different transitive resolution on install (telegram markdown tests fail locally despite identical telegramify-markdown pin). bun install re-adds @github/copilot-sdk on top of the fresh lockfile.
coleam00#1459 (Codex MCP nodes) extracted loadMcpConfig out of claude/provider.ts into a shared mcp/config.ts module. Update the applyMcpServers docblock to reflect that the helper is shared, not Claude-specific.
* feat(providers): add GitHub Copilot provider configuration types Define CopilotProviderDefaults with model, reasoning effort, and auth options Include system message injection and CLI path configuration support * feat(providers): add GitHub Copilot community provider integration Implement full provider with session management, streaming, and binary resolution Include comprehensive test coverage and lazy-load SDK pattern * feat(providers): add Copilot provider registration and exports Export CopilotProvider, config parser, and binary resolver utilities Register Copilot provider in community providers initialization * test(e2e): add GitHub Copilot provider smoke and abort tests Include streaming verification, token validation, and interrupt handling Verify connectivity, output plumbing, and session management * feat(copilot): add reasoning effort alias and session timeout improvements Map Archon `max` effort to SDK `xhigh` and extend sendAndWait timeout to 60min Handle fork-session requests with fresh session creation fallback * feat(copilot): add environment variable override support and auto model default Add COPILOT_MODEL env var with envOverrides tracking across config system Update provider to default model to 'auto' and enhance settings UI * docs(copilot): clarify session option handling comment * feat(copilot): add MCP, skills, agents, and structured output support Implement full Copilot SDK feature translation including tool restrictions, session config assembly, and best-effort JSON parsing for structured output * feat(copilot): respect useLoggedInUser to override env token test(copilot): cover env token precedence and override behavior * refactor(copilot): remove isCopilotModelCompatible and model-ref delete model-ref.ts and model-ref.test.ts update copilot index and registration to drop isCopilotModelCompatible export * fix(struct-out): enforce object requirement for structured output parsing return undefined if parsed JSON is not an object add tests covering non-object JSON in structured output parsing * feat(copilot): add isExecutableFile check for Copilot binary implement isExecutableFile using stat/access and use it in path resolution update errors to reference executable file and chmod guidance * feat(copilot): add PATH lookup for copilot binary resolution export resolveFromPath and prefer PATH result when executable * ci(workflows): migrate and add Copilot CI workflows - rename e2e-copilot-abort.yaml to test-workflows/e2e-copilot-abort.yaml - add e2e-copilot-all-features.yaml and relocate smoke workflow to test-workflows * refactor(shared): centralize structured-output parsing and skills update providers to re-export shared implementations expose shared utilities: tryParseStructuredOutput, augmentPromptForJsonSchema * feat(registry): register Copilot community provider update registry tests to cover copilot provider registration verify no collision with built-ins and copilot appears in lists * feat(copilot): defer session error warning and harden abort flow update event-bridge to emit no system chunk on session.error add provider-hardening tests for abort, trim model config and cleanup * ci(workflow): simplify output capture in e2e-copilot-smoke workflow * ci(workflows): restructure Copilot e2e workflows for clarity refactor multiple files into sections for fixtures, demos, and checks * ci(workflow): remove e2e-copilot-all-features workflow * feat(workflows): add e2e-copilot-all-nodes-smoke workflow delete old e2e-copilot-smoke workflow extend Copilot smoke tests to cover all node types and structured outputs * refactor(config): remove envOverrides support and COPILOT_MODEL usage use DEFAULT_AI_ASSISTANT env var to select default ai assistant update tests and docs to reflect new default and env var usage * docs: update Copilot docs and env sample * feat(copilot): implement token precedence for Copilot auth introduce COPILOT_GITHUB_TOKEN and generic GH tokens; track tokenSource reorder provider registration to register Pi before Copilot * feat(copilot): improve binary resolution and skill dir validation use isExecutableFile for vendor and autodetect checks validate skill names to reject absolute or traversal paths * fix: address review feedback on Copilot community provider - Add packages/providers/src/shared/structured-output.test.ts covering augmentPromptForJsonSchema, the happy-path clean parse, fence stripping (both ```json and bare ```), the forward-brace scan recovery for reasoning-model prose preamble, fence + preamble combo, whitespace trimming, invalid JSON, empty input, and the bare-primitive rejection contract (null/number/string/boolean). - Add packages/providers/src/shared/skills.test.ts covering empty/null inputs, non-string and empty-string skipping, missing skills, cwd vs home resolution order, cwd-shadows-home semantics, deduplication, and the name-only contract (rejection of absolute paths, nested paths, and parent traversal). Uses a staged temp HOME so reads are isolated. - Wire both new test files into packages/providers/package.json so they run in CI as separate bun test invocations. - Add `copilot` to the registered-providers list in the validation error example at guides/authoring-workflows.md, add a Copilot bullet to the Model strings section, and add an AI Providers -- Copilot env-var subsection plus DEFAULT_AI_ASSISTANT enumeration to reference/configuration.md. The two duplicate-import HIGH findings from the May 14 review were hallucinations — the imports don't exist in the current branch — so they need no fix. * chore(rebase): resolve semantic conflicts from dev - Update loadMcpConfig import to ../../mcp/config — #1459 (Codex MCP nodes) extracted it out of claude/provider.ts into its own module. - Regenerate bun.lock from current dev (configVersion: 1). Old commits on this branch carried configVersion: 0; rebased forward unchanged but produced different transitive resolution on install (telegram markdown tests fail locally despite identical telegramify-markdown pin). bun install re-adds @github/copilot-sdk on top of the fresh lockfile. * test(copilot): address CodeRabbit feedback on shared/skills tests - Stage the home copy of `delta` in `.agents` (not `.claude`) so the "prefers cwd over home" precedence test actually verifies precedence within `.agents`. Previously the home copy was in `.claude`, which could not have beaten the cwd `.agents` copy regardless of the resolver's behavior. - Add explicit return types on `makeFakeWorld` and the inner `stageSkill` to satisfy the project's strict TS annotation rule. * fix(providers): address remaining Wirasm review items - pi/event-bridge.ts: consolidate the `export-from` + `import-from` pair on shared/structured-output into the idiomatic `import { X }; export { X };` form. The preceding comment already promised "import once for local use and re-export" but the prior order said the opposite. - authoring-workflows.md: add `copilot` to the prose listing of registered providers (the example validation error string below it already includes copilot). * chore(copilot): drop stale "Claude's loadMcpConfig" attribution #1459 (Codex MCP nodes) extracted loadMcpConfig out of claude/provider.ts into a shared mcp/config.ts module. Update the applyMcpServers docblock to reflect that the helper is shared, not Claude-specific. --------- Co-authored-by: Daniel Scholl <daniel.scholl@microsoft.com> Co-authored-by: Rasmus Widing <rasmus.widing@gmail.com>
Summary
mcp:configs, matching the existing Claude workflow capability.{ "mcpServers": { ... } }wrapper.mcp_serversoverrides, includingheaders->http_headers.allowed_tools/denied_toolsremain unsupported for Codex sandboxing.UX Journey
Before, a Codex workflow node could declare
mcp: figma.json, but Archon treated MCP as unsupported for Codex and the provider never attached those servers. Users had to configure MCP globally in Codex outside the workflow.After, a Codex workflow node can attach MCP servers through its workflow-scoped JSON config. The provider loads the node config, expands env/header vars, passes per-call
mcp_serversconfig to Codex, and surfaces workflow-configured MCP connection errors to the user.Architecture Diagram
Label Snapshot
risk: mediumsize: Mworkflows|providers|docs|testsproviders:codex-mcpChange Metadata
featuremultiLinked Issue
No linked issue. This PR replaces #1456, which was closed unmerged on 2026-04-28, and carries forward the same Codex MCP workflow capability with the follow-up review fixes and a refresh against current
dev.Validation Evidence
Security Impact
mcp:file.envandheadersvalues can be expanded from Archon's process env plus codebase-scoped env vars.Mitigations:
http_headers; secret values are not logged.Compatibility / Migration
mcp:are unchanged.{ "mcpServers": { ... } }wrapper also works. Mixed top-levelmcpServersplus sibling metadata is rejected with a clear error.Human Verification
Verified locally:
nodeConfig.mcp, loads JSON, and passes per-callconfig.mcp_serversto the Codex SDK.$VAR_NAMEexpansion uses request/codebase env over process env when provided.headersmaps to Codexhttp_headers.mcpServerswrapper JSON loads as the server map.loadConfig(cwd)a hard dependency ofworkflowRunCommand.⚠️prefix so DAG workflows forward them.bun run validatepasses locally.Not verified in this PR:
Side Effects / Blast Radius
Affected areas:
@archon/providersCodex/Claude provider internals and shared MCP loader.Potential unintended effects:
mcp_serversparser.allowed_tools: []still does not enforce MCP-only sandboxing, and docs call this out.mcpServerswrapper metadata now fail clearly rather than being interpreted incorrectly.Rollback Plan
devif Codex MCP config parsing causes runtime failures.mcp:fail during node startup with Codex config parsing errors, or workflow-configured MCP server errors appear in node output.Risks and Mitigations
mcp_serversoverride shape or rejects a field passed through this integration.allowed_tools/denied_toolsnow enforce MCP-only sandboxing for Codex.{ "mcpServers": { ... } }wrapper or mix wrapper metadata with direct server maps.mcpServerswrappers, and fails fast for mixed top-level wrapper metadata.Summary by CodeRabbit
New Features
Improvements
Documentation
Tests