Skip to main content
Glama
contabridge-mcp

contabridge-mcp

by ArceeDev

bank_to_journal

Read-onlyIdempotent

Convert Norma 43 bank statements into import-ready journal entries, using rules to assign counterpart accounts and flagging unmatched movements for review.

Instructions

Turn a Norma 43 (Cuaderno 43) bank statement into journal entries ready to import.

One entry per movement: abono -> Debe bank / Haber counterpart; cargo -> Debe counterpart / Haber bank. The counterpart comes from the first matching rule; with no match it goes to suspense_account (default 555 'partidas pendientes de aplicación', padded to the bank account length) and the movement is listed in unmatched, so nothing is guessed.

Args: bank_account: The 572 subaccount of the bank, e.g. "57200001". target_format: csv (default) | a3 | contaplus_csv | contaplus_ascii. content / content_base64: The .n43 file (base64 for CP850/Latin-1 bytes). rules: Ordered list, first match wins. Each: {"account": "62800000", "contains": ["IBERDROLA"] or "regex": "...", "common_concept": "03" (AEB concept, e.g. 03 recibos, 04 transferencias, 12 comisiones), "direction": "cargo"|"abono", "concept": optional fixed text}. Text matching is case-insensitive over the movement description (own concept + record-23 texts). bank_accounts: For files with several bank accounts: {IBAN or last digits: "57200002"}. use_value_date: Date entries by value date instead of operation date. account_digits / account_split: Resize every subaccount (see convert_journal). start_entry_number: First entry number (default 1).

Input Schema

NameRequiredDescriptionDefault
rulesNo
contentNo
a3_formatNo
bank_accountYes
company_codeNo00001
account_splitNo
bank_accountsNo
decimal_commaNo
target_formatNocsv
account_digitsNo
content_base64No
use_value_dateNo
suspense_accountNo
start_entry_numberNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint false), and the description still adds real behavioral detail: one entry per movement, deterministic counterpart resolution from the first matching rule, and an explicit no-guessing fallback to `suspense_account` with the movement surfaced in `unmatched`. It does not mention whether the output is returned inline or as a file, but an output schema exists to carry that.

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?

Front-loaded with the outcome, then the entry-mapping rule, then a scannable Args block; nearly every clause earns its place. The content/content_base64 pairing and the long embedded rules example add length, though both carry genuine selection-relevant detail.

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?

For a 14-parameter conversion tool with annotations and an output schema, the description covers the decision-critical parts (input format, rule resolution, fallback behavior). The remaining gap is the handful of undocumented format/length knobs, which an agent could not confidently set without opening the 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?

Schema description coverage is 0%, so the description must carry the burden, and it does for most of the 14 params: bank_account (with a concrete example), target_format values, content vs content_base64 (including why base64 for CP850/Latin-1), rules structure, bank_accounts keying, use_value_date, suspense_account default, start_entry_number. Several parameters — a3_format, company_code, decimal_comma — are never explained anywhere, which keeps this from a 5.

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 states a specific verb and resource ('Turn a Norma 43 ... bank statement into journal entries ready to import') and immediately pins down the mapping semantics (abono -> Debe bank, cargo -> Haber bank). It is distinguishable from siblings like detect_format (format sniffing) and validate_journal (checking), and it cross-references convert_journal for the account resizing options.

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?

Usage context is clear: this is the tool for .n43/Cuaderno 43 inputs, and rules are applied in order with first-match-wins made explicit. The exclusions are weaker — nothing states when to prefer detect_format or build_journal instead, and the reference to convert_journal for account_digits/account_split is passed off rather than explained.

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