| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import { buildComputerUseTools } from '@ant/computer-use-mcp'
- import { join } from 'path'
- import { fileURLToPath } from 'url'
- import { buildMcpToolName } from '../../services/mcp/mcpStringUtils.js'
- import type { ScopedMcpServerConfig } from '../../services/mcp/types.js'
- import { isInBundledMode } from '../bundledMode.js'
- import { CLI_CU_CAPABILITIES, COMPUTER_USE_MCP_SERVER_NAME } from './common.js'
- import { getChicagoCoordinateMode } from './gates.js'
- /**
- * Build the dynamic MCP config + allowed tool names. Mirror of
- * `setupClaudeInChrome`. The `mcp__computer-use__*` tools are added to
- * `allowedTools` so they bypass the normal permission prompt — the package's
- * `request_access` handles approval for the whole session.
- *
- * The MCP layer isn't ceremony: the API backend detects `mcp__computer-use__*`
- * tool names and emits a CU availability hint into the system prompt
- * (COMPUTER_USE_MCP_AVAILABILITY_HINT in the anthropic repo). Built-in tools
- * with different names wouldn't trigger it. Cowork uses the same names for the
- * same reason (apps/desktop/src/main/local-agent-mode/systemPrompt.ts:314).
- */
- export function setupComputerUseMCP(): {
- mcpConfig: Record<string, ScopedMcpServerConfig>
- allowedTools: string[]
- } {
- const allowedTools = buildComputerUseTools(
- CLI_CU_CAPABILITIES,
- getChicagoCoordinateMode(),
- ).map(t => buildMcpToolName(COMPUTER_USE_MCP_SERVER_NAME, t.name))
- // command/args are never spawned — client.ts intercepts by name and
- // uses the in-process server. The config just needs to exist with
- // type 'stdio' to hit the right branch. Mirrors Chrome's setup.
- const args = isInBundledMode()
- ? ['--computer-use-mcp']
- : [
- join(fileURLToPath(import.meta.url), '..', 'cli.js'),
- '--computer-use-mcp',
- ]
- return {
- mcpConfig: {
- [COMPUTER_USE_MCP_SERVER_NAME]: {
- type: 'stdio',
- command: process.execPath,
- args,
- scope: 'dynamic',
- } as const,
- },
- allowedTools,
- }
- }
|