Skip to main content
Glama

tercet

El libro de registro para los pagos entre máquinas. Cada compra de un agente se registra tal como ocurre (solicitud → cotización → autorización firmada), se compara con la liquidación en cadena, y cada diferencia recibe un nombre — entregado-pero-no-cobrado, pagado-sin-entrega, replay, huérfano-de-cadena. tercet nunca toca las claves, los saldos ni la vía de pago: observa y produce evidencia.

Un terceto es una estrofa de tres versos que van juntos — aquí, cada compra es una: la solicitud, la autorización, la liquidación. Dante encadenó sus tercetos para que ninguno pudiera sacarse sin romper el poema; este libro de registro encadena sus entradas de la misma manera.

El paquete de Python todavía se llama mesa (nombre de trabajo); pasará a llamarse tercet con el primer lanzamiento en PyPI. La documentación del proyecto en docs/ está escrita en portugués — es el diario de construcción y los documentos de diseño por fases; el código, los esquemas y este README están en inglés.

La aplicación — el libro, en vivo, en seis pantallas

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

01 blotter (lo que compraron tus agentes, con el estado derivado y la cadena de eventos de cada compra) · 02 tca (desperdicio, dedupe entre agentes, costo por resultado entregado) · 03 risk (presupuesto por árbol de tareas, aprobaciones humanas, el pasaporte del pagador) · 04 lab (prueba de la política de gasto en cualquier momento, con intervalos de confianza honestos) · 05 books (conciliación de tres vías, períodos sellados con dos sellos de tiempo de terceros, estado por entidad, vista fiscal de Brasil) · 06 operations (ejecutar los motores auditados desde la pantalla — demo, recolectores, exportaciones — solo testnet).

La aplicación es solo de lectura por construcción: su sesión de Postgres se abre con default_transaction_read_only=on — así que no puede escribir en el libro de registro ni siquiera queriendo; tests/test_app.py lo demuestra. Datos reales siempre; las filas de testnet y las sintéticas se etiquetan en la propia pantalla. Pulsa cualquier píldora para ver su leyenda.

Related MCP server: ACA PoC MCP Tools Server

El servidor MCP — el libro en forma de herramientas para agentes

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

Siete herramientas READ (lista cerrada, probada por test): status_do_livro, gasto, compras (filtrable), compra (una compra + su cadena de eventos), vereditos, passaportes, fiscal. La misma garantía que la aplicación: la sesión es estructuralmente de lectura — el servidor MCP no tiene vía de escritura; tests/test_mcp_livro.py lo demuestra. Transporte: stdio, local.

Las exportaciones — contabilidad universal + vista CARF de la OECD

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)

Un diario de partida doble por período (débitos == créditos, demostrado; los micro-pagos se agregan de manera honesta, con un puente de auditoría de 6 decimales que ata cada céntimo a un hash de transacción), la vista CARF — lo que un proveedor de servicios de activos digitales tendría que comunicar sobre esas transacciones en el marco de la OECD (guía oficial de julio de 2025) — etiquetado como demo, identidades ficticias, números reales. Detalles y advertencias: docs/fase13-export.md.

Desde cero, con solo este README

Requisitos: 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

Cuesta cero dinero real: USDC de la faucet y, bajo el esquema exact, el facilitador paga el gas.

  • Qué ha pasado, qué ha demostrado, qué next: docs/DIARIO.md (portugués) — el diario de construcción por tarea; los documentos de diseño de cada fase viven en docs/faseN.md.

  • Secretos (las llaves privadas que genera setup_wallets.py) van a un .env local (en gitignored, nunca se guardan). Para mantenerlos en otro lugar, apunta MESA_ENV_FILE a ese archivo — y mantenlo fuera de las carpetas sincronizadas (OneDrive/Dropbox): una llave en una carpeta sincronizada es una llave en la nube.

Mapa del repositorio

Path

Qué se puede descubrir aquí

src/mesa/config.py

Constanteria (USDC, network, chain id) + Settings de .env

src/mesa/db.py

Acceso al libro — solo descubría por construcción

src/mesa/reconcile.py

El corazón: conciliación de todas las partes, en función pura

src/mesa/collector.py

Recolector on-chain: Transfer + AuthorizationUsed por txHash; idempotente, con cursor persistido

src/mesa/cli.py

uv run python -m mesa.cli — la tabla de juicios, los huérfanos en rojo

src/mesa/http/

La vía HTTP: vendedor de juguete (con modos de caos) + comprador instrumentado

src/mesa/mcp/

MCP: vía de herramientas de pago (vendedor/comprador) + livro.py, el servidor MCP de producto de solo lectura

src/mesa/app/

La aplicación web (FastAPI + Jinja2, renderizado en servidor, sesión de solo lectura)

src/mesa/passaporte.py

El pasaporte del pagador: historial de liquidación portátil y autodidiado

src/mesa/contabil.py / carf.py / descripto.py

Los cierres de exportación — contabilidad / CARF OECD / Brasil

migrations/

SQL puro, numerado — schema agnóstico (independiente de la vía)

scripts/

Utilidades de entorno + faseN/ — las pruebas ejecutables de cada fase

tests/

Los filtros de pytest: entrada sucia → clasificación esperada

docs/

Diario de construcción + documentación de diseño por fase (portugués)

verificador/

Verificadores autónomos — esto revisa el libro y los pasaportes sin decirnos que confíes en este repo

Entorno

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)

Faucet: https://faucet.circle.com → USDC → Base Sepolia (20 USDC / 2h por dirección). Clave de Anthropic (solo para la demo del agente de riel de facturas): ANTHROPIC_API_KEY=... en el archivo de entorno con los secretos.

Ejecuta las pruebas de cada fase

# 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

Calidad ("done" tiene una definición)

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

Podestá de amenazas y lo que queda fuera de alcance, por su nombre: 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