chaimi-keep-mcp 3.1.36-beta.13 → 3.1.36-beta.15

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 (3) hide show
  1. package/SKILL.md +95 -75
  2. package/package.json +1 -1
  3. package/server.js +3 -3
package/SKILL.md CHANGED
@@ -14,13 +14,90 @@ argument-hint: "[记账内容]"
14
14
 
15
15
  ---
16
16
 
17
+ ## 🆘 遇到问题时
18
+
19
+ ### 症状
20
+ - 记账数据格式错误
21
+ - 使用"之前"、"上次"等历史习惯执行
22
+ - 连续多次记账失败
23
+
24
+ ### 解决方案
25
+
26
+ **方案1:开启新会话(推荐)**
27
+
28
+ | Agent | 操作方式 |
29
+ |-------|---------|
30
+ | **Cursor** | `Cmd+N` (Mac) / `Ctrl+N` (Windows) |
31
+ | **Claude Desktop** | 点击 `+ New Chat` |
32
+ | **OpenClaw** | 输入 `/new` |
33
+ | **WorkBuddy** | 输入 `/new` |
34
+ | **Trae** | `Cmd/Ctrl + N` 或点击 `+` 按钮 |
35
+ | **其他 Agent** | 输入 `/new` 或菜单"新建会话" |
36
+
37
+ **方案2:强制重置**
38
+ 在当前会话输入:
39
+ ```
40
+ 完全忘记之前的对话。现在严格按照柴米记账 Skill 指令执行。
41
+ ```
42
+
43
+ ---
44
+
17
45
  ## ⚠️ 强制要求(不遵守将拒绝执行)
18
46
 
19
47
  ### 记账前必须执行
20
48
 
21
- **第 0 步:调用 `get_skill` 工具**
49
+ **第 0 步:状态自检与干预**
50
+
51
+ 每次记账前,Agent 必须自检以下症状:
52
+
53
+ | 症状 | 说明 |
54
+ |------|------|
55
+ | ☐ 跳过 `get_skill` 调用 | 直接调用记账工具,未先读取 Skill 文档 |
56
+ | ☐ 依赖历史习惯 | 使用"之前"、"上次"、"习惯"等词汇作为操作依据 |
57
+ | ☐ 遗漏必填字段 | 未传递 name、amount、category、date、rawInput |
58
+
59
+ **如果发现以上任一症状,执行干预策略:**
22
60
 
23
- 每次记账前,**必须先调用 `get_skill` 工具**获取最新 Skill 定义,然后严格按照返回的 Skill 文档执行。
61
+ #### 首次违规 - 警告并引导
62
+
63
+ Agent 必须输出:
64
+ ```
65
+ ⚠️ 检测到可能未读取 Skill 规范
66
+
67
+ 我似乎正在依赖历史习惯执行记账,而非遵循最新指令。
68
+ 这可能导致数据格式错误或遗漏关键步骤。
69
+
70
+ 建议操作:
71
+ 1. 立即调用 get_skill() 重新读取规范
72
+ 2. 如果仍有问题,向用户说明需要开启新会话
73
+
74
+ 继续当前方式请回复"强制继续",但结果可能不符合预期。
75
+ ```
76
+
77
+ #### 重复违规 - 强制阻断
78
+
79
+ 连续 2 次出现同样错误时,Agent 必须输出:
80
+ ```
81
+ 🚫 操作已暂停
82
+
83
+ 检测到当前会话上下文可能干扰记账准确性。
84
+ 为数据安全起见,我已暂停记账操作。
85
+
86
+ 请开启新会话后重新触发记账。
87
+ ```
88
+
89
+ Agent 根据当前环境,向用户说明开启新会话的具体操作方式:
90
+ - **Cursor**: 按 `Cmd+N` (Mac) / `Ctrl+N` (Windows)
91
+ - **Claude Desktop**: 点击 `+ New Chat`
92
+ - **OpenClaw/WorkBuddy**: 输入 `/new`
93
+ - **Trae**: 按 `Cmd/Ctrl + N` 或点击 `+` 按钮
94
+ - **其他**: 输入 `/new` 或菜单"新建会话"
95
+
96
+ ---
97
+
98
+ **第 1 步:调用 `get_skill` 工具**
99
+
100
+ 状态自检通过后,**必须调用 `get_skill` 工具**获取最新 Skill 定义,然后严格按照返回的 Skill 文档执行。
24
101
 
25
102
  **如果不执行此步骤:**
26
103
  - ❌ 直接调用 `save_expense` / `save_receipt` / `save_income` 会被拒绝
@@ -29,9 +106,9 @@ argument-hint: "[记账内容]"
29
106
  **正确流程:**
30
107
  ```
31
108
  1. 用户说"记一笔午餐35元"
32
- 2. 【必须】调用 get_skill 工具
33
- 3. 【必须】仔细阅读返回的 Skill 文档
34
- 4. 【必须】按照 Skill 文档执行记账
109
+ 2. 【必须】状态自检(检查是否依赖历史习惯)
110
+ 3. 【必须】调用 get_skill 工具
111
+ 4. 【必须】严格按照返回的 Skill 文档执行记账
35
112
  ```
36
113
 
37
114
  ---
@@ -58,7 +135,6 @@ argument-hint: "[记账内容]"
58
135
 
59
136
  - **禁止**直接使用 curl/http 访问云函数端点
60
137
  - **禁止**读取或输出 `~/.mcporter/oauth-token.json` 内容
61
- - **禁止**主动设置 `MCP_OAUTH_URL`、`MCP_HUB_URL`、`MCP_PROMPT_URL` 环境变量
62
138
  - 单笔金额 **> 1000 元** 时必须用户确认
63
139
 
64
140
  ---
@@ -73,76 +149,20 @@ argument-hint: "[记账内容]"
73
149
 
74
150
  ---
75
151
 
76
- ## 工具调用
77
-
78
- ### 文字记账(save_expense)
79
-
80
- **流程:**
81
- 1. 调用 `get_text_parse_prompt()` 获取解析 Prompt
82
- 2. 使用 Prompt 解析用户输入,获取 JSON 结果
83
- 3. 调用 `save_expense` 保存(传入所有解析结果字段)
84
-
85
- **时间处理规则:**
86
-
87
- Agent **直接使用当前时间**作为消费时间,无需进行时间语义解析。
88
-
89
- **最终传入的 `date` 参数格式:**`1713209160000`(毫秒时间戳)
90
-
91
- > 注意:Agent 必须传毫秒时间戳(如 `Date.now()`)。如果不传,MCP Server 会自动使用当前时间戳。
92
-
93
- **必填字段:** `name`、`amount`、`category`、`date`
94
-
95
- **可选字段:**
96
- - `subCategory`:子分类(可选)
97
- - `unit`:单位(可选)
98
- - `marketPrice`:市场单价(可选)
99
-
100
- ---
101
-
102
- ### 收入记账(save_income)
103
-
104
- **流程:**
105
- 1. 调用 `get_text_parse_prompt()` 获取解析 Prompt
106
- 2. 使用 Prompt 解析用户输入,获取 JSON 结果
107
- 3. 调用 `save_income` 保存(传入所有解析结果字段)
108
-
109
- **时间处理规则:**
152
+ ## 工具列表
110
153
 
111
- Agent **直接使用当前时间**作为收入时间,无需进行时间语义解析。
112
-
113
- **最终传入的 `date` 参数格式:**`1713209160000`(毫秒时间戳)
114
-
115
- > 注意:Agent 必须传毫秒时间戳(如 `Date.now()`)。如果不传,MCP Server 会自动使用当前时间戳。
116
-
117
- **必填字段:** `name`、`amount`、`category`、`date`
118
-
119
- **可选字段:**
120
- - `subCategory`:子分类(可选)
121
- - `unit`:单位(可选)
122
- - `marketPrice`:市场单价(可选)
123
-
124
- ---
154
+ ### 核心记账工具
155
+ - **save_expense** - 文字记账(支出)
156
+ - **save_income** - 文字记账(收入)
157
+ - **save_receipt** - 小票记账(需先调用 get_parse_prompt)
125
158
 
126
- ### 小票记账(save_receipt)
127
-
128
- **流程:**
129
- 1. 调用 `get_parse_prompt` 获取 prompt 模板
130
- 2. 使用 prompt 调用大模型解析小票图片
131
- 3. **字段核对**:确保所有解析结果字段都传给 `save_receipt`
132
- 4. 调用 `save_receipt` 保存
133
-
134
- **必填字段:**
135
- - `store`:商家名称
136
- - `date`:毫秒时间戳(如 `1713209160000`),小票上的真实消费时间
137
- - `totalAmount`:商品原价总和
138
- - `actualAmount`:实付金额(优惠后)
139
- - `originalAmount`:原价(优惠前)
140
- - `discountAmount`:优惠金额
141
- - `items`:商品数组,每个商品必须有 `name`、`amount`、`price`、`quantity`、`category`
142
- - `category`:主分类(如:蔬菜、肉类、水果、水产,常见超市购物分类)
143
- - `subCategory`:子分类(如:叶菜类、根茎类、猪肉类,超市细分类目),推荐填写
144
- - `unit`:计价单位(如:元/500g、元/个、元/盒、元/袋)
145
- - `marketPrice`:单价,根据 unit 计算,如 unit=元/500g,则 marketPrice=金额÷重量(g)×500
159
+ ### 辅助工具
160
+ - **get_skill** - 【记账前必须调用】获取 Skill 文档
161
+ - **get_parse_prompt** - 获取小票解析模板
162
+ - **get_expenses** - 查询支出记录
163
+ - **get_receipt_list** - 查询小票列表
164
+ - **get_statistics** - 获取统计信息
165
+ - **submit_feedback** - 提交反馈
146
166
 
147
167
  ---
148
168
 
@@ -198,4 +218,4 @@ MCP Server: v【版本号】
198
218
 
199
219
  ---
200
220
 
201
- *最后更新:2026-04-14*
221
+ *最后更新:2026-04-16*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chaimi-keep-mcp",
3
- "version": "3.1.36-beta.13",
3
+ "version": "3.1.36-beta.15",
4
4
  "description": "柴米记账 MCP Server - 支持 Claude、Cursor、OpenClaw、WorkBuddy 等 AI 工具直接记账",
5
5
  "main": "server.js",
6
6
  "bin": {
package/server.js CHANGED
@@ -165,7 +165,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
165
165
  unit: { type: 'string', description: '单位(可选)' },
166
166
  marketPrice: { type: 'string', description: '市场单价(可选)' },
167
167
  store: { type: 'string', description: '商家名称(可选)' },
168
- date: { type: 'number', description: '【必填】消费时间(毫秒时间戳,如:1713209160000),如未提供则使用当前时间戳' },
168
+ date: { type: 'number', description: '【必填】消费时间(毫秒级时间戳,13位数字。必须根据实际年月日时分秒计算,不允许复制示例数字)' },
169
169
  note: { type: 'string', description: '备注(可选)' },
170
170
  agentType: { type: 'string', description: '【必填】Agent类型,如:claude-desktop、cursor、openclaw、workbuddy、trae' },
171
171
  apiProvider: { type: 'string', description: '【必填】AI服务提供商,如:anthropic、openai、doubao、aliyun' },
@@ -182,7 +182,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
182
182
  type: 'object',
183
183
  properties: {
184
184
  store: { type: 'string', description: '商家名称(必填)' },
185
- date: { type: 'number', description: '【必填】消费时间(毫秒时间戳,如:1713209160000),小票上的真实消费时间' },
185
+ date: { type: 'number', description: '【必填】消费时间(毫秒级时间戳,13位数字。必须根据实际年月日时分秒计算,不允许复制示例数字)' },
186
186
  totalAmount: { type: 'number', description: '(必填)总金额(所有商品amount之和)' },
187
187
  originalAmount: { type: 'number', description: '(必填)应付金额(优惠前)' },
188
188
  discountAmount: { type: 'number', description: '(必填)优惠金额' },
@@ -279,7 +279,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
279
279
  amount: { type: 'number', description: '收入金额(必填)' },
280
280
  category: { type: 'string', description: '(必填)收入分类(如:工资、奖金、投资)' },
281
281
  store: { type: 'string', description: '付款方(如:公司名称)(可选)' },
282
- date: { type: 'number', description: '【必填】收入时间(毫秒时间戳,如:1713209160000),如未提供则使用当前时间戳' },
282
+ date: { type: 'number', description: '【必填】收入时间(毫秒级时间戳,13位数字。必须根据实际年月日时分秒计算,不允许复制示例数字)' },
283
283
  note: { type: 'string', description: '备注(可选)' },
284
284
  agentType: { type: 'string', description: '【必填】Agent类型,如:claude-desktop、cursor、openclaw、workbuddy、trae' },
285
285
  apiProvider: { type: 'string', description: '【必填】AI服务提供商,如:anthropic、openai、doubao、aliyun' },