codex-computer-use-mcp 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from "@modelcontextprotocol/sdk/types.js";
4
5
  import { executeDirectTool, getDirectStatus } from "./direct-service.js";
5
- import { DIRECT_TOOL_SCHEMAS, MUTATING_METHODS, OFFICIAL_METHODS, READ_ONLY_METHODS, } from "./tools.js";
6
- const version = "0.2.0";
6
+ import { forwardOfficialElicitationToMcpClient } from "./mcp-elicitation.js";
7
+ import { EXPECTED_OFFICIAL_INPUT_SCHEMAS, isDirectMethod, OFFICIAL_METHODS, OFFICIAL_TOOL_METADATA, } from "./tools.js";
8
+ const version = "0.3.1";
7
9
  async function handleCli() {
8
10
  const args = process.argv.slice(2);
9
11
  if (args.length === 0)
@@ -22,52 +24,52 @@ catch (error) {
22
24
  console.error(error instanceof Error ? error.message : "Invalid command");
23
25
  process.exit(1);
24
26
  }
25
- const server = new McpServer({ name: "codex-computer-use-mcp", version }, { capabilities: { logging: {} } });
26
- function titleFor(method) {
27
- return method.split("_").map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`).join(" ");
28
- }
29
- function descriptionFor(method) {
30
- return `Call the official signed Computer Use ${method} capability directly through the unrestricted no-permissions interface. Pi/the MCP client supplies the typed arguments; no wrapper approval prompt, mode gate, nested model, prompt, planner, or model-token usage is involved.`;
31
- }
32
- for (const method of OFFICIAL_METHODS) {
33
- server.registerTool(method, {
34
- title: titleFor(method),
35
- description: descriptionFor(method),
36
- inputSchema: DIRECT_TOOL_SCHEMAS[method],
37
- annotations: {
38
- readOnlyHint: READ_ONLY_METHODS.has(method),
39
- destructiveHint: MUTATING_METHODS.has(method),
40
- idempotentHint: method === "list_apps" || method === "get_app_state",
41
- openWorldHint: false,
42
- },
43
- }, async (toolArgs, extra) => {
27
+ const server = new Server({ name: "codex-computer-use-mcp", version }, { capabilities: { logging: {}, tools: {} } });
28
+ const officialToolDefinitions = OFFICIAL_METHODS.map((method) => ({
29
+ name: method,
30
+ description: OFFICIAL_TOOL_METADATA[method].description,
31
+ inputSchema: EXPECTED_OFFICIAL_INPUT_SCHEMAS[method],
32
+ annotations: OFFICIAL_TOOL_METADATA[method].annotations,
33
+ }));
34
+ const statusToolDefinition = {
35
+ name: "computer_use_status",
36
+ title: "Computer Use Status",
37
+ description: "Show direct-call architecture, durable no-permissions policy, signed broker status, supported methods, and private audit path.",
38
+ inputSchema: { type: "object", properties: {}, additionalProperties: false },
39
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
40
+ };
41
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
42
+ tools: [...officialToolDefinitions, statusToolDefinition],
43
+ }));
44
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
45
+ if (request.params.name === statusToolDefinition.name) {
44
46
  try {
45
- const response = await executeDirectTool({ method, arguments: toolArgs }, { signal: extra.signal });
46
- return {
47
- content: response.content,
48
- structuredContent: response.details,
49
- isError: response.isError,
50
- };
47
+ const status = await getDirectStatus();
48
+ return { content: [{ type: "text", text: JSON.stringify(status, null, 2) }], structuredContent: status };
51
49
  }
52
50
  catch (error) {
53
- return {
54
- content: [{ type: "text", text: error instanceof Error ? error.message : "Direct Computer Use failed" }],
55
- isError: true,
56
- };
51
+ return { content: [{ type: "text", text: error instanceof Error ? error.message : "Could not read status" }], isError: true };
57
52
  }
58
- });
59
- }
60
- server.registerTool("computer_use_status", {
61
- title: "Computer Use Status",
62
- description: "Show direct-call architecture, permission mode, signed broker status, supported methods, and private audit path.",
63
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
64
- }, async () => {
53
+ }
54
+ if (!isDirectMethod(request.params.name)) {
55
+ throw new McpError(ErrorCode.InvalidParams, `Unknown tool: ${request.params.name}`);
56
+ }
65
57
  try {
66
- const status = await getDirectStatus();
67
- return { content: [{ type: "text", text: JSON.stringify(status, null, 2) }], structuredContent: status };
58
+ const response = await executeDirectTool({ method: request.params.name, arguments: request.params.arguments ?? {} }, {
59
+ signal: extra.signal,
60
+ onElicitation: (elicitation) => forwardOfficialElicitationToMcpClient(server, elicitation, extra.signal),
61
+ });
62
+ return {
63
+ content: response.content,
64
+ structuredContent: response.details,
65
+ isError: response.isError,
66
+ };
68
67
  }
69
68
  catch (error) {
70
- return { content: [{ type: "text", text: error instanceof Error ? error.message : "Could not read status" }], isError: true };
69
+ return {
70
+ content: [{ type: "text", text: error instanceof Error ? error.message : "Direct Computer Use failed" }],
71
+ isError: true,
72
+ };
71
73
  }
72
74
  });
73
75
  const transport = new StdioServerTransport();
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -41,12 +41,7 @@ export declare const DIRECT_TOOL_SCHEMAS: {
41
41
  readonly scroll: z.ZodObject<{
42
42
  app: z.ZodString;
43
43
  element_index: z.ZodString;
44
- direction: z.ZodEnum<{
45
- down: "down";
46
- left: "left";
47
- right: "right";
48
- up: "up";
49
- }>;
44
+ direction: z.ZodString;
50
45
  pages: z.ZodOptional<z.ZodNumber>;
51
46
  }, z.core.$strict>;
52
47
  readonly drag: z.ZodObject<{
@@ -68,6 +63,17 @@ export declare const DIRECT_TOOL_SCHEMAS: {
68
63
  export type DirectMethod = keyof typeof DIRECT_TOOL_SCHEMAS;
69
64
  export type DirectToolArguments = Record<string, unknown>;
70
65
  export declare const OFFICIAL_METHODS: readonly ("click" | "drag" | "get_app_state" | "list_apps" | "perform_secondary_action" | "press_key" | "scroll" | "select_text" | "set_value" | "type_text")[];
66
+ export interface OfficialToolMetadata {
67
+ description: string;
68
+ annotations: {
69
+ destructiveHint: boolean;
70
+ idempotentHint: boolean;
71
+ openWorldHint: boolean;
72
+ readOnlyHint: boolean;
73
+ };
74
+ }
75
+ /** Exact upstream descriptions and annotations exposed by the signed Computer Use helper. */
76
+ export declare const OFFICIAL_TOOL_METADATA: Readonly<Record<DirectMethod, OfficialToolMetadata>>;
71
77
  export declare const READ_ONLY_METHODS: Set<"click" | "drag" | "get_app_state" | "list_apps" | "perform_secondary_action" | "press_key" | "scroll" | "select_text" | "set_value" | "type_text">;
72
78
  export declare const MUTATING_METHODS: Set<"click" | "drag" | "get_app_state" | "list_apps" | "perform_secondary_action" | "press_key" | "scroll" | "select_text" | "set_value" | "type_text">;
73
79
  export declare function isDirectMethod(value: string): value is DirectMethod;
package/dist/tools.js CHANGED
@@ -1,50 +1,120 @@
1
1
  import { z } from "zod";
2
- const app = z.string().trim().min(1).max(500).describe("App name, full app path, or unambiguous bundle identifier");
3
- const elementIndex = z.string().trim().min(1).max(200).describe("Element identifier from computer_use_get_app_state");
4
- const coordinate = z.number().finite().min(0).max(1_000_000);
2
+ const app = z.string().describe("App name, full app path, or unambiguous bundle identifier");
3
+ const selectTextApp = z.string().describe("App name or bundle identifier");
5
4
  export const DIRECT_TOOL_SCHEMAS = {
6
5
  list_apps: z.object({}).strict(),
7
6
  get_app_state: z.object({ app }).strict(),
8
7
  click: z
9
8
  .object({
10
9
  app,
11
- click_count: z.number().int().min(1).max(10).optional(),
12
- element_index: elementIndex.optional(),
13
- mouse_button: z.enum(["left", "right", "middle"]).optional(),
14
- x: coordinate.optional(),
15
- y: coordinate.optional(),
10
+ click_count: z.number().refine(Number.isInteger).describe("Number of clicks. Defaults to 1").optional(),
11
+ element_index: z.string().describe("Element index to click").optional(),
12
+ mouse_button: z.enum(["left", "right", "middle"]).describe("Mouse button to click. Defaults to left.").optional(),
13
+ x: z.number().describe("X coordinate in screenshot pixel coordinates").optional(),
14
+ y: z.number().describe("Y coordinate in screenshot pixel coordinates").optional(),
16
15
  })
17
16
  .strict(),
18
17
  perform_secondary_action: z
19
- .object({ app, element_index: elementIndex, action: z.string().trim().min(1).max(200) })
18
+ .object({
19
+ app,
20
+ element_index: z.string().describe("Element identifier"),
21
+ action: z.string().describe("Secondary accessibility action name"),
22
+ })
20
23
  .strict(),
21
- set_value: z.object({ app, element_index: elementIndex, value: z.string().max(20_000) }).strict(),
22
- select_text: z
24
+ set_value: z
23
25
  .object({
24
26
  app,
25
- element_index: elementIndex,
26
- text: z.string().min(1).max(20_000),
27
- prefix: z.string().max(2_000).optional(),
28
- selection: z.enum(["text", "cursor_before", "cursor_after"]).optional(),
29
- suffix: z.string().max(2_000).optional(),
27
+ element_index: z.string().describe("Element identifier"),
28
+ value: z.string().describe("Value to assign"),
29
+ })
30
+ .strict(),
31
+ select_text: z
32
+ .object({
33
+ app: selectTextApp,
34
+ element_index: z.string().describe("Text element identifier"),
35
+ text: z.string().describe("Target text as shown in the accessibility tree"),
36
+ prefix: z.string().describe("Optional text immediately before the target, used to disambiguate repeated matches").optional(),
37
+ selection: z.enum(["text", "cursor_before", "cursor_after"]).describe("Whether to select the text or place the cursor before or after it. Defaults to text.").optional(),
38
+ suffix: z.string().describe("Optional text immediately after the target, used to disambiguate repeated matches").optional(),
30
39
  })
31
40
  .strict(),
32
41
  scroll: z
33
42
  .object({
34
43
  app,
35
- element_index: elementIndex,
36
- direction: z.enum(["up", "down", "left", "right"]),
37
- pages: z.number().finite().positive().max(100).optional(),
44
+ element_index: z.string().describe("Element identifier"),
45
+ direction: z.string().describe("Scroll direction: up, down, left, or right"),
46
+ pages: z.number().describe("Number of pages to scroll. Fractional values are supported. Defaults to 1").optional(),
38
47
  })
39
48
  .strict(),
40
49
  drag: z
41
- .object({ app, from_x: coordinate, from_y: coordinate, to_x: coordinate, to_y: coordinate })
50
+ .object({
51
+ app,
52
+ from_x: z.number().describe("Start X coordinate"),
53
+ from_y: z.number().describe("Start Y coordinate"),
54
+ to_x: z.number().describe("End X coordinate"),
55
+ to_y: z.number().describe("End Y coordinate"),
56
+ })
42
57
  .strict(),
43
- press_key: z.object({ app, key: z.string().trim().min(1).max(100).describe("Official xdotool-style key name or combination, for example Meta_L+a, Return, or Escape") }).strict(),
44
- type_text: z.object({ app, text: z.string().max(20_000) }).strict(),
58
+ press_key: z.object({ app, key: z.string().describe("Key or key combination to press") }).strict(),
59
+ type_text: z.object({ app, text: z.string().describe("Literal text to type") }).strict(),
45
60
  };
46
61
  export const OFFICIAL_METHODS = Object.freeze(Object.keys(DIRECT_TOOL_SCHEMAS));
47
- export const READ_ONLY_METHODS = new Set(["list_apps", "get_app_state"]);
62
+ const readAnnotations = Object.freeze({
63
+ destructiveHint: false,
64
+ idempotentHint: true,
65
+ openWorldHint: false,
66
+ readOnlyHint: true,
67
+ });
68
+ const actionAnnotations = Object.freeze({
69
+ destructiveHint: false,
70
+ idempotentHint: false,
71
+ openWorldHint: false,
72
+ readOnlyHint: false,
73
+ });
74
+ /** Exact upstream descriptions and annotations exposed by the signed Computer Use helper. */
75
+ export const OFFICIAL_TOOL_METADATA = Object.freeze({
76
+ list_apps: {
77
+ description: "List the apps on this computer. Returns the set of apps that are currently running, as well as any that have been used in the last 14 days, including details on usage frequency",
78
+ annotations: readAnnotations,
79
+ },
80
+ get_app_state: {
81
+ description: "Start an app use session if needed, then get the state of the app's key window and return a screenshot and accessibility tree. This must be called once per assistant turn before interacting with the app",
82
+ annotations: readAnnotations,
83
+ },
84
+ click: {
85
+ description: "Click an element by index or pixel coordinates from screenshot",
86
+ annotations: actionAnnotations,
87
+ },
88
+ perform_secondary_action: {
89
+ description: "Invoke a secondary accessibility action exposed by an element",
90
+ annotations: actionAnnotations,
91
+ },
92
+ set_value: {
93
+ description: "Set the value of a settable accessibility element",
94
+ annotations: actionAnnotations,
95
+ },
96
+ select_text: {
97
+ description: "Select text inside a text element, or place the text cursor before or after it. Provide text exactly as it appears in the accessibility tree, including any Markdown formatting. If the text is not unique, provide surrounding prefix or suffix text to disambiguate it.",
98
+ annotations: actionAnnotations,
99
+ },
100
+ scroll: {
101
+ description: "Scroll an element in a direction by a number of pages",
102
+ annotations: actionAnnotations,
103
+ },
104
+ drag: {
105
+ description: "Drag from one point to another using pixel coordinates",
106
+ annotations: actionAnnotations,
107
+ },
108
+ press_key: {
109
+ description: "Press a key or key-combination on the keyboard, including modifier and navigation keys.\n - This supports xdotool's `key` syntax.\n - Examples: \"a\", \"Return\", \"Tab\", \"super+c\", \"Up\", \"KP_0\" (for the numpad 0 key).",
110
+ annotations: actionAnnotations,
111
+ },
112
+ type_text: {
113
+ description: "Type literal text using keyboard input",
114
+ annotations: actionAnnotations,
115
+ },
116
+ });
117
+ export const READ_ONLY_METHODS = new Set(OFFICIAL_METHODS.filter((method) => OFFICIAL_TOOL_METADATA[method].annotations.readOnlyHint));
48
118
  export const MUTATING_METHODS = new Set(OFFICIAL_METHODS.filter((method) => !READ_ONLY_METHODS.has(method)));
49
119
  export function isDirectMethod(value) {
50
120
  return OFFICIAL_METHODS.includes(value);
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ # ADR 0001: Keep Code Mode in a standalone MCP process
2
+
3
+ - **Status:** Accepted
4
+ - **Date:** 2026-07-15
5
+
6
+ ## Context
7
+
8
+ Codex can compose MCP tools through JavaScript Code Mode. Pi's progressive tool disclosure reduces schema context but does not let generated code invoke arbitrary Pi tools. Adding an executor, loader, or batch method here would also break this repository's exact ten-tool Computer Use contract.
9
+
10
+ We considered existing Pi and MCP implementations:
11
+
12
+ - `pi-mcp-adapter` has the strongest Pi-facing MCP configuration, OAuth, elicitation, lifecycle, metadata, and rich-result handling, but no Code Mode executor.
13
+ - `dmmulroy/pi-mcp` has a clean MCP manager but no Code Mode, no published package, and no detected licence.
14
+ - `Hor1zonZzz/pi-codeMode` demonstrates Pi-side JavaScript orchestration but supports only reconstructed built-ins and has no MCP support or tests.
15
+ - `pi-code-tool` is a tested Pi-native pattern, but uses Python/Monty and does not aggregate MCP servers.
16
+ - Cloudflare's Code Mode packages are strong design references, but their secure executor depends on Cloudflare Dynamic Workers; `cloudflare/mcp` is specific to the Cloudflare API.
17
+ - `tool-sandbox` and `tool-sandbox-mcp` provide QuickJS-based execution, but impose a separate capability boundary and the server primarily targets one upstream HTTP gateway.
18
+ - `cmcp` is the closest standalone multi-server implementation, but lacks the OAuth, elicitation, sampling, roots, and notification fidelity required here.
19
+
20
+ ## Decision
21
+
22
+ If we add Code Mode for Pi, implement it as a **separate stdio MCP server** loaded through Pi's existing MCP adapter.
23
+
24
+ - Do not modify Pi core.
25
+ - Do not add Code Mode methods to `codex-computer-use-mcp`; its public Computer Use surface remains the exact ten official tools.
26
+ - Let the Code Mode process connect to upstream MCP servers and expose a compact code-execution surface for discovery and composition.
27
+ - Give generated code the same filesystem, network, environment, and process authority as the Code Mode server's surrounding Pi environment. Do not add a stricter capability/security sandbox solely around Code Mode.
28
+ - Use the standalone MCP process as the fault-containment boundary. Pi can time out, terminate, and restart it if generated code wedges the process. Do not add a child process or isolate per execution without operational evidence that the server boundary is insufficient.
29
+ - Preserve upstream MCP behavior across the nested boundary, especially OAuth, cancellation, rich content, and elicitation responses. Never fabricate `accept` or `decline`; unsupported interaction returns `cancel`.
30
+
31
+ Normal Pi tools remain available directly. This decision adds MCP composition; it does not attempt to turn every Pi tool into a nested Code Mode function.
32
+
33
+ ## Rationale
34
+
35
+ The process boundary provides the practical reliability benefit—one malformed snippet cannot freeze Pi—without creating an artificial authority mismatch between Pi and Code Mode. A separate security sandbox would constrain only one route while the same agent can already use Pi's deliberately unrestricted tools.
36
+
37
+ Keeping Code Mode separate also preserves this package's upstream contract, works with agent-agnostic MCP clients, and avoids coupling the implementation to Pi internals.
38
+
39
+ ## Consequences
40
+
41
+ - Code Mode is a separate package and lifecycle from Computer Use.
42
+ - The first implementation must close the protocol-fidelity gaps found in existing standalone proxies rather than adopting one unchanged.
43
+ - Pi's MCP adapter remains responsible for the outer client connection and UI; the Code Mode server remains responsible for its upstream MCP connections and execution lifecycle.
44
+ - Process timeout, termination, restart, cleanup, and end-to-end elicitation tests are release requirements.
45
+ - Additional execution isolation remains an evidence-driven future option, not a default architectural requirement.
@@ -1,6 +1,6 @@
1
1
  # Pi integration
2
2
 
3
- The native Pi adapter is the primary 0.2 path. It registers ten namespaced typed tools so Pi itself chooses each official Computer Use method and argument.
3
+ The native Pi adapter is the primary 0.3 path. It registers ten namespaced typed tools so Pi itself chooses each official Computer Use method and argument. Pi 0.80.7 or newer exposes them progressively without changing the ten-tool contract.
4
4
 
5
5
  ## Source checkout acceptance
6
6
 
@@ -13,18 +13,23 @@ CODEX_COMPUTER_USE_HOME="$(mktemp -d)" \
13
13
 
14
14
  `-ne` prevents an installed 0.1 adapter from loading at the same time. This source workflow does not install or switch live Pi configuration.
15
15
 
16
- For normal installation, use the exact version 0.2.0 npm package:
16
+ For normal installation, use the exact version 0.3.1 npm package:
17
17
 
18
18
  ```bash
19
- pi install npm:codex-computer-use-mcp@0.2.0
19
+ pi install npm:codex-computer-use-mcp@0.3.1
20
20
  ```
21
21
 
22
22
  Use the source workflow only when you need to test an exact reviewed commit. Follow the rollback procedure in `MIGRATION.md` when replacing version 0.1.
23
23
 
24
24
  ## Registered surface
25
25
 
26
+ Initially active:
27
+
26
28
  - `computer_use_list_apps`
27
29
  - `computer_use_get_app_state`
30
+
31
+ Registered and activated after a successful `get_app_state` call:
32
+
28
33
  - `computer_use_click`
29
34
  - `computer_use_perform_secondary_action`
30
35
  - `computer_use_set_value`
@@ -33,13 +38,18 @@ Use the source workflow only when you need to test an exact reviewed commit. Fol
33
38
  - `computer_use_drag`
34
39
  - `computer_use_press_key`
35
40
  - `computer_use_type_text`
41
+
42
+ Command:
43
+
36
44
  - `/computer-use-status`
37
45
 
38
- No-permissions is the only policy: all ten tools are available with no wrapper approval prompts, mode selector, or app/intent/action gate. Pi does not advertise or render elicitation UI. Unexpected downstream elicitations are silently declined and never accepted.
46
+ The session-start narrowing preserves every active tool owned by Pi or another extension. Activation after inspection is purely additive: both inspection tools remain active, and the adapter does not remove or replace any tool in that call. The lazily activated tools rely on their official descriptions and omit `promptSnippet` and `promptGuidelines`, so native deferred schema loading does not rebuild the system prompt. Supported Anthropic and OpenAI models receive the definitions at the inspection result; other models receive Pi's normal active-tool fallback on the next request.
47
+
48
+ No-permissions is the only policy: all ten tools are registered and available through this lifecycle with no wrapper permission prompts, mode selector, or app/intent/action gate. The signed host runs with Codex Full access (`approvalPolicy: "never"`, `sandbox: "danger-full-access"`), so normal empty-schema Computer Use app approvals are accepted by Codex before they reach Pi. Pi renders any form, OpenAI-form, or URL elicitation app-server does emit. The user's `accept`, `decline`, or `cancel` response is returned unchanged; the adapter never fabricates one.
39
49
 
40
50
  ## Generic MCP gateway
41
51
 
42
- Merge `mcp.json.example` only for the exact 0.2.0 package or after building an exact reviewed source commit. `directTools: false` is intentional; it keeps this powerful generic MCP surface behind Pi's gateway.
52
+ Merge `mcp.json.example` only for the exact 0.3.1 package or after building an exact reviewed source commit. `directTools: false` is intentional; it keeps this powerful generic MCP surface behind Pi's gateway.
43
53
 
44
54
  For a source checkout:
45
55
 
@@ -59,6 +69,6 @@ For a source checkout:
59
69
 
60
70
  Do not load the native adapter and generic MCP adapter into the same acceptance process unless tool names are intentionally isolated.
61
71
 
62
- The generic MCP path uses the same durable no-permissions policy: all ten methods, no wrapper approval UI, and silent decline of unexpected downstream elicitations. Configure persistent app access only through official ChatGPT Computer Use settings.
72
+ The generic MCP path uses the same durable no-permissions and official Full access policy: all ten methods and no wrapper permission gate. App-access approvals resolve inside Codex. Any standard form or URL elicitation app-server emits is forwarded to the invoking MCP client; an unsupported or headless client returns `cancel` rather than a fabricated decision.
63
73
 
64
74
  See the root `MIGRATION.md` before replacing an installed 0.1 adapter.