wechaty-web-panel 1.6.112 → 1.6.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bot/chatgpt/index.js +235 -0
- package/dist/bot/coze/sdk/index.js +110 -0
- package/dist/bot/dify/sdk/index.js +461 -0
- package/dist/bot/dify/sdk/office.js +319 -0
- package/dist/bot/fastgpt/index.js +98 -0
- package/dist/bot/qanything/index.js +136 -0
- package/dist/botInstance/coze.js +167 -0
- package/dist/botInstance/cozev3.js +157 -0
- package/dist/botInstance/dify.js +160 -0
- package/dist/botInstance/fastgpt.js +130 -0
- package/dist/botInstance/gpt4v.js +95 -0
- package/dist/botInstance/officialOpenAi.js +186 -0
- package/dist/botInstance/qany.js +144 -0
- package/dist/botInstance/sdk/chatGPT4V.js +89 -0
- package/dist/botInstance/sdk/coze.js +200 -0
- package/dist/botInstance/sdk/difyClient.js +354 -0
- package/dist/botInstance/sdk/pTimeout.js +97 -0
- package/dist/botInstance/sdk/qanything.js +137 -0
- package/dist/botInstance/sdk/quick-lru.js +237 -0
- package/dist/common/hook.js +66 -0
- package/dist/common/index.js +513 -0
- package/dist/common/multiReply.js +158 -0
- package/dist/common/reply.js +23 -0
- package/dist/const/puppet-type.js +71 -0
- package/dist/db/aiDb.js +27 -0
- package/dist/db/aichatDb.js +84 -0
- package/dist/db/chatHistory.js +137 -0
- package/dist/db/configDb.js +97 -0
- package/dist/db/global.js +62 -0
- package/dist/db/gptConfig.js +85 -0
- package/dist/db/nedb.js +88 -0
- package/dist/db/puppetDb.js +58 -0
- package/dist/db/roomDb.js +83 -0
- package/dist/db/rssConfig.js +82 -0
- package/dist/db/rssHistory.js +88 -0
- package/dist/db/userDb.js +27 -0
- package/dist/handlers/on-callback-message.js +183 -0
- package/dist/handlers/on-error.js +5 -0
- package/dist/handlers/on-friend.js +62 -0
- package/dist/handlers/on-heartbeat.js +20 -0
- package/dist/handlers/on-login.js +58 -0
- package/dist/handlers/on-logout.js +17 -0
- package/dist/handlers/on-message.js +644 -0
- package/dist/handlers/on-ready.js +36 -0
- package/dist/handlers/on-record-message.js +56 -0
- package/dist/handlers/on-roomjoin.js +42 -0
- package/dist/handlers/on-roomleave.js +12 -0
- package/dist/handlers/on-roomtopic.js +16 -0
- package/dist/handlers/on-scan.js +64 -0
- package/dist/handlers/on-verifycode.js +42 -0
- package/dist/index.js +81 -69306
- package/dist/lib/contentCensor.js +23 -0
- package/dist/lib/index.js +562 -0
- package/dist/lib/oss.js +43 -0
- package/dist/lib/s3oss.js +33 -0
- package/dist/mcp/mcp-server.js +26 -0
- package/dist/mcp/src/config/database.js +51 -0
- package/dist/mcp/src/index.js +238 -0
- package/dist/mcp/src/mcp/schemas.js +178 -0
- package/dist/mcp/src/mcp/server.js +421 -0
- package/dist/mcp/src/mcp/streamable-server.js +690 -0
- package/dist/mcp/src/models/ChatMessage.js +151 -0
- package/dist/mcp/src/models/Friend.js +64 -0
- package/dist/mcp/src/models/Group.js +55 -0
- package/dist/mcp/src/models/GroupMember.js +67 -0
- package/dist/mcp/src/models/index.js +27 -0
- package/dist/mcp/src/scripts/migrate.js +21 -0
- package/dist/mcp/src/services/ChatDataService.js +284 -0
- package/dist/mcp/src/services/McpService.js +521 -0
- package/dist/mcp/src/services/McpTools.js +504 -0
- package/dist/mcp/streamable-examples.js +283 -0
- package/dist/mcp/streamable-server.js +79 -0
- package/dist/mcp/test-mcp.js +64 -0
- package/dist/mcp/test-streamable-server.js +86 -0
- package/dist/package-json.js +89 -0
- package/dist/proxy/aibotk.js +829 -0
- package/dist/proxy/api.js +431 -0
- package/dist/proxy/apib.js +587 -0
- package/dist/proxy/bot/chatgpt.js +38 -0
- package/dist/proxy/bot/coze.js +38 -0
- package/dist/proxy/bot/cozev3.js +38 -0
- package/dist/proxy/bot/dify.js +38 -0
- package/dist/proxy/bot/dispatch.js +81 -0
- package/dist/proxy/bot/fastgpt.js +27 -0
- package/dist/proxy/bot/qany.js +27 -0
- package/dist/proxy/config.js +14 -0
- package/dist/proxy/cozeAi.js +60 -0
- package/dist/proxy/cozeV3Ai.js +60 -0
- package/dist/proxy/difyAi.js +58 -0
- package/dist/proxy/fastgpt.js +55 -0
- package/dist/proxy/mqtt.js +275 -0
- package/dist/proxy/multimodal.js +122 -0
- package/dist/proxy/openAi.js +63 -0
- package/dist/proxy/outapi.js +62 -0
- package/dist/proxy/qAnyAi.js +57 -0
- package/dist/proxy/superagent.js +200 -0
- package/dist/proxy/tencent-open.js +255 -0
- package/dist/service/event-dispatch-service.js +309 -0
- package/dist/service/gpt4vService.js +45 -0
- package/dist/service/msg-filter-service.js +121 -0
- package/dist/service/msg-filters.js +645 -0
- package/dist/service/room-async-service.js +455 -0
- package/dist/task/index.js +535 -0
- package/dist/task/rss.js +174 -0
- package/package.json +2 -2
- package/src/package-json.js +2 -2
- package/tsconfig.json +3 -12
- package/dist/index.d.ts +0 -9
- package/tsconfig.cjs.json +0 -12
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
5
|
+
// 导入我们的业务服务
|
|
6
|
+
import ChatMCP from '../index.js';
|
|
7
|
+
// 导入数据验证模式
|
|
8
|
+
import { RobotIdSchema, SearchFriendsSchema, SearchGroupsSchema, SearchMessagesSchema, FullTextSearchSchema, ConversationDetailsSchema, GroupMembersDetailSchema, MessageHeatmapSchema, QuickFindSchema, RelationshipAnalysisSchema, ActivityAnalysisSchema, ContentAnalysisSchema, DataExportSchema, BatchCreateFriendsSchema, BatchCreateGroupsSchema, BatchCreateGroupMembersSchema, CreateChatMessageSchema } from './schemas.js';
|
|
9
|
+
/**
|
|
10
|
+
* 微信聊天数据 MCP 服务器
|
|
11
|
+
*/
|
|
12
|
+
class ChatMcpServer {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.server = new Server({
|
|
15
|
+
name: 'chat-mcp-server',
|
|
16
|
+
version: '1.0.0',
|
|
17
|
+
description: '聊天数据 MCP 服务器,提供查询对话记录,分析对话记录,导出对话记录,批量写入对话记录',
|
|
18
|
+
}, {
|
|
19
|
+
capabilities: {
|
|
20
|
+
tools: {},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
this.chatMCP = null;
|
|
24
|
+
this.setupHandlers();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 初始化聊天MCP服务
|
|
28
|
+
*/
|
|
29
|
+
async initializeChatMCP() {
|
|
30
|
+
if (!this.chatMCP) {
|
|
31
|
+
this.chatMCP = new ChatMCP();
|
|
32
|
+
await this.chatMCP.init();
|
|
33
|
+
console.log('✅ ChatMCP 服务已初始化');
|
|
34
|
+
}
|
|
35
|
+
return this.chatMCP;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 设置MCP服务器处理程序
|
|
39
|
+
*/
|
|
40
|
+
setupHandlers() {
|
|
41
|
+
// 列出可用工具
|
|
42
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
43
|
+
return {
|
|
44
|
+
tools: [
|
|
45
|
+
// === 查询工具 ===
|
|
46
|
+
{
|
|
47
|
+
name: 'search_friends',
|
|
48
|
+
description: '搜索好友信息,支持关键词、标签等多种搜索条件',
|
|
49
|
+
inputSchema: zodToJsonSchema(SearchFriendsSchema),
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'search_groups',
|
|
53
|
+
description: '搜索群组信息,支持群名、成员数等搜索条件',
|
|
54
|
+
inputSchema: zodToJsonSchema(SearchGroupsSchema),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'search_messages',
|
|
58
|
+
description: '搜索聊天消息,支持内容、时间范围等搜索条件',
|
|
59
|
+
inputSchema: zodToJsonSchema(SearchMessagesSchema),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'full_text_search',
|
|
63
|
+
description: '全文搜索,同时搜索好友、群组和消息',
|
|
64
|
+
inputSchema: zodToJsonSchema(FullTextSearchSchema),
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'get_robot_statistics',
|
|
68
|
+
description: '获取机器人的统计信息,包括好友数、群组数、消息数等',
|
|
69
|
+
inputSchema: zodToJsonSchema(RobotIdSchema),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'get_conversation_details',
|
|
73
|
+
description: '获取会话的详细信息和统计数据',
|
|
74
|
+
inputSchema: zodToJsonSchema(ConversationDetailsSchema),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'get_group_members_detail',
|
|
78
|
+
description: '获取群组成员的详细信息和活跃度统计',
|
|
79
|
+
inputSchema: zodToJsonSchema(GroupMembersDetailSchema),
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'get_message_heatmap',
|
|
83
|
+
description: '获取消息活动热力图数据,分析时间分布模式',
|
|
84
|
+
inputSchema: zodToJsonSchema(MessageHeatmapSchema),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'get_system_info',
|
|
88
|
+
description: '获取系统信息,包括数据库状态、系统性能等',
|
|
89
|
+
inputSchema: zodToJsonSchema({}),
|
|
90
|
+
},
|
|
91
|
+
// === 分析工具 ===
|
|
92
|
+
{
|
|
93
|
+
name: 'quick_find',
|
|
94
|
+
description: '快速查找工具,智能识别并搜索用户、群组或成员',
|
|
95
|
+
inputSchema: zodToJsonSchema(QuickFindSchema),
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'analyze_relationships',
|
|
99
|
+
description: '分析用户关系,包括好友关系、共同群组等',
|
|
100
|
+
inputSchema: zodToJsonSchema(RelationshipAnalysisSchema),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'analyze_activity',
|
|
104
|
+
description: '分析用户或群组的活动模式和频率',
|
|
105
|
+
inputSchema: zodToJsonSchema(ActivityAnalysisSchema),
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'analyze_content',
|
|
109
|
+
description: '分析聊天内容,包括关键词提取、情感分析等',
|
|
110
|
+
inputSchema: zodToJsonSchema(ContentAnalysisSchema),
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'export_data',
|
|
114
|
+
description: '导出数据到指定格式(JSON、CSV、TXT)',
|
|
115
|
+
inputSchema: zodToJsonSchema(DataExportSchema),
|
|
116
|
+
},
|
|
117
|
+
// === 数据写入工具 ===
|
|
118
|
+
{
|
|
119
|
+
name: 'batch_create_friends',
|
|
120
|
+
description: '批量创建或更新好友信息',
|
|
121
|
+
inputSchema: zodToJsonSchema(BatchCreateFriendsSchema),
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'batch_create_groups',
|
|
125
|
+
description: '批量创建或更新群组信息',
|
|
126
|
+
inputSchema: zodToJsonSchema(BatchCreateGroupsSchema),
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'batch_create_group_members',
|
|
130
|
+
description: '批量创建或更新群成员信息',
|
|
131
|
+
inputSchema: zodToJsonSchema(BatchCreateGroupMembersSchema),
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'create_chat_message',
|
|
135
|
+
description: '创建聊天消息记录',
|
|
136
|
+
inputSchema: zodToJsonSchema(CreateChatMessageSchema),
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
// 执行工具调用
|
|
142
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
143
|
+
const { name, arguments: args } = request.params;
|
|
144
|
+
try {
|
|
145
|
+
// 确保ChatMCP服务已初始化
|
|
146
|
+
await this.initializeChatMCP();
|
|
147
|
+
switch (name) {
|
|
148
|
+
// === 查询工具实现 ===
|
|
149
|
+
case 'search_friends': {
|
|
150
|
+
const params = SearchFriendsSchema.parse(args);
|
|
151
|
+
const result = await this.chatMCP.searchFriends(params);
|
|
152
|
+
return {
|
|
153
|
+
content: [
|
|
154
|
+
{
|
|
155
|
+
type: 'text',
|
|
156
|
+
text: JSON.stringify(result, null, 2),
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
case 'search_groups': {
|
|
162
|
+
const params = SearchGroupsSchema.parse(args);
|
|
163
|
+
const result = await this.chatMCP.searchGroups(params);
|
|
164
|
+
return {
|
|
165
|
+
content: [
|
|
166
|
+
{
|
|
167
|
+
type: 'text',
|
|
168
|
+
text: JSON.stringify(result, null, 2),
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
case 'search_messages': {
|
|
174
|
+
const params = SearchMessagesSchema.parse(args);
|
|
175
|
+
const result = await this.chatMCP.searchChatMessages(params);
|
|
176
|
+
return {
|
|
177
|
+
content: [
|
|
178
|
+
{
|
|
179
|
+
type: 'text',
|
|
180
|
+
text: JSON.stringify(result, null, 2),
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
case 'full_text_search': {
|
|
186
|
+
const params = FullTextSearchSchema.parse(args);
|
|
187
|
+
const result = await this.chatMCP.fullTextSearch(params);
|
|
188
|
+
return {
|
|
189
|
+
content: [
|
|
190
|
+
{
|
|
191
|
+
type: 'text',
|
|
192
|
+
text: JSON.stringify(result, null, 2),
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
case 'get_robot_statistics': {
|
|
198
|
+
const params = RobotIdSchema.parse(args);
|
|
199
|
+
const result = await this.chatMCP.getRobotStatistics(params.robotId);
|
|
200
|
+
return {
|
|
201
|
+
content: [
|
|
202
|
+
{
|
|
203
|
+
type: 'text',
|
|
204
|
+
text: JSON.stringify(result, null, 2),
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
case 'get_conversation_details': {
|
|
210
|
+
const params = ConversationDetailsSchema.parse(args);
|
|
211
|
+
const result = await this.chatMCP.getConversationDetails(params);
|
|
212
|
+
return {
|
|
213
|
+
content: [
|
|
214
|
+
{
|
|
215
|
+
type: 'text',
|
|
216
|
+
text: JSON.stringify(result, null, 2),
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
case 'get_group_members_detail': {
|
|
222
|
+
const params = GroupMembersDetailSchema.parse(args);
|
|
223
|
+
const result = await this.chatMCP.getGroupMembersDetail(params);
|
|
224
|
+
return {
|
|
225
|
+
content: [
|
|
226
|
+
{
|
|
227
|
+
type: 'text',
|
|
228
|
+
text: JSON.stringify(result, null, 2),
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
case 'get_message_heatmap': {
|
|
234
|
+
const params = MessageHeatmapSchema.parse(args);
|
|
235
|
+
const result = await this.chatMCP.getMessageHeatmap(params);
|
|
236
|
+
return {
|
|
237
|
+
content: [
|
|
238
|
+
{
|
|
239
|
+
type: 'text',
|
|
240
|
+
text: JSON.stringify(result, null, 2),
|
|
241
|
+
},
|
|
242
|
+
],
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
case 'get_system_info': {
|
|
246
|
+
const result = await this.chatMCP.getSystemInfo();
|
|
247
|
+
return {
|
|
248
|
+
content: [
|
|
249
|
+
{
|
|
250
|
+
type: 'text',
|
|
251
|
+
text: JSON.stringify(result, null, 2),
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
// === 分析工具实现 ===
|
|
257
|
+
case 'quick_find': {
|
|
258
|
+
const params = QuickFindSchema.parse(args);
|
|
259
|
+
const result = await this.chatMCP.quickFind(params);
|
|
260
|
+
return {
|
|
261
|
+
content: [
|
|
262
|
+
{
|
|
263
|
+
type: 'text',
|
|
264
|
+
text: JSON.stringify(result, null, 2),
|
|
265
|
+
},
|
|
266
|
+
],
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
case 'analyze_relationships': {
|
|
270
|
+
const params = RelationshipAnalysisSchema.parse(args);
|
|
271
|
+
const result = await this.chatMCP.analyzeRelationships(params);
|
|
272
|
+
return {
|
|
273
|
+
content: [
|
|
274
|
+
{
|
|
275
|
+
type: 'text',
|
|
276
|
+
text: JSON.stringify(result, null, 2),
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
case 'analyze_activity': {
|
|
282
|
+
const params = ActivityAnalysisSchema.parse(args);
|
|
283
|
+
const result = await this.chatMCP.analyzeActivity(params);
|
|
284
|
+
return {
|
|
285
|
+
content: [
|
|
286
|
+
{
|
|
287
|
+
type: 'text',
|
|
288
|
+
text: JSON.stringify(result, null, 2),
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
case 'analyze_content': {
|
|
294
|
+
const params = ContentAnalysisSchema.parse(args);
|
|
295
|
+
const result = await this.chatMCP.analyzeContent(params);
|
|
296
|
+
return {
|
|
297
|
+
content: [
|
|
298
|
+
{
|
|
299
|
+
type: 'text',
|
|
300
|
+
text: JSON.stringify(result, null, 2),
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
case 'export_data': {
|
|
306
|
+
const params = DataExportSchema.parse(args);
|
|
307
|
+
const result = await this.chatMCP.exportData(params);
|
|
308
|
+
return {
|
|
309
|
+
content: [
|
|
310
|
+
{
|
|
311
|
+
type: 'text',
|
|
312
|
+
text: JSON.stringify(result, null, 2),
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
// === 数据写入工具实现 ===
|
|
318
|
+
case 'batch_create_friends': {
|
|
319
|
+
const params = BatchCreateFriendsSchema.parse(args);
|
|
320
|
+
const result = await this.chatMCP.batchCreateFriends(params.friends, { updateOnDuplicate: params.updateOnDuplicate });
|
|
321
|
+
return {
|
|
322
|
+
content: [
|
|
323
|
+
{
|
|
324
|
+
type: 'text',
|
|
325
|
+
text: JSON.stringify({
|
|
326
|
+
success: true,
|
|
327
|
+
message: `成功批量创建/更新 ${result.length} 条好友记录`,
|
|
328
|
+
recordCount: result.length
|
|
329
|
+
}, null, 2),
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
case 'batch_create_groups': {
|
|
335
|
+
const params = BatchCreateGroupsSchema.parse(args);
|
|
336
|
+
const result = await this.chatMCP.batchCreateGroups(params.groups, { updateOnDuplicate: params.updateOnDuplicate });
|
|
337
|
+
return {
|
|
338
|
+
content: [
|
|
339
|
+
{
|
|
340
|
+
type: 'text',
|
|
341
|
+
text: JSON.stringify({
|
|
342
|
+
success: true,
|
|
343
|
+
message: `成功批量创建/更新 ${result.length} 条群组记录`,
|
|
344
|
+
recordCount: result.length
|
|
345
|
+
}, null, 2),
|
|
346
|
+
},
|
|
347
|
+
],
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
case 'batch_create_group_members': {
|
|
351
|
+
const params = BatchCreateGroupMembersSchema.parse(args);
|
|
352
|
+
const result = await this.chatMCP.batchCreateGroupMembers(params.members, { updateOnDuplicate: params.updateOnDuplicate });
|
|
353
|
+
return {
|
|
354
|
+
content: [
|
|
355
|
+
{
|
|
356
|
+
type: 'text',
|
|
357
|
+
text: JSON.stringify({
|
|
358
|
+
success: true,
|
|
359
|
+
message: `成功批量创建/更新 ${result.length} 条群成员记录`,
|
|
360
|
+
recordCount: result.length
|
|
361
|
+
}, null, 2),
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
case 'create_chat_message': {
|
|
367
|
+
const params = CreateChatMessageSchema.parse(args);
|
|
368
|
+
const result = await this.chatMCP.createChatMessage(params.message);
|
|
369
|
+
return {
|
|
370
|
+
content: [
|
|
371
|
+
{
|
|
372
|
+
type: 'text',
|
|
373
|
+
text: JSON.stringify({
|
|
374
|
+
success: true,
|
|
375
|
+
message: '成功创建聊天消息记录',
|
|
376
|
+
messageId: result.id
|
|
377
|
+
}, null, 2),
|
|
378
|
+
},
|
|
379
|
+
],
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
default:
|
|
383
|
+
throw new McpError(ErrorCode.MethodNotFound, `未知工具: ${name}`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
console.error(`执行工具 ${name} 时发生错误:`, error);
|
|
388
|
+
if (error instanceof McpError) {
|
|
389
|
+
throw error;
|
|
390
|
+
}
|
|
391
|
+
throw new McpError(ErrorCode.InternalError, `执行工具失败: ${error.message}`);
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
// 错误处理
|
|
395
|
+
this.server.onerror = (error) => {
|
|
396
|
+
console.error('[MCP Server Error]', error);
|
|
397
|
+
};
|
|
398
|
+
process.on('SIGINT', async () => {
|
|
399
|
+
console.log('\n正在关闭 MCP 服务器...');
|
|
400
|
+
process.exit(0);
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* 启动MCP服务器
|
|
405
|
+
*/
|
|
406
|
+
async run() {
|
|
407
|
+
const transport = new StdioServerTransport();
|
|
408
|
+
console.log('🚀 启动微信聊天数据 MCP 服务器...');
|
|
409
|
+
console.log('📋 可用工具:');
|
|
410
|
+
console.log(' 查询工具: search_friends, search_groups, search_messages, full_text_search');
|
|
411
|
+
console.log(' 统计工具: get_robot_statistics, get_conversation_details, get_group_members_detail');
|
|
412
|
+
console.log(' 分析工具: quick_find, analyze_relationships, analyze_activity, analyze_content');
|
|
413
|
+
console.log(' 数据工具: export_data, batch_create_friends, batch_create_groups');
|
|
414
|
+
console.log(' 系统工具: get_system_info');
|
|
415
|
+
console.log('');
|
|
416
|
+
await this.server.connect(transport);
|
|
417
|
+
console.log('✅ MCP 服务器已启动,等待客户端连接...');
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
export default ChatMcpServer;
|
|
421
|
+
//# sourceMappingURL=server.js.map
|