fincon
用凭证而非补丁来结账。
FinCon 将支付网关声称已结算的金额与银行实际收到的金额进行核对,写入复式记账分录,并把剩余部分交还——排序、定价并路由到相应的工作台。每一笔匹配都附带审计员无需我们即可重新推导的算术证明。
问题
对账软件已经能匹配 90–99% 的交易。 Trintech 宣称 99% 以上。NetSuite 自带带置信度评分助手的 N:M 规则。这个问题已经解决了,任何宣称"我们的 AI 匹配得更好"的产品,都是在一个人人都无需帮助的维度上竞争。
自动化之后仍有两项成本存活,而它们都不是匹配问题。
尾部异常回来时不附带任何原因。 银行流水自动化将一次对账从大约 47 分钟缩短到仅剩异常处理——这一个统计数字就说明了一切:已匹配的记录从来不是成本所在。但失败的 1–10% 以一条扁平队列的形式返回,财务主管只能逐行手工重新推导上下文。量降下来了。单件成本没有。
而且匹配率会衰减。 自动匹配率是维护出来的,不是一劳永逸的。一种新的供应商格式会悄悄降低匹配率,直到有人写一条规则;而规则编写被工程团队把持——所以理解异常的人永远不是能修复它的人。
财务主管今天的工作:拉取三份导出文件,在支付层级匹配(因为行级匹配不可能),把差额记为补丁,对不上时在 Excel 里耗三天,手工录入日记账,然后看着同样的尾部异常下个月原样回来。
Related MCP server: dingdawg-finance-agent
解决方案
开放输入,验证提交。 模型提出方案。确定性引擎证明。具名的人类做决定。
AI 承担三项工作,而这三项恰恰是需要它的
这不是一个外挂聊天机器人的规则引擎,也不是一个猜测算术的模型。模型被精准指向那些确定性系统无法完成的工作:
读取无人配置过的格式 | 一种我们从未见过的布局的结算文件。模型读取十二行原始数据并编写解析规范——分隔符、表头行、最小货币单位、非 ISO 日期。无需集成项目即可摄取。 |
为尾部异常命名 | 算术无法解决的内容连同引擎推导出的近似匹配一起交给模型,约 2.1 秒 内返回一个代码、一个假设和引用的证据。 |
编写明天的规则 | 你用你自己的话解决一个断点;模型归纳出一条本可预防它的确定性规则。 |
系统随时间变得更确定性,而非更智能体化。 这与智能体产品通常的演化方向相反,而这正是全部论点所在。
而且它被围栏约束,这正是你可以放心开启它的原因
语言模型在多变量计算上从 95.6% 的查表准确率跌到接近零,而且它们会自信地失败。因此模型在架构上就被排除在算术之外——下面每一道边界都是一项测试,如果有人移除它就会失败:
结账过程中零模型调用。 六个阶段,零模型调用,收据上白纸黑字。
提案不能覆盖推导出的答案。 最多
P2,且不得覆盖P0 ARITHMETIC——引擎推导出的条目甚至不会被提供给模型。不执行任何生成的代码。 没有
eval,没有exec。适配器是由封闭的解析动词词汇表读取的声明式规范。没有任何工具拥有权威。 没有一个 MCP 工具接受策略、容差、符号约定或规则集——这一点是针对生成的模式进行校验的。
每一行都有证明,并有四种诚实的结局
每一笔被接受的匹配都会产出一个算术对象,而非置信度分数:双方的记录 ID、归零的残差、消耗的容差、触发的规则。没有通过证明的匹配就不是匹配,也不会出现在匹配计数中。
match M-0412 tier T2 subset-sum rule R-017@v3
payout BANK/2026-08-14/CR +4,378.21
charges 87 × settlement rows +4,612.90
refunds 4 × settlement rows -118.40
fees 162 × settlement rows -114.02
────────────────────────────────────────────
residual 0.00 tolerance used 0.00 / 0.50
verdict PROVEN provenance P0 ARITHMETIC所有剩余项按现金影响 × 账龄排序并路由到工作台。每个条目都以复式记账结束——入账、结转、追讨或核销——以你的名义,受签名策略的双重约束。
影响
以引擎存在之前编写的标签为基准,且仅从决策日志重新推导:
自动匹配率 | 90.9% — 22 个锚点中匹配 20 个,按层级 |
误匹配 | 0.00% |
异常覆盖率 | 6 / 6 — 每个植入的缺陷都被发现 |
分类 | 4 / 6 正确 |
歧义 | 1 / 1 被检测到并拒绝而非猜测 |
日记账 | 23 条分录,账目平衡 — 且 beancount 导出文件由 beancount 自身重新加载 |
结账时间 | 约 1.4 秒,零模型调用 |
通用性是测量出来的,不是宣称出来的。 第二次对账——印度所得税部门的 Form 26AS 对 TDS 应收分类账,按 TAN + 分部 + 季度 在四月至三月财年上匹配——在同一引擎上运行,引擎零改动,由其门禁逐字节断言。
在它承认自己不知道的地方。 一次真实结账中七个条目里有四个是 E14——引擎无法说明原因——这一点被打印在尾部异常的最上方,而不是被粉饰成一个看似合理的猜测路由到错误的工作台。E09 是值得停下来思考的一个:两个不同的子集在容差内求和得到相同的贷方金额,所以不存在一个正确的答案可选,而每个返回它找到的第一个子集的工具在那里都是自信地犯错。
让助手接入它——MCP
FinCon 是一个 Model Context Protocol 服务器。问一句*"十月结账被什么阻塞了,按金额从大到小?"*,它就会读取记录、运行一次确定性结账、验证一个证明、解决一个条目并签字确认——以你的身份,因为它持有你签发的令牌。
// Claude Desktop, Claude Code, or any MCP client
{
"mcpServers": {
"fincon": { "url": "https://fincon.astutecomputer.com/mcp" }
}
}通过 Cognito 进行 OAuth,按 RFC 9728 在源站进行发现,支持动态客户端注册。或者通过 stdio 针对你自己的文件运行:make mcp。
21 个工具;其中 4 个可写入。 助手不是陌生人——它携带你的凭证,令牌上的 sub 与你的浏览器会话解析出的字符串相同。所以它能做你能做的事,而每个决定都会记录它来自哪扇门,一年后你仍能分辨哪些条目是你亲自处理的、哪些是你委托的。真正重要的边界——核销上限、预算、余额检查、无人打开过的条目——从来不是关于调用者是谁的问题,它们对智能体的约束与对人完全相同。
架构
模型提出 → 引擎证明 → 人类决定。 没有任何东西能在没有证明或没有署名的情况下跨越边界。
SOURCES ENGINE (no model, ever) RECORD
───────── ──────────────────────── ──────
bank CAMT.053 ┐ ┌──────────────────────┐
settlement ├─ intake ──▶│ block → match │──▶ verify ──┐
order register┘ │ │ T0 exact │ re-derive │
Form 26AS ┘ │ │ T1 tolerant │ from raw │
│ │ T2 subset-sum │ records │
5 proofs │ T4 declared │ ▼
row count └──────────┬───────────┘ ┌──────────────┐
control total │ │ double entry │
roll-forward unmatched │ + balance │
type/domain │ │ assertion │
idempotence ▼ └──────┬───────┘
┌────────────────┐ │
│ near-miss │ ▼
│ diagnosis │ hash-chained
│ (arithmetic) │ decision log
└───────┬────────┘ │
│ genuinely unexplained │
▼ │
╔═════════════════════════╗ │
║ MODEL (proposes only) ║ │
║ adapter synthesis ║ │
║ classification ║ │
║ rule induction ║ │
╚═══════════╤═════════════╝ │
│ P2 at best, never overwrites P0
▼ │
┌───────────────────────┐ │
│ HUMAN decides │◀────────────────┘
│ book · carry · chase │
│ · write off · sign │
└───────────┬───────────┘
▼
close pack · journal.csv
journal.beancount · POST /v1/verify证明层级,因为一次真实结账中包含无法仅凭算术推导的条目。规则是绝不无声行动,而非拒绝你无法证明的东西:
P0 ARITHMETIC 任何人都可重新推导 · P1 RULE 一条已提升并通过回归测试的规则触发 · P2 ATTESTED 具名人类批准 · P3 DECLARED 在声明了差距的情况下被接受。
托管在 AWS 上
线上地址为 https://fincon.astutecomputer.com——位于 ap-south-1 的一个 CloudFormation 堆栈。完整拆解,包括四个值得争论的决定以及这套架构刻意缺少的东西,见 docs/14-AWS.md。
Cloudflare DNS ──▶ ALB (ACM, TLS 1.3) ──▶ ECS Fargate ──┬─▶ EFS runs + uploads
:80 → :443 1 task ├─▶ Cognito identity
/healthz 30s 256cpu/512mb ├─▶ Secrets Manager
screens · API └─▶ CloudWatch Logs
· MCP /mcp选择 EFS 而非 S3,因为决策日志是仅追加且哈希链式的,写入方持有 POSIX 锁——而 flock 在 EFS 上会静默失效,这几乎终结了这个选择。公有子网,无 NAT——为单任务架构省下一个每月 32 美元的网关,换来的代价是一个只允许 ALB 进入的安全组。镜像按提交 sha 打标签,绝不使用 latest,这样回滚就有了可指名的对象。
运行
make setup # uv sync
make gen # regenerate the synthetic batches from a seed
make verify # every green gate
make serve # → http://127.0.0.1:8000/
make eval # 4 ablation arms, 9 metrics, batches A and B
make mcp # MCP on stdiomake test 和 make verify 不需要 API 密钥——模型支撑的门禁被排除并在输出中明确标注,因为一个被静默跳过却显示为绿色的门禁,正是这个仓库存在的全部理由所要对抗的失败。
无需我们即可验证
我们的主张不是*"相信我们的数字"*。把决策日志和源文件交给审计员,他们可以在一个无需账户、不触碰我们任何状态的公共端点上重新推导每一笔匹配:
curl -X POST https://fincon.astutecomputer.com/v1/verify \
-H 'content-type: application/json' -d @proof.json每个判定都会指明它是在哪个策略下产生的,并盖章标注该策略是生效中还是调用方提供——因为在别人带来的策略下产生的判定,绝不能与在我们自己的策略下产生的判定变得无法区分。
它尚不能做什么
一份只列出能做什么的 README 只是一本宣传册。
已在小规模验证 —— 数百行数据、两个网关、一种货币。
七处中断中有四处仍未命名。 已报告,而非猜测。
尾部不会记忆。 中断通过内容指纹识别,因此同一中断下个月仍可识别——但目前还没有任何信息表明*"连续第四个月"*。
settlement_3way绑定两条腿,而非三条。 网关 ↔ 银行已完成;订单登记 ↔ 网关是下一步,而收入流失正隐藏于此。一个模型、一个提示词、一个提供商,生成器和引擎出自同一作者——这正是对抗性测试集被冻结、变异测试套件存在的原因。
文档
常驻上下文——规则、词汇、八项不变量 | |
实时构建状态,附有证明每道关卡的命令输出 | |
问题、方案、权衡 | |
当前实际运行的内容 | |
流程及其价值 | |
每个界面及其回答的问题 | |
完整的 AWS 资产 | |
ADR——其中两项不可逆 |
Available Tools
21 toolsaccept_classificationA
Accept a proposed code for an exception, under your name.
propose_reclassification asks whether a code would be admissible and
writes nothing. This is the other half: it records that somebody accepted
it. Same checker, same refusals — a proposal may still not overwrite a code
the engine derived, because a guess does not outrank arithmetic no matter
who signs for it.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| run_id | Yes | ||
| rationale | Yes | ||
| exception_id | 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 provided, the description carries the behavioral disclosure burden. It states that the tool records acceptance under the caller's name, that it writes something, and that it shares refusal conditions with propose_reclassification. It also discloses a meaningful constraint: derived codes cannot be overwritten by a proposed code. It does not cover output shape or permission requirements, but the core side effects and failure conditions are transparent.
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 primary purpose and is reasonably compact. The extra sentences about same checker, refusals, and derived-code priority add real decision value rather than filler. The metaphorical phrasing 'a guess does not outrank arithmetic' is slightly less direct than the rest, but it does not undermine clarity.
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 explains the tool's role, side effects, and refusal behavior, which covers the core decision of when to use it. However, missing parameter-level guidance for required fields like rationale and run_id leaves an agent to guess at argument semantics. An output schema exists, which reduces the need to describe return values, but the overall definition is only minimally complete for a four-parameter write 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%, so the description must compensate for documenting the four required parameters. It references 'code' and 'exception' contextually, but it does not explain run_id, exception_id, code, or rationale meaning, format, or relationships. The rationale parameter is entirely undiscussed, which is a significant gap for a required field.
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 opens with a specific verb and resource: 'Accept a proposed code for an exception, under your name.' It also explicitly distinguishes itself from propose_reclassification by naming that sibling and explaining the difference in side effects, so an agent can tell the two apart clearly.
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 clearly situates this tool as the counterpart to propose_reclassification: that tool only asks and writes nothing, while this tool records acceptance. It also says the same checker and same refusals apply, giving an agent useful conditions for when acceptance may fail. It does not explicitly state prerequisites such as 'call propose_reclassification first,' but the intended workflow is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_exportA
Everything needed to re-derive a close, and nothing that requires us.
Every decision with its proof, the rule version that fired, the human who
approved the authority, the source document hashes and the adapter spec ids
that read them. how_to_verify spells out the four steps; none of them
touch our database or our network.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| run_id | 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 carries the burden and does well: it discloses that the output is self-contained, lists what is included, and notes that verification does not depend on internal systems. It does not mention side effects or pagination behavior, but 'export' plus the self-containment statement make the key traits clear.
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 sentences and front-loaded with the value proposition; the second sentence efficiently lists contents and verification behavior. It is concise, though somewhat cryptic and jargon-heavy ('re-derive a close', 'adapter spec ids') which prevents a perfect score.
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 output schema exists, so return-value coverage is not the primary gap. However, the description leaves parameter semantics unaddressed and only implicitly states when to invoke the tool, so an agent would need to infer or guess on run_id and pagination. Acceptable but not 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%, and the description provides no explanation of run_id, limit, or offset. An agent must infer that run_id selects the close to audit and that limit/offset paginate results, which is a significant gap the description does not compensate for.
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 identifies the tool as returning a complete audit package for re-deriving a close, and it enumerates concrete contents (proofs, rule versions, approvers, source hashes, adapter spec ids). It is not a tautology and is distinguishable from siblings like get_proof and verify_proof, though it never uses an explicit verb such as 'exports' or 'returns'.
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 'nothing that requires us' and the assertion that the four how_to_verify steps touch neither our database nor our network give a clear context: use this tool when an independently verifiable, self-contained audit artifact is needed. It does not explicitly name sibling alternatives or exclusions, 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.
dispose_exceptionA
End an exception in a journal entry: book, carry_forward, chase, write_off.
This moves money, and it is meant to. The item leaves the worklist, double entry is written, and the record carries your name and the fact that an agent put it there.
What it will still refuse, all of it from the loop's signed policy and
none of it from you: a write-off above the per-item ceiling, one that would
exhaust the close's write-off budget, a book on a code the taxonomy has
not promoted, and any second disposition of an item already ended. There is
no ceiling parameter and no chart parameter, so there is nothing to widen.
due_on is YYYY-MM-DD and applies to chase only.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | ||
| due_on | No | ||
| run_id | Yes | ||
| rationale | Yes | ||
| disposition | Yes | ||
| exception_id | 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 carries the full burden and does so strongly. It discloses that the operation moves money, removes the item from the worklist, writes double entry, attributes the action to the user, and lists specific refusal conditions including ceiling, budget, taxonomy, and duplicate disposition scenarios.
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 well-structured, front-loaded with the core action, and uses a bolded refusals section to make important constraints scannable. Some rhetorical phrasing such as "none of it from you" adds flavor but not essential information, keeping it from a perfect score.
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 operation's side effects, refusal policy, and the one disposition-specific parameter. It does not explain return values, but an output schema exists. For a financially significant mutation, the provided context is strong, though auth prerequisites or reversibility would improve completeness further.
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 adds meaning for disposition by listing valid values and for due_on by specifying format and that it applies only to chase. However, run_id, exception_id, rationale, and owner receive no semantic explanation beyond their names.
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—"End an exception in a journal entry"—and enumerates the four dispositions. This clearly distinguishes it from read-style siblings like get_worklist, explain_exception, and fetch_records, while also signaling it is a mutating close-out operation.
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 gives clear context for when to use the tool: to finalize an exception with a disposition. It does not name sibling alternatives or provide explicit when-not-to-use guidance, but the refusals section and phrase "the item leaves the worklist" make the intended workflow evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_exceptionC
One exception with its evidence, its records and what it is allowed to do.
E14 unexplained means no strategy matched and the engine cannot say why.
It carries the facts it has and leaves classification open on purpose:
"I do not know" out loud beats a plausible guess routed to the wrong desk.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| exception_id | 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 burden, and it does disclose an important behavioral nuance: E14 unexplained means no strategy matched, and the tool intentionally leaves classification open rather than guessing. It also indicates the tool surfaces evidence, records, and allowed actions. However, it does not state whether the operation is read-only, has side effects, or requires permissions, leaving those to inference from the tool's name and context.
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-loads the core definition in the first sentence. The E14 explanation adds useful intent context about why unexplained exceptions are left open, so it earns its place rather than being pure padding. While the poetic closing line is stylistically extra, it does reinforce a key behavioral trait without bloating the description.
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 output schema covers the return structure, and the behavioral note addresses the main edge case, but the description lacks parameter semantics and usage guidance for choosing between siblings. It relies heavily on domain assumptions about runs, exceptions, and E14 without explaining the inputs. An agent can call the tool only if it already understands the domain and how run_id and exception_id relate.
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 description never mentions run_id or exception_id. It does not explain what these identifiers refer to, how they relate, or what values are expected. The parameter names are somewhat self-explanatory, but the description adds no semantic meaning beyond the raw schema, which itself has no descriptions.
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 'One exception with its evidence, its records and what it is allowed to do,' which clearly conveys that the tool returns a single exception enriched with supporting material and permitted actions. It is distinguishable from siblings like get_proof and fetch_records, which focus on narrower pieces of evidence. However, it lacks an explicit verb like 'Returns' or 'Explains,' so the exact operation is implied rather than directly 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?
The description provides domain context about E14 unexplained but gives no explicit guidance on when to use this tool versus siblings such as get_proof, fetch_records, or get_worklist. No conditions, exclusions, or alternative-selection criteria are offered. The only implied use case is 'need details of one exception,' which is not enough to route an agent reliably.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_recordsD
The records a loop reads, a budget at a time.
Here for completeness, and worth skipping: verifying our arithmetic against records we handed you proves the sum and not the honesty. The source files, the adapter specs and the policy are all published — ingest them yourself and verify against those.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | Yes | ||
| limit | No | ||
| offset | No | ||
| source_set | 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 carries the full behavioral burden. It hints at pagination or batching ('a budget at a time') and notes that the records are 'we handed you,' but it fails to disclose read-only status, authentication requirements, side effects, or result semantics. It is more editorial than informative.
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 brief, but brevity is not clarity. The first sentence is an incomplete noun phrase, and the second sentence is a philosophical aside about verification that does not earn its place in a tool definition. The structure is not front-loaded with a clear purpose.
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?
Although an output schema exists, the tool cannot be correctly invoked based on this description: none of the parameters are explained, no usage guidance is given, and the description actively discourages use. For a four-parameter tool with no annotations, this is critically incomplete.
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 for the four parameters, but it does not. It never explains `source_set`, `limit`, `offset`, or even `loop` beyond the vague phrase 'a loop reads'; 'budget at a time' is the only indirect reference to pagination.
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 sentence, "The records a loop reads, a budget at a time," is a fragment that vaguely conveys record-fetching for a loop, but there is no explicit verb such as 'retrieves' or 'returns.' The second sentence actively calls the tool 'worth skipping,' further muddying what the tool is actually for and how it differs from 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?
The description gives no clear when-to-use guidance and does not name or contrast any sibling tools. It only says it is 'for completeness' and 'worth skipping' for verification, which is an exclusion rather than actionable direction for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authorityB
The policy, vocabulary and promoted rules governing a loop — and who signed.
Codes carry their lifecycle state: naming one grants nothing, and only a
promoted code may direct a posting. Rules carry the human who approved
them and the policy that approval was granted under; an approval is
re-checked against the policy in force wherever the rule acts, so a rule
approved under an old policy does not quietly keep its permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | 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 carries the burden and does add useful semantics: naming a code grants nothing, only a promoted code may direct a posting, and approvals are re-checked against the policy in force. However, it does not state read-only behavior, permission requirements, or edge-case 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?
Three sentences, all contributing meaningful domain context, with the core subject front-loaded in the first sentence. It is somewhat dense 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?
An output schema exists, so return values do not need to be spelled out, and the description covers non-obvious domain rules. Still, it lacks explicit usage guidance, operational side-effect or permission notes, making it only moderately complete for an unannotated 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?
The single 'loop' parameter is only implicitly described as the loop whose authority is being inspected. With 0% schema description coverage, the description partially compensates by indicating that the parameter identifies a loop, but it omits format, accepted values, and any relation to loop identifiers from sibling tools.
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 identifies the resource as 'policy, vocabulary and promoted rules governing a loop' plus signer information, and the tool name supplies the 'get' verb. It is clear about the subject but does not explicitly distinguish itself from siblings like get_proof or get_contracts.
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 is given about when to use this tool versus alternatives such as get_proof, get_close, or get_worklist. The description provides domain context but no conditions, prerequisites, or explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_closeA
A recorded close, rebuilt from its decision log.
Match rate with its tier split and its proof-tier split, what is blocked, what is waiting on a human, which authority it ran under and whether that authority's signature held. Blocking recall is reported absent rather than zero: it is measured against labelled true pairs and production has no labels — a zero there would be a claim we did not earn.
detail="summary" (the default) names each match and its proof_id without
inlining twenty proofs; get_proof returns the one you want to read.
detail="full" inlines them all and is ~59 KB. A projection, not a
permission — it changes how much of the answer travels, never what it is.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary | |
| run_id | 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 carries full behavioral burden. It discloses the unusual 'absent rather than zero' semantics for blocking recall and explains why (production lacks labelled pairs), preventing a misinterpretation. It also clarifies that the detail parameter is a projection that changes response size, not content. No contradictions.
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 somewhat long but every sentence adds value: the blocking-recall caveat is critical for accuracy, and the detail explanation is essential for correct invocation. It is front-loaded with the core purpose and then elaborates on key nuances, avoiding fluff.
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 provides all necessary details for correct invocation: what the return contains, the behavior of the detail parameter, and the alternative tool for proofs. An output schema exists, so return structure is already defined elsewhere. No critical information 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?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the detail parameter's effect (summary vs. full, ~59 KB) and that it is a projection. run_id is not described but its name is self-explanatory and it is a required identifier, which is acceptable given the context.
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 the tool returns 'a recorded close, rebuilt from its decision log' and enumerates the specific data it conveys: match rate with tier splits, proof-tier split, blocked/waiting-on-human items, the authority it ran under, and whether the signature held. It explicitly names get_proof as the sibling for reading individual proofs, which differentiates it from that alternative.
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 gives explicit guidance on the detail parameter, explaining that summary is the default and that get_proof should be used to fetch a specific proof, thereby directing the agent when to use this tool versus that sibling. It does not specify when to use this over other siblings like list_runs, but the core purpose is clear enough to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contractsA
JSON Schema for the public, semver'd shapes — Record, Proof, Policy, Event.
Published so another system can build on them. They are versioned under ADR-002: a field change is a version bump, not an edit, because an independently-written verifier that stops working is the one failure this design cannot survive.
| 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 provided, the description carries the behavioral disclosure burden. It adds meaningful context: the contracts are public, semver'd, and immutable in the sense that a field change becomes a version bump rather than an edit. However, it does not explicitly state that the tool is read-only or describe what a caller receives, leaving some behavior to inference from the name.
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 core resource: the JSON Schema for public shapes. The ADR-002 rationale earns its place by explaining why versioning is strict, which helps an agent understand the compatibility contract without adding noise.
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 an output schema, the description is largely sufficient. It tells the agent what domain shapes are covered and why the versioning behavior matters. Minor ambiguity remains around whether the tool returns the current schema set or a specific version, but the low complexity and presence of an output schema keep this from being a significant 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?
The tool has zero parameters and the schema coverage is effectively complete, so there is nothing the description needs to explain about inputs. The baseline of 4 applies because no parameter documentation burden exists.
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 identifies a specific resource — the public, semver'd JSON Schema contracts for Record, Proof, Policy, and Event — and explains their purpose. The active verb is only implied by the tool name 'get_contracts', and it does not explicitly differentiate this from sibling tools like get_events or get_proof, though the content makes the distinction fairly clear.
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: another system can build on these published contracts. However, there is no explicit statement of when to use this tool versus alternatives, no exclusions, and no mention of prerequisites. It gives context but stops short of actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsB
The typed decision log, event by event, hash-chained.
Append-only in the only sense a file can be: each event carries the hash of
the one before it, so an edit, a deletion or a reorder breaks the chain and
verify_journal says where. It does not prove custody — someone able to
rewrite the whole file can recompute the chain over anything. What it closes
is the partial edit and the truncated tail.
Paged: 62 events for a 22-payout month is 114 KB. total is always the real
total, so "here is the log" and "here is the start of the log" stay
distinguishable — which a bare list could not manage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| run_id | 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 carries full behavioral burden, and it delivers: it explains append-only semantics, how edits/reorder/truncation are detected, the custody limitation, and the paging/total semantics. It gives a concrete size example and clarifies that 'total' distinguishes a full log from a partial page. This is strong, non-obvious behavioral 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?
The description is around 100 words and each sentence adds substance, with the core concept front-loaded. The opening is a noun phrase rather than a clear verb-led statement, and some phrasing is ornate, but there is 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?
The behavioral and pagination context is valuable, but the tool has three parameters, one required, with zero schema documentation and no usage guidance. An agent still lacks the information needed to call it correctly, especially what run_id should be and how limit/offset map to paging.
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, but it never defines run_id, limit, or offset. The paging discussion implies limit/offset exist, and 'total' clarifies an output field, but an agent cannot determine what run_id refers to or how offsets behave from the description.
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 clearly identifies the resource as the 'typed decision log' and explains that it returns events in hash-chained order. It references verify_journal, which helps distinguish this from verification tools, though it does not use an explicit verb like 'retrieve' or 'list' and does not differentiate from other list/get siblings such as list_runs or fetch_records.
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 guidance on when to use get_events versus alternatives. verify_journal is mentioned, but only to explain what happens when the hash chain is broken; the description does not state when to choose get_events over list_runs, audit_export, or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_proofA
One match with its full proof — every leg, its record ids and its subtotal.
What a verifier reads before calling verify_proof. The subtotals here are
claims made by whatever produced the match; recomputing them from the
records is the entire job, and verify_proof refuses a proof whose legs do
not add up to what it says.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| match_id | 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 carries the behavioral burden. It discloses a non-obvious trait: the subtotals are claims, not verified facts, and may be rejected by verify_proof if they do not reconcile. This goes beyond the schema and helps the agent understand the data's trustworthiness.
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 compact, front-loaded with what the tool returns, and every sentence adds useful context. The wording about claims and verify_proof is distinctive without being verbose.
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 output schema covers return structure, so the description need not repeat it. The tool's workflow position, contents, and data-reliability caveat are all present. It could have mentioned where run_id and match_id originate, but that is a minor gap given the clear identifiers.
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 should compensate. It implies that match_id selects a match and run_id scopes that match, but it does not explicitly explain how the identifiers relate or where they come from. The names are self-evident, but the description adds only marginal direct parameter meaning.
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 ('get') and resource ('one match with its full proof'), and enumerates the contents: every leg, record ids, and subtotal. It also distinguishes itself from verify_proof by positioning itself as the pre-verification read step.
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 explicitly frames when to use this tool: 'What a verifier reads before calling verify_proof.' It also contrasts with verify_proof, making the workflow ordering clear. This is strong usage guidance relative to the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_worklistB
The exception queue, ranked by cash impact x age and routed to an owner.
This is the tail, and the tail is the product. An item whose code has not been ratified carries a note saying so — a proposed category rendered identically to a promoted one would hide the one thing you need in order to know how much to trust it.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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. It discloses useful non-obvious behavior: the ranking formula, owner routing, and the note attached to non-ratified codes. However, it does not explicitly state read-only semantics, pagination, or limits, though these are less critical for a get-type 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?
The description is compact and front-loaded with the essential ranking and routing facts. The middle sentence 'This is the tail, and the tail is the product' is stylistic rather than actionable, but it does not substantially bloat the definition.
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 format details are covered elsewhere. Still, run_id is left undocumented, 'owner' is unexplained, and there is no mention of pagination or usage prerequisites. This is adequate for a high-level read tool but leaves operational 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 schema has one required run_id parameter with 0% description coverage, and the description never mentions run_id, how to obtain it, or what it refers to. The parameter name is mildly self-explanatory, but the description adds no semantic value and does not 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 clearly identifies the resource as 'the exception queue' and specifies its defining characteristics: ranked by cash impact x age and routed to an owner. This is specific enough to separate it from the per-exception sibling tools, though it relies on the tool name to supply the verb.
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 is given about when to use this tool instead of alternatives such as explain_exception or dispose_exception. The phrase 'the tail is the product' conveys philosophy but not actionable selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_loopsA
The reconciliation loops this controller can close.
Each carries the policy and taxonomy governing it, the strategies it matches with in the order it tries them, the source files it expects, and any promoted rules in force. Read it before asking for a close: the loop decides what a "side", a "counterparty" and a "tolerance" mean, and nothing here is hardcoded in the engine.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 loops carry policy, taxonomy, strategy order, source files, and promoted rules, and warns that semantic terms like 'side,' 'counterparty,' and 'tolerance' are loop-defined rather than hardcoded. This goes beyond a simple list operation and helps the agent understand why the output matters.
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 three concise sentences with no wasted words: it states the resource, summarizes the payload, and gives a clear usage directive. The long second sentence is dense but justified because it enumerates the meaningful contents of each loop.
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 listing tool with an output schema present, the description is complete. It tells the agent what the tool returns, why the content matters, and when to use it relative to close operations. Nothing needed for correct 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 input schema has zero parameters, so the baseline is 4. The description adds no parameter-specific information, but none is needed because the tool takes no 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?
The description identifies the resource as 'the reconciliation loops this controller can close,' which is specific and clearly scoped. It lacks an explicit verb like 'list' or 'returns,' though the tool name supplies the action. It distinguishes the resource from sibling list tools like list_runs and list_source_sets.
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 gives explicit timing guidance: 'Read it before asking for a close.' This tells an agent when the tool should be invoked relative to close-related operations. It does not name alternative tools or exclusions, but the context is sufficient for a no-parameter list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runsC
Closes already recorded, by run id.
A run id is derived from the source bytes and the authority in force, so re-closing identical inputs under an unchanged policy reuses the id rather than creating a second record of one event.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It does add meaningful behavioral detail: run ids are deterministically derived from source bytes and the authority in force, and re-closing identical inputs under an unchanged policy reuses the id instead of duplicating the record. However, it does not disclose whether closing is irreversible, what side effects occur, or what the output represents.
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 free of filler, and the second sentence is informative. However, the first sentence is grammatically awkward ('Closes already recorded, by run id') and structurally front-loads an unclear claim. It is concise but not cleanly structured enough to earn a higher score.
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 tool with no parameters and an output schema, the description still fails to state what list_runs actually returns or how it should be invoked. The mismatch between the tool name and the described behavior leaves a critical gap: the agent cannot know whether this tool lists runs, closes runs, or does something else. It also provides no context relative to sibling 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?
The input schema has zero properties, yet the description repeatedly refers to 'run id' and 'identical inputs', implying parameters that do not exist. This confuses invocation rather than clarifying it. The description adds conceptual detail about id derivation, but no usable guidance on what arguments to provide or how to supply them.
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?
Despite using a specific verb ('Closes') and resource ('already recorded'), the description directly contradicts the tool name 'list_runs' and makes no mention of listing. This is misleading: an agent selecting by name would expect a listing behavior, and the description appears to describe a closing operation (likely belonging to the sibling 'run_close').
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 suggests using the tool 'to close already recorded' items, but gives no guidance on when to prefer this tool over alternatives like run_close or get_close. It also fails to explain any exclusions, prerequisites, or conditions. The only implicit context is that it operates on already-recorded runs by run id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_source_setsB
Which periods' source files are on disk, complete or not.
Incomplete ones are listed with the missing filenames named. A close over a half-arrived period would report a clean month over rows that never came, so it is refused — but the fact that October is short one file is the useful answer, not an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose important behavior: it lists both complete and incomplete sets, names missing filenames for incomplete ones, and warns that a close over an incomplete period would be refused. It clearly explains that the useful answer for a short month is a list showing the missing file, not an empty list. Some behavioral details (e.g., whether this mutates anything, exact output format) are missing, but the disclosure is informative.
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 compact and front-loads the core purpose in the first sentence, then expands on the important edge-case behavior. It is not bloated. The phrasing is a bit oblique ('Which periods'...' as a fragment) but overall it earns its sentences.
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 gives a good sense of output semantics (complete/incomplete, missing filenames, refusal of close over incomplete data), and there is an output schema present, which may carry return-value details. However, with no annotations, no parameter semantics, and no explicit statement about whether this is a read-only inspection tool (likely, but unstated), an agent has a moderate gap. For a one-parameter list tool with an output schema, this is just adequate.
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 description never mentions the 'loop' parameter. The only parameter is required, but an agent is given no semantic clue what a 'loop' is in this domain. The description would need to at least tie 'loop' to a period identifier or scope to make the tool callable with confidence.
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 the resource (source sets for periods) and the key behavior (listing which periods' source files are on disk, complete or not), but it uses the informal phrase "Which periods' source files are on disk" rather than a direct verb like 'List'. The sibling set includes list_runs and list_loops, so the period/source-set scope does help distinguish it. However, the intended operation is somewhat implied rather than crisply stated as 'List the source sets for each period'.
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 second part explains a subtle usage context: incomplete periods are listed with missing filenames, and a close over a half-arrived period is refused, so the tool's output provides the diagnostic answer rather than an empty list. This implicitly tells the agent when to use it (when investigating whether periods' source data is complete, e.g., before closing) and what to expect. It does not explicitly name alternatives or say 'use X instead', but the context is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_reclassificationA
Ask whether a proposed code for an exception would be admissible.
Nothing is written. The proposal goes through the same checker the live
triage path uses: the code must resolve in the registry and be assignable,
the hypothesis must exist, the evidence must cite a record the exception
actually names, and the exception's own label must not already rest on
stronger evidence than a proposal can carry. A derived E09 — one the
engine proved by enumerating two valid subsets — outranks any proposal and
is refused here, which is the rule that stopped a model overwriting a proven
answer with a guess.
A verdict of admissible: true means the proposal is well-formed and
permitted, not that it is right. Making it so is accept_classification,
which writes under the name on your credential.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| run_id | Yes | ||
| evidence | Yes | ||
| hypothesis | Yes | ||
| exception_id | 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 carries full burden and succeeds: it explicitly says 'Nothing is written', enumerates the validation checks, discloses the derived-E09 refusal rule, and clarifies that admissible: true means well-formed/permitted, not correct. This is rich behavioral context beyond the schema.
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, then proceeds through side-effect, validation, refusal, and verdict semantics, finally routing to the sibling. Each sentence adds distinct information; the only mildly explanatory backstory ('which is the rule that stopped a model...') earns its place by making the refusal rule meaningful.
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 five required parameters, zero schema descriptions, and no annotations, the description is nearly complete: it covers side effects, validation constraints, verdict meaning, and the next action. It falls just short only in not clarifying run_id's role and leaving evidence string format to inference.
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 adds meaning for code (must resolve and be assignable), hypothesis (must exist), evidence (must cite a record the exception names), and exception_id (via the exception's label), but run_id is never explained. This is substantial but incomplete compensation.
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 opens with a specific verb and object — 'Ask whether a proposed code for an exception would be admissible' — and immediately distinguishes itself from the write path by noting 'Nothing is written' and pointing to accept_classification as the action that makes the proposal real. This leaves no ambiguity about what the tool does or how it differs from its 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?
It states the tool is a non-mutating check and tells the agent the follow-up operation: 'Making it so is accept_classification', which writes under the credential. It also names when the proposal will be refused (e.g., derived E09 outranks it), giving concrete selection and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverify_closeA
Re-derive a whole recorded close from the source files on disk.
Re-ingests the sources with the published adapter specs, checks each document's sha256 against the hash the record pinned, and re-derives every proof in the log against those fresh records. Nothing is read from the memory of the process that ran the close, so this is the same thing an outside auditor does — done by us, on demand.
Three failure modes, reported apart because they mean different things.
sources_match false means you pointed it at different bytes than the close
ran on: your mistake, not our finding. refuted means the arithmetic does
not hold: our finding. missing_proofs means the record has no proof to
check, which is a gap in the evidence and deliberately does not pass.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| source_set | 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 carries full behavioral burden and exceeds it. It reveals that the operation is memory-independent, and it explains the three failure modes (sources_match, refuted, missing_proofs) including that missing_proofs deliberately does not pass.
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 core purpose is front-loaded in the first sentence, and the following paragraphs earn their place by covering provenance and failure-mode semantics. There is 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?
For a 2-parameter audit-style tool with an output schema, the description provides what an agent needs to call it correctly: what it does, why it is auditor-equivalent, and how to interpret its distinguishable failure 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 description coverage is 0%, so the description must compensate. It contextualizes source_set as source files on disk and run_id as the recorded close, but it never explicitly maps either parameter or gives format/constraint details 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 opens with a specific verb and resource: 'Re-derive a whole recorded close from the source files on disk.' It then names the concrete steps—re-ingesting sources, checking sha256, re-deriving proofs—which clearly separates it from sibling get/verify/run 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?
It gives clear context: this is the same thing an outside auditor does, done on demand, because nothing is read from process memory. It does not explicitly name when to prefer it over siblings like run_close or verify_proof, nor state exclusion conditions, so it stops 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.
run_closeA
Close one period: match, verify, post, record.
Note what this does not take. There is no policy argument, no tolerance, no rule set and no chart of accounts — a caller picks which loop and which period and nothing else, and everything that decides whether an answer is permitted is loaded from the loop's own signed bundles. You cannot widen a tolerance through this tool because there is no parameter through which to try.
Every posting it writes descends from a proof that was re-derived from raw records before anyone saw it; a match that fails re-derivation is dropped and its refusal recorded. The return value is read back out of the decision log the close just wrote, so what you see is what an auditor holding that file would see.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | Yes | ||
| source_set | 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 fully carries the burden, and it does so richly. It discloses that the tool writes postings and a decision log, that decisions are governed by pre-signed bundles, that failed re-derivation causes matches to be dropped with refusals recorded, and that the return value reflects the actual decision-log contents. This is far beyond minimal transparency.
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 purpose, then adds constraints and behavioral guarantees in a logical order. Despite being longer than average, every sentence adds meaningful information; none of it is filler or repetition of 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?
For a two-parameter tool with no annotations, the description gives strong behavioral context, return-value provenance, and constraint details. It is slightly incomplete on parameter semantics and does not point to list_loops/list_source_sets for discovering valid inputs, but the existing output schema and the behavioral detail cover most of what an agent needs to use 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%, so the description must compensate, but it does not define loop or source_set or explain how valid values are obtained. It says the caller chooses 'which loop and which period,' yet the schema parameter is source_set, not period, which may create ambiguity about what source_set represents. The only helpful semantic point is that there are no other optional parameters.
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 opening line 'Close one period: match, verify, post, record' is a specific verb plus resource and names the full operation pipeline. It distinguishes run_close from siblings like run_match (which only matches) and get_close (which returns a close), so an agent can understand what this tool is for without inspecting other definitions.
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 clearly states the tool's scope: a caller picks 'which loop and which period and nothing else.' It also explicitly excludes other kinds of behavior ('no policy argument, no tolerance, no rule set') and notes that tolerance cannot be widened here. It does not name sibling alternatives, but it gives enough context to know when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_matchA
Match one period and return the proofs — no posting, no ledger, no log.
The matching stage on its own, for a caller that wants to check our arithmetic rather than have us close the books. Returns proven matches with their full proofs, everything the verifier refused, and the exceptions raised.
The records are not inlined — 543 rows of this toy corpus is ~342 KB,
most of a context window. fetch_records pages them. But ignore them: ingest
the same source files with the published adapter spec and verify against your
own records. That is what verify_proof is for and it is the only version of
this that proves anything about our honesty.
Matches page too, proofs included, because a caller here is calling for the
proofs. match_page.next_offset is the cursor; it is null when you have
them all, and total is always the real total.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | Yes | ||
| limit | No | ||
| offset | No | ||
| source_set | 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 carries the full burden, and it delivers: it states no side effects, enumerates what the response contains (proven matches, full proofs, refused items, exceptions), explains that records are not inlined and why, and documents pagination via match_page.next_offset and total. It even discloses that this call is not evidence of honesty.
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 key purpose is front-loaded in the first two sentences, and later paragraphs add genuinely useful behavior and warning context. It is longer than strictly necessary, with some repetition of the no-posting/no-close idea, but each section 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?
Given that the output schema exists and the description covers side-effect profile, response contents, pagination, and alternatives, the tool is largely callable in context. The main gap is the undocumented input parameters, which is reflected in the parameter-semantics score; this keeps it from a perfect completeness score.
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, but it never explicitly maps loop, source_set, limit, or offset to their meanings. "One period" hints at loop and "source files" hints at source_set, but limit/offset are left wholly to inference, and the pagination discussion is about the output cursor rather than the input parameters.
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 opening line states a specific verb ("Match"), a scoped resource ("one period"), and the deliverable ("return the proofs"), then rules out side effects with "no posting, no ledger, no log." It also names verify_proof as a sibling with a different goal, so the tool is distinguishable from the close/verify family.
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 explicitly frames the use case: "for a caller that wants to check our arithmetic rather than have us close the books." It also gives an alternative and a when-not-to-trust directive: use verify_proof to prove honesty, since run_match's own output is not that proof.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sign_off_closeB
Accept the close. The terminal decision, and the strongest claim here.
Three refusals stand, and they bind an agent exactly as they bind a person at a screen, because none of them was ever a question about who was calling: books that do not balance, blocking items nobody has opened, and an unnamed signer. Delegating to an agent does not make an unopened item opened — read the worklist first, the same as anyone would.
The pack records that this signature arrived through an agent. That is not a hedge against you; it is what lets a reader a year from now tell the difference between a close somebody read and a close somebody automated.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| run_id | 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 carries the behavioral burden and mostly meets it: it discloses that the action is terminal, that refusals apply regardless of caller, and that the action records that an agent supplied the signature. It does not specify error behavior or reversibility, but 'terminal decision' covers the essential risk.
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 core statement is front-loaded and the total length is modest, but the prose is intentionally florid. Phrases like 'the strongest claim here' and 'that is not a hedge against you' add tone rather than necessary operational detail, so not every sentence 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?
The description provides useful behavioral context—preconditions, finality, audit logging—and an output schema covers return values. However, it is thin on parameter semantics and does not describe the exact workflow from receiving a close to accepting it, leaving a capable agent to infer part of the process.
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 description never mentions run_id or note, let alone what run_id identifies or how note is recorded. The only contextual link is 'the close,' which is too indirect to supply meaning for the parameters.
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 opens with 'Accept the close,' a clear verb and resource, and reinforces it with 'terminal decision' to communicate finality. This distinguishes the tool from siblings like run_close or get_close, though it never defines what a 'close' is.
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 explicit preconditions: 'read the worklist first' and three binding refusals that an agent cannot bypass. It does not name alternative tools directly, but the worklist instruction clearly points to the get_worklist sibling and the refusals tell the agent when not to sign off.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_journalB
Check a decision log's hash chain and its terminator.
The terminator states how many events precede it and what was decided; those are claims by the writer, and this checks them against the stream. A valid chain over a truncated log is still a valid chain, which is exactly why the terminator has to be there.
| Name | Required | Description | Default |
|---|---|---|---|
| run_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 provided, so the description carries the full burden of disclosing behavior. It does this well by explaining that the terminator's counts and decisions are writer claims checked against the stream, and it highlights the subtle truncation caveat. It still does not mention whether the operation is read-only or what happens on invalid chains, but the core behavior is transparent.
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 sentences with no filler. The first sentence front-loads the operation, and the second sentence earns its place by explaining why the terminator exists and why truncation alone is insufficient. Well-structured and efficient.
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 core logic is well explained, and since an output schema exists, the return value does not need to be described. However, the single input run_id is not explained, and there is no guidance on how this tool relates to sibling verification tools, leaving a meaningful contextual gap for an agent deciding how to use 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?
Schema description coverage is 0%, and the description does not mention run_id at all. The only parameter's meaning, format, or relationship to the decision log is left entirely to the schema, which only says it is a required string. The description adds no value beyond the input schema for parameter semantics.
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 opens with a specific verb ('Check') and a specific resource ('a decision log's hash chain and its terminator'), which makes the tool's purpose immediately clear. It explains the terminator's role, but it does not explicitly distinguish itself from sibling tools like verify_proof, 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?
Usage is implied: the tool should be used when you need to verify a decision log's hash chain and terminator claims. However, there is no explicit 'when to use / when not to use' guidance, and no alternative tools are named, leaving an agent to infer when verify_journal is preferable to siblings such as verify_proof or reverify_close.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_proofA
Re-derive one proof from records you hold. Stateless, and it trusts nothing.
The verifier fetches each record by id, recomputes every leg subtotal and the residual from those records, and compares against what the proof claims. It reads no stored residual, takes its sign convention from policy rather than from the proof, and refuses a proof whose claimed tolerance exceeds the policy ceiling. A proof that names a record you did not supply is refuted, not excused.
Name a loop to verify under that loop's published policy, or hand in a
policy of your own. Exactly one — there is no default, because a
verification that silently chose a policy would be deciding your constraints
for you. The verdict says which you used: a lenient policy you brought along
yields a verdict about your constraints and is stamped caller-supplied
so it cannot be quoted back as ours.
This call is how you check our work without trusting us. Take a proof out of
audit_export, ingest the source files yourself with the published adapter
spec, and run it. If it disagrees with us, that is a finding about us.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | No | ||
| proof | Yes | Evidence for one match. Immutable once emitted. | |
| policy | No | ||
| records | 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 carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals that the tool is stateless, trusts nothing, reads no stored residual, derives sign convention from policy, refuses proofs above the tolerance ceiling, refutes proofs referencing missing records, and stamps caller-supplied verdicts so they cannot be misattributed.
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 long but information-dense, with the core purpose and key behavioral traits front-loaded in the first line. Every paragraph earns its place: policy selection, trust posture, verdict stamping, and workflow all serve the agent's decision-making without fluff.
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 complex tool with nested objects and a low-schema-coverage input, the description is remarkably complete. It covers what the tool recomputes, how it treats missing records, the policy/loop exclusivity, the verdict's caller-supplied marker, and the intended workflow via audit_export — leaving little for an agent to infer or get wrong.
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 low (25%), so the description must compensate, and it largely does. It explains the meaning and relationship of proof and records ('fetches each record by id... compares against what the proof claims'), and it gives crucial semantics for loop vs. policy, including the exactly-one rule and absence of a default.
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 opens with a specific verb and resource: 'Re-derive one proof from records you hold.' It then clarifies the verification mechanism — recompute subtotals and residual from fetched records and compare against the proof's claims — which makes the tool's purpose unmistakable and distinguishes it from close-level or journal-level checks among the 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?
It gives clear, practical usage context: this is the way to 'check our work without trusting us,' and it tells the caller to pull a proof from audit_export and ingest source files. It also explains the loop-or-policy choice. However, it does not explicitly mention when to prefer an alternative sibling tool or when not to use this tool.
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.
21 tool updates
v0.0.0- First observed
accept_classification - First observed
audit_export - First observed
dispose_exception - First observed
explain_exception - First observed
fetch_records - First observed
get_authority - First observed
get_close - First observed
get_contracts - First observed
get_events - First observed
get_proof - First observed
get_worklist - First observed
list_loops - First observed
list_runs - First observed
list_source_sets - First observed
propose_reclassification - First observed
reverify_close - First observed
run_close - First observed
run_match - First observed
sign_off_close - First observed
verify_journal - First observed
verify_proof
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action: proofs, records, worklists, exceptions, loops, runs, closes, events, classifications, and authorities are all cleanly separated. Even the multiple verify tools are clearly differentiated by object type (proof, close, journal).
Nearly all tools follow a clear verb_noun pattern like get_proof, list_runs, run_close, and verify_journal. The one minor exception is audit_export, which reads as a noun phrase rather than a verb_noun action, but this does not create real confusion.
At 21 tools, the set is on the heavy side and sits at the boundary of being too large for easy navigation. The tools are individually purposeful and the financial-close domain is broad, but the count still feels dense rather than tight.
The surface covers the full lifecycle: configuration discovery, source ingestion, matching, closing, exception handling, classification, verification, audit export, and journal integrity. There are no obvious dead ends, and the refusal semantics are consistently exposed where human or policy sign-off is required.
Maintenance
Related MCP Connectors
Primary-source SEC filing intelligence and financial/disclosure reconciliation for AI agents.
AI agents for bookkeeping, reconciliation, and financial close for SMBs.
- FinStatOAuthai.finstat
Documents in, reconciled double-entry books out. Statements, invoices, receipts, matched and posted.
AI staff accountant for QuickBooks: transactions, reports, receivables, payables, month-end close
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn accounting-ops agent that reconciles payments against open orders, auto-books provably safe payments through a deterministic policy gate, and escalates exceptions to a human queue with audit trails.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to perform financial analysis, budget forecasting, compliance checks, expense categorization, and risk assessment, returning structured JSON with audit-ready governance receipts.563 npm1Business Source 1.1
- FlicenseAqualityCmaintenanceProvides AI agents with deterministic, offline finance tools for commodity margin analysis, loan covenant compliance, invoice auditing, AP exception classification, and five-day close readiness.141 npm-
- AlicenseNot gradedqualityCmaintenanceEnables AI IDEs to perform financial reconciliation through five native tools for matching invoices, detecting bundled payments, and handling bank fee variances.MIT