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.
Files changed (109) hide show
  1. package/dist/bot/chatgpt/index.js +235 -0
  2. package/dist/bot/coze/sdk/index.js +110 -0
  3. package/dist/bot/dify/sdk/index.js +461 -0
  4. package/dist/bot/dify/sdk/office.js +319 -0
  5. package/dist/bot/fastgpt/index.js +98 -0
  6. package/dist/bot/qanything/index.js +136 -0
  7. package/dist/botInstance/coze.js +167 -0
  8. package/dist/botInstance/cozev3.js +157 -0
  9. package/dist/botInstance/dify.js +160 -0
  10. package/dist/botInstance/fastgpt.js +130 -0
  11. package/dist/botInstance/gpt4v.js +95 -0
  12. package/dist/botInstance/officialOpenAi.js +186 -0
  13. package/dist/botInstance/qany.js +144 -0
  14. package/dist/botInstance/sdk/chatGPT4V.js +89 -0
  15. package/dist/botInstance/sdk/coze.js +200 -0
  16. package/dist/botInstance/sdk/difyClient.js +354 -0
  17. package/dist/botInstance/sdk/pTimeout.js +97 -0
  18. package/dist/botInstance/sdk/qanything.js +137 -0
  19. package/dist/botInstance/sdk/quick-lru.js +237 -0
  20. package/dist/common/hook.js +66 -0
  21. package/dist/common/index.js +513 -0
  22. package/dist/common/multiReply.js +158 -0
  23. package/dist/common/reply.js +23 -0
  24. package/dist/const/puppet-type.js +71 -0
  25. package/dist/db/aiDb.js +27 -0
  26. package/dist/db/aichatDb.js +84 -0
  27. package/dist/db/chatHistory.js +137 -0
  28. package/dist/db/configDb.js +97 -0
  29. package/dist/db/global.js +62 -0
  30. package/dist/db/gptConfig.js +85 -0
  31. package/dist/db/nedb.js +88 -0
  32. package/dist/db/puppetDb.js +58 -0
  33. package/dist/db/roomDb.js +83 -0
  34. package/dist/db/rssConfig.js +82 -0
  35. package/dist/db/rssHistory.js +88 -0
  36. package/dist/db/userDb.js +27 -0
  37. package/dist/handlers/on-callback-message.js +183 -0
  38. package/dist/handlers/on-error.js +5 -0
  39. package/dist/handlers/on-friend.js +62 -0
  40. package/dist/handlers/on-heartbeat.js +20 -0
  41. package/dist/handlers/on-login.js +58 -0
  42. package/dist/handlers/on-logout.js +17 -0
  43. package/dist/handlers/on-message.js +644 -0
  44. package/dist/handlers/on-ready.js +36 -0
  45. package/dist/handlers/on-record-message.js +56 -0
  46. package/dist/handlers/on-roomjoin.js +42 -0
  47. package/dist/handlers/on-roomleave.js +12 -0
  48. package/dist/handlers/on-roomtopic.js +16 -0
  49. package/dist/handlers/on-scan.js +64 -0
  50. package/dist/handlers/on-verifycode.js +42 -0
  51. package/dist/index.js +81 -69306
  52. package/dist/lib/contentCensor.js +23 -0
  53. package/dist/lib/index.js +562 -0
  54. package/dist/lib/oss.js +43 -0
  55. package/dist/lib/s3oss.js +33 -0
  56. package/dist/mcp/mcp-server.js +26 -0
  57. package/dist/mcp/src/config/database.js +51 -0
  58. package/dist/mcp/src/index.js +238 -0
  59. package/dist/mcp/src/mcp/schemas.js +178 -0
  60. package/dist/mcp/src/mcp/server.js +421 -0
  61. package/dist/mcp/src/mcp/streamable-server.js +690 -0
  62. package/dist/mcp/src/models/ChatMessage.js +151 -0
  63. package/dist/mcp/src/models/Friend.js +64 -0
  64. package/dist/mcp/src/models/Group.js +55 -0
  65. package/dist/mcp/src/models/GroupMember.js +67 -0
  66. package/dist/mcp/src/models/index.js +27 -0
  67. package/dist/mcp/src/scripts/migrate.js +21 -0
  68. package/dist/mcp/src/services/ChatDataService.js +284 -0
  69. package/dist/mcp/src/services/McpService.js +521 -0
  70. package/dist/mcp/src/services/McpTools.js +504 -0
  71. package/dist/mcp/streamable-examples.js +283 -0
  72. package/dist/mcp/streamable-server.js +79 -0
  73. package/dist/mcp/test-mcp.js +64 -0
  74. package/dist/mcp/test-streamable-server.js +86 -0
  75. package/dist/package-json.js +89 -0
  76. package/dist/proxy/aibotk.js +829 -0
  77. package/dist/proxy/api.js +431 -0
  78. package/dist/proxy/apib.js +587 -0
  79. package/dist/proxy/bot/chatgpt.js +38 -0
  80. package/dist/proxy/bot/coze.js +38 -0
  81. package/dist/proxy/bot/cozev3.js +38 -0
  82. package/dist/proxy/bot/dify.js +38 -0
  83. package/dist/proxy/bot/dispatch.js +81 -0
  84. package/dist/proxy/bot/fastgpt.js +27 -0
  85. package/dist/proxy/bot/qany.js +27 -0
  86. package/dist/proxy/config.js +14 -0
  87. package/dist/proxy/cozeAi.js +60 -0
  88. package/dist/proxy/cozeV3Ai.js +60 -0
  89. package/dist/proxy/difyAi.js +58 -0
  90. package/dist/proxy/fastgpt.js +55 -0
  91. package/dist/proxy/mqtt.js +275 -0
  92. package/dist/proxy/multimodal.js +122 -0
  93. package/dist/proxy/openAi.js +63 -0
  94. package/dist/proxy/outapi.js +62 -0
  95. package/dist/proxy/qAnyAi.js +57 -0
  96. package/dist/proxy/superagent.js +200 -0
  97. package/dist/proxy/tencent-open.js +255 -0
  98. package/dist/service/event-dispatch-service.js +309 -0
  99. package/dist/service/gpt4vService.js +45 -0
  100. package/dist/service/msg-filter-service.js +121 -0
  101. package/dist/service/msg-filters.js +645 -0
  102. package/dist/service/room-async-service.js +455 -0
  103. package/dist/task/index.js +535 -0
  104. package/dist/task/rss.js +174 -0
  105. package/package.json +2 -2
  106. package/src/package-json.js +2 -2
  107. package/tsconfig.json +3 -12
  108. package/dist/index.d.ts +0 -9
  109. package/tsconfig.cjs.json +0 -12
@@ -0,0 +1,283 @@
1
+ /**
2
+ * MCP Streamable HTTP 使用示例
3
+ *
4
+ * 展示如何通过 Streamable HTTP 接口调用微信聊天数据 MCP 服务
5
+ */
6
+ const BASE_URL = 'http://localhost:3001';
7
+ /**
8
+ * 发送 MCP 请求的辅助函数
9
+ */
10
+ async function mcpRequest(method, params = {}, sessionId = null) {
11
+ const headers = {
12
+ 'Content-Type': 'application/json',
13
+ 'Accept': 'application/json, text/event-stream', // MCP Streamable HTTP要求的Accept头部
14
+ };
15
+ if (sessionId) {
16
+ headers['Mcp-Session-Id'] = sessionId;
17
+ }
18
+ const body = {
19
+ jsonrpc: '2.0',
20
+ method: method,
21
+ params: params,
22
+ id: Date.now()
23
+ };
24
+ try {
25
+ const response = await fetch(`${BASE_URL}/mcp`, {
26
+ method: 'POST',
27
+ headers,
28
+ body: JSON.stringify(body)
29
+ });
30
+ const result = await response.json();
31
+ if (!response.ok) {
32
+ throw new Error(`HTTP ${response.status}: ${result.error?.message || '请求失败'}`);
33
+ }
34
+ // 获取会话ID(如果是新会话)
35
+ const newSessionId = response.headers.get('Mcp-Session-Id');
36
+ return {
37
+ data: result,
38
+ sessionId: newSessionId || sessionId
39
+ };
40
+ }
41
+ catch (error) {
42
+ console.error(`MCP 请求失败 ${method}:`, error.message);
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * 初始化 MCP 会话
48
+ */
49
+ async function initializeSession() {
50
+ console.log('🔄 初始化 MCP 会话...');
51
+ const response = await mcpRequest('initialize', {
52
+ protocolVersion: '2025-06-18',
53
+ capabilities: {
54
+ tools: {}
55
+ },
56
+ clientInfo: {
57
+ name: 'streamable-examples',
58
+ version: '1.0.0'
59
+ }
60
+ });
61
+ console.log('✅ 会话初始化成功,会话ID:', response.sessionId);
62
+ return response.sessionId;
63
+ }
64
+ /**
65
+ * 获取可用工具列表
66
+ */
67
+ async function listTools(sessionId) {
68
+ console.log('\n📋 获取可用工具列表...');
69
+ const response = await mcpRequest('tools/list', {}, sessionId);
70
+ const tools = response.data.result.tools;
71
+ console.log(`✅ 共发现 ${tools.length} 个可用工具:`);
72
+ tools.slice(0, 5).forEach(tool => {
73
+ console.log(` 🔧 ${tool.name}: ${tool.description}`);
74
+ });
75
+ if (tools.length > 5) {
76
+ console.log(` ... 还有 ${tools.length - 5} 个工具`);
77
+ }
78
+ return tools;
79
+ }
80
+ /**
81
+ * 调用工具示例
82
+ */
83
+ async function callToolExample(sessionId) {
84
+ console.log('\n🛠️ 调用工具示例...');
85
+ try {
86
+ // 示例1: 搜索好友
87
+ console.log('1️⃣ 搜索好友示例:');
88
+ const friendsResponse = await mcpRequest('tools/call', {
89
+ name: 'search_friends',
90
+ arguments: {
91
+ robotId: 'robot_streamable_demo',
92
+ keyword: '测试',
93
+ limit: 3
94
+ }
95
+ }, sessionId);
96
+ const friendsResult = JSON.parse(friendsResponse.data.result.content[0].text);
97
+ console.log(' ✅ 搜索结果:', friendsResult.data?.length || 0, '条记录');
98
+ // 示例2: 获取系统信息
99
+ console.log('\n2️⃣ 获取系统信息示例:');
100
+ const systemResponse = await mcpRequest('tools/call', {
101
+ name: 'get_system_info',
102
+ arguments: {}
103
+ }, sessionId);
104
+ const systemResult = JSON.parse(systemResponse.data.result.content[0].text);
105
+ console.log(' ✅ 系统状态:', systemResult.database?.status || '未知');
106
+ // 示例3: 批量创建好友
107
+ console.log('\n3️⃣ 批量创建好友示例:');
108
+ const batchResponse = await mcpRequest('tools/call', {
109
+ name: 'batch_create_friends',
110
+ arguments: {
111
+ robotId: 'robot_streamable_demo',
112
+ friends: [
113
+ {
114
+ robotId: 'robot_streamable_demo',
115
+ wxid: 'streamable_friend_001',
116
+ name: 'Streamable测试好友1',
117
+ remark: '通过Streamable HTTP创建',
118
+ tags: 'Streamable,测试'
119
+ },
120
+ {
121
+ robotId: 'robot_streamable_demo',
122
+ wxid: 'streamable_friend_002',
123
+ name: 'Streamable测试好友2',
124
+ remark: '批量创建测试'
125
+ }
126
+ ],
127
+ updateOnDuplicate: true
128
+ }
129
+ }, sessionId);
130
+ const batchResult = JSON.parse(batchResponse.data.result.content[0].text);
131
+ console.log(' ✅ 批量创建结果:', batchResult.message);
132
+ }
133
+ catch (error) {
134
+ console.log(' ⚠️ 工具调用失败(可能是数据库未连接):', error.message);
135
+ }
136
+ }
137
+ /**
138
+ * 会话管理示例
139
+ */
140
+ async function sessionManagementExample() {
141
+ console.log('\n🔄 会话管理示例...');
142
+ // 创建新会话
143
+ const sessionId = await initializeSession();
144
+ // 使用会话调用工具
145
+ await mcpRequest('tools/call', {
146
+ name: 'get_system_info',
147
+ arguments: {}
148
+ }, sessionId);
149
+ console.log('✅ 使用会话调用工具成功');
150
+ // 删除会话
151
+ try {
152
+ const deleteResponse = await fetch(`${BASE_URL}/mcp`, {
153
+ method: 'DELETE',
154
+ headers: {
155
+ 'Mcp-Session-Id': sessionId
156
+ }
157
+ });
158
+ if (deleteResponse.ok) {
159
+ console.log('✅ 会话删除成功');
160
+ }
161
+ else {
162
+ console.log('⚠️ 会话删除失败');
163
+ }
164
+ }
165
+ catch (error) {
166
+ console.log('⚠️ 会话删除请求失败:', error.message);
167
+ }
168
+ }
169
+ /**
170
+ * 无状态模式示例
171
+ */
172
+ async function statelessModeExample() {
173
+ console.log('\n🔄 无状态模式示例(无需会话管理)...');
174
+ try {
175
+ // 直接调用,无需会话初始化
176
+ const response = await mcpRequest('tools/call', {
177
+ name: 'get_system_info',
178
+ arguments: {}
179
+ });
180
+ console.log('✅ 无状态调用成功,无会话ID');
181
+ }
182
+ catch (error) {
183
+ console.log('⚠️ 无状态调用失败:', error.message);
184
+ console.log(' 提示:确保服务器运行在无状态模式');
185
+ }
186
+ }
187
+ /**
188
+ * 运行所有示例
189
+ */
190
+ async function runStreamableExamples() {
191
+ console.log('🚀 开始演示 MCP Streamable HTTP 功能...\n');
192
+ try {
193
+ // 1. 健康检查
194
+ console.log('🏥 健康检查');
195
+ const healthResponse = await fetch(`${BASE_URL}/health`);
196
+ const health = await healthResponse.json();
197
+ console.log(' ✅', health.message);
198
+ console.log(' 📋 协议:', health.protocol);
199
+ // 2. 获取服务信息
200
+ console.log('\n📊 服务信息');
201
+ const infoResponse = await fetch(`${BASE_URL}/`);
202
+ const info = await infoResponse.json();
203
+ console.log(' ✅ 服务名称:', info.name);
204
+ console.log(' 🔄 模式:', info.features.stateful ? '有状态' : '无状态');
205
+ console.log(' 🛠️ 工具数量:', info.features.toolCount);
206
+ if (info.features.stateful) {
207
+ // 有状态模式示例
208
+ console.log('\n🔗 有状态模式演示');
209
+ const sessionId = await initializeSession();
210
+ await listTools(sessionId);
211
+ await callToolExample(sessionId);
212
+ await sessionManagementExample();
213
+ }
214
+ else {
215
+ // 无状态模式示例
216
+ console.log('\n🔗 无状态模式演示');
217
+ await statelessModeExample();
218
+ }
219
+ console.log('\n🎉 Streamable HTTP 功能演示完成!');
220
+ console.log('\n💡 Streamable HTTP 的优势:');
221
+ console.log(' ⚡ 更快的响应速度(无长连接开销)');
222
+ console.log(' 🔄 更好的负载均衡支持');
223
+ console.log(' 🌐 更简单的网络配置');
224
+ console.log(' 📱 更好的移动设备兼容性');
225
+ console.log(' 🔧 更容易的客户端实现');
226
+ console.log('\n📚 更多信息:');
227
+ console.log(` API文档: ${BASE_URL}/api/docs (如果可用)`);
228
+ console.log(` 健康检查: ${BASE_URL}/health`);
229
+ console.log(` MCP端点: ${BASE_URL}/mcp`);
230
+ }
231
+ catch (error) {
232
+ console.error('\n❌ Streamable HTTP 演示过程中发生错误:', error.message);
233
+ console.log('\n🔧 排查步骤:');
234
+ console.log(' 1. 检查 Streamable HTTP 服务器是否已启动');
235
+ console.log(' 2. 检查端口 3001 是否正确');
236
+ console.log(' 3. 检查网络连接');
237
+ console.log(' 4. 确认服务器运行在正确的模式(有状态/无状态)');
238
+ }
239
+ }
240
+ /**
241
+ * 显示 cURL 示例
242
+ */
243
+ function showCurlExamples() {
244
+ console.log('\n📝 cURL 使用示例:');
245
+ console.log('');
246
+ console.log('# 健康检查');
247
+ console.log(`curl -X GET ${BASE_URL}/health`);
248
+ console.log('');
249
+ console.log('# 初始化会话');
250
+ console.log(`curl -X POST ${BASE_URL}/mcp \\`);
251
+ console.log(' -H "Content-Type: application/json" \\');
252
+ console.log(' -d \'{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"clientInfo":{"name":"curl-client","version":"1.0.0"}},"id":1}\'');
253
+ console.log('');
254
+ console.log('# 获取工具列表(需要会话ID)');
255
+ console.log(`curl -X POST ${BASE_URL}/mcp \\`);
256
+ console.log(' -H "Content-Type: application/json" \\');
257
+ console.log(' -H "Mcp-Session-Id: YOUR_SESSION_ID" \\');
258
+ console.log(' -d \'{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}\'');
259
+ console.log('');
260
+ console.log('# 调用工具(需要会话ID)');
261
+ console.log(`curl -X POST ${BASE_URL}/mcp \\`);
262
+ console.log(' -H "Content-Type: application/json" \\');
263
+ console.log(' -H "Mcp-Session-Id: YOUR_SESSION_ID" \\');
264
+ console.log(' -d \'{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_system_info","arguments":{}},"id":3}\'');
265
+ }
266
+ // 如果直接运行此文件
267
+ if (import.meta.url === `file://${process.argv[1]}`) {
268
+ // 检查是否安装了 fetch
269
+ if (typeof fetch === 'undefined') {
270
+ console.log('⚠️ 此示例需要 Node.js 18+ 或安装 node-fetch');
271
+ console.log('如果您使用的是 Node.js 18 以下版本,请安装: npm install node-fetch');
272
+ console.log('然后在文件顶部添加: import fetch from "node-fetch";');
273
+ console.log('');
274
+ showCurlExamples();
275
+ process.exit(0);
276
+ }
277
+ runStreamableExamples().catch(error => {
278
+ console.error('运行示例失败:', error);
279
+ showCurlExamples();
280
+ });
281
+ }
282
+ export {};
283
+ //# sourceMappingURL=streamable-examples.js.map
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 微信聊天数据 MCP Streamable HTTP 服务器入口文件
4
+ *
5
+ * 这是一个基于最新 MCP Streamable HTTP 传输协议的服务器,
6
+ * 替代了已弃用的 SSE (Server-Sent Events) 传输方式。
7
+ *
8
+ * 使用方法:
9
+ * node streamable-server.js [port] [--stateless] [--no-cors]
10
+ *
11
+ * 参数说明:
12
+ * - port: 服务器端口(默认 3001)
13
+ * - --stateless: 启用无状态模式(默认有状态)
14
+ * - --no-cors: 禁用 CORS(默认启用)
15
+ * - --no-json: 禁用 JSON 响应模式(默认启用)
16
+ *
17
+ * 示例:
18
+ * node streamable-server.js 3001 --stateless
19
+ */
20
+ import ChatMcpStreamableServer from './src/mcp/streamable-server.js';
21
+ function parseArguments() {
22
+ const args = process.argv.slice(2);
23
+ const options = {
24
+ port: 3001,
25
+ stateful: true,
26
+ enableCors: true,
27
+ enableJsonResponse: true
28
+ };
29
+ // 解析端口
30
+ const portArg = args.find(arg => !arg.startsWith('--') && !isNaN(parseInt(arg)));
31
+ if (portArg) {
32
+ options.port = parseInt(portArg);
33
+ }
34
+ // 解析选项
35
+ if (args.includes('--stateless')) {
36
+ options.stateful = false;
37
+ }
38
+ if (args.includes('--no-cors')) {
39
+ options.enableCors = false;
40
+ }
41
+ if (args.includes('--no-json')) {
42
+ options.enableJsonResponse = false;
43
+ }
44
+ return options;
45
+ }
46
+ async function main() {
47
+ const options = parseArguments();
48
+ console.log('🚀 正在启动微信聊天数据 MCP Streamable HTTP 服务器...');
49
+ console.log(`📍 端口: ${options.port}`);
50
+ console.log(`🔄 模式: ${options.stateful ? '有状态' : '无状态'}`);
51
+ console.log(`🌐 CORS: ${options.enableCors ? '启用' : '禁用'}`);
52
+ console.log(`📝 JSON响应: ${options.enableJsonResponse ? '启用' : '禁用'}`);
53
+ console.log('');
54
+ try {
55
+ const server = new ChatMcpStreamableServer(options.port, {
56
+ stateful: options.stateful,
57
+ enableCors: options.enableCors,
58
+ enableJsonResponse: options.enableJsonResponse
59
+ });
60
+ await server.start();
61
+ }
62
+ catch (error) {
63
+ console.error('❌ 启动服务器失败:', error.message);
64
+ console.log('\n🔧 常见解决方案:');
65
+ console.log(' 1. 检查端口是否被占用');
66
+ console.log(' 2. 确保数据库配置正确');
67
+ console.log(' 3. 检查 Node.js 版本 (建议 18+)');
68
+ process.exit(1);
69
+ }
70
+ }
71
+ // 检查是否直接运行此文件
72
+ if (import.meta.url === `file://${process.argv[1]}`) {
73
+ main().catch((error) => {
74
+ console.error('启动失败:', error);
75
+ process.exit(1);
76
+ });
77
+ }
78
+ export default ChatMcpStreamableServer;
79
+ //# sourceMappingURL=streamable-server.js.map
@@ -0,0 +1,64 @@
1
+ import ChatMcpServer from './src/mcp/server.js';
2
+ /**
3
+ * MCP 服务器功能测试(不依赖数据库)
4
+ */
5
+ async function testMcpServer() {
6
+ console.log('🧪 开始测试 MCP 服务器功能...\n');
7
+ try {
8
+ // 创建 MCP 服务器实例
9
+ const server = new ChatMcpServer();
10
+ // 检查服务器是否正确初始化
11
+ console.log('✅ MCP 服务器实例创建成功');
12
+ // 检查服务器基本属性
13
+ if (server.server) {
14
+ console.log('✅ MCP SDK 服务器初始化成功');
15
+ }
16
+ else {
17
+ console.log('❌ MCP SDK 服务器初始化失败');
18
+ }
19
+ // 检查服务器名称和版本
20
+ console.log(`✅ 服务器名称: ${server.server.name}`);
21
+ console.log(`✅ 服务器版本: ${server.server.version}`);
22
+ console.log('\n🎯 MCP 服务器基础测试完成!');
23
+ console.log('\n📋 可用的 MCP 工具(共18个):');
24
+ console.log(' 🔍 查询工具 (9个):');
25
+ console.log(' - search_friends, search_groups, search_messages');
26
+ console.log(' - full_text_search, get_robot_statistics');
27
+ console.log(' - get_conversation_details, get_group_members_detail');
28
+ console.log(' - get_message_heatmap, get_system_info');
29
+ console.log(' 📊 分析工具 (5个):');
30
+ console.log(' - quick_find, analyze_relationships');
31
+ console.log(' - analyze_activity, analyze_content, export_data');
32
+ console.log(' 💾 数据写入工具 (4个):');
33
+ console.log(' - batch_create_friends, batch_create_groups');
34
+ console.log(' - batch_create_group_members, create_chat_message');
35
+ console.log('\n🚀 启动服务器:');
36
+ console.log(' npm run mcp:server');
37
+ console.log(' 或: node mcp-server.js');
38
+ console.log('\n🔌 Claude Desktop 配置:');
39
+ console.log(' 配置文件位置: ~/Library/Application Support/Claude/claude_desktop_config.json');
40
+ console.log(' 添加配置:');
41
+ console.log(' {');
42
+ console.log(' "mcpServers": {');
43
+ console.log(' "chat-mcp": {');
44
+ console.log(' "command": "node",');
45
+ console.log(` "args": ["${process.cwd()}/mcp-server.js"]`);
46
+ console.log(' }');
47
+ console.log(' }');
48
+ console.log(' }');
49
+ console.log('\n💡 注意事项:');
50
+ console.log(' - 使用前请确保 PostgreSQL 数据库已启动');
51
+ console.log(' - 需要先运行数据库迁移: npm run db:migrate');
52
+ console.log(' - 配置数据库连接信息在 src/config/database.js');
53
+ }
54
+ catch (error) {
55
+ console.error('❌ MCP 服务器测试失败:', error.message);
56
+ console.log('\n🔧 可能的解决方案:');
57
+ console.log(' 1. 检查 Node.js 版本 (建议 18+)');
58
+ console.log(' 2. 重新安装依赖: npm install');
59
+ console.log(' 3. 检查文件路径是否正确');
60
+ }
61
+ }
62
+ // 运行测试
63
+ testMcpServer();
64
+ //# sourceMappingURL=test-mcp.js.map
@@ -0,0 +1,86 @@
1
+ import ChatMcpStreamableServer from './src/mcp/streamable-server.js';
2
+ /**
3
+ * Streamable HTTP 服务器功能测试
4
+ */
5
+ async function testStreamableServer() {
6
+ console.log('🧪 开始测试 MCP Streamable HTTP 服务器功能...\n');
7
+ try {
8
+ // 测试有状态模式
9
+ console.log('1️⃣ 测试有状态模式');
10
+ const statefulServer = new ChatMcpStreamableServer(3002, {
11
+ stateful: true,
12
+ enableJsonResponse: true,
13
+ enableCors: true
14
+ });
15
+ console.log(' ✅ 有状态服务器实例创建成功');
16
+ // 测试无状态模式
17
+ console.log('\n2️⃣ 测试无状态模式');
18
+ const statelessServer = new ChatMcpStreamableServer(3003, {
19
+ stateful: false,
20
+ enableJsonResponse: true,
21
+ enableCors: true
22
+ });
23
+ console.log(' ✅ 无状态服务器实例创建成功');
24
+ // 测试工具注册
25
+ console.log('\n3️⃣ 测试工具注册');
26
+ try {
27
+ const mcpServer = statefulServer.createMcpServer();
28
+ // 检查工具是否注册成功 - MCP SDK的tools属性可能不同
29
+ const hasTools = mcpServer && (mcpServer.tools || mcpServer._tools || mcpServer.handlers);
30
+ console.log(` ✅ MCP 服务器创建成功,工具注册状态: ${hasTools ? '已注册' : '未注册'}`);
31
+ }
32
+ catch (error) {
33
+ console.log(' ⚠️ 工具注册测试失败(可能是依赖问题):', error.message);
34
+ }
35
+ console.log('\n🎯 Streamable HTTP 服务器基础测试完成!');
36
+ console.log('\n📋 新的 Streamable HTTP 特性:');
37
+ console.log(' 🔄 支持有状态和无状态两种模式');
38
+ console.log(' 📝 原生 JSON 响应支持');
39
+ console.log(' 🔗 标准 HTTP 请求/响应,无需长连接');
40
+ console.log(' 🚀 更好的负载均衡和横向扩展支持');
41
+ console.log(' ⚡ 比 SSE 更高效的传输方式');
42
+ console.log('\n🚀 启动命令:');
43
+ console.log(' # 有状态模式(默认)');
44
+ console.log(' npm run streamable:server');
45
+ console.log(' ');
46
+ console.log(' # 无状态模式');
47
+ console.log(' npm run streamable:server:stateless');
48
+ console.log(' ');
49
+ console.log(' # 开发模式(自动重启)');
50
+ console.log(' npm run streamable:server:dev');
51
+ console.log(' ');
52
+ console.log(' # 自定义选项');
53
+ console.log(' node streamable-server.js 3001 --stateless --no-cors');
54
+ console.log('\n🔗 API 端点:');
55
+ console.log(' MCP 端点: POST http://localhost:3001/mcp');
56
+ console.log(' 健康检查: GET http://localhost:3001/health');
57
+ console.log(' 服务信息: GET http://localhost:3001/');
58
+ console.log(' 删除会话: DELETE http://localhost:3001/mcp (仅有状态模式)');
59
+ console.log('\n💡 与 SSE 版本的区别:');
60
+ console.log(' ❌ 不再需要长连接');
61
+ console.log(' ❌ 不再需要 SSE 事件流');
62
+ console.log(' ✅ 每个请求都是独立的 HTTP 请求');
63
+ console.log(' ✅ 更简单的客户端实现');
64
+ console.log(' ✅ 更好的网络兼容性');
65
+ console.log(' ✅ 更容易的负载均衡');
66
+ console.log('\n📚 MCP 客户端连接示例:');
67
+ console.log(' ```javascript');
68
+ console.log(' import { Client } from "@modelcontextprotocol/sdk/client/index.js";');
69
+ console.log(' import { HTTPTransport } from "@modelcontextprotocol/sdk/client/http.js";');
70
+ console.log(' ');
71
+ console.log(' const transport = new HTTPTransport("http://localhost:3001/mcp");');
72
+ console.log(' const client = new Client({ name: "my-app", version: "1.0.0" }, {});');
73
+ console.log(' await client.connect(transport);');
74
+ console.log(' ```');
75
+ }
76
+ catch (error) {
77
+ console.error('❌ Streamable HTTP 服务器测试失败:', error.message);
78
+ console.log('\n🔧 可能的解决方案:');
79
+ console.log(' 1. 检查 MCP SDK 版本是否为最新');
80
+ console.log(' 2. 检查 Node.js 版本 (建议 18+)');
81
+ console.log(' 3. 重新安装依赖: npm install');
82
+ }
83
+ }
84
+ // 运行测试
85
+ testStreamableServer();
86
+ //# sourceMappingURL=test-streamable-server.js.map
@@ -0,0 +1,89 @@
1
+ /**
2
+ * This file was auto generated from scripts/generate-version.sh
3
+ */
4
+ export const packageJson = {
5
+ "name": "wechaty-web-panel",
6
+ "version": "1.6.113",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js"
10
+ }
11
+ },
12
+ "type": "module",
13
+ "scripts": {
14
+ "build": "tsc -p tsconfig.json",
15
+ "clean": "shx rm -fr dist/*",
16
+ "dist": "npm run clean && npm run build",
17
+ "test:wechat": "node test/wechat.js",
18
+ "test:wework": "node test/wework.js",
19
+ "release": "verpub publish",
20
+ "release:dry": "verpub --dry-run",
21
+ "db:migrate": "node src/mcp/src/scripts/migrate.js"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "^5.4",
25
+ "@chatie/semver": "^0.4.7",
26
+ "@chatie/tsconfig": "^4.6.3",
27
+ "@grpc/grpc-js": "1.9.14",
28
+ "@juzi/wechaty": "^1.0.108",
29
+ "@juzi/wechaty-puppet": "^1.0.100",
30
+ "@juzi/wechaty-puppet-service": "^1.0.105",
31
+ "babel-eslint": "^10.1.0",
32
+ "eslint": "^7.4.0",
33
+ "eslint-config-prettier": "^6.11.0",
34
+ "eslint-plugin-prettier": "^3.1.4",
35
+ "npm-run-all": "^4.1.5",
36
+ "prettier": "^2.0.5",
37
+ "wechaty-puppet-matrix": "^0.0.34",
38
+ "wechaty-puppet-wechat4u": "^1.14.12",
39
+ "tsup": "^8.5.1"
40
+ },
41
+ "readme": "README.md",
42
+ "engines": {
43
+ "node": ">=16",
44
+ "npm": ">=7"
45
+ },
46
+ "dependencies": {
47
+ "@modelcontextprotocol/sdk": "^1.17.0",
48
+ "cors": "^2.8.5",
49
+ "dotenv": "^16.3.0",
50
+ "express": "^5.1.0",
51
+ "pg": "^8.11.0",
52
+ "pg-hstore": "^2.3.4",
53
+ "sequelize": "^6.37.0",
54
+ "zod": "^3.25.76",
55
+ "zod-to-json-schema": "^3.24.6",
56
+ "@aws-sdk/client-s3": "^3.828.0",
57
+ "@coze/api": "^1.0.19",
58
+ "@dqbd/tiktoken": "^1.0.2",
59
+ "@langchain/community": "^0.3.32",
60
+ "@langchain/core": "^0.3.40",
61
+ "@langchain/openai": "^0.4.4",
62
+ "@langchain/redis": "^0.1.1",
63
+ "ali-oss": "^6.21.0",
64
+ "axios": "1.8.2",
65
+ "baidu-aip-sdk": "^4.16.10",
66
+ "dayjs": "^1.11.7",
67
+ "eventsource-parser": "^1.0.0",
68
+ "form-data": "^4.0.0",
69
+ "https-proxy-agent": "^5.0.1",
70
+ "jsonwebtoken": "^9.0.2",
71
+ "keyv": "^4.5.2",
72
+ "langchain": "^0.3.19",
73
+ "mqtt": "^4.2.6",
74
+ "mustache": "^4.2.0",
75
+ "nedb": "^1.8.0",
76
+ "node-fetch": "^2.6.9",
77
+ "node-schedule": "^1.3.2",
78
+ "qrcode-terminal": "^0.12.0",
79
+ "rss-parser": "^3.13.0",
80
+ "superagent": "^5.3.1",
81
+ "uuid": "^9.0.0"
82
+ },
83
+ "publishConfig": {
84
+ "registry": " https://registry.npmjs.org/",
85
+ "tag": "latest",
86
+ "access": "public"
87
+ }
88
+ };
89
+ //# sourceMappingURL=package-json.js.map