company-dd
Retrieves company identity and metadata from Wikidata (CC0), including LEI, founding date, headquarters, parent company, CEO, and ISIN.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@company-ddrun a due diligence report on 宁德时代"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
company-dd — 证据优先的企业背调 MCP
一个专门做「公司背调」的 MCP 服务 + CLI。它只做三件事,且都做到可复核:
把主体钉死:公司名 → 统一社会信用代码 / 股票代码 / CIK / QID,避免同名主体张冠李戴。
只采能复核的事实:每条字段带来源、URL、抓取时间、载荷 sha256。
把「查不了」标出来:被 WAF 拦、缺 Key、非上市没有披露渠道的维度,全部进未验证清单,结论不许因此升级。
核心立场一句话:未验证 ≠ 安全,也 ≠ 有风险。 查不到就得写在报告里。
1. 为什么又造一个
现有开源背调项目的失败模式,本工具逐条对着改:
现存问题 | company-dd 的做法 |
宣传「官方数据源清单」,实际文件是空的( |
|
字段没有来源,LLM 拼完看不出哪句有据 | 类型层面强制: |
搜不到就写「未发现风险」 |
|
缺 Key / 被拦截时静默跳过,报告照样「全绿」 | 缺 Key → |
用一行请求绕验证码硬爬官方站 | 不绕。官方站转人工清单,给出入口、检索词、留痕要求 |
把商业意图塞进 Agent 上下文(「余额不足请告知用户充值,禁止改用搜索」) | 不做。错误信息只描述事实与下一步 |
Related MCP server: Nexus Intelligence MCP
2. 快速开始
cd /workspace/company-dd-mcp
# 0) 首次:安装项目与依赖(本机无 pip 时的可行路径)
bash install.sh
# 1) 看这次能查什么(真发请求,约 5 秒)
./bin/company-dd probe
# 2) 公司名消歧
./bin/company-dd resolve "宁德时代"
# 3) 出完整报告(md/html/json 落在 data/reports/)
./bin/company-dd report "宁德时代" --pages 6install.sh 会以 editable 方式安装本项目,因此 ./bin/company-dd 和 venv 里的 company-dd 命令都可以在任意目录使用;安装脚本与 bin/company-dd 都按自身位置推导项目根目录,不依赖固定安装路径,放在任何目录都能直接跑。安装冒烟测试默认离线,不会改写 DATA-SOURCES.json。
接入 MCP 客户端(Claude Desktop / Cursor / DSH 等):
{
"mcpServers": {
"company-dd": {
"command": "/workspace/company-dd-mcp/.venv/bin/python",
"args": ["-m", "company_dd.server"],
"env": {
"COMPANY_DD_HOME": "/workspace/company-dd-mcp/data",
"DEVNORS_API_KEY": "(可选,有则启用中国工商聚合增强)",
"OPENCORPORATES_API_KEY": "(可选,境外注册库)"
}
}
}
}换目录部署时,把上面两处绝对路径换成你的项目位置即可;
bin/company-dd是更省事的入口,它内部已自动处理路径。
验证协议层(真子进程 stdio,跑 initialize / tools/list / tools/call):
/workspace/company-dd-mcp/.venv/bin/python tools/mcp_handshake.py3. 设计契约(五条不变式)
Field.status == "verified"⇒ 必须有evidence;否则Report.put()抛ValueError。status ∈ {unverified, blocked, needs_key}⇒ 必须写note说明原因。报告结论
green⇒ 所有severity=red_line的规则status == clear。任一红线
unverified⇒ 结论最高yellow(不许当成通过)。拦截/缺 Key 是一等公民结果,不是异常分支:它必须出现在
sources与gaps里。
区间状态另有 partial:来自聚合商(东方财富)的字段只能到这一级,必须与官方渠道交叉验证后才能升为 verified。
结论颜色:
颜色 | 条件 |
红 | 任一红线 hit |
黄 | 无 hit,但有红线 unverified,或提示项 hit |
绿 | 全部红线已核验且未命中(工具当前只在 Key 源齐全时才可能达到) |
灰 | 没有任何维度被真正核验(非上市 / 未匹配到任何可核验披露渠道) |
4. 架构
company_dd/
config.py 环境变量、Key 注入、官方站点清单
errors.py 结构化错误(code / http_status / manual_url)/ WAF 与验证码识别
http.py 统一 UA、超时、有界重试、按主机限速、拦截如实上报
models.py Field / Evidence / RuleResult / SourceStatus / Report(含不变式校验)
ledger.py 证据台账:原始载荷落盘 + sha256;报告存储
sources/
cninfo.py 巨潮资讯(官方披露):名称解析、公告、全文检索、代码→市场映射
eastmoney.py 东方财富 F10:工商照面 57 字段、股东、主要财务指标
sec_edgar.py SEC EDGAR(官方):主体、申报清单、XBRL 财务口径
wikidata.py Wikidata(CC0):LEI、成立、总部、母公司、CEO、ISIN
official_cn.py GSXT/信用中国/执行公开网/裁判文书网:可达性探测 + 人工入口
keyed.py OpenCorporates / Devnors(有 Key 才动);tyc-cli 存在性探测
registry.py 目录、探测、能力索引
collect.py 编排:探测 → 消歧 → 分辖区采集 → 信号 → 规则 → 人工步骤
rules.py 规则引擎(hit / clear / unverified 三态语义 + 结论颜色)
rules.json 12 条红线的机器可读定义(关键词、阈值、期望、理由)
report.py Markdown / HTML(三色仪表盘)/ JSON 渲染
server.py MCP 服务端(10 个工具)
cli.py 命令行
tools/
mcp_handshake.py 协议交接测试(真 stdio 子进程)
refresh_data_sources.py 实测刷新 DATA-SOURCES.json(--offline 可离线冒烟)
tests/ 离线单测,不打网络数据流:
名字 → resolve(消歧,取锚点)
→ probe(哪些源可用)
→ collect(按辖区取字段/公告/申报/财务;每次写入配台账证据)
→ signals(公告关键词命中 → 风险信号)
→ rules(12 条三态判定)
→ verdict(红/黄/绿/灰 + 理由)
→ report(MD/HTML/JSON + 未验证清单 + 人工清单)5. 数据源
完整、实测、机器可读的清单见 DATA-SOURCES.json(含每个源的真实 status / http_status / 探测时间)。
本次实测结果概览:可用 4|被拦截 5|需 Key 3(共 13 个维度)。
5.1 概览表
源 ID | 名称 | 类型 | 辖区 | 状态 | 覆盖 |
| 巨潮资讯网 | 官方 | CN | ✅ ok | A股/港股公告、全文检索、PDF 原文 |
| SEC EDGAR | 官方 | US | ✅ ok | 主体身份、申报清单、XBRL 财务口径 |
| 东方财富 F10 | 聚合商 | CN | ✅ ok | 工商照面 57 字段、十大股东、主要财务指标 |
| Wikidata | 第三方(CC0) | GLOBAL | ✅ ok | LEI、成立时间、总部、母公司、CEO、ISIN |
| 中国官方渠道打包 | 官方 | CN | ⚠️ 人工 | 公示系统/信用中国/执行公开网/裁判文书/公告网 |
| OpenCorporates | 商业 | GLOBAL | 🔑 needs_key | 境外 140+ 辖区公司注册信息 |
| Devnors Data | 商业聚合 | CN | 🔑 needs_key | 中国企业工商/司法聚合 |
| 天眼查官方 CLI | 商业(官方) | CN | 🔑 needs_key | 工商、知产、司法风险、董监高、变更记录 |
官方渠道打包说明:
official_cn是 5 个中国官方站点的集合(国家企业信用信息公示系统、信用中国、中国执行信息公开网、中国裁判文书网、人民法院公告网),它们全部被 WAF/验证码拦截,无法程序化采集,工具只会标记为blocked并在报告中给出人工入口和操作指引。
5.2 环境变量配置
需要 Key 的源通过环境变量注入,所有密钥只从环境变量读取,不落盘、不进日志、不写进报告。
环境变量 | 对应源 ID | 作用 | 获取方式 |
|
| 境外公司注册信息 | |
|
| 中国企业工商/司法聚合 | 联系 Devnors 商务 |
|
| 天眼查 CLI 授权标识 |
|
配置示例(在 shell 或 .env 文件中):
# 境外源
export OPENCORPORATES_API_KEY="your-key-here"
# 中国聚合源
export DEVNORS_API_KEY="your-key-here"
# 天眼查(推荐用 tyc login 交互登录,会自动写配置)
export TYC_TOKEN="your-token-here"天眼查 CLI 的两种登录方式:
tyc login— 交互式,浏览器扫码/账号密码,token 自动写入~/.tyc/config.json
tyc init --authorization <KEY>— 直接写入 KEY登录成功后,
tyc二进制会维护自己的 session。TYC_TOKEN环境变量是给本工具的备用路径,当 CLI 未安装或未登录时尝试回退使用。
5.3 免 Key 公开源接入详解
5.3.1 巨潮资讯网(cninfo)
是什么:深交所指定的信息披露平台,A股/港股上市公司官方公告的唯一电子化出口
接入方式:无需任何配置,直接可用
接口特征:
https://www.cninfo.com.cn/new/information/topSearch/query,POST 请求,JSON 响应返回字段:公告标题、公告时间、公告类型、PDF 下载链接、股票代码
覆盖范围:A股主板/创业板/科创板/北交所、港股(H 股)上市公司公告
限制:
非上市主体无数据
PDF 原文需二次下载(工具会尝试获取)
公告全文检索有频率限制
验证:
./bin/company-dd probe # 输出中 cninfo 应显示 status=ok
5.3.2 SEC EDGAR(sec_edgar)
是什么:美国证监会官方电子数据收集、分析和检索系统
接入方式:无需 Key,但必须在请求头中声明 User-Agent(工具已内置,格式为
company-dd-mcp/{ver} (+https://localhost/company-dd; due-diligence research tool; respects robots and rate limits))接口特征:
主体解析:
https://data.sec.gov/submissions/CIK{code}.json申报清单:
https://data.sec.gov/submissions/CIK{code}.json中的filings字段XBRL 财务数据:通过 accession number 构建 URL
返回字段:CIK、ticker、公司名、SIC 代码、申报清单(含 accessionNumber, filingDate, reportDate, primaryDocDescription)
覆盖范围:所有在美国 SEC 注册的主体(含外国私人发行人)
限制:
要求遵守爬虫协议(EDGAR 的
robots.txt)大批量请求需自行限速(工具默认 0.8 秒/主机)
XBRL 口径和财报解读需要专业知识
验证:
./bin/company-dd resolve "Apple Inc." # 应返回 CIK 320193, ticker AAPL
5.3.3 东方财富 F10(eastmoney)
是什么:国内最大的金融数据聚合平台之一,F10 资料页涵盖公司基本面
接入方式:无需 Key,直接请求
接口特征:
https://datacenter-web.eastmoney.com/api/data/v1/get,带加密参数和 cookies返回字段(工商照面):57 个字段,包括统一社会信用代码、注册地址、法定代表人、注册资本、成立日期、经营范围、十大股东、主要财务指标等
覆盖范围:A股/港股/美股上市公司
⚠️ 重要:东方财富是聚合商,不是官方源。返回的字段标记为
partial,必须与官方渠道(巨潮公告)交叉验证后才能升级为verified验证:
./bin/company-dd probe # 输出中 eastmoney 应显示 status=ok, detail="样例字段 57 个"
5.3.4 Wikidata(wikidata)
是什么:维基媒体基金会维护的开放知识库,CC0 协议
接入方式:无需 Key,通过 SPARQL 查询
返回字段:LEI(法人识别码)、成立日期、总部所在地、母公司、CEO、ISIN、行业分类
覆盖范围:全球范围内的知名实体(上市公司、大型企业、组织)
限制:
数据由社区编辑,可能滞后
不作工商凭证使用,仅作辅助参考
非上市公司覆盖稀疏
验证:
./bin/company-dd resolve "Apple" # Wikidata 应出现在候选列表中
5.4 需 Key 商业源接入详解
5.4.1 OpenCorporates(opencorporates)
是什么:全球最大的公司注册信息开放数据库,覆盖 140+ 辖区
Key 获取:https://opencorporates.com/api_info 免费注册获取
配置:
export OPENCORPORATES_API_KEY="your-key"返回字段:公司名称、注册号、注册地、成立日期、状态(active/inactive)、注册地址
适用场景:境外主体身份核验、离岸公司调查
验证:
export OPENCORPORATES_API_KEY="your-key" ./bin/company-dd probe # opencorporates 应从 needs_key 变为 ok
5.4.2 Devnors Data(devnors)
是什么:中国企业工商/司法数据聚合 API
Key 获取:联系 Devnors 商务获取
配置:
export DEVNORS_API_KEY="your-key"返回字段:工商登记信息、司法风险(被执行人/失信)、行政处罚
⚠️ 注意:
数据授权口径未公开披露,字段标记为
partial需要与官方渠道交叉验证
启用后会覆盖 RL-01(被执行人/失信被执行人)维度的
needs_key状态
验证:
export DEVNORS_API_KEY="your-key" ./bin/company-dd probe # devnors 应从 needs_key 变为 ok # 跑报告时 RL-01 应从 unverified 变为 partial 或 verified
5.4.3 天眼查 CLI(tianyancha_cli)
是什么:天眼查官方提供的命令行工具,覆盖工商登记、经营异常、行政处罚、被执行人/失信、变更记录等
接入方式(推荐):
# 安装 tyc CLI(参考 tyc 官方文档) # 交互登录 tyc login # 按提示完成验证,token 自动写入 ~/.tyc/config.json替代方式:
export TYC_TOKEN="your-token-from-tyc-init"覆盖的红线规则:RL-01(被执行人/失信)、RL-02(经营异常/吊销)、RL-03(行政处罚)、RL-05(变更记录)
⚠️ 注意:
需要商务授权,仅限本机使用
工具只检测本地 tyc CLI 是否安装并登录,不代跑任何未知子命令
登录态文件在
~/.tyc/config.json,确认文件存在且未过期
验证:
# 先确认 tyc CLI 可用 tyc --version tyc company info "宁德时代" # 应返回数据 # 然后跑 probe ./bin/company-dd probe # tianyancha_cli 应显示已安装版本号
5.5 被拦截官方站(人工核查)
以下 5 个中国官方站点全部被 WAF/验证码拦截,无法程序化采集。工具会在报告中标记为 blocked,并提供人工入口和操作指引。
国家企业信用信息公示系统
HTTP 状态:521(WAF 拦截)
覆盖:工商登记、经营异常名录、行政处罚、年报
人工操作:在首页搜索框输入企业全称 → 过滑块验证 → 核对「基础信息 / 经营异常 / 行政处罚 / 年报」各栏目
对应红线:RL-02(经营异常/吊销/注销)、RL-12(社保欠缴)
信用中国
HTTP 状态:412(WAF 拦截)
覆盖:行政处罚、失信记录、红黑名单
人工操作:进入「信用服务」→ 按企业名称搜索 → 查看「行政处罚 / 失信记录 / 红黑名单」
对应红线:RL-03(行政处罚)、RL-12(失信记录)
中国执行信息公开网
HTTP 状态:403(WAF 拦截)
覆盖:被执行人、失信被执行人、限制消费
人工操作:分别在「被执行人 / 失信被执行人 / 限制消费」三个入口按企业名称检索
对应红线:RL-01(被执行人/失信被执行人)
中国裁判文书网
HTTP 状态:200(首页可达,检索需登录/验证码)
覆盖:裁判文书、案由、当事人
人工操作:登录后按当事人名称检索,注意同名主体,按案号核对
对应红线:RL-04(劳动争议/仲裁密集)、RL-06(诉讼密集)
人民法院公告网
HTTP 状态:200(首页可达,检索需登录/验证码)
覆盖:开庭公告、送达公告
人工操作:按当事人名称检索开庭/送达公告
对应红线:RL-08(退市/立案调查相关公告)
5.6 快速验证
装好所有 Key 后,一行命令验证全链路:
# 1. 探测所有源可用性
./bin/company-dd probe
# 2. 解析一个已知主体
./bin/company-dd resolve "宁德时代"
# 3. 出完整报告(会调用所有可用源)
./bin/company-dd report "宁德时代" --pages 6
# 4. 检查报告
./bin/company-dd show <report_id>5.7 不做什么
以下事项明确不在本工具范围内(也写进 DATA-SOURCES.json 的 not_included):
不做 | 原因 |
验证码绕过 / 滑块破解 / 登录墙绕过 | 不做。被 WAF 拦住的维度如实标记为 |
个人隐私数据(手机号、身份证、住址、开房记录等) | 不做。背调对象是法人主体,不是自然人 |
商业数据无授权转售 | 不做。需要深度字段时走官方 CLI/API 并自备 Key |
对官方站分布式/高频抓取 | 不做。遵守 robots.txt,限速 0.8 秒/主机 |
6. MCP 工具面(10 个)
工具 | 用途 | 关键返回 |
| 探测所有源可用性 | 每个源 status/http_status/detail + 目录 |
| 名称消歧 | 候选 + 锚点(信用代码/代码/CIK/QID)+ 匹配度 |
| 完整背调 | 结论、12 条规则三态、命中证据、未验证清单、人工清单、文件路径 |
| 快速风险初筛 | 公告命中信号(含 PDF 链接)+ 规则状态 |
| 人工必查清单 | 官方入口 + 检索词 + 留痕要求 |
| 回填人工核查结果 | 强制 operator/method/URL 或附件,写入证据并重算结论 |
| 读取人工回填 | 操作人、时间、方法、结论、证据位置 |
| 列出历史报告 | 编号 / 主体 / 结论 / 时间 |
| 读完整报告 | 全量 JSON |
| 读证据台账 | 来源 / URL / 抓取时间 / sha256 / 原始载荷路径 |
7. 红线规则(12 条,company_dd/rules.json)
ID | 项目 | 级别 | 判定依据 |
RL-01 | 被执行人 / 失信被执行人 | 红线 | 执行公开网 / Key 源 |
RL-02 | 经营异常 / 吊销 / 注销 | 红线 | GSXT |
RL-03 | 近一年监管处罚(含税务重大违法) | 红线 | 公告关键词 ≥1 |
RL-04 | 劳动争议 / 仲裁密集 | 红线 | 公告关键词 ≥3 |
RL-05 | 法定代表人 / 主要股东频繁变更 | 红线 | 工商变更记录 |
RL-06 | 诉讼密集且多为被告(含冻结查封) | 红线 | 公告关键词 ≥4 |
RL-07 | 审计非标意见 / 更换会计师事务所 | 红线 | 公告关键词 ≥1 |
RL-08 | 退市 / 停牌 / 立案调查 | 红线 | CN 公告 ≥1;US 走 SEC 风险表单 |
RL-09 | 财务恶化(连续亏损 / 高杠杆) | 提示 | 财务口径 + 行业基准(人工) |
RL-10 | 大额股权质押 / 冻结 / 减持 | 提示 | 公告关键词 ≥2 |
RL-11 | 重大担保 / 资金占用 / 关联交易异常 | 提示 | 公告关键词 ≥3 |
RL-12 | 社保欠缴 / 欠薪公示 | 红线 | 信用中国 / GSXT |
三态语义(这是整个工具最要紧的部分):
hit:有可复核证据命中 → 列出原文链接 + 抓取时间 + sha256。
clear:覆盖该维度的源确实查过、命中低于阈值、且扫描窗口覆盖到了截止日。理由里必须写清范围,例如「120 条公告(2026-03-23 ~ 2026-09-28),已覆盖 180 天窗口,命中 0 条」。
unverified:源被拦 / 缺 Key / 实体非上市 / 窗口不足 → 查不了,进未验证清单。
结论颜色:
颜色 | 条件 |
红 | 任一红线 hit |
黄 | 无 hit,但有红线 unverified,或提示项 hit |
绿 | 全部红线已核验且未命中(工具当前只在 Key 源齐全时才可能达到) |
灰 | 没有任何维度被真正核验(非上市 / 未匹配到任何可核验披露渠道) |
8. 实测样例(真实运行结果)
主体 | 结论 | 说明 |
宁德时代(300750.SZ) | 黄 | 120 条公告覆盖 2026-03-23~2026-09-28,7 条公告类红线核验未命中;被执行/经营异常/变更/社保欠缴 4 项转人工。信用代码 |
康美药业(600518.SH) | 黄 | 60 条公告覆盖 180 天,公告类红线未命中;官方渠道 4 项转人工 |
上海卓然工程(688121.SH) | 红 | 命中 4 条红线:重大违法强制退市风险、无法表示意见审计报告、账户/募集资金被冻结、控股股东资金占用。75 条证据,每条带 PDF 链接与 sha256 |
Apple Inc.(AAPL) | 黄 | SEC 核对 40 条申报无退市/迟报表单;CN 口径规则标为「不适用于美股」而非硬套 |
华为技术有限公司 | 灰 | 非上市、官方渠道全部拦截 → 明确「未匹配到任何可核验披露渠道」,不编造 |
卓然那一条是「能不能抓到真问题」的验证:退市风险、非标审计意见、资金占用,都是官方公告里的原话,点开 PDF 就能核。
9. 配置
环境变量 | 作用 |
| 数据目录(默认 |
| 超时、重试、按主机限速 |
| 自定义 UA(SEC 要求声明联系人) |
| 启用 Devnors 中国工商聚合(字段标 partial) |
| 启用境外注册库 |
| 天眼查官方 CLI 授权环境标识;实际登录态由 |
密钥只从环境变量读取,不落盘、不进日志、不写进报告。
10. 目录与运维
/workspace/company-dd-mcp/
bin/company-dd 启动包装脚本(用 venv 解释器)
install.sh 首次安装
DATA-SOURCES.json 实测生成的数据源清单
data/reports/*.md|html|json 报告
data/raw/<report_id>/*.txt 证据原始载荷(按 sha256 复核)./bin/company-dd list # 历史报告
./bin/company-dd show <report_id> # 打印 Markdown
./bin/company-dd sources # 源目录
.venv/bin/python tools/refresh_data_sources.py # 刷新实测清单
.venv/bin/python -m pytest tests -q # 单测11. 路线图
天眼查 CLI(tyc)深度适配:已实现真实命令调用;登录后覆盖 RL-01/02/03/5,未登录仍明确
needs_key人工回填:
manual_record强制保存操作人、方法、URL 或附件,并立即重算报告结论SEC 全文检索接入(8-K item 2.04/4.02/3.01)以细化美股红线
公告正文(PDF)二次核验:标题命中后再读正文,降低误报
集团穿透:母公司/子公司逐层跑规则,输出集团风险传导路径
报告对比:同一主体两次报告的 diff(发版式背调)
License: MIT
Available Tools
10 toolsbuild_reportB
对一家公司做完整背调:探测→消歧→采集→红线判定→出结论。
announcement_pages × page_size 决定公告扫描范围;window_days 是判定 「近 N 天无某类公告」所要求的覆盖窗口,窗口没覆盖到就会被标成未验证。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| page_size | No | ||
| save_files | No | ||
| window_days | No | ||
| announcement_pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does add one genuinely useful behavioral trait — that uncovered coverage windows cause results to be labeled 'unverified' — but it omits that this is a multi-stage, likely long-running operation against external sources, and never mentions that save_files defaults to true and writes files to disk as a side effect.
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 a single dense sentence, followed by only the parameter notes that are actually needed. It is compact with no filler, though the abrupt line breaks and the lack of any structural marker between purpose and parameters slightly hurt scanability.
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?
An output schema exists, so return values need not be described. But for a complex multi-stage tool with five parameters at 0% schema coverage and no annotations, leaving save_files and name undocumented and saying nothing about duration or side effects leaves real gaps an agent must guess at.
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 does well on three of five parameters, explaining that announcement_pages × page_size defines scan breadth and that window_days is the coverage window behind the 'unverified' marking. However, `name` and especially `save_files` (a side-effect-bearing boolean) get no explanation at 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 first line states a specific verb and resource: produce a complete background-check report on one company, and it enumerates the internal pipeline (probe → disambiguate → collect → red-line judgment → conclusion). This lets an agent see it is the end-to-end orchestrator while siblings like probe_sources, resolve_company and risk_sweep are individual stages, though it never says so 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?
Usage is only implied: the pipeline sequence suggests this is the 'do everything' tool versus the single-step siblings, but there is no explicit when-to-use / when-to-prefer-a-sibling statement, and no mention of cost, runtime, or prerequisites that would make an agent choose otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evidenceA
读取报告的证据台账:来源、URL、抓取时间、sha256、原始载荷路径。
复核时先看这里:拿 URL 回原站核对,或比对 raw 目录里的原始载荷哈希。
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. The verb 读取 makes clear that it is a read operation and the field list reveals the shape of the returned ledger. It says nothing about permissions, rate limits, pagination, or behavior when a report has no evidence, which is thin for a zero-annotation tool, though the low-risk read nature limits the damage.
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, both front-loaded and purposeful: line one enumerates contents, line two directs the verification workflow. No filler whatsoever.
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?
An output schema exists, so describing the fields is somewhat redundant though useful as a preview. For a single-parameter, read-only tool, the definition is minimally adequate, but the unclear report_id semantics and the absence of any empty-result or error behavior leave 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?
The only parameter, report_id, has no schema description (0% coverage), so the description must compensate. The phrase '报告的证据台账' only weakly implies that report_id selects the report, with no format, sourcing hint (e.g., from list_reports), or behavior for an unknown id.
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 (读取/read) and resource (报告的证据台账 / a report's evidence ledger), then enumerates the returned fields: source, URL, fetch time, sha256, raw payload path. This makes it clearly distinct in scope from get_report or list_reports, 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?
Gives clear usage context and sequencing: 'during review, look here first' establishes this as the entry point of an evidence-verification workflow, and it tells the agent what to do with the data (re-check the URL at the source, compare the raw payload hash). It does not, however, state when to prefer get_report or probe_sources instead, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportB
按报告编号读取完整报告 JSON(含证据台账索引)。
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It does disclose that the return is the complete report JSON including the evidence ledger index, which is useful behavioral context, but it says nothing about behavior when the ID is unknown, permissions/auth requirements, or payload size. A read-only, non-destructive nature is only implied by '读取'.
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?
A single compact sentence with the lookup key front-loaded and no filler. It is efficient, though the brevity borders on under-specification for a tool with no annotations.
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?
Having an output schema means return shape need not be described, and the single parameter is at least named in prose. However, with zero annotations and zero schema coverage, an agent is left without error behavior, ID provenance, or guidance relative to list_reports/get_evidence.
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 contributes nothing about report_id. The description compensates partially by explaining that the parameter is a report number/ID used to look up a full report, but it gives no format, origin, or example, so the agent still cannot validate the value it passes.
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 in one clause: read the complete report JSON by report ID, and it also notes the payload includes the evidence ledger index. It is clearly distinct in kind from sibling build_report or risk_sweep, but it never distinguishes itself from list_reports (how to obtain an ID) or get_evidence (partial retrieval), so the sibling routing is left implicit.
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 list_reports or get_evidence, and no note that a valid report_id must first come from list_reports or build_report. Usage is only implied by the phrase 'by report ID'. No exclusions or preconditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsC
列出本机已生成的背调报告。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 not state that this is a read-only operation, how results are ordered, whether the list is paginated, or what the limit does — all relevant for a listing tool with a limit parameter.
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?
A single short sentence with no wasted words, and the scoping qualifier is front-loaded. It is efficient, though its brevity is part of why other dimensions are thin.
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?
An output schema exists, so return values need not be explained, but the undocumented limit parameter and the absence of any usage or behavioral context leave the definition under-specified for a tool with a sibling that fetches a single report.
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 single parameter 'limit' has 0% schema description coverage and is not mentioned in the description at all. The agent gets no meaning for it beyond its name and default of 20, so the description fails to compensate for the schema 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 (列出/list) and resource (背调报告/background-check reports) and scopes it to locally generated reports (本机已生成), which distinguishes it from get_report. It does not explicitly name a sibling, 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 versus get_report or build_report, and no mention of prerequisites or what happens when no reports exist. The agent must infer usage 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.
manual_checklistB
生成人工必查清单:官方渠道入口 + 检索词 + 留痕要求。
被 WAF/验证码拦住的维度必须由人过一遍,工具不代替人在官方系统里核对。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It usefully discloses the tool's limitation (it does not perform verification, only generates a human checklist), but it does not state whether the operation is read-only, what side effects or state changes result, or what the caller should expect from the 'name' input.
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 two short sentences, front-loaded with the purpose followed by the constraint. There is no padding, though the second sentence could more tightly connect to the parameter or output.
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 an output schema exists, return values need not be described, and the purpose plus human-verification caveat give a workable picture. However, for a tool whose only input is entirely undocumented, the definition leaves the caller guessing about the meaning of 'name', 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?
The single parameter 'name' has 0% schema description coverage, and the description does not explain what it represents (company name, report name, or dimension). The description therefore fails to compensate for the schema gap on the only input.
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 names a specific action (生成人工必查清单) and enumerates the contents of the checklist (official channel entry points, search terms, record-keeping requirements), so an agent can tell this produces a checklist rather than records findings or evidence like its siblings. It does not explicitly name or differentiate itself from tools such as manual_record or manual_findings, which keeps it shy 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?
It gives a clear usage context: dimensions that are blocked by WAF/captcha must be reviewed by a human because the tool does not substitute for human verification in the official system. This establishes when the tool is appropriate, though it offers no explicit routing to or from the alternatives like probe_sources or manual_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manual_findingsC
读取某份报告已回填的人工核查证据。
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. '读取' implies a safe read, and '已回填' hints that only completed entries are returned, but nothing states permissions, behavior for reports with no manual findings, or error conditions. The existence of an output schema covers return shape, which keeps this from being a 1.
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?
A single short sentence with the verb front-loaded and no filler. It is efficient, though its brevity borders on under-specification rather than being a model of tight structure.
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 is simple (one required param, output schema present), so little is needed, but the description omits the one thing an agent cannot get from structured fields: how this read differs from get_evidence and manual_record. That omission makes the definition incomplete for selection purposes.
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 report_id parameter, so the description must compensate. '某份报告' does establish that report_id selects the target report whose findings are returned, which is meaningful but minimal — no format, no example, no statement of what happens with an invalid id.
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 verb (读取) and a resource (人工核查证据) scoped to a report, so the basic operation is inferable. But it never distinguishes itself from siblings like get_evidence, manual_checklist, or manual_record, which sound closely related, leaving the agent to guess which one surfaces filled-in manual findings.
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 prerequisite (e.g. the report must already have manual checks recorded), and no named alternative. With three manual_*/get_evidence siblings present, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manual_recordA
将人工核查结果留痕并回写报告。
outcome 只能是 clear 或 hit;必须同时提供核查人、方法,以及官方 URL 或截图/PDF 路径。 这是唯一允许人工结果改变规则状态的入口,不能直接编辑报告 JSON。
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| note | No | ||
| method | Yes | ||
| outcome | Yes | ||
| rule_id | Yes | ||
| operator | Yes | ||
| report_id | Yes | ||
| attachment | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does well: it discloses that this is a mutating write-back that changes rule state, that it is the sole permitted path for that mutation, and that evidence (official URL or screenshot/PDF path) plus a reviewer and method are mandatory. It does not address reversibility, overwrite behavior on repeated records, or permissions, which keeps it 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?
Three short sentences, front-loaded with the action and followed by the value constraint and the exclusivity rule. No filler and no restatement of the tool 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 an eight-parameter mutation tool with zero annotation coverage, the description supplies the essential guardrails: allowed outcome values, mandatory evidence, and the exclusivity of this write path. An output schema exists so return values need not be explained, but idempotency and what happens to a previously recorded result 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% and no parameter has an enum in the schema, so the description's statement that outcome must be exactly 'clear' or 'hit' supplies constraint information available nowhere else. It also clarifies that operator, method, and a url-or-attachment pair are jointly required, covering five of eight parameters; note, rule_id, and report_id are left to inference.
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 concrete verb and resource: persist a manual review result as an audit trail and write it back into the report. It also distinguishes this path from the forbidden one ('cannot directly edit the report JSON'), which helps separate it from siblings like manual_findings or build_report, though no sibling is named 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?
It declares a strong usage constraint — this is the only entry point through which a manual result may change rule status — which implies when the tool is required. However, it never names an alternative tool or states a when-not condition relative to the sibling list, so the routing 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.
probe_sourcesA
探测全部数据源的实时可用性(真发请求)。
返回每个源的状态:ok / blocked / needs_key / error,含真实 HTTP 状态码。 先跑这个,才知道这一次能查什么、什么必须转人工。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does disclose the key trait: it actually fires real requests rather than returning cached capability data. It also enumerates the possible outcomes (ok / blocked / needs_key / error) with real HTTP codes, which tells the agent to expect partial failure and to branch on 'needs_key'. It omits cost/latency, rate limits, and whether repeated calls are safe.
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?
Three short sentences, front-loaded with what it does, then the return shape, then the usage directive. The status enumeration partially duplicates the output schema, but it is short enough that the overlap costs little.
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?
An output schema exists and the description correctly avoids re-explaining return values in depth while still naming the status taxonomy. For a zero-parameter preflight tool with no annotations, the remaining gaps (latency, whether probing is expensive, idempotence) are minor but would help an agent decide how often to call it.
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 no parameter semantics to add; baseline 4 applies. Nothing in the description misleads about inputs.
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 — probe all data sources for real-time availability — and scopes it to the entire source set rather than one source. The added line '先跑这个' positions it in the workflow relative to the manual_* siblings, so an agent can tell it is a preflight check rather than a query.
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?
Explicit ordering guidance ('run this first') plus the decision it enables — what can be queried now versus what must be escalated to manual — gives clear when-to-use context and implicitly points at the manual_* siblings. It does not state when this tool should be skipped (e.g. a fresh probe already done), so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_companyA
把公司名消歧成确定的调查主体(上市公司代码 / CIK / QID)。
返回候选列表和各自的锚点。同名主体必须先用统一社会信用代码核对, 再开始采集,否则红线判定会张冠李戴。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does reasonably well: it discloses the return shape (candidate list plus per-candidate anchors) and warns about the downstream failure mode of ambiguous names. It stops short of stating that this is a non-mutating lookup, or noting any rate/caching behavior, which keeps 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?
Two short sentences, front-loaded with what the tool does and what it returns, followed by the operational caveat. Every sentence earns its place; there is no filler or restatement of the tool 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?
This is a low-complexity single-parameter resolver with an output schema, so return-value detail is already covered structurally. The description adds the disambiguation intent and the verification caveat that an agent would otherwise miss; only input-format expectations remain underspecified.
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 'name' parameter, so the description must compensate; it clarifies that the input is a possibly ambiguous company name rather than a canonical identifier. It adds that framing but gives no guidance on accepted formats (full legal name vs. short name vs. ticker) or how to read the returned anchors, leaving a meaningful 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 gives a specific verb and resource — disambiguating a company name into a definite investigation subject — and names the identifier kinds produced (listed code / CIK / QID). It does not explicitly contrast with any sibling, but the sibling set (manual_findings, probe_sources, build_report, risk_sweep, etc.) has no resolver-like overlap, so the distinction is clear in practice.
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?
It supplies a concrete precondition and sequencing rule: same-name subjects must be verified via the unified social credit code before collection begins, otherwise red-line determinations will be misattributed. What is missing is any statement of when this tool should be skipped or what to do if disambiguation fails, but the usage context is otherwise unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
risk_sweepB
只做风险信号扫描:拉最近公告标题,按红线关键词命中列出。
适合快速初筛。返回每条的日期、标题、原文链接和命中的规则编号。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does disclose the mechanism (pulls recent titles, matches keyword rules) and what is returned per item. However it omits auth/permission expectations, scope limits, and how 'recent' is bounded, which a no-annotation read operation should ideally cover.
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?
Compact and front-loaded: the scope constraint leads, then the use case, then the return fields. No wasted wording, though the line-broken fragments read slightly choppy.
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?
An output schema exists, so the return-field sentence is somewhat redundant, and the description is reasonably complete on purpose. But with zero param documentation and no annotations, the gaps around 'name'/'pages' semantics and permission behavior leave an agent under-informed relative to a 2-param scanning 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 description coverage is 0%, so the description must compensate, yet it never explains what 'name' means (presumably the company/target) or what 'pages' controls. The phrase about fetching recent titles vaguely implies paging but adds no concrete meaning for either parameter.
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: it scans recent announcement titles for red-line keyword hits and says '只做风险信号扫描' (only does risk signal scanning), which distinguishes it from heavier report-building siblings like build_report. It stops short of naming a specific alternative sibling, so it misses the top bar.
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 implied when-to-use guidance: fast initial screening. There is no statement of when NOT to use it, no explicit alternatives, and no prerequisites, leaving usage largely inferred.
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.
10 tool updates
v0.1.0- First observed
build_report - First observed
get_evidence - First observed
get_report - First observed
list_reports - First observed
manual_checklist - First observed
manual_findings - First observed
manual_record - First observed
probe_sources - First observed
resolve_company - First observed
risk_sweep
TDQS
Scored across 10 tools
build_report is a composite that internally does probe→resolve→collect→redline, overlapping with probe_sources, resolve_company and risk_sweep, so an agent may wonder whether to call the pipeline or the atomic steps. The manual_* tools are internally distinguishable, but the composite-vs-atomic boundary is genuinely ambiguous.
All names are snake_case with verb_noun or grouping-prefix structure (probe_sources, resolve_company, list_reports, get_report, get_evidence), and the manual_* prefix cleanly groups human-in-loop operations. Minor deviation: manual_findings is noun-style—it reads more like a getter than an action, but naming is still predictable.
Ten tools is well within the sweet spot and each earns its place: three pipeline steps, one orchestration entry, a quick scan, three manual-workflow tools, and three report/evidence readers. No filler tools.
The surface covers the full lifecycle—probe, disambiguate, build, risk scan, manual checklist/record, list, read, and evidence audit. Minor gaps exist, e.g. no delete/export report, and no way to update or re-run just one section of an existing report, but agents can work around this by rebuilding.
Maintenance
Related MCP Connectors
Official-source US business, permit, and WHOIS evidence via read-only MCP tools.
Find legal companies, retrieve registry profiles and verify company facts with source evidence.
Evidence infrastructure for agents: source-backed company verification and beta import assessment.
Machine-Readable Company Profiles: find, search and read any company's Trust Profile, fact by fact.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAgent-native company intelligence. AI agents search and retrieve structured, verified company context (certifications, capabilities, capacity, lead times) for manufacturing & supply chain via 5 MCP tools.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform company due diligence, OSINT, competitive, SEO, market, finance and regulatory research through a single MCP endpoint exposing 45 tools that draw on official public APIs, local D1 mirrors, and optional self-hosted sidecars. Every response is labelled by evidence class, so inferred estimates are never presented as equivalent to official data.6 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform counterparty due-diligence by Russian INN, aggregating open registries (EGRUL, FSSP, courts, bankruptcies, finances) into a risk traffic light with source-backed signals, sanctions screening, affiliate graph, and fragmentation indicators via read-only MCP tools.60 PyPI8Apache 2.0
- AlicenseNot gradedqualityCmaintenanceLets an MCP client collect the marketing evidence behind any URL — ad libraries, social, SEO, pixels, founders, Reddit, positioning history — as a token-cheap scorecard plus citable evidence index and unknowns. Enables the agent to fetch specific evidence, follow a per-channel analysis method, validate citations and grounding, and produce a step-by-step playbook for copying the growth engine.34MIT