Entrypoints
Entrypoints 模块为 Claude Code 提供三种运行模式的入口适配:CLI 交互模式(cli.tsx,基于 Ink 渲染终端 UI)、SDK 编程模式(sdk/,提供 TypeScript API 供外部集成)、MCP 服务模式(mcp.ts,作为 Model Context Protocol 服务器运行)。每种入口最终都汇聚到相同的核心逻辑,但启动路径、I/O 处理和生命周期管理各不相同。
职责与设计理念
职责说明
多模式入口适配器,统一 CLI/SDK/MCP 三种调用方式的启动路径
设计理念
入口多态——无论从终端、SDK 还是 MCP 进入,核心对话逻辑只有一份。入口层只负责 I/O 适配,不承载业务逻辑。
架构决策
为什么需要三种入口模式?
分离 CLI(人机交互)、SDK(程序集成)、MCP(AI-to-AI)三种入口
CLI 面向终端用户,需要 UI 渲染;SDK 面向开发者,需要 TypeScript API;MCP 面向其他 AI 工具,需要标准协议。三种消费者的 I/O 模型完全不同,但核心对话逻辑相同。
⚖️ 三套入口增加了维护成本,但避免了在核心逻辑中混入 I/O 适配代码。
文件清单
| 文件名 | 用途 |
|---|---|
| cli.tsx | CLI 交互模式入口,初始化 Ink 渲染器并启动 React 应用 |
| mcp.ts | MCP 服务器模式入口,将 Claude Code 作为 MCP 工具提供者 |
| init.ts | 通用初始化逻辑,环境检测与依赖预加载 |
| agentSdkTypes.ts | SDK 消息类型定义,定义 SDKMessage 等核心类型 |
| sdk/ | SDK 编程模式入口,提供 TypeScript API 供外部集成调用 |
使用场景
cli.tsx 启动 Ink 渲染器,挂载 React 组件树,进入交互式对话
CLI → Entrypoints.cli.tsx → Ink.render(<App />)
SDK 模式,外部 TypeScript 程序通过 API 调用 Claude Code
External Code → Entrypoints.sdk/ → Core Logic
MCP 服务器模式,Claude Code 作为工具提供者运行
CLI → Entrypoints.mcp.ts → MCP Protocol Handler
关键代码片段
CLI 入口启动流程
async function main(): Promise<void> {
// 环境初始化 → 配置加载 → Ink 渲染器启动
const { render } = await import('../ink/ink.js')
render(<App />, { /* terminal options */ })
} CLI 入口的核心启动流程:初始化环境后启动 Ink React 渲染器
MCP 服务器模式
// Claude Code 自身也可以作为 MCP Server 运行
// 其他 AI 工具可以通过 MCP 协议调用 Claude Code 的能力
async function startMcpServer(config: McpConfig): Promise<void> {
const server = new McpServer({
tools: getExposedTools(),
resources: getExposedResources(),
})
await server.listen(config.transport)
} Claude Code 不仅消费 MCP 工具,自身也能作为 MCP Server 被其他 AI 调用
技术笔记
动态导入优化
cli.tsx 使用 dynamic import() 延迟加载 Ink 渲染器,避免 SDK/MCP 模式加载不需要的 UI 依赖,减少冷启动时间。