chaimi-keep-mcp 3.1.24

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/.env.example ADDED
@@ -0,0 +1,26 @@
1
+ # 柴米记账 MCP Server 环境变量配置
2
+ # OAuth 2.0 Device Flow 认证(行业标准方案)
3
+
4
+ # ========================================
5
+ # 必需配置
6
+ # ========================================
7
+
8
+ # OAuth 云函数地址
9
+ # 首次启动会自动引导完成授权,Token 存储在 ~/.mcporter/oauth-token.json
10
+ MCP_OAUTH_URL=https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpOAuth
11
+
12
+ # mcpHub 云函数地址
13
+ MCP_HUB_URL=https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpHub-mcp
14
+
15
+ # mcpPrompt 云函数地址
16
+ MCP_PROMPT_URL=https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpPrompt
17
+
18
+ # ========================================
19
+ # 可选配置
20
+ # ========================================
21
+
22
+ # AI API Key(用于本地解析)
23
+ AI_API_KEY=
24
+
25
+ # AI 提供商(openai/anthropic/deepseek)
26
+ AI_PROVIDER=deepseek
package/README.md ADDED
@@ -0,0 +1,222 @@
1
+ # 柴米AI记账 MCP Server
2
+
3
+ 通过 OpenClaw、WorkBuddy 等 AI 工具直接记账,支持 MCP 协议的 Claude、Cursor 等。
4
+
5
+ ## 系统要求
6
+
7
+ - Node.js >= 18.0.0
8
+ - macOS / Windows / Linux
9
+ - 微信(已安装"柴米AI记账"小程序)
10
+
11
+ ## ⚠️ 重要提示(Agent开发者必读)
12
+
13
+ **如果您是 AI Agent 开发者,请注意:**
14
+
15
+ 1. **不要缓存工具定义**:MCP 工具定义可能会更新,请在每次调用前通过 `mcporter list` 获取最新定义
16
+ 2. **关注版本号**:工具描述中包含版本号(如【v3.1.21】),版本变化时请更新您的 Skill
17
+ 3. **save_receipt 工具要求**:items 数组中每个商品必须包含完整的4个字段:`name`、`amount`、`price`、`quantity`
18
+ 4. **自动填充字段**:`agentType`、`apiProvider`、`rawInput`、`mcp_version` 为自动填充字段,无需用户输入
19
+
20
+ ## 快速安装
21
+
22
+ ### 方式一:npm 全局安装(推荐)
23
+
24
+ ```bash
25
+ # 1. 安装 MCPorter(WorkBuddy/OpenClaw 等 OpenClaw 架构的 Agent 必需)
26
+ npm install -g mcporter
27
+
28
+ # 2. 安装柴米记账 MCP
29
+ npm install -g chaimi-keep-mcp
30
+
31
+ # 3. 启动(自动配置 mcporter)
32
+ chaimi-keep-mcp
33
+ ```
34
+
35
+ ### 方式二:手动下载安装(开发者)
36
+
37
+ 1. 从 GitHub Releases 下载安装包
38
+ 2. 解压后进入目录
39
+ 3. 安装依赖:`npm install`
40
+ 4. 运行:`node bin/cli.js`(会自动配置 mcporter)
41
+
42
+ ## 首次使用
43
+
44
+ ### 1. 触发授权
45
+
46
+ 在 WorkBuddy/OpenClaw 中输入:
47
+
48
+ ```
49
+ 帮我记一笔午餐35元
50
+ ```
51
+
52
+ ### 2. 获取验证码
53
+
54
+ MCP Server 会显示:
55
+
56
+ ```
57
+ ╔════════════════════════════════════════════════════════╗
58
+ ║ 柴米AI记账 MCP Server - 首次使用需要授权 ║
59
+ ╠════════════════════════════════════════════════════════╣
60
+ ║ ║
61
+ ║ 验证码:ABCD-EFGH ║
62
+ ║ ║
63
+ ║ 请在"柴米AI记账"小程序中完成授权: ║
64
+ ║ ║
65
+ ║ 1. 打开"柴米AI记账"小程序 ║
66
+ ║ 2. 点击"我的" → "🤖 Agent 授权" ║
67
+ ║ 3. 输入验证码:ABCD-EFGH ║
68
+ ║ ║
69
+ ╚════════════════════════════════════════════════════════╝
70
+ ```
71
+
72
+ ### 3. 小程序授权
73
+
74
+ 打开"柴米AI记账"小程序 → 点击"我的" → "🤖 Agent 授权" → 输入上述验证码
75
+
76
+ ### 4. 完成
77
+
78
+ 授权成功后,AI 会自动完成记账。
79
+
80
+ ## 环境变量(可选)
81
+
82
+ 如需自定义云函数地址,可设置以下环境变量:
83
+
84
+ ```bash
85
+ export MCP_OAUTH_URL="你的授权服务地址"
86
+ export MCP_HUB_URL="你的Hub服务地址"
87
+ export MCP_PROMPT_URL="你的Prompt服务地址"
88
+ ```
89
+
90
+ > 默认使用柴米AI记账官方云服务,一般无需修改。
91
+
92
+ ## 常见问题
93
+
94
+ **Q: 提示 "command not found: chaimi-keep-mcp"**
95
+
96
+ A: npm 全局安装后需要重启终端,或检查 npm 全局路径是否加入环境变量。
97
+
98
+ **Q: 验证码无效**
99
+
100
+ A: 验证码 30 分钟内有效,过期需要重新获取。
101
+
102
+ **Q: 需要每次都授权吗**
103
+
104
+ A: 不需要。Token 会自动刷新,除非超过 30 天未使用。
105
+
106
+ **Q: 如何更新到最新版本**
107
+
108
+ A: `npm update -g chaimi-keep-mcp`
109
+
110
+ ## 技术支持
111
+
112
+ - 微信:solinxia
113
+ - 邮箱:songyangx@gmail.com
114
+ - npm 包地址:https://www.npmjs.com/package/chaimi-keep-mcp
115
+
116
+ ## 功能说明
117
+
118
+ ### 支持的记账类型
119
+
120
+ | 工具 | 用途 | 示例 |
121
+ |------|------|------|
122
+ | `save_expense` | 单商品支出 | "午餐 35 元" |
123
+ | `save_receipt` | 小票/多商品 | "超市购物:牛奶 10 元,面包 15 元" |
124
+ | `save_income` | **收入记录** | "工资到账 8000 元" |
125
+ | `get_expenses` | 查询记录 | "查看本月消费" |
126
+ | `get_statistics` | 消费统计 | "本月花了多少" |
127
+
128
+ ### 收入记账示例
129
+
130
+ 在 WorkBuddy/OpenClaw 中输入:
131
+
132
+ ```
133
+ 记录工资收入 8000 元
134
+ ```
135
+
136
+ 或:
137
+
138
+ ```
139
+ 今天收到奖金 3000
140
+ ```
141
+
142
+ AI 会自动调用 `save_income` 工具记录收入。
143
+
144
+ ## 更新日志
145
+
146
+ ### v3.1.23 (2026-04-13)
147
+ - **安全** 新增请求签名验证,防止 Agent 直接 curl 访问云函数
148
+ - **安全** Token 加密存储(AES-256-CBC),绑定机器标识
149
+ - **安全** URL 加密存储,防止明文暴露
150
+ - **新增** SKILL.md 定义安全约束和触发规则
151
+ - **优化** 授权提示文案,增加 AUTH_JUST_COMPLETED 标记
152
+
153
+ ### v3.1.22 (2026-04-12)
154
+ - **修复** fillDefaults 金额计算逻辑(根据 price × quantity 计算 amount)
155
+ - **修复** 解决辣可可小票价格显示为0元的问题
156
+
157
+ ### v3.1.21 (2026-04-12)
158
+ - **修复** 版本号同步更新
159
+
160
+ ### v3.1.20 (2026-04-12)
161
+ - **修复** 返回已过期验证码的问题(在 getToken 中添加过期检查)
162
+
163
+ ### v3.1.19 (2026-04-12)
164
+ - **恢复** `submit_feedback` 反馈功能(从 npm 3.1.0 恢复丢失代码)
165
+ - **新增** 反馈参数校验(content 非空、长度限制、type 枚举校验)
166
+ - **优化** 客服消息内容截断长度改为 150 字符
167
+ - **新增** Agent 字符限制提示(反馈内容不要超过150字符)
168
+
169
+ ### v3.1.2 (2026-04-11)
170
+ - **修复** 启动界面版本号显示问题
171
+ - **修复** 首次安装验证码显示问题
172
+ - **优化** 内部测试流程
173
+
174
+ ### v3.1.0 (2026-04-11)
175
+ - **移除** Python 版本 (`server.py`),统一使用 Node.js 版本
176
+ - **安全** 删除包含敏感 token 的 `config.yaml`,新增 `config.example.yaml` 模板
177
+ - **安全** 更新 `.gitignore` 和 `.npmignore`,排除敏感文件
178
+ - **优化** 项目结构,清理不必要的文件
179
+
180
+ ### v3.0.3 (2026-04-10)
181
+ - **新增** `get_parse_prompt` 工具,首次实现将云函数 Prompt 模板完整返回给 Agent
182
+ - **优化** `mcpHub`:新增 `receiptNo` 自动生成逻辑(强制生成唯一 ID)
183
+ - **优化** `mcpHub`:优化 `actualAmount` 计算 fallback 逻辑
184
+ - **优化** `mcpPrompt`:升级 Prompt 版本到 2.0.2,强化支付金额字段提取
185
+ - **优化** `mcpPrompt`:优化 `date` 字段描述,要求 ISO 8601 完整时间格式
186
+
187
+ ### v3.0.0 (2026-04-09)
188
+ - **新增** `submit_feedback` 工具,支持用户提交反馈
189
+ - **新增** 反馈双通道:数据库保存 + 小程序客服消息推送
190
+ - **优化** 小票记账功能,完善字段提取逻辑
191
+
192
+ ### v2.3.4 (2026-04-08)
193
+ - **简化** `save_expense` 工具,只保留 `name` 和 `amount` 为必填参数
194
+ - **优化** 其他参数使用默认值,简化 Agent 调用
195
+
196
+ ### v2.3.3 (2026-04-08)
197
+ - **修正** 版本号统一为 v2.3.3(包含 v2.3.2 的所有修复)
198
+
199
+ ### v2.3.2 (2026-04-08)
200
+ - **修复** `server.js` 中 `CURRENT_VERSION` 未定义错误,统一使用 `MCP_VERSION`
201
+ - **修复** 所有工具的 `userMessage` 添加默认值,防止显示 `undefined`
202
+
203
+ ### v2.3.1 (2026-04-08)
204
+ - **修复** `bin/cli.js` 版本号显示问题,改为动态读取 package.json
205
+ - **优化** OAuth 授权流程,轮询间隔缩短为 2 秒
206
+
207
+ ### v2.3.0 (2026-04-08)
208
+ - **修复** `save_receipt` 的 `items` 参数解析 bug,支持 JSON 字符串自动转换
209
+ - **优化** `source` 字段规范:`save_expense`→`mcp_txt_expense`、`save_income`→`mcp_txt_income`、`save_receipt`→`mcp_receipt`
210
+ - **新增** `mcp_version` 字段追踪,便于版本监控
211
+ - **注释** `quick_book` 工具(暂时下线,待优化后重新开放)
212
+
213
+ ### v2.2.0 (2026-04-05)
214
+ - **新增收入记账功能** (`save_income`)
215
+ - 支持工资、奖金、红包、投资收益等收入类型
216
+ - 支出和收入统一存储,便于统计分析
217
+
218
+ ### v2.1.0 (2026-04-03)
219
+ - 升级 OAuth 2.0 Device Flow 认证
220
+ - 支持 npm 全局安装
221
+ - 支持多种 AI 工具(OpenClaw、WorkBuddy),理论支持 Claude
222
+ - 自动 Token 刷新
package/bin/cli.js ADDED
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * 柴米记账 MCP Server CLI 入口
5
+ * 智能创建/更新多个 Agent 配置,保护用户已有配置
6
+ */
7
+
8
+ const path = require('path');
9
+ const fs = require('fs');
10
+ const os = require('os');
11
+ const { spawn } = require('child_process');
12
+
13
+ // 读取 package.json 获取版本号
14
+ const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
15
+ const CURRENT_VERSION = packageJson.version;
16
+
17
+ // 获取 server.js 的绝对路径
18
+ const serverPath = path.join(__dirname, '..', 'server.js');
19
+
20
+ // 默认的柴米记账配置
21
+ const DEFAULT_CHAIMI_CONFIG = {
22
+ command: 'chaimi-keep-mcp',
23
+ description: '柴米记账 MCP Server - 支持 AI 工具直接记账',
24
+ env: {
25
+ MCP_OAUTH_URL: 'https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpOAuth',
26
+ MCP_HUB_URL: 'https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpHub-mcp',
27
+ MCP_PROMPT_URL: 'https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpPrompt'
28
+ },
29
+ // 首次授权时需要常驻运行,等待用户授权(3分钟轮询)
30
+ // 授权成功后进程自动退出,下次调用时 mcporter 会重新启动
31
+ lifecycle: 'keep-alive'
32
+ };
33
+
34
+ // 支持的 Agent 列表
35
+ const SUPPORTED_AGENTS = [
36
+ {
37
+ name: 'MCPorter (WorkBuddy/OpenClaw)',
38
+ configPath: path.join(os.homedir(), '.mcporter', 'mcporter.json'),
39
+ format: 'json'
40
+ },
41
+ {
42
+ name: 'WorkBuddy (Windows)',
43
+ configPath: path.join(os.homedir(), 'workbuddy', 'mcp.json'),
44
+ format: 'json',
45
+ platform: 'win32'
46
+ },
47
+ {
48
+ name: 'Claude Desktop',
49
+ configPath: path.join(os.homedir(), 'Library/Application Support/Claude/claude_desktop_config.json'),
50
+ format: 'json',
51
+ platform: 'darwin'
52
+ },
53
+ {
54
+ name: 'Claude Desktop (Windows)',
55
+ configPath: path.join(process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json'),
56
+ format: 'json',
57
+ platform: 'win32'
58
+ },
59
+ {
60
+ name: 'Cursor',
61
+ configPath: path.join(os.homedir(), '.cursor', 'mcp.json'),
62
+ format: 'json'
63
+ },
64
+ {
65
+ name: 'Cursor (Windows)',
66
+ configPath: path.join(os.homedir(), '.cursor', 'mcp.json'),
67
+ format: 'json',
68
+ platform: 'win32'
69
+ },
70
+ {
71
+ name: 'Windsurf',
72
+ configPath: path.join(os.homedir(), '.codeium', 'windsurf', 'mcp_config.json'),
73
+ format: 'json'
74
+ }
75
+ ];
76
+
77
+ /**
78
+ * 安全读取 JSON 文件
79
+ */
80
+ function readJSON(filePath) {
81
+ if (!fs.existsSync(filePath)) return null;
82
+ try {
83
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
84
+ } catch (e) {
85
+ return null;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * 安全写入 JSON 文件
91
+ */
92
+ function writeJSON(filePath, data) {
93
+ const dir = path.dirname(filePath);
94
+ if (!fs.existsSync(dir)) {
95
+ fs.mkdirSync(dir, { recursive: true });
96
+ }
97
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf8');
98
+ }
99
+
100
+ /**
101
+ * 为单个 Agent 安装配置
102
+ * 原则:只添加缺失的配置,绝不覆盖用户已有配置
103
+ */
104
+ function installToAgent(agent) {
105
+ try {
106
+ // 平台检查
107
+ if (agent.platform && agent.platform !== os.platform()) {
108
+ return { success: false, reason: 'platform-not-supported' };
109
+ }
110
+
111
+ // 检查 Agent 是否已安装(配置文件目录是否存在)
112
+ const configDir = path.dirname(agent.configPath);
113
+ const isAgentInstalled = fs.existsSync(configDir);
114
+
115
+ // 读取现有配置
116
+ let config = readJSON(agent.configPath);
117
+ let isNewFile = false;
118
+
119
+ if (!config) {
120
+ config = { mcpServers: {} };
121
+ isNewFile = true;
122
+ }
123
+
124
+ if (!config.mcpServers) {
125
+ config.mcpServers = {};
126
+ }
127
+
128
+ // 检查是否已存在柴米记账配置
129
+ if (config.mcpServers['柴米记账']) {
130
+ return {
131
+ success: true,
132
+ action: 'skipped',
133
+ reason: 'already-configured',
134
+ agentInstalled: isAgentInstalled
135
+ };
136
+ }
137
+
138
+ // 添加柴米记账配置
139
+ config.mcpServers['柴米记账'] = JSON.parse(JSON.stringify(DEFAULT_CHAIMI_CONFIG));
140
+
141
+ // 写入配置
142
+ writeJSON(agent.configPath, config);
143
+
144
+ return {
145
+ success: true,
146
+ action: isNewFile ? 'created' : 'updated',
147
+ agentInstalled: isAgentInstalled
148
+ };
149
+
150
+ } catch (error) {
151
+ return {
152
+ success: false,
153
+ reason: 'error',
154
+ error: error.message
155
+ };
156
+ }
157
+ }
158
+
159
+ /**
160
+ * 配置所有支持的 Agent
161
+ * 注意:所有输出使用 console.error,避免污染 stdout(MCP 协议通信使用 stdout)
162
+ */
163
+ function configureAllAgents() {
164
+ console.error('🔧 正在检测并配置 AI Agent...\n');
165
+
166
+ const results = [];
167
+
168
+ for (const agent of SUPPORTED_AGENTS) {
169
+ const result = installToAgent(agent);
170
+ results.push({ agent: agent.name, ...result });
171
+
172
+ // 显示结果(使用 stderr)
173
+ if (result.success) {
174
+ if (result.action === 'skipped') {
175
+ console.error(`✓ ${agent.name}: 配置已存在,已保留`);
176
+ } else if (result.action === 'created') {
177
+ console.error(`✓ ${agent.name}: 已创建配置`);
178
+ } else {
179
+ console.error(`✓ ${agent.name}: 已添加配置`);
180
+ }
181
+ } else {
182
+ if (result.reason === 'platform-not-supported') {
183
+ // 静默跳过不支持的平台的 Agent
184
+ } else {
185
+ console.error(`✗ ${agent.name}: 配置失败 (${result.error})`);
186
+ }
187
+ }
188
+ }
189
+
190
+ // 统计
191
+ const configured = results.filter(r => r.success && r.action !== 'skipped').length;
192
+ const skipped = results.filter(r => r.success && r.action === 'skipped').length;
193
+ const failed = results.filter(r => !r.success).length;
194
+
195
+ console.error('\n📊 配置统计:');
196
+ console.error(` 新增配置: ${configured} 个`);
197
+ console.error(` 已存在: ${skipped} 个`);
198
+ if (failed > 0) {
199
+ console.error(` 失败: ${failed} 个`);
200
+ }
201
+ console.error('');
202
+
203
+ return results;
204
+ }
205
+
206
+ /**
207
+ * 显示欢迎信息
208
+ * 注意:使用 console.error,避免污染 stdout(MCP 协议通信使用 stdout)
209
+ */
210
+ function showWelcome() {
211
+ console.error('╔════════════════════════════════════════════════════════╗');
212
+ console.error('║ ║');
213
+ console.error(`║ 柴米记账 MCP Server v${CURRENT_VERSION} ║`);
214
+ console.error('║ ║');
215
+ console.error('║ 支持: OpenClaw | WorkBuddy | Claude | Cursor ║');
216
+ console.error('║ ║');
217
+ console.error('╚════════════════════════════════════════════════════════╝');
218
+ console.error('');
219
+ }
220
+
221
+ // 主程序
222
+ showWelcome();
223
+ configureAllAgents();
224
+
225
+ // 启动 server.js - 使用当前 Node.js 可执行文件路径,解决跨平台兼容性问题
226
+ const child = spawn(process.execPath, [serverPath], {
227
+ stdio: 'inherit',
228
+ env: process.env
229
+ });
230
+
231
+ child.on('exit', (code) => {
232
+ process.exit(code);
233
+ });
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * 获取授权验证码(非阻塞模式)
5
+ * 用于 Agent 自动获取验证码,提示用户去小程序授权
6
+ */
7
+
8
+ const path = require('path');
9
+ const os = require('os');
10
+ const fs = require('fs');
11
+
12
+ // 读取 package.json 获取版本号
13
+ const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
14
+ const CURRENT_VERSION = packageJson.version;
15
+
16
+ // 导入 OAuth 模块
17
+ const { OAuthManager, FileTokenStorage } = require('../oauth.js');
18
+
19
+ const MCP_OAUTH_URL = process.env.MCP_OAUTH_URL || 'https://cloud1-2gfe5jhjef06b85d-1412172089.ap-shanghai.app.tcloudbase.com/mcpOAuth';
20
+
21
+ // 检查是否已有有效 Token
22
+ async function checkExistingToken() {
23
+ const tokenStorage = new FileTokenStorage(
24
+ path.join(os.homedir(), '.mcporter', 'oauth-token.json')
25
+ );
26
+
27
+ try {
28
+ const existingToken = await tokenStorage.load();
29
+ if (existingToken && existingToken.expiresAt > Date.now()) {
30
+ return true;
31
+ }
32
+ } catch (e) {
33
+ // 无 Token 或已过期
34
+ }
35
+ return false;
36
+ }
37
+
38
+ // 获取新的授权码
39
+ async function getAuthCode() {
40
+ const tokenStorage = new FileTokenStorage(
41
+ path.join(os.homedir(), '.mcporter', 'oauth-token.json')
42
+ );
43
+
44
+ const oauthManager = new OAuthManager({
45
+ mcpOAuthUrl: MCP_OAUTH_URL,
46
+ tokenStorage: tokenStorage,
47
+ onQrCode: (qrData) => {
48
+ // 输出 JSON 格式,方便 Agent 解析
49
+ console.log(JSON.stringify({
50
+ success: true,
51
+ type: 'auth_required',
52
+ userCode: qrData.userCode,
53
+ verificationUri: qrData.verificationUri,
54
+ message: `请在"柴米AI记账"小程序中完成授权`,
55
+ steps: [
56
+ '打开"柴米AI记账"小程序',
57
+ '点击"我的" → "🤖 Agent 授权"',
58
+ `输入验证码:${qrData.userCode}`
59
+ ]
60
+ }));
61
+ },
62
+ onTokenReady: (token) => {
63
+ console.log(JSON.stringify({
64
+ success: true,
65
+ type: 'auth_success',
66
+ message: '授权成功!现在可以正常使用记账功能了。'
67
+ }));
68
+ }
69
+ });
70
+
71
+ try {
72
+ // 检查是否已有进行中的授权
73
+ const authState = await oauthManager.loadAuthState();
74
+ if (authState && !oauthManager.isAuthStateExpired(authState)) {
75
+ console.log(JSON.stringify({
76
+ success: true,
77
+ type: 'auth_pending',
78
+ userCode: authState.userCode,
79
+ message: `授权进行中,请使用验证码 ${authState.userCode} 完成授权`,
80
+ steps: [
81
+ '打开"柴米AI记账"小程序',
82
+ '点击"我的" → "🤖 Agent 授权"',
83
+ `输入验证码:${authState.userCode}`
84
+ ]
85
+ }));
86
+ return;
87
+ }
88
+
89
+ // 启动新的授权流程
90
+ await oauthManager.startAuthFlow();
91
+ } catch (err) {
92
+ console.log(JSON.stringify({
@@ -0,0 +1,15 @@
1
+ # 柴米记账 MCP Server 配置文件示例
2
+ # 复制此文件为 config.yaml 并填入您的实际配置
3
+
4
+ chaihuo:
5
+ # JWT Token(从小程序调用 mcpAuth 云函数获取)
6
+ # 示例:token: "eyJhbGciOiJIUzI1NiIs..."
7
+ token: ""
8
+
9
+ # SCF函数URL(部署后获取)
10
+ # 示例:base_url: "https://mcpServer-xxx.gz.apigw.tencentcs.com"
11
+ base_url: ""
12
+
13
+ # 其他配置
14
+ port: 3000
15
+ environment: "production"