花花日记助手(HuahuaDaily)
0. Compatibility
This SKILL.md intentionally uses the smallest common Agent Skills format: YAML frontmatter with only name and description, followed by Markdown instructions. Platform-specific setup for Codex, Codex CLI, Claude Code, Claude Desktop, OpenClaw, Hermes Agent, and other MCP clients belongs in README/configuration, not in this file.
1. 核心边界
花花日记 MCP 让 Agent 读取用户授权的云端同步数据、基金行情、交易流水和系统公告,识别截图,并向 App 发送待确认请求。
Agent 不直接写入交易、不直接导入持仓、不覆盖云同步。所有买入、卖出、持仓导入、自选导入、交易记录导入,都必须由用户在 App 确认页最终确认。
2. 会话启动
首次使用或不确定能力时,调用:
get_tool_manifest()
用途:
- 确认可用工具、认证方式、安全边界。
- 不访问用户数据,不消耗行情请求。
Token 缺失、无效或过期时,提示用户在 App「小窝 / 设置 → Agent 访问令牌」重新生成,并配置环境变量 HUAHUA_AGENT_TOKEN。
3. 查询持仓和云同步
3.1 用户问“今天收益/总资产/累计收益”
首选:
get_summary()
返回重点:
totalMarketValue:总市值。todayProfit:今日收益。totalHoldingProfit:持有收益。cumulativeProfit:累计收益。totalReturnRate:累计收益率。dataUpdatedAt:云同步时间。
回答时必须说明 dataUpdatedAt。如果时间明显旧,提醒用户在 App 执行「立即同步」。
不要为了资产概况先调用 get_raw_sync_data()。
3.2 用户问“完整持仓/自选/分组”
首选:
get_records({"include_transactions": false})
返回重点:
holdings:有持仓的基金。watchlist:自选或清仓观察项。groups:分组。summary:汇总。dataUpdatedAt:云同步时间。
如果用户要求交易流水、成本来源、审计收益,再调用:
get_transactions({"code": "", "include_pending": true})
或:
get_records({"include_transactions": true})
3.3 用户问“云端是不是最新/同步是否完整”
先调用:
get_sync_meta()
返回重点:
updated_at:云端更新时间。etag:云端快照指纹。size_bytes:快照大小。
需要完整检查时调用:
get_raw_sync_data({"include_json_text": false})
检查重点:
data.funds是否存在且非空。data.groups、data.watchlistGroups是否存在。data.globalTags是否存在。meta.contains_ledger通常为 false,这是正常的。
只有用户明确要求导出原始 JSON 文本时,才设置 include_json_text=true。默认不要返回大段 JSON。
3.4 用户问“标签/分组”
分组:
get_groups()
标签:
get_tags()
使用规则:
get_groups()用于解释持仓账户分组、自选分组。get_tags()用于解释全局标签和每只基金绑定标签。
4. 查询基金和市场
4.1 用户提供 6 位基金代码
查询实时估算:
get_item_estimate({"codes": ["110022"]})
用途:
- “现在涨多少”
- “今天估算净值”
- “这只今天收益如何”
注意:
codes最多 50 个。- 可批量传入,避免逐个调用。
- 结果同一 session 内缓存 60 秒。
4.2 用户只提供基金名称
先搜索:
search_item({"query": "易方达消费"})
处理规则:
- 搜索结果只有一个高可信候选时,可继续查询。
- 多个候选或名称相近时,先让用户确认代码。
- 不要凭名字猜代码后直接发交易请求。
4.3 用户要深度分析单只基金
按需调用:
get_item_detail({"code": "110022"})
get_item_history({"code": "110022"})
get_fund_fees({"code": "110022"})
get_item_dividends({"code": "110022"})
get_fund_period_rank({"code": "110022"})
get_fund_timeline({"code": "110022"})
选择规则:
- 当前估算/涨跌:
get_item_estimate。 - 历史走势:
get_item_history。 - 申购赎回费、确认天数:
get_fund_fees。 - 分红派息:
get_item_dividends。 - 近 1/3/6 月、1 年排名:
get_fund_period_rank(单只)或get_batch_fund_period_ranks(批量,最多 50 只)。 - 今日盘中估值曲线:
get_fund_timeline。 - 综合详情、胜率表、持仓等深度信息:
get_item_detail。此工具较重,不要作为日常行情首选。 - QDII 夜盘实时估值:
get_night_estimate(需会员,美股交易时段有效);用户在 App 添加的夜盘自选基金列表用get_night_watchlist,通常先调这个再传给get_night_estimate。
4.4 用户问市场整体
概览:
get_overview()
主要指数:
get_indices()
今日涨跌榜:
get_daily_rank()
是否交易日:
get_status()
4.5 用户问“跑赢大盘/对比沪深300”
默认沪深300:
get_benchmark_history({"code": "sh000300"})
常用代码:
sh000300:沪深300。sh000001:上证指数。sz399001:深证成指。- 数字 ETF 代码也可传入,如
510300。
需要基金自身走势时,再调用 get_item_history(code)。
4.6 用户问 QDII 基金夜盘
QDII 基金投资美股/港股,北京时间夜间才是它们的交易时段。夜盘估值在美股交易时段(21:30–次日04:00 夏令时)提供实时持仓穿透。
推荐流程(无需用户报代码):先用 get_night_watchlist() 读用户在 App 添加的夜盘自选列表,再用其结果调 get_night_estimate():
get_night_watchlist()
// 返回 {"codes": ["016665", "018147", ...], "count": N, "has_customized": true, "dataUpdatedAt": "..."}
若 has_customized=false(用户未自定义过),codes 为空,应提示用户先去 App 夜盘页面添加自选基金,或允许用户手动指定一组代码。
get_night_estimate({"codes": ["016665", "018147"]})
返回每只基金的:
estimatedChangePercent:盘后复合涨跌幅(股价×汇率)。estimatedNav:估算净值。breakdown:穿透到个股的持仓明细、股价涨跌、汇率变动、贡献度。status:ready(数据就绪)/pending(等待开盘)/closed(休市)。
注意:
- 需要 VIP 或 PRO 会员。
- 非美股交易时段返回休市状态,不是错误。
- 不要在 A 股交易时段频繁调用。
- 夜盘自选列表需要 App 至少做过一次云同步才能被 MCP 读到;旧版本 App(未升级到含夜盘同步的版本)的备份里没有 nightWatchCodes 字段,此时
has_customized会是false。
4.7 用户问交易日/T+N
下一个交易日:
get_next_trading_day({"date": "2026-05-13"})
基金确认日期:
calculate_trading_dates({
"date": "2026-05-13",
"time_mode": "PRE_MARKET",
"confirm_days": 2
})
参数:
time_mode:PRE_MARKET表示收盘前,POST_MARKET表示收盘后。confirm_days: T+1/T+2/T+3 等,未知时先用get_fund_fees(code)获取confirm_days。
5. 交易请求
5.1 用户想买入/卖出
先确认:
- 基金代码。
- 基金名称。
- 买入或卖出。
- 金额。
- 日期,可留空让 App 使用今日。
- 分组名,如果用户指定了账户/分组。
发送请求:
request_transaction({
"item_code": "110022",
"item_name": "易方达消费行业股票",
"record_type": "BUY",
"amount": 1000,
"date": "2026-05-13",
"note": "Agent 发起",
"group_name": "我的账户"
})
规则:
record_type只能是BUY或SELL。- 如果基金代码来自搜索推断,必须先让用户确认。
- 调用后必须告诉用户:“请求已发送,请打开花花日记 App 确认后才会生效。”
- 不要说“已买入”或“已卖出”。
5.2 查看或撤销待处理请求
查看:
get_agent_requests()
用户明确要求忽略/撤销时:
update_agent_request({
"request_id": "请求 id",
"status": "DISMISSED"
})
不要替 App 把请求标记为 PROCESSED,除非用户明确要求且你知道这只是状态处理,不代表真实交易执行。
6. 截图导入
6.1 持仓/自选截图识别
持仓截图(本地路径):
import_holding_screenshots({
"image_paths": ["/absolute/path/holding.png"],
"import_type": "HOLDINGS"
})
自选截图(务必传 import_type: "WATCHLIST"):
import_holding_screenshots({
"image_paths": ["/absolute/path/watchlist.png"],
"import_type": "WATCHLIST"
})
Base64:
import_holding_screenshots({
"images_base64": [
{"filename": "holding.png", "mime": "image/png", "base64": "..."}
],
"import_type": "HOLDINGS"
})
import_type 说明:
HOLDINGS(默认):持仓页面通常不显示基金代码,后端按名称四步匹配(可能出现模糊匹配)。WATCHLIST:自选页面明确显示 6 位代码,后端用专门 prompt 提取代码并精确匹配;AI 漏识别代码时回退名称匹配。自选场景务必传此值,否则会强制走名称模糊匹配。
返回重点:
items:识别条目。summary.total:总条数。summary.unmatched:未匹配数量。resolution_required:是否需要轻确认。resolution_reason:轻确认原因。
用途:
- 持仓截图导入(
import_type="HOLDINGS")。 - 自选截图导入(
import_type="WATCHLIST")。
识别后不要直接声称导入完成。
6.2 交易记录截图识别
本地路径:
import_transaction_screenshots({
"image_paths": ["/absolute/path/transactions.png"]
})
Base64:
import_transaction_screenshots({
"images_base64": [
{"filename": "transactions.png", "mime": "image/png", "base64": "..."}
]
})
返回重点:
type:BUY或SELL。fund_name:截图识别名称。fund_code:匹配代码。fund_real_name:标准基金名。matched:是否匹配。date、time_mode、amount、shares。skip/skip_reason:应跳过的条目。resolution_required/resolution_reason。
6.3 Agent 轻确认规则
只在对话里确认“识别歧义”,不要让用户在对话里完成大型表格审核。
需要轻确认的情况:
resolution_required=true。match_status=unmatched。matched=false。- 多个候选基金。
- 日期缺失或明显不合法。
- 买入缺
amount。 - 卖出缺
shares。
轻确认完成后,修改 items 中对应字段,再发送到 App。
6.4 发送到 App 确认页
持仓导入:
request_import_review({
"import_type": "HOLDINGS",
"items": [...],
"source_note": "Agent 识别持仓截图"
})
自选导入:
request_import_review({
"import_type": "WATCHLIST",
"items": [...],
"source_note": "Agent 识别自选截图"
})
交易记录导入:
request_import_review({
"import_type": "TRANSACTIONS",
"items": [...],
"source_note": "Agent 识别交易记录截图"
})
限制:
import_type只能是HOLDINGS、WATCHLIST、TRANSACTIONS。items最多 300 条。- 请求体最多 1MB。
调用后必须告诉用户:
- “已发送到 App,请打开花花日记批量确认。”
- “导入尚未完成,只有 App 确认后才会写入。”
7. 社区与公告
查看某基金弹幕:
get_danmaku({"code": "110022"})
发送弹幕:
send_danmaku({
"fund_code": "110022",
"text": "今天波动有点大"
})
规则:
- 只有用户明确要求发言时才调用
send_danmaku。 text最多 30 字。- 弹幕颜色由 App 根据基金涨跌情况自动设置,无需手动指定。
系统公告:
get_notices({"since": 0})
since 是 Unix 秒时间戳;默认 0 表示拉取最近公告。
8. 常见降级
401:Token 无效或过期,要求用户重新生成。403:权限不足或会员状态不满足,要求用户检查 PRO 状态。- 云端无数据:要求用户打开 App 执行「立即同步」。
- 行情估算为空:可能是非交易日、盘前或数据源暂不可用,不要当作错误。
- 截图识别为空:提示用户换清晰截图,或分批上传。
- 导入请求发送成功后:不要继续追问大表格细节,等待用户在 App 确认。