Skip to content

Commit

Permalink
feat: Send MCP response as a user
Browse files Browse the repository at this point in the history
  • Loading branch information
Kadxy committed Dec 29, 2024
1 parent 664879b commit e1ba8f1
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 21 deletions.
11 changes: 11 additions & 0 deletions app/mcp/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export function isMcpJson(content: string) {
return content.match(/```json:mcp:(\w+)([\s\S]*?)```/);
}

export function extractMcpJson(content: string) {
const match = content.match(/```json:mcp:(\w+)([\s\S]*?)```/);
if (match) {
return { clientId: match[1], mcp: JSON.parse(match[2]) };
}
return null;
}
52 changes: 31 additions & 21 deletions app/store/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import { useAccessStore } from "./access";
import { collectModelsWithDefaultModel } from "../utils/model";
import { createEmptyMask, Mask } from "./mask";
import { executeMcpAction } from "../mcp/actions";
import { extractMcpJson, isMcpJson } from "../mcp/utils";

const localStorage = safeLocalStorage();

Expand Down Expand Up @@ -356,31 +357,14 @@ export const useChatStore = createPersistStore(

onNewMessage(message: ChatMessage, targetSession: ChatSession) {
get().updateTargetSession(targetSession, (session) => {
// Check and process MCP JSON
const content =
typeof message.content === "string" ? message.content : "";
const mcpMatch = content.match(/```json:mcp:(\w+)([\s\S]*?)```/);
if (mcpMatch) {
try {
const clientId = mcpMatch[1];
const mcp = JSON.parse(mcpMatch[2]);
console.log("[MCP Request]", clientId, mcp);
// Execute MCP action
executeMcpAction(clientId, mcp)
.then((result) => {
console.log("[MCP Response]", result);
})
.catch((error) => {
console.error("[MCP Error]", error);
});
} catch (error) {
console.error("[MCP Error]", error);
}
}
session.messages = session.messages.concat();
session.lastUpdate = Date.now();
});

get().updateStat(message, targetSession);

get().checkMcpJson(message);

get().summarizeSession(false, targetSession);
},

Expand Down Expand Up @@ -786,6 +770,32 @@ export const useChatStore = createPersistStore(
lastInput,
});
},
checkMcpJson(message: ChatMessage) {
const content =
typeof message.content === "string" ? message.content : "";
if (isMcpJson(content)) {
try {
const mcpRequest = extractMcpJson(content);
if (mcpRequest) {
console.debug("[MCP Request]", mcpRequest);

executeMcpAction(mcpRequest.clientId, mcpRequest.mcp)
.then((result) => {
console.log("[MCP Response]", result);
// 直接使用onUserInput发送结果
get().onUserInput(
typeof result === "object"
? JSON.stringify(result)
: String(result),
);
})
.catch((error) => showToast(String(error)));
}
} catch (error) {
console.error("[MCP Error]", error);
}
}
},
};

return methods;
Expand Down

0 comments on commit e1ba8f1

Please sign in to comment.