diff --git a/renderer/src/components/main-panel/chat/chat-box/chat.ts b/renderer/src/components/main-panel/chat/chat-box/chat.ts index 03e5cc3..0394f3e 100644 --- a/renderer/src/components/main-panel/chat/chat-box/chat.ts +++ b/renderer/src/components/main-panel/chat/chat-box/chat.ts @@ -51,6 +51,7 @@ interface EnableToolItem { name: string; description: string; enabled: boolean; + inputSchema?: any; } export interface ChatSetting { @@ -117,17 +118,31 @@ export type IRenderMessage = ICommonRenderMessage | IToolRenderMessage; export function getToolSchema(enableTools: EnableToolItem[]) { const toolsSchema = []; for (let i = 0; i < enableTools.length; i++) { - if (enableTools[i].enabled) { - const tool = allTools.value[i]; + const enableTool = enableTools[i]; + + if (enableTool.enabled) { + + if (enableTool.inputSchema) { + toolsSchema.push({ + type: 'function', + function: { + name: enableTool.name, + description: enableTool.description || "", + parameters: enableTool.inputSchema + } + }); + } else { + const tool = allTools.value[i]; - toolsSchema.push({ - type: 'function', - function: { - name: tool.name, - description: tool.description || "", - parameters: tool.inputSchema - } - }); + toolsSchema.push({ + type: 'function', + function: { + name: tool.name, + description: tool.description || "", + parameters: tool.inputSchema + } + }); + } } } return toolsSchema; diff --git a/resources/openmcp-sdk-release/README.md b/resources/openmcp-sdk-release/README.md new file mode 100644 index 0000000..c200611 --- /dev/null +++ b/resources/openmcp-sdk-release/README.md @@ -0,0 +1,95 @@ +
+ + + +

OpenMCP: 一体化 MCP Server 调试器

+ +👉 加入 OpenMCP正式级技术组 + + + 加入 OpenMCP Discord频道 + +
+ + +## 安装 + +```bash +npm install openmcp-sdk +``` + +## 使用 + +文件名:main.ts + +```typescript +import { TaskLoop } from 'openmcp-sdk/task-loop'; +import { TaskLoopAdapter } from 'openmcp-sdk/service'; + +async function main() { + // 创建适配器,负责通信和 mcp 连接 + const adapter = new TaskLoopAdapter(); + + // 连接 mcp 服务器 + await adapter.connectMcpServer({ + connectionType: 'STDIO', + command: 'node', + args: [ + '~/projects/mcp/servers/src/puppeteer/dist/index.js' + ] + }); + + // 获取工具列表 + const tools = await adapter.listTools(); + + // 创建事件循环驱动器 + const taskLoop = new TaskLoop({ adapter }); + + // 配置改次事件循环使用的大模型 + taskLoop.setLlmConfig({ + id: 'deepseek', + baseUrl: 'https://api.deepseek.com/v1', + userToken: process.env['DEEPSEEK_API_TOKEN'], + userModel: 'deepseek-chat' + }); + + // 创建当前事件循环对应的上下文,并且配置当前上下文的设置 + const storage = { + messages: [], + settings: { + temperature: 0.7, + enableTools: tools, + systemPrompt: 'you are a clever bot', + contextLength: 20 + } + }; + + // 本次发出的问题 + const message = 'hello world'; + + // 事件循环结束的句柄 + taskLoop.registerOnDone(() => { + console.log('taskLoop done'); + }); + + // 事件循环每一次 epoch 开始的句柄 + taskLoop.registerOnError((error) => { + console.log('taskLoop error', error); + }); + + // 事件循环出现 error 时的句柄(出现 error 不一定会停止事件循环) + taskLoop.registerOnEpoch(() => { + console.log('taskLoop epoch'); + }); + + // 开启事件循环 + await taskLoop.start(storage, message); + + // 打印上下文,最终的回答在 messages.at(-1) 中 + console.log(storage.messages); +} + +main(); +``` + +star 我们的项目:https://github.com/LSTM-Kirigaya/openmcp-client \ No newline at end of file diff --git a/resources/openmcp-sdk-release/icons/openmcp.png b/resources/openmcp-sdk-release/icons/openmcp.png new file mode 100644 index 0000000..43d8b1b Binary files /dev/null and b/resources/openmcp-sdk-release/icons/openmcp.png differ diff --git a/resources/openmcp-sdk-release/package.json b/resources/openmcp-sdk-release/package.json index 4ca4310..eba3d43 100644 --- a/resources/openmcp-sdk-release/package.json +++ b/resources/openmcp-sdk-release/package.json @@ -1,6 +1,6 @@ { "name": "openmcp-sdk", - "version": "0.0.1", + "version": "0.0.2", "description": "openmcp-sdk", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -22,5 +22,17 @@ "bugs": { "url": "https://github.com/LSTM-Kirigaya/openmcp-client/issues" }, - "homepage": "https://document.kirigaya.cn/blogs/openmcp/main.html" + "homepage": "https://document.kirigaya.cn/blogs/openmcp/main.html", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.10.2", + "@seald-io/nedb": "^4.1.1", + "@vue/server-renderer": "^3.5.13", + "axios": "^1.7.7", + "bson": "^6.8.0", + "openai": "^4.93.0", + "pako": "^2.1.0", + "tesseract.js": "^6.0.1", + "uuid": "^11.1.0", + "ws": "^8.18.1" + } } \ No newline at end of file diff --git a/service/src/hook/adapter.ts b/service/src/hook/adapter.ts index 60b3828..b037468 100644 --- a/service/src/hook/adapter.ts +++ b/service/src/hook/adapter.ts @@ -131,11 +131,10 @@ export class TaskLoopAdapter { public async listTools() { const tools = await client?.listTools(); if (tools?.tools) { - return tools.tools.map((tool) => ({ - name: tool.name, - description: tool.description, - enabled: true - })); + return tools.tools.map((tool) => { + const enabledTools = { ...tool, enabled: true }; + return enabledTools; + }); } return []; }