Skip to main content
Glama

DocFig

Server Details

Bank statement PDFs to checked transactions, plus a free offline check for transaction tables.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation4/5

The four tools map to clearly different stages: converting raw statements, validating an existing transactions table, merging multiple statements, and checking quota. The only mild overlap is that convert_statement also performs balance checks internally, which could make an agent wonder whether it needs check_transactions after a conversion, but the descriptions make the free/offline vs API-key distinction clear enough.

Naming Consistency4/5

Three tools follow a clean verb_noun pattern (check_transactions, combine_statements, convert_statement) with a shared domain noun. 'usage' breaks the pattern as a bare noun, a minor but noticeable deviation.

Tool Count4/5

Four tools is a tight, focused surface where each tool earns its place in a convert → validate → combine pipeline plus a quota check. It sits at the low end of the comfortable range, so there is little slack, but nothing looks redundant.

Completeness4/5

The surface covers the full document workflow: extract transactions, validate them, merge multiple statements, and inspect remaining page quota. Minor gaps exist — there is no way to re-fetch or list a prior conversion's results by id (only combine_statements can reuse statement_ids), and no explicit error/explanation tool — but agents can work around these within the one-hour link window.

Available Tools

4 tools
check_transactionsCheck a transactions tableA
Read-onlyIdempotent
Inspect

Check a bank or credit card statement's transactions table for errors. Free and offline: no API key, nothing is uploaded. Walks the running balance row by row and reports rows where the balance does not follow, swapped debit and credit columns, sign errors, duplicated or missing rows, dates out of order, and totals that miss the opening or closing balance, each with a likely fix. Give the table as csv_text (CSV or TSV with a header row) or as rows (first row is the header). Same result as docfig check --json.

NameRequiredDescriptionDefault
rowsNoThe table as rows of cells, first row is the header, e.g. [["Date","Description","Amount","Balance"], ...]. Cells are text; numbers and null are accepted too.
csv_textNoThe table as CSV or TSV text, header row first.
filenameNoOptional name shown in the report.
delimiterNoCSV delimiter (default: detected).
date_formatNoHow to read dates like 01/02/2026 (default: detected).
statement_typeNocard: the balance is the amount owed.bank
closing_balanceNoClosing balance, to check the totals.
opening_balanceNoOpening balance, to check the totals.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantial context beyond them: no network upload, no API key, row-by-row running-balance walk, and a specific output claim ('reports rows ... each with a likely fix') plus parity with `docfig check --json`. Nothing here contradicts the annotations.

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?

Two compact sentences: the purpose and error list come first, then the input contract and the CLI-equivalence note. Every clause carries information; nothing is padding.

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

Completeness5/5

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

With 8 optional parameters and no output schema, the description carries the return-value burden itself by naming what the report contains (offending rows plus likely fixes) and by pinning down both input formats and offline behavior. An agent has everything needed to call it correctly.

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 coverage is 100%, so the baseline is 3, but the description adds the either/or relationship between the two input parameters and reiterates that the first row is the header, which is the highest-risk mis-input. It does not clarify opening/closing_balance usage beyond what the schema already states.

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 opens with a specific verb and resource ('Check a bank or credit card statement's transactions table for errors') and enumerates the exact defect classes it detects, so the agent knows precisely what the tool does. It never names the siblings (convert_statement, combine_statements) to differentiate, which keeps it just 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.

Usage Guidelines4/5

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

It gives concrete invocation context — 'Free and offline: no API key, nothing is uploaded' — and explains the two accepted input modes ('Give the table as csv_text ... or as rows'). However, it offers no when-not-to-use guidance or routing to the convert/combine siblings.

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

combine_statementsCombine several statementsAInspect

Convert several statements (or reuse statement_ids from the last hour) and combine them into one set of accounts: finds missing months (gaps), overlapping periods, duplicated transactions (kept once) and balances that do not carry over. Returns the accounts, problems, counts and links to one combined Excel or CSV file (valid one hour). Uses the user's DocFig API key.

NameRequiredDescriptionDefault
filesNoStatements to convert and combine, each with file_url or file_base64.
wait_secondsNoHow long to wait for all conversions. Default 90.
statement_idsNostatement_id values of statements converted in the last hour (from convert_statement or an earlier combine_statements call).

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the reconciliation logic (missing months, overlapping periods, duplicates kept once, non-carrying balances), the return payload (accounts, problems, counts, file links), the one-hour validity of the combined file, and that the user's DocFig API key is used. Annotations only say non-read-only, non-idempotent, open-world; the description supplies the operational detail an agent needs.

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, but front-loaded with the action and packed with useful clauses rather than filler. The parentheticals (gaps, kept once, valid one hour) are information-bearing, though splitting the return-value clause into its own sentence would improve scanability.

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?

No output schema exists, so the description's summary of the return payload and file expiry is essential and present; annotations cover the safety profile. The one notable gap is that zero parameters are required and the description never says at least one of files or statement_ids must be supplied, leaving an agent able to construct an empty call.

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?

Schema coverage is 100%, so the schema already documents file_url vs file_base64, passwords, wait_seconds and statement_ids. The description adds only the one-hour reuse window for statement_ids, which the schema states anyway, and omits the 12-file cap and 20 MB limits. Baseline 3 applies when the schema carries the weight.

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?

States a specific verb and resource ('Convert several statements ... and combine them into one set of accounts') plus the concrete processing it performs: gap detection, overlap handling, dedupe, balance carry-over. The plural 'several' and the reference to statement_ids from convert_statement distinguish it from the single-statement sibling without the agent needing the schema.

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?

Gives clear context for the two entry paths: fresh files, or reuse of statement_ids from convert_statement or a prior combine_statements call within the last hour. It does not explicitly state when to prefer convert_statement alone or check_transactions instead, so no exclusions are offered.

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

convert_statementConvert a bank statementAInspect

Convert a bank or credit card statement (PDF, scanned PDF, or a JPG, PNG or HEIC photo) into transactions, with every row checked against the balances. Give file_url or file_base64. Returns the bank, period, totals, check status, flagged rows, the first transactions and Excel and CSV download links that work for one hour. Uses the user's DocFig API key and their monthly pages (free key: 100 pages a month at https://docfig.com/api). Account numbers are masked; nothing is stored, results are deleted after one hour.

NameRequiredDescriptionDefault
file_urlNoDirect https download link to the statement (PDF, JPG, PNG or HEIC, up to 20 MB). Must be publicly reachable.
filenameNoOptional file name, e.g. march.pdf.
passwordNoPassword for a locked PDF. Used once in memory, never stored or logged.
file_base64NoThe file's bytes, base64-encoded (up to 20 MB decoded).
statement_idNoInstead of a file: the statement_id of an earlier call that was still converting, to fetch its result.
wait_secondsNoHow long to wait for the result before returning the statement_id to check again. Default 45.
max_transactionsNoHow many transactions to include (the rest are in the downloads). Default 25.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare the generic profile (readOnly=false, openWorld=true, destructive=false), while the description adds concrete behavior well beyond that: it consumes the user's API key and monthly page quota, masks account numbers, stores nothing, deletes results after one hour, and expires the download links. It also notes the password is used once in memory and never logged – exactly the kind of mutation-adjacent disclosure an agent needs.

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?

Everything is in one dense, front-loaded paragraph that leads with what the tool does, then inputs, then returns, then privacy/quota. The pricing-and-signup URL is slightly promotional but carries practical auth/quota information, so it roughly earns its place.

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

Completeness5/5

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

With no output schema, the description enumerates the return payload (bank, period, totals, check status, flagged rows, first N transactions, download links) and their one-hour lifetime. For a 7-parameter, open-world tool that is complete enough to call correctly.

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 coverage is 100%, so the baseline is 3, but the description adds real semantics: the choice between file_url and file_base64, and that statement_id is used 'instead of a file' to retrieve a still-converting job's result, which explains the wait_seconds polling loop. That is meaning beyond the field-level descriptions.

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?

A specific verb and resource ('convert a bank or credit card statement... into transactions') plus supported input formats and the balance-check behavior. It does not, however, distinguish itself from the sibling check_transactions, even though 'every row checked against the balances' overlaps with what that name implies.

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?

It does state the input alternatives ('Give file_url or file_base64', and statement_id to fetch an earlier result), which is genuine usage guidance. But it never says when to call this versus check_transactions or combine_statements, nor what prerequisites apply beyond needing a DocFig key.

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

usagePages left this monthA
Read-onlyIdempotent
Inspect

Pages used and left this month for the DocFig API key, and when they reset.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description contributes the quota context — that figures are per API key and reset periodically — but says nothing about the response shape or whether 'used' and 'left' are returned as a total or per-period.

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 carries the whole definition, front-loading the metrics (pages used, pages left) before the reset detail. Nothing is padded, though the phrasing is slightly compressed.

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?

With no output schema, the description must hint at return values, and it does: pages used, pages remaining, and the reset time. For a zero-parameter, read-only quota check, this is nearly everything an agent needs to decide to call it.

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 takes zero parameters, so the baseline of 4 applies. The description correctly signals that no inputs are required by framing the result as scoped to 'the DocFig API key'.

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 resource (pages used/left this month) and adds scope details — per DocFig API key and the reset timing — that the brief title alone does not. That makes it clearly distinct from the unrelated siblings (check_transactions, combine_statements, convert_statement).

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?

Usage is implied: an agent would call this to check remaining quota before hitting limits. However there is no explicit when-to-use statement, no mention of what to do when pages run out, and no named alternative — though none of the siblings are alternatives here.

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. 4 tool updates
    • First observedcheck_transactions
    • First observedcombine_statements
    • First observedconvert_statement
    • First observedusage

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Converts PDF bank statements into structured data (Markdown, JSON, CSV, JSONL) with verified transactions and balance checks, enabling agents to audit numbers.
    5
    0
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Converts customer-supplied PDF bank statements into checked Excel, CSV, or JSON with balance validation. Runs locally with your own MainBook API key or against MainBook's hosted endpoint, and it never connects to bank accounts.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables parsing German bank statement PDFs into structured, validated transaction data, exporting all transactions as German-style CSV, and verifying statement totals via proof calculations, all locally within MCP-compatible clients.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants such as Claude, Cursor and VS Code to turn PDF bank statements into structured transactions or import-ready CSV, OFX, QFX, QBO and Xero CSV files. Handles password-protected, scanned and multi-page statements, returning the data or saving the converted file next to the original PDF.
    5
    90 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources