diff --git a/src/agents/tools/message-tool.ts b/src/agents/tools/message-tool.ts index b8d080e5bb5..3a52f9fb620 100644 --- a/src/agents/tools/message-tool.ts +++ b/src/agents/tools/message-tool.ts @@ -428,10 +428,15 @@ type MessageToolDiscoveryParams = { senderIsOwner?: boolean; }; +type MessageActionDiscoveryInput = Omit & { + cfg: OpenClawConfig; + channel?: string; +}; + function buildMessageActionDiscoveryInput( params: MessageToolDiscoveryParams, channel?: string, -): ChannelMessageActionDiscoveryInput { +): MessageActionDiscoveryInput { return { cfg: params.cfg, ...(channel ? { channel } : {}), @@ -500,7 +505,7 @@ function buildMessageToolSchema(params: MessageToolDiscoveryParams) { const extraProperties = resolveChannelMessageToolSchemaProperties( buildMessageActionDiscoveryInput( params, - normalizeMessageChannel(params.currentChannelProvider), + normalizeMessageChannel(params.currentChannelProvider) ?? undefined, ), ); return buildMessageToolSchemaFromActions(actions.length > 0 ? actions : ["send"], { diff --git a/src/gateway/mcp-http.test.ts b/src/gateway/mcp-http.test.ts index 27c2a3e6694..173bac48d73 100644 --- a/src/gateway/mcp-http.test.ts +++ b/src/gateway/mcp-http.test.ts @@ -111,11 +111,12 @@ describe("mcp loopback server", () => { it("threads senderIsOwner through loopback request context and cache separation", async () => { server = await startMcpLoopbackServer(0); + const activeServer = server; const runtime = getActiveMcpLoopbackRuntime(); const sendToolsList = async (senderIsOwner: "true" | "false") => await sendRaw({ - port: server.port, + port: activeServer.port, token: runtime?.token, headers: { "content-type": "application/json",