Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
2.2 kB · 77 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778import { z } from 'zod/v4'import { buildTool, type ToolDef } from '../../Tool.js'import { lazySchema } from '../../utils/lazySchema.js'import type { PermissionResult } from '../../utils/permissions/PermissionResult.js'import { isOutputLineTruncated } from '../../utils/terminal.js'import { DESCRIPTION, PROMPT } from './prompt.js'import { renderToolResultMessage, renderToolUseMessage, renderToolUseProgressMessage,} from './UI.js'
// Allow any input object since MCP tools define their own schemasexport const inputSchema = lazySchema(() => z.object({}).passthrough())type InputSchema = ReturnType<typeof inputSchema>
export const outputSchema = lazySchema(() => z.string().describe('MCP tool execution result'),)type OutputSchema = ReturnType<typeof outputSchema>
export type Output = z.infer<OutputSchema>
// Re-export MCPProgress from centralized types to break import cyclesexport type { MCPProgress } from '../../types/tools.js'
export const MCPTool = buildTool({ isMcp: true, // Overridden in mcpClient.ts with the real MCP tool name + args isOpenWorld() { return false }, // Overridden in mcpClient.ts name: 'mcp', maxResultSizeChars: 100_000, // Overridden in mcpClient.ts async description() { return DESCRIPTION }, // Overridden in mcpClient.ts async prompt() { return PROMPT }, get inputSchema(): InputSchema { return inputSchema() }, get outputSchema(): OutputSchema { return outputSchema() }, // Overridden in mcpClient.ts async call() { return { data: '', } }, async checkPermissions(): Promise<PermissionResult> { return { behavior: 'passthrough', message: 'MCPTool requires permission.', } }, renderToolUseMessage, // Overridden in mcpClient.ts userFacingName: () => 'mcp', renderToolUseProgressMessage, renderToolResultMessage, isResultTruncated(output: Output): boolean { return isOutputLineTruncated(output) }, mapToolResultToToolResultBlockParam(content, toolUseID) { return { tool_use_id: toolUseID, type: 'tool_result', content, } },} satisfies ToolDef<InputSchema, Output>)