fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(agent): exempt tcode MCP servers from codex tool-call approval - #272

Merged
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption
Aug 24, 2026
Merged

fix(agent): exempt tcode MCP servers from codex tool-call approval#272
Tryanks merged 1 commit into
mainfrom
fix/codex-mcp-tool-approval-exemption

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Follow-up to #270. The screenshot failure codex: MCP server tcode_report sent an elicitation with no supported fields; declined traced to codex 0.149's new MCP tool-call approval: with the ToolCallMcpElicitation feature, codex surfaces the approval as an mcpServer/elicitation/request attributed to the server, with a form schema tcode's elicitation parser has no supported fields for — so tcode auto-declines and the tool call fails. That killed report_result (and any other tcode-server tool) on codex children outside full access.

Fix

McpRegistration::codex_config_override() now includes default_tools_approval_mode="approve" in the inline server table. Verified against codex rust-v0.149.1:

  • custom_mcp_tool_approval_mode reads mcp_servers.<name>.default_tools_approval_mode first,
  • mcp_permission_prompt_is_auto_approved returns true immediately for AppToolApproval::Approve, so no prompt and no elicitation.

This is the codex mirror of #270's claude-side auto-approve: tcode's own servers (report, preview, orchestrate, computer-use) are trusted by construction. The field exists in codex config since ~0.116, far older than the app-server v2 protocol tcode already requires.

🤖 Generated with Claude Code

Codex 0.149 gates MCP tool calls behind an approval it surfaces as an
mcpServer/elicitation/request attributed to the server; tcode cannot render
that form schema, auto-declines, and the call fails — children's
report_result died with "sent an elicitation with no supported fields;
declined". tcode's own servers are trusted by construction, so the codex
config override now carries default_tools_approval_mode="approve"
(honored first in codex's custom_mcp_tool_approval_mode), the codex mirror
of the claude-side auto-approve in #270.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit 19a292e into mainAug 24, 2026
3 checks passed
@Tryanks
Tryanks deleted the fix/codex-mcp-tool-approval-exemption branch August 24, 2026 20:15
Sign up for freeto 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

@Tryanks