Skip to main content
Glama
CodeMill-Solutions

yuki-mcp

yuki-mcp

A Model Context Protocol (MCP) server that connects AI agents to Yuki accounting via Yuki's SOAP API.

Built with Node.js, TypeScript, and @modelcontextprotocol/sdk.


Installation

npm install @codemill-solutions/yuki-mcp

Then add it to your MCP host configuration (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "yuki": {
      "command": "node",
      "args": ["node_modules/@codemill-solutions/yuki-mcp/dist/index.js"],
      "env": {
        "YUKI_API_KEY": "your-api-key-here",
        "YUKI_DOMAIN_ID": "your-administration-guid-here",
        "YUKI_REGION": "nl"
      }
    }
  }
}

Belgian administrations must set YUKI_REGION=be. See API region.


Related MCP server: fortnox-mcp-server

Prerequisites

  • Node.js 20+

  • A Yuki account with API access enabled

  • Your Yuki API key (Yuki → Settings → API)


Setup

1. Install dependencies

npm install

2. Configure environment variables

cp .env.example .env

Edit .env:

YUKI_API_KEY=your-api-key-here
YUKI_DOMAIN_ID=your-administration-guid-here  # optional at startup
YUKI_REGION=nl                                # nl (default) or be

YUKI_DOMAIN_ID can be left empty — the server starts without it. Call get_administrations to discover the correct GUID, then pass it via the administrationId parameter on individual tools.

3. Build

npm run build

4. Connect to an MCP host

Add to your MCP host configuration (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "yuki": {
      "command": "node",
      "args": ["/absolute/path/to/yuki-mcp/dist/index.js"],
      "env": {
        "YUKI_API_KEY": "your-api-key-here",
        "YUKI_DOMAIN_ID": "your-administration-guid-here"
      }
    }
  }
}

API region

Yuki runs a separate API host per region, and an administration only exists on the host for its own region. A key for a Belgian administration authenticates successfully against the Dutch host but then fails on every data call with:

SOAP Fault: Domain has no active database

Set the region to match your administration:

Variable

Values

Default

Purpose

YUKI_REGION

nl, be

nl

Selects a known regional API host

YUKI_BASE_URL

full URL

Overrides YUKI_REGION entirely; use for hosts not listed above

YUKI_REGION=be

YUKI_BASE_URL takes precedence when both are set, so a new or private host can be reached without waiting on a release:

YUKI_BASE_URL=https://api.yukiworks.be/ws/

Defaults are unchanged — omitting both keeps the previous api.yukiworks.nl behaviour.


Multi-administration support

If you manage multiple Yuki administrations (each with its own API key), you can supply a JSON file that maps every administrationId to its corresponding API key. The server then authenticates per administration automatically — no single shared key required.

Keys file format

{
  "a1b2c3d4-0000-0000-0000-000000000001": "api-key-for-admin-1",
  "a1b2c3d4-0000-0000-0000-000000000002": "api-key-for-admin-2"
}

Path resolution (first match wins)

Priority

Path

1

YUKI_API_KEYS_FILE environment variable (explicit path)

2

~/.yuki/api-keys.json (default user-level location)

3

./api-keys.json (local fallback for development)

Environment variable

YUKI_API_KEYS_FILE=/path/to/your/api-keys.json

When a keys file is present, YUKI_API_KEY becomes optional — the file keys are used for all administration-specific tool calls, and YUKI_API_KEY (if set) serves as the fallback for tools that don't target a specific administration (e.g. get_administrations).

If neither YUKI_API_KEY nor a keys file is found at startup, the server logs a warning but continues running — tools will return an error when called.

Reloading keys at runtime

When a new key is generated externally — for example by a sibling MCP server that drives the Yuki Integraties UI to create a fresh API key for a new administration — the new entry only lands in ~/.yuki/api-keys.json. By default the MCP server reads that file once at startup, so a freshly added key would require a server restart before it can be used for SOAP calls.

The reload_keys tool (see Available tools below) avoids this: it re-reads the keys file from disk and replaces the in-memory map in place. Sessions for keys that changed or were removed are evicted from the session cache automatically; sessions for unchanged keys stay warm so subsequent calls do not pay the re-authentication cost.

Typical flow for a sibling tool that has just minted a new key:

1. (external) write the new key to ~/.yuki/api-keys.json
2. yuki-mcp.reload_keys()        → { added: [<adminId>], updated: [], removed: [], total: N }
3. yuki-mcp.get_administrations  → now works for the new admin without restart

Available tools (31)

Administrations

Tool

Description

get_administrations

List all administrations (companies) for this API key. Run this first to find the correct administrationId.

get_administration_id

Look up an administration's GUID by its exact name. Useful when you know the name but not the GUID.

reload_keys

Re-read the administrationId → apiKey JSON file from disk without restarting the server. Returns a diff of added/updated/removed IDs and invalidates affected sessions. Use after an external create_api_key flow.

Relations

Tool

Key parameters

Description

search_relations

searchValue, searchOption?, active?, pageNumber?

Search customers and suppliers by name, code, VAT number, email, etc. Returns up to 100 results per page.

upsert_contact

fullName, contactCode?, contactType?, …

Create or update a contact. When contactCode matches an existing record it is updated; otherwise a new contact is created.

Sales invoices

Tool

Key parameters

Description

get_sales_invoices

dateOutstanding?, sortOrder?, includeBankTransactions?

Retrieve outstanding (unpaid) sales invoices.

process_sales_invoice

reference, subject, date, dueDate, contact, lines

Create and book a new sales invoice. Optionally email it to the customer.

Purchase invoices

Tool

Key parameters

Description

get_missing_invoices

Retrieve bank payments that still need a matching purchase invoice — equivalent to "Postbus → Ontbrekende facturen" in the Yuki web interface.

get_purchase_invoices

dateOutstanding?, sortOrder?, includeBankTransactions?

Retrieve outstanding (unpaid) purchase invoices.

process_purchase_invoice

date, invoiceAmount, invoiceVatAmount, contact, lines

Book an incoming purchase invoice. Accepts an optional PDF as base64.

Transactions & bank

Tool

Key parameters

Description

get_transactions

glAccountCode, startDate, endDate

Retrieve journal entries for a GL account (e.g. a bank account) in a date range. Use get_gl_accounts to find the right code.

get_transaction_details

reference

Check if an outstanding item still exists and retrieve its current status.

process_journal

subject, entries[]

Post a general journal entry (memoriaal). All entry amounts must sum to exactly 0. Used for bank reconciliation, corrections, and custom bookings.

Accounting

Tool

Key parameters

Description

get_gl_accounts

date?

Retrieve all GL accounts with their balance at a given date (commercial view). Use this to find account codes before calling get_transactions.

get_gl_accounts_fiscal

date?

Same as get_gl_accounts but including fiscal corrections. Use for balance sheets and P&L views that must match Yuki's fiscal reports.

get_net_revenue

startDate, endDate, fiscal?

Retrieve net revenue (netto-omzet) for a date range. Set fiscal=true to include fiscal corrections.

Accounting info

Richer read-only views from the AccountingInfo.asmx service — not available through the standard Accounting.asmx.

Tool

Key parameters

Description

get_gl_account_scheme

Retrieve the complete GL account scheme (rekeningschema): all codes with type, subtype, description, and active/inactive status. Use to validate GL codes or build account pickers.

get_period_table

yearId

Retrieve the fiscal period table for a year: period numbers, names, and date ranges. Use to translate transaction dates into human-readable period names for reports.

get_gl_transactions_detailed

startDate, endDate, glAccountCode?, financialMode?

Detailed transaction listing with document type, archive folder, fiscal period ID, project code, and mutation user. More complete than get_transactions. Leave glAccountCode empty for all accounts.

get_transaction_document

transactionId

Download the source PDF for a booked transaction as base64. Use the id or hID from get_gl_transactions_detailed.

get_start_balances

yearId, financialMode?

Retrieve opening balances (beginbalansen) per GL account for a fiscal year.

Documents

Tool

Key parameters

Description

upload_document

fileName, dataBase64, folder?, amount?

Upload a PDF to the Yuki archive by passing its content as a base64 string. Use get_document_folders first to find the right folder ID.

upload_document_from_path

filePath, fileName?, folder?, amount?

Upload a PDF from a local file path. Reads and encodes the file internally — preferred over upload_document when the file is available on disk. Validates that the file exists and is a valid PDF before uploading.

get_document_folders

List all archive folders available in the administration.

list_documents

folderId

List documents in a specific archive folder. Returns document IDs, file names, dates, and amounts.

search_documents

searchText

Full-text search across all archived documents (file names, amounts, OCR content).

get_document

documentId

Retrieve metadata for a single archived document by its ID (name, folder, date, amount, status).

download_document

documentId

Download an archived document as a base64-encoded string.

get_cost_categories

List available GL cost categories for use as the costCategory parameter in upload tools.

Backoffice

Tool

Key parameters

Description

get_workflow

administrationId?

Retrieve backoffice workflow items — documents that could not be processed automatically and are awaiting review by the accountant.

get_outstanding_questions

administrationId?

Retrieve outstanding questions raised by the accountant that require a response before the related documents can be processed.


Testing

Option 1 — MCP Inspector (tool-level, no LLM)

npm run inspect

Opens a browser UI at http://localhost:5173 where you can call individual tools and inspect raw responses.

Option 2 — Agent test harness (with Claude)

Runs a full agentic loop: Claude reasons about the task, calls tools, and returns a final answer — exactly as an AI agent would use this MCP.

Add your Anthropic API key to .env:

ANTHROPIC_API_KEY=sk-ant-...

Then run a scenario:

npm run agent                                              # default: get_administrations
npm run agent -- --scenario outstanding-invoices
npm run agent -- --scenario search-relations --arg "Bedrijf BV"
npm run agent -- --scenario gl-accounts
npm run agent -- --scenario bank-transactions --arg "1200"
npm run agent -- --scenario full-workflow

Available scenarios: get-administrations, search-relations, outstanding-invoices, outstanding-payables, gl-accounts, bank-transactions, full-workflow.


Architecture

src/
├── index.ts                  # Entry point — loads env + keys file, registers tools, starts stdio transport
├── yuki-client.ts            # SOAP client: per-key session cache, envelope builder, axios HTTP, fast-xml-parser
└── tools/
    ├── administrations.ts    # get_administrations, get_administration_id
    ├── relations.ts          # search_relations, upsert_contact
    ├── invoices.ts           # get_sales_invoices, get_purchase_invoices,
    │                         # process_sales_invoice, process_purchase_invoice
    ├── transactions.ts       # get_transactions, get_transaction_details, process_journal
    ├── accounting.ts         # get_gl_accounts, get_gl_accounts_fiscal, get_net_revenue
    ├── accounting-info.ts    # get_gl_account_scheme, get_period_table,
    │                         # get_gl_transactions_detailed, get_transaction_document,
    │                         # get_start_balances, get_missing_invoices
    ├── documents.ts          # upload_document, upload_document_from_path,
    │                         # get_document_folders, list_documents, search_documents,
    │                         # get_document, download_document, get_cost_categories
    └── backoffice.ts         # get_workflow, get_outstanding_questions

scripts/
└── test-agent.ts             # Agent test harness (Claude + MCP client loop)

Auth flow

Yuki uses a two-step authentication pattern:

  1. Authenticate(accessKey) → returns a temporary sessionID

  2. All subsequent calls include that sessionID

YukiClient.getSessionID(adminId?) handles this transparently. When called with an administrationId, it resolves the matching API key from the loaded keys map. Session IDs are cached per API key for the lifetime of the process — Authenticate is only called once per key, not once per tool call.

Note: Parameter casing differs across Yuki's services — sessionId (lowercase d) on Sales.asmx and Purchase.asmx; sessionID (uppercase D) on Accounting.asmx, AccountingInfo.asmx, Contact.asmx, and Archive.asmx. This is handled per-tool.

XML documents

Write tools (process_sales_invoice, process_purchase_invoice, process_journal, upsert_contact) pass structured data to Yuki as an XML string inside the xmlDoc SOAP parameter. The XmlValue wrapper ensures this XML is embedded raw (not entity-encoded) in the SOAP envelope. All user-supplied values are XML-escaped via escapeXml().


Rate limits

Yuki enforces 1,000 API requests per day (upgradeable to 5,000–10,000). Each tool call is 1 request. Session IDs are cached so Authenticate is only called once per API key per server process, not once per tool call.

Design agent workflows to fetch broad lists once and reference them from the agent's context window rather than re-fetching on every step.


Troubleshooting

Error

Likely cause

SOAP Fault: Authentication failed

YUKI_API_KEY is incorrect or API access is not enabled in Yuki Settings

No API key found for administration …

The administrationId passed to the tool is not in the loaded keys file — check YUKI_API_KEYS_FILE

SOAP Fault: Administration not found

Wrong administrationId — run get_administrations to get the correct GUID

Journal entries do not balance

Amounts in process_journal don't sum to 0 — check debit/credit signs

HTTP 500 from api.yukiworks.nl

Usually a wrong XML namespace or malformed xmlDoc — check the WSDL at https://api.yukiworks.nl/ws/{Service}.asmx?wsdl

File does not appear to be a PDF

The file at filePath does not start with the %PDF magic bytes — check you're pointing at a valid PDF

File not found

filePath passed to upload_document_from_path does not exist or is inaccessible

Network error

No connectivity to api.yukiworks.nl — requests time out after 30 seconds


About CodeMill Solutions

CodeMill Solutions is a Dutch software company based in the Netherlands. We build smart, scalable, and customized solutions that help organizations grow, optimize processes, and realize their digital ambitions.

Our services include:

  • Custom applications — portals, dashboards, business software, and fully tailored platforms that truly add value.

  • API integrations — connecting your application with other systems and external platforms via smart API connections.

  • Mobile apps — iOS and Android apps as a logical extension of your web application(s).

yuki-mcp is one of our open-source integrations, making Yuki's accounting platform accessible to AI agents through the Model Context Protocol.

📧 info@codemill.dev 🌐 codemill.dev 💼 LinkedIn 🐙 GitHub


License

MIT — see LICENSE.

Available Tools

31 tools
download_documentA

Download an archived document from Yuki as a base64-encoded string. Use list_documents or search_documents to find the document ID first. Returns fileName and fileDataBase64.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesYuki document ID (from list_documents or search_documents).

TDQS

A3.8/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. It discloses the return format (base64 string, fileName, fileDataBase64) and notes the document must be archived, but omits details about authentication, rate limits, or error behavior. Some context is added, but gaps remain.

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 three sentences, front-loaded with the action, and contains no redundant wording. Every sentence earns its place.

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 single-parameter download tool with no output schema, the description covers the essential workflow: find the ID, download the archived document, and receive the file name and base64 data. It lacks details on error handling but is otherwise complete.

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 description coverage is 100% and the parameter description already mentions it is from list_documents or search_documents. The tool description reinforces this workflow but adds minimal new 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 states it downloads an archived document from Yuki as a base64-encoded string, using a specific verb and resource. It adds distinguishing details like 'archived' and 'base64-encoded', but does not explicitly differentiate from sibling tools such as get_document.

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 provides explicit guidance to first use list_documents or search_documents to find the document ID, which is a clear prerequisite. It does not exclude alternatives or explain when not to use the tool, but the given context is helpful.

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

get_administration_idA

Look up the GUID of a Yuki administration by its exact name. Use this to resolve an administration name to the ID required by other tools. For a full list of administrations and IDs use get_administrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationNameYesExact name of the administration as shown in Yuki (case-sensitive).

TDQS

A4.2/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 burden. It explains the lookup behavior and the exact name requirement, but it does not disclose what happens if the name is not found, whether authentication is needed, or the return format (e.g., plain GUID string).

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 with no filler: the first states the function, the second gives usage context, and the third points to the alternative. Efficient and front-loaded.

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 one-parameter lookup with no output schema and no annotations, the description covers purpose, usage, and alternative. It lacks explicit error/no-result behavior, but overall it is adequately complete for its low complexity.

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 description coverage is 100%, so the baseline is 3. The description reinforces the 'exact name' concept already in the schema but adds no new parameter semantics beyond linking the parameter to the tool's purpose.

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 a specific verb 'look up' and clearly states the resource ('the GUID of a Yuki administration'), distinguishing it from the sibling tool get_administrations, which lists all administrations.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('Use this to resolve an administration name to the ID required by other tools') and when to use the alternative ('For a full list of administrations and IDs use get_administrations').

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

get_administrationsA

List all Yuki administrations (companies) accessible with the configured API key. Run this first to discover the correct administrationID to pass to other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the operation type ('List'), the authorization context ('accessible with the configured API key'), and the primary purpose (discovering administrationID). It does not mention return format or error cases, but for a simple listing operation with no parameters, this is sufficient transparency.

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 concise sentences that front-load the verb and resource, then add a critical usage hint. No filler words or redundant details. Every sentence 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?

Given the tool's simplicity (0 params, no output schema), the description covers what the tool does, what it returns (list of administrations), how it's authenticated, and how to use it. It is fully complete for its context.

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 for this dimension is 4. The description adds value by explaining the purpose of the tool's output rather than needing to clarify parameter syntax. No parameter information is missing.

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 a specific verb ('List') and identifies the exact resource ('Yuki administrations (companies)'). It clarifies the scope ('accessible with the configured API key') and distinguishes this from the sibling tool 'get_administration_id' by implying that this returns all administrations rather than a specific one.

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

Usage Guidelines5/5

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

Explicitly instructs 'Run this first to discover the correct administrationID to pass to other tools,' giving clear when-to-use guidance and explaining how the output is consumed by other tools. This is strong contextual usage direction.

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

get_cost_categoriesA

List available cost categories (GL cost accounts) for document uploads. Use the returned GL codes as the costCategory parameter in upload_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/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. The verb 'list' implies a read-only operation with no side effects, which is helpful but not explicitly stated. The description does not disclose potential errors, authentication requirements, or whether all categories are returned. It is adequate for a simple getter but lacks deeper behavioral context.

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 sentences, no fluff. The first sentence states the action, the second provides actionable guidance. Every word earns its place, and the structure is front-loaded with the purpose.

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?

The tool is simple (one optional parameter, no output schema), and the description explains its purpose and how to use the result. It does not describe the return format in detail, but the mention of 'returned GL codes' gives enough for the agent to understand the output. A brief note on the return structure would push it to a 5.

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%: the single parameter administrationId is fully described in the schema with type and default. The description adds no additional parameter information, so it meets the baseline 3 without exceeding it.

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 cost categories (GL cost accounts) for document uploads, using a specific verb and resource. It distinguishes itself from sibling tools like get_gl_accounts by scoping to document uploads, and explicitly links to upload_document.

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 explicit context: 'Use the returned GL codes as the costCategory parameter in upload_document.' This tells the agent when and how to use the tool. However, it does not mention exclusions or alternatives, such as using get_gl_accounts for non-upload scenarios, so it falls slightly short of a 5.

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

get_documentA

Retrieve metadata for a single archived document by its Yuki document ID. Returns file name, folder, date, amount, and status. Use list_documents or search_documents to find document IDs. To download the file binary use download_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesYuki document ID (GUID or integer, from list_documents or search_documents).
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.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 must bear the full burden of behavioral disclosure. It clarifies that the tool returns metadata and not the binary, and it names the returned fields. However, it does not mention error behavior (e.g., for non-archived documents), authorization requirements, or any side effects. While it avoids contradiction, it misses opportunities to add context beyond the return value list.

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 three short, purposeful sentences. The first sentence states the primary function and output, the second guides to finding IDs, and the third points to the download sibling. No fluff; every sentence earns its place and is front-loaded with the verb+resource.

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 lack of output schema, the description compensates by listing returned fields (file name, folder, date, amount, status). It also provides sufficient navigation among sibling tools (list_documents, search_documents, download_document). It could mention failure modes or authentication, but for a simple metadata retrieval tool, the coverage is adequate and well directed.

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?

Input schema coverage is 100% so baseline is 3, but the description adds meaning by explaining that documentId can be obtained from list_documents/search_documents, and administrationId defaults to YUKI_DOMAIN_ID env var. This enriches the schema descriptions, especially around where parameter values come from.

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 action: 'Retrieve metadata for a single archived document by its Yuki document ID.' It lists specific return fields (file name, folder, date, amount, status) and distinguishes itself from siblings like download_document (binary) and list_documents/search_documents (finding IDs). This is a specific verb+resource definition with explicit sibling differentiation.

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

Usage Guidelines5/5

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

The description gives explicit guidance on when to use this tool vs alternatives: 'Use list_documents or search_documents to find document IDs. To download the file binary use download_document.' It clearly states prerequisites (need a Yuki document ID) and directs to other tools for discovery and binary retrieval, covering both when and when-not.

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

get_document_foldersA

List all archive folders in the Yuki administration. Use this to find the correct folder ID to pass to upload_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/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 burden. It implies a read-only operation by using 'List', but does not explicitly state whether there are side effects, authorization requirements, or pagination behavior. It adds the connection to upload_document but not deeper behavioral detail.

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 concise sentences that front-load the action and then give usage context. No filler.

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 with one optional parameter and no output schema, the description covers the main purpose and a specific use case. It doesn't describe the return structure, but that can be inferred. It's mostly complete, though slightly more detail on what constitutes an 'archive folder' might help.

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 single parameter administrationId is fully described in the schema (including GUID format and default to env var), so the description adds nothing beyond that. Baseline 3 is appropriate since schema coverage is 100%.

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 action ('List all archive folders') and the scope ('in the Yuki administration'), which distinguishes it from sibling tools like list_documents or search_documents.

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 explicit guidance to use this tool to find the correct folder ID for upload_document, giving a clear use case. However, it does not mention when not to use it or alternative tools, so it lacks exclusions.

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

get_gl_accountsA

Retrieve all GL accounts (grootboekrekeningen) with their balance at a given date. Use this to find account codes (e.g. bank account codes) or get a financial snapshot. Defaults to today's date if no date is provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate for the balance snapshot in YYYY-MM-DD format. Defaults to today.
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A3.8/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 full burden for behavioral disclosure. It mentions that it retrieves 'all' GL accounts and defaults to today's date if no date is provided, which is useful. However, it does not disclose potential side effects, permissions, return format, or other behavioral nuances. Given the read-only nature, this is adequate but not 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 two sentences, front-loaded with the main action and immediately followed by usage and default behavior. Every sentence earns its place with no wasted words or redundant 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?

With only 2 optional parameters and no output schema, the description covers the essential aspects: purpose, usage, and default date behavior. It does not explain return values, but that is not required since there is no output schema. It could mention sibling alternatives for full completeness, but the tool is simple enough that this is acceptable.

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 description coverage is 100%, so the baseline is 3. The description reinforces the date parameter's default behavior, but it does not add meaning beyond what the schema already provides. Since both parameters are well-documented in the schema, the description adds marginal value.

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 the tool retrieves all GL accounts with their balance at a given date, using a specific verb and resource. It also provides examples of use cases (finding account codes, financial snapshot). However, it does not explicitly distinguish itself from sibling tools like get_gl_accounts_fiscal, so it falls 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?

The description gives explicit usage context: 'Use this to find account codes... or get a financial snapshot.' It also notes the default behavior for date. However, it does not mention alternatives or when not to use this tool, so it lacks the explicit exclusions needed for a 5.

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

get_gl_account_schemeA

Retrieve the complete GL account scheme (rekeningschema) for an administration. Returns every account code with its type, subtype, description, and active/inactive status. Use this to validate GL codes before booking or to build account pickers. For current balances use get_gl_accounts instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.5/5.0
Behavior4/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 of behavioral disclosure. It effectively communicates that this is a read-only retrieval (via 'Retrieve') and describes the exact return contents, including active/inactive status. It does not mention authorization requirements or potential large response sizes, but for a simple scheme lookup, the coverage is adequate and honest.

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 three sentences: 1) what the tool does, 2) what it returns, 3) when to use it and the alternative. It is front-loaded with the primary purpose, every sentence carries useful information, and there is no fluff or repetition.

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 simple read-only tool with a single optional parameter and no output schema, the description fully equips an agent: it explains the return format and use cases. It distinguishes from the most likely sibling tool (get_gl_accounts) and provides enough semantic detail to select it correctly. There is no indication of pagination or hidden complexity, so the description is sufficient.

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 input schema already documents the only parameter (administrationId) with a clear description and default behavior. With 100% schema description coverage, the description adds no new parameter-level meaning, which aligns with the baseline of 3. The description's mention of 'for an administration' gently reinforces the schema but does not expand on it.

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 action ('Retrieve'), the resource ('complete GL account scheme'), and the scope ('for an administration'). It lists the returned fields (account code, type, subtype, description, status), making the tool's purpose unmistakable. It also differentiates from the sibling 'get_gl_accounts' by explicitly noting that tool is for balances.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Use this to validate GL codes before booking or to build account pickers.' It also names an alternative, 'For current balances use get_gl_accounts instead,' which tells the agent exactly when to choose a different tool. This satisfies both positive and negative usage context.

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

get_gl_accounts_fiscalA

Retrieve all GL accounts with their balance including fiscal corrections (fiscale stand). Use this for balance sheet and P&L views that must match Yuki fiscal reports. For the commercial/operational view use get_gl_accounts instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate for the balance snapshot in YYYY-MM-DD format. Defaults to today.
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses a key behavioral trait (inclusion of fiscal corrections, i.e., fiscale stand) and the context of aligning with Yuki fiscal reports. It doesn't mention pagination or response format, but the core read behavior is transparent.

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 action and resource, followed by usage context and the alternative. Every sentence is purposeful, with no repetition or 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?

The description covers what the tool does, what data it includes, when to use it, and which sibling to use instead. Since there is no output schema, it does not describe the return structure, but the core usage context is sufficiently complete for an agent to select and invoke the tool correctly.

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 input schema covers both parameters (date, administrationId) with descriptions, achieving 100% schema coverage. The tool description adds no additional parameter-specific detail beyond the schema, so the baseline score of 3 is appropriate.

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 retrieves all GL accounts with balances including fiscal corrections. It explicitly distinguishes itself from the sibling tool get_gl_accounts by contrasting the fiscal view with the commercial view, making its purpose instantly clear.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: use for balance sheet and P&L views matching Yuki fiscal reports, and use get_gl_accounts instead for commercial/operational views. It names the alternative and the exact conditions for each choice.

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

get_gl_transactions_detailedA

Retrieve detailed transaction data for a GL account within a date range. Returns richer fields than get_transactions: document type, archive folder, fiscal period ID, project code, and mutation user. Leave glAccountCode empty to fetch all accounts. Use this to find the last period in which a depreciation or salary booking was made.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateYesEnd date in YYYY-MM-DD format (inclusive)
startDateYesStart date in YYYY-MM-DD format (inclusive)
financialModeNoFinancial mode: '1' = fiscal (default), '0' = commercial.1
glAccountCodeNoGL account code to filter (e.g. "0300" for depreciation). Leave empty for all accounts.
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It discloses meaningful behaviors: the richer fields returned, the ability to fetch all accounts via an empty code, and the intended use case. While it does not mention pagination, errors, or explicit read-only status, the verb 'Retrieve' and the field list convey a safe query operation sufficiently for an agent.

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 three sentences, front-loaded with the main purpose, then the distinctive richer fields, then a concrete use case. No wasted words; every sentence earns its place. It is concise yet informative.

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's moderate complexity, no output schema, and no annotations, the description is reasonably complete. It identifies required date range, optional account filter, and the specific rich fields, making the tool invocable. Minor gaps remain around return formatting and pagination, but the stated use case covers the likely agent need.

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 description coverage is 100%, so the baseline is 3. The description adds little beyond the schema: it repeats the 'leave empty for all accounts' guidance already present on glAccountCode and does not clarify startDate, endDate, or financialMode semantics. It adds minor context by suggesting which GL accounts (depreciation, salary) might be relevant.

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 opens with a specific verb and resource: 'Retrieve detailed transaction data for a GL account within a date range.' It explicitly distinguishes itself from sibling get_transactions by listing the richer fields returned, leaving no ambiguity about what this tool uniquely provides.

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

Usage Guidelines5/5

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

The description names the alternative tool get_transactions and clarifies when to prefer this one ('Use this to find the last period in which a depreciation or salary booking was made'). It also gives a practical filter instruction ('Leave glAccountCode empty to fetch all accounts'), providing clear context for when to use the tool.

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

get_missing_invoicesA

Retrieve bank payments that still need a matching purchase invoice — equivalent to "Postbus → Ontbrekende facturen" in the Yuki web interface. Returns creditor name, open amount, date, and bank description for each unmatched payment. Use upload_document or process_purchase_invoice to resolve items in this list.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses that the operation is a read-only retrieval, lists the exact return fields (creditor name, open amount, date, bank description), and gives UI context. It lacks details on pagination or ordering, but these are not critical for this simple read tool.

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, each earning its place: purpose, return value details, and next-step resolution guidance. No redundant or fluff content.

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?

Given the tool's simplicity (one optional param, no output schema, no annotations), the description provides a complete picture: what it does, what it returns, and how to act on the results.

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 only parameter (administrationId) is fully described in the schema (100% coverage). The description adds no additional parameter details, so the baseline of 3 applies.

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 a specific verb and resource: 'Retrieve bank payments that still need a matching purchase invoice', immediately distinguishing it from sibling tools like get_purchase_invoices or get_transactions. It also ties to a UI path, reinforcing scope.

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?

Clearly indicates this is for unmatched payments and suggests resolution tools (upload_document, process_purchase_invoice), but doesn't explicitly state when NOT to use it or directly contrast with alternatives like get_transactions.

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

get_net_revenueA

Retrieve net revenue (netto-omzet) for an administration within a date range. Set fiscal=true to include fiscal corrections (matches Yuki fiscal reports).

ParametersJSON Schema
NameRequiredDescriptionDefault
fiscalNoInclude fiscal corrections. Default false (commercial view).
endDateYesEnd date in YYYY-MM-DD format (inclusive)
startDateYesStart date in YYYY-MM-DD format (inclusive)
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does add value by explaining that fiscal=true includes fiscal corrections and matches Yuki fiscal reports. However, it does not explicitly state that the operation is read-only, mention any access requirements, or describe the return structure.

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 front-loads the action and object, adds the key optional flag, and contains no filler or redundancy. Every word earns its place.

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 description covers the core function and the fiscal nuance, but given that there is no output schema, it does not explain the return format or any edge-case behavior. It also lacks explicit usage guidance relative to sibling tools. For a simple revenue getter, it is adequate but has clear 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?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying the fiscal parameter with the context 'matches Yuki fiscal reports', which is extra value. Other parameters are adequately covered by the schema alone.

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 a specific verb ('Retrieve') and names the exact resource ('net revenue (netto-omzet)') with clear scope ('for an administration within a date range'). This clearly distinguishes it from all 31 sibling tools, none of which target revenue.

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 for net revenue queries with an optional fiscal flag, but it does not explicitly state when to use this tool versus alternatives or provide any exclusions. The fiscal flag explanation is more of a parameter detail than a usage guideline.

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

get_outstanding_questionsA

Retrieve outstanding backoffice questions for an administration in Yuki. These are questions raised by the accountant that require a response before the related documents can be processed.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden of disclosing behavioral traits. It identifies the operation as 'Retrieve', which implies read-only, and adds context about the blocking nature of the questions. However, it does not explicitly mention side effects, return format, or authentication requirements, leaving some gaps typical of a simple getter tool.

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 long, with the first sentence front-loading the core action and the second adding necessary context. There is no redundancy or irrelevant detail, making it highly concise and well-structured.

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?

This is a simple one-parameter getter with no output schema, so the description need not explain return values in depth. It adequately covers the purpose, the domain meaning of 'outstanding backoffice questions', and the context of processing blocks. Minor omissions like pagination or response structure are acceptable given the tool's simplicity.

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 input schema already includes a fully described parameter (administrationId) with 100% coverage. The description does not add extra meaning beyond the schema, so the baseline score of 3 applies. The mention of 'for an administration' slightly reinforces the parameter's purpose but not significantly.

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 a specific verb 'Retrieve' and a specific resource 'outstanding backoffice questions', immediately clarifying the tool's purpose. It also explains what these questions are (raised by the accountant and requiring response before processing), which distinguishes it from sibling tools like get_missing_invoices or get_workflow.

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 when to use this tool: when there are outstanding backoffice questions that need a response before related documents can be processed. This provides clear context, though it does not explicitly name alternative tools or exclusions. The guidance is sufficient for an agent to understand the appropriate scenario.

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

get_period_tableA

Retrieve the fiscal period table (periodeoverzicht) for a given fiscal year. Returns period numbers, names, and start/end dates. Use this to translate a transaction date into a period name for reports (e.g. "tot welke periode zijn afschrijvingen verwerkt").

ParametersJSON Schema
NameRequiredDescriptionDefault
yearIdYesFiscal year as a 4-digit integer (e.g. 2025).
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It implies a read operation ('Retrieve') and lists return fields, which is useful. However, it does not disclose potential error conditions (e.g., invalid yearId), data source behavior, or whether results are paginated. For a simple read tool, this is acceptable but not rich in behavioral detail.

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 sentences deliver purpose, return content, and a use case without wasted words. The first sentence states the action and primary input; the second clarifies output and application. Excellent structure.

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 simple, read-only tool with two parameters and no output schema, the description fully covers what the agent needs to know: what it does, what it returns, and when to use it. No critical information is missing.

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 input schema already provides 100% coverage for both parameters (yearId as integer, administrationId with default). The description reinforces that yearId is a fiscal year and hints at the date-to-period mapping but adds no new parameter-specific details beyond schema, matching the baseline expectation.

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 'Retrieve the fiscal period table' and specifies the return content (period numbers, names, start/end dates). This clearly distinguishes it from sibling tools like get_transactions or get_gl_accounts, which serve different data retrieval purposes.

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 a concrete use case: 'translate a transaction date into a period name for reports' with a specific example. While it doesn't explicitly mention alternatives, the context makes it clear this is for fiscal period mapping, which is sufficiently distinct from sibling tools. No exclusion criteria are stated, but the guidance is actionable.

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

get_purchase_invoicesA

Retrieve outstanding (unpaid) purchase invoices from Yuki. Returns creditor name, reference, due date, open amount, and currency for each item. Optionally filter by due date cutoff using dateOutstanding.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortOrderNoSort order for results.DateDesc
dateOutstandingNoISO date string (YYYY-MM-DD). When provided, returns only items outstanding as of this date. Omit for all outstanding items.
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.
includeBankTransactionsNoInclude bank transaction data alongside invoice items.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool returns specified fields and optionally filters by due date, which is helpful. However, it does not mention any side effects, pagination behavior, default sort order, or limitations, leaving some behavioral aspects undisclosed.

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 long, front-loaded with the primary purpose. The second sentence efficiently lists the return fields and the optional filter without extraneous details. Every sentence earns its place, making it concise and well-structured.

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?

The description lists the key return fields (creditor name, reference, due date, open amount, currency) which is valuable since there is no output schema. It also explains the optional filter. However, it does not mention pagination, defaults (e.g., sort order), or the behavior of includeBankTransactions, which are covered by the schema but not the description, leaving slight gaps in 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?

Schema description coverage is 100%, so the schema already fully documents all four parameters. The description adds little beyond referencing dateOutstanding as an optional filter, but this is redundant with the schema. Therefore, a baseline score of 3 is appropriate.

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 retrieves outstanding (unpaid) purchase invoices from Yuki, specifying the resource (purchase invoices), status (unpaid), and source (Yuki). It distinguishes itself from sibling tools like get_sales_invoices by explicitly mentioning purchase invoices and outstanding status.

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 usage when outstanding purchase invoices are needed, and the optional dateOutstanding filter provides a clear context. However, it does not explicitly mention when not to use this tool or suggest alternatives, such as get_missing_invoices or get_transactions, so the guidance is implied rather than stated.

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

get_sales_invoicesA

Retrieve outstanding (unpaid) sales invoices from Yuki. Returns debtor name, reference, due date, open amount, and currency for each item. Optionally filter by due date cutoff using dateOutstanding.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortOrderNoSort order for results.DateDesc
dateOutstandingNoISO date string (YYYY-MM-DD). When provided, returns only items outstanding as of this date. Omit for all outstanding items.
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.
includeBankTransactionsNoInclude bank transaction data alongside invoice items.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It clearly signals a read-only operation via 'Retrieve' and enumerates the returned fields (debtor name, reference, due date, open amount, currency). It does not disclose default sort behavior or the effect of includeBankTransactions, but these are covered in the schema and do not undermine the core transparency.

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 consists of two sentences, front-loading the purpose and output fields, with the optional filter in the second sentence. Every word earns its place; there is no filler or repetition of schema details.

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 read tool with no output schema, the description provides the essential return fields and the optional filter. It omits default sort order and includeBankTransactions behavior, but those are documented in the schema. Overall, the description plus schema is sufficient for a human or AI to select and invoke the tool correctly.

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 description coverage is 100% for all 4 parameters. The description's mention of dateOutstanding as a 'due date cutoff' is redundant with the schema's existing explanation ('ISO date string... returns only items outstanding as of this date'). No additional parameter meaning is provided beyond the schema, so the baseline 3 applies.

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 the specific verb 'Retrieve' and clearly identifies the resource as 'outstanding (unpaid) sales invoices from Yuki.' This distinguishes it from siblings like get_purchase_invoices and process_sales_invoice, and the scope ('outstanding/unpaid') 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?

The description clearly implies the tool is for listing unpaid sales invoices and mentions the optional dateOutstanding filter, giving context on when to use it. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.

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

get_start_balancesA

Retrieve opening balances (beginbalansen) per GL account for a fiscal year. Returns accountID, accountDescription, and startBalance for each GL account. Use this for year-over-year balance verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearIdYesFiscal year as a 4-digit integer (e.g. 2025).
financialModeNoFinancial mode: '1' = fiscal (default), '0' = commercial.1
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses the return structure (accountID, accountDescription, startBalance) and the fiscal year scope, but does not explicitly state read-only nature or behavior for edge cases (e.g., missing year, financialMode differences).

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 concise sentences: purpose, return fields, and usage context. Every sentence adds value; no redundancy.

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?

Description is adequate for a simple read tool: includes purpose, return shape, and use case. However, it doesn't mention the role of financialMode or administrationId, though those are covered by the schema. Overall complete for the tool's complexity.

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 description coverage is 100%, so parameters are already documented in the schema. The description adds no additional parameter explanation beyond repeating 'fiscal year' which matches yearId.

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?

Specific verb 'Retrieve', clear resource 'opening balances (beginbalansen) per GL account for a fiscal year', and states return fields. Unambiguous and distinct from sibling tools like get_gl_accounts or get_gl_transactions_detailed.

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 states use case 'for year-over-year balance verification', but does not mention alternatives or when not to use this tool.

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

get_transaction_detailsA

Check whether an outstanding item (invoice) with a given reference still exists in Yuki and retrieve its current open amount and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
referenceYesInvoice reference number as shown in Yuki (e.g. '2024-0042')
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A3.8/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. It discloses that the tool performs a read-only existence check and retrieves amount/status, which is useful. However, it does not mention what happens if the reference is not found, whether any side effects occur, or any permissions needed. The behavioral traits are partially disclosed but not fully.

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, focused sentence that front-loads the key purpose and expected output. Every word contributes meaning, and there is no redundancy or padding.

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 lookup tool with two parameters (one required) and full schema coverage, the description provides sufficient context: it explains what the tool does and what it returns (open amount and status). The absence of an output schema is somewhat mitigated by the explicit mention of the retrieved fields. Missing details about error handling are acceptable for such a basic read operation.

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 covers 100% of parameters with clear descriptions (reference format and default for administrationId). The description adds little beyond what the schema already states, only reinforcing that 'reference' refers to the invoice reference and that the output includes open amount and status. Baseline 3 is appropriate.

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 function: check if an outstanding invoice with a given reference exists and retrieve its current open amount and status. It uses specific verbs ('check', 'retrieve') and specifies the resource (outstanding item/invoice), distinguishing it from sibling tools like get_transactions or get_transaction_document.

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 when to use the tool (when you need to verify an invoice's existence and get its current open amount/status) but provides no explicit alternatives or exclusions. It does not mention that other tools like get_sales_invoices or get_purchase_invoices might be alternatives, so guidance is only implicit.

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

get_transaction_documentA

Download the source document (PDF) for a booked transaction, returned as base64. Use the transaction ID from get_gl_transactions_detailed. Returns fileName and base64-encoded fileData.

ParametersJSON Schema
NameRequiredDescriptionDefault
transactionIdYesTransaction ID (from the id or hID field in get_gl_transactions_detailed).
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It states that the file is returned as base64 and that the response includes fileName and fileData, which is transparent about the output format and structure. It does not mention potential failure modes or auth requirements, but for a read-only download tool, this is sufficient.

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 verb 'Download' and the resource, and includes all essential information without fluff. Every sentence earns its place: the first states the action and output format, the second provides the input source 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?

Given the tool's simplicity and the absence of an output schema, the description adequately explains the return value (fileName and fileData) and the input (transaction ID). It covers the practical usage context well, though it doesn't mention error handling or size limitations, which are not critical for a basic download 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 coverage is 100%, so the baseline is 3. The description adds value by specifying that the transaction ID comes from get_gl_transactions_detailed, going beyond the schema's generic 'Transaction ID (from the id or hID field...)'. This cross-reference helps the agent understand the correct source and usage.

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 downloads a source document (PDF) for a booked transaction and returns it as base64. It specifies the resource (transaction document) and the action (download), and distinguishes itself from generic document tools by referencing get_gl_transactions_detailed as the source of the required transaction ID.

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 context by instructing to use the transaction ID from get_gl_transactions_detailed, which implies this is the tool for transaction-specific documents. It does not explicitly mention alternatives or exclusions, but the specificity of the instruction gives adequate guidance.

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

get_transactionsA

Retrieve all journal entries for a specific GL account code within a date range. Use this for bank transactions (find the bank GL code with get_gl_accounts first). Returns date, description, debit/credit amounts, and counterpart GL account.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateYesEnd date in YYYY-MM-DD format (inclusive)
startDateYesStart date in YYYY-MM-DD format (inclusive)
glAccountCodeYesGL account code to retrieve transactions for (e.g. '1200' for a bank account). Use get_gl_accounts to find the right code.
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must state behavioral traits. It discloses the return fields and the scope ('all journal entries'), but omits details like pagination, ordering, or any potential limits. It also does not explicitly state whether this is a safe read-only operation, though 'Retrieve' implies it.

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?

Four sentences, all content-bearing, with the main action first and supporting details after. No redundant or generic statements.

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 lack of annotations and output schema, the description lists return fields and gives a practical workflow. It does not mention pagination or other runtime behavior, which is a minor gap, but the tool's purpose and prerequisites are well covered.

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 already provides descriptions for all four parameters (100% coverage), so baseline is 3. The description reinforces glAccountCode and date range, and adds a pointer to get_gl_accounts, but does not add further meaning for the optional administrationId or parameter formats.

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 states a specific verb ('Retrieve') and resource ('journal entries for a specific GL account code within a date range'), and the return fields are listed. It clearly distinguishes itself from sibling tools like get_transaction_details by focusing on GL account-level filtering.

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 explicit use case: 'Use this for bank transactions' and prerequisite: 'find the bank GL code with get_gl_accounts first'. However, it does not name any alternative tools to avoid, so it's clear on when to use but not when not to.

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

get_workflowA

Retrieve the Yuki backoffice workflow items for an administration. These are documents (purchase and sales invoices) that could not be processed automatically and are waiting to be reviewed and booked by the accountant.

ParametersJSON Schema
NameRequiredDescriptionDefault
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that returned items are those that could not be processed automatically, which is a useful behavioral trait. However, it does not explicitly state that the operation is read-only, mention any permissions needed, or describe the response structure beyond 'workflow items.' While 'Retrieve' implies non-mutating behavior, the description lacks deeper transparency.

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 with no wasted words. It front-loads the primary action ('Retrieve...') and then provides a concise explanation of what the workflow items are, making it efficient and easy to parse.

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 retrieval tool with one well-documented parameter and no output schema, the description adequately conveys the tool's purpose and the nature of the returned items. It could be marginally improved by noting the response format or typical fields, but overall it provides enough context for an agent to decide when to use this tool.

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 input schema fully documents the single parameter administrationId, including its type and default behavior (YUKI_DOMAIN_ID env var). The description adds no additional meaning about this parameter, so it does not go beyond the 100% schema coverage already present.

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: 'Retrieve the Yuki backoffice workflow items.' It clearly defines what these items are (unprocessed purchase and sales invoices awaiting accountant review), which distinguishes this from sibling tools like get_sales_invoices or get_purchase_invoices that would return all invoices, not just pending workflow items.

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 usage: use this tool to retrieve items that need manual review and booking. However, it does not explicitly state when to use this tool over alternatives like get_missing_invoices or process_sales_invoice, nor does it mention any exclusions or prerequisites beyond the optional administrationId parameter.

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

list_documentsA

List documents in a Yuki archive folder. Returns document IDs, file names, dates, and amounts. Call get_document_folders first to find the correct folder ID. Use the returned document ID with get_document or download_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoFilter documents up to this date (YYYY-MM-DD). Defaults to today.
folderIdYesArchive folder ID. Use get_document_folders to list available folders.
sortOrderNoSort order for results.DocumentDateDesc
startDateNoFilter documents from this date (YYYY-MM-DD). Defaults to 2000-01-01.
startRecordNo1-based offset for pagination (default 1).
numberOfRecordsNoMaximum number of records to return (default 50).

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing behavior. It adds value by specifying the return fields and the workflow, but it omits details about pagination (startRecord, numberOfRecords), date filtering, and potential limitations. The description is not misleading, but it lacks some operational context that would be useful for an agent.

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 concise sentences, each serving a distinct purpose: what the tool does, the prerequisite, and the follow-up usage. The description is front-loaded with the primary action, and there is no filler or redundancy.

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?

The description covers the core workflow (folder → list → get/download) and specifies key return fields. Although there is no output schema, the description mentions what is returned. The schema handles parameter details, and the description provides sufficient context for an agent to invoke the tool correctly, though it could mention pagination or filtering behavior explicitly for full 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?

Schema description coverage is 100%, so the schema already fully documents all 6 parameters. The description lightly reinforces the folderId parameter by referencing get_document_folders, but adds no additional meaning about the parameters themselves, such as date formats or sort order behavior. This meets the baseline for well-documented schemas.

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 action (list documents), specifies the resource (Yuki archive folder), and lists the return fields (document IDs, file names, dates, amounts). It distinguishes from siblings by explicitly contrasting with get_document_folders and get_document/download_document, making the tool's role in the workflow clear.

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 prerequisite guidance ('Call get_document_folders first to find the correct folder ID') and suggests follow-up usage with get_document/download_document. However, it does not explicitly mention alternatives like search_documents or state when not to use this tool, so it misses the 'when-not' or explicit alternative comparison needed for a 5.

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

process_journalA

Post a general journal entry (memoriaal) in Yuki for bank reconciliation, corrections, or custom bookings. IMPORTANT: all entry amounts must sum to exactly 0 (positive = debit, negative = credit). Yuki will reject the entry if this rule is violated.

ParametersJSON Schema
NameRequiredDescriptionDefault
entriesYesJournal entries — must contain at least 2 lines and sum to zero
subjectYesDocument subject / description shown in Yuki (e.g. 'Bank reconciliation April 2024')
journalTypeNoJournal type. Year-end and fiscal corrections must have entry dates on the last day of the financial year.GeneralJournal
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.2/5.0
Behavior4/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 a critical behavioral rule (amounts must sum to zero or Yuki rejects) and implies a write operation. It does not mention permissions or return behavior, but the disclosed validation rule is highly valuable and non-obvious.

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 primary action, and the CAPITALIZED warning earns its place. Every sentence adds value and there is 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?

The description and schema together provide sufficient context for a complex tool with no output schema. The description covers purpose and key constraint, while the schema covers all parameters. It could mention return behavior, but that is not essential for invocation.

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 baseline is 3. The description reinforces the sum-to-zero rule (already in the schema) but does not add new parameter-level semantics beyond what the schema already documents.

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 ('Post'), a specific resource ('general journal entry (memoriaal)'), and concrete use cases ('bank reconciliation, corrections, or custom bookings'). This clearly distinguishes it from sibling tools like process_sales_invoice and process_purchase_invoice.

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 gives explicit use cases (bank reconciliation, corrections, custom bookings) and the term 'general journal entry' implies it is for non-invoice entries. However, it does not explicitly say when not to use it (e.g., 'use process_sales_invoice for sales invoices').

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

process_purchase_invoiceA

Book an incoming purchase invoice in Yuki. Accepts invoice totals, supplier contact, and line items. Optionally attach the original PDF as a base64 string. Returns the Yuki response including the assigned document ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesInvoice date in YYYY-MM-DD format
linesYesInvoice line items
contactYesSupplier contact details
dueDateNoPayment due date in YYYY-MM-DD format
processNoImmediately process/finalise in Yuki
remarksNo
currencyNoEUR
referenceNoSupplier's invoice number
invoiceAmountYesTotal invoice amount including VAT
paymentMethodNoTransfer
documentBase64NoPDF content encoded as base64 string
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.
documentFileNameNoPDF filename (e.g. 'invoice-2024-0042.pdf')
invoiceVatAmountYesTotal VAT amount on the invoice

TDQS

A3.5/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 behavioral traits. It only mentions that it returns the Yuki response with a document ID. It does not reveal important side effects like the 'process' flag defaulting to true (immediate finalization), contact creation/linking behavior, or any permissions/error conditions. For a mutating tool, this is insufficient transparency.

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 with three sentences, each adding value: it states the action, lists accepted inputs, and describes the return value. It is front-loaded with the primary purpose and contains no filler.

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 is complex with 14 parameters and nested objects, but the schema covers parameters well. The description explains the return value since there is no output schema. However, it omits important contextual behavior such as the immediate processing/finalization, contact handling when contactCode is provided, and potential side effects. This is adequate but has clear gaps.

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 high (79%), so the schema already documents most parameters. The description adds a high-level grouping ('invoice totals, supplier contact, line items') but does not provide additional semantics beyond the schema. It does mention the optional base64 PDF attachment, which is redundant with the schema's documentBase64 description.

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 action ('Book an incoming purchase invoice') and the target resource ('Yuki'). It is distinct from sibling tools like process_sales_invoice by specifying 'purchase invoice.' It also mentions what is accepted and what is returned, fully clarifying the tool's purpose.

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 usage for booking incoming purchase invoices, but it does not provide explicit when-to-use or when-not-to-use guidance relative to alternatives such as process_sales_invoice or upload_document. No exclusions or prerequisites are mentioned.

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

process_sales_invoiceA

Create and book a new sales invoice in Yuki. Accepts invoice header, contact, and line items. Optionally sends the invoice to the customer by email. Returns the Yuki response including the assigned document ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesInvoice date in YYYY-MM-DD format
linesYesInvoice line items
contactYesCustomer contact details
dueDateYesPayment due date in YYYY-MM-DD format
processNoImmediately process/finalise the invoice in Yuki
remarksNoInternal remarks (not visible on invoice)
subjectYesInvoice title shown to the customer
currencyNoISO 4217 currency codeEUR
referenceYesInvoice number / reference (e.g. '2024-0042')
paymentMethodNoElectronicTransfer
emailToCustomerNoSend the invoice to the customer's email address
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/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 disclosing side effects. It states the tool creates and books (a mutation), optionally emails the customer, and returns the Yuki response with a document ID. However, it does not clarify that 'booking' is typically irreversible or that specific permissions may be required, leaving some behavioral ambiguity.

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 three concise sentences, front-loaded with the main action, and every sentence adds value. There is no fluff or repetition of schema details.

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's complexity (12 parameters, nested objects, no output schema), the description covers the key behavioral aspects: creation, booking, optional email, and return value with document ID. The detailed schema fills in the rest. It lacks explicit guidance on failure scenarios or prerequisites, but is otherwise complete for a create operation.

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 already covers 92% of parameters with detailed descriptions, so the baseline is 3. The description adds minimal extra meaning by grouping parameters into 'invoice header, contact, and line items' and mentioning the email option, but it does not substantially enhance the schema's parameter documentation.

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 creates and books a sales invoice in Yuki, which is a specific action on a specific resource. It also lists the accepted components (header, contact, line items) and the optional email side-effect, making its purpose unambiguous. This distinguishes it from sibling tools like process_purchase_invoice and process_journal.

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 clearly implies the tool is for sales invoices, and the verb 'create and book' gives a direct usage context. However, it does not explicitly contrast with alternatives like process_purchase_invoice or state when not to use it, so it provides clear context but no exclusions.

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

reload_keysA

Reload the administrationId → apiKey map from the JSON keys file without restarting the MCP server. Use after a new key has been generated externally (for example via a create_api_key flow) to make it usable for SOAP calls immediately. Sessions for changed/removed keys are invalidated; unchanged keys keep their cached session. Returns a diff of added/updated/removed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional explicit path to the api-keys JSON file. Defaults to YUKI_API_KEYS_FILE → ~/.yuki/api-keys.json → ./api-keys.json.

TDQS

A4.7/5.0
Behavior5/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 fully covers the key behavioral aspects: no restart required, sessions invalidated for changed/removed keys, unchanged keys keep cached sessions, and returns a diff. This is comprehensive and beyond typical.

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, front-loaded with the primary purpose, and every sentence provides meaningful information: usage scenario, behavioral consequences, and return value. No redundant or vague wording.

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?

Despite having no output schema, the description clearly explains what the tool returns (a diff). It covers the tool's purpose, trigger condition, effect on sessions, and return value, making it complete for the tool's moderate complexity.

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 description coverage is 100%, so the schema already documents the 'path' parameter including its defaults. The description adds no additional meaning beyond the schema, which aligns with the baseline score of 3.

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 function: reloading the administrationId → apiKey map from a JSON keys file without restarting the MCP server. This is a specific verb+resource combination that clearly differentiates it from the sibling tools, which are all read/process operations.

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

Usage Guidelines5/5

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

It explicitly states when to use it: after a new key has been generated externally (e.g., via create_api_key flow) to make it immediately usable for SOAP calls. This provides clear contextual guidance, and the effects (session invalidation) are clearly explained.

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

search_documentsB

Search for documents in a Yuki archive folder by text. Call get_document_folders first to find the folderID. searchOption filters which field to match: All (default), Contact, Subject, Tag, Creator, or Type. tabID scopes the search to a folder tab — use 0 to search all tabs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdNoTab ID within the folder. Use -1 to search all tabs (default).
endDateNoFilter documents up to this date (YYYY-MM-DD). Defaults to today.
folderIdNoArchive folder ID to search within. Use -1 to search all folders (default). Use get_document_folders to find specific folder IDs.
sortOrderNoSort order for results.DocumentDateDesc
startDateNoFilter documents from this date (YYYY-MM-DD). Defaults to 2000-01-01.
searchTextYesText to search for (e.g. supplier name, invoice number, subject).
startRecordNo1-based offset for pagination (default 1).
searchOptionNoField to search in. 'All' searches across all fields (default).All
numberOfRecordsNoMaximum number of records to return (default 50).

TDQS

B3.3/5.0
Behavior2/5

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

The description discloses some behavioral traits, such as searchOption filtering and tab scoping, but it directly contradicts the schema by saying 'use 0 to search all tabs' while the schema specifies -1 as the default and all-tabs value. This misleading instruction undermines transparency. There are no annotations to provide additional safety or behavior context.

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

Conciseness3/5

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

The description is reasonably short and front-loaded, with the purpose stated first. However, it contains a factually incorrect instruction about tabID that should be corrected, and the inclusion of this error makes the structure less reliable. It earns a middling score for conciseness because it could be accurate and equally brief.

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 9 parameters, no output schema, and no annotations, the description should provide more guidance on pagination, date filters, sorting, and expected return behavior. It only covers searchOption and tabID, and even that is flawed. The tool is not adequately described for safe, correct invocation without additional information.

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 100%, so the baseline is 3, but the description adds minimal new meaning beyond re-stating enum values. More importantly, the tabID guidance conflicts with the schema, actively misleading the agent about a critical parameter. This detracts from parameter clarity rather than enhancing it.

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 'Search for documents in a Yuki archive folder by text' with a specific verb and resource, distinguishing it from sibling tools like list_documents. It also briefly previews key filtering parameters, making the tool's purpose immediately clear.

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 provides an explicit prerequisite instruction: 'Call get_document_folders first to find the folderID.' It also explains how searchOption and tabID scope the search. While it doesn't explicitly state when not to use this tool versus alternatives, the context is clear enough for an agent to select it appropriately.

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

search_relationsA

Search for Yuki relations (customers/suppliers) by name, code, VAT number, or other fields. Returns up to 100 contacts per page with IDs, codes, names, and contact details. Omit searchValue (or pass an empty string) to retrieve all contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNoFilter by active status. Defaults to 'Active'.Active
domainIdNoDomain ID (GUID). Defaults to YUKI_DOMAIN_ID env var.
pageNumberNoPage number for pagination (100 results per page).
searchValueNoThe value to search for (e.g. company name, relation code). Omit or pass an empty string to retrieve all contacts (subject to Yuki API support).
searchOptionNoWhich field to search in. Defaults to 'All' (full-text search).All

TDQS

A4.2/5.0
Behavior4/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 disclosing behavior. It states the pagination behavior ('up to 100 contacts per page'), the return fields ('IDs, codes, names, and contact details'), and the special case for empty searchValue. While it does not explicitly say 'read-only', the verb 'search' and 'Returns' imply a safe operation. This is sufficient for a search tool, though an explicit read-only note would improve clarity.

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 main purpose. Every sentence adds value: the first defines the tool's function, and the second covers pagination and the all-contacts behavior. There is no fluff or redundancy (the empty-searchValue note is arguably duplicated in the schema, but it is a key usage point). Perfectly concise.

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 no output schema, the description adequately covers return values and pagination, which are essential for using the pageNumber parameter. It also highlights the behavior when searchValue is omitted. It does not mention the searchOption enum values or the domainId default, but those are already in the schema. The description is complete enough for a search tool, though it could mention that it is read-only to fully round out the context.

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 input schema provides descriptions for all 5 parameters (100% coverage), so the description need not compensate. The description adds little beyond the schema: it summarizes the search fields and repeats the empty-searchValue behavior already documented in the schema. The output note about return fields is not parameter semantics. Thus, the description does not significantly enhance parameter understanding 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 states the tool's function: 'Search for Yuki relations (customers/suppliers) by name, code, VAT number, or other fields.' It specifies the resource (relations) and the action (search), with a clear scope of usable fields. It distinguishes itself from sibling tools like get_gl_accounts or process_invoices, which target different entities or operations.

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 context: it is a search tool for relations, with a specific usage hint: 'Omit searchValue (or pass an empty string) to retrieve all contacts.' This implies when to use the tool, but it does not explicitly mention alternatives or when-not-to-use. Sibling tools are mostly for other data types, so the context is clear enough for an agent to select it appropriately.

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

upload_documentA

Upload a document (PDF) to the Yuki archive with financial metadata. Use this to attach source documents to purchase invoices or store receipts. The document must be provided as a base64-encoded string. Call get_document_folders first to find the correct folder ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoTotal amount on the document (e.g. invoice total including VAT)
folderNoArchive folder ID. Use get_document_folders to list available folders.
projectNoProject code to link this document to a Yuki project
remarksNoInternal remarks shown in the archive
currencyNoISO 4217 currency code for the document amountEUR
fileNameYesFile name including extension (e.g. 'invoice-2024-0042.pdf')
dataBase64YesFile content encoded as a base64 string
costCategoryNoGL account code for automatic cost categorisation (e.g. '4000')
paymentMethodNoPayment method code. 0 = unknown, 1 = transfer, 2 = direct collection
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4/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 full burden. It discloses key requirements (base64-encoded string) and a dependency (folder ID from get_document_folders), but does not describe response behavior, error conditions, or mutation characteristics beyond the act of uploading. This is useful but incomplete for a mutation tool.

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 four sentences with no filler. It front-loads the purpose, then adds usage context, a requirement, and a prerequisite. Each sentence contributes value.

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 tool with 10 parameters and no output schema, the description covers the core usage, requirement, and prerequisite. It could mention the response or success/failure behavior, but given the rich schema, the description is adequate for an agent to invoke it correctly.

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 input schema provides 100% coverage with descriptions for all 10 parameters. The description adds minimal extra meaning, referencing base64 encoding and folder retrieval, both already present in the schema. It does not introduce new parameter-specific details, so a baseline score of 3 is appropriate.

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 function with a specific verb ('Upload') and resource ('Yuki archive'), and distinguishes it by mentioning base64 encoding, which differentiates it from the sibling upload_document_from_path. The use case ('attach source documents to purchase invoices or store receipts') adds clarity.

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 context on when to use it ('Use this to attach source documents to purchase invoices or store receipts') and a clear prerequisite ('Call get_document_folders first to find the correct folder ID'). It does not explicitly mention when not to use it or alternatives like upload_document_from_path, so it lacks exclusions.

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

upload_document_from_pathA

Upload a PDF from a local file path to the Yuki archive. Reads and encodes the file internally — no need to pass base64 strings. Use this instead of upload_document when the file is available on disk. Call get_document_folders first to find the correct folder ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoTotal amount on the document (e.g. invoice total including VAT)
folderNoArchive folder ID. Use get_document_folders to list available folders.
projectNoProject code to link this document to a Yuki project
remarksNoInternal remarks shown in the archive
currencyNoISO 4217 currency code for the document amountEUR
fileNameNoOverride the file name sent to Yuki. Defaults to the basename of filePath.
filePathYesAbsolute path to the file on the local filesystem (e.g. '/tmp/invoice-2024-0042.pdf')
costCategoryNoGL account code for automatic cost categorisation (e.g. '4000')
paymentMethodNoPayment method code. 0 = unknown, 1 = transfer, 2 = direct collection
administrationIdNoAdministration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.

TDQS

A4.1/5.0
Behavior3/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 reveal a key behavior: 'Reads and encodes the file internally — no need to pass base64 strings.' However, it does not disclose other behavioral aspects such as required permissions, error conditions (e.g., missing file), or side effects. This is partial disclosure, but not comprehensive enough for a higher score.

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 exceptionally concise: three sentences, each serving a distinct purpose. The first gives the action, the second explains a key internal behavior, the third provides usage alternatives and a prerequisite. Every sentence earns its place with no fluff.

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 10 parameters (though only 1 required), no output schema, and no annotations. The description gives the core purpose, the alternative, and a prerequisite, which is helpful. However, it does not mention any return value or error scenarios. Given the complexity and lack of output schema, this is a moderate gap; the description is complete enough for basic usage but not fully.

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 already documents all 10 parameters with descriptions, so schema coverage is 100%, giving a baseline of 3. The description adds little extra parameter semantics beyond the schema; it mentions the internal encoding to explain why base64 isn't needed, but this is more behavioral than parameter-specific. Thus, no reason to raise above the baseline.

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 function: 'Upload a PDF from a local file path to the Yuki archive.' It uses a specific verb + resource. It also distinguishes itself from the sibling tool upload_document by noting to 'Use this instead of upload_document when the file is available on disk.'

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: it names the alternative tool (upload_document) and the condition for choosing this tool ('when the file is available on disk'). It also gives a prerequisite step ('Call get_document_folders first to find the correct folder ID'). This fully satisfies the when/alternatives criteria.

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

upsert_contactA

Create or update a contact (customer or supplier) in Yuki. When contactCode matches an existing record it will be updated; otherwise a new contact is created. Returns the Yuki response with the contact ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
bicNoBIC / SWIFT code
cityNo
phoneNoMain phone number
mobileNo
websiteNo
zipcodeNo
domainIdNoDomain ID (GUID). Defaults to YUKI_DOMAIN_ID env var.
fullNameYesFull company or person name
lastNameNo
cocNumberNoKvK / Chamber of Commerce number
firstNameNo
vatNumberNoVAT / BTW number (e.g. 'NL123456789B01')
middleNameNo
bankAccountNoIBAN bank account number
contactCodeNoUnique contact code. Used to identify and update existing contacts.
contactTypeNoRole: Debtor = customer, Creditor = supplier, Both = customer & supplierBoth
countryCodeNoISO 3166-1 alpha-2 country codeNL
addressLine1No
addressLine2No
emailAddressNo

TDQS

A3.9/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 full burden of behavioral disclosure. It does explain the create/update logic and the return value, which is useful. However, it omits crucial details such as whether updates are partial or full replacements, what happens to omitted fields, and error handling, leaving ambiguity for a 20-parameter write operation.

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 three sentences, front-loaded with the primary purpose, and every sentence contributes value: the operation, the conditional logic, and the return value. There is no redundant or filler content.

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 20 parameters and no output schema, the description covers the core upsert concept and the return value but leaves open important behavioral details such as update semantics (partial vs full), required fields for creating a new contact (only fullName is required in schema), and any side effects. It is minimally viable but has clear gaps in operational guidance.

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 description coverage is 50%, meaning half the parameters lack descriptions in the schema. The description adds meaningful context for contactCode (that it identifies existing records) and implicitly maps 'customer or supplier' to the contactType parameter. However, it does not compensate for the lack of descriptions for the other undocumented parameters, and overall adds limited parameter-level detail.

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 specifies the operation ('Create or update a contact'), the target resource ('in Yuki'), and the distinguishing behavior based on contactCode. It explicitly differentiates the tool from its read-only siblings by stating it performs writes and explains the upsert nature.

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 context for use: it indicates when a record is updated vs created based on contactCode. It does not explicitly state exclusions or alternatives, but the upsert behavior itself gives sufficient usage guidance, especially with no competing contact-creation tools among siblings.

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

TDQS

A3.7/5.0
Disambiguation3/5

Several tools have overlapping purposes: get_transactions, get_transaction_details, and get_gl_transactions_detailed all relate to transaction data, while get_document, download_document, and get_transaction_document all revolve around retrieving document content or metadata. Descriptions help differentiate them, but an agent may need to read carefully to pick the right one.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (get_, process_, upload_, download_, list_, search_, etc.). No mixed conventions or odd variations; the naming is predictable and readable.

Tool Count2/5

With 31 tools, this server is over the recommended range for a coherent set. While the accounting/ERP domain is broad, the count feels heavy and may overwhelm an agent, especially with many document and transaction retrieval variants.

Completeness4/5

The tool set covers a wide range of Yuki operations: administrations, contacts, GL accounts, transactions, invoices, document upload/download/search, workflow, and fiscal queries. Minor gaps exist (e.g., no direct update/delete for invoices or a single-contact getter), but most core workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to read and write Cynco accounting data, including querying books, creating invoices, reconciling transactions, and generating financial reports.
    15
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to manage invoices, customers, suppliers, accounting entries, orders, and more through Fortnox's cloud accounting platform via natural language.
    20
    73
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to QuickBooks Online, enabling management of invoices, customers, expenses, and reports through natural language.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Zoho Books accounting tasks such as invoices, contacts, expenses, and sales orders through natural language.
    39
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CodeMill-Solutions/yuki-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server