InvestBrain
InvestBrain — 投资第二大脑
有经验投资者的纪律自主工具,解决"知行合一"问题 不是投顾,不给建议,而是"镜子" + "纪律锚点"
5 分钟快速体验
两种使用方式:桌面客户端(推荐) 或 MCP Server。
方式 A:桌面客户端(Windows,推荐)
下载并安装
InvestBrain_0.1.2_x64_en-US.msi(见 Releases)打开桌面应用,即见「大脑已加载」状态条与试聊引导
想对话时在设置页填入自己的 LLM Key,即可走真实对话链路
桌面端数据存储在
%APPDATA%\InvestBrain\data,设置页可直接查看数据位置。
方式 B:MCP Server(任意 MCP 客户端)
# 1. 安装 MCP Server 依赖
cd src/mcp_server && pip install -r requirements.txt
# 2. 配置你自己的 LLM API Key(见下文「你的 Key,自己填」)
cp .env.example .env
# 编辑 .env,把 DEEPSEEK_API_KEY 填成你从 DEEPSEEK 后台拿到的 key
# 3. 启动 MCP Server
python server.py首次启动提示:向量库(Chroma + ONNX Embedding)首次会下载约 80MB 模型文件。若希望跳过向量库、纯工具调用体验,可保持
server.py中相关注释不变;如需完整 RAG 体验,下载后取消server.py内的注释行。
启动后 Server 会以 stdio 方式接受 MCP 客户端调用。配置 Claude Desktop 见下方 Claude Desktop 接入。
Related MCP server: Wealth Management MCP
你的 Key,自己填
重要:本仓库不预置任何用户的 API key。data/config/llm.json 中 api_key 默认为 null(不是真的 key 占位);.env.example 只是模板;webhook.json 是空 schema。
你需要从下面这些官方后台自己申请 / rotate:
服务 | 用途 | 后台地址 |
DeepSeek API | 主力 LLM(必需) | https://platform.deepseek.com → API Keys |
Tushare Pro | A 股财务/历史数据(可选) | |
DashScope | 阿里通义备选 LLM(可选) | |
Against Finance | 另类数据(可选) | |
飞书机器人 | 通知(可选) | https://open.feishu.cn → 机器人 → Webhook |
4 个 key 都写在哪里(都不会进 git)
MCP 启动必须:
DEEPSEEK_API_KEY环境变量(推荐 User 级系统环境变量,或 CLAUDE.md /.env)可选:
TUSHARE_TOKEN/DASHSCOPE_API_KEY/AGAINST_API_KEY(环境变量)飞书 webhook:
data/config/webhook.json里的feishu字段(已被.gitignore保护)
安全规则
你的 key 是你的——不要 share、不要 commit、不要发到任何对话里
key 进 git 历史(如被 commit 过的老版本)即使后来 rotate 仍可能被人滥用 → 发现泄露立即去对应平台 rotate
仓库已有
.gitignore保护data/config/*.json(含 llm/webhook 配置)+data/memory/*.db(用户记忆库,按 CLAUDE.md 决策"用户数据本地存储,不上传云端"),不要!取消忽略
备注:仓库历史曾 commit 过密钥占位(commit
22e6c72),如已 push 远端,老 key 在 clone 历史里仍可被读——清历史成本高、通常接受 + rotate 即可
快速开始:推送配置
从零到收到第一条微信推送,约 3 分钟。无需阅读任何文档。
方式一:一键脚本(推荐,Windows)
在仓库根目录打开 PowerShell,运行:
powershell -ExecutionPolicy Bypass -File scripts/configure_pushplus.ps1脚本会交互式引导你完成全部步骤:显示 PushPlus 获取 token 的操作步骤 → 粘贴 token(自动校验格式)→ 写入 data/config/webhook.json 并启用 pushplus 渠道 → 自动调用 send_notification 发送测试消息 → 打印成功/失败原因。
方式二:对话内配置(MCP 客户端内)
直接在任意 MCP 客户端中让 AI 帮你配置:
1. 查看当前配置状态:notify_get_notifier_config()
2. 配置 PushPlus 并发送测试:notify_configure_notifier(channel="pushplus", token="你的token", enabled=true, send_test=true)PushPlus token 获取步骤
微信扫码关注公众号:https://www.pushplus.plus
进入「个人中心」→ 复制页面上的 token
填入上述任一方式
验证成功:收到测试消息,或 notify_get_notifier_config() 返回 "enabled_channels": ["pushplus"]。未配置渠道时,提醒触发路径(price_checker / scheduler)返回中会携带 setup_guide 引导信息,而不会静默失败。
安全说明:
data/config/webhook.json已被.gitignore保护,token 不会进入 git;请勿把 token 发到任何对话或提交到仓库。
它解决什么问题
核心问题:投资者被叙事带着走,操作没纪律,事后后悔。
常见痛点 | InvestBrain 的应对 |
看到某只股票大涨就追高 | 强制记录买入理由 + 关联历史相似决策 |
跌了恐慌割肉 | 触发 RAG 检索大师对"恐慌"的看法 |
同一类错误反复犯 | 行为模式挖掘自动识别"追涨杀跌"模式 |
重要时间/价格点位忘记 | 价格/时间/条件监控 + 飞书推送 |
想不起自己过去的判断 | 记忆系统 + 决策卡片回溯 |
核心能力
功能 | 说明 |
想法记录 | 用户说一句话,AI 解析 + 关联历史 + 生成卡片 |
投资 RAG | 大师思想检索问答(16 位投资大师 × 5 个核心概念) |
记忆系统 | 用户画像、历史决策、行为模式挖掘 |
提醒触发 | 价格/时间/条件监控,支持飞书/钉钉/Bark 多通道推送 |
行为模式挖掘 | 自动发现投资者的偏差模式 |
示例对话
下面是三个核心价值场景的真实对话流(任意 MCP 客户端均可使用):
场景 1:RAG 问答 — 大师思想碰撞
用户:段永平怎么看"快钱"和"慢钱"?
调用:
rag_ask_investment(question="段永平怎么看快钱和慢钱")AI 返回: 段永平的核心观点是"快钱"看似机会多但风险敞口大,"慢钱"依靠复利与确定性。 在「段永平」语料中相关论述 12 条,节选:
"投资赚钱的速度不应该快过学习的速度。" "敢重仓的就是你能看懂的生意,剩下的不是机会。" 关联概念:能力圈、安全边际、复利。
场景 2:行为模式分析 — 找出反复犯的错
用户:我最近的交易有什么问题?
调用:
memory_get_behavior_patterns()AI 返回: 检测到你的两个行为模式(过去 30 天,11 笔交易):
追涨模式(置信度 0.83) 触发样本:买入 NVDA/TSLA 在单日涨幅 > 5% 后的 D+1/D+2,胜率 25%,平均收益 -3.2% 建议:买入前强制查看
rag_ask_investment(question="追高的代价")恐慌割肉模式(置信度 0.71) 触发样本:持仓亏损 > 15% 后的 5 日内卖出,后续 30 日反弹 67% 建议:触发时自动推送飞书提醒 + 大师原话引用
场景 3:智能提醒 — 纪律锚点
用户:NVDA 到 950 美元时提醒我重新评估。
调用:
reminder_set_reminder(condition={ticker:"NVDA", operator:"<=", threshold:950, action:"review"})AI 返回: 提醒已建立:NVDA <= 950 USD 时触发"复盘评估"。 触发后将自动拉取:当前价格、你对此票的历史决策卡片、相关大师语录。 提醒已同步通知通道(如已配置)。
Claude Desktop 接入
将 InvestBrain 接入 Claude Desktop(macOS / Windows 通用):
配置文件位置:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
配置内容(路径按你 clone 的实际位置修改):
{
"mcpServers": {
"investbrain": {
"command": "python",
"args": [
"D:/claudework/invest-brain/src/mcp_server/server.py"
],
"env": {
"DEEPSEEK_API_KEY": "sk-your-key-here"
}
}
}
}配置完成后重启 Claude Desktop,会在工具栏出现"投资助手"图标(39 个工具,与
server.json注册的工具清单一致)。
开源协议与路线图
本项目采用 GNU Affero General Public License v3.0 (AGPLv3) 授权。简言之:你可以自由使用、修改和分发,但通过网络提供服务的衍生作品也必须以相同协议开源。详见 LICENSE。
层级 | 功能 | 状态 |
免费层 | 本地 MCP Server | ✅ 已上线 |
16 位大师 RAG 问答 | ✅ 已上线 | |
行为模式检测 | ✅ 已上线 | |
提醒系统 | ✅ 已上线 | |
无限记忆存储 | ✅ 已上线 | |
个人版 | 云端周报/月报(AI 生成) | 计划中(¥39/月) |
跨设备数据同步 | 计划中 | |
团队版 | 团队协作与共享知识库 | 计划中(¥199/月) |
架构
src/mcp_server/ # MCP Server(39 个工具)
├── server.py # 主入口
├── tools/ # 工具集
│ ├── thought_tools.py # 想法记录
│ ├── rag_tools.py # 投资 RAG
│ ├── memory_tools.py # 记忆系统
│ ├── reminder_tools.py # 提醒系统
│ ├── pattern_tools.py # 行为模式
│ ├── report_tools.py # 周报/月报
│ ├── roundtable_tools.py # 大师圆桌
│ └── notifier_tools.py # 多通道通知
├── datasources/ # 数据源
│ ├── akshare_datasource.py
│ └── tushare_datasource.py
├── knowledge/ # 知识库
│ ├── vector_store.py # Chroma 向量存储
│ └── graph_client.py # 图存储
├── memory/ # 记忆存储
├── patterns/ # 行为模式挖掘
├── llm/ # LLM 客户端
│ ├── llm_router.py # 通用 LLM 路由
│ ├── providers.py # Provider 配置
│ └── deepseek_client.py
└── api_server.py # REST API (LLM 配置)
data/
├── graph/ # 知识图谱(16 位大师 + 概念)
├── knowledge/
│ └── vectors/ # 向量索引(Chroma)
├── memory/ # 用户记忆
├── cards/ # 想法卡片
├── reminders/ # 提醒条件
└── config/ # 配置文件MCP Tools(40 个)
// 想法记录(3)
"thought_record_thought(text)",
"thought_search_memories(query)",
"thought_get_thought_cards(ticker)",
// 投资 RAG(4)
"rag_ask_investment(question)",
"rag_get_master_view(master, topic)",
"rag_search_knowledge(query)",
"rag_search_reports(query, top_k)",
// 记忆系统(3)
"memory_get_user_profile()",
"memory_record_decision(data)",
"memory_get_behavior_patterns()",
// 提醒系统(3)
"reminder_set_reminder(condition)",
"reminder_get_reminders()",
"reminder_delete_reminder(id)",
// 行为模式(3)
"pattern_run_pattern_detection()",
"pattern_get_pattern_summary()",
"pattern_get_pattern_report(id)",
// 周报/月报(1)
"report_run_scheduled_report(range)",
// 大师圆桌(1)
"invest_roundtable(question)",
// 通知配置(2)
"notify_configure_notifier(channel, webhook_url)",
"notify_get_notifier_config()",
// 行情数据 — AKShare(5)
"market_get_stock_quote(ticker)",
"market_get_stock_history(ticker, period)",
"market_get_index_components(index_code)",
"market_get_valuation(ticker)",
"market_get_market_sentiment()",
// 行情数据 — Tushare(15)
"tushare_get_daily_price(ts_code)",
"tushare_get_weekly_price(ts_code)",
"tushare_get_realtime_quote(ts_code)",
"tushare_get_index_daily(index_code)",
"tushare_get_financial_indicator(ts_code)",
"tushare_get_income_statement(ts_code)",
"tushare_get_balance_sheet(ts_code)",
"tushare_get_cash_flow(ts_code)",
"tushare_get_index_components(index_code)",
"tushare_get_industry_classification(ts_code)",
"tushare_get_valuation_multi(ts_code)",
"tushare_get_market_top_movers()",
"tushare_get_stock_pledge_status(ts_code)",
"tushare_convert_ticker(ticker)",
"tushare_check_token_status()"完整工具列表见 src/mcp_server/tools/。
知识库
16 位投资大师: 巴菲特、芒格、段永平、霍华德·马克斯、李录、格雷厄姆、达莫达兰、阿克曼、凯西·伍德、迈克尔·伯里、帕伯莱、塔勒布、林奇、费雪、德鲁肯米勒
5 个核心概念: 护城河、安全边际、能力圈、第二层思维、非对称风险
行业知识: 28 个申万行业深度研究框架(向量库内检索,不公开原文,保护核心方法论 IP)
数据源
数据源 | 用途 | 状态 |
AKShare | 实时行情 | ✅ |
Tushare | 财务/历史数据 | ✅ |
Chroma | 向量索引 | ✅ |
SQLite | 本地记忆 | ✅ |
开发
# 启动 REST API Server(用于 LLM 配置)
python src/mcp_server/api_server.py
# 访问 http://localhost:8000/api/llm/config
# 启动前端(Next.js 落地页 + 设置面板)
npm install
npm run dev
# 访问 http://localhost:3000测试:
pytest tests/相关项目
项目 | 用途 |
入门陪伴产品(人格测试) | |
超级系统站(专业分析) |
🛠️ 推荐工具链
以下工具推荐基于 awesome-finai-tools-zn 的 SKILL.md 场景→工具映射表生成,每类场景精选 1 个最佳工具。完整工具清单请访问仓库主页。
推荐工具 | 功能 | 安装方式 |
ashare-mcp | 生产级 A 股 MCP Server,30 个 tool(实时行情/K线/涨停池/龙虎榜/财报/板块资金) |
|
opencli-eastmoney-quote | 零配置 CLI,A 股/港股/美股实时行情秒出结果 |
|
opencli-xueqiu-search | 雪球股票搜索 + 热门帖子舆情分析,中文/代码均可 |
|
Qlib | 微软 AI 量化框架,自动因子挖掘 + 模型训练 + 回测评估 |
|
盈米基金 MCP | 69 个标准化 MCP 工具 + 16 项技能组件,含组合回测/蒙特卡洛模拟 | 联系盈米 AI 开放平台获取 API Key |
工具推荐逻辑基于 awesome-finai-tools-zn/data/institution-skills.json,每周自动更新。
🔗 工具链联动
本仓库是 FinAI 工具生态的一部分,与其他仓库协作:
仓库 | 定位 | 与本仓库的关系 |
数据底座 | 提供工具清单+机构Skill数据 | |
工具推荐引擎 | 基于场景自动推荐工具 | |
人格化投顾 | 按投资人格匹配工具箱 | |
投顾流程工具包 | KYC→配置→组合→报告 | |
知识管理 | 收集→打标→存储→产出 |
🗺️ Roadmap
改造需求详细文档:docs/改造需求-roadmap.md
P0 核心改造(个人知识库愿景):
🔴 用户自定义 RAG 知识库(让用户自己的框架可被 RAG 引用)
🔴 新闻/事件触发 reminder(央行购金、地缘冲突、美债冻结等)
🔴 投资框架管理工具(结构化记录用户的框架规则与触发条件)
P1 数据源:
🟡 黄金现货 / 美元指数 / 美债收益率实时数据
🟡 黄金 ETF(518880 / GLD)数据修复
P2 体验优化:
🟢 思考卡 NLU 抽取 bug(数字/英文名误识别)
最近进展(2026-07-29):
✅ 黄金投资框架核心已写入思考卡(
thought_8)✅ 基于真实数据的黄金推演已写入思考卡(
thought_9)✅ 改造需求文档已建(
docs/改造需求-roadmap.md)
版本: v0.1.2 创建时间: 2026-06-24 许可: AGPL v3
Available Tools
64 toolsbroker_get_importsB
查看交割单导入历史(文件、券商、导入时间、成功/跳过行数)。
Args:
limit: 返回最近 N 次导入记录(默认 20,最大 200)
Returns:
{imports: [{id, broker, file_name, imported_rows, skipped_rows,
total_rows, first_date, last_date, created_at}...]}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It implies a read operation via '查看' and helpfully discloses the return record shape, but says nothing about permissions, pagination behavior beyond the limit cap, or whether the history is bounded/retained. Adequate but incomplete for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then Args, then Returns, with no filler. The Returns block is somewhat verbose but earns its place since no output schema exists to convey the field list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers the purpose, the sole parameter's semantics, and the return structure, which is more than the structured fields provide. Only auth/retention context is missing, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains that limit returns the most recent N records, with default 20 and maximum 200. That meaning and its bounds are absent from the schema and are fully supplied here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查看/view) and resource (交割单导入历史/import history) and enumerates the fields surfaced (file, broker, import time, success/skipped rows). An agent can distinguish this read-history tool from the write-side broker_import_statement, though the description never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or routing to alternatives. The read-only intent is implied by '查看', but the agent gets no signal about when this is preferable to broker_import_statement or broker_list_trades, and no prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
broker_get_trade_statsA
汇总已导入交易的统计指标(买卖笔数/股数/金额、费用、持仓标的数)。
Args:
start_date: 起始日期 YYYY-MM-DD(含)
end_date: 结束日期 YYYY-MM-DD(含)
broker: 券商标识筛选(默认全部)
Returns:
{buy: {...}, sell: {...}, total_trades, distinct_symbols, first_date, last_date}
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | ||
| end_date | No | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the data source ('已导入交易') and a partial return shape, and the aggregation nature strongly implies a read-only operation, but it does not explicitly state read-only safety, permissions, error behavior, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the tool purpose, then structured into Args and Returns sections. Every line contributes useful information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter statistics tool with no output schema, the description supplies the missing parameter details and a useful return-key summary. It is nearly complete, missing only explicit usage guidance against alternatives and read-only safety confirmation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents all three parameters, including date format (YYYY-MM-DD), inclusive bounds for start_date and end_date, and broker as an optional filter defaulting to all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, '汇总' (aggregate), and a specific resource, '已导入交易' (imported trades), then lists the exact metrics computed. It clearly distinguishes this as a statistics tool rather than a listing or import tool, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for summarizing imported trades, but gives no explicit when-to-use guidance, no prerequisites, and no comparison to alternatives such as broker_list_trades or broker_get_imports. It leaves the agent to infer its place among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
broker_import_statementA
导入券商交割单 CSV 文件,解析为标准化交易记录并入库(自动去重)。
Args:
file_path: 券商导出的交割单/对账单 CSV 文件绝对路径
broker: 券商标识,可选 htsc / citic / cms / gtja / generic;
默认 auto 自动按表头特征识别(无法确定时按 generic 处理)
Returns:
{
import_id, broker, file_name,
total_rows, imported_rows, duplicated_rows, skipped_rows,
first_date, last_date, warnings, hint
}
重复导入同一文件时返回 imported_rows=0 并提示已存在。
| Name | Required | Description | Default |
|---|---|---|---|
| broker | No | auto | |
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses idempotent dedup behavior (re-importing the same file yields imported_rows=0 and a 'already exists' hint), auto broker detection with generic fallback, and a warnings/hint channel. It does not cover permissions, file-size limits, or error modes, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded, and the Args/Returns sections are tightly organized with no filler. The return-field enumeration is justified because no output schema exists. Slightly verbose but every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description supplies both parameter semantics and the full return shape (import_id, row counts, date range, warnings, hint), which fills the output-schema gap. Minor omissions around permissions and failure behavior keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with two parameters, so the description must compensate, and it does: file_path is documented as an absolute path to the broker's exported statement, and broker is given the candidate identifiers (htsc / citic / cms / gtja / generic) plus the auto default and its header-based detection logic. This adds meaning well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: importing broker statement CSVs, parsing them into standardized trade records, and persisting them. This is unambiguous and clearly distinct from read-only siblings like broker_get_imports or broker_list_trades. It does not explicitly name a sibling, but the action is unique enough that an agent can identify it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The description implies usage context by explaining that broker defaults to auto-detection from header features, so an agent can call it with only file_path. That is useful implied guidance but falls short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
broker_list_tradesA
查询已导入的标准化交易记录(默认时间倒序)。
Args:
start_date: 起始日期 YYYY-MM-DD(含)
end_date: 结束日期 YYYY-MM-DD(含)
symbol: 按证券代码模糊筛选(如 600519)
side: 买卖方向筛选,可选 buy / sell / other / unknown
broker: 券商标识筛选,可选 htsc / citic / cms / gtja / generic
limit: 返回条数上限(默认 200,最大 2000)
Returns:
{total: n, trades: [{id, trade_date, trade_time, side, symbol,
symbol_name, price, quantity, amount, fee,
net_amount, broker, contract_no}...]}
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | ||
| limit | No | ||
| broker | No | ||
| symbol | No | ||
| end_date | No | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose useful behavior: default time-descending sort, default limit of 200 with a max of 2000, and the full return shape. It does not state read-only safety explicitly or explain paging beyond the limit cap, but the substantive behavioral facts are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then a clean Args/Returns split. Each line carries information and there is no filler, though the docstring formatting makes it slightly longer than a prose equivalent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly documents the return structure (total plus trade fields). All six parameters are covered, and the read/list semantics need no permission disclosure beyond what is stated. Complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does: every one of the six parameters is documented in the Args block with meaning, format (YYYY-MM-DD, 含/inclusive), example values, and the accepted value sets for side (buy/sell/other/unknown) and broker (htsc/citic/cms/gtja/generic). Nothing in the schema adds meaning beyond this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查询/list) and resource (已导入的标准化交易记录), plus the default ordering. This clearly distinguishes it from siblings like broker_get_trade_stats and broker_get_imports, which operate on aggregates and imports rather than individual trade rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (list imported normalized trades, filter by date/symbol/side/broker) but there is no explicit when-to-use versus when-not, and no guidance on choosing this over broker_get_trade_stats or broker_get_imports. An agent must infer the boundary from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
broker_supported_formatsA
查看 InvestBrain 支持的券商交割单格式与标准字段映射。
用于导入前确认券商格式兼容性;返回各券商典型列名与标准化字段对照。
Returns:
{brokers: [{id, name, sample_columns}], standard_fields: {...}, note}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden; the 'view' verb plus zero parameters make it clear this is a side-effect-free query. It further discloses the shape of the returned data (brokers with id/name/sample_columns, standard_fields, note), which is meaningful behavioral context for a reference tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the usage condition, then the return shape. The two Chinese sentences overlap slightly in restating the field-mapping idea, but overall the structure is efficient and well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because no output schema exists, the embedded Returns block usefully documents the response payload (brokers list, standard_fields, note), which the agent would otherwise lack. For a simple zero-parameter reference tool this is nearly complete, missing only minor details such as whether coverage is exhaustive or cached.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate. Per the baseline for zero-parameter tools, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查看/view) and resource (支持的券商交割单格式与标准字段映射), making it clear this is a reference lookup for supported broker statement formats and field mappings. It is easily distinguished from siblings like broker_import_statement (which performs the import) and broker_list_trades (which lists trades).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'用于导入前确认券商格式兼容性' explicitly contextualizes when to use it: before an import to verify format compatibility, implicitly routing the agent here ahead of broker_import_statement. No exclusions or named alternatives are given, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_abandon_coachingB
放弃当前进行中的 Socratic 辅导会话并归档。
Args:
session_id: 要放弃的会话 ID
Returns:
dict: 包含 final_summary 的归档结果
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions archiving and that a final_summary is returned, which adds some context, but omits whether the abandon is irreversible, whether partial progress is preserved, and what errors occur if the session is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short and front-loaded with the core action, with Args/Returns cleanly separated. There is no wasted framing, though the parameter line is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description does cover the return value (dict with final_summary), which helps. But for a mutation tool it should disclose more behavioral and edge-case detail to be truly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is undocumented in the schema. The description only restates '要放弃的会话 ID' (the session ID to abandon), which adds no format, source, or lookup guidance beyond the parameter name itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (abandon) and resource (the in-progress Socratic coaching session) plus an outcome (archiving). It is distinguishable from siblings like coaching_start_coaching and coaching_continue_coaching, though it does not explicitly name the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by '当前进行中的' (currently in-progress) session, suggesting it applies mid-session. However, there is no explicit when/when-not guidance or reference to alternatives such as continue or switch_to_simple, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_coaching_compare_historyA
对比当前新事件与历史情景的变量结构异同。
从情景库中取出指定历史事件,用 LLM 对比分析:
- 相同点是什么
- 核心差异是什么
- 上次的教训是否适用于本次
Args:
event: 当前新事件的描述(如"美联储降息50bp")
scenario_id: 要对比的历史情景 ID(从 list_coaching_scenarios 获取)
Returns:
dict: {"status":"success", "comparison": "..."}
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | ||
| scenario_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses that the comparison is performed by an LLM and that the return value is a dict with status and comparison. It does not clarify read-only nature, side effects, permissions, or cost implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the comparison purpose and then uses a compact bullet list plus Args/Returns sections. It is efficient and well structured, with little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter comparison tool with no output schema and no annotations, the description covers what the tool does, both parameter meanings, and the return shape. Gaps remain around usage alternatives and behavioral safety context, but the core information needed to invoke it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for both required parameters. It explains event as a description of the current new event with an example, and scenario_id as the historical scenario ID obtained from list_coaching_scenarios.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: comparing a new event's variable structure against a historical scenario using LLM analysis. It is clear what the tool does, though it stops short of explicitly differentiating itself from other coaching-related siblings beyond pointing to list_coaching_scenarios as the source for IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying to retrieve a historical event from the scenario library and comparing it, and it names list_coaching_scenarios as the source of scenario_id. However, it does not state when to use this tool versus alternatives like coaching_iterate_judgment or coaching_continue_coaching, nor does it give exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_coaching_iterate_judgmentA
当用户判断错误后,更新投研规则中的变量优先级。
输入上次判断错误的变量和实际正确结果,
LLM 会分析并给出变量优先级调整建议——下次遇到类似结构,
哪个变量该调高、哪个该调低。
Args:
wrong_variable: 未按预期变化的变量(如"黄金与美元同涨")
correct_result: 实际发生的正确结果(如"黄金独立上涨,美元回落")
Returns:
dict: {"status":"success", "iteration": "..."}
| Name | Required | Description | Default |
|---|---|---|---|
| correct_result | Yes | ||
| wrong_variable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the core mechanism (LLM-driven priority adjustment) and the return shape, but omits whether the rule mutation persists, whether it is reversible, or any permission/auth requirements for changing investment rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then usage trigger, then Args, then Returns. Efficient overall, though the opening prose and the Args section restate the same two inputs, adding minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and no annotations, the description covers purpose, trigger context, both parameters with examples, and the response shape. The main gap is behavioral: persistence and reversibility of the rule mutation are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (properties have only titles), so the description must compensate, and it does: it supplies a concrete example for each parameter (wrong_variable: uncontrolled variable like 'gold and dollar rising together'; correct_result: what actually happened). This meaningfully disambiguates both string inputs beyond the bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: updating variable priority in investment research rules after a wrong judgment. The mechanism (LLM analyzes and suggests which variable to raise/lower) is concrete. It does not, however, distinguish itself from nearby siblings such as coaching_coaching_suggest_thresholds or the other coaching_ tools, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: after the user makes a wrong judgment, feeding the wrong variable and the actual correct result. That is a clear triggering condition. It offers no exclusions or named alternatives, so the agent cannot tell when NOT to use it versus the other coaching_ tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_coaching_suggest_thresholdsB
根据用户过去的交易记录,建议触发深度分析的数值阈值。
对于指定的资产类别(如"利率"、"汇率"、"商品"),
LLM 会分析多大的变动幅度应该触发深度分析,
给出具体数值阈值建议并说明理由。
Args:
asset_class: 资产类别,如"利率"、"汇率"、"商品"、"A股"、"美股"
Returns:
dict: {"status":"success", "suggestion": "..."}
| Name | Required | Description | Default |
|---|---|---|---|
| asset_class | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses that the tool uses the user's past transaction records and that an LLM produces the suggestion with reasoning, but it does not explicitly state that the operation is read-only, whether permissions or existing history are required, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured and front-loaded, with purpose first and Args/Returns sections afterward. It is appropriately sized for a one-parameter advisory tool, with only minor redundancy in restating the LLM analysis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, input examples, and a basic return shape, which is adequate for a simple advisory tool. However, with no annotations and no output schema, it should say more about prerequisites such as transaction-history availability and error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter with 0% description coverage, so the description's Args section does add meaning by giving examples such as interest rates, FX, commodities, A-shares, and US stocks. It still does not define an enum or validation constraints for asset_class.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: suggest numeric thresholds to trigger deep analysis. It also names the data source (past transaction records) and the asset-class scope, making the tool's intent clear, though it does not explicitly distinguish itself from sibling coaching tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: analyze past trades to suggest a magnitude threshold for a given asset class. However, there is no explicit guidance on when to use this tool versus alternatives such as coaching_start_coaching or coaching_continue_coaching, so the agent must infer the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_coaching_switch_to_simpleA
将进行中的 Socratic 多轮辅导会话切换到简单模式。
放弃剩余的问答题,直接用已有的分析上下文走一遍
10 步标准投研模板输出,并正常归档到情景库。
Args:
session_id: 由 start_coaching 返回的会话 ID
Returns:
dict: simple 模式结果,含 answer 和 scenario_id
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. It discloses that remaining questions are abandoned, existing analysis context is reused, a 10-step investment research template is run, and the result is archived to the scenario library; it also states the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then efficiently documents behavior, the single argument, and the return value. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and an output schema, the description supplies enough context for correct invocation: it identifies the session prerequisite, explains side effects and archival behavior, and describes the returned fields answer and scenario_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the only parameter is explicitly described as the session ID returned by start_coaching. This adds meaningful origin and usage context beyond the bare schema type string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: switching an ongoing Socratic coaching session to simple mode. It also clarifies the resulting behavior (abandon remaining questions, run the 10-step template, archive to scenario library), which distinguishes it from siblings such as continue_coaching or abandon_coaching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '进行中的' establishes the required context: this applies to an ongoing coaching session. However, it does not explicitly name alternatives or state when not to use it, such as when the session is already in simple mode or should instead be continued or abandoned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_continue_coachingA
继续一个进行中的 Socratic 多轮辅导会话。
回复选项字母 (A/B/C/D) 来推进对话,或输入
「直接说」切换到简单模式、「别问了」放弃本轮。
Args:
session_id: 由 start_coaching 返回的会话 ID
user_input: 用户对当前问题的回答(选项字母或指令文本)
Returns:
dict: 下一轮问题或最终结果
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| user_input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full behavioral burden. It usefully discloses that 「别问了」 abandons the round and 「直接说」 downgrades to simple mode, which is real behavioral context. However, it doesn't state session-state effects (does abandoning end the session?), persistence, or error behavior for an invalid session_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then the reply protocol, then Args/Returns. Efficient overall, though the Args/Returns block partly restates the intro (the reply options reappear in user_input).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description briefly notes the return (next question or final result), and with no annotations it explains the interactive protocol. Sufficient for an agent to call it correctly, though session lifecycle and error handling remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: session_id is explained as originating from start_coaching, and user_input is defined as either an option letter or instruction text. This meaningfully exceeds the bare schema, though exact accepted command strings are only illustrated, not enumerated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (continue an in-progress Socratic multi-turn coaching session) and clearly distinguishes itself from coaching_start_coaching and coaching_abandon_coaching by implying an active session is required. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: advance by replying with option letter (A/B/C/D), switch to simple mode with 「直接说」, or abandon with 「别问了」. It doesn't explicitly name sibling tools as alternatives, but the when-to-use condition (an in-progress session) is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_list_coaching_scenariosB
列出最近的学习辅导情景记录。
每次辅导结束(无论是简单模式还是复杂模式)都会自动归档到情景库,
包括触发事件、变量结构、因果链和最终结论。
Args:
limit: 返回的记录数量,默认 20
Returns:
dict: {"count": N, "scenarios": [...]}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that records are auto-generated on session completion and what each record contains (triggering event, variable structure, causal chain, conclusion), which is real context about the data. However it omits ordering, pagination, and any access/prerequisite behavior for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by useful archive context and the argument/return sections. No filler; the Returns line is a compact supplement to the missing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ({"count": N, "scenarios": [...]}) and explains what a scenario record consists of, which is what an agent needs to consume the result. Missing only minor operational details such as sort order.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is only one parameter, yet the description documents it directly ('limit: number of records, default 20'). This fully compensates for the schema gap, though it adds no detail beyond count semantics (e.g. no max or ordering interaction).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb (列出/list) and resource (学习辅导情景记录/coaching scenario records), so an agent knows exactly what it fetches. It does not explicitly contrast with siblings like coaching_compare_history, but the resource is distinct enough to be actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or naming of alternatives. The second sentence describes how records are created ('auto-archived after every coaching session'), which implies the tool is for reviewing past sessions, but the agent must infer that this is the read/retrieval counterpart to the coaching_* write verbs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coaching_start_coachingA
启动学习辅导,分析投资问题。
自动判断问题是简单还是复杂:
- 简单问题(如"该不该买XX")→ 直接输出 10 步标准投研分析
- 复杂问题(如"为什么XX和YY走势背离")→ 启动 Socratic 多轮引导对话
Args:
user_input: 用户提出的投资问题(如"茅台2000块值得买吗")
mode: 强制模式,"simple" 或 "complex",留空则自动判断
Returns:
simple 模式: {"status":"success", "mode":"simple", "answer": "...", "scenario_id":"..."}
complex 模式: {"status":"success", "mode":"complex", "session_id":"...", "question":"...", "options":[...]}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| user_input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does well on output shape for both modes, but omits that complex mode starts a persistent session (implied only by session_id), says nothing about permissions, cost/latency, or whether state is created and how it is torn down.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the branching rule, then structured Args/Returns. Every line adds information; the only mild bloat is the conventional docstring headers rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the return payloads for both modes (status/mode/answer/scenario_id vs. session_id/question/options). Combined with the mode-selection logic, an agent has enough to call and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema declares no enum for mode, so the description must compensate: it explains user_input with a concrete example and enumerates the legal mode values ('simple' or 'complex') plus the default-by-omission behavior. That closes the biggest gap, though it doesn't cover input length or language expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (启动学习辅导/start coaching on an investment question) and immediately distinguishes two operating modes with concrete examples ('该不该买XX' → simple, '为什么XX和YY走势背离' → complex). An agent can tell exactly what this does and how its behavior branches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when each behavior fires and how to force it via mode; the auto-detection rule is explicit. It does not name the follow-up siblings (continue_coaching, abandon_coaching) that a complex-mode session implies, so routing after invocation is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invest_invest_roundtableA
投资大师圆桌讨论。
自动语义匹配 3-5 位最相关的投资大师,模拟结构化深度对话。
每位大师独立调用 LLM 生成观点,主持人综合交锋并生成结构化纪要。
Args:
topic: 投资议题(如 "贵州茅台当前估值合理吗?")
Returns:
dict: 含 scene / masters / rounds / verdict 的结构化圆桌纪要
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that 3-5 masters are auto-matched, that each independently calls an LLM, and that a host synthesizes the debate. These internal mechanics imply meaningful latency/cost that an agent should anticipate, though auth requirements and idempotency are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose first, then behavior, then Args and Returns. Each block earns its place, and there is no redundancy, though the Args/Returns headers are the only structuring beyond the prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps up and names the return structure (scene/masters/rounds/verdict), and it explains the parameter. An agent could call it correctly, though the lack of when-to-use routing leaves a minor gap given same-domain siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'topic' parameter, so the description must compensate. It does by giving a concrete example topic ('贵州茅台当前估值合理吗?'), which clarifies the expected input far better than the bare schema string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: simulating a structured roundtable discussion among 3-5 semantically matched investment masters. It is concrete about the output (scene/masters/rounds/verdict), but it never distinguishes itself from sibling tools like rag_ask_investment or rag_get_master_view, which also surface master perspectives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (wanting a multi-master structured debate rather than a single answer), but gives no explicit when-to-use guidance. It does not name alternatives or state exclusion conditions, so the agent must infer when this beats rag_ask_investment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_get_index_componentsC
Get constituent stocks of an index (CSI300, etc).
Note: Simplified - returns basic info from Sina.
Args:
index_code: Index code (e.g., "000300" for CSI 300, "000001" for Shanghai)
Returns:
dict: Index name and current value
| Name | Required | Description | Default |
|---|---|---|---|
| index_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the upstream source ("Sina") and admits it is "Simplified," but then describes a return payload that contradicts the tool's own name, leaving the agent unsure what it actually receives.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded sentence plus compact Args/Returns blocks; nothing is padded. The Returns block is short but is the source of the semantic error, which keeps this out of 5 territory.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description is solely responsible for explaining returns — and it states the wrong thing (index name and value instead of constituent list). For a data-retrieval tool with one undocumented parameter, that leaves a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single index_code property has no schema description, so the description must compensate — and it does, giving concrete code examples ("000300" for CSI 300, "000001" for Shanghai). Format guidance is the one thing an agent needs here and it is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get constituent stocks of an index" names a specific verb and resource, which is good on its own. But the Returns line then says the function gives "Index name and current value" rather than constituents, so the stated purpose contradicts itself. It also fails to differentiate from the near-identical sibling tushare_get_index_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is offered, no preconditions, and no mention of the closely related tushare_get_index_components that an agent must choose between. The only hint is the parenthetical "(CSI300, etc)."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_get_market_sentimentB
Get overall market sentiment indicators.
Returns Shanghai Composite as a proxy for market sentiment.
Returns:
dict: Index value, change %, sentiment reading
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose useful behavior: the proxy methodology (Shanghai Composite) and the shape of the return (index value, change %, sentiment reading). However, it says nothing about data source, freshness, or whether the single-index proxy has known limitations, so important behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, leading with the purpose before the methodology and return shape. The 'Returns: dict:' block is slightly redundant prose for a no-output-schema tool but is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool with no output schema, the description covers what the tool does, the proxy it uses, and the return contents. It is adequately complete, with only source/freshness details missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no semantics to document and the baseline is a 4. The description correctly indicates the tool is invoked without arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get overall market sentiment indicators') and clarifies the methodology by naming the Shanghai Composite as the proxy used. It is clear what the tool returns, though it offers no explicit differentiation from siblings like market_get_valuation or market_get_index_components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent must infer its role from the name alone, despite a crowded market_* sibling set that would benefit from routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_get_stock_historyA
Get historical K-line data for a stock.
Args:
ticker: Stock ticker symbol (e.g., "600519")
period: K-line period - "daily", "weekly", "monthly" (default: "daily")
Returns:
dict: OHLCV data with date, open, high, low, close, volume
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | daily | |
| ticker | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return shape (OHLCV fields), which is genuinely useful behavioral context, but omits auth requirements, rate limits, data range limits, and whether results are paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by compact Args/Returns blocks with zero filler. Every line carries information the schema does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema and no annotations, the description covers the required parameter, the period options, and the return fields, which is close to sufficient. It could say more about ticker format across markets and any range limits, but nothing essential is missing for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are no enums in the schema, so the description must compensate, and it does: it documents both parameters, gives a ticker example ("600519"), and supplies the valid period values (daily/weekly/monthly) plus the default. This adds real meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (historical K-line data for a stock), so the agent immediately knows what it produces. It does not distinguish itself from heavily overlapping siblings like tushare_get_daily_price, tushare_get_weekly_price, or market_get_stock_quote, which is the only clear gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over the many sibling price/history tools, nor any prerequisites or exclusions. Usage is only implied by the name and the period parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_get_stock_quoteB
Get real-time quote for a stock ticker.
Args:
ticker: Stock ticker symbol (e.g., "600519", "sh600519", "贵州茅台")
Returns:
dict: Current price, change %, volume
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the return shape (current price, change %, volume), which substitutes for the absent output schema, but says nothing about data freshness, source, rate limits, or market coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in one clear sentence, then uses compact Args/Returns sections. The boilerplate scaffolding is slightly verbose but every line carries information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema and no annotations, the description covers the essential purpose, input format, and return fields. Remaining gaps (data source, latency, exchange coverage) are minor for this simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only names the param 'Ticker', so the description's examples ('600519', 'sh600519', '贵州茅台') add real value by revealing accepted format variants including a prefixed code and a Chinese name, which would otherwise be ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Get real-time quote for a stock ticker.' This separates it from market_get_stock_history, but it does not differentiate from the very similar sibling tushare_get_realtime_quote, leaving the agent to guess which realtime source to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, and no alternative named despite multiple overlapping siblings (tushare_get_realtime_quote, market_get_stock_history). 'Real-time' implicitly contrasts with historical data but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_get_valuationB
Get valuation data for a stock.
Note: Sina provides limited fundamental data - returns price-based metrics.
Args:
ticker: Stock ticker symbol (e.g., "600519")
Returns:
dict: Price-based valuation info
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose a meaningful trait beyond the schema: the Sina source returns only limited, price-based fundamentals rather than full valuation metrics, which sets correct expectations. It says nothing about auth, rate limits, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the key limitation stated before the Args/Returns sections. The Returns line is mildly redundant with the opening sentence but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and one undocumented parameter, the description covers the basics but not the specifics. It does not say which price-based metrics are returned or how this tool relates to the overlapping valuation sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no schema description, so the description must compensate. It does add value by defining ticker as a stock symbol with a concrete example ('600519'), but it omits exchange/prefix conventions and any format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Get valuation data for a stock'), so an agent knows what it does. However, it never distinguishes itself from the sibling 'tushare_get_valuation_multi' or from quote/history tools, so the agent cannot tell which valuation source to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of when not to use it, and no named alternative despite several closely related siblings (tushare_get_valuation_multi, market_get_stock_quote). The only contextual note is about data source limitations, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_get_behavior_patternsB
Get identified behavior patterns from user's investment history.
Returns:
list: Behavior patterns like "tends to buy on price drops", "stops loss too early"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It helpfully discloses the shape and flavor of the return value with concrete examples, but says nothing about whether these patterns are precomputed or derived on demand, what happens when no history exists, or any auth/permission requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: the purpose sentence comes first, followed by a compact return description. The 'Returns:' block is slightly code-doc flavored but earns its place given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with no output schema, describing the return content with examples is exactly the right compensation. It could go further on empty-state or refresh behavior, but nothing essential for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline is 4. There is nothing further for the description to clarify about inputs, and it adds nothing misleading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get identified behavior patterns from user's investment history'), which is clear on its own. However, it does not distinguish itself from similarly named siblings like pattern_get_pattern_summary or pattern_get_pattern_report, leaving an agent to guess which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no reference to any alternative tool. The agent is told what it returns but not under what circumstances to call it instead of the pattern_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_get_user_profileB
Get user investment profile.
Returns:
dict: User profile including risk preference, circle of competence, investment principles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return contents (risk preference, circle of competence, investment principles), which is real behavioral value for a getter with no output schema. It says nothing about access scoping, whether the profile is per-user/per-account, or freshness/caching, so it falls short of complete disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, purpose front-loaded before the return summary. Nothing is wasted, though the 'Returns:' block formatting is slightly verbose for what is essentially one sentence of content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param getter with no output schema, the description does give the caller a sense of the returned fields, which is the main thing needed. But with no annotations and a confusingly similar sibling (user_get_profile), the definition leaves the agent without enough to confidently select or scope the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the schema is trivially at 100% coverage. Baseline 4 applies; no parameter meaning is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get user investment profile.' That is unambiguous on its own. However, the sibling list contains a near-identical tool (user_get_profile), and the description does nothing to distinguish this memory_* variant from it, which is exactly the differentiation the 5-level requires.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which alternative to prefer. Given the presence of user_get_profile and memory_get_behavior_patterns, a routing hint would have been genuinely valuable and is entirely absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_record_decisionB
Record an investment decision made by the user.
Args:
data: Decision data including ticker, action (buy/sell/hold), price, reason, timestamp
Returns:
dict: Confirmation of recorded decision
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a mutation (recording) and mentions a confirmation return, but does not disclose persistence semantics, authentication needs, duplicate handling, or whether decisions are overwritten or appended.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured Args/Returns. Efficient and readable, with no padding, though it does not encode any actionable constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-object write tool with no annotations and no output schema, the description is adequate but thin. It names the fields but omits required-vs-optional status, validation rules, and error behavior, leaving real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter is an opaque nested object with additionalProperties=true. The description compensates by enumerating expected fields (ticker, action, price, reason, timestamp), adding real meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Record an investment decision made by the user.' This clearly separates it from siblings like user_record_activity or thought_record_thought. However, it does not explicitly name what makes it distinct from those recording-style tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no alternatives named. The agent must infer that this is for logging investment decisions and cannot tell from the description when it should prefer this over thought_record_thought or user_record_activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notify_configure_notifierB
Configure a notification channel.
Args:
channel: Notification channel name. Supported: feishu, dingtalk, bark, pushplus
webhook_url: Webhook URL for webhook-based channels (feishu / dingtalk / bark)
token: PushPlus token (only used when channel="pushplus")
enabled: Whether to enable this channel (default True)
send_test: Whether to immediately send a test message (default False)
Returns:
dict: Current configuration status for all channels, plus test result if requested
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | ||
| channel | Yes | ||
| enabled | No | ||
| send_test | No | ||
| webhook_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does add real behavior: send_test sends a message immediately, defaults for enabled/send_test, and that the return value is config status for ALL channels plus the test result. But it never states whether re-configuring overwrites prior settings, whether credentials are required, or whether changes persist across sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by a tight Args block and a Returns line; every entry maps to a real parameter. The Google-style docstring formatting is slightly boilerplate-heavy for five fields but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema, the description covers all parameters and describes the return shape itself. The remaining gap is mutation semantics (overwrite vs. merge, persistence), which leaves it just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it enumerates supported channel values (feishu, dingtalk, bark, pushplus), scopes webhook_url to webhook-based channels and token to pushplus only, and gives defaults for enabled and send_test. It does not say what happens with an unsupported channel value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Configure a notification channel.' An agent can tell it apart from the sibling notify_get_notifier_config (read side) by the verb alone. It does not name the sibling explicitly, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to guidance: nothing says whether configuring overwrites an existing channel, whether notify_get_notifier_config should be called first, or which channel to pick. Usage is only implied by the verb 'Configure'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notify_get_notifier_configA
Get the current notification configuration for all channels.
Returns:
dict: Configuration status for all channels, e.g.:
{"channels": {"feishu": {...}, "dingtalk": {...}, "bark": {...}, "pushplus": {...}}}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes the return structure and implies a read-only getter, but does not explicitly state read-only behavior, permission requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and includes a compact return example. Every sentence and the example add useful context without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with no output schema, the description supplies the essential return shape with an example. It is adequate, though not exhaustive about each channel's configuration fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does not need to explain parameter semantics further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (notification configuration) with scope (all channels), so the operation is clear. It does not explicitly distinguish itself from the sibling notify_configure_notifier, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of the related configure tool. The agent must infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pattern_get_pattern_reportB
Generate a behavior pattern report in Markdown format.
Args:
period: Report period — "weekly" (default) or "monthly"
Returns:
dict: Report path and full Markdown content
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | weekly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses the return shape (report path and Markdown content), which implies a file is written to disk, but it never states that side effect explicitly, nor whether detection is triggered, whether output is cached, or whether the call is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose in the first line, then Args and Returns blocks. There is minor docstring boilerplate (empty type hints, 'dict:' label) that adds nothing, but nothing is wasted overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description does cover the return payload, which is helpful. It stops short of describing what the report actually contains, how long a 'weekly' window is anchored to, or where the file path points — all decisions the caller might care about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of meaning for the single parameter, and it fully compensates by enumerating the two valid values ('weekly' or 'monthly') and naming the default. Only the enum constraint is left to the schema's bare string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a behavior pattern report') plus the output format (Markdown). It is distinguishable from pattern_get_pattern_summary only by the word 'report', but the sibling tools themselves are not referenced, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus pattern_run_pattern_detection or pattern_get_pattern_summary, and no stated prerequisite that pattern detection must have run first. The agent must infer the workflow from the sibling list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pattern_get_pattern_summaryA
Get cumulative summary of all detected behavior patterns.
Returns:
dict: Pattern type -> {count, last_seen}, plus prompt_hint for
the agent to decide whether to proactively engage the user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the return shape (pattern type -> {count, last_seen}) plus a non-obvious behavioral trait: the prompt_hint for proactive user engagement. It omits permissions, data freshness/staleness, and whether the summary is cached, so the disclosure is partial rather than complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: the purpose sentence comes first, followed by a compact return description. The docstring-style 'Returns: dict:' formatting is slightly mechanical but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema read tool, the description supplies the essential return structure and the prompt_hint semantics, which is enough to call it correctly. Absent annotations, a note on read-only safety or data freshness would have made it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-arg tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get cumulative summary of all detected behavior patterns.' It is distinguishable from siblings like pattern_run_pattern_detection and pattern_get_pattern_report by the 'cumulative summary' framing, though it does not explicitly contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated. The mention of a prompt_hint 'for the agent to decide whether to proactively engage the user' hints at the intended use, but there is no explicit when-to-use guidance or routing versus pattern_get_pattern_report or pattern_run_pattern_detection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pattern_run_pattern_detectionB
Run behavior pattern detection on all recorded decisions and thoughts.
Detects: 追高, 过早卖出, 情绪化交易, 原则违反.
Results are saved to the behavior_patterns table.
Returns:
dict: Detection results with count and pattern list
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real value by disclosing that results are written to the behavior_patterns table (a mutation side effect) and by summarizing the return shape. It still omits whether the run is idempotent, how expensive it is, what happens with zero recorded data, and whether any permission is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the action and scope, and the detection list plus persistence note are compact. The trailing 'Returns:' block with a Python-style 'dict:' line is slightly noise for an agent but still short and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no annotations and no output schema, the description covers the action, the detected patterns, the persistence target, and the return contents, which is most of what is needed. It stops short of routing guidance relative to the read-side siblings and of stating preconditions (e.g., needing previously recorded decisions).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The empty schema is fully covered, and there are no argument semantics the description could add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('Run behavior pattern detection on all recorded decisions and thoughts') and enumerates the four Chinese pattern names it detects, so the scope is concrete. It does not, however, differentiate itself from close siblings like pattern_get_pattern_summary, pattern_get_pattern_report, or memory_get_behavior_patterns, which an agent must distinguish from this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives. An agent cannot tell from the text whether this should be run before pattern_get_pattern_summary/get_pattern_report, or whether it is safe to call repeatedly. Usage is only weakly implied by 'on all recorded decisions and thoughts'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_ask_investmentB
Ask an investment question and get RAG-augmented answer.
Args:
question: Investment question (e.g., "什么是护城河?")
Returns:
dict: Answer with source citations from master knowledge base
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that the response is a dict with source citations drawn from a 'master knowledge base', which is useful output context absent an output schema, but says nothing about scope, latency, auth, or how it handles unanswerable questions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, with the core action in the first sentence. The Args/Returns boilerplate is slightly redundant but not wasteful for a single-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-annotation, no-output-schema tool, the description covers purpose, the input, and the return shape. It is still incomplete on the key decision an agent faces: when to use this Q&A tool versus the other rag_* search tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter at 0% schema description coverage, so the description must compensate. It names the parameter and gives a concrete natural-language example ('什么是护城河?'), which usefully signals free-text phrasing rather than a keyword or ID, but adds little beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (ask) and resource (investment question) and specifies the output is a RAG-augmented answer with source citations. However, it never distinguishes itself from close siblings like rag_search_knowledge, rag_rag_search_reports, or rag_get_master_view, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative-tool guidance. The only signal is the implied 'investment question' framing, which does not tell the agent how this differs from the other rag_* retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_get_master_viewA
Get a specific master's view on a topic.
Args:
master: Master name (e.g., "巴菲特", "芒格", "段永平")
topic: Topic to query (e.g., "护城河", "安全边际")
Returns:
dict: Master's view on the topic with citations
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| master | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return shape ('dict: Master's view on the topic with citations'), which is genuinely useful for a retrieval tool, but it says nothing about behavior when the master or topic is unknown, whether the view is cached/generated, or any access constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded, followed by compact Args/Returns sections with no filler. Slightly over-formatted for only two parameters, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is the only source of truth, and it covers inputs plus the rough return shape. It leaves open the routing question against sibling RAG tools and any failure behavior, which matters for a tool whose only inputs are free-text names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% – the schema lists only bare string types for 'master' and 'topic'. The description compensates by documenting both parameters and supplying concrete example values in the target language, which is well beyond what the schema offers. It stops short of enumerating the valid master set, so an agent could still guess an unsupported name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb and resource ('Get a specific master's view on a topic'), which is unambiguous on its own. It does not, however, distinguish itself from near-neighbors like rag_ask_investment, rag_search_knowledge, or rag_rag_search_reports, so an agent cannot tell from the description alone which RAG tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the argument examples (masters 巴菲特/芒格/段永平, topics 护城河/安全边际), which signal a value-investing wisdom lookup. There is no explicit statement of when to use this versus the sibling RAG tools, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_rag_search_reportsB
搜索券商研报——基于语义向量检索。
返回最近入库的券商研报摘要,包含机构、股票、行业、评级、盈利预测等信息。
Args:
query: 搜索关键词(如"宁德时代 业绩"、"保险 增长"、"半导体")
top_k: 返回结果数量,默认5
Returns:
{
"query": str,
"count": int,
"results": [
{
"info_code": str,
"title": str,
"org_name": str,
"stock_name": str,
"stock_code": str,
"industry_name": str,
"rating": str,
"rating_change": str,
"publish_date": str,
"text": str,
"distance": float,
}
]
}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses that results are limited to recently ingested reports (最近入库) and that each hit carries a distance/similarity score, but it omits auth requirements, result caps, and whether the corpus is date-bounded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then Args and Returns in a scannable structure. The Returns block is long but justified since no output schema exists; nothing is wasted, though the block could be trimmed to field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the heavy lifting well: it documents both parameters and the full return shape. The remaining gap is the absence of any routing guidance against the many sibling search/retrieval tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does: query is explained with concrete example phrasings ("宁德时代 业绩", "保险 增长") and top_k is given its default of 5. Only the allowed range/upper bound of top_k is left unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (搜索券商研报) plus the retrieval mechanism (基于语义向量检索), and enumerates the fields returned (机构、股票、行业、评级、盈利预测). This is clearly distinct from generic knowledge search, though it never names the sibling tools (rag_search_knowledge, user_knowledge_search) it must be chosen over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The description implies report search, but with siblings like rag_search_knowledge, rag_ask_investment and user_knowledge_search available, the agent gets no routing criteria for picking this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_search_knowledgeC
Search the investment knowledge base.
Args:
query: Search query (e.g., "价值投资", "周期")
Returns:
list: Matching knowledge entries
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only search and loosely notes the return shape ('list: Matching knowledge entries'), but says nothing about result limits, ranking, pagination, or required permissions. For a search over a knowledge base with zero annotation coverage, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: purpose first, then a compact Args/Returns block with no filler. The docstring-style formatting is slightly robotic but every line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema read tool, the description covers the essentials an agent needs to invoke it. It falls short only on the sibling disambiguation and return-detail front, neither of which is fatal at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no schema-level description at all, so the description must compensate. It does add value by giving concrete example queries ('价值投资', '周期'), clarifying that this is a semantic/free-text lookup rather than an ID lookup, but it does not specify language handling or query length constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Search the investment knowledge base'), which is better than a tautology. However, it does not distinguish this tool from several close siblings such as rag_rag_search_reports, rag_ask_investment, or user_knowledge_search, so an agent cannot tell which search surface to pick without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given and no alternative is named. With siblings like rag_ask_investment (question answering) and user_knowledge_search (user-specific knowledge) present, the absence of routing guidance leaves the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reminder_delete_reminderC
Delete a reminder by ID.
Args:
id: Reminder ID to delete
Returns:
dict: Deletion confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a destructive mutation but says nothing about irreversibility, whether the ID must exist, error behavior, or permissions. Only the single line 'Returns: dict: Deletion confirmation' adds any behavioral signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and short, with the core action in the first sentence. The 'Args/Returns' boilerplate restates what the schema already shows for a single obvious parameter, so it is slightly padded but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive tool with no annotations and no output schema, so the description must compensate - and it does not. Nothing covers irreversibility, failure on unknown IDs, or side effects, leaving an agent without the context needed to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only titles the field 'Id'. The description clarifies it is a 'Reminder ID to delete', adding modest meaning beyond the bare schema, but no format, example, or constraint (e.g., ID shape) is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a reminder by ID'), which cleanly separates it from siblings reminder_get_reminders and reminder_set_reminder. Clear, but it never names those siblings or explains the distinction explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is given. The agent must infer the context entirely from the name; there is no mention of prerequisites or of the related get/set reminder tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reminder_get_remindersB
Get all active reminders.
Returns:
list: All active reminders
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Active' hints that inactive/completed reminders are filtered out, which is useful, but there is nothing about ordering, pagination, ownership scoping, or side effects — thin for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, front-loaded with the action, with no wasted prose. The 'Returns' block mildly restates the first sentence, but the cost is trivial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-annotation list tool with no output schema, the description supplies the minimum needed: what is fetched and the rough shape of the return value. It could go further on filtering or ordering, but the tool's simplicity keeps the gap small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to explain beyond what the empty schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('reminders') with a clear scope qualifier ('all active'). It does not name or differentiate from the sibling reminder_set_reminder/reminder_delete_reminder, but the nouns make the read-vs-write split obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, no mention of alternatives such as reminder_set_reminder or reminder_delete_reminder. The agent must infer that this is the listing operation purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reminder_set_reminderA
Set a reminder with trigger condition.
Args:
condition: Reminder condition, e.g.:
- {"type": "price", "ticker": "贵州茅台", "operator": "below", "value": 1400}
- {"type": "time", "cron": "0 9 * * 5"} # Every Friday 9am
- {"type": "pe_ratio", "ticker": "贵州茅台", "operator": "below", "value": 20}
Returns:
dict: Created reminder with ID
| Name | Required | Description | Default |
|---|---|---|---|
| condition | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that a reminder is created and returned with an ID, and gives condition examples, but does not describe persistence, duplicate handling, permissions, notification behavior, or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and uses a clean Args/Returns structure. The examples are useful rather than redundant, though the formatting is slightly verbose for a single-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one nested object parameter and no output schema. The description explains the condition shape with examples and briefly states the return value, which is enough for correct invocation, though more detail on supported condition types and side effects would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates strongly with concrete condition examples covering price, time/cron, and pe_ratio triggers including fields like ticker, operator, value, and cron. This adds substantial meaning beyond the bare object schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Set a reminder with trigger condition." It is clear what the tool does and distinguishable from reminder listing/deletion siblings by name, though it does not explicitly differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives such as reminder_get_reminders or reminder_delete_reminder. Usage is only implied by the tool name and the word "Set."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_run_scheduled_reportA
Generate a behavior pattern report for this week or month.
Designed to be called on a schedule by the agent (e.g. every Sunday).
Args:
range: Report range — "week" (default) or "month"
Returns:
dict: Compact report with summary, insights, highlight, and report file path
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | week |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return shape ('summary, insights, highlight, and report file path'), which hints that a report file is produced, but never states the write/side-effect, permissions, or whether calling it repeatedly overwrites output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in one sentence, then uses clearly labeled Args and Returns blocks. Every element earns its place, with only minor redundancy between the opening sentence and the Args section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers purpose, argument, and return contents adequately. It falls short on sibling differentiation and on the side effects of generating/writing a report, which an agent scheduling this call would need to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it documents the single 'range' argument, its accepted values ('week'/'month'), and its default. The only gap is that it offers no guidance on choosing month over week.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a behavior pattern report') with scope (week/month), so the agent knows what it produces. However, it does not distinguish itself from the sibling pattern_get_pattern_report or pattern_run_pattern_detection, leaving ambiguity about which pattern tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note 'Designed to be called on a schedule by the agent (e.g. every Sunday)' implies a usage context, which is better than nothing. But it gives no explicit when-to-use vs. the pattern_* siblings and no conditions under which it should not be called.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thought_get_thought_cardsC
Get all thought cards for a specific ticker/symbol.
Args:
ticker: Stock ticker (e.g., "贵州茅台", "AAPL")
Returns:
list: All thought cards for this ticker
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a read, but it says nothing about ordering, pagination, whether archived/stale cards are included, or what happens when the ticker has no cards (empty list vs error).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded: the core behavior is in the first sentence, followed by docstring-style Args/Returns blocks. No filler, though the Args block largely restates the single parameter name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description at least names the return shape ('list: all thought cards for this ticker'). Still missing are the return fields, ordering, and empty-result behavior, which an agent would need to use the output correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema alone gives no meaning for 'ticker'. The description partially compensates by giving concrete example values in both Chinese and English ('贵州茅台', 'AAPL'), clarifying that local symbols are accepted, but it does not explain ticker normalization or whether exchange suffixes are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all thought cards') and scopes it to a single ticker/symbol, which is clear. It does not, however, distinguish itself from near-siblings like thought_search_memories or thought_record_thought, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no named alternative despite several related thought/memory tools in the sibling list. The agent is left to guess whether this is for retrieval by symbol only or overlaps with memory search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thought_record_thoughtB
Record an investment thought/idea from the user.
Args:
text: The raw thought text from user (e.g., "茅台跌到1400可以考虑买入")
Returns:
dict: A thought card with parsed entities and card ID
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return shape ('a thought card with parsed entities and card ID'), which is useful. However, it does not state that this persists data, whether it requires auth, or whether duplicate thoughts are deduplicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the Args/Returns structure is easy to scan. The docstring formatting (indentation, 'Args:'/'Returns:') is mildly verbose but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers the input example and the return content, which is most of what an agent needs. It omits side-effect and persistence details, but the core invocation is well-enough specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare {type: string}), so the description must compensate. The example ('茅台跌到1400可以考虑买入') adds helpful meaning about what qualifies as a thought, but no format, length, or constraint guidance is given, leaving the compensation partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Record') and resource ('an investment thought/idea from the user'), which cleanly separates it from read-oriented siblings like thought_search_memories and thought_get_thought_cards. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative guidance. 'from the user' weakly implies the trigger is user-shared thoughts, but no conditions or routing advice are given, matching the score-2 'no guidance' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thought_search_memoriesB
Search user's historical thoughts and memories using semantic search.
Args:
query: Search query (e.g., "茅台", "上次关于苹果的想法")
Returns:
list: Matching thought cards, sorted by relevance
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two useful traits: retrieval is semantic (not keyword) and results are sorted by relevance. It omits pagination, result-count limits, and any auth or scope constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by short Args/Returns blocks; every line carries information. The Args/Returns scaffolding is slightly heavier than needed for one parameter but is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description usefully explains the return shape (matching thought cards sorted by relevance), which compensates for the missing output schema. It is still thin on result volume and pagination behavior, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'query' property has no description, so the description must compensate. It supplies the parameter name plus two illustrative queries ('茅台', '上次关于苹果的想法'), which conveys that natural-language or mixed-language input is expected, but adds no syntax or length guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: searching the user's historical thoughts and memories, with the retrieval mode (semantic search) named. It is distinguishable from list-style siblings like thought_get_thought_cards, though it does not name any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over the many adjacent tools (thought_get_thought_cards, rag_search_knowledge, memory_get_behavior_patterns). The example queries imply it is for fuzzy recall, but the agent is left to infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_create_profileA
创建本地用户 profile。
首次使用前必须创建,用于留存/活跃度追踪的锚点。
Args:
nickname: 用户昵称
risk_profile: 风险偏好,可选 conservative / moderate / aggressive
investment_style: 投资风格,可选 value / growth / trend / mixed
experience_years: 投资经验年限
goals: 投资目标列表,如 ["长期复利", "跑赢沪深300"]
settings: 附加设置(JSON 对象),如 {"currency": "CNY", "notify_channel": "feishu"}
user_id: 用户 ID(默认 local 单用户)
Returns:
{created: true, profile: {...}}
| Name | Required | Description | Default |
|---|---|---|---|
| goals | No | ||
| user_id | No | local | |
| nickname | No | ||
| settings | No | ||
| risk_profile | No | moderate | |
| experience_years | No | ||
| investment_style | No | value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It discloses the prerequisite, the retention/activity-tracking role, and the return shape ({created: true, profile: {...}}), which is useful. It omits key behavioral facts: whether calling it twice overwrites an existing profile, errors, or is idempotent, and whether any permission/auth is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by a prerequisite note, then Args and Returns in a scannable structure. The Args block is slightly verbose but each entry earns its place given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description supplies the return shape, and with no annotations it covers the prerequisite, all parameters, and the tracking purpose. The main remaining gap is behavior on a pre-existing profile, which matters for a create tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all parameter meaning, and it does: it documents all 7 params, supplies the enum values for risk_profile (conservative/moderate/aggressive) and investment_style (value/growth/trend/mixed) that the schema lacks, gives example shapes for goals and settings, and notes the user_id default of local.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (创建本地用户 profile) and adds that it is the anchor for retention/activity tracking, which is meaningful scope. It does not explicitly contrast itself with the sibling user_update_profile, so an agent must infer create-vs-update from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"首次使用前必须创建" gives a clear prerequisite/when-to-use trigger. However, it never names the alternative for an existing profile (user_update_profile) nor states what happens if a profile already exists, leaving the create-vs-update decision implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_get_activity_statsA
获取用户活跃度统计(近 N 天)。
Args:
user_id: 用户 ID(默认 local)
days: 统计窗口天数,默认 30
Returns:
{exists, stats: {total, active_days, daily_avg, by_type, last_activity_at, active_date_list}}
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| user_id | No | local |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the parameter defaults and the exact return structure (exists, stats.total, active_days, daily_avg, by_type, etc.), which is genuinely useful. However, it never states that this is a read-only operation, nor mentions permissions, rate limits, or behavior when a user has no activity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first line, followed by compact Args and Returns blocks. Every element earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description supplies a Returns block listing the exact response fields, covering the return-value gap. For a two-parameter read tool with no annotations, this is largely complete, missing only explicit read-only/edge-case disclosure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents both parameters with meaning and defaults ('user_id: 用户 ID(默认 local)', 'days: 统计窗口天数,默认 30'). The only gap is the absence of accepted ranges or formats for days.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: '获取用户活跃度统计(近 N 天)' (get user activity statistics over the last N days). This is clearly distinguishable from siblings like user_get_profile or user_get_retention, though it never explicitly names a sibling to route between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as user_get_profile or user_get_retention. The agent is left to infer when activity stats are the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_get_profileB
读取本地用户 profile。
Args:
user_id: 用户 ID(默认 local)
Returns:
{exists: true/false, profile: {...}} — profile 含昵称/风险偏好/投资风格/
经验年限/目标/设置/创建与最近活跃时间
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | local |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does add real value by disclosing the return shape, including the exists boolean, which signals behavior when no profile is present. It says nothing about permissions, storage location semantics beyond '本地', or side effects, but for a simple read this is an acceptable middle score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Args/Returns layout is front-loaded and compact, with the purpose stated first. Every line carries information; the only mild waste is repeating the default value that the schema already declares.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the profile fields returned (昵称/风险偏好/投资风格/经验年限/目标/设置/创建与最近活跃时间). For a one-parameter read tool this is close to complete, missing only guidance on which sibling to prefer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter, but the description only restates the schema's own default ('user_id: 用户 ID(默认 local)'), adding no format, valid-value, or resolution semantics beyond what the schema already shows. Adequate but not compensating for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('读取本地用户 profile'), which cleanly separates it from user_create_profile and user_update_profile. It does not, however, distinguish itself from the sibling memory_get_user_profile, leaving the agent to guess which profile source to read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as memory_get_user_profile or user_get_activity_stats, and no prerequisites or exclusions. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_get_retentionB
获取用户留存摘要(首次/最近活跃、活跃天数、连续活跃天数、留存跨度)。
Args:
user_id: 用户 ID(默认 local)
Returns:
{exists, retention: {...}}
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | local |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only operation via 获取 (get) and discloses the return structure {exists, retention: {...}}, but it does not cover permissions, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: it states the purpose, then lists Args and Returns in a clean structure. Every line earns its place, though the purpose line could be more specific about scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, one-parameter read tool with no output schema, the description provides the essential purpose and a partial return shape. It is minimally adequate but omits usage context relative to siblings and does not explain what 'exists' or the retention fields contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the sole parameter already has a title (User Id) and default (local) in the schema. The description merely restates these as 'user_id: 用户 ID(默认 local)' without adding format or constraint detail, so it does little to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 获取用户留存摘要 (get user retention summary), and enumerates the metrics included. It does not distinguish this tool from similar siblings such as user_get_activity_stats or user_get_profile, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like user_get_activity_stats, nor any prerequisites or exclusions. The description only says what it does, not when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_knowledge_addB
写入用户知识到知识库。
支持 4 类来源:framework(投资框架)、journal(交易日志)、
reading_notes(读书笔记)、insight(关键洞察,默认)。
Args:
title: 知识标题
content: 正文内容(将用于语义搜索的 embedding)
tags: 标签列表,如 ["framework:gold", "strategy:tactical"]
source_type: 来源类型,可选 framework / journal / reading_notes / insight
Returns:
{id, title, status: "added"}
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| content | Yes | ||
| source_type | No | insight |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that content is turned into an embedding used for semantic search and sketches the return payload ({id, title, status:"added"}), but says nothing about permissions, duplicate handling, or validation failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then uses an Args/Returns layout that is easy to scan. Slightly verbose with wrapped lines and repeated source-type listings (prose line plus Args line).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param write tool with no annotations and no output schema, the description covers parameters, the return shape, and the embedding side effect. The main gap is the lack of differentiation from user_knowledge_update and no note on error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: all four parameters are explained, tags gets a concrete example (["framework:gold", "strategy:tactical"]), and source_type's allowed values are listed even though the schema carries no enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: writes user knowledge into the knowledge base, and enumerates the four supported source types. An agent can distinguish it from user_knowledge_search/update/delete by the add semantics, though the description never explicitly contrasts those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given: nothing explains when to add a new record versus updating an existing one via user_knowledge_update, nor whether duplicates are tolerated. The only implicit hint is that source_type defaults to insight.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_knowledge_deleteB
从知识库中删除指定知识条目。
Args:
id: 知识条目 ID(如 uk_1722000000)
Returns:
{id, status: "deleted"}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it only says it deletes and what it returns. It never states whether deletion is permanent/irreversible, whether confirmation or special permissions are needed, or what happens to the entry afterward — critical for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the core action in the first line. The Args/Returns blocks are slightly formulaic and partly restate the schema, but they stay brief and the return shape is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the action, the single parameter, and the return payload but omits the behavioral context an agent needs — reversibility, required authorization, and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema only declares a string 'Id'), so the description must compensate. It does: it names the parameter as the knowledge entry ID and supplies a concrete format example (uk_1722000000), which the schema lacks. This is meaningful added value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: delete a given knowledge entry from the knowledge base. It is clearly distinct from user_knowledge_add/update/list/search by name, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this tool versus user_knowledge_update or the other knowledge siblings, and no context on prerequisites. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_knowledge_listA
列出用户知识条目,可按来源类型或标签筛选。
Args:
source_type: 按来源类型过滤(framework / journal / reading_notes / insight)
tag: 按标签过滤(如 "framework:gold")
limit: 返回条目数量上限,默认 50
Returns:
{count, items: [{id, title, tags, source_type, created_at}, ...]}
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| source_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return shape ({count, items: [...]}) and the default limit, which is helpful behavioral context, but says nothing about ordering, pagination beyond limit, or permissions. Moderate coverage for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in one sentence, then organizes Args and Returns cleanly. Every section earns its place; the docstring-style formatting is slightly verbose but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param tool with 0% schema coverage and no output schema, the description documents each parameter and the return structure, which is substantial. The only real gap is the missing routing guidance away from user_knowledge_search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (params have only titles and defaults, no descriptions or enums), so the description must compensate, and it does: it enumerates source_type values (framework / journal / reading_notes / insight), gives a tag example ("framework:gold"), and states limit's default of 50. This adds real meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("列出用户知识条目" = list user knowledge entries) and names the filtering scope (source type or tag). It clearly distinguishes itself as a listing operation, though it never explicitly contrasts itself with the sibling user_knowledge_search, which an agent might confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through "可按来源类型或标签筛选" but never states when to use this list tool versus user_knowledge_search, nor any prerequisite such as empty filters returning everything. Usage is inferable but no explicit when/when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_knowledge_searchA
语义搜索用户知识库。
基于向量相似度检索最相关的用户知识条目。
Args:
query: 搜索查询文本
top_k: 返回结果数量,默认 5
Returns:
{query, results: [{id, title, snippet, tags, score, source_type, created_at}, ...]}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It usefully explains the underlying mechanism (vector similarity) and provides a detailed return structure including fields like score and source_type. It does not mention side effects, permissions, or rate limits, but for a search operation the disclosed behavior is largely sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in two sentences, followed by clear Args and Returns sections. Every part earns its place, and the return structure is valuable given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search tool with no annotations and no output schema, the description covers purpose, parameters, and return format adequately. The main missing piece is usage guidance relative to sibling tools, but that is partially addressed by the stated semantic-search behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains both parameters: query as the search query text and top_k as the number of results to return (default 5). This adds meaning beyond the bare schema types, though additional constraints on top_k are not provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: semantic search of the user knowledge base, and explains the retrieval method (vector similarity) to return the most relevant entries. This distinguishes it from sibling tools like user_knowledge_list (which lists rather than searches semantically) and user_knowledge_add/update/delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given, and no alternatives are named. It does not compare itself to sibling tools such as user_knowledge_list or rag_search_knowledge, so the agent must infer the context from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_knowledge_updateA
更新已有用户知识条目。
只传需要修改的字段,未传的字段保持不变。
Args:
id: 知识条目 ID(如 uk_1722000000)
content: 新正文(可选)
title: 新标题(可选)
tags: 新标签列表(可选)
Returns:
{id, status: "updated", version}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| tags | No | ||
| title | No | ||
| content | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the key behavioral trait — partial/PATCH semantics where omitted fields are untouched — and names the return shape. It omits auth/permission requirements, error behavior, and the meaning/lifecycle of the returned version, leaving real gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by the partial-update rule and clearly delimited Args/Returns sections. Efficient and easy to scan, with only minor redundancy against the schema property titles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation tool with no annotations and no output schema, the description covers partial-update semantics and return shape, which is close to adequate. It still leaves permissions, error cases, and version semantics unexplained, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all four parameters (id, content, title, tags) are explained, including an example ID format (uk_1722000000) and which fields are optional. It adds genuine meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (更新) and resource (已有用户知识条目), and the word 已有 implies it operates on existing records, implicitly distinguishing it from user_knowledge_add/delete/list. However, it does not explicitly name or contrast against those siblings, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 只传需要修改的字段,未传的字段保持不变 gives meaningful operational guidance on how to call it (partial update). But there is no explicit when-to-use vs alternatives routing or any precondition stated, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_record_activityA
记录一次用户活跃事件(自动更新 last_active_at)。
供其他工具/Agent 在关键行为后调用,用于留存与活跃度统计。
Args:
activity_type: 事件类型,如 thought / decision / reminder / pattern / search / coaching / report
detail: 事件说明(可选,最多 500 字)
user_id: 用户 ID(默认 local)
Returns:
{recorded: true/false, activity_id}
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| user_id | No | local | |
| activity_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the automatic last_active_at update and the return shape {recorded, activity_id}. It omits failure modes and permission/validation behavior, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and side effect in the first line, then uses compact Args/Returns structure with no wasted prose. The Args section partly restates the schema, which is a minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, trigger context, all parameters, and a return summary, which is sufficient given no annotations, no output schema, and a simple 3-param shape. Only failure/error behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: all three params are documented, including example values for activity_type (thought/decision/reminder/...), the 500-char cap on detail, and the 'local' default for user_id. The activity_type examples are not declared as an enforced enum, leaving some ambiguity about allowed values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb+resource ('记录一次用户活跃事件') and discloses the side effect (auto-updates last_active_at). This clearly separates it from read-only siblings like user_get_activity_stats and user_get_retention, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the trigger context ('供其他工具/Agent 在关键行为后调用') and the downstream purpose (retention/activity stats), giving an agent a clear condition for calling it. No explicit when-not or named alternative is given, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_update_profileB
更新本地用户 profile(只更新传入字段)。
Args:
nickname / risk_profile / investment_style / experience_years / goals / settings: 需更新的字段
user_id: 用户 ID(默认 local)
Returns:
{updated: true/false, profile: {...}}
| Name | Required | Description | Default |
|---|---|---|---|
| goals | No | ||
| user_id | No | local | |
| nickname | No | ||
| settings | No | ||
| risk_profile | No | ||
| experience_years | No | ||
| investment_style | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses partial-update semantics ('只更新传入字段'), the default user_id='local', and the return shape {updated, profile}. It omits whether the profile must already exist, error/failure conditions, and permission requirements for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then uses clean Args/Returns sections with no wasted prose. Appropriately sized for a 7-parameter mutation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param mutation with a nested settings object and no annotations, the description covers partial-update behavior and the return value but is silent on existence preconditions, failure modes, and permissions. It gives an agent enough to attempt the call but not to predict edge-case outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It names all seven parameters and groups six as 'fields to update' plus user_id with its default, which adds meaning beyond the bare schema. However, it provides no type, format, or allowed values for fields like risk_profile and investment_style, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: '更新本地用户 profile' (update local user profile), which an agent can distinguish from user_create_profile and user_get_profile. It does not, however, explicitly name or contrast those siblings, so differentiation is implied by the verb rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no mention of the alternatives (user_create_profile for creation, user_get_profile for reads). The parenthetical about only updating passed fields describes behavior, not the conditions that should route an agent here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
64 tool updates
v0.1.0- First observed
broker_get_imports - First observed
broker_get_trade_stats - First observed
broker_import_statement - First observed
broker_list_trades - First observed
broker_supported_formats - First observed
coaching_abandon_coaching - First observed
coaching_coaching_compare_history - First observed
coaching_coaching_iterate_judgment - First observed
coaching_coaching_suggest_thresholds - First observed
coaching_coaching_switch_to_simple - First observed
coaching_continue_coaching - First observed
coaching_list_coaching_scenarios - First observed
coaching_start_coaching - First observed
invest_invest_roundtable - First observed
market_get_index_components - First observed
market_get_market_sentiment - First observed
market_get_stock_history - First observed
market_get_stock_quote - First observed
market_get_valuation - First observed
memory_get_behavior_patterns - First observed
memory_get_user_profile - First observed
memory_record_decision - First observed
notify_configure_notifier - First observed
notify_get_notifier_config - First observed
pattern_get_pattern_report - First observed
pattern_get_pattern_summary - First observed
pattern_run_pattern_detection - First observed
rag_ask_investment - First observed
rag_get_master_view - First observed
rag_rag_search_reports - First observed
rag_search_knowledge - First observed
reminder_delete_reminder - First observed
reminder_get_reminders - First observed
reminder_set_reminder - First observed
report_run_scheduled_report - First observed
thought_get_thought_cards - First observed
thought_record_thought - First observed
thought_search_memories - First observed
tushare_check_token_status - First observed
tushare_convert_ticker - First observed
tushare_get_balance_sheet - First observed
tushare_get_cash_flow - First observed
tushare_get_daily_price - First observed
tushare_get_financial_indicator - First observed
tushare_get_income_statement - First observed
tushare_get_index_components - First observed
tushare_get_index_daily - First observed
tushare_get_industry_classification - First observed
tushare_get_market_top_movers - First observed
tushare_get_realtime_quote - First observed
tushare_get_stock_pledge_status - First observed
tushare_get_valuation_multi - First observed
tushare_get_weekly_price - First observed
user_create_profile - First observed
user_get_activity_stats - First observed
user_get_profile - First observed
user_get_retention - First observed
user_knowledge_add - First observed
user_knowledge_delete - First observed
user_knowledge_list - First observed
user_knowledge_search - First observed
user_knowledge_update - First observed
user_record_activity - First observed
user_update_profile
TDQS
Scored across 64 tools
There are multiple overlapping tool pairs across modules: market_get_stock_quote vs tushare_get_realtime_quote, market_get_stock_history vs tushare_get_daily_price/weekly_price, market_get_index_components vs tushare_get_index_components, and memory_get_user_profile vs user_get_profile. Agents could easily pick the wrong data source or profile tool because the boundaries are not clearly separated.
Most names use snake_case with a module prefix, which is generally readable. However, several names have redundant or awkward double prefixes such as coaching_coaching_switch_to_simple, rag_rag_search_reports, pattern_run_pattern_detection, and invest_invest_roundtable, making the convention less predictable.
At 64 tools, the surface is very heavy for an agent to navigate reliably. While InvestBrain is broad, the large number of overlapping market/Tushare and profile/memory tools makes the set feel excessive rather than tightly scoped.
The server covers a wide investment workflow: market data, fundamentals, broker imports, thoughts, memory, coaching, RAG, reminders, notifications, reports, and user knowledge/profile/activity. Minor gaps exist, such as no update/delete lifecycle for thoughts or decisions and no direct notification-send tool beyond configuration tests, but core workflows are well represented.
Maintenance
Related MCP Connectors
Investment research superagent: podcasts, SEC filings, and no-code research pipelines.
Pay-per-call trading intelligence for AI agents: live market regime, trading signals, composite conv
Portfolio analytics + US-equity market research for AI clients. ChatGPT deep-research compat.
Market analyst tools + AI agent: crypto, US equities, options, Korea, fundamentals, macro, backtests
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to execute stock trading operations with built-in risk controls and human approval workflows. Supports paper trading simulation, real brokerage integration (Alpaca, Tradier), backtesting, sentiment analysis, and portfolio management while maintaining strict separation between AI intelligence and trade execution.MIT
- AlicenseNot gradedqualityDmaintenanceProvides specialized tools for portfolio health analysis, rebalance simulations, and trade execution via a single interface powered by MongoDB. It enables AI agents to manage investment portfolios while adhering to organizational governing rules, clearance guards, and rate limits.1MIT
- AlicenseNot gradedqualityAmaintenancePersonal investment management advisor that exposes tools for accounts, portfolios, trades, market data, strategies, risk control, and advice, enabling AI agents to analyze and provide structured investment recommendations.MIT

oneqaz-trading-mcpofficial
AlicenseNot gradedqualityBmaintenanceProvides AI agents with real-time financial market intelligence including regime detection, adaptive signals, macro context chains, and cross-market analysis for crypto, US, and Korean stocks.301 PyPIMIT