yimu-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YIMU_EMAIL | No | 账号邮箱(可选:未配 TOKEN 时启动自动登录;login_email 不传参时用这对凭据) | |
| YIMU_TOKEN | No | 登录令牌 JWT(登录后获得,优先级最高) | |
| YIMU_QR_DIR | No | 二维码保存目录,默认系统临时目录 | |
| YIMU_USER_ID | No | 用户 ID(部分接口需要,登录后自动获取) | |
| YIMU_BASE_URL | No | 服务地址,默认 https://yimubill.com/api | https://yimubill.com/api |
| YIMU_PASSWORD | No | 账号密码(可选:未配 TOKEN 时启动自动登录;login_email 不传参时用这对凭据) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_statusA | 查看登录状态(本地配置,不发请求):是否持有 JWT、用户 ID、API 基址。 |
| login_qr_startA | 创建扫码登录会话(免鉴权)。返回 session_id、qr_payload(login:)与二维码图片:
|
| login_qr_pollA | 等待/轮询扫码登录结果(免鉴权)。timeout 秒内每 3 秒查询一次,用户扫码后返回 status=success 与用户对象(JWT 已自动保存);timeout=0 只查一次。默认 120 秒。 |
| login_qr_recognizeA | 从 PNG 图片识别二维码内容(免鉴权,测试/自动登录链路校验用):传入图片路径,返回二维码文本与 session_id。可用于验证 login_qr_start 生成的二维码文件内容是否为 login:。 |
| login_emailA | 邮箱密码登录(免鉴权)。密码按网页端加密方案(AES-128-ECB)加密后提交;返回用户对象与 JWT。不传 email/password 时使用环境变量 YIMU_EMAIL/YIMU_PASSWORD(未配置则报错)。请优先使用扫码登录(更安全)。 |
| get_meA | 查询当前用户信息(POST /user/getUserInfoById);响应顶层 token 会自动刷新 JWT。 |
| sync_pullA | 增量拉取全部业务数据(GET /updateTime/getUpdateDataPage/{userId}/{time})。返回 {syncTime, Bill:[...], Asset:[...], ParentCategory:[...], ...} 等实体列表;time 为上次同步时间戳(ms),缺省 0 表示全量(数据量大,注意输出上限)。新同步建议先调 get_book_last_time / get_me 取游标。 |
| get_delete_historyB | 查询删除记录(GET /deleteHistory/getDeleteHistory/{userId}/{time}),time 缺省 0 全量。 |
| get_bill_countC | 查询账单总数(GET /bill/getBillCount/{userId})。 |
| get_book_billsA | 分页查询账本账单(GET /bill/getAccountBillPage/{userId}/{bookId}/{page})。返回 {Bill:[...], syncTime, hasMoreData};page 从 0 起,按 hasMoreData 翻页。 |
| get_book_last_timeA | 查询账本最后同步时间戳(ms)(GET /bill/getAccountLastTime/{userId}/{bookId}),可作增量同步游标。 |
| get_share_accountsB | 查询共享账本列表(GET /accountBook/getShareAccount/{userId})。 |
| get_assetsA | 查询资产列表(GET /asset/getAsset/{userId}/{time}),time 为起始时间戳(ms),缺省 0 全量。 |
| get_account_membersC | 查询账本成员(GET /accountBook/getAccountMember/{userId}/{bookId})。 |
| get_account_delete_historyC | 查询账本删除历史(GET /accountBook/getAccountDeleteHistory/{userId}/{ownerId}/{bookId}/{lastSyncTime})。 |
| get_currencyB | 查询币种数据(GET /currency/getCurrencyData/{userId})。 |
| get_category_infoC | 查询分类信息(图标/预设分类,GET /icon/getCategoryInfo/{userId})。 |
| sync_startA | 开始同步限流会话(免鉴权,POST /bookkeeping/rateLimit/sync/start)。批量写操作前先 start,全部完成后务必 sync_end 归还会话,避免触发限流。返回 {syncCount, sessionId}。 |
| sync_endA | 结束同步限流会话(免鉴权,POST /bookkeeping/rateLimit/sync/end?sessionId=)。 |
| save_billA | 新增或更新账单(POST /bill/addOrUpdateBill,upsert:带 billId 为更新,缺省为新增)。自动归一化:tags 数组→JSON 字符串、recordTime 缺省取 updateTime/当前时间、billId 超 int32 自动重生成。bill 字段: billId 主键;cost 金额(元);time 记账时间(ms);billType 记录方式(1快捷/2手动/3导入/4周期/5自动/6模板);parentCategoryId/childCategoryId 分类(收支由分类决定);remark 备注;assetId 账户;bookId 账本;tags 标签(数组或 JSON 字符串均可);recordTime 记录时间;reimbursement/reimbursementEnd 报销;notIntoTotal/notIntoBudget 不计收支/预算;currencyInfo 币种;userId/updateTime 自动填充 |
| save_billsA | 批量新增/更新账单(POST /bill/addOrUpdateBillList)。自动按 100 条分批、每批 updateTime 递增(与网页端一致)。bill 字段同 save_bill。 |
| delete_billC | 删除账单(POST /bill/deleteBill,按 billId 删除)。 |
| save_assetA | 新增或更新资产(POST /asset/addOrUpdateAsset,upsert:带主键为更新)。entity 字段:assetId 主键;assetName 名称;assetType 类型;assetNumber 余额;totalQuota 总额度;intoTotalAsset 计入总资产;hide 隐藏;bookId 账本;currency 币种;remark/simpleName/cardCode/positionWeight 可选;userId/updateTime 自动填充 |
| delete_assetA | 删除资产(POST /asset/deleteAsset)。entity 需携带主键字段(assetId)与 userId。 |
| save_account_bookB | 新增或更新账本(POST /accountBook/addOrUpdateAccountBook,upsert:带主键为更新)。entity 字段:accountBookId 主键;bookName 账本名;bookType 账本类型;shareUsers 共享用户;字段按服务端契约传递 |
| delete_account_bookA | 删除账本(POST /accountBook/deleteAccountBook)。entity 需携带主键字段(accountBookId)与 userId。 |
| save_tagA | 新增或更新标签(POST /tag/addOrUpdateTag,upsert:带主键为更新)。entity 字段:tag 字段无快照数据;至少携带 tagId/tagName 与 userId,其余按服务端契约传递 |
| delete_tagB | 删除标签(POST /tag/deleteTag)。entity 需携带主键字段(tagId)与 userId。 |
| save_transferA | 新增或更新转账(POST /transfer/addOrUpdateTransfer,upsert:带主键为更新)。entity 字段:transferId 主键;cost 金额;serviceCharge 手续费;time 时间;fromAssetId/toAssetId 转出/转入账户;toCost 到账金额;billId 关联账单;remark 备注 |
| delete_transferB | 删除转账(POST /transfer/deleteTransfer)。entity 需携带主键字段(transferId)与 userId。 |
| save_lendA | 新增或更新借贷(POST /lend/addOrUpdateLend,upsert:带主键为更新)。entity 字段:lendId 主键;type 类型(借出/借入);number 金额;interest 利息;outTime/inTime 借出/归还时间;assetId 关联账户;repaymentAssetId 还款账户;remark 备注 |
| delete_lendA | 删除借贷(POST /lend/deleteLend)。entity 需携带主键字段(lendId)与 userId。 |
| save_parent_categoryB | 新增或更新一级分类(POST /parentCategory/addOrUpdateParentCategory,upsert:带主键为更新)。entity 字段:categoryId 主键;categoryName 名称;iconUrl 图标;positionWeight 排序;hide 隐藏;categoryType 类型 |
| delete_parent_categoryA | 删除一级分类(POST /parentCategory/deleteParentCategory)。entity 需携带主键字段(categoryId)与 userId。 |
| save_child_categoryA | 新增或更新二级分类(POST /childCategory/addOrUpdateChildCategory,upsert:带主键为更新)。entity 字段:categoryId 主键;categoryName 名称;iconUrl 图标;parentCategoryId 所属一级分类;positionWeight 排序;hide 隐藏;categoryType 类型 |
| delete_child_categoryA | 删除二级分类(POST /childCategory/deleteChildCategory)。entity 需携带主键字段(categoryId)与 userId。 |
| save_reimbursementA | 新增或更新报销(POST /reimbursement/addOrUpdateReimbursement,upsert:带主键为更新)。entity 字段:reimbursement 无快照数据;携带 billId/remark/金额字段与 userId,按服务端契约传递 |
| delete_reimbursementA | 删除报销(POST /reimbursement/deleteReimbursement)。entity 需携带主键字段(reimbursementId)与 userId。 |
| save_refundA | 新增或更新退款(POST /refund/addOrUpdateRefund,upsert:带主键为更新)。entity 字段:refundId 主键;billId 关联账单;refundNum 退款金额;refundInfos 退款明细(JSON) |
| delete_refundB | 删除退款(POST /refund/deleteRefund)。entity 需携带主键字段(refundId)与 userId。 |
| save_bill_fileA | 新增或更新账单附件(POST /billFile/addOrUpdateBillFile,upsert:带主键为更新)。entity 字段:fileId 主键;billId 关联账单;remotePath 远程路径;fileName 文件名;fileSize 大小;transferId/lendId 可选 |
| delete_bill_fileA | 删除账单附件(POST /billFile/deleteBillFile)。entity 需携带主键字段(fileId)与 userId。 |
| save_bill_importB | 新增或更新账单导入记录(POST /billImport/addOrUpdateBillImport,upsert:带主键为更新)。entity 字段:billImport 导入记录;无快照数据,按服务端契约传递 |
| save_asset_historyA | 新增或更新资产变动记录(POST /assetHistory/addOrUpdateAssetHistory,upsert:带主键为更新)。entity 字段:assetHistoryId 主键;assetId 账户;time 时间;currentNum 变动后余额;changeNum 变动额;changeContent 变动说明 |
| delete_asset_historyA | 删除资产变动记录(POST /assetHistory/deleteAssetHistory)。entity 需携带主键字段(assetHistoryId)与 userId。 |
| parse_bill_textA | 解析记账原始文本(GET /bill/analysisBillInfoT/{userId}/{text}),返回结构化账单信息。 |
| get_stsB | 获取对象存储临时凭证(GET /app/getSts/{userId},返回原始响应体)。 |
| get_sts_no_verifyA | 获取对象存储临时凭证(免鉴权变体,GET /app/getStsNoVerify/,返回原始响应体)。 |
| api_requestA | 通用 API 请求(逃生通道,覆盖全部接口)。path 支持 {userId}/{bookId}/{time} 等占位符由 params 填充;自动携带 token 头并解包 {code,msg,result} 信封。可用路径见 README 接口清单;例如:{method:POST, path:/bill/addOrUpdateBill, body:{...}}、{method:GET, path:/bill/getBillCount/{userId}, params:{userId:123}}。 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 49 tools
Most tools are clearly separated by resource-specific nouns such as bill, asset, tag, transfer, lend, category, and refund, so save_bill vs save_asset are unambiguous. The main confusions are the near-duplicate get_sts/get_sts_no_verify pair, auth_status vs get_me, and the generic api_request catch-all.
The set follows a consistent verb_noun snake_case pattern: get_*, save_*, delete_*, login_*, and sync_*. Exceptions like auth_status and api_request still read predictably and do not break the overall convention.
With 49 tools, the surface is heavy: every entity exposes save/delete pairs, plus sync, auth, STS, and a raw api_request fallback. Even though the bookkeeping domain is broad, this many tools exceeds the range where an agent can efficiently select among them without high cognitive overhead.
The set covers the full lifecycle of core bookkeeping entities, authentication, incremental sync, deletion history, batch operations, and a raw API escape hatch. Per-entity read gaps are covered by sync_pull, so workflows do not hit dead ends.