跳转到内容

McpClientEvent

type McpClientEvent =
| {
protocolVersion: string;
server: string;
serverInfo?: McpPeerInfo;
transport: McpTransportKind;
type: "mcp.connected";
}
| {
code: McpErrorCode;
message: string;
server: string;
type: "mcp.connect_failed";
}
| {
detail?: string;
reason: "closed" | "server_exit" | "error";
server: string;
type: "mcp.closed";
}
| {
message?: string;
mode: "form" | "url";
server: string;
type: "mcp.elicitation_declined";
}
| {
level: string;
message: string;
server: string;
type: "mcp.log";
}
| {
requestId: string | number;
server: string;
type: "mcp.cancel_sent";
}
| {
reason: "duplicate_name" | "invalid_name";
server: string;
tool: string;
type: "mcp.tool_skipped";
}
| {
durationMs: number;
folds?: {
bridged: string;
tool: string;
}[];
phase: "catalog" | "expand";
server: string;
source: "catalog-cache" | "live";
tools: string[];
type: "mcp.discovered";
}
| {
added: number;
changed: number;
removed: number;
server: string;
type: "mcp.catalog_updated";
}
| {
attempt: number;
connection: number;
delayMs: number;
server: string;
type: "mcp.reconnecting";
}
| {
attempt: number;
connection: number;
downtimeMs: number;
server: string;
type: "mcp.reconnected";
}
| {
attempts: number;
connection: number;
server: string;
type: "mcp.reconnect_exhausted";
};

MCP 结构化观测事件(注入观察者形态——附着发生在装配期,先于会话事件包络)。 contract-v0.4 起其中五型已契约化为 KernelEvent mcp.* 事件族, 由表面层装配处映射进会话事件流(cli assembly/mcp-events.ts);log 与 cancel_sent 刻意只走本回调不进契约。表面层按 type 映射 kernel.mcp.* i18n 键。

SC-31 增三型(reconnecting / reconnected / reconnect_exhausted):连接治理 层的自动重连生命周期;contract-v0.21(RFC-SC-3,SC-45)起已契约化为 KernelEvent mcp.* 三型(字段以本回调形为准、逐字段同名;cli assembly/mcp-events.ts 映射即契约化,与 connected/closed、discovered/ catalog_updated 同先例)。重连成功本身仍由既有 mcp.connected 表达 (每次成功握手一枚),mcp.reconnected 是附加的治理层注记。

{
protocolVersion: string;
server: string;
serverInfo?: McpPeerInfo;
transport: McpTransportKind;
type: "mcp.connected";
}

{
code: McpErrorCode;
message: string;
server: string;
type: "mcp.connect_failed";
}

{
detail?: string;
reason: "closed" | "server_exit" | "error";
server: string;
type: "mcp.closed";
}

{
message?: string;
mode: "form" | "url";
server: string;
type: "mcp.elicitation_declined";
}
optional message?: string;
mode: "form" | "url";
server: string;
type: "mcp.elicitation_declined";

服务端发起 elicitation,本期策略:结构化拒绝(action=decline)+ 本事件可观测


{
level: string;
message: string;
server: string;
type: "mcp.log";
}

{
requestId: string | number;
server: string;
type: "mcp.cancel_sent";
}

{
reason: "duplicate_name" | "invalid_name";
server: string;
tool: string;
type: "mcp.tool_skipped";
}

{
durationMs: number;
folds?: {
bridged: string;
tool: string;
}[];
phase: "catalog" | "expand";
server: string;
source: "catalog-cache" | "live";
tools: string[];
type: "mcp.discovered";
}
durationMs: number;
optional folds?: {
bridged: string;
tool: string;
}[];
phase: "catalog" | "expand";
server: string;
source: "catalog-cache" | "live";
tools: string[];
type: "mcp.discovered";

CW17-M2A(doc/60 §4.4;契约化候 RFC-M2/W2)— 发现与展开审计: phase=‘catalog’ 为装配期目录建立(source 区分目录来自缓存或现连 发现,tools 为远端工具名);phase=‘expand’ 为展开动作把 def 拉进 模型上下文(tools 为桥接名,folds 为 64 字符帽折叠映射,可审计)。


{
added: number;
changed: number;
removed: number;
server: string;
type: "mcp.catalog_updated";
}
added: number;
changed: number;
removed: number;
server: string;
type: "mcp.catalog_updated";

CW17-M2A(doc/60 §3.3/§4.4;契约化候 RFC-M2/W2)— 目录缓存演进: 连接后真实 tools/list 与缓存 diff 的计数(本会话目录段与 toolDefs 恒不动,下会话生效——该语义要能对账)。


{
attempt: number;
connection: number;
delayMs: number;
server: string;
type: "mcp.reconnecting";
}
attempt: number;
connection: number;
delayMs: number;
server: string;
type: "mcp.reconnecting";

SC-31:某成员连接意外断开(或重连尝试失败)后已排定下一次自动重连。 attempt = 即将进行的第几次尝试(1 起);delayMs = 退避等待(含抖动); connection = 池内成员序号(0 起;缺省池 1 恒 0)。


{
attempt: number;
connection: number;
downtimeMs: number;
server: string;
type: "mcp.reconnected";
}
attempt: number;
connection: number;
downtimeMs: number;
server: string;
type: "mcp.reconnected";

SC-31:成员连接自动重连成功(第 attempt 次尝试;downtimeMs = 断开至恢复墙钟)


{
attempts: number;
connection: number;
server: string;
type: "mcp.reconnect_exhausted";
}
attempts: number;
connection: number;
server: string;
type: "mcp.reconnect_exhausted";

达到 reconnect.maxAttempts,该成员停止自动重连(手动重连可复位)