Skip to main content
Glama

tercet

机器支付的权威账本。 每一笔代理购买都会在其发生时被记录(请求 → 报价 → 签名授权),与链上结算进行对账,并且每一个差异都有一个名字——已交付未收款、已付款未交付、重放、链孤儿。tercet 从不触碰密钥、余额或支付路径:它观察并产出证据。

tercet 是一种三行诗节,三行彼此相属——在此,每一笔购买就是一个三行诗节:请求、授权、结算。但丁把他的三行诗节联缀起来,抽出任何一行都会使整首诗断裂;这本账本也用同样的方式将其条目环环相扣。

Python 包目前仍名为 mesa(工作名);将在首次 PyPI 发布时更名为 tercet。docs/ 下的项目文档用葡萄牙语撰写——它们是构建日记和各阶段设计文档;代码、数据模式和本 README 均为英文。

应用——账本,实时,六个屏幕

uv run mesa-app        # -> http://127.0.0.1:8400

01 交易明细账(你的代理购买了什么,包含衍生状态和每笔购买的事件链)· 02 tca(损耗、跨代理去重、每个交付结果的成本)· 03 风险(每个任务树的预算、人员审批、付款人护照)· 04 实验(保持透明置信区间的时间点支出策略回测)· 05 账目(三方对账、两个第三方时间戳的封存期间、每家交易对手报表、巴西税务视图)· 06 运维(从屏幕上运行经审计的各引擎——演示、采集器、导出——仅测试网)。

该应用在结构上为只读:其 Postgres 会话以 default_transaction_read_only=on 打开,因此即使它想写入账本也无法写入——tests/test_app.py 证明了这一点。真实数据始终如此;测试网和合成行会在屏幕本身上打上标签。按代码块即可查看其图例。

Related MCP server: ACA PoC MCP Tools Server

MCP 服务器 —— 面向代理的账本工具

claude mcp add tercet -- uv run mesa-mcp    # then ask: "how much did my agents spend?"

七个 READ 工具(封闭清单,已验证):status_do_livro、gasto、compras(可按条件过滤)、compra(一笔购买及其事件链)、vereditos、passaportes、fiscal。与应用相同的保证:会话在结构上为只读——MCP 服务器没有写入路径;tests/test_mcp_livro.py 证明了这一点。传输方式:stdio,本地。

导出 —— 全覆盖会计 + OECD CARF 视图

uv run python scripts/fase13/contabil_build.py   # -> contabil/<yyyy-mm>/  (universal CSV, QuickBooks, Xero + per-tx audit detail)
uv run python scripts/fase13/carf_build.py       # -> fiscal/carf/<year>/  (OECD CARF view, born as OECD11 test data)

每个时期的复式记账(``、book-keeping(已证明每个条目贷方 == 借方;微支付被非诚实聚合,并通过 6 位小数审计桥梁将每一分钱关联到各自的交易哈希)以及 CARF 视图——根据 OECD 框架(2025 年官方指南)将报告这些交易的声明性加密资产服务提供商的内容——标记为演示、合成身份、真实金额。详情和注意事项见:docs/fase13-export.md。

仅凭本 README 的一切

前提条件:uv、Docker、Python 3.11+。

# 1. dependencies + database (Postgres 17 on 127.0.0.1:5433 — your machine only)
uv sync
docker run -d --name mesa-pg -e POSTGRES_USER=mesa -e POSTGRES_PASSWORD=mesa `
  -e POSTGRES_DB=mesa -p 127.0.0.1:5433:5432 `
  -v mesa-pgdata:/var/lib/postgresql/data postgres:17
uv run python scripts/check_db.py            # migrations + hash-chain genesis, idempotent

# 2. TEST wallets (written to a local .env; never committed) + faucet USDC
uv run python scripts/setup_wallets.py
#    -> paste the buyer address into https://faucet.circle.com (USDC / Base Sepolia)
uv run python scripts/check_balance.py       # balance read on-chain

# 3. a toy seller + 10 REAL x402 payments on testnet
uv run uvicorn mesa.http.seller:app --port 8402     # terminal 1
uv run python scripts/fase1/buyer.py 10             # terminal 2 (writes the ledger)

# 4. the chain is the source of truth: collect and reconcile
uv run python -m mesa.collector              # matches (authorizer, nonce) with the ledger
uv run python -m mesa.cli                    # the verdict table, orphans in red

# 5. the product
uv run mesa-app                              # -> http://127.0.0.1:8400

成本为零真实资金:走水龙头领取 USDC,且在 exact 方案下,facilitator 承担 gas 费。

  • 发生了什么、证明什么、接下来是什么: 构建日志(docs/DIARIO.md);按阶段的设计文档见 docs/faseN.md。

  • 密钥(setup_wallets.py 生成的私钥)存放于本地 .env(stu 已 gitignore,绝不提交)。要保存在别处,请将 MESA_ENV_FILE 指向相应文件——并避免它进入同步文件夹(OneDrive/Dropbox):位于同步文件夹中的私密文件等同位于云端。

仓库地图

路径

说明

src/mesa/config.py

常量(USDC、网络、链 ID)+ 从 .env 读取的 Settings

src/mesa/db.py

账本访问——结构上只写入

src/mesa/reconcile.py

核心:三方对账,纯函数

src/mesa/collector.py

链上采集器:每个 txHash 的 Transfer + AuthorizationUsed;幂等、持久游标

src/mesa/cli.py

uv run python -m mesa.cli —— 结论表,孤儿条目以红色显示

src/mesa/http/

HTTP 轨道:玩具代币(带 chaos 模式)+ 有状态读数

src/mesa/mcp/

MCP 轨道:付费工具(消费者/礼仪规则)+ livro.py,只读成品 MCP 服务器

src/mesa/app/

Web 应用(FastAPI + Jinja2,服务端渲染,只读会话)

src/mesa/passaporte.py

付款人护照:可分发的自签名结算历史

src/mesa/contabil.py / carf.py / decripto.py

导出渲染器(复式记账 / OECD CARF / 巴西税务)

migrations/

带编号的纯 SQL——与轨道和传输无关的 schema

scripts/

环境工具 + faseN/——每阶段的可执行证明

tests/

作为 pytest 的门禁:脏数据进 → 期望的有害输出

docs/

构建日志 + 分阶段设计文档(葡萄牙语)

verificador/

独立验证器——在不信任本仓库的情况下检查账本和付款人护照

环境

uv sync
docker run -d --name mesa-pg -e POSTGRES_USER=mesa -e POSTGRES_PASSWORD=mesa `
  -e POSTGRES_DB=mesa -p 127.0.0.1:5433:5432 `
  -v mesa-pgdata:/var/lib/postgresql/data postgres:17
# 127.0.0.1 is mandatory: without it the ledger is open to any machine on the same
# Wi-Fi (docs/seguranca.md, hole #1). scripts/saude.py checks this, always.
uv run python scripts/setup_wallets.py   # generates the EOAs -> .env (NEVER committed)
uv run python scripts/check_db.py        # Postgres up + migrations + genesis
uv run python scripts/check_balance.py   # USDC balance read on-chain
uv run python scripts/saude.py           # ONE command: ruff+mypy+pytest+verifier+ports+secret scan
uv run python scripts/backup_db.py       # ledger dump -> backups/ (routine, ~5s)

水龙头:https://faucet.circle.com → USDC → Base Sepolia(每个地址 20 USDC)。Anthropic 密钥(仅供开发用途的发票轨道 agent 演示):ANTHROPIC_API_KEY=...,放入明文文件中。

运行各阶段的注册表

# Phase 1 — the ledger closes on dirty data
uv run uvicorn mesa.http.seller:app --port 8402     # terminal 1: HTTP seller
uv run python scripts/fase1/chaos_run.py            # terminal 2: chaos + reconciliation + asserts

# Phase 2 — x402 over MCP
uv run python -m mesa.mcp.seller                    # terminal 1: MCP seller (port 8403)
uv run python scripts/fase2/mcp_once.py             # terminal 2: 1 paid tool call + ledger

# Phase 10 — the payer passport (emits, verifies, gates a seller)
uv run python scripts/fase10/gate10_demo.py

# Any time: sweep the chain and reconcile
uv run python -m mesa.collector                      # testnet (seller payTo)
uv run python -m mesa.collector --pagador            # mainnet (payer-side)
uv run python -m mesa.cli

质量("完成" 有明确定义)

uv run python scripts/saude.py    # ONE command: ruff+mypy+pytest+verifier+ports+secret scan

威胁模型,以及明确不在范围之列的内容:docs/seguranca.md。

Available Tools

7 tools
compraB

Uma compra específica (por rid, vindo de 'compras') com a cadeia de eventos dela — a gaveta do blotter.

ParametersJSON Schema
NameRequiredDescriptionDefault
ridYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It mentions the event chain, which indicates what the tool returns, but it does not explicitly state that the operation is read-only or disclose any side effects, permissions, or limitations. The lack of explicit safety or mutation info leaves the agent uncertain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose. The phrase 'gaveta do blotter' is jargon that may confuse some agents, but it does not detract from overall brevity and structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return value details are not required. The description mentions the event chain, which is a key part of the output. However, given the absence of annotations, it should more clearly indicate that this is a read-only operation or mention any prerequisites. It is adequate but leaves room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for the 'rid' parameter (0% coverage). The description adds context by specifying that the rid comes from 'compras', which helps the agent understand its origin and format expectation. This provides minimal but useful semantic guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as retrieving a specific purchase by rid and includes its event chain. It distinguishes itself from sibling 'compras' (which likely lists purchases) by focusing on a single purchase with detailed context. The verb is implied but the resource and scope are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'vindo de compras' implying that the rid comes from the compras tool, giving context on when to use this tool. However, it does not explicitly state when not to use it or name alternatives beyond the implicit source. The guidance is implied rather than directly comparative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comprasC

As compras do livro, mais recentes primeiro, com filtros: estado (um de liquidado, pago-sem-entrega, entregue-sem-cobrar, cobranca-pendente, expirou-sem-uso, autorizado-pendente, sem-pagamento, fatura-conciliada, fatura-pendente, ingerido), rede (CAIP-2), trilho (x402/invoice/mpp/ap2), agente, contem (texto no domínio) e limite (1-100, padrão 20).

ParametersJSON Schema
NameRequiredDescriptionDefault
redeNo
agenteNo
contemNo
estadoNo
limiteNo
trilhoNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosure. It mentions ordering (most recent first) and the default limit, but does not state whether the operation is read-only, if there are side effects, or any authentication/rate-limit requirements. The tool appears to be a query operation, but that is not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs the core action, ordering, and all filter options, front-loading the main purpose. It is dense but not verbose, though the long list of estado values could be clearer with delimiters or bullet formatting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no schema descriptions, and no annotations, the description covers the essential filter names and some allowed values, plus ordering and default. It does not explain the meaning of 'agente' and 'contem' in detail, nor explicitly confirm read-only behavior, but the existing output schema mitigates return-format gaps. Overall adequate but with notable omissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It provides explicit allowed values for 'estado', examples for 'rede' (CAIP-2) and 'trilho' (x402/invoice/mpp/ap2), and a range/default for 'limite'. However, 'agente' and 'contem' are only named, with no added semantics beyond their titles, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves book purchases, most recent first, and enumerates the available filters. It is specific about the resource (book purchases) and the operation (listing), but it does not explicitly contrast with sibling tools like 'compra' (singular) or 'gasto', leaving some ambiguity about when this tool is the right choice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description lists filters but does not state when to use this tool versus alternatives, nor any exclusions or conditions. An agent would have to infer usage from the filter names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fiscalB

A competência fiscal BR (DeCripto, F11): nº de saídas mainnet, total em R$ pela PTAX persistida e o veredito do limiar de obrigação PF. Sem ano/mes usa a competência atual (data de SP).

ParametersJSON Schema
NameRequiredDescriptionDefault
anoNo
mesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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 default period logic and lists outputs, which is useful. However, it does not state whether the operation is read-only, whether it requires special permissions, or any errors/limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence packs the purpose, outputs, and default behavior. It is front-loaded and efficient, wasting no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two optional parameters, the description covers the essential behavior. It does not reference the output schema or mention edge cases, but given the simple interface it is adequate. Slightly more context on what 'veredito' means or typical use cases would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only names and nullability, with zero description. The description compensates by explaining the meaning of ano/mes and the default handling when omitted. This adds valuable meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (fiscal competence data) and specifies the outputs (mainnet exits, R$ total via PTAX, and PF obligation threshold verdict). It is distinct from siblings like 'gasto' or 'compras', though it lacks an explicit verb like 'get'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage guidance is that omitting year/month defaults to the current period. No mention of when to use this tool versus siblings, no scenarios, no exclusions. The agent is left to infer when this is the appropriate choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gastoB

Resumo do gasto no livro inteiro: real (mainnet) vs testnet vs invoice, por trilho, por agente, por dia, e o desperdício (mesmo recurso, mesmo byte, comprado de novo).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It implies a read-only summary operation and enumerates the aggregation dimensions, but it doesn't disclose pagination, whether the data is real-time or cached, or any limitations. The presence of an output schema covers return shape, so the gap is moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the core purpose (summary of spend in the whole book) and then lists the breakdown dimensions. It is compact and efficient, though the grouped list of dimensions is slightly dense and could benefit from clearer separation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema is present, covering return values, so the description doesn't need to explain them. The dimensions of the summary are enumerated, making it adequate for a read-only aggregation tool. The main omission is behavioral context (caching, freshness) but that's minor given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the schema trivially covers 100%, so there is nothing for the description to add about parameter semantics. The baseline of 4 for a zero-parameter tool applies, and the description's focus on what the summary contains is appropriate for a no-input query.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: summarizing spend across the whole book, broken down by mainnet/testnet/invoice, rail, agent, and day. This clear resource (the whole book) and scope distinguish it from siblings like compras (purchases) and fiscal (taxes), though it doesn't explicitly contrast itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as compras, compra, or fiscal. There is neither an explicit when-to-use nor a mention of when not to use it, leaving an agent to infer the appropriate context from the tool name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

passaportesB

Os passaportes de pagador (F10) emitidos neste checkout, RE-VERIFICADOS offline nesta chamada: íntegro?, aceito pela política?, motivos nomeados, métricas assinadas.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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. It does reveal that the operation is a re-verification performed offline and lists what is checked, implying a read-only action. However, it does not explicitly state that it has no side effects, nor does it mention permissions, error conditions, or what happens if verification fails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, efficiently conveying the action and the checks. It is not overly verbose or redundant. The structure is acceptable, though the colon-separated list could be slightly clearer, but it remains appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description covers the essential 'what' and 'how' reasonably well. It explains the purpose and the dimensions checked. However, it lacks any indication of when to invoke it relative to other tools and does not mention any prerequisites, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty with 100% coverage. Baseline for 0 params is 4. The description adds relevant contextual detail about what the call verifies and outputs, which complements the absence of parameters without needing to explain any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('RE-VERIFICADOS offline') on a specific resource ('passaportes de pagador (F10)') and lists the checks performed (integrity, policy acceptance, reasons, metrics). It is clear enough to understand the tool's core function, but it does not explicitly distinguish it from sibling tools like 'fiscal' or 'vereditos' that might also perform verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention any prerequisites, conditions, or exclusions. An agent would have no basis to choose this over a sibling beyond the name and vague purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

status_do_livroA

Até onde o livro está atualizado: cursores do coletor (bloco por rede) e a corrente de hash (seq/elos). Chame antes de confiar em qualquer número — o livro nunca finge tempo real.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait: 'o livro nunca finge tempo real', informing the agent data may not be live. It also implies read-only by instructing to call before trusting numbers, but does not explicitly state it is side-effect-free. With annotations absent, this added context raises transparency, though it could be more explicit about non-mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core 'what it reports', then a usage directive. No wasted words, efficient and structured. The dash provides a natural pause, and every clause carries necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema (which likely details the return structure), the description covers the essentials: what it does, when to call it, and a important limitation. It could mention that it is read-only, but that is implied by the status-check nature. Overall, it is nearly complete for a simple status tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the schema fully covers them. The baseline of 4 applies. The description adds value by explaining what the tool returns (cursors, hash chain), which indirectly clarifies the tool's purpose, though it says nothing about parameters since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports data freshness: 'cursores do coletor (bloco por rede) e a corrente de hash (seq/elos)'. This is distinct from sibling tools (gasto, compras, etc.) which likely return business data, not status. The verb 'status' and resource 'livro' are specific, and the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Chame antes de confiar em qualquer número', giving a clear when-to-use. However, it does not mention when not to use it or compare it to alternatives. Since siblings are data-focused, the context implies this is a prefix check, but no explicit exclusions or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vereditosC

A reconciliação de três pontas (pedido × autorização × chain) feita AGORA: contagem por veredito nomeado, com a explicação de cada um. Uma diferença nunca é um gap silencioso.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose that differences are never silent ('Uma diferença nunca é um gap silencioso') and that each verdict is explained, which is useful. However, it does not state whether this is a read-only operation, what data it reads, or any side effects. The behavioral transparency is partial, so a 2 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that leads with the core purpose. It is concise and contains no redundant filler. The poetic phrasing 'Uma diferença nunca é um gap silencioso' adds a unique behavioral note without lengthening much. It's well-structured for a one-sentence definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has no parameters and an output schema exists, the description reasonably explains what the tool does and the nature of its output (counts and explanations). However, it lacks explicit context about when to invoke it in a workflow and how it relates to the sibling tools. For a zero-param tool, it's adequate but not complete – an agent might not know if this is the right tool for a given task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4 per the rubric. There is no parameter information to add, and the description doesn't need to compensate for schema gaps. The input schema is empty, so the description naturally covers all parameter aspects. No deductions are necessary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action – three-way reconciliation (pedido × autorização × chain) with a count by named verdict and explanation of each. This is more specific than a generic 'verdicts' name. However, it does not explicitly differentiate from sibling tools like status_do_livro or fiscal, so it's clear but not fully distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. No mention of exclusions, prerequisites, or context in which this reconciliation should be performed. The phrase 'feita AGORA' suggests immediacy but not a specific usage condition. The description completely lacks usage direction.

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.

  1. 7 tool updatesv0.0.1
    • First observedcompra
    • First observedcompras
    • First observedfiscal
    • First observedgasto
    • First observedpassaportes
    • First observedstatus_do_livro
    • First observedvereditos

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct aspect of the financial domain: status check, spending summary, purchase listing, purchase detail, reconciliation verdicts, payer verification, and tax calculation. No two tools have overlapping purposes, and even the singular/plural pair (compra/compras) is clearly differentiated.

Naming Consistency4/5

All tool names are lowercase Portuguese nouns (e.g., gasto, compras, vereditos). The only deviation is status_do_livro, which uses underscores and is more descriptive. While the pattern is consistent in being noun-based, the mixed style (underscore vs. single-word) is a minor inconsistency.

Tool Count5/5

With 7 tools, the server is well-scoped for a financial reporting and reconciliation service. Each tool covers a necessary function without being overly granular or bloaty, fitting comfortably in the optimal 3-15 tool range.

Completeness5/5

The tool set covers the full read-only lifecycle for the domain: status checking, spending summaries, purchase listing and detail retrieval, three-way reconciliation, passport verification, and tax computation. There are no obvious gaps for the server's apparent purpose of audit and analysis.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides financial audit reporting and ledger query tools for AI agents, enabling generation of compliance, risk, and transaction reports and querying of transaction data, balances, and summaries from an in-memory SQLite database via MCP.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables read-only, keyless queries of timestamped, definition-backed data about AI agent payments and activity on Base, including rankings, agent records, detections, metric histories, and evidence-pack pricing, from MCP clients or the terminal.
    6
    Apache 2.0