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 供外部集成调用

使用场景

终端输入 claude

cli.tsx 启动 Ink 渲染器,挂载 React 组件树,进入交互式对话

CLI → Entrypoints.cli.tsx → Ink.render(<App />)

import { claude } from "@anthropic-ai/claude-code"

SDK 模式,外部 TypeScript 程序通过 API 调用 Claude Code

External Code → Entrypoints.sdk/ → Core Logic

claude --mcp

MCP 服务器模式,Claude Code 作为工具提供者运行

CLI → Entrypoints.mcp.ts → MCP Protocol Handler

依赖关系

  • Bootstrap — 全局状态容器与会话生命周期管理,维护运行时的单一真相源
  • Ink — 深度定制的终端渲染引擎,基于 Yoga 布局 + React Reconciler 实现终端 UI

关键代码片段

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 调用

技术笔记

performance

动态导入优化

cli.tsx 使用 dynamic import() 延迟加载 Ink 渲染器,避免 SDK/MCP 模式加载不需要的 UI 依赖,减少冷启动时间。