chaimi-bookkeeping-mcp 2.3.0 → 2.3.3
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/README.md +8 -0
- package/bin/cli.js +5 -1
- package/oauth.js +4 -2
- package/package.json +1 -1
- package/server.js +16 -6
package/README.md
CHANGED
|
@@ -141,6 +141,14 @@ AI 会自动调用 `save_income` 工具记录收入。
|
|
|
141
141
|
|
|
142
142
|
## 更新日志
|
|
143
143
|
|
|
144
|
+
### v2.3.2 (2026-04-08)
|
|
145
|
+
- **修复** `server.js` 中 `CURRENT_VERSION` 未定义错误,统一使用 `MCP_VERSION`
|
|
146
|
+
- **修复** 所有工具的 `userMessage` 添加默认值,防止显示 `undefined`
|
|
147
|
+
|
|
148
|
+
### v2.3.1 (2026-04-08)
|
|
149
|
+
- **修复** `bin/cli.js` 版本号显示问题,改为动态读取 package.json
|
|
150
|
+
- **优化** OAuth 授权流程,轮询间隔缩短为 2 秒
|
|
151
|
+
|
|
144
152
|
### v2.3.0 (2026-04-08)
|
|
145
153
|
- **修复** `save_receipt` 的 `items` 参数解析 bug,支持 JSON 字符串自动转换
|
|
146
154
|
- **优化** `source` 字段规范:`save_expense`→`mcp_txt_expense`、`save_income`→`mcp_txt_income`、`save_receipt`→`mcp_receipt`
|
package/bin/cli.js
CHANGED
|
@@ -10,6 +10,10 @@ const fs = require('fs');
|
|
|
10
10
|
const os = require('os');
|
|
11
11
|
const { spawn } = require('child_process');
|
|
12
12
|
|
|
13
|
+
// 读取 package.json 获取版本
|
|
14
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
|
|
15
|
+
const CURRENT_VERSION = packageJson.version;
|
|
16
|
+
|
|
13
17
|
// 获取 server.js 的绝对路径
|
|
14
18
|
const serverPath = path.join(__dirname, '..', 'server.js');
|
|
15
19
|
|
|
@@ -183,7 +187,7 @@ function configureAllAgents() {
|
|
|
183
187
|
function showWelcome() {
|
|
184
188
|
console.log('╔════════════════════════════════════════════════════════╗');
|
|
185
189
|
console.log('║ ║');
|
|
186
|
-
console.log(
|
|
190
|
+
console.log(`║ 柴米记账 MCP Server v${CURRENT_VERSION} ║`);
|
|
187
191
|
console.log('║ ║');
|
|
188
192
|
console.log('║ 支持: OpenClaw | WorkBuddy | Claude | Cursor ║');
|
|
189
193
|
console.log('║ ║');
|
package/oauth.js
CHANGED
|
@@ -101,10 +101,11 @@ class OAuthManager {
|
|
|
101
101
|
console.log('');
|
|
102
102
|
console.log('⏳ 等待用户授权,请勿关闭窗口...');
|
|
103
103
|
console.log(' (请在手机微信中完成授权操作)');
|
|
104
|
+
console.log(' 授权完成后会自动继续,无需手动告知');
|
|
104
105
|
console.log('');
|
|
105
106
|
const token = await this.pollForToken(
|
|
106
107
|
deviceCodeRes.deviceCode,
|
|
107
|
-
|
|
108
|
+
2000 // 固定2秒轮询,更快响应
|
|
108
109
|
);
|
|
109
110
|
|
|
110
111
|
// 4. 存储 Token
|
|
@@ -332,7 +333,8 @@ class OAuthManager {
|
|
|
332
333
|
// 处理错误
|
|
333
334
|
if (result.error === 'authorization_pending') {
|
|
334
335
|
// 仍在等待授权,继续轮询
|
|
335
|
-
|
|
336
|
+
const elapsedSeconds = attempts * (interval / 1000);
|
|
337
|
+
process.stdout.write(`\r 等待中... ${elapsedSeconds}秒(请在小程完成授权)`);
|
|
336
338
|
continue;
|
|
337
339
|
}
|
|
338
340
|
|
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -72,7 +72,7 @@ function initOAuthManager() {
|
|
|
72
72
|
const server = new Server(
|
|
73
73
|
{
|
|
74
74
|
name: 'chaimi-bookkeeping-mcp',
|
|
75
|
-
version:
|
|
75
|
+
version: MCP_VERSION,
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
capabilities: {
|
|
@@ -491,7 +491,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
491
491
|
|
|
492
492
|
// 格式化输出
|
|
493
493
|
if (result.success) {
|
|
494
|
-
|
|
494
|
+
const displayName = processedArgs.name || '未知商品';
|
|
495
|
+
const displayAmount = processedArgs.amount || 0;
|
|
496
|
+
const displayCategory = processedArgs.category || '其他';
|
|
497
|
+
const displayStore = processedArgs.store || '-';
|
|
498
|
+
userMessage = `✅ 记账成功\n\n| 商品 | 金额 | 分类 | 商家 |\n|------|------|------|------|\n| ${displayName} | ${displayAmount}元 | ${displayCategory} | ${displayStore} |\n\n已保存到你的柴米记账小程序数据库。`;
|
|
495
499
|
}
|
|
496
500
|
break;
|
|
497
501
|
}
|
|
@@ -533,8 +537,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
533
537
|
// 格式化输出
|
|
534
538
|
if (result.success) {
|
|
535
539
|
const totalAmount = processedArgs.totalAmount || processedArgs.items?.reduce((sum, item) => sum + (item.amount || 0), 0) || 0;
|
|
536
|
-
const itemsList = processedArgs.items?.map(item => `• ${item.name} - ${item.amount}元`).join('\n');
|
|
537
|
-
|
|
540
|
+
const itemsList = processedArgs.items?.map(item => `• ${item.name || '未知商品'} - ${item.amount || 0}元`).join('\n') || '暂无商品明细';
|
|
541
|
+
const storeName = processedArgs.store || '-';
|
|
542
|
+
const category = processedArgs.items?.[0]?.category || '其他';
|
|
543
|
+
userMessage = `✅ 小票记录成功\n\n| 项目 | 内容 |\n|------|------|\n| 商家 | ${storeName} |\n| 金额 | ${totalAmount}元 |\n| 分类 | ${category} |\n\n商品明细:\n${itemsList}\n\n已保存到你的柴米记账小程序数据库。`;
|
|
538
544
|
}
|
|
539
545
|
break;
|
|
540
546
|
}
|
|
@@ -571,7 +577,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
571
577
|
|
|
572
578
|
// 格式化输出
|
|
573
579
|
if (result.success) {
|
|
574
|
-
|
|
580
|
+
const displayName = processedArgs.name || '未知来源';
|
|
581
|
+
const displayAmount = processedArgs.amount || 0;
|
|
582
|
+
const displayCategory = processedArgs.category || '其他';
|
|
583
|
+
const displayStore = processedArgs.store || '-';
|
|
584
|
+
userMessage = `✅ 收入记录成功\n\n| 来源 | 金额 | 分类 | 付款方 |\n|------|------|------|--------|\n| ${displayName} | ${displayAmount}元 | ${displayCategory} | ${displayStore} |`;
|
|
575
585
|
}
|
|
576
586
|
break;
|
|
577
587
|
}
|
|
@@ -586,7 +596,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
586
596
|
}
|
|
587
597
|
|
|
588
598
|
// 添加版本信息提示
|
|
589
|
-
userMessage += `\n\n---\n📦 柴米记账 MCP v${
|
|
599
|
+
userMessage += `\n\n---\n📦 柴米记账 MCP v${MCP_VERSION}`;
|
|
590
600
|
|
|
591
601
|
return {
|
|
592
602
|
content: [
|