Skip to main content
Glama
fintaro-ai

fintaro-mcp

Official
by fintaro-ai

fintaro-mcp

A Model Context Protocol server that lets an MCP-capable agent (Claude Desktop, etc.) read your Fintaro invoices and transactions and upload receipts — over the Fintaro API gateway, authenticated with a scoped, bring-your-own ftk_ API key.

The server is read-mostly and PII-safe by construction: get_invoice returns a narrow projection that never includes raw OCR text, raw extraction JSON, or tax-IDs/emails, so attacker-controlled invoice content cannot be injected into the agent's context.

Tools

Tool

What it does

Required scope

whoami

Show the organization, scopes, and expiry the key is bound to

upload_invoice(file_path)

Upload a local PDF/PNG/JPEG/WebP receipt (≤ 25 MB)

invoices:write

get_invoice(invoice_id)

Narrow, PII-free summary of one invoice

invoices:read

list_invoices()

Narrow, PII-free summaries of the org's invoices

invoices:read

list_transactions()

The org's bank transactions

transactions:read

list_unmatched()

Transactions still missing a receipt

transactions:read

Prompt: monatsabschluss_check — a guided pre-close review that uses list_unmatched to find transactions still without a receipt.

Related MCP server: Invoice4U MCP

Agent skills

Ready-to-use, copy-paste skill definitions that teach an MCP-capable agent real Fintaro workflows over these tools live in skills/ — onboarding/setup, the pre-close (Monatsabschluss) review, receipt upload, and an invoice/transaction review. Each is a SKILL.md usable as an agent skill or as a standalone prompt template.

Mint an API key

  1. In Fintaro, open Settings → API keys and create a key.

  2. Grant the minimum scopes for what you need:

    • read-only review: invoices:read, transactions:read

    • plus receipt upload: add invoices:write

  3. Copy the ftk_… key once (it is shown only at creation) and store it in your MCP client's environment. The organization is derived from the key — there is no org parameter to pass.

Configuration

Variable

Required

Default

Notes

FINTARO_API_KEY

yes

the ftk_ key

FINTARO_BASE_URL

no

https://api.fintaro.ai/api/v1

must be https://

The server rejects any tool call without FINTARO_API_KEY or with a non-https base URL (the configuration is validated on the first tool invocation).

Client config (uvx)

{
  "mcpServers": {
    "fintaro": {
      "command": "uvx",
      "args": ["fintaro-mcp"],
      "env": {
        "FINTARO_API_KEY": "ftk_your_scoped_key"
      }
    }
  }
}

Onboarding a tester

See ONBOARDING.md for a ready-to-send tester summary and a copy-paste onboarding prompt for an MCP-capable agent. The package is not on PyPI yet, so uvx fintaro-mcp does not resolve on its own. Until it is published, install straight from this repo:

{
  "mcpServers": {
    "fintaro": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/fintaro-ai/fintaro-mcp", "fintaro-mcp"],
      "env": { "FINTARO_API_KEY": "ftk_your_scoped_key" }
    }
  }
}

Alternatively distribute a built wheel (pip wheel . -w dist --no-deps) and configure the client with uvx --from <path>/fintaro_mcp-*.whl fintaro-mcp.

Development

python3 -m pip install -e ".[dev]"
python3 -m pytest -v

Available Tools

6 tools
get_invoiceA

Return a narrow, PII-free summary of a single invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_idYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description provides basic behavioral info (read-only, PII-free) but lacks details on authentication, error handling, or side effects. It adds value but could be more comprehensive.

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 a single sentence that is front-loaded with the action ('Return') and contains no extraneous words, making it highly efficient.

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

Completeness2/5

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

Given the lack of output schema and no annotations, the description does not explain what fields are in the summary or handle error cases, leaving the agent with incomplete understanding of the tool's full behavior.

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

Parameters2/5

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

Schema coverage is 0%, and the description does not explicitly explain the invoice_id parameter beyond implying it identifies the invoice. The parameter's role is inferred but not detailed, which is insufficient for full clarity.

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 returns a summary of a single invoice, specifying it is narrow and PII-free, which distinguishes it from siblings like list_invoices (multiple invoices) and upload_invoice (create).

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?

The description implies use when needing a summary of one invoice, but does not explicitly state when not to use it or mention alternatives like list_invoices for broader queries.

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

list_invoicesA

List one page of the organization's invoices as narrow, PII-free summaries.

Newest-first. One call returns one page; if hasMore is true, call again with offset advanced by limit (clamped to 100). total is unknown (the gateway list endpoint returns no count).

Returns {"invoices", "total", "offset", "limit", "returned", "hasMore"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

A4.4/5.0
Behavior5/5

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

No annotations provided, so the description bears full burden. It discloses pagination behavior (hasMore, offset/limit clamping, unknown total), ordering (newest-first), and return fields. It also mentions PII-free summaries, hinting at data safety.

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 concise (3 sentences) and front-loaded with the purpose. No unnecessary words, and it efficiently covers ordering, pagination, and return fields.

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 simple list tool, it covers pagination, ordering, and return fields. No output schema exists, so the return field list helps. Missing details include error behavior and exact invoice summary structure, which would improve completeness.

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?

Input schema has 0% description coverage. The description explains pagination using limit and offset but does not define offset precisely (e.g., record index). It compensates partially by showing usage pattern 'advance offset by limit'.

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 explicitly states it lists a page of invoices as narrow, PII-free summaries. The verb 'list' and resource 'invoices' are clear. Sibling tools like get_invoice (single invoice detail) and list_transactions (different resource) indicate differentiation.

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?

The description provides clear pagination instructions (offset/limit, hasMore clamping) and ordering (newest-first). It does not explicitly state when to avoid this tool (e.g., for detailed invoices use get_invoice), but the context of 'narrow summaries' implies that.

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

list_transactionsA

List one page of the organization's bank transactions as narrow summaries.

One call returns one page; if hasMore is true, call again with offset advanced by limit (clamped to 200). Narrow the window with date_from / date_to (ISO dates, e.g. "2026-06-01") to cover a period without paging all history.

Returns {"transactions", "total", "offset", "limit", "returned", "hasMore"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
date_toNo
date_fromNo

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses pagination behavior, limit clamping to 200, and date filtering. Does not explicitly state safety, but listing is read-only by nature. No contradiction.

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?

Three sentences covering purpose, pagination, and filtering, each earning its place. Front-loaded and no fluff.

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?

Covers purpose, paging, filtering, and return fields despite no output schema. Lacks permissions or rate limits, but acceptable given no annotations. Complete enough for an agent to use 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 0%, so description compensates by explaining limit clamping, offset advancement, and ISO date examples with filtering purpose. Adds meaning beyond schema defaults.

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 lists one page of bank transactions as narrow summaries, with a specific verb and resource. It distinguishes itself from sibling tools like list_invoices and list_unmatched.

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?

Provides clear pagination guidance (hasMore flag, offset/limit mechanics) and date filtering to avoid paging all history. Lacks explicit when-not-to-use, but siblings are distinct enough.

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

list_unmatchedA

List one page of transactions that still need a matching receipt.

Same paging/filtering contract as list_transactions: one page per call, advance offset by limit while hasMore, optionally bound by date_from / date_to. For a month-end close, pass the period's bounds.

Returns {"transactions", "total", "offset", "limit", "returned", "hasMore"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
date_toNo
date_fromNo

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses paging behavior, response fields, and a use case. However, it could be more thorough about idempotency or side effects, though list operations are inherently safe.

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?

Three sentences, front-loaded with purpose. Each sentence serves a distinct function: purpose, contract explanation, example. No unnecessary words.

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 4 parameters and no output schema, the description covers paging and response fields. It lacks explicit details about the 'transactions' array items, but the name and context are sufficient for a list 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?

Schema has 0% parameter descriptions, but the description explains the paging contract for limit, offset, date_from, date_to, and how to use them in relation to list_transactions. This adds significant meaning beyond the schema's bare types.

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?

Description clearly states 'List one page of transactions that still need a matching receipt.', which is a specific verb+resource combination. It distinguishes from siblings like list_transactions and list_invoices by focusing on unmatched items.

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?

Explicitly references the paging contract of sibling list_transactions and provides a concrete example (month-end close). While it doesn't state when not to use, the context is clear enough for an agent.

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

upload_invoiceA

Upload a local receipt file (PDF/PNG/JPEG/WebP) to Fintaro for processing.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided. The description does not disclose behavioral traits such as idempotency, file size limits, authentication requirements, or what 'processing' entails. For a tool with zero annotation coverage, this is insufficient.

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 with no waste. It could add a sentence about return values or processing behavior, but remains appropriately concise.

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 the low complexity (1 parameter, no output schema), the description adequately states what the tool does. However, it omits details about the processing result, error handling, and post-upload behavior, leaving gaps.

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 description adds meaning to the sole parameter 'file_path' beyond the schema by specifying it is a local receipt file and listing accepted formats (PDF/PNG/JPEG/WebP). With 0% schema coverage, this compensates well but could mention path format requirements.

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 uses specific verb 'Upload', resource 'local receipt file', and destination 'to Fintaro for processing'. It lists accepted file formats (PDF/PNG/JPEG/WebP), clearly distinguishing from sibling tools like get_invoice and list_invoices.

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 implies use when a receipt file is available for upload, but provides no explicit guidance on when not to use it or alternatives. No exclusions or context for choosing this over other tools.

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

whoamiA

Show which organization and scopes the configured API key is bound to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses the basic function but lacks details on side effects, authentication, or response format.

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?

A single sentence, under 20 words, that is front-loaded and contains no unnecessary words.

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?

For a tool with no parameters and no output schema, the description is complete enough. It fully explains the tool's purpose.

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 baseline is 4. The description adds meaning by specifying what information is shown (organization and scopes), which is sufficient.

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's verb ('Show') and resource ('organization and scopes'), and it distinguishes itself from sibling tools that deal with invoices and transactions.

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 or when not to use this tool. It simply states what it does, without context or alternatives.

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. 6 tool updatesv0.1.0
    • First observedget_invoice
    • First observedlist_invoices
    • First observedlist_transactions
    • First observedlist_unmatched
    • First observedupload_invoice
    • First observedwhoami

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a unique, well-defined purpose. get_invoice and list_invoices are clearly distinct, list_transactions and list_unmatched are differentiated by filter criteria, and whoami is a standalone identity check.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase underscores (e.g., get_invoice, list_transactions). whoami is a minor exception but common in practice, not causing confusion.

Tool Count5/5

With 6 tools, the set covers core financial operations (invoices, transactions, identity) without being bloated or too sparse, fitting the domain well.

Completeness4/5

The tool surface covers invoice retrieval, listing, upload, transaction listing, and unmatched transaction listing. Missing update/delete for invoices is a minor gap, but the core workflow is intact.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP-capable agents to create, edit, pause, archive campaigns, and pull advertising reports from the Gravity Ads platform directly, without the API key leaving the local machine.
    10 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP-compatible agents to securely access an Invoice4U account for searching documents and customers and creating receipts linked to paid invoices, with read-only behavior by default.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables managing Kontur.Elba data through the official Public API, including organizations, bank accounts, counterparties, products, documents, invoices, and public links via MCP tools.
    4
    124 npm
    MIT