chaimi-keep-mcp 3.3.3-beta.5 → 3.3.3-beta.7
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 +11 -1
- package/SKILL.md +13 -4
- package/bin/cli.js +4 -4
- package/package.json +2 -2
- package/references/authentication.md +10 -10
- package/references/response-templates.md +67 -6
- package/references/troubleshooting.md +6 -6
- package/server.js +23 -19
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
# 1. 安装 MCPorter(WorkBuddy/OpenClaw 等 OpenClaw 架构的 Agent 必需)
|
|
24
24
|
npm install -g mcporter
|
|
25
25
|
|
|
26
|
-
# 2.
|
|
26
|
+
# 2. 安装柴米AI记账 MCP
|
|
27
27
|
npm install -g chaimi-keep-mcp
|
|
28
28
|
|
|
29
29
|
# 3. 启动(自动配置 mcporter)
|
|
@@ -89,6 +89,16 @@ export MCP_PROMPT_URL="你的Prompt服务地址"
|
|
|
89
89
|
|
|
90
90
|
## Changelog
|
|
91
91
|
|
|
92
|
+
### v3.3.3-beta.7 (2026-04-29)
|
|
93
|
+
- **优化** 回复模板 - 新增"请确认信息"提示,时间移到核心数据区,添加类型变量
|
|
94
|
+
- **优化** 空值处理 - 商家为空时不显示,timeNote 仅异常时显示
|
|
95
|
+
- **修复** save_income - 添加 date 兜底逻辑,不传时间时使用当前时间
|
|
96
|
+
- **修复** save_expense - 优化 timeNote 显示逻辑
|
|
97
|
+
|
|
98
|
+
### v3.3.3-beta.6 (2026-04-29)
|
|
99
|
+
- **优化** 品牌统一 - 所有"柴米记账"改为"柴米AI记账"
|
|
100
|
+
- **优化** 工具描述 - 重写三个记账工具描述,包含完整调用示例和格式要求
|
|
101
|
+
|
|
92
102
|
### v3.3.3-beta.4 (2026-04-29)
|
|
93
103
|
- **优化** 收入记账时间解析统一 - save_income 同样使用 time_description,修复 AI 计算时间戳错误
|
|
94
104
|
|
package/SKILL.md
CHANGED
|
@@ -9,7 +9,7 @@ updated: "2026-04-27"
|
|
|
9
9
|
|
|
10
10
|
# 柴米AI记账 Skill
|
|
11
11
|
|
|
12
|
-
> ✨
|
|
12
|
+
> ✨ 柴米AI记账超级美学版 - 让记账变成享受
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -67,7 +67,7 @@ updated: "2026-04-27"
|
|
|
67
67
|
## 三、文档引用关系
|
|
68
68
|
|
|
69
69
|
```
|
|
70
|
-
|
|
70
|
+
用户使用柴米AI记账
|
|
71
71
|
↓
|
|
72
72
|
chaimi-keep-mcp ⭐ 本Skill
|
|
73
73
|
├── 记账成功 → 使用回复模板(见七、回复规范)
|
|
@@ -154,6 +154,11 @@ chaimi-keep-mcp ⭐ 本Skill
|
|
|
154
154
|
- ✅ 返回 `_templateHint` 提示使用哪个模板
|
|
155
155
|
- ✅ 返回 `_templateVariables` 提供模板变量数据
|
|
156
156
|
|
|
157
|
+
**空值处理原则**:
|
|
158
|
+
- 模板变量中,如果某个维度的值为空(null/undefined/空字符串),Agent 应跳过该行不显示
|
|
159
|
+
- 必填字段(金额、类型、商品、分类)必须显示
|
|
160
|
+
- 可选字段(商家、时间、洞察)为空时不显示
|
|
161
|
+
|
|
157
162
|
### 7.2 模板文件位置
|
|
158
163
|
|
|
159
164
|
**主模板文件**: `references/response-templates.md`
|
|
@@ -191,6 +196,8 @@ references/
|
|
|
191
196
|
【第1层:成功标识】✅ 「Agent名称」已帮您记账成功
|
|
192
197
|
【第2层:分隔强调】═══════════════
|
|
193
198
|
【第3层:核心数据】💰 金额:¥xx.xx
|
|
199
|
+
📊 类型:支出/收入
|
|
200
|
+
═══════════════
|
|
194
201
|
【第4层:详细信息】
|
|
195
202
|
📦 商品:xxx
|
|
196
203
|
🏷️ 分类:xxx
|
|
@@ -211,6 +218,7 @@ references/
|
|
|
211
218
|
✅ 「{agentName}」已帮您记账成功
|
|
212
219
|
═══════════════
|
|
213
220
|
💰 金额:¥{金额}
|
|
221
|
+
📊 类型:{类型}
|
|
214
222
|
═══════════════
|
|
215
223
|
|
|
216
224
|
📦 商品:{商品名}
|
|
@@ -234,6 +242,7 @@ references/
|
|
|
234
242
|
| {agentName} | Agent显示名称 | 「你的小可爱」 |
|
|
235
243
|
| {商品名} | 商品或商家名称 | 午餐、麦当劳 |
|
|
236
244
|
| {金额} | 金额(带¥符号) | ¥35.00 |
|
|
245
|
+
| {类型} | 支出/收入类型 | 支出、收入 |
|
|
237
246
|
| {分类} | 消费分类 | 餐饮 |
|
|
238
247
|
| {商家} | 商家名称(可选) | 麦当劳 |
|
|
239
248
|
| {日期时间} | 格式化时间 | 2026-04-24 12:30 |
|
|
@@ -249,7 +258,7 @@ references/
|
|
|
249
258
|
|
|
250
259
|
## 八、记忆口诀
|
|
251
260
|
|
|
252
|
-
>
|
|
261
|
+
> **柴米AI记账超美学,五层结构要牢记。**
|
|
253
262
|
> **成功标识在顶部,金额分隔最醒目。**
|
|
254
263
|
> **商品分类商家时,底部祝福加品牌。**
|
|
255
264
|
> **场景路由先匹配,工具速查再执行。**
|
|
@@ -263,7 +272,7 @@ references/
|
|
|
263
272
|
|
|
264
273
|
| 错误 | 现象 | 解决方案 | 参考文档 |
|
|
265
274
|
|:-----|:-----|:---------|:---------|
|
|
266
|
-
| **授权失败** | "未找到有效授权" | 执行 `mcporter auth
|
|
275
|
+
| **授权失败** | "未找到有效授权" | 执行 `mcporter auth 柴米AI记账` 重新授权 | troubleshooting.md |
|
|
267
276
|
| **分类不明** | "无法识别分类" | 明确说分类:"午餐35元餐饮" | api-reference.md |
|
|
268
277
|
| **网络超时** | "请求超时" | 检查网络,稍后重试 | troubleshooting.md |
|
|
269
278
|
|
package/bin/cli.js
CHANGED
|
@@ -161,8 +161,8 @@ function installToAgent(agent) {
|
|
|
161
161
|
config.mcpServers = {};
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
//
|
|
165
|
-
if (config.mcpServers['
|
|
164
|
+
// 检查是否已存在柴米AI记账配置
|
|
165
|
+
if (config.mcpServers['柴米AI记账']) {
|
|
166
166
|
return {
|
|
167
167
|
success: true,
|
|
168
168
|
action: 'skipped',
|
|
@@ -171,8 +171,8 @@ function installToAgent(agent) {
|
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
//
|
|
175
|
-
config.mcpServers['
|
|
174
|
+
// 添加柴米AI记账配置
|
|
175
|
+
config.mcpServers['柴米AI记账'] = JSON.parse(JSON.stringify(DEFAULT_CHAIMI_CONFIG));
|
|
176
176
|
|
|
177
177
|
// 写入配置
|
|
178
178
|
writeJSON(agent.configPath, config);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chaimi-keep-mcp",
|
|
3
|
-
"version": "3.3.3-beta.
|
|
3
|
+
"version": "3.3.3-beta.7",
|
|
4
4
|
"description": "柴米AI记账 MCP Server - 支持 Claude、Cursor、OpenClaw、WorkBuddy 等 AI 工具直接记账",
|
|
5
5
|
"main": "server.js",
|
|
6
6
|
"bin": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"AI记账",
|
|
41
41
|
"model-context-protocol"
|
|
42
42
|
],
|
|
43
|
-
"author": "
|
|
43
|
+
"author": "柴米AI记账团队,songyangx@gmail.com",
|
|
44
44
|
"license": "MIT",
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
@@ -58,7 +58,7 @@ updated: "2026-04-25"
|
|
|
58
58
|
|
|
59
59
|
1. **启动授权流程**
|
|
60
60
|
```bash
|
|
61
|
-
mcporter auth
|
|
61
|
+
mcporter auth 柴米AI记账
|
|
62
62
|
```
|
|
63
63
|
或
|
|
64
64
|
```bash
|
|
@@ -68,14 +68,14 @@ updated: "2026-04-25"
|
|
|
68
68
|
2. **查看验证码**
|
|
69
69
|
终端会显示:
|
|
70
70
|
```
|
|
71
|
-
🔐
|
|
71
|
+
🔐 柴米AI记账授权
|
|
72
72
|
═══════════════════════════
|
|
73
73
|
📱 验证码:GGCY-AC84
|
|
74
74
|
⏰ 有效期:5分钟
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
3. **小程序确认**
|
|
78
|
-
- 打开"
|
|
78
|
+
- 打开"柴米AI记账"小程序
|
|
79
79
|
- 点击"我的" → "AI 助手绑定"
|
|
80
80
|
- 输入验证码
|
|
81
81
|
- 点击确认
|
|
@@ -90,15 +90,15 @@ updated: "2026-04-25"
|
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
92
|
# 重新授权
|
|
93
|
-
mcporter auth
|
|
93
|
+
mcporter auth 柴米AI记账
|
|
94
94
|
|
|
95
95
|
# 强制清除缓存后重新授权
|
|
96
|
-
mcporter auth
|
|
96
|
+
mcporter auth 柴米AI记账 --reset
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
**然后:**
|
|
100
100
|
1. 查看终端显示的验证码
|
|
101
|
-
2. 打开"
|
|
101
|
+
2. 打开"柴米AI记账"小程序
|
|
102
102
|
3. 进入"我的" → "AI 助手绑定"
|
|
103
103
|
4. 输入验证码完成授权
|
|
104
104
|
|
|
@@ -124,7 +124,7 @@ mcporter auth 柴米记账 --reset
|
|
|
124
124
|
```
|
|
125
125
|
或
|
|
126
126
|
```bash
|
|
127
|
-
mcporter auth
|
|
127
|
+
mcporter auth 柴米AI记账
|
|
128
128
|
```
|
|
129
129
|
2. 查看终端显示的验证码
|
|
130
130
|
3. 在小程序"我的"→"AI 助手绑定"中输入验证码
|
|
@@ -160,7 +160,7 @@ del %USERPROFILE%\.mcporter\oauth-token.json
|
|
|
160
160
|
cat ~/.mcporter/oauth-token.json
|
|
161
161
|
|
|
162
162
|
# 或尝试调用工具测试
|
|
163
|
-
mcporter call
|
|
163
|
+
mcporter call 柴米AI记账.get_skill
|
|
164
164
|
```
|
|
165
165
|
|
|
166
166
|
**Token 文件位置:**
|
|
@@ -172,7 +172,7 @@ mcporter call 柴米记账.get_skill
|
|
|
172
172
|
|
|
173
173
|
Token 过期后需要重新授权:
|
|
174
174
|
```bash
|
|
175
|
-
mcporter auth
|
|
175
|
+
mcporter auth 柴米AI记账
|
|
176
176
|
```
|
|
177
177
|
|
|
178
178
|
---
|
|
@@ -192,7 +192,7 @@ mcporter auth 柴米记账
|
|
|
192
192
|
|
|
193
193
|
```bash
|
|
194
194
|
# 强制清除缓存后重新授权
|
|
195
|
-
mcporter auth
|
|
195
|
+
mcporter auth 柴米AI记账 --reset
|
|
196
196
|
```
|
|
197
197
|
|
|
198
198
|
**场景:**
|
|
@@ -47,6 +47,7 @@ updated: "2026-04-25"
|
|
|
47
47
|
|:-----|:------|:-----|
|
|
48
48
|
| 成功标识 | ✅ | 操作成功 |
|
|
49
49
|
| 金额 | 💰 | 核心数据 |
|
|
50
|
+
| 类型 | 📊 | 支出/收入 |
|
|
50
51
|
| 商品 | 📦 | 物品 |
|
|
51
52
|
| 分类 | 🏷️ | 标签分类 |
|
|
52
53
|
| 商家 | 🏪 | 商店 |
|
|
@@ -54,6 +55,63 @@ updated: "2026-04-25"
|
|
|
54
55
|
| 祝福 | 🎉 | 庆祝 |
|
|
55
56
|
| 警示 | ⚠️ | 需要关注 |
|
|
56
57
|
|
|
58
|
+
### 1.4 空值处理规范(重要)
|
|
59
|
+
|
|
60
|
+
**规则**:详细信息区(第4层)的维度,如果值为空,则不展示该行。
|
|
61
|
+
|
|
62
|
+
**处理逻辑**:
|
|
63
|
+
```
|
|
64
|
+
渲染前检查每个字段:
|
|
65
|
+
- 如果字段值存在且不为空 → 显示该行
|
|
66
|
+
- 如果字段值为空/null/undefined → 跳过该行
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**示例**:
|
|
70
|
+
```markdown
|
|
71
|
+
// 完整数据
|
|
72
|
+
📦 商品:午餐
|
|
73
|
+
🏷️ 分类:餐饮
|
|
74
|
+
🏪 商家:麦当劳
|
|
75
|
+
🕐 时间:2026-04-24 12:30
|
|
76
|
+
|
|
77
|
+
// 商家为空时
|
|
78
|
+
📦 商品:午餐
|
|
79
|
+
🏷️ 分类:餐饮
|
|
80
|
+
🕐 时间:2026-04-24 12:30
|
|
81
|
+
(🏪 商家:这一行不显示)
|
|
82
|
+
|
|
83
|
+
// 只有商品和金额时
|
|
84
|
+
📦 商品:午餐
|
|
85
|
+
(其他维度为空,都不显示)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**必填 vs 可选字段**:
|
|
89
|
+
| 字段 | 是否必填 | 为空时处理 |
|
|
90
|
+
|:-----|:---------|:-----------|
|
|
91
|
+
| 商品名 | ✅ 必填 | 必须显示 |
|
|
92
|
+
| 分类 | ✅ 必填 | 必须显示 |
|
|
93
|
+
| 类型 | ✅ 必填 | 必须显示 |
|
|
94
|
+
| 金额 | ✅ 必填 | 必须显示 |
|
|
95
|
+
| 商家 | ❌ 可选 | 为空不显示 |
|
|
96
|
+
| 时间 | ❌ 可选 | 为空不显示 |
|
|
97
|
+
| 洞察 | ❌ 可选 | 为空不显示 |
|
|
98
|
+
|
|
99
|
+
**规则2:避免重复显示**
|
|
100
|
+
- 如果商品名和分类相同 → 只显示分类行(避免重复)
|
|
101
|
+
- 如果商品名和分类不同 → 两行都显示
|
|
102
|
+
|
|
103
|
+
**示例**:
|
|
104
|
+
```markdown
|
|
105
|
+
// 用户说"交通 12"(商品名=分类)
|
|
106
|
+
🏷️ 分类:交通
|
|
107
|
+
(📦 商品:交通 不显示,避免重复)
|
|
108
|
+
|
|
109
|
+
// 用户说"午餐 35"(商品名=午餐,分类=餐饮)
|
|
110
|
+
📦 商品:午餐
|
|
111
|
+
🏷️ 分类:餐饮
|
|
112
|
+
(两行都显示)
|
|
113
|
+
```
|
|
114
|
+
|
|
57
115
|
---
|
|
58
116
|
|
|
59
117
|
## 二、标准模板
|
|
@@ -65,18 +123,20 @@ updated: "2026-04-25"
|
|
|
65
123
|
```markdown
|
|
66
124
|
✅ 「{agentName}」已帮您记账成功
|
|
67
125
|
═══════════════
|
|
126
|
+
🔴🔴 请确认以下信息是否正确
|
|
68
127
|
💰 金额:¥{金额}
|
|
128
|
+
📊 类型:{类型}
|
|
129
|
+
🕐 时间:{日期时间}
|
|
69
130
|
═══════════════
|
|
70
131
|
|
|
71
132
|
📦 商品:{商品名}
|
|
72
133
|
🏷️ 分类:{分类}
|
|
73
134
|
🏪 商家:{商家}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
💡 消费洞察:{洞察内容}(可选)
|
|
135
|
+
💡 消费洞察:{洞察内容}
|
|
136
|
+
⏰ 时间说明:{timeNote}
|
|
77
137
|
|
|
78
138
|
───────────────
|
|
79
|
-
🎉 {
|
|
139
|
+
🎉 {正能量情绪词}!
|
|
80
140
|
柴米AI记账
|
|
81
141
|
chaimi-keep-mcp v{版本号}
|
|
82
142
|
───────────────
|
|
@@ -87,14 +147,15 @@ updated: "2026-04-25"
|
|
|
87
147
|
```markdown
|
|
88
148
|
✅ 「你的小可爱」已帮您记账成功
|
|
89
149
|
═══════════════
|
|
150
|
+
🔴🔴 请确认以下信息是否正确
|
|
90
151
|
💰 金额:¥35.00
|
|
152
|
+
📊 类型:支出
|
|
153
|
+
🕐 时间:2026-04-24 12:30
|
|
91
154
|
═══════════════
|
|
92
155
|
|
|
93
156
|
📦 商品:午餐
|
|
94
157
|
🏷️ 分类:餐饮
|
|
95
158
|
🏪 商家:麦当劳
|
|
96
|
-
🕐 时间:2026-04-24 12:30
|
|
97
|
-
|
|
98
159
|
💡 消费洞察:本月餐饮支出占比30%,建议控制
|
|
99
160
|
|
|
100
161
|
───────────────
|
|
@@ -38,7 +38,7 @@ updated: "2026-04-25"
|
|
|
38
38
|
- 授权被撤销
|
|
39
39
|
|
|
40
40
|
**解决方案:**
|
|
41
|
-
1. 执行 `mcporter auth
|
|
41
|
+
1. 执行 `mcporter auth 柴米AI记账`
|
|
42
42
|
2. 查看终端显示的验证码
|
|
43
43
|
3. 在小程序"我的"→"AI 助手绑定"中输入验证码
|
|
44
44
|
4. 重新尝试记账
|
|
@@ -58,10 +58,10 @@ updated: "2026-04-25"
|
|
|
58
58
|
**解决方案:**
|
|
59
59
|
```bash
|
|
60
60
|
# 重新授权
|
|
61
|
-
mcporter auth
|
|
61
|
+
mcporter auth 柴米AI记账
|
|
62
62
|
|
|
63
63
|
# 或强制清除缓存后重新授权
|
|
64
|
-
mcporter auth
|
|
64
|
+
mcporter auth 柴米AI记账 --reset
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
### 1.3 验证码错误
|
|
@@ -76,7 +76,7 @@ mcporter auth 柴米记账 --reset
|
|
|
76
76
|
- 验证码超过5分钟有效期
|
|
77
77
|
|
|
78
78
|
**解决方案:**
|
|
79
|
-
1. 重新执行 `mcporter auth
|
|
79
|
+
1. 重新执行 `mcporter auth 柴米AI记账` 生成新验证码
|
|
80
80
|
2. 在5分钟内在小程序"我的"→"AI 助手绑定"中输入
|
|
81
81
|
3. 注意区分大小写
|
|
82
82
|
|
|
@@ -218,7 +218,7 @@ mcporter auth 柴米记账 --reset
|
|
|
218
218
|
|
|
219
219
|
**解决方案:**
|
|
220
220
|
1. 等待几分钟后重试
|
|
221
|
-
2.
|
|
221
|
+
2. 检查柴米AI记账官方公告
|
|
222
222
|
3. 提交反馈:调用 `submit_feedback`
|
|
223
223
|
|
|
224
224
|
---
|
|
@@ -269,7 +269,7 @@ cat /mcp-server-local/references/response-templates.md
|
|
|
269
269
|
chaimi-keep-mcp --version
|
|
270
270
|
|
|
271
271
|
# 重新授权
|
|
272
|
-
mcporter auth
|
|
272
|
+
mcporter auth 柴米AI记账
|
|
273
273
|
|
|
274
274
|
# 测试记账连接
|
|
275
275
|
curl -X POST https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpHub-mcp \
|
package/server.js
CHANGED
|
@@ -243,7 +243,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
243
243
|
tools: [
|
|
244
244
|
{
|
|
245
245
|
name: 'get_skill',
|
|
246
|
-
description: '
|
|
246
|
+
description: '【记账前必须调用】获取柴米AI记账最新 Skill 定义。每次记账前必须先调用此工具,获取当前版本的完整 Skill 文档,然后严格按照 Skill 定义执行。如果不调用此工具直接记账,操作将被拒绝',
|
|
247
247
|
inputSchema: {
|
|
248
248
|
type: 'object',
|
|
249
249
|
properties: {
|
|
@@ -253,7 +253,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
253
253
|
},
|
|
254
254
|
{
|
|
255
255
|
name: 'save_expense',
|
|
256
|
-
description: '
|
|
256
|
+
description: '【文本记账-支出】用户提及支出/消费时用此工具。前置:必须先调用get_skill获取规范,再调用get_text_parse_prompt获取Token和解析模板。用法:mcporter call 柴米AI记账.save_expense _requestToken="RT..." name="午餐" amount=35 category="餐饮" rawInput="午餐35元"。注意:上传图片请用save_receipt',
|
|
257
257
|
inputSchema: {
|
|
258
258
|
type: 'object',
|
|
259
259
|
properties: {
|
|
@@ -275,7 +275,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
275
275
|
},
|
|
276
276
|
{
|
|
277
277
|
name: 'save_receipt',
|
|
278
|
-
description: '
|
|
278
|
+
description: '【图片记账-小票】用户上传小票/发票/收据图片时用此工具。前置:必须先调用get_skill获取规范,再调用get_parse_prompt获取Token和解析模板。用法:mcporter call 柴米AI记账.save_receipt _requestToken="RT..." store="超市" totalAmount=156.5 items="[...]"。注意:文字描述请用save_expense/save_income',
|
|
279
279
|
inputSchema: {
|
|
280
280
|
type: 'object',
|
|
281
281
|
properties: {
|
|
@@ -403,7 +403,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
403
403
|
},
|
|
404
404
|
{
|
|
405
405
|
name: 'save_income',
|
|
406
|
-
description: '
|
|
406
|
+
description: '【文本记账-收入】用户提及收入关键词(工资、红包、转账、退款等)时用此工具。前置:必须先调用get_skill获取规范,再调用get_text_parse_prompt获取Token和解析模板。用法:mcporter call 柴米AI记账.save_income _requestToken="RT..." name="红包" amount=100 category="礼金" rawInput="收红包100元"',
|
|
407
407
|
inputSchema: {
|
|
408
408
|
type: 'object',
|
|
409
409
|
properties: {
|
|
@@ -779,10 +779,6 @@ function recordSkillRead() {
|
|
|
779
779
|
// 工具调用处理
|
|
780
780
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
781
781
|
const { name, arguments: args } = request.params;
|
|
782
|
-
|
|
783
|
-
// 【调试】记录实际接收到的参数
|
|
784
|
-
console.log(`[CallTool] ${name} 接收参数:`, JSON.stringify(args, null, 2));
|
|
785
|
-
|
|
786
782
|
const startTime = Date.now();
|
|
787
783
|
const traceId = generateTraceId();
|
|
788
784
|
const osInfo = getOSInfo();
|
|
@@ -981,7 +977,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
981
977
|
success: false,
|
|
982
978
|
error: `必填字段缺失:${missingFields.join(', ')}`,
|
|
983
979
|
code: 400,
|
|
984
|
-
hint: '解决方法:1.查看 SKILL.md 中"六.5 如何查看工具参数" 2.运行 mcporter list
|
|
980
|
+
hint: '解决方法:1.查看 SKILL.md 中"六.5 如何查看工具参数" 2.运行 mcporter list 柴米AI记账 --schema 查看完整参数结构',
|
|
985
981
|
debug: {
|
|
986
982
|
missing: missingFields,
|
|
987
983
|
received: Object.keys(processedArgs),
|
|
@@ -1075,15 +1071,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1075
1071
|
result._templateHint = '请使用references/response-templates.md中的2.1标准成功模板渲染回复';
|
|
1076
1072
|
result._templateVariables = {
|
|
1077
1073
|
agentName: await getAgentName(),
|
|
1074
|
+
类型: '支出',
|
|
1078
1075
|
商品名: displayName,
|
|
1079
|
-
商家: displayStore ||
|
|
1076
|
+
商家: displayStore || null,
|
|
1080
1077
|
金额: displayAmount,
|
|
1081
1078
|
分类: result.data?.categoryName || displayCategory,
|
|
1082
|
-
日期: result.data?.date ? new Date(result.data.date).
|
|
1079
|
+
日期: result.data?.date ? new Date(result.data.date).toLocaleString('zh-CN') : new Date().toLocaleString('zh-CN'),
|
|
1083
1080
|
正能量祝福语: friendlyEnding,
|
|
1084
1081
|
insightsText,
|
|
1085
1082
|
achievementsText,
|
|
1086
|
-
timeNote
|
|
1083
|
+
timeNote: timeNote || null
|
|
1087
1084
|
};
|
|
1088
1085
|
}
|
|
1089
1086
|
break;
|
|
@@ -1105,7 +1102,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1105
1102
|
success: false,
|
|
1106
1103
|
error: `必填字段缺失:${missingFields.join(', ')}`,
|
|
1107
1104
|
code: 400,
|
|
1108
|
-
hint: '解决方法:1.查看 SKILL.md 中"六.5 如何查看工具参数" 2.运行 mcporter list
|
|
1105
|
+
hint: '解决方法:1.查看 SKILL.md 中"六.5 如何查看工具参数" 2.运行 mcporter list 柴米AI记账 --schema 查看完整参数结构',
|
|
1109
1106
|
debug: {
|
|
1110
1107
|
missing: missingFields,
|
|
1111
1108
|
received: Object.keys(processedArgs),
|
|
@@ -1173,7 +1170,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1173
1170
|
error: `商品数据不完整:${invalidItems.join('; ')}。每个商品必须包含:name, amount, price, quantity, category`,
|
|
1174
1171
|
code: 400
|
|
1175
1172
|
};
|
|
1176
|
-
userMessage = `❌ 保存失败\n\n错误:商品数据格式不完整\n\n${invalidItems.join('\n')}\n\n💡 解决方案:\n1.
|
|
1173
|
+
userMessage = `❌ 保存失败\n\n错误:商品数据格式不完整\n\n${invalidItems.join('\n')}\n\n💡 解决方案:\n1. 请更新您的柴米AI记账 MCP Skill\n2. 确保每个商品包含完整的5个字段:name, amount, price, quantity, category\n3. category 是记账的基本信息,不能为空`;
|
|
1177
1174
|
break;
|
|
1178
1175
|
}
|
|
1179
1176
|
|
|
@@ -1500,7 +1497,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1500
1497
|
success: false,
|
|
1501
1498
|
error: `必填字段缺失:${missingFields.join(', ')}`,
|
|
1502
1499
|
code: 400,
|
|
1503
|
-
hint: '解决方法:1.查看 SKILL.md 中"六.5 如何查看工具参数" 2.运行 mcporter list
|
|
1500
|
+
hint: '解决方法:1.查看 SKILL.md 中"六.5 如何查看工具参数" 2.运行 mcporter list 柴米AI记账 --schema 查看完整参数结构',
|
|
1504
1501
|
debug: {
|
|
1505
1502
|
missing: missingFields,
|
|
1506
1503
|
received: Object.keys(processedArgs),
|
|
@@ -1530,6 +1527,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1530
1527
|
timeNote = getTimeNote(processedArgs.time_description);
|
|
1531
1528
|
console.log(`[save_income] 时间描述解析: ${processedArgs.time_description} → ${parsedDate} (${new Date(parsedDate).toLocaleString('zh-CN')})`);
|
|
1532
1529
|
}
|
|
1530
|
+
// 【新增】兜底:如果既没传 time_description 也没传 date,使用当前时间
|
|
1531
|
+
else if (!processedArgs.date) {
|
|
1532
|
+
processedArgs.date = Date.now();
|
|
1533
|
+
timeNote = '⏰ 时间说明:未指定时间,使用当前时间';
|
|
1534
|
+
console.log(`[save_income] 未传时间参数,使用当前时间: ${processedArgs.date}`);
|
|
1535
|
+
}
|
|
1533
1536
|
|
|
1534
1537
|
// P1: 日期合理性检查
|
|
1535
1538
|
if (processedArgs.date) {
|
|
@@ -1571,13 +1574,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1571
1574
|
result._templateHint = '请使用references/response-templates.md中的2.1标准成功模板渲染回复';
|
|
1572
1575
|
result._templateVariables = {
|
|
1573
1576
|
agentName: await getAgentName(),
|
|
1577
|
+
类型: '收入',
|
|
1574
1578
|
商品名: displayName,
|
|
1575
|
-
商家: displayStore,
|
|
1579
|
+
商家: displayStore || null,
|
|
1576
1580
|
金额: displayAmount,
|
|
1577
1581
|
分类: result.data?.categoryName || displayCategory,
|
|
1578
|
-
日期: result.data?.date ? new Date(result.data.date).
|
|
1582
|
+
日期: result.data?.date ? new Date(result.data.date).toLocaleString('zh-CN') : new Date().toLocaleString('zh-CN'),
|
|
1579
1583
|
正能量祝福语: '入账顺利!💰',
|
|
1580
|
-
timeNote
|
|
1584
|
+
timeNote: timeNote || null
|
|
1581
1585
|
};
|
|
1582
1586
|
}
|
|
1583
1587
|
break;
|
|
@@ -1707,7 +1711,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1707
1711
|
content: [
|
|
1708
1712
|
{
|
|
1709
1713
|
type: 'text',
|
|
1710
|
-
text: `⚠️ 【注意】Server 只返回原始数据,不返回格式化消息。\n请使用 _templateLocation 指定的模板自行渲染回复。\n\n---\n📦
|
|
1714
|
+
text: `⚠️ 【注意】Server 只返回原始数据,不返回格式化消息。\n请使用 _templateLocation 指定的模板自行渲染回复。\n\n---\n📦 柴米AI记账 MCP v${MCP_VERSION}\n\n## 完整数据\n\`\`\`json\n${safeStringify(responseData)}\n\`\`\``,
|
|
1711
1715
|
},
|
|
1712
1716
|
],
|
|
1713
1717
|
};
|