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 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('║ 柴米记账 MCP Server v2.1.0 ║');
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
- deviceCodeRes.interval * 1000 || 5000
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
- process.stdout.write('.');
336
+ const elapsedSeconds = attempts * (interval / 1000);
337
+ process.stdout.write(`\r 等待中... ${elapsedSeconds}秒(请在小程完成授权)`);
336
338
  continue;
337
339
  }
338
340
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chaimi-bookkeeping-mcp",
3
- "version": "2.3.0",
3
+ "version": "2.3.3",
4
4
  "description": "柴米记账 MCP Server - 支持 Claude、Cursor、OpenClaw、WorkBuddy 等 AI 工具直接记账",
5
5
  "main": "server.js",
6
6
  "bin": {
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: CURRENT_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
- userMessage = `✅ 记账成功\n\n| 商品 | 金额 | 分类 | 商家 |\n|------|------|------|------|\n| ${processedArgs.name} | ${processedArgs.amount}元 | ${processedArgs.category || '其他'} | ${processedArgs.store || '-'} |\n\n已保存到你的柴米记账小程序数据库。`;
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
- userMessage = `✅ 小票记录成功\n\n| 项目 | 内容 |\n|------|------|\n| 商家 | ${processedArgs.store || '-'} |\n| 金额 | ${totalAmount}元 |\n| 分类 | ${processedArgs.items?.[0]?.category || '其他'} |\n\n商品明细:\n${itemsList}\n\n已保存到你的柴米记账小程序数据库。`;
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
- userMessage = `✅ 收入记录成功\n\n| 来源 | 金额 | 分类 | 付款方 |\n|------|------|------|--------|\n| ${processedArgs.name} | ${processedArgs.amount}元 | ${processedArgs.category || '其他'} | ${processedArgs.store || '-'} |`;
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${CURRENT_VERSION}`;
599
+ userMessage += `\n\n---\n📦 柴米记账 MCP v${MCP_VERSION}`;
590
600
 
591
601
  return {
592
602
  content: [