Skip to main content
Glama

Server Details

Swedish bookkeeping for small limited companies: ledger, invoices, VAT, payroll and annual reports.

Ownership verified
Status
Healthy
Uptime
37.5% over 20 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 124 tools

Disambiguation4/5

Most tools have a clearly distinct purpose and the descriptions actively cross-reference alternatives (e.g. book_voucher vs create_voucher vs propose_voucher, add_voucher_underlag vs attach_underlag vs upload_underlag vs create_underlag_upload), which greatly reduces misselection. However, with 124 tools there are still tight clusters of near-synonyms (read_tax/compute_tax/download_ink2_sru, read_annual_report/read_annual_report_draft, multiple report readers) that require careful reading to separate.

Naming Consistency4/5

Names consistently follow a snake_case verb_noun pattern (get_, list_, create_, update_, delete_, book_, read_, reverse_, register_) with a clear list/get singular-plural convention. Minor deviations exist in verb choice (upsert_, edit_, compute_, calc_, export_) and in mixed Swedish/English domain words for the same concept (arsredovisning vs annual_report), but the overall pattern is predictable.

Tool Count2/5

124 tools is far beyond a manageable surface, even for a comprehensive bookkeeping/payroll/VAT/annual-report ERP. While the domain is genuinely large, this many tools creates a heavy selection burden and violates the 25+ 'too many' threshold.

Completeness5/5

The surface covers the full lifecycle across every sub-domain: create/update/delete for invoices, employees, assets, documents and vouchers; booking, approval, reversal and undo flows; reconciliation, payroll, VAT, year-end and statutory reporting. Append-only reversal tools intentionally replace destructive edits, leaving no obvious dead ends.

Available Tools

124 tools
add_bilaga_rowLägg till en avstämningsradAInspect

Lägger till en manuell specifikationsrad på en avstämning (bilaga) och behåller befintliga rader. Använd för att lägga till en enstaka post, t.ex. hela slutsaldot så att differensen nollas; för att ersätta eller tömma alla rader på en gång, använd set_bilaga_spec. Returnerar bilagan med alla rader, avstämt belopp och differens. Bieffekt: raden sparas; attesten ändras inte, den görs av en människa i appen. Kräver behörigheten reconcile.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesKalenderår för avstämningsmånaden, t.ex. 2026.
monthYesAvstämningsmånad 1 till 12, t.ex. 3 för mars.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
accountYesKontonummer i BAS-kontoplanen, t.ex. 1930.
amount_oreYesBelopp i öre (heltal), t.ex. 1250000 för 12 500 kr. Negativt för kreditsaldo.
bilaga_typeYesAvstämningens typ som den visas i get_open_reconciliations, t.ex. BANK eller GL_ACCOUNT.
descriptionYesRadens text, t.ex. Saldo enligt kontoutdrag 2026-03-31.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond annotations: discloses the authorization requirement (kräver behörigheten reconcile), the side effect (raden sparas), and what it deliberately does NOT do (attesten ändras inte, done by a human in the app). It also describes the return payload, which matters since there is no output schema.

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?

Front-loads the core action and row-preservation behavior, then layers usage, return values, side effects, and permissions in a tight sequence. Each sentence carries distinct value with no filler.

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 7-param mutation with no output schema, the description covers purpose, sibling routing, return contents (rader, avstämt belopp, differens), side effects, and permissions. Nothing an agent needs to call it correctly 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?

Schema description coverage is 100%, so all seven parameters are already documented in the schema (formats, units, examples, sourcing via list_companies/get_open_reconciliations). The description adds no parameter-level meaning beyond that, so the 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?

States a specific verb (lägger till) and resource (manuell specifikationsrad på en avstämning/bilaga), plus the key constraint that existing rows are preserved. It explicitly names and distinguishes itself from the sibling set_bilaga_spec, so an agent can tell them apart without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states when to use it (lägga till en enstaka post, e.g. the whole closing balance to zero out the difference) and names the alternative set_bilaga_spec for the opposite case (ersätta eller tömma alla rader på en gång). Both the when and the when-not are covered.

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

add_fiscal_yearLägg till räkenskapsårAInspect

Lägg till ett räkenskapsår: året efter det senaste (nytt år) eller året före det tidigaste (börja bokföra ett tidigare år utan SIE-fil). Inga luckor. Balansräkningen rullas fram automatiskt och resultaträkningen börjar om på 0. Är föregående års resultat redan bokfört (årsbokslutet klart) förs det direkt om från Årets resultat (2099) till Balanserat resultat (2091) på nya årets första dag, annars sker det när föregående år låses. Scope book. Argument: orgnr, year (slutår, t.ex. 2027).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing side effects: the balance sheet is rolled forward automatically, the income statement restarts at 0, and prior-year result is moved from 2099 to 2091 on the new year's first day only if the year-end closing is already booked, otherwise at prior-year lock. It does not cover permissions/auth requirements or how the 'no gaps' rule surfaces as an error.

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

Conciseness4/5

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

Front-loaded with the action and the two modes before the carry-forward mechanics, so the key routing information comes first. The single dense sentence about the 2099/2091 transfer and the trailing 'Scope book. Argument: ...' clause add length, with the argument recap being partly redundant with the schema.

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 2-parameter mutation tool with no output schema, the description covers what it does, when each mode applies, and the accounting side effects. Missing pieces are the return value and any authorization/ownership prerequisites on orgnr, but the essential decision-making information is present.

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 50%: orgnr is documented in the schema, but year is not. The description compensates by clarifying that year is the end year of the fiscal year (slutår, e.g. 2027), which is genuinely non-obvious for a fiscal-year span. It also restates the required argument pair, though that duplicates 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?

States a specific verb+resource ('Lägg till ett räkenskapsår') and immediately enumerates the only two supported modes: the year after the latest (new year) or the year before the earliest (start bookkeeping in an earlier year without a SIE file). This distinguishes it clearly from siblings like list_fiscal_years, lock_fiscal_year, and transfer_prior_year_result.

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

Usage Guidelines4/5

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

Gives explicit conditions for the two modes of use and the hard constraint 'Inga luckor' (no gaps), which tells the agent when the call will fail. It does not name alternative tools (e.g. import_sie for bulk historical years), so the when-not guidance is implied rather than explicit.

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

add_instructionSpara noteringAInspect

Spara en instruktion till koncernens LLM-kontext, 'så vi vet om det här framgent', t.ex. en konteringsregel eller ett undantag. Blir kontext för framtida agenter. Kräver behörigheten 'manage_documents'. Argument: text.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare write (readOnlyHint=false), non-destructive and non-idempotent. Beyond those, the description adds two useful facts: the permission required and the persistence effect ('becomes context for future agents'). It still omits whether repeated calls accumulate instructions or how text is retained, so it exceeds the annotation baseline only modestly.

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

Conciseness4/5

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

Short and front-loaded with the purpose before the examples and prerequisites. The trailing 'Argument: text' is largely redundant with the schema, but overall there is little waste.

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 simple single-param write tool with no output schema, the description covers purpose, examples, persistence and auth. It leaves open whether instructions accumulate, whether they can be overwritten, and what the response is, so it is adequate but leaves 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?

One parameter with 0% schema description coverage, so the description must compensate. It gives content hints via examples (posting rule, exception) but the closing 'Argument: text' merely restates the schema property name without explaining format, length, or constraints.

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?

States a specific verb and resource: 'Spara en instruktion till koncernens LLM-kontext' (save an instruction to the group's LLM context), plus concrete examples (a posting rule or an exception). The purpose is clear and distinct; it does not explicitly differentiate from siblings, but no sibling appears to serve this function.

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

Usage Guidelines4/5

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

Gives a clear when-to-use rationale ('så vi vet om det här framgent') with illustrative examples and names the required permission 'manage_documents'. It does not state when NOT to use it or name alternatives, which keeps it 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.

add_time_entryLägg in tidpostAInspect

Lägg in en tidpost åt en anställd (t.ex. från en tidlapp). Högst 24 timmar per dag. Med approve=true attesteras posten direkt, annars väntar den på attest. Scope payroll. Argument: orgnr, employee_id, work_date (YYYY-MM-DD), hours (t.ex. 7.5); valfritt kind (arbete|overtid|ob|sjuk|semester|vab|ledig, default arbete), project (kund eller projekt), note, approve.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoarbete
noteNo
hoursYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
approveNo
projectNo
work_dateYes
employee_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare a write operation (readOnlyHint=false) that is non-idempotent and non-destructive. The description adds real business context beyond that: a 24-hour-per-day validation cap, the immediate-attestation workflow via approve=true versus a pending state, and the payroll scope. It stops short of covering auth requirements or duplicate/error behavior.

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

Conciseness4/5

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

A single dense paragraph that front-loads the action, then the behavioral rules (24h cap, approve), then the argument list. Every clause carries information; the trailing argument list is a bit list-like but still earns its place given the low schema coverage.

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 an 8-parameter write tool with no output schema, the description covers the action, a validation rule, the approval workflow, and all parameter formats. It omits error/duplicate handling and where employee_id originates, but is otherwise complete enough to invoke correctly.

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

Parameters4/5

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

Schema description coverage is only 13%, so the description must compensate, and it does: it lists all eight arguments, adds the work_date format (YYYY-MM-DD), an example for hours (7.5), and enumerates the kind values (arbete|overtid|ob|sjuk|semester|vab|ledig) that appear nowhere as schema enums. It does not explain employee_id or project sourcing beyond a brief gloss.

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?

States a specific verb and resource: add a time entry for an employee (e.g. from a time slip). This clearly distinguishes it from list_time_entries, delete_time_entry and review_time_entries, though it does not name those siblings explicitly.

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?

Provides an era-of-use hint ('t.ex. från en tidlapp') and explains the approve=true vs pending-attestation behavior, which effectively guides the caller. However, it names no alternatives and gives no explicit when-not-to-use guidance, so usage is implied rather than spelled out.

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

add_voucher_underlagLadda upp underlag till verifikatAInspect

Laddar upp en liten fil, t.ex. ett kvitto eller en faktura, som underlag och kopplar den valfritt till ett verifikat. Använd när filen inte redan finns i Kvickd och är liten nog att skicka base64-kodad. Finns filen redan i inkorgen eller bland underlagen, använd attach_underlag; är den stor (t.ex. ett foto), använd create_underlag_upload; gäller den en avstämning (kontoutdrag, avtal), använd upload_underlag. Returnerar underlagets id, filnamn, filtyp, storlek och verifikat-id (null om det inte kopplats). Bieffekt: filen sparas bland bolagets underlag; utan voucher_id hamnar den i underlagspoolen och kan kopplas senare med attach_underlag. Kräver behörigheten upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFilnamn med filändelse, t.ex. kvitto-2026-03-14.pdf.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
voucher_idNoValfritt: id (heltal) på verifikatet som underlaget ska kopplas till, t.ex. från list_vouchers eller svaret från book_voucher. Utelämna för att lägga underlaget i underlagspoolen.
content_base64YesFilens innehåll, base64-kodat. Passar små filer; för stora filer, använd create_underlag_upload.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (which only declare non-readonly, non-idempotent, non-destructive), the description discloses the persistent side effect (file saved among the company's underlag), the pool behavior when voucher_id is omitted, the required 'upload' permission, and the return payload. This is exactly the behavioral context annotations cannot carry.

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?

Purpose first, then routing rules, then return values, side effects and the permission requirement — every sentence carries distinct information with no filler, despite the length the content is front-loaded and scannable.

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?

There is no output schema, but the description enumerates the return fields (id, filename, filetype, size, voucher-id or null), states the side effect, links all four sibling alternatives and the permission prerequisite. An agent has everything needed to select and invoke it correctly.

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

Parameters4/5

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

With 100% schema coverage the schema already documents all four parameters, so the baseline is 3. The description still adds meaning beyond the schema by tying content_base64 to the 'small file' constraint and explaining that omitting voucher_id routes the file into the underlag pool for later linking with attach_underlag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Laddar upp en liten fil ... som underlag och kopplar den valfritt till ett verifikat') with the distinguishing scope condition (small, base64-encoded, optionally linked to a voucher). An agent can tell it apart from attach_underlag, create_underlag_upload and upload_underlag without opening any schema.

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?

Explicit when-to-use ('Använd när filen inte redan finns i Kvickd och är liten nog att skicka base64-kodad') followed by three named alternatives with the exact condition that selects each: existing file -> attach_underlag, large file -> create_underlag_upload, reconciliation -> upload_underlag. Nothing is left to inference.

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

approve_and_book_vatBokför momsavräkningAInspect

Godkänn och bokför momsavräkningen för en period (nolla momskontona mot redovisningskontot). KODEN postar. Kräver scope book; ett satt bokföringstak (0 = ingen gräns) får inte överstigas. Argument: orgnr, key (periodnyckel); valfritt year.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
yearNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only give generic hints (readOnlyHint=false, idempotentHint=false); the description adds real behavior: it discloses that the operation posts ('KODEN postar'), that it zeroes VAT accounts against the accounting account, that scope 'book' is required, and that a booking cap (0 = unlimited) can block it. This is meaningful disclosure beyond the structured fields, though reversibility/undo is not addressed.

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

Conciseness4/5

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

Compact and front-loaded: purpose first, then mechanism, then constraints, then arguments. No filler sentences, though the trailing 'Argument:' list partly duplicates the schema.

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 an irreversible-looking posting tool with no output schema, the description covers scope, cost/cap guard, what gets posted, and the argument set. Missing only failure/state preconditions and whether the approval can be undone, which is a modest gap.

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 only 33% - only orgnr is documented (with a list_companies hint). The description compensates partially by explaining that key is a 'periodnyckel' and year is optional, which the schema does not say. That is useful but shallow, leaving formats and how to obtain the period key unstated.

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?

States a specific verb pair ('Godkänn och bokför') and resource ('momsavräkningen för en period') and even describes the mechanism ('nolla momskontona mot redovisningskontot'), which separates it from read-only siblings like get_vat_return and list_vat_periods. It stops short of explicitly naming those siblings, so not 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 Guidelines3/5

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

Context is implied (a period-based VAT reconciliation that must be booked) and two hard prerequisites are given: scope 'book' and a booking cap that must not be exceeded. However, it never states when to choose this over get_vat_return or list_vat_periods, nor what state a period must be in before approval.

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

approve_voucher_draftGodkänn verifikatförslagAInspect

Godkänn och bokför ett väntande verifikatförslag (draft). Det postas i huvudboken som ett vanligt verifikat och KODEN validerar dubbel bokföring. Gör bara detta när användaren instruerat dig att godkänna. Kräver behörigheten 'book'. Ett bokföringstak på nyckeln gäller även här. Argument: orgnr, draft_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
draft_idYes

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: it posts into the general ledger as a normal voucher, the code validates double-entry bookkeeping, it requires the 'book' permission, and a booking cap on the key applies. These auth/side-effect details go well past the readOnly/destructive/idempotent hints.

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

Conciseness4/5

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

Dense but front-loaded with the core action first, then validation/auth/cap caveats. The trailing 'Argument: orgnr, draft_id' is redundant with the required-parameters schema, a minor waste.

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

Completeness4/5

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

No output schema, but the description covers the mutation's side effects, permission requirement, validation, and usage guard, which is most of what an agent needs. The undocumented draft_id semantics are the remaining gap.

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 only 50% (draft_id has no description) and the description merely lists 'orgnr, draft_id' without explaining either. It adds no meaning over the schema and does not compensate for the undocumented draft_id, which the agent must supply from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise compound action ('Godkänn och bokför ett väntande verifikatförslag') with verb+resource, and the '(draft)' qualifier plus sibling context makes it clearly distinct from reject_voucher_draft and edit_voucher_draft. An agent can distinguish it without opening the schema.

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

Usage Guidelines4/5

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

Provides an explicit guard condition: only act when the user has instructed approval. That is a clear when-to-use constraint and implicitly steers away from reject/edit siblings. It stops short of naming those alternatives explicitly, hence 4.

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

attach_inbox_itemArkivera inkorgspostA
Idempotent
Inspect

Arkiverar en post i inkorgen: bilagorna sparas i dokumentarkivet med vald kategori och posten markeras som hanterad. Använd för avtal, policyer, protokoll och liknande som ska sparas; ska en leverantörsfaktura registreras, använd create_supplier_invoice, och ska ett kvitto kopplas till ett verifikat, använd attach_underlag. Returnerar posten med ny status (filed) och dess bilagor. Bieffekt: posten flyttas från väntande till hanterade. Kräver behörigheten manage_documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
categoryNoValfritt: avtal, policy, protokoll, attestordning, leverantorsfaktura eller ovrigt.
inbox_idYesInkorgspostens id (heltal), t.ex. 18. Hämta med list_inbox.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description still adds substantial extra context: the state side effect (posten flyttas från väntande till hanterade), the required permission (manage_documents), and the returned payload with new status 'filed'. These go well beyond what the annotations disclose.

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?

Front-loads the action and its effect, then usage/exclusions, then return, side effect, and permission requirement. Every sentence carries information an agent needs; no filler 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 3-parameter mutation with no output schema, the description supplies the missing pieces: the return value shape, the state transition, and the authorization requirement. Combined with complete schema coverage and informative annotations, nothing essential is left unstated.

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%, with orgnr, inbox_id, and category all documented, including examples and the list_companies/list_inbox lookup hints. The description reinforces that a category is stored with the attachments but adds no syntax or format detail beyond the schema, so 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?

States a specific verb and resource ('Arkiverar en post i inkorgen') plus the concrete effects (bilagorna sparas i dokumentarkivet, posten markeras som hanterad). It explicitly distinguishes itself from close siblings create_supplier_invoice and attach_underlag, so an agent can route correctly without opening schemas.

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?

Gives explicit when-to-use ('avtal, policyer, protokoll och liknande som ska sparas') and names two alternatives together with the conditions that select them ('ska en leverantörsfaktura registreras, använd create_supplier_invoice'; 'ska ett kvitto kopplas till ett verifikat, använd attach_underlag'). This is textbook routing guidance.

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

attach_underlagKoppla befintligt underlag till verifikatAInspect

Kopplar underlag som redan finns i Kvickd till ett verifikat, även ett som redan är bokfört. Använd för fakturor och kvitton i inkorgen eller uppladdade dokument (document_ids) och för underlag i underlagspoolen (underlag_ids); hämta id med list_available_underlag. Ska en ny fil laddas upp, använd add_voucher_underlag eller create_underlag_upload. Returnerar verifikatets id och de kopplade underlagen. Bieffekt: underlagen kopplas till verifikatet; själva bokföringen ändras inte. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
voucher_idYesId (heltal) på verifikatet som underlagen ska kopplas till, t.ex. från list_vouchers.
document_idsNoValfritt: lista med dokument-id (heltal) från inkorgen eller dokumentarkivet, t.ex. [12, 15]. Hämta med list_available_underlag.
underlag_idsNoValfritt: lista med underlags-id (heltal) från underlagspoolen, t.ex. [7]. Hämta med list_available_underlag.

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that it works on already-booked vouchers, that the side effect is only an attachment (bookkeeping itself is unchanged), that the book permission is required, and what is returned. None of this is derivable from the readOnly/destructive/idempotent hints alone.

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?

Front-loads the core action, then groups use-cases, alternatives, return, side effect, and permission into tight sentences. Every sentence carries information an agent needs; there is no filler.

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?

Although there is no output schema, the description states the return shape (voucher id and attached underlag), the permission requirement, and the mutation boundary. For a 4-parameter mutation tool this covers everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: it maps document_ids to inbox/uploaded documents and underlag_ids to the underlagspool, and points to list_available_underlag for retrieval. It stops short of noting that at least one of the two optional arrays is presumably required for a meaningful call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (attach existing underlag to a verifikat) and immediately distinguishes itself from siblings add_voucher_underlag and create_underlag_upload for new uploads. The agent can tell what this does and what it does not without opening any schema.

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 names when to use it (existing documents, including on already-booked vouchers), which two parameter paths apply, how to get the ids (list_available_underlag), and redirects to add_voucher_underlag/create_underlag_upload when a new file must be uploaded. Nothing is left to inference.

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

book_customer_invoiceBokför kundfakturaAInspect

Bokför en kundfaktura som redan har skapats med create_customer_invoice, så att fordran, intäkt och utgående moms hamnar i huvudboken (D 1510 / K intäkt / K moms på 2610, 2620 eller 2630 beroende på momssats). Använd för fakturor i kundreskontran i stället för book_voucher eller create_voucher, så att fakturan får rätt status och kan betalas av med register_customer_payment. En ROT/RUT-faktura delas: kundens del på 1510 och den preliminära skattereduktionen på 1513 (fordran på Skatteverket); den kräver kompletta uppgifter (se husarbete.missing). Returnerar fakturan med verifikatnummer och status. Bieffekt: verifikatet postas direkt och ett satt bokföringstak får inte överstigas. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYesKundfakturans id (heltal), t.ex. 42. Hämta med list_customer_invoices.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, idempotent=false, destructive=false), it discloses real behavioral traits: the voucher posts immediately, a booking cap must not be exceeded, the book permission is required, ROT/RUT invoices split across 1510/1513, and it returns the invoice with voucher number and status. This is the kind of context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the core action and accounting effect, and every sentence carries operational content (alternatives, ROT/RUT, side effects, permission). It is dense and fairly long, but nothing is filler.

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 posting/mutation tool with no output schema, the description covers return value ('returnerar fakturan med verifikatnummer och status'), side effects, prerequisites, and auth. An agent has everything needed 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?

Schema description coverage is 100%, so both params (orgnr, invoice_id) are already documented with format and retrieval hints. The description adds no syntax or meaning beyond the schema for the parameters themselves, 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?

States a specific verb and resource ('Bokför en kundfaktura') and pins the precondition that it was created by create_customer_invoice. It elaborates the exact accounting outcome (D 1510 / K intäkt / K moms 2610-2630), which makes it unmistakable from neighbors like book_voucher or create_voucher.

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 says to use this for customer-ledger invoices 'istället för book_voucher eller create_voucher', naming the alternatives and the reason (correct status, payable via register_customer_payment). It also flags the ROT/RUT special case and its completeness prerequisite (husarbete.missing).

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

book_supplier_invoiceBokför leverantörsfakturaAInspect

Bokför en leverantörsfaktura som redan har registrerats med create_supplier_invoice, så att kostnad, ingående moms och leverantörsskuld hamnar i huvudboken (D kostnadskonto + D 2640 / K 2440). Använd för fakturor i leverantörsreskontran i stället för book_voucher eller create_voucher, så att fakturan får rätt status och kan betalas med register_supplier_payment. Returnerar fakturan med verifikatnummer och status. Bieffekt: verifikatet postas direkt och ett satt bokföringstak får inte överstigas. Faktura i annan valuta utan kurs: ange fx_rate eller total_sek_ore som användaren har angett, gissa aldrig. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
fx_rateNoValfritt: växelkurs i SEK per 1 enhet som användaren har angett, t.ex. 11.42. Bara för faktura i annan valuta som saknar kurs.
invoice_idYesLeverantörsfakturans id (heltal), t.ex. 42. Hämta med list_supplier_invoices.
total_sek_oreNoValfritt, i stället för fx_rate: fakturans totalbelopp i SEK, i öre, som användaren har angett.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (which only say non-read-only, non-idempotent, non-destructive): it discloses a side effect (voucher is posted directly), a hard constraint (a configured bokföringstak must not be exceeded), an authorization requirement (permission 'book'), and the return content (voucher number and status).

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

Conciseness4/5

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

Dense but front-loaded: purpose first, then alternatives, then side effects, then currency handling. Every sentence carries information, though the single unbroken paragraph could be trimmed or structured slightly for faster scanning.

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 mutation tool with no output schema and no annotations beyond safety flags, the description covers the essential gaps: it describes what is returned (voucher number and status), the posting side effect, the booking-limit constraint, and the permission requirement.

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% with rich per-parameter descriptions and examples, so the baseline is 3. The description adds meaningful semantics for fx_rate/total_sek_ore: they must reflect a rate the user actually supplied and must never be guessed, which is decision-guiding context the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (book a supplier invoice) and immediately scopes it: an invoice already registered via create_supplier_invoice. It names the sibling tools it is not (book_voucher, create_voucher), so an agent can distinguish it without opening any schema.

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?

Explicit when-to-use: invoices in leverantörsreskontran, already created by create_supplier_invoice. Explicit alternatives and the reason to prefer this one (correct status, payable via register_supplier_payment), which routes the agent correctly among many booking siblings.

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

book_voucherBokför verifikat med källhänvisningAInspect

Bokför ett verifikat i huvudboken med debet- och kreditrader och en obligatorisk källhänvisning (basis). Använd när verifikatet bygger på något du har läst i Kvickd, t.ex. en bankrad, en avvikelse eller ett godkänt förslag, och ska kunna spåras dit. Vill du bokföra med tecknade belopp och bifoga kvitton direkt, använd create_voucher; ska en människa granska först, använd propose_voucher. Returnerar verifikatets id, serie och nummer. Bieffekt: verifikatet postas direkt. Koden validerar att debet är lika med kredit, att det finns minst två rader och att perioden inte är låst, och ett satt bokföringstak får inte överstigas. Underlag i annan valuta än SEK: gissa aldrig växelkursen. Fråga användaren efter kursen (SEK per 1 enhet) eller SEK-beloppet (t.ex. det som drogs från kontot), räkna raderna i SEK och ange currency, foreign_amount_minor och fx_rate eller total_sek_ore, så dokumenteras kursen på verifikatet. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
textYes
basisYes
linesYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
seriesNoA
fx_rateNo
currencyNo
finding_refNo
proposal_idNo
total_sek_oreNo
foreign_amount_minorNo

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the annotations: discloses the immediate posting side effect ('verifikatet postas direkt'), the validation rules enforced server-side (debit=kredit, minimum two rows, period not locked, booking ceiling), the required 'book' permission, and currency-handling behavior. This is strong behavioral disclosure for a non-idempotent mutation. Slightly short of 5 only because it does not describe whether/book the operation can be reversed or what happens on partial failure.

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

Conciseness4/5

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

Front-loaded with purpose, then alternatives, return values, side effects, validation, currency guidance and permission in a logical order. Dense but each block earns its place; the currency paragraph is long but necessary given the ambiguity of the parameters.

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 12-param mutation with no output schema, it supplies the return shape (id, serie, nummer), the safety/authorization profile and validation constraints. Remaining gaps are the undocumented scalar params (orgnr, series, text), but the high-risk currency path and the required basis are fully 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 coverage is only 8% across 12 params, so the description must carry the burden. It explains the most ambiguous parameters well (basis as mandatory source reference, currency, foreign_amount_minor, fx_rate, total_sek_ore with the 'never guess the rate' rule), but leaves orgnr, series, text, lines, finding_ref and proposal_id entirely undocumented. Partial compensation for a large coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Bokför ett verifikat i huvudboken') plus the defining constraint (debet-/kreditrader and a mandatory källhänvisning/basis). It explicitly distinguishes itself from sibling tools create_voucher and propose_voucher by name, so an agent can route correctly without opening a schema.

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?

Gives an explicit trigger ('Använd när verifikatet bygger på något du har läst i Kvickd... och ska kunna spåras dit') and names two alternatives with the conditions that select them: create_voucher for signed amounts with attachments, propose_voucher when a human must review first. When/when-not/alternatives are all present.

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

book_year_end_stepBokför årsavslutsstegAInspect

Bokför ett årsavslutssteg. Har steget ett förslag (action='book') postar KODEN checklistans balanserade verifikat — LLM väljer bara steget. För ett manuellt steg (action='manual', t.ex. periodiseringar utan förslag) anger du en egen balanserad journal. Låser aldrig perioden (det gör en människa). Kräver scope book. Argument: orgnr, year, step (periodiseringar|dispositioner|aktuell_skatt|arets_resultat); valfritt journal ([{account, debit_ore, credit_ore, text?}]) för manuella steg.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepYes
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
journalNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only give the generic safety profile (readOnly=false, destructive=false, idempotent=false). The description adds real context beyond that: it never locks the period (a human does), it requires scope book, and it discloses that for proposal-backed steps the code — not the LLM — writes the voucher. Consistent with annotations, no contradiction.

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

Conciseness4/5

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

Front-loaded with the verb and resource, then mode rules, then the locking/scope caveats, then the argument summary. Dense but each sentence carries distinct information; 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 non-idempotent mutation with no output schema, the description covers the posting model, scope requirement, and all arguments, which is close to sufficient. It omits error/reversal behavior and the resulting voucher reference, and the unexplained action values leave a small gap.

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 only 25% (just orgnr), so the description must compensate, and it does list step's allowed values (periodiseringar|dispositioner|aktuell_skatt|arets_resultat) plus the journal element shape ({account, debit_ore, credit_ore, text?}). However it repeatedly references action='book'/'manual', a parameter absent from the schema, which risks leading an agent to pass a nonexistent argument.

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?

States a specific verb+resource ('Bokför ett årsavslutssteg') and immediately clarifies the division of labor between code and LLM. It is distinguishable from siblings like skip_year_end_step, undo_year_end_step and create_proposal by scope, though it never names those alternatives.

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?

Clear conditional routing: action='book' when a proposal exists (the code posts the balanced voucher, LLM only picks the step), action='manual' when the user supplies their own journal. This tells an agent exactly which branch to take, but stops short of naming sibling tools (undo/skip) or stating prerequisites like checklist state.

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

calc_payrollFörhandsberäkna lönA
Read-onlyIdempotent
Inspect

Förhandsberäkna en lönekörning (skatt + arbetsgivaravgift) UTAN att bokföra. Scope payroll. Argument: orgnr, year, month, pay_date (YYYY-MM-DD), entries ([{employee_id, gross_cash_ore, benefit_ore?, extra_tax_ore?, components?}]); extra_tax_ore justerar skatteavdraget (+extra skatt / −jämkning). components = lönearter [{kind, description?, amount_ore}], kind ∈ LON|SEMESTER|OVERTID|SJUKLON|OB|SJUKAVDRAG|BRUTTOAVDRAG|FORMAN|UTLAGG|NETTOAVDRAG (positiva belopp; arten styr tecknet). Valfritt note.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
yearYes
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
entriesYes
pay_dateYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low; the description adds real value by specifying the calculation content (skatt + arbetsgivaravgift) and the non-posting behavior that matches readOnlyHint. It does not describe output format or the effect on subsequent run_payroll, keeping it below 5.

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

Conciseness4/5

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

Front-loaded with purpose before the dense argument list, and every clause (types, formats, enum values, sign conventions) earns its place given the sparse schema. The parameter enumeration is run-on but justified by the low schema coverage.

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 6-param, low-schema-coverage tool with no output schema, the description is thorough on inputs and behavior. It stops short of explaining return values or how the result feeds run_payroll, which is the main remaining gap.

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

Parameters5/5

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

With only 17% schema coverage, the description carries the load and does so well: it documents orgnr, year, month, pay_date (YYYY-MM-DD format), and the full nested entries shape (employee_id, gross_cash_ore, benefit_ore, extra_tax_ore, components). It uniquely supplies the kind enum (LON|SEMESTER|OVERTID|...) absent from the schema and explains extra_tax_ore sign semantics (+extra skatt / −jämkning).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Förhandsberäkna en lönekörning') and the exact scope (skatt + arbetsgivaravgift), and the crucial negation 'UTAN att bokföra' separates it from the booking sibling run_payroll. An agent can distinguish this preview-calculation tool from run_payroll without opening either schema.

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

Usage Guidelines4/5

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

'UTAN att bokföra' clearly signals the preview-only context (use this to compute, not to post), which distinguishes it from run_payroll. However, no alternative sibling is named explicitly and there is no explicit when/when-not statement, so 4 rather than 5.

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

cancel_customer_invoiceMakulera kundfakturaA
DestructiveIdempotent
Inspect

Makulera en kundfaktura (obetald → backar bokföringsverifikatet). Scope book. Argument: orgnr, invoice_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=true, so the safety profile is covered. The description adds real value beyond them by disclosing the precondition (invoice must be unpaid) and the actual effect (the bokföringsverifikat is reversed), which the annotations do not convey.

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

Conciseness4/5

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

Very tight and front-loaded: the action and its effect come first, scope second. The trailing 'Argument: orgnr, invoice_id' is redundant with the schema's required fields and is the only wasted fragment.

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 destructive, idempotent mutation with no output schema and annotations covering safety, the description supplies the two things an agent actually needs: the precondition and the accounting consequence. Nothing critical 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?

Schema coverage is 50%: orgnr is fully documented in the schema including a hint to use list_companies, while invoice_id has no schema description at all. The description only restates 'Argument: orgnr, invoice_id' without adding format, lookup, or type meaning, so it does not compensate for the undocumented parameter.

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?

States a specific verb and resource ('Makulera en kundfaktura') and adds the behavioral distinguishing detail that it applies to unpaid invoices and reverses the accounting voucher, which separates it in spirit from credit_customer_invoice. It never names a sibling explicitly, so it stops short of the top band.

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 parenthetical 'obetald' gives an implied precondition and 'Scope book' hints at the operating scope, so an agent can infer when this applies. However, there is no explicit when-to-use versus credit_customer_invoice or cancel_supplier_invoice, and no stated exclusions for paid invoices.

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

cancel_supplier_invoiceMakulera leverantörsfakturaA
DestructiveIdempotent
Inspect

Makulera en leverantörsfaktura (återför bokföringen om den redan bokförts). KODEN postar återföringen. Kräver scope book. Argument: orgnr, invoice_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds value the annotations cannot: that the reversal posting is performed by the code itself when the invoice was already booked, plus the required auth scope (book). That is meaningful side-effect and permission disclosure.

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

Conciseness4/5

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

Three short, front-loaded clauses; the core action leads and the prerequisite trails. The 'KODEN postar återföringen' emphasis is a little cryptic in phrasing but carries real information, so there is little waste.

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 2-parameter mutation tool with no output schema and full annotation coverage, the description supplies the pieces an agent still needs: the reversal semantics, the auth scope, and the argument set. Return values need not be described. Minor gap: it does not clarify preconditions such as payment status.

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 description coverage is 50% – orgnr is well documented in the schema, but invoice_id has no description anywhere. The description merely restates the argument names ('Argument: orgnr, invoice_id') and adds no format, range, or lookup guidance, so it fails to compensate for the undocumented invoice_id.

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?

States a specific verb and resource ('Makulera en leverantörsfaktura') and immediately scopes the behavior to reversing an existing booking, which cleanly separates it from sibling cancel_customer_invoice and the various reverse_* tools. It does not name a sibling explicitly, so it stops 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 Guidelines3/5

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

Gives a conditional trigger ('återför bokföringen om den redan bokförts') and a hard prerequisite ('Kräver scope book'), which is real usage context. However, it never says when to prefer this over alternatives such as reverse_supplier_payment or reverse_voucher, so the routing guidance is only implied.

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

compute_taxBeräkna skattA
Read-onlyIdempotent
Inspect

Räknar fram bolagets skatt och INK2 med de justeringar som görs i årsredovisningsguiden, t.ex. ändrade rader i resultat- och balansräkningen, INK2S-justeringar och periodiseringsfond. Använd för att pröva hur justeringar påverkar skatten; för skatteberäkningen härledd direkt ur bokslutet utan justeringar, använd read_tax. Utan något annat argument än orgnr räknas skatten på bokslutet som det är. Returnerar skatteberäkningen med underlag till INK2 och räkenskapsschemat INK2R. Sparar inget. Kräver behörigheten statutory.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoRäkenskapsår relativt bokslutet: 0 = aktuellt räkenskapsår (standard), -1 = föregående.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
user_inputsNoValfria justeringar som i årsredovisningsguidens skattesteg, t.ex. INK2S-justeringar och periodiseringsfond. Utelämna för att räkna på bokslutet som det är.
balance_sheetNoValfria rader i balansräkningen [{label, amount}], belopp i kronor, som ersätter de rader som annars härleds ur bokslutet.
income_statementNoValfria rader i resultaträkningen [{label, amount}], belopp i kronor, som ersätter de rader som annars härleds ur bokslutet.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, but the description adds real context beyond them: 'Sparar inget' confirms nothing is persisted, 'Kräver behörigheten statutory' discloses an authorization prerequisite, and it sketches the return contents (INK2 underlag and INK2R). No behavioral gaps of consequence remain.

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

Conciseness4/5

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

Front-loaded with the core purpose, then the alternative-tool routing, then the default and return/auth notes. Dense but every clause carries information; slightly long, with a few parenthetical examples that could be trimmed.

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 covers return values, persistence, required permission, the alternative tool, and the default invocation semantics — everything an agent needs to call this five-parameter computation correctly.

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

Parameters4/5

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

With 100% schema description coverage the baseline is 3, but the description adds meaning the schema does not: it explains that omitting the optional adjustment parameters falls back to computing on the bokslut as-is, and characterizes user_inputs/balance_sheet/income_statement as the årsredovisningsguide adjustment mechanism.

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 and resource ('Räknar fram bolagets skatt och INK2') plus a precise scope qualifier: it computes tax *with* the adjustments from the årsredovisningsguide. It names the sibling it is not (read_tax) so an agent can route between them without opening either schema.

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?

Explicit when-to-use ('Använd för att pröva hur justeringar påverkar skatten'), explicit when-not and the alternative ('för skatteberäkningen härledd direkt ur bokslutet utan justeringar, använd read_tax'), and a default-case rule ('Utan något annat argument än orgnr räknas skatten på bokslutet som det är'). Nothing is left to inference.

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

create_companySkapa bolagAInspect

Lägg till ett bolag i koncernen (seedar BAS-kontoplanen). Scope book. Argument: orgnr, name, fiscal_year, fiscal_year_end_month (räkenskapsårets slutmånad 1-12; 12 = jan-dec, 11 = dec-nov), vat_period (manad|kvartal|ar); valfritt city, accounting_method (faktura|kontant), first_fy_start och first_fy_end (ISO-datum) för ett nystartat bolags avvikande första räkenskapsår, t.ex. 2026-01-13 till 2026-12-31 (högst 18 månader; slutet måste vara sista dagen i slutmånaden, utelämnat = närmaste årsslut).

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
nameYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
vat_periodYes
fiscal_yearYes
first_fy_endNo
first_fy_startNo
accounting_methodNofaktura
fiscal_year_end_monthYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so safety is covered structurally. The description goes beyond that by disclosing the chart-of-accounts seeding side effect and concrete validation constraints on the first fiscal year (max 18 months, end must be the last day of the end month, omission yields nearest year-end), which is genuinely useful 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.

Conciseness4/5

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

Front-loaded with purpose and side effect, then the argument list; every clause carries information (enums, month mapping, date rules) rather than filler. The single long argument sentence is dense but not padded.

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 9-parameter creation tool with no output schema and thin structured coverage, the description covers purpose, side effect, parameter meaning and key constraints. It omits behavior on duplicate orgnr, error conditions, and what the caller gets back, which are minor given the tool's scope.

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 only 11%, so the description must compensate and largely does: it enumerates vat_period values (manad|kvartal|ar), accounting_method values (faktura|kontant), decodes fiscal_year_end_month numerically (12=jan-dec, 11=dec-nov), and explains first_fy_start/first_fy_end with an example and constraints. It leaves name, city and fiscal_year itself unexplained, so it stops short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lägg till ett bolag i koncernen') and immediately discloses a consequential side effect ('seedar BAS-kontoplanen') and the scope ('Scope book'). An agent can distinguish this from get_company, update_company, search_company and list_companies without opening the schema.

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

Usage Guidelines3/5

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

The purpose makes the usage context inferable (onboard a new group company), but there is no explicit when-to-use/when-not statement, no mention of prerequisites, and no pointer to alternatives such as update_company for later edits. Usage is implied rather than guided.

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

create_customer_invoiceSkapa kundfakturaAInspect

Skapa en kundfaktura (utkast; bokförs inte förrän du bokför den). Scope reconcile. Rader: [{description, period?, quantity_milli?, unit_price_ore, vat_rate, account?}] (antal ×1000). Radens account = intäktskonto; utelämnas det används income_account, annars 3001. Utan rader anges total_ore/vat_ore/income_account (enradsläge). Momsen bokförs på rate-specifikt konto (25 %→2610, 12 %→2620, 6 %→2630) så deklarationen hamnar i rätt ruta. Argument: orgnr, customer_name, invoice_number, invoice_date; valfritt lines, due_date, ocr, income_account, total_ore, vat_ore, currency (default SEK), rounding_ore (öresutjämning), customer_orgnr, customer_address, customer_email, customer_reference, payment_terms, service_description, seller_address (avsändarens adress, rullas fram), seller_bank, seller_iban, seller_bic, seller_bankgiro, seller_contact. Ändra i efterhand med update_customer_invoice. ROT/RUT (husarbete till privatperson): märk raderna med husarbete_kind (arbete|material|ovrigt), och för arbetsrader work_type (Skatteverkets kategori, se arbetstyper i list_rot_rut, t.ex. Bygg, El, Vvs, Stadning, Tradgardsarbete) samt hours_milli (arbetade timmar ×1000, krävs även vid fast pris). Skicka husarbete = {type: ROT|RUT, buyers: [{personnummer, name?, amount_ore?}], amount_ore?, property? (fastighetsbeteckning) ELLER brf_orgnr + apartment (bostadsrätt)}. Utan belopp begärs högsta möjliga avdrag (ROT 30 %, RUT 50 % av arbetskostnaden inkl. moms; tak 50 000/75 000 kr per person och år). Svaret har husarbete.to_pay_ore = det kunden betalar och husarbete.missing = det som saknas för bokföring.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNo
linesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
vat_oreNo
currencyNoSEK
due_dateNo
husarbeteNo
total_oreNo
seller_bicNo
seller_bankNo
seller_ibanNo
invoice_dateYes
rounding_oreNo
customer_nameYes
payment_termsNo
customer_emailNo
customer_orgnrNo
income_accountNo
invoice_numberYes
seller_addressNo
seller_contactNo
seller_bankgiroNo
customer_addressNo
customer_referenceNo
service_descriptionNo

TDQS

A4.4/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=false and destructiveHint=false, the description adds important behavioral context: the invoice is created as a draft, is not booked until booked, and how VAT is posted to rate-specific accounts. It does not cover permissions or idempotency in detail, but the draft/booking distinction is valuable beyond the annotations.

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

Conciseness4/5

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

The description is long and dense, but front-loads the core draft/creation purpose and then organizes the remaining detail by topic. For a 25-parameter tool it earns most of its length, though the prose could be slightly more scannable.

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 25 parameters, low schema description coverage, and no output schema, the description is unusually complete: it covers creation semantics, key parameter behavior, ROT/RUT handling, and even relevant output fields for husarbete. It is not exhaustively detailed for every simple parameter, but it provides enough context to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is only 4%, so the description must carry parameter meaning, and it does: it describes the lines array shape, milli-units (×1000), account fallback rules, VAT account mapping, and the husarbete object structure. It also lists all argument names and explains critical optional fields, adding substantial semantics beyond the sparse 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 states a specific verb and resource: 'Skapa en kundfaktura', and clarifies it is a draft that is not booked until booked. It also distinguishes the tool from update_customer_invoice and hints at book_customer_invoice, so an agent can tell it apart from sibling invoice tools.

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 clearly establishes the creation context and notes that later changes go through update_customer_invoice. It implies the booking step is separate but does not explicitly state when-not to use this tool versus alternatives such as create_supplier_invoice or credit_customer_invoice.

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

create_fixed_assetRegistrera anläggningstillgångAInspect

Registrera en anläggningstillgång (K2, linjär helavskrivning). useful_life_months måste vara ≥ 1 utom för mark (asset_type LAND) som inte skrivs av. Med book_acquisition=true bokförs anskaffningen direkt (D tillgångskonto / K funding_account, default 1930). Kräver behörigheten 'book'. Argument: orgnr, name, acquired (YYYY-MM-DD), cost_ore, useful_life_months, gl_account (tillgångskonto), accum_depr_account, depr_expense_account; valfritt residual_ore, asset_type (EQUIPMENT|BUILDING|LAND|OTHER), notes, book_acquisition, funding_account, depreciation_start (YYYY-MM-DD, om avskrivning börjar senare än acquired), opening_accumulated_ore (ingående ack. avskrivning vid import), document_id (kopplat underlag/inköpsfaktura).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
notesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
acquiredYes
cost_oreYes
asset_typeNoEQUIPMENT
gl_accountYes
document_idNo
residual_oreNo
funding_accountNo
book_acquisitionNo
accum_depr_accountYes
depreciation_startNo
useful_life_monthsYes
depr_expense_accountYes
opening_accumulated_oreNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, and the description goes further by disclosing the required 'book' authorization and the side effect of book_acquisition=true (D tillgångskonto / K funding_account, default 1930). It still does not say what happens on duplicate registration or what the call returns, which keeps it below 5.

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

Conciseness4/5

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

Purpose and the two key constraints are front-loaded before the parameter list, and there is no filler. The long semicolon-delimited argument block is dense but each clause carries information; minor cost in readability only.

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 16-parameter, 8-required mutation with no output schema and near-zero schema documentation, the description covers purpose, permission, validation constraint, posting behavior and every parameter. Only the response/idempotency behavior is left implicit, which annotations partly cover.

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

Parameters5/5

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

Schema description coverage is only 6%, so the description carries the load — and it does, enumerating all 16 arguments, giving account roles (gl_account = tillgångskonto, funding_account default 1930), date formats (YYYY-MM-DD for acquired and depreciation_start), asset_type values (EQUIPMENT|BUILDING|LAND|OTHER, which the schema does not enumerate), and the import meaning of opening_accumulated_ore.

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?

States a specific verb and resource ('Registrera en anläggningstillgång') plus the accounting regime it applies (K2, linjär helavskrivning), which lets an agent distinguish it from update_fixed_asset, dispose_fixed_asset and list_fixed_assets. It does not name those siblings explicitly, so it stops 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 Guidelines3/5

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

Provides real prerequisites — the 'book' permission requirement and the rule that useful_life_months ≥ 1 except for LAND — but never states when to choose this over update_fixed_asset or how it relates to a later post_depreciation. Usage context is implied rather than explicitly routed.

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

create_proposalFöreslå justering i avstämningAInspect

Föreslår en justerande post för en avstämning (bilaga) på ett konto och en månad, med motivering och källhänvisning. Använd när en avstämning visar en differens som behöver rättas; för ett vanligt verifikat som en människa ska godkänna, använd propose_voucher. proposed_journal måste balansera (summa debet lika med summa kredit i öre, minst två rader) och basis måste innehålla käll-id, annars avvisas förslaget. Returnerar proposal_id och status proposed. Bieffekt: inget bokförs; förslaget visas för granskning och kan kopplas till en avvikelse via finding_ref. Kräver behörigheten reconcile.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
basisYes
modelNo
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
accountYes
reasoningYes
confidenceNo
bilaga_typeYes
finding_refNo
proposed_journalYes

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond annotations: proposed_journal must balance (debit=credit in öre, min two rows) and basis must contain a source id or the proposal is rejected; it returns proposal_id/status; nothing is booked (side effect); and it requires the 'reconcile' permission. Annotations only carry the generic readOnly/destructive/idempotent flags, so this is real added value.

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?

Front-loaded with purpose, then usage/alternative, then validation constraints, return values, side effects, and required permission. Every sentence carries distinct information with 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?

No output schema exists, but the description states return values (proposal_id, status) and core side effects and permission requirements. Given the 11-param tool with 9% schema coverage, more per-parameter guidance would help, but the task-critical behavioral information is present.

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 only 9%, so the description must carry the burden. It meaningfully explains proposed_journal (balance rule, min two rows, öre unit) and basis (source id required) and references finding_ref, but leaves many required params (year, month, account, bilaga_type, reasoning) and optional ones (model, confidence) undifferentiated. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: proposes an adjusting entry (justerande post) for a reconciliation/bilaga on a given account and month. It explicitly names the sibling it is not (propose_voucher) so an agent can distinguish the two without opening schemas.

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?

Gives an explicit when ('when a reconciliation shows a discrepancy that needs correcting') and an explicit when-not with the alternative named ('for a regular voucher a human should approve, use propose_voucher'). Routing is fully determined.

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

create_rot_rut_requestSkapa ROT/RUT-begäranAInspect

Skapa en begäran om utbetalning till Skatteverket för betalda ROT- eller RUT-fakturor (se att_begara i list_rot_rut). ROT och RUT begärs var för sig, alla fakturor ska vara betalda samma år och en begäran rymmer högst 100 köpare. Skapar ett ärende per köpare. Inget skickas till Skatteverket: hämta filen med get_rot_rut_request_file och låt användaren lämna den i e-tjänsten Rot och rut. Scope reconcile. Argument: orgnr, type (ROT|RUT), invoice_ids; valfritt name (högst 16 tecken).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
typeYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-idempotent write, and the description adds genuinely non-obvious behavior: one ärende is created per buyer and nothing is actually transmitted to Skatteverket (the file must be exported and submitted by the user). This corrects a likely agent misassumption and stays consistent with openWorldHint=false, adding value beyond the annotations.

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

Conciseness4/5

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

Dense but front-loaded: the core action, constraints, side effects and follow-up are stated in order with no filler. It is on the longer side and packs several ideas per sentence, but every clause carries actionable information.

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

Completeness4/5

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

For a mutation with no output schema and a multi-step tax workflow, it covers purpose, constraints, side effects and the required next-step tool well enough to invoke correctly. Only minor gaps remain, such as auth/prerequisite state and the concrete invoice_ids format.

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 only 25%, so the description must compensate. It enumerates the arguments, supplies the ROT|RUT value set for type (which the schema lacks entirely, 0 enums), caps name at 16 characters, and constrains invoice_ids via the same-year/all-paid/max-100-buyers rules; only invoice_ids' concrete format remains undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: creates a Skatteverket ROT/RUT payout request for paid invoices. It clearly distinguishes itself from siblings such as list_rot_rut, get_rot_rut_request_file, mark_rot_rut_request_submitted and delete_rot_rut_request by naming the actual action and the follow-up file step.

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

Usage Guidelines4/5

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

Gives concrete usage conditions: only for paid invoices, ROT and RUT requested separately, all invoices paid the same year, max 100 buyers per request, and points to list_rot_rut (att_begara) as the prerequisite selector. It also routes the agent to get_rot_rut_request_file for the next step, though it does not spell out explicit when-not conditions against the mark/delete siblings.

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

create_supplier_invoiceRegistrera leverantörsfakturaAInspect

Registrera en leverantörsfaktura (bokförs inte förrän du bokför den med book_supplier_invoice). Scope reconcile. Ange antingen kontorader (lines = [{account, net_ore, vat_rate, description}], moms per rad räknas ut och total härleds ur raderna + rounding_ore) ELLER enradsläget (total_ore + vat_ore + expense_account). document_id kopplar ett underlag (fakturans PDF från inkorg/dokument, se list_available_underlag). ANNAN VALUTA än SEK (currency, t.ex. EUR/USD): ange beloppen som på fakturan (hundradelar i fakturans valuta) och fx_rate (SEK per 1 enhet) ELLER total_sek_ore (totalbelopp i SEK) som ANVÄNDAREN har angett. Gissa aldrig kursen: fråga användaren. Klienter med stöd för elicitation får frågan direkt; annars returneras ett fel med frågan. Kvickd räknar om till SEK och sparar originalbelopp och kurs. Argument: orgnr, supplier_name, invoice_number, invoice_date; valfritt lines, rounding_ore, total_ore, vat_ore, due_date, ocr, currency, fx_rate, total_sek_ore, expense_account, supplier_id, document_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNo
linesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
fx_rateNo
vat_oreNo
currencyNoSEK
due_dateNo
total_oreNo
document_idNo
supplier_idNo
invoice_dateYes
rounding_oreNo
supplier_nameYes
total_sek_oreNo
invoice_numberYes
expense_accountNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that nothing is booked yet, that non-SEK amounts are converted to SEK while the original amount and rate are stored, that the agent must never guess an FX rate, and that elicitation-capable clients get the rate question inline while others receive an error carrying the question. That is rich side-effect and failure-mode disclosure.

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 purpose and the not-booked caveat are correctly front-loaded, but the block is dense and ends with a bare re-listing of every argument that duplicates the schema. Capitalized emphasis and the packed currency paragraph cost readability.

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 16-parameter mutation tool with no output schema and near-zero schema documentation, the description covers modes, currency conversion, booking lifecycle, document linkage, and elicitation fallback. It does not address duplicate handling or error conditions for malformed lines, which leaves a small gap.

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 only 6%, so the description must compensate, and it largely does: it defines the lines element shape {account, net_ore, vat_rate, description}, explains that VAT is computed per line and the total derived from lines + rounding_ore, and gives the semantics of currency/fx_rate/total_sek_ore. The leftover gaps are the unexplained fields (ocr, due_date, supplier_id), which appear only in the trailing argument list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (registrera en leverantörsfaktura) and immediately scopes it against the sibling book_supplier_invoice by noting it is not booked until then. An agent can distinguish this from create_voucher, book_supplier_invoice, and update_supplier_invoice without opening the schema.

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

Usage Guidelines5/5

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

Explicitly says when the invoice becomes a ledger event (only via book_supplier_invoice), offers two mutually exclusive input modes (line mode vs single-line total_ore+vat_ore+expense_account), and routes to list_available_underlag for document_id. Non-SEK handling is spelled out with a when-to-use branch.

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

create_underlag_uploadUppladdningslänk för stor filAInspect

Skapar en kortlivad uppladdningslänk för en stor fil, t.ex. ett foto av ett kvitto, så att filen inte behöver skickas base64-kodad genom modellen. Använd när filen är för stor för ett vanligt verktygsanrop; små filer laddas upp direkt med add_voucher_underlag (till ett verifikat) eller upload_underlag (till en avstämning). Returnerar en URL som filens råa bytes PUT:as till (t.ex. med curl), hur länge länken gäller och största tillåtna storlek. Bieffekt: inget sparas förrän filen har PUT:ats; då blir den ett dokument vars document_id kan kopplas till ett verifikat med attach_underlag. Kräver behörigheten upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFilnamn med filändelse, t.ex. kvitto-2026-03-14.jpg.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
content_typeNoValfritt: filens MIME-typ, t.ex. image/jpeg eller application/pdf.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds substantial context beyond them: the exact return payload (URL, expiry, max size), the required permission ('upload'), and the crucial side effect that nothing is persisted until the PUT, after which a document_id exists that can be linked via attach_underlag.

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?

Front-loaded with purpose, then routing guidance, return shape, side effect, and permission requirement. Every sentence carries distinct information; nothing is repeated from the schema or annotations.

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

Completeness5/5

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

With no output schema and only three simple parameters, the description supplies the missing pieces an agent needs: the asynchronous two-step workflow, the return values, the permission prerequisite, and the downstream attach_underlag link.

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 name, orgnr and content_type are already documented in the schema with examples. The description adds no field-level syntax or format detail beyond that, 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?

States a specific verb and resource ('Skapar en kortlivad uppladdningslänk för en stor fil') plus the reason (avoid base64 through the model) and a concrete example. It clearly distinguishes itself from add_voucher_underlag and upload_underlag by naming both as the small-file path.

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?

Explicit when-to-use ('Använd när filen är för stor för ett vanligt verktygsanrop') and when-not ('små filer laddas upp direkt med add_voucher_underlag ... eller upload_underlag'), with named alternatives and their targets. Nothing is left to inference.

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

create_voucherBokför verifikat med underlagAInspect

Bokför ett verifikat i huvudboken med tecknade belopp (debet positivt, kredit negativt), som när en människa använder bokföringsformuläret i appen. Använd för fristående bokningar, t.ex. skatteberäkningens poster efter godkännande, och när kvitton eller fakturor ska kopplas direkt via document_ids eller underlag_ids. Ska verifikatet hänvisa till källor (basis), använd book_voucher; ska en människa granska först, använd propose_voucher. Returnerar verifikatets id, serie och nummer. Bieffekt: verifikatet postas direkt. Koden validerar att summan blir 0 och att det finns minst två rader, och ett satt bokföringstak får inte överstigas. Underlag i annan valuta än SEK: gissa aldrig växelkursen. Fråga användaren efter kursen (SEK per 1 enhet) eller SEK-beloppet (t.ex. det som drogs från kontot), räkna raderna i SEK och ange currency, foreign_amount_minor och fx_rate eller total_sek_ore, så dokumenteras kursen på verifikatet. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
rowsYes
textYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
seriesNoA
fx_rateNo
currencyNo
document_idsNo
underlag_idsNo
total_sek_oreNo
foreign_amount_minorNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the side effect that the voucher is posted immediately, the validation constraints (sum must be 0, at least two rows, booking ceiling must not be exceeded), the required 'book' permission, and non-obvious FX handling rules (never guess the rate, ask the user). Annotations only supply the generic write/non-idempotent profile, so this added context is genuinely valuable.

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

Conciseness4/5

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

Front-loads purpose, usage, and sibling routing before the denser validation and FX paragraphs, which is the right order. The FX guidance is long, but every sentence carries non-recoverable domain information, so it is dense rather than padded.

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 complex financial mutation with 11 parameters, no enum constraints, and no output schema, the description supplies validation rules, permission requirements, FX workflow, and even the return shape (id, serie, nummer). An agent has what it needs to call this correctly without external documentation.

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 only 9% (just orgnr), so the description has to compensate, and it does for the hard parts: the debet/kredit sign convention for rows, the role of document_ids/underlag_ids, and the currency/foreign_amount_minor/fx_rate/total_sek_ore interplay. It leaves date, text, and series semantics unexplained, so it is helpful but not complete across all 11 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Bokför ett verifikat i huvudboken') plus the amount-sign convention (debet positivt, kredit negativt) that defines its behavior. It explicitly distinguishes itself from book_voucher and propose_voucher, so an agent can place it against siblings without opening any schema.

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?

Gives concrete when-to-use cases (fristående bokningar, skatteberäkningens poster after approval, kvitton/fakturor linked via document_ids or underlag_ids) and explicit when-not routing ('använd book_voucher' for basis references, 'propose_voucher' if a human must review first). The selection logic between the three siblings is handed to the agent directly.

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

credit_customer_invoiceSkapa kreditfakturaAInspect

Skapa en kreditfaktura för en kundfaktura (utkast; negativa belopp, omvänd bokföring vid bokför). Utan rader krediteras hela originalet; ange lines ([{description, quantity_milli?, unit_price_ore, vat_rate, account?}]) för delkreditering. Scope reconcile. Argument: orgnr, invoice_id, invoice_number; valfritt invoice_date, lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYes
invoice_dateNo
invoice_numberYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish it is a non-read-only, non-destructive, non-idempotent write. The description adds genuine context beyond that: the result is a draft (utkast), amounts are negative, accounting is reversed at booking time, and the required scope is "reconcile". These are non-obvious behavioral traits the annotations cannot express.

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

Conciseness4/5

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

Dense but front-loaded: the core action leads, followed by behavioral note, lines behavior, scope, and argument list. Every clause carries information, though the argument enumeration at the end partially duplicates the schema.

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 mutation tool with no output schema and sparse schema descriptions, the description covers the important ground: draft state, sign convention, booking reversal, scope, and the lines structure for partial crediting. Minor gaps remain around invoice_id/invoice_date semantics and any permission prerequisites.

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 only 20% (only orgnr is documented), so the description must carry the load, and it does: it enumerates the arguments (orgnr, invoice_id, invoice_number required; invoice_date, lines optional) and spells out the lines item shape ({description, quantity_milli?, unit_price_ore, vat_rate, account?}). The remaining gap is that invoice_id vs invoice_number semantics are not distinguished.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Skapa en kreditfaktura för en kundfaktura") that clearly separates it from siblings like create_customer_invoice, cancel_customer_invoice, and book_customer_invoice. The parenthetical adds scope (draft, negative amounts, reversed posting) so the agent knows exactly what operation this is.

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 explains that omitting lines credits the whole original while supplying lines performs partial crediting, which is useful usage guidance. However, it never states when to choose this tool over alternatives such as cancel_customer_invoice or reverse_customer_payment, so routing is only implied.

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

customer_outstandingUtestående kundfordringarA
Read-onlyIdempotent
Inspect

Visar utestående kundfordringar per kund: hur mycket som är obetalt och hur mycket som har förfallit. Använd för frågor som vilka kunder som är skyldiga bolaget pengar; för fakturorna i detalj, använd list_customer_invoices. Returnerar per kund namn, utestående och förfallet belopp i öre och antal fakturor, sorterat på störst utestående, samt total summa. Ej bokförda, makulerade och betalda fakturor räknas inte med. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds genuinely new behavioral detail the annotations cannot carry: which invoice states are excluded (ej bokförda, makulerade, betalda) and the sort order. The closing 'Läser bara, ändrar inget' is redundant with the annotations but not harmful.

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

Conciseness4/5

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

Three dense sentences: purpose, routing, exclusions/return shape. Front-loaded with the core purpose and no filler, though the final read-only sentence is redundant padding given the annotations.

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?

There is no output schema, and the description compensates by enumerating the returned fields (namn, utestående och förfallet belopp i öre, antal fakturor), the ordering, and the total. Combined with the exclusions, an agent knows both what it gets and what is omitted.

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?

With a single parameter at 100% schema coverage, the schema already documents orgnr format and where to obtain it (list_companies). The description adds no parameter-level meaning beyond that, 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?

States a specific verb+resource ('Visar utestående kundfordringar per kund') and immediately narrows scope with what is measured (obetalt vs förfallet). It explicitly distinguishes itself from the sibling list_customer_invoices, so an agent can separate the two without opening either schema.

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?

Gives an explicit when-to-use ('Använd för frågor som vilka kunder som är skyldiga bolaget pengar') and names the alternative for the adjacent case ('för fakturorna i detalj, använd list_customer_invoices'). Nothing is left for the agent to infer about routing.

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

delete_documentRadera dokumentA
DestructiveIdempotent
Inspect

Raderar ett dokument ur bolagets dokumentarkiv permanent. Använd bara när användaren uttryckligen vill ta bort dokumentet; hitta doc_id med list_documents. Vill du bara ändra namn, kategori eller vilka bolag det gäller, använd edit_document. Returnerar ok: true. Bieffekt: dokumentet raderas och kan inte återställas. Ett dokument som används som underlag på en kund- eller leverantörsfaktura eller hör till en inkorgspost kan inte raderas; då returneras ett fel. Kräver behörigheten manage_documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYesDokumentets id (heltal), t.ex. 31. Hämta med list_documents.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes further: irreversibility ('kan inte återställas'), the specific business rule blocking deletion (documents tied to invoices or inbox items return an error), the required permission (manage_documents), and the response shape (ok: true).

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

Conciseness4/5

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

Front-loads the destructive action and trigger condition, then layers in alternatives, error rule, and permission. Every sentence carries actionable content, though the description is on the longer side for a single-parameter tool.

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 destructive mutation with annotations but no output schema, the description covers trigger, alternatives, reversibility, failure conditions, permissions, and the return value. Nothing an agent needs to invoke it correctly 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?

Only one parameter and schema coverage is 100%; the schema already documents doc_id type, example value, and the list_documents retrieval hint. The description repeats that hint rather than adding new syntax or format detail, so 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?

States a specific verb and resource ('Raderar ett dokument ur bolagets dokumentarkiv permanent') and immediately distinguishes itself from siblings by naming edit_document and list_documents. An agent can identify the tool's scope without opening the schema.

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

Usage Guidelines5/5

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

Explicit trigger condition ('Använd bara när användaren uttryckligen vill ta bort dokumentet'), named alternatives for the non-delete cases ('använd edit_document'), and a prerequisite ('hitta doc_id med list_documents'). Exclusions are also spelled out.

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

delete_employeeTa bort/inaktivera anställdA
DestructiveIdempotent
Inspect

Ta bort eller inaktivera en anställd. Utan hard inaktiveras den anställde (bevarar historik). Med hard=true raderas den helt, men bara om den saknar lönekörningar. Scope payroll. Argument: orgnr, employee_id; valfritt hard.

ParametersJSON Schema
NameRequiredDescriptionDefault
hardNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
employee_idYes

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only supply generic destructiveHint/idempotentHint flags; the description adds the substance behind them — that the default path destroys nothing but actively preserves history, that hard=true is a true erase, and that a precondition (no payroll runs) gates it. It also names the required auth scope (payroll). This is exactly the extra context annotations cannot convey.

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

Conciseness4/5

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

Four short sentences, front-loaded with the core soft/hard distinction and the constraint before the trailing argument list. The final 'Argument: orgnr, employee_id; valfritt hard' clause is largely redundant with the schema, costing it a point.

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 mutation tool with no output schema, the description covers purpose, the two behavior modes, the gating precondition, and auth scope. It leaves open what a blocked hard delete actually returns (error vs. silent fallback to soft) and whether a confirmation payload exists.

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 only 33% (hard has no description, employee_id has none). The description compensates for the most important gap by defining what hard toggles — false/absent = deactivate, true = permanent delete with a guard. It does not explain employee_id format, but the one semantically ambiguous parameter is fully covered.

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?

States a specific verb+resource (delete/deactivate an employee) and goes further by naming the two operating modes, soft (utan hard) and hard. It is unmistakable what the tool does, though it never references a sibling tool to differentiate itself (upsert_employee, list_employees) — not that a direct alternative really exists for deletion.

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

Usage Guidelines4/5

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

Gives a real conditional rule: omit hard to deactivate while preserving history, set hard=true to fully delete but only when the employee has no payroll runs. This is clear when-to-use guidance. It falls short of a 5 only because it names no alternative tool or fallback path when hard deletion is blocked.

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

delete_fixed_assetTa bort anläggningstillgångA
DestructiveIdempotent
Inspect

Ta bort en anläggningstillgång ur registret. Kräver behörigheten 'book'. Argument: orgnr, asset_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
asset_idYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so safety is covered. The description adds the permission requirement ('book'), which is valuable behavioral context not present in annotations. However, it doesn't specify whether deletion is permanent or what happens to related records, leaving some transparency gaps.

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, front-loaded with purpose, then permission, then argument list. No redundancy or wasted words.

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

Completeness3/5

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

For a destructive, idempotent mutation tool with no output schema, the description covers the core action and permission but lacks details on permanence, side effects, and how to obtain asset_id. It's minimally complete but misses contextual richness that would help an agent call 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?

Schema coverage is 50%; orgnr has a full schema description, but asset_id does not. The description lists the parameters but adds no meaning beyond the names. Baseline 3 is appropriate given partial schema coverage and no additional parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Ta bort en anläggningstillgång ur registret' (remove a fixed asset from the register). Distinguishes itself from create_fixed_asset, update_fixed_asset, dispose_fixed_asset, and get_fixed_asset by naming the exact operation.

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 through the permission requirement ('Kräver behörigheten book') but does not explicitly say when to use this tool versus dispose_fixed_asset, which is a close sibling with different semantics. No exclusions or prerequisites beyond the permission are stated.

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

delete_rot_rut_requestTa bort ROT/RUT-begäranA
DestructiveIdempotent
Inspect

Ta bort en ROT/RUT-begäran som inte fått någon utbetalning registrerad. Fakturorna blir valbara för en ny begäran. Scope reconcile. Argument: orgnr, request_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
request_idYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds real behavioral value beyond them: the precondition that makes deletion legal (no payout registered) and the downstream consequence that the invoices become selectable for a new request. It does not state the failure mode when a payout exists or whether the deletion is reversible.

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

Conciseness4/5

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

Three short sentences with the purpose and precondition front-loaded; nothing is buried. The trailing 'Argument: orgnr, request_id' restates what the schema already shows and is the one mildly wasteful element.

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 destructive, no-output-schema tool whose annotations cover the safety profile, the description supplies the key missing pieces: eligibility condition and post-deletion effect. It stops short of describing error behavior when the precondition fails, which an agent would need to handle gracefully.

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 only 50%: orgnr is well documented with a format example and a pointer to list_companies, but request_id has no description at all. The description merely lists 'Argument: orgnr, request_id', adding no format, source, or meaning beyond the schema, so it fails to compensate for the coverage gap.

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?

States a specific verb and resource ('Ta bort en ROT/RUT-begäran') plus the eligibility condition that separates it from siblings like register_rot_rut_payout or reverse_rot_rut_payout. It does not name those siblings explicitly, so the differentiation is implicit rather than spelled out.

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

Usage Guidelines4/5

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

Gives an explicit precondition: the request must have no registered payout, which is the condition that selects this tool over the payout/reversal tools. It does not say what to do when a payout does exist (e.g. reverse first), so the routing guidance is incomplete but clear context is present.

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

delete_time_entryTa bort tidpostA
DestructiveIdempotent
Inspect

Ta bort en tidpost som inte ingår i en bokförd lönekörning. Scope payroll. Argument: orgnr, entry_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
entry_idYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered. The description adds the meaningful business constraint that only entries outside a booked payroll run are deletable, which is behavioral context the annotations do not convey. It does not describe error behavior or return content.

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

Conciseness4/5

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

Two short sentences, action front-loaded, no filler. The trailing "Argument: orgnr, entry_id" is redundant with the required-parameters list, but the whole thing stays tight.

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?

A destructive, non-read-only mutation with no output schema should ideally say what is returned or what happens on success/failure. It covers the deletion precondition but leaves the post-condition and the undocumented entry_id unexplained, making it only minimally adequate.

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 50%: orgnr is well documented in the schema with format and a sourcing hint, but entry_id has no description anywhere, and the description merely re-lists both argument names without adding semantics. With a bare required integer parameter, the description does not compensate for the coverage gap.

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?

States a specific verb and resource ("Ta bort en tidpost" = delete a time entry) and adds a qualifying precondition (entries not part of a booked payroll run), which distinguishes it from list_time_entries/review_time_entries and other delete_* tools. Clear enough for selection, though it doesn't name a sibling alternative.

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 clause "som inte ingår i en bokförd lönekörning" gives an explicit eligibility condition for when deletion is allowed, which is real usage guidance. It stops short of naming what to do when the entry IS in a booked run (no alternative tool cited).

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

dispose_fixed_assetAvyttra anläggningstillgångAInspect

Sälj eller utrangera en anläggningstillgång: bokför bort anskaffningsvärde och ackumulerad avskrivning, tar in ev. köpeskilling och redovisar vinst/förlust mot bokfört värde. Tillgången slutar skrivas av. Bokför avskrivning t.o.m. avyttringsmånaden FÖRST för rätt resultat. Kräver behörigheten 'book'. Argument: orgnr, asset_id, disposal_date (YYYY-MM-DD); valfritt proceeds_ore (köpeskilling, 0 = utrangering), proceeds_account (default 1930), gain_account (default 3973), loss_account (default 7973), note, book (default true, sätt false för att bara registrera avyttringen utan verifikat).

ParametersJSON Schema
NameRequiredDescriptionDefault
bookNo
noteNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
asset_idYes
gain_accountNo
loss_accountNo
proceeds_oreNo
disposal_dateYes
proceeds_accountNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly false, destructive false, non-idempotent), the description discloses the side effects (writes off acquisition value and accumulated depreciation, computes gain/loss, the asset stops depreciating), the auth requirement ('book' permission), and the book=false escape hatch that registers the disposal without creating a voucher. That is substantial behavioral context the schema does not carry.

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

Conciseness4/5

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

Purpose is front-loaded, then prerequisites, then the argument list — appropriate ordering. It is a dense, run-on string, and the argument enumeration is list-like, but for a 9-parameter accounting tool nearly every clause 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?

For a complex, non-idempotent mutation with 11% schema coverage and no output schema, the description covers purpose, side effects, mandatory ordering, required permission, and all parameter meanings/defaults. Nothing an agent needs to call it correctly is missing.

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

Parameters5/5

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

Schema coverage is only 11%, so the description must compensate and it does: it enumerates every argument, gives the date format (YYYY-MM-DD), explains proceeds_ore semantics (0 = retirement), and assigns the roles/defaults of proceeds_account (1930), gain_account (3973), loss_account (7973) and book (true, false = register without voucher). Most parameters gain meaning not present in 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 names a specific verb+resource ('Sälj eller utrangera en anläggningstillgång') and defines the accounting action precisely: writing off acquisition value and accumulated depreciation and reporting gain/loss against book value. This is unmistakably an accounting disposal, clearly distinguishable from the nearby delete_fixed_asset / update_fixed_asset siblings.

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

Usage Guidelines4/5

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

It gives a real workflow condition: book depreciation up to and including the disposal month FIRST to get the correct result, and it states the required 'book' permission. It does not explicitly contrast with delete_fixed_asset or spell out when-not to use it, so it stops short of the 5 tier.

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

download_ink2_sruHämta INK2 SRUA
Read-onlyIdempotent
Inspect

Tar fram INK2 som SRU-filer (INFO.SRU och BLANKETTER.SRU) för ett räkenskapsår, ifyllda ur bokslutet. Använd när användaren själv ska lämna in inkomstdeklarationen hos Skatteverket; för själva skatteberäkningen, använd read_tax. Kräver att postnummer och postort är kända (från årsredovisningsguiden eller SIE-filen), annars returneras ett fel med vad som saknas. Returnerar filernas innehåll som text och vilket år de gäller; Skatteverket kräver att filerna sparas i ISO 8859-1. Skatten följer de val som sparats på skattesidan. Sparar och skickar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025). Utelämna för det senaste.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent/non-destructive annotations by disclosing a hard precondition (postcode and city must be known, otherwise an error naming the missing fields), the return payload shape, the ISO 8859-1 encoding Skatteverket requires, and that the tax follows previously saved choices. 'Sparar och skickar inget' also reinforces the read-only annotation.

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

Conciseness4/5

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

Front-loaded with the action and its output, then routing, prerequisite, return format, and non-effects. Six short sentences each carry distinct information, though the tax/encoding asides edge slightly toward over-coverage for a single tool.

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 no-output-schema tool, the description explains the returned content (file text plus applicable year) and the encoding needed to use it. Combined with the explicit error behavior, an agent has everything required to call it and handle failures 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%: both 'year' (with its end-of-fiscal-year convention and default) and 'orgnr' (format and how to obtain it via list_companies) are fully documented in the schema. The description adds the postcode/postort precondition, which is a data requirement rather than a parameter, 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?

States a specific verb and resource: produces INK2 as SRU files (INFO.SRU/BLANKETTER.SRU) for a fiscal year, populated from the year-end accounts. It explicitly names the sibling it is not (read_tax) so an agent can distinguish them without opening either schema.

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?

Gives an explicit when ('Använd när användaren själv ska lämna in inkomstdeklarationen hos Skatteverket') and an explicit alternative with its own condition ('för själva skatteberäkningen, använd read_tax'). Nothing is left to inference.

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

edit_annual_report_draftSpara hela årsredovisningsutkastetA
Idempotent
Inspect

Sparar hela utkastet till årsredovisningen för ett räkenskapsår, som när årsredovisningsguiden autosparar: resultat- och balansräkning, noter, förvaltningsberättelse och undertecknare. Använd bara när du har hela utkastet, t.ex. hämtat med read_annual_report_draft och ändrat; för att ändra enstaka uppgifter, använd set_arsredovisning_inputs, som skriver en delmängd och returnerar vad som återstår. Returnerar ok och när utkastet sparades. Bieffekt: det sparade utkastet ersätts med payload; postnummer och postort för INK2 behålls från det tidigare utkastet. Kräver behörigheten statutory.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025).
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
payloadYesHela utkastet i samma form som payload i read_annual_report_draft, med belopp i hela kronor.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the destructive-replacement semantics ('det sparade utkastet ersätts med payload'), a non-obvious partial-retention rule (INK2 postnummer/postort retained from the previous draft), the return ('ok och när utkastet sparades') and an auth requirement ('Kräver behörigheten statutory'). These are exactly the behaviors an agent must know before calling a whole-document overwrite.

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

Conciseness4/5

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

Everything is front-loaded — save scope first, usage rule second, return/side effects/permission after — and each clause carries distinct information. It is dense as a single paragraph, but there is little that could be cut without losing a decision-relevant fact.

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?

No output schema exists, yet the description covers the return value ('ok och när utkastet sparades'), the overwrite/replacement behavior, the partial-retention exception, the required permission, and the companion read/write siblings. Nothing an agent needs to invoke this correctly is missing.

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 real meaning on top by clarifying that payload is the entire draft (not a patch) written as a full replacement, and that only the INK2 address fields survive from the prior draft. It does not add formatting detail beyond the schema, so it stops short of 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource+scope: 'Sparar hela utkastet till årsredovisningen för ett räkenskapsår' (saves the whole annual report draft for a fiscal year), and it enumerates the contents (resultat- och balansräkning, noter, förvaltningsberättelse, undertecknare). It explicitly distinguishes itself from siblings read_annual_report_draft and set_arsredovisning_inputs, so an agent can route without opening any schema.

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?

Gives an explicit when: 'Använd bara när du har hela utkastet'. Gives an explicit when-not plus the alternative: 'för att ändra enstaka uppgifter, använd set_arsredovisning_inputs, som skriver en delmängd och returnerar vad som återstår'. The selection rule is fully spelled out.

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

edit_documentRedigera dokumentA
Idempotent
Inspect

Redigera ett dokuments metadata (namn, kategori, kopplade bolag). Bara angivna fält ändras. Synlighet och LLM-delning styr vad assistenten får läsa och vem som ser dokumentet; de sätts bara i Kvickd-appen, inte via MCP. Scope manage_documents. Argument: doc_id; valfritt name, category, companies (lista med org.nr).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
doc_idYes
categoryNo
companiesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: PATCH-style semantics ('Bara angivna fält ändras'), the required OAuth scope (manage_documents), and the explicit limitation that visibility/sharing fields are out of reach for this tool.

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

Conciseness4/5

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

Front-loaded with the action and the partial-update rule, followed by the non-editable fields and scope. The trailing 'Argument:' list is somewhat redundant formatting, but with 0% schema coverage it earns its place by restating required vs optional fields.

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

Completeness4/5

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

For a 4-parameter mutation tool with annotations covering safety and no output schema, the description covers purpose, partial-update semantics, scope, and an important non-capability. Minor omissions remain (behavior on unknown doc_id, whether an empty companies list clears links), but nothing essential to a correct call is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the burden, and it names all four parameters while adding meaning the schema lacks: doc_id is required, name/category/companies are optional, and companies takes a list of organisation numbers. It does not constrain the category value space or name length, so it compensates well but not completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (edit a document's metadata) and immediately scopes it to name, category and linked companies, which separates it from delete_document, list_documents and upload_underlag. It also pre-empts a likely mistake by stating that visibility/LLM-sharing are NOT editable here, which no sibling could clarify.

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

Usage Guidelines4/5

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

Gives explicit context: use this for metadata edits, and 'Synlighet och LLM-delning ... sätts bara i Kvickd-appen, inte via MCP' tells the agent when this tool cannot be used. It stops short of naming a sibling alternative (e.g. delete_document) for adjacent operations, so it is strong context rather than full when/when-not routing.

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

edit_voucher_draftÄndra verifikatförslagA
Idempotent
Inspect

Ändra ett väntande verifikatförslag (draft) innan det godkänns. Kräver behörigheten 'reconcile'. Argument: orgnr, draft_id; valfritt date (YYYY-MM-DD), series, text, lines ([{account, debit_ore, credit_ore, text?}]), note.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
noteNo
textNo
linesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
seriesNo
draft_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true). The description adds two genuinely new facts beyond them: the 'reconcile' permission requirement and the state precondition that only pending drafts can be edited before approval. It still omits whether omitted arguments leave existing values intact or clear them – the key behavioral question for an idempotent edit.

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

Conciseness4/5

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

Front-loads purpose, then permission, then argument list – a sensible order with no filler. Dense but every clause carries information; the argument enumeration is compact rather than padded.

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 7-parameter mutation tool with no output schema and sparse annotations, the definition supplies the essentials: purpose, permission gate, editable state, and parameter shapes. It falls short on partial-vs-full update semantics and any note about the result of the edit, but the core is present.

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 only 14% (just orgnr), so the description carries most of the burden. It names all arguments, gives a date format (YYYY-MM-DD) and, importantly, expands the otherwise-empty 'lines' array into [{account, debit_ore, credit_ore, text?}] – a real add over the schema. series, text and note are still named without explaining their effect.

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?

Names a specific verb and resource (Ändra ett verifikatförslag / edit voucher draft) plus a scope constraint (väntande, innan det godkänns – pending, before approval) that cleanly separates it from approve_voucher_draft, reject_voucher_draft and book_voucher. It does not name a sibling explicitly, but the 'pending, pre-approval' scope makes the distinction inferable.

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?

States a precondition (requires the 'reconcile' permission) and an implicit usage window (only pending drafts, before approval). It gives no explicit guidance on when to pick this over siblings such as create_voucher or list_voucher_drafts, and no exclusions, so usage is only implied.

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

export_reportExportera rapportA
Read-onlyIdempotent
Inspect

Generera kvickds riktiga rapport som fil (pdf eller xlsx) att ladda ner eller dela, med bolagsnamn och korrekt svenska. Använd det här i stället för att bygga en egen PDF. kind ∈ {resultatrakning, balansrakning, huvudbok, momsrapport, leverantorsreskontra, kundreskontra}. Datum: resultatrakning/huvudbok/momsrapport tar start+end; balansrakning/leverantorsreskontra/kundreskontra tar balansdag (alla YYYY-MM-DD). Scope view. Returnerar filen base64-kodad (content_base64 + filename + media_type).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
kindYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
startNo
formatYes
balansdagNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/non-open-world, so the safety profile is covered. The description adds genuinely useful behavior the annotations lack: the return is a base64-encoded file (content_base64 + filename + media_type), and which date parameters each report kind consumes. It stops short of any error/permission or size-limit context.

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

Conciseness4/5

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

Front-loaded with purpose, then usage, then parameter rules, then return shape — a sensible order with little filler. Minor dings for the garbled phrase ('kvickds riktiga') and the cryptic fragment 'Scope view' that costs clarity without earning 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?

With no output schema, the description properly discloses the base64/filename/media_type return shape, and it covers the required parameters and report-kind semantics. Remaining gaps are the opaque 'Scope view' note and any prerequisite about how orgnr is obtained beyond the schema's own hint.

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

Parameters5/5

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

Schema description coverage is only 17% (orgnr alone), so the description must carry the load and does: it enumerates the six kind values, specifies the accepted format values (pdf/xlsx), and maps start+end vs balansdag to specific kinds with the YYYY-MM-DD convention. This is exactly the compensation expected for a low-coverage, no-enum 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?

States a specific verb (generera) and resource (rapport som fil i pdf/xlsx), and distinguishes the tool from siblings like get_balance_sheet/get_income_statement by emphasizing it returns a downloadable/shareable file rather than data. The explicit 'instead of building your own PDF' line further separates it from any do-it-yourself path.

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

Usage Guidelines4/5

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

Gives a clear when-to-use directive ('Använd det här i stället för att bygga en egen PDF') and routes date semantics per report kind. However it never explicitly excludes sibling report/data tools (get_trial_balance, get_vat_return, generate_ixbrl), leaving the agent to infer when a file export beats a data call.

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

generate_ixbrlGenerera iXBRLA
Read-onlyIdempotent
Inspect

Genererar årsredovisningen (K2) som iXBRL-fil för Bolagsverket utifrån årsredovisningsguidens uppgifter. Använd när get_arsredovisning_status visar att allt är klart; ofullständiga uppgifter ger ett fel som säger vad som saknas. Skicka med alla uppgifter i user_inputs, t.ex. payload.user_inputs från read_annual_report_draft; det sparade utkastet fylls inte i av sig självt. Returnerar XHTML-dokumentet som text. Sparar och skickar inget; inlämningen till Bolagsverket görs av användaren. Kräver behörigheten statutory.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
user_inputsYesÅrsredovisningsguidens alla uppgifter, samma fält som i set_arsredovisning_inputs, med belopp i hela kronor. Hämta t.ex. payload.user_inputs med read_annual_report_draft.

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the return format (XHTML as text), the absence of side effects ('Sparar och skickar inget'), that submission is the user's responsibility, and the required 'statutory' permission. These are exactly the behavioral facts annotations cannot convey for a generation 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?

Dense but front-loaded: purpose first, then when-to-use, then parameter provenance, return format, side effects, and permission. Every sentence earns its place and none is redundant with the structured fields.

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 complex generation tool with a nested object parameter and no output schema, the description supplies the missing return format, prerequisites, permission requirement, and side-effect profile. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it instructs the agent to send all data in user_inputs (e.g. payload.user_inputs from read_annual_report_draft) and warns that the stored draft is not auto-populated. That nuance is not derivable from the schema text 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?

States a specific verb (genererar) and resource (årsredovisningen K2 as an iXBRL file for Bolagsverket), and grounds it in the annual report guide's data. This clearly distinguishes it from sibling readers like read_annual_report and read_annual_report_draft.

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 names the trigger condition (get_arsredovisning_status shows everything ready) and the alternative/error path (incomplete data yields an error naming what is missing). It names the sibling to consult and the source of inputs, leaving nothing to inference.

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

generate_supplier_invoice_pdfFaktura-PDFA
Idempotent
Inspect

Generera en leverantörsfaktura som PDF och spara den i dokumentarkivet (kategori Leverantörsfaktura, syns sedan via list_documents/list_policies och kan läsas/laddas ner). Skapar ett dokument, så scope upload (inte view). Argument: orgnr, invoice_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the mutation/safety profile is covered. The description adds real behavioural context beyond that: a document is created in the archive under the category Leverantörsfaktura, it becomes visible via list_documents/list_policies, and it is readable/downloadable. It does not clarify idempotency semantics on repeat calls, which the annotation asserts but the description leaves unexplained.

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

Conciseness4/5

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

It is a single dense sentence-complex with the primary action front-loaded, followed by destination, discoverability and scope notes in descending importance. Every clause carries information; the trailing "Argument: orgnr, invoice_id" is the only piece that does not earn 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 side-effect tool with no output schema, the description does enough: it says what artifact is produced, where it is stored, how it can be found afterwards, and what scope is expected. The main missing piece is any statement about the return value or about what happens if the same invoice_id is generated twice despite idempotentHint=true.

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 50%: orgnr is well documented in the schema (format, example, how to find it via list_companies) while invoice_id has no description at all. The description only restates the parameter names ("Argument: orgnr, invoice_id") and therefore adds nothing, leaving the undocumented invoice_id uncompensated. Baseline 3 is appropriate at this coverage level.

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 names a specific verb and resource ("Generera en leverantörsfaktura som PDF") and states the destination ("spara den i dokumentarkivet"). It also indirectly separates itself from the listing siblings by naming list_documents/list_policies as the place the result appears. It does not explicitly contrast with create_supplier_invoice or get_supplier_invoice, so it stops short of full 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 Guidelines3/5

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

There is an implicit trigger (when you need a PDF of an existing supplier invoice) and a directive about the resulting document's scope ("scope upload (inte view)"), which is useful operational guidance. However, there is no explicit when-to-use/when-not statement and no named alternative (e.g. versus create_supplier_invoice or get_supplier_invoice), so usage is only implied.

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

get_arsredovisning_statusÅrsredovisning: öppna posterA
Read-onlyIdempotent
Inspect

Öppna poster för årsredovisningen: exakt vad som återstår innan iXBRL kan genereras, per sektion + platt lista (blockerande först). ARBETSSÄTT: gå igenom posterna med användaren som 'godkänn eller ändra', POST FÖR POST (säte, verksamhet, väsentliga händelser, resultatdisposition/utdelning, förändring eget kapital), och vänta på bekräftelse innan du skriver med set_arsredovisning_inputs och går vidare och färdigställer utkastet. Föreslå där suggested_value finns; fråga där kind=question. kind=toggle (EK-händelser, utdelning) är Nej/Ja: skriv toggle_field=true + belopp vid Ja, annars false (eller belopp 0), och sätt confirm_field=true när frågan besvarats. Genereringen släpps först när complete==true. OBS: belopp i HELA KRONOR (inte öre). Scope view. Argument: orgnr, year.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructively-inert behavior, so safety is covered. The description adds substantial value beyond that: the return shape (per section plus flat list, blocking items first), the meaning of the returned fields (kind=question, kind=toggle, suggested_value, complete), the Nej/Ja toggle semantics including toggle_field/confirm_field, and the whole-kronor constraint. It does not cover auth or pagination, keeping it short of a 5.

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?

It is front-loaded with the purpose, but a large fraction of the text is a workflow protocol for a different tool (set_arsredovisning_inputs) rather than what this status call does or returns. The per-section enumeration and toggle mechanics are useful, yet the block is long and mixes read semantics with downstream write instructions.

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?

There is no output schema, so the description must explain the return payload, and it does: section grouping, flat list, blocking-first ordering, complete flag, and the kind/suggested_value fields an agent will act on. Combined with the 2-parameter schema it is largely sufficient, with the year-parameter ambiguity the main remaining hole.

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%: orgnr is documented in the schema (10 digits, optional hyphen, sourced from list_companies) while year carries no schema description. The description only adds "Argument: orgnr, year", doing nothing to disambiguate whether year is a calendar year, fiscal year, or a fiscal-year id, which is the one real ambiguity here. Baseline 3 for partial schema coverage.

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 names a specific verb and resource: it returns the open items ("öppna poster") for the annual report and exactly what remains before iXBRL generation, structured per section plus a flat blocking-first list. That is far more precise than a tautology. It does not name or contrast itself against close siblings like read_annual_report_draft, read_statutory_status or get_year_end_checklist, so an agent must infer the boundary.

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 gives an explicit operating procedure: iterate items with the user as "approve or change", item by item, wait for confirmation before writing via set_arsredovisning_inputs, propose where suggested_value exists and ask where kind=question. It also states the termination condition (generation is released only when complete==true). When-to-use and the handoff to alternatives are fully spelled out.

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

get_balance_sheetHämta balansräkningA
Read-onlyIdempotent
Inspect

Visar balansräkningen per ett datum, uppställd enligt K2. Använd för frågor om tillgångar, skulder och eget kapital; för saldon per konto, använd get_trial_balance, och för resultaträkningen, get_income_statement. Returnerar tillgångar samt eget kapital och skulder med delsummor, beräknat resultat och en balanskontroll, med belopp i öre. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
balansdagYesDatum som saldona gäller per, ÅÅÅÅ-MM-DD, t.ex. 2026-06-30.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered; the closing 'Läser bara, ändrar inget' is largely redundant with readOnlyHint. The description does add real behavioral value beyond the annotations by disclosing the return contents (subtotals, calculated result, balance check) and that amounts are in öre, which matters because there is no output schema.

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

Conciseness4/5

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

A single dense paragraph that is front-loaded with purpose, then routing, then return contents, then safety. Every clause is relevant, though the final read-only sentence repeats what the annotations already say and could be trimmed.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned sections, subtotals, calculated result and balance check, plus the currency unit. Combined with the sibling routing and the fully documented two-parameter schema, an agent has everything needed to call this 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 coverage is 100% and both parameters are fully documented in the schema, including format and a hint to fetch orgnr via list_companies, so the baseline is 3. The description adds only the framing that balansdag is the date the balances apply to, which the schema already states.

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 (shows the balance sheet as of a date, per K2) and explicitly distinguishes itself from the two closest siblings, get_trial_balance and get_income_statement. An agent can select this tool without opening any schema.

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 gives an explicit use condition (questions about assets, liabilities and equity) and names the alternatives with the condition that selects each: get_trial_balance for per-account balances, get_income_statement for the income statement. Nothing is left to inference.

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

get_companyHämta bolagA
Read-onlyIdempotent
Inspect

Full bolagsdetalj för ett organisationsnummer: resultat/balans, bankavstämning, tie-outs mot reskontra, moms och findings. Argument: orgnr; valfritt year, month (period). Utan period skopas det till räkenskapsårsstart till idag, så etikett och data matchar avstämning och saldobalans.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
monthNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the default period is scoped from fiscal-year start to today, and the label/data are aligned with reconciliation and trial balance.

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

Conciseness4/5

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

The description is two dense sentences: the first states what data is returned, the second covers arguments and default scoping. It is front-loaded and has little waste, though some Swedish domain terms make it less immediately accessible.

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 read-only aggregate detail tool with no output schema, the description covers the returned domains and the optional period behavior. It lacks sibling comparison guidance, but otherwise gives an agent enough to call it correctly given the annotations.

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 only 33%, with year and month undocumented in the schema. The description compensates by naming year and month as optional period arguments and explaining what happens when no period is supplied, adding meaningful semantics beyond the bare defaults.

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 resource: full company detail for an organisation number, and enumerates the included areas (income statement/balance sheet, bank reconciliation, subledger tie-outs, VAT, findings). It does not explicitly differentiate itself from sibling tools like get_overview or get_balance_sheet, 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 Guidelines3/5

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

It explains the required argument and the default period scoping when year/month are omitted, which implies usage context. However, it does not say when to use this aggregate tool versus narrower siblings such as get_reconciliation or get_vat_return, leaving selection guidance to inference.

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

get_customer_invoiceHämta kundfakturaA
Read-onlyIdempotent
Inspect

Hämtar en kundfaktura med alla uppgifter. Använd när du har fakturans id och behöver detaljer; för att hitta fakturor eller se flera, använd list_customer_invoices, och för obetalt per kund, använd customer_outstanding. Returnerar kund, fakturanummer, fakturadatum och förfallodag, rader, belopp och moms i öre, kvarvarande saldo, status och verifikatnummer. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYesKundfakturans id (heltal), t.ex. 42. Hämta med list_customer_invoices.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world and non-destructive, so safety is covered; the description's 'Läser bara, ändrar inget' largely restates that. It does add genuinely useful context by enumerating the returned fields (customer, invoice number, dates, rows, amounts in öre, remaining balance, status, voucher number), which the annotations cannot convey.

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

Conciseness4/5

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

Front-loads purpose, then usage routing, then return shape in a tight paragraph with no filler. The return-field sentence is somewhat run-on but every element is informative.

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

Completeness5/5

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

With no output schema present, the description compensates by listing the return payload in detail, and usage/prerequisites are fully covered. An agent has everything needed to call and interpret this 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 coverage is 100% and both parameters (orgnr, invoice_id) are fully documented in Swedish with formats and how to obtain them. The description adds no parameter syntax or meaning 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?

States a specific verb and resource ('Hämtar en kundfaktura med alla uppgifter') and explicitly distinguishes itself from two named siblings (list_customer_invoices, customer_outstanding). An agent can differentiate it from the other invoice tools without opening schemas.

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?

Gives an explicit trigger ('Använd när du har fakturans id och behöver detaljer') plus named alternatives with their selecting conditions (list for finding/listing, customer_outstanding for unpaid per customer). Nothing is left to inference.

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

get_fixed_assetHämta anläggningstillgångA
Read-onlyIdempotent
Inspect

Hämtar en anläggningstillgång med avskrivningsplan och bokförda avskrivningar per i dag. Använd när du har tillgångens id; för alla tillgångar, använd list_fixed_assets, och för vad nästa avskrivning blir, använd preview_depreciation. Returnerar namn, typ och konton, anskaffningsdatum, nyttjandeperiod i månader, och i öre anskaffningsvärde, restvärde, månadsavskrivning, planenlig och faktiskt bokförd ackumulerad avskrivning, ej bokförd avskrivning och bokfört värde, samt ev. avyttring. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
asset_idYesTillgångens id (heltal), t.ex. 4. Hämta med list_fixed_assets.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so the safety profile is covered; the closing "Läser bara, ändrar inget" largely restates that. However, the detailed enumeration of what the response contains (avskrivningsplan, ackumulerade avskrivningar, bokfört värde, avyttring) is genuine behavioral context not available anywhere else, which lifts it above baseline.

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

Conciseness4/5

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

Front-loaded with purpose, then usage routing, then return contents, then a read-only note. The return-value enumeration is long but each field is informative for a tool with no output schema; there is little 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?

With no output schema, the description compensates by spelling out the returned fields, which is the right call. Safety/idempotency are carried by annotations and parameters by the schema, so the remaining coverage gap is only pagination/edge-case behavior, which is minor for a single-resource getter.

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% and both parameters are fully documented there, including formats (10-digit orgnr, integer id) and where to fetch them. The description only implies the asset_id requirement, adding nothing the schema does not already state. Baseline 3 per the rule for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Hämtar en anläggningstillgång") and disambiguates from the nearest siblings. An agent can distinguish this from list_fixed_assets and preview_depreciation purely from the description.

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?

Explicit trigger ("Använd när du har tillgångens id") plus named alternatives with the condition that selects each (list_fixed_assets for all assets, preview_depreciation for the next depreciation). Nothing is left to inference.

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

get_general_ledgerHämta huvudbokA
Read-onlyIdempotent
Inspect

Visar huvudboken för en period: transaktionerna per konto med ingående, löpande och utgående saldo. Använd för att följa ett kontos rörelser; för hela verifikat, använd list_vouchers eller get_voucher, och för bara saldon per konto, get_trial_balance. Returnerar en rapport med kolumnerna datum, verifikat, text, debet, kredit och saldo, med belopp i öre. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesTill och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-03-31.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
startYesFrån och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-01-01.
accountNoValfritt: visa bara ett konto, t.ex. 1930.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the 'Läser bara, ändrar inget' sentence is partly redundant. The description earns credit, however, by disclosing the return shape (columns datum, verifikat, text, debet, kredit, saldo) and the amount unit (öre), which no annotation or output schema provides.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose then routing then return format; every sentence carries information. The column enumeration is a slight expansion but is justified given there is no output schema.

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

Completeness4/5

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

With no output schema, the description correctly compensates by describing the returned columns and units, and it covers scope plus sibling routing. Minor gaps remain (e.g., behavior for large date ranges), but nothing essential to calling it correctly 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?

Schema description coverage is 100%, so the schema already documents orgnr, start, end and the optional account filter with formats and examples. The description only implies period/account scoping and adds no syntax or semantics 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?

States a specific verb and resource ('Visar huvudboken för en period') plus the exact content it exposes (transaktionerna per konto med ingående, löpande och utgående saldo). It distinguishes itself from list_vouchers, get_voucher and get_trial_balance, so an agent can separate it from siblings without opening any schema.

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?

Gives an explicit use case ('följa ett kontos rörelser') and names the alternatives with the condition that selects each: whole vouchers via list_vouchers/get_voucher, balances only via get_trial_balance. Nothing is left to inference.

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

get_income_statementHämta resultaträkningA
Read-onlyIdempotent
Inspect

Visar resultaträkningen för en period, uppställd enligt K2 med alla konton. Använd för frågor om intäkter, kostnader och resultat; för balansräkningen, använd get_balance_sheet, och för årsredovisningens siffror med jämförelseår, read_annual_report. Returnerar grupper med konton och belopp i öre (intäkter positiva, kostnader negativa) och beräknat resultat. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesTill och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-03-31.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
startYesFrån och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-01-01.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: return structure (groups of accounts), unit and sign convention (belopp i öre, intäkter positiva, kostnader negativa) and the computed result.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, then routing, then return semantics. No filler; each sentence adds a fact the agent needs. The closing 'Läser bara, ändrar inget' is brief and reinforces the safety profile.

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?

No output schema exists, so the description must describe the return — it does so concretely (account groups, amounts in öre with sign convention, calculated profit). All three required parameters are documented in the schema, and the sibling routing is handled. Nothing needed to call the tool correctly 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?

Schema description coverage is 100% — every parameter has a format example and a hint (orgnr hämtas med list_companies). The description adds nothing about the parameters, so the schema carries the full load and 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?

Specific verb (Visar), resource (resultaträkningen), scope (en period) and presentation standard (K2 med alla konton). It also names the two sibling tools it is not (get_balance_sheet, read_annual_report), so an agent can disambiguate without reading any schema.

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 it (frågor om intäkter, kostnader och resultat) and routes the agent to specific alternatives for adjacent cases: get_balance_sheet for the balance sheet and read_annual_report for annual-report figures with comparison years.

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

get_integration_recordHämta post från kopplingA
Read-onlyIdempotent
Inspect

Hämtar en post från en koppling med all normaliserad data, t.ex. en Shopify-order, en Stripe-betalning eller en utbetalning. Använd innan du bokför posten; för att hitta poster, använd list_integration_data. Belopp är i öre i källans valuta (Stripe: saldots valuta). En order har totalbelopp, moms per sats (tax_lines, och current_tax_lines efter återbetalningar), frakt, rabatter, återbetalt belopp, leveransland, betalväg och transaktioner. En utbetalning har nettobelopp, summering och alla transaktioner (försäljning, återbetalningar, avgifter, justeringar, tvister) med order och avgift. En Stripe-betalning (charge) har belopp, avgift, netto, återbetalt, kundens land och momsen från Stripe-fakturan (invoice) när betalningen hör till en. suggested_voucher är ett förslag på verifikat (konton och belopp i öre, debet positivt) med anteckningar om sådant att kontrollera; granska det innan du bokför. Med include_raw följer källans oförändrade svar med. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
record_idYesPostens id (heltal), t.ex. 42. Hämta med list_integration_data.
include_rawNoTa med källans oförändrade svar (stort). Standard false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so 'Läser bara, ändrar inget' is largely redundant. Against that lower bar the description still adds real value: the öre currency convention, the tax_lines/current_tax_lines distinction after refunds, what suggested_voucher contains and that it must be reviewed before booking, and that include_raw pulls in the source's untouched response.

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

Conciseness4/5

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

One dense paragraph, but the purpose and the routing rule are front-loaded and every subsequent sentence carries domain payload (field inventories per record type, currency semantics, voucher-review caveat). It is long, yet with no output schema almost nothing here reads as filler.

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?

There is no output schema and no nested objects, so the description rightly carries the full burden of describing return shape, and it does so per record type (order, payout, charge) plus the suggested_voucher structure and sign convention. An agent has enough to call it and interpret the result 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%, including how to obtain orgnr and record_id, so the schema does the heavy lifting and a baseline 3 applies. The description restates include_raw ('Med include_raw följer källans oförändrade svar med') without adding parameter-level syntax or format detail 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?

States a specific verb and resource ('Hämtar en post från en koppling') and then enumerates the concrete record kinds it returns (Shopify-order, Stripe-betalning, utbetalning). It also explicitly disambiguates from the sibling list_integration_data, so an agent can pick between them without opening either schema.

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?

'Använd innan du bokför posten' gives the precise point in the workflow where this tool belongs, and 'för att hitta poster, använd list_integration_data' names the alternative plus the condition that selects it. Nothing about when-to-use is left to inference.

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

get_open_reconciliationsÖppna avstämningarA
Read-onlyIdempotent
Inspect

Visar vad som återstår att stämma av för en månad: alla avstämningar (bilagor) som inte är attesterade, med en summering. Använd för frågor som hur mycket är inte avstämt; för full detalj per bilaga med poster och attester, använd get_reconciliation. Returnerar antal bilagor totalt, attesterade och öppna, öppen differens i öre och antal per status, samt per öppen bilaga typ, konto, status, saldo, avstämt belopp och differens i öre. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesKalenderår för månaden, t.ex. 2026.
monthYesMånad 1 till 12, t.ex. 3 för mars. Avstämningen gäller månadens sista dag.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description's 'Läser bara, ändrar inget' largely restates that. It adds genuine value by disclosing the return content since there is no output schema, but adds no behavioral detail like rate limits or scope beyond the month.

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

Conciseness4/5

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

Front-loaded purpose, then alternative routing, then return details, then a read-only note. Slightly long but each sentence carries distinct information; no filler.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating returned aggregates and per-bilaga fields. Combined with the routing guidance and full param coverage, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so year, month and orgnr are fully documented in the schema. The description only implies month scoping and adds no syntax or format detail beyond what the schema provides, 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?

States a specific verb and resource ('visar vad som återstår att stämma av för en månad: alla avstämningar som inte är attesterade') and explicitly contrasts itself with the sibling get_reconciliation. An agent can distinguish it from the full-detail tool without opening the schema.

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

Usage Guidelines5/5

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

Explicitly gives when to use it ('för frågor som hur mycket är inte avstämt') and names the alternative with its selecting condition ('för full detalj per bilaga ... använd get_reconciliation'). No inference required.

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

get_overviewÖversikt: resultat och deadlinesA
Read-onlyIdempotent
Inspect

Visar en översikt för ett bolag: omsättning och resultat per månad samt kommande deadlines för moms, INK2 och årsredovisning. Använd för en snabb lägesbild; för vad som återstår att göra, använd read_checklist, och för om årsredovisning och INK2 är inlämnade, använd read_statutory_status. Returnerar månadsvärden för omsättning och resultat och en lista över kommande deadlines. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so "Läser bara, ändrar inget" largely restates what is known. However, with no output schema, the description adds real behavioral value by describing the return content (monthly revenue/profit values and a list of upcoming deadlines).

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?

Front-loaded with the purpose, followed by alternatives, then return shape, then safety. Every clause carries information and there is no filler.

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 single-parameter read tool with no output schema, the description covers purpose, alternatives, return contents and read-only behavior. Nothing needed to call it correctly 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?

Schema coverage is 100% and the single orgnr parameter is fully documented in the schema, including format and how to obtain it (list_companies). The description only implies company scoping via "för ett bolag" and adds no syntax or format detail, 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?

States a specific verb ("Visar") and resource ("översikt för ett bolag") and enumerates the exact contents: monthly revenue and profit plus deadlines for VAT, INK2 and annual report. It also names the sibling tools it is not (read_checklist, read_statutory_status), so an agent can distinguish it without opening other schemas.

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 says when to use it ("Använd för en snabb lägesbild") and routes the agent to the correct alternatives with the condition that selects them: read_checklist for remaining work, read_statutory_status for submission status. This is exactly the when/when-not/alternatives structure.

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

get_payroll_time_basisLöneunderlag ur tidrapporterA
Read-onlyIdempotent
Inspect

Löneunderlag ur tidrapporteringen: attesterade, ännu inte utbetalda timmar per anställd t.o.m. ett datum. Varje anställd har components (förslag på lönearter: timlön = timmar × timlön, övertid och OB om ersättning per timme är angiven, semesterersättning om den betalas med varje lön) och entry_ids. Skicka components och time_entry_ids = entry_ids i entries till calc_payroll/run_payroll, så märks timmarna som utbetalda. Frånvaro (absence) och notes visar det som måste hanteras manuellt. Räkna aldrig om beloppen själv. Scope view. Argument: orgnr; valfritt through (YYYY-MM-DD, default i dag).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
throughNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond them: the output structure (components, entry_ids, absence, notes), the side effect of marking hours paid when fed downstream, and the explicit guardrail 'Räkna aldrig om beloppen själv'.

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

Conciseness4/5

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

Front-loaded with the core scope before diving into output structure and workflow, and every sentence carries actionable content. It is dense and slightly long, but nothing is redundant.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so by naming components, entry_ids, absence, and notes. Combined with the workflow guidance, an agent has everything needed to call and act on this 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 50%: orgnr is documented in the schema, but through has no schema description. The description compensates by specifying through's format (YYYY-MM-DD) and default (today), adding meaning the schema omits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: approved but not-yet-paid hours per employee up to a date (attesterade, ännu inte utbetalda timmar per anställd t.o.m. ett datum). This precisely distinguishes it from siblings like get_time_reporting, list_time_entries, and get_payslip by scoping to the payroll-preparation view.

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

Usage Guidelines4/5

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

Gives clear downstream routing: send components and time_entry_ids = entry_ids to calc_payroll/run_payroll to mark hours as paid, and flags that absence and notes must be handled manually. Strong context, though it does not explicitly contrast against the other time/payroll query tools an agent might pick.

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

get_payslipHämta lönebeskedA
Read-onlyIdempotent
Inspect

Hämta lönebeskedet för en lönerad som utskrivbar HTML (line_id från en lönekörnings rader, se list_payroll_runs). Scope view. Argument: orgnr, line_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
line_idYes

TDQS

A3.5/5.0
Behavior2/5

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

Annotationerna anger readOnlyHint=true, idempotentHint=true, openWorldHint=false och destructiveHint=false, så beskrivningen behöver inte upprepa detta. Beskrivningen nämner 'utskrivbar HTML' (utdataformat) och scope view (auktorisering), vilket är användbart. Men den saknar information om storlek, begränsningar eller vad som händer om line_id inte finns, vilket är relevant för en läsoperation med okända returvärden.

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?

Två meningar som är front-loadade med syftet och därefter nödvändig kontext (scope, argumenthänvisning). Ingen utfyllnad.

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?

För en enkel läsoperation med två parametrar och tydliga annotationer är beskrivningen tillräcklig. Den nämner utdataformat och scope. Ett litet gap är avsaknaden av information om vad som händer om line_id är ogiltigt, men annotations täcker säkerhetsprofilen.

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-täckningen är 50% och beskrivningen fyller delvis gapet: den nämner att line_id kommer från en lönekörnings rader (se list_payroll_runs) och att orgnr är relaterat till företaget. Baslinjen är 3, men den tillför extra vägledning för line_id som inte finns i schemat.

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?

Står ett specifikt verb och resurs ('Hämta lönebeskedet för en lönerad') och anger utdataformatet (utskrivbar HTML). Skiljer sig från syskonen genom att vara den enda lönebeskeds-hämtaren, även om 'line_id från en lönekörnings rader' kräver kännedom om list_payroll_runs.

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?

Användningskontexten är underförstådd – du hämtar ett lönebesked när du behöver det. Den hänvisar till list_payroll_runs för att hitta line_id, vilket är en användbar ledtråd, men det finns ingen explicit när/when-not eller alternativ.

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

get_reconciliationHämta avstämningA
Read-onlyIdempotent
Inspect

Hämtar alla avstämningar (bilagor) för en månad med full detalj: bank, kund- och leverantörsreskontra, moms, skattekonto, anläggningar m.fl. Använd när du ska arbeta med en avstämning; för bara det som återstår, använd get_open_reconciliations, och för avvikelser med förslag till rättelse, använd list_findings. Returnerar per bilaga typ, konto, saldo i huvudboken, avstämt belopp och differens i öre, status, specifikationsrader, underlag, poster och attester. Räknas fram vid anropet. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesKalenderår för månaden, t.ex. 2026.
monthYesMånad 1 till 12, t.ex. 3 för mars. Avstämningen gäller månadens sista dag.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint/idempotentHint/destructiveHint=false, and the description reinforces with 'Läser bara, ändrar inget'. It adds real behavioral value beyond annotations by disclosing that the figures are computed at call time ('Räknas fram vid anropet') and by listing what each item contains. Not a 5 because pagination/limits on 'alla avstämningar' are unaddressed.

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

Conciseness4/5

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

Front-loaded with purpose and alternatives, and the detailed return-field enumeration is informative rather than padding. It is longer than average but each clause carries content; the return-value list could arguably be trimmed.

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

Completeness4/5

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

With no output schema, the description usefully compensates by enumerating returned fields (typ, konto, saldo, avstämt belopp, differens i öre, status, specifikationsrader, underlag, poster, attester). Combined with full parameter docs and annotations, an agent has what it needs; only aggregation scope/pagination is unspecified.

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 year, month and orgnr are already fully documented (including the org-number format and the 'fetch via list_companies' pointer). The description adds no parameter-level syntax or constraints beyond that, 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?

States a specific verb and resource ('Hämtar alla avstämningar (bilagor) för en månad med full detalj') and enumerates the domains covered (bank, kund-/leverantörsreskontra, moms, skattekonto, anläggningar). It also names the siblings it is not (get_open_reconciliations, list_findings), so an agent can differentiate it without opening any schema.

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?

Explicit routing: use this when working with a reconciliation, use get_open_reconciliations for only what remains, and list_findings for deviations with correction proposals. This is a textbook when-to-use plus alternatives statement.

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

get_rot_rut_request_fileHämta ROT/RUT-filA
Read-onlyIdempotent
Inspect

Hämta en ROT/RUT-begäran som Skatteverkets XML-fil (schema version 6). Användaren importerar filen i Skatteverkets e-tjänst Rot och rut och signerar där; Kvickd skickar ingenting. Scope view. Argument: orgnr, request_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
request_idYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive, and closed-world behavior. The description adds genuine context beyond that: the output is a version-6 XML file, the operation transmits nothing to the tax authority, and it requires the "view" scope. Those details help an agent set expectations.

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

Conciseness4/5

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

Purpose and workflow are front-loaded and the total length is modest. The trailing 'Argument: orgnr, request_id' list is pure redundancy with the schema, and the 'Scope view.' fragment is terse to the point of being cryptic, but neither derails the definition.

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 read-only file-fetch with full annotations and no output schema, the description conveys what the file is, its schema version, and the human workflow around it. The gap is request_id semantics, which are absent from both description and schema.

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 only 50%, and request_id has no description anywhere. The description merely restates the argument names ('Argument: orgnr, request_id'), adding nothing beyond the schema and doing nothing to compensate for the undocumented request_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — fetching a ROT/RUT request rendered as Skatteverket's XML file (schema version 6) — which clearly separates it from create_rot_rut_request, list_rot_rut, and the payout siblings. It does not name any sibling explicitly, so it stops short of the top score.

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

Usage Guidelines3/5

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

It explains the downstream workflow: the user imports the file into Skatteverket's e-service and signs there, and Kvickd sends nothing. That implies when the tool is appropriate, but it gives no explicit when-to-use/when-not guidance or comparisons against siblings like list_rot_rut or mark_rot_rut_request_submitted.

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

get_supplier_invoiceHämta leverantörsfakturaA
Read-onlyIdempotent
Inspect

Hämtar en leverantörsfaktura med alla uppgifter. Använd när du har fakturans id och behöver detaljer; för att hitta fakturor eller se flera, använd list_supplier_invoices. Returnerar leverantör, fakturanummer, OCR, fakturadatum och förfallodag, rader med konto och moms, totalbelopp, moms och kvarvarande saldo i öre, status, valutauppgifter och verifikatnummer för bokföring och betalning. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYesLeverantörsfakturans id (heltal), t.ex. 42. Hämta med list_supplier_invoices.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, and the closing line 'Läser bara, ändrar inget' largely restates that. However, the description adds real value beyond annotations by enumerating what the payload contains (supplier, OCR, dates, lines with account/VAT, remaining balance in öre, voucher number), which tells the agent the response is a full accounting detail. Minor redundancy with readOnlyHint keeps it from a 5.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose, then usage/alternative, then payload. The return-field enumeration is long but earns its place since no output schema exists. No filler sentences.

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

Completeness5/5

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

With no output schema, the description compensates by listing the key returned fields, and annotations already carry the safety profile. Purpose, alternative routing, safety and return content are all covered, so an agent has everything needed 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?

Schema description coverage is 100% and both parameters are documented with formats and example values plus how to obtain them (list_companies, list_supplier_invoices). The description alludes to 'fakturans id' but adds no syntax or meaning 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?

States a specific verb and resource ('Hämtar en leverantörsfaktura med alla uppgifter') and explicitly distinguishes itself from the sibling list_supplier_invoices. An agent can tell it apart from the list tool without opening either schema.

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?

Gives the exact selection condition ('Använd när du har fakturans id och behöver detaljer') and names the alternative with its condition ('för att hitta fakturor eller se flera, använd list_supplier_invoices'). Nothing is left to inference.

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

get_time_reportingTidrapportering: länk och lägeA
Read-onlyIdempotent
Inspect

Visar läget för tidrapporteringen: bolagets länk för tidrapportering, vilka anställda som har en personlig kod och hur mycket som väntar på attest. Använd för att ge en anställd länken eller se om något ska attesteras; för själva tidposterna, använd list_time_entries. Returnerar länken (om den är aktiverad), aktiva anställda med om de har kod och med timlön och månadslön i öre, antal poster och minuter som väntar på attest och vilka tidstyper som finns. Koderna visas aldrig. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), and the closing 'Läser bara, ändrar inget' largely restates them. However, the description adds genuinely new behavioral context: the privacy rule 'Koderna visas aldrig', the conditional link ('om den är aktiverad'), and the units of the returned figures (öre, minutes).

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

Conciseness4/5

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

Well front-loaded: purpose, then usage plus alternative, then return payload, then caveats. Dense but every clause carries content; the trailing read-only sentence is the only mildly redundant part given the annotations.

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?

There is no output schema, so the description carries the full burden of describing the return value, and it does so thoroughly (link, active employees with code status and salary in öre, counts of pending entries/minutes, available time types). Nothing an agent needs to call or interpret this tool 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?

Schema description coverage is 100% and the single parameter already documents format and how to obtain it via list_companies, so the description adds nothing about parameters. Baseline 3 for a fully documented single-parameter 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?

States a specific verb and resource ('Visar läget för tidrapporteringen') and enumerates the concrete facets it reports on: link, employees with personal codes, and pending approvals. It also explicitly delimits itself from the sibling list_time_entries, which handles the actual time entries.

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?

Gives two concrete use cases ('ge en anställd länken', 'se om något ska attesteras') and names the alternative tool for the adjacent need ('för själva tidposterna, använd list_time_entries'). An agent can route correctly without further inference.

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

get_trial_balanceHämta saldobalansA
Read-onlyIdempotent
Inspect

Visar saldobalansen per ett datum: saldot på varje konto som har ett saldo. Använd för saldon per konto; för en uppställd balansräkning, använd get_balance_sheet, för resultaträkningen, get_income_statement, och för transaktioner, get_general_ledger. Returnerar per konto nummer, namn och saldo i öre (debet positivt) samt summa debet och summa kredit. Balanskonton räknas från start, resultatkonton från räkenskapsårets början. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
balansdagYesDatum som saldona gäller per, ÅÅÅÅ-MM-DD, t.ex. 2026-06-30.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the 'Läser bara, ändrar inget' clause is partly redundant. But the description adds genuine behavioral context beyond the annotations: result format (account number, name, balance in öre with debit positive, sum debit and credit) and the accounting rule that balance accounts count from inception while income accounts count from fiscal-year start.

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?

Purpose is front-loaded, followed by sibling disambiguation, return shape, and accounting semantics in a tight sequence. Every sentence carries information; no filler.

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?

There is no output schema, so the description must carry the return-value burden, and it does: it explains per-account fields, currency unit, sign convention, and totals. Combined with the calculation rules, an agent has everything needed to call and interpret the result.

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% and both parameters are fully documented by the schema, so the baseline is 3. The description only loosely touches parameters via 'per ett datum', adding no format or constraint detail beyond what the schema already states for orgnr and balansdag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Visar saldobalansen per ett datum') and immediately distinguishes itself from three siblings by name (get_balance_sheet, get_income_statement, get_general_ledger). An agent can route correctly without opening any other schema.

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 says what the tool is for ('saldon per konto') and names the exact alternatives with their selecting conditions: balance sheet, income statement, and transactions. Nothing is left to inference about when to choose this versus a sibling.

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

get_vat_returnHämta momsrapportA
Read-onlyIdempotent
Inspect

Momsrapporten för en period: rutorna, netto och 'att betala/få tillbaka' med förfallodatum. Scope view. Argument: orgnr, key (periodnyckel, t.ex. 2026-01); valfritt year (annars ur nyckeln).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
yearNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing the actual contents of the return (boxes, net, payable/refundable amount, due date), which is valuable given there is no output schema.

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

Conciseness5/5

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

A single dense sentence that front-loads the resource and its returned fields, then the scope, then the arguments with the key format example. No filler and nothing that could be dropped without losing information.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so (boxes, net, payable/refundable, due date). The remaining gap is procedural: it never says where to obtain the period key, which matters for a tool whose key argument is required.

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 only 33% — key and year have no schema description — and the description compensates by defining key as a period key with an example format (2026-01) and explaining that year is optional and otherwise derived from key. This adds real meaning the schema lacks; orgnr is left to the schema, which already documents it well and points to list_companies.

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?

States a specific verb+resource ('Momsrapporten för en period') and enumerates the payload (rutorna, netto, 'att betala/få tillbaka', förfallodatum), so an agent knows exactly what this returns. It does not, however, name or contrast with the closest siblings (list_vat_periods, approve_and_book_vat), so it lands at a clear-but-undifferentiated 4.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of when NOT to use it, and no pointer to the alternative that supplies the required period key (list_vat_periods) or to the booking tool. 'Scope view' hints at read-only retrieval but is not an explicit usage rule, leaving context to inference.

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

get_voucherHämta verifikatA
Read-onlyIdempotent
Inspect

Hämtar ett bokfört verifikat med alla rader och kopplade underlag. Använd när du har verifikatets id; för att hitta verifikat, använd list_vouchers. Returnerar serie, nummer, räkenskapsår, datum, text, källa, rader med konto, belopp i öre (debet positivt, kredit negativt), text, transaktionsdatum och momskod, samt underlag med id och filnamn. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
voucher_idYesVerifikatets id (heltal), t.ex. 812. Hämta med list_vouchers.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description reinforces this in plain language ('Läser bara, ändrar inget'), which is largely redundant. Its real added value is describing the payload shape (rows, öre amounts with debit positive/credit negative, underlag), which annotations do not cover. Auth requirements and error behavior are still unstated.

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

Conciseness4/5

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

Three front-loaded sentences: purpose, usage routing, return contents. The return enumeration is long but justified in the absence of an output schema, and no sentence is wasted.

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

Completeness5/5

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

With no output schema, the description must carry the return contract, and it does: voucher header fields plus line-level fields (account, amount in öre with sign convention, VAT code) and underlag. Combined with annotations covering the safety profile, an agent has everything needed to call and interpret the result.

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%: the schema already documents orgnr (format plus example) and voucher_id (integer, obtained via list_vouchers). The description adds no parameter-level detail 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 states a specific verb and resource ('Hämtar ett bokfört verifikat') and immediately scopes what is included ('med alla rader och kopplade underlag'). It explicitly distinguishes itself from the sibling list_vouchers, so an agent can route correctly without opening the schema.

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

Usage Guidelines5/5

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

It gives an explicit use condition ('Använd när du har verifikatets id') and names the alternative for the opposite case ('för att hitta verifikat, använd list_vouchers'). This is a complete when-to-use / when-to-use-something-else instruction with nothing left to inference.

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

get_year_end_checklistÅrsbokslutets fyra stegA
Read-onlyIdempotent
Inspect

Visar årsbokslutets fyra bokföringssteg för ett räkenskapsår: periodiseringar, bokslutsdispositioner, aktuell skatt och årets resultat. Använd när du arbetar med bokslutet för ett visst år; för bolagets allmänna att göra-lista, använd read_checklist, och för om årsredovisning och INK2 är inlämnade, använd read_statutory_status. Returnerar status per steg, om steget kan bokföras nu och det föreslagna, beräknade verifikatet. Läser bara; stegen bokförs med book_year_end_step.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025).
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description still adds value by stating what the response contains (status per step, whether the step can be booked now, the proposed calculated verifikat) and by pointing to book_year_end_step as the write path, which the annotations do not convey.

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

Conciseness4/5

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

Two dense sentences, front-loaded with purpose then routing then return payload; no filler. Slightly long but every clause carries information, so it stays manageable.

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?

No output schema, so the description covers the return shape (per-step status, bookability, proposed verifikat), the read-only nature, the write counterpart, and sibling disambiguation. An agent has everything needed to call and interpret it.

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% and both parameters already document format with examples (year as the year the fiscal year ends; orgnr 10 digits with/without hyphen, retrieved via list_companies). The description adds no further parameter detail, 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?

States a specific verb (visar) plus the exact resource (årsbokslutets fyra bokföringssteg) and enumerates the four steps, so an agent knows precisely what it returns. It also names read_checklist and read_statutory_status as distinct siblings and explains the boundary.

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?

Explicit when-to-use ('Använd när du arbetar med bokslutet för ett visst år') and explicit when-to-use-others, naming read_checklist for the general to-do list and read_statutory_status for årsredovisning/INK2 filings. Routing is unambiguous.

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

import_sieImportera SIEA
DestructiveIdempotent
Inspect

Importera en SIE-fil till huvudboken (kontoplan + IB + alla verifikat). KODEN tolkar och postar; kräver scope book. Argument: orgnr, content_base64; valfritt filename, replace. Filen importeras till angivet bolag även om filens #ORGNR skiljer sig; då följer en upplysning med i orgnr_note (allow_orgnr_mismatch behövs inte längre och ignoreras). Skydd mot dataförlust: finns redan importerad bokföring för årens filen rör avbryts importen (inget raderas) om inte replace=true skickas — då ersätts årets importerade verifikat. Native (appbokförda) verifikat rörs aldrig.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
replaceNo
filenameNoimport.sie
content_base64Yes
allow_orgnr_mismatchNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say destructiveHint=true/idempotentHint=true; the description goes well beyond them by explaining exactly what is destroyed (the year's imported verifikat replaced under replace=true), that nothing is deleted otherwise, and that native app-booked vouchers are never touched. It also discloses the org-number mismatch behavior and the redundant allow_orgnr_mismatch flag.

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

Conciseness4/5

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

Dense but front-loaded: purpose, requirements, arguments, then safety semantics in descending priority. Every sentence carries information, though the argument recap is partly redundant with the schema and the parenthetical about allow_orgnr_mismatch could be tightened.

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 destructive, no-output-schema mutation tool this covers the essentials: auth scope, required inputs, data-loss protection, overwrite semantics, and the orgnr_note follow-up. An agent can call it correctly and safely without further 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?

With only 20% schema coverage the description must carry the load, and it does: it names orgnr, content_base64, filename and replace, defines replace's effect, and explicitly states allow_orgnr_mismatch is deprecated and ignored. It does not explain the expected encoding/format of content_base64, but the schema supplies the orgnr format hint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Importera) and resource (SIE-fil) with precise scope: it populates the general ledger with kontoplan, IB and all vouchers. No sibling tool performs an SIE import, so it is unambiguously distinguishable from the create_/book_/upload_ family.

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

Usage Guidelines4/5

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

Gives clear prerequisites ('kräver scope book') and the condition that selects the destructive path (import aborts unless replace=true). It does not name an alternative tool, but no sibling offers an equivalent import, so there is nothing to route against. Not quite a 5 because no explicit when-not guidance beyond the replace switch.

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

list_accountsLista kontonA
Read-onlyIdempotent
Inspect

Listar bolagets kontoplan, sorterad på kontonummer. Använd för att hitta rätt konto inför bokföring eller kontrollera ett kontos namn; för saldon, använd get_trial_balance. Returnerar per konto nummer, namn, typ, SRU-kod och momskod. Har bolaget ingen kontoplan ännu läggs BAS-kontoplanen in första gången; i övrigt ändras inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, but the description adds a genuinely non-obvious side effect: the BAS chart of accounts is created on the first call if the company has none, and nothing changes otherwise. It also enumerates the returned fields, which matters because there is no output schema.

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 tight sentences: purpose and sorting first, usage plus alternative next, return format and the first-call side effect last. Every sentence carries information and there is no filler.

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 one-parameter read tool this is complete: the sole parameter is fully documented in the schema, the return fields are named despite the absence of an output schema, the sibling alternative is given, and the conditional write side effect is disclosed.

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% and the single orgnr parameter already documents the format (10 digits, optional hyphen, example) and how to obtain it via list_companies. The description adds no parameter-level meaning, 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?

States a specific verb (list) and resource (bolagets kontoplan) plus the ordering (sorterad på kontonummer), and explicitly routes balance queries to the sibling get_trial_balance. An agent can distinguish it from get_trial_balance, get_general_ledger and upsert_account without opening any schema.

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?

Gives concrete when-to-use cases ('hitta rätt konto inför bokföring eller kontrollera ett kontos namn') and an explicit when-not/alternative ('för saldon, använd get_trial_balance'). Nothing is left to inference.

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

list_available_underlagLista kopplingsbara underlagA
Read-onlyIdempotent
Inspect

Lista underlag som kan kopplas till ett verifikat: dokument i inkorgen (inbox), uppladdade dokument som får delas med LLM (documents) och underlag som redan ligger i poolen (pool). Använd id:na — document_id för inbox/documents och underlag_id för pool — med create_voucher eller attach_underlag. Scope view. Argument: orgnr.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/non-open-world, so the safety profile is covered. The description adds value beyond that with the required 'Scope view' permission disclosure and the id-field mapping per source, though it does not describe pagination or result limits.

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

Conciseness4/5

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

The key content (what is listed, and which ids to use downstream) is front-loaded in a dense but readable sentence. The trailing 'Argument: orgnr' is redundant with the schema and slightly dilutes the structure.

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

Completeness4/5

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

With no output schema, the description compensates by naming the three result categories and the returned id fields (document_id vs underlag_id), which is what an agent needs to act on the output. Return shape details like item counts or pagination are not given.

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?

Only one parameter, and its schema description is complete (100% coverage) including format and where to obtain it. The description's trailing 'Argument: orgnr' adds nothing 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?

States a specific verb (lista) and resource (underlag) and enumerates the three distinct source pools (inbox, documents, pool) that this tool aggregates. This distinguishes it clearly from siblings like list_inbox, list_documents, and list_supplier_underlag, which each cover only one source.

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

Usage Guidelines4/5

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

Gives clear downstream context: it names create_voucher and attach_underlag as the consumers of the returned ids, and explains which id field applies to which source. It does not explicitly state when to prefer this over the single-source siblings, so it stops 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.

list_companiesLista bolagA
Read-onlyIdempotent
Inspect

Lista koncernens bolag med härledd status, antal findings och bankmatchningsgrad. Ingen indata; scopas av din behörighet.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed world), so the bar is lower. The description still adds real context beyond them: results are filtered by the caller's authorization scope, and the payload contains computed/derived values rather than raw records.

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 short sentences with no waste; the returned fields are front-loaded before the input/permission note. Every clause 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?

With no output schema, the description usefully names the key returned fields and the permission scoping. Minor gaps remain (no indication of ordering, pagination, or whether an empty result is possible), but it is complete enough to invoke correctly.

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

Parameters4/5

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

Zero parameters, so the baseline is 4, and the description reinforces this with 'Ingen indata', removing any doubt that filters must be passed. Nothing more is needed for a parameterless call.

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?

States a specific verb and resource ('Lista koncernens bolag') and enumerates the derived fields returned (status, number of findings, bank matching rate). The group-wide scope implicitly separates it from get_company and search_company, though it never names a sibling explicitly.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance or alternatives. It says only that there is no input and that results are scoped by permission, leaving the agent to infer when to pick this over search_company or get_company.

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

list_customer_invoicesLista kundfakturorA
Read-onlyIdempotent
Inspect

Listar bolagets kundfakturor, nyast först, valfritt filtrerade på status. Använd för att hitta en faktura eller se vad som är obetalt; för en enskild faktura, använd get_customer_invoice, och för obetalt per kund, customer_outstanding. Returnerar fakturorna med kund, fakturanummer, datum, rader, belopp, moms och kvarvarande saldo i öre, status och ev. ROT/RUT, samt summa totalt och summa kvarvarande saldo i öre. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
statusNoValfritt filter: ej_bokford (utkast), obetald (allt med saldo kvar, även förfallna och delbetalda), forfallen, under_betalning (delbetald), slutbetald eller makulerad. Utelämna för alla.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description adds the sort order (newest first) plus a detailed inventory of returned fields including sums in öre. With no output schema, this return-value disclosure is genuinely useful context beyond the annotations, though 'Läser bara, ändrar inget' only restates readOnlyHint.

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

Conciseness4/5

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

Front-loads purpose, then usage/alternatives, then return contents, then the read-only note. Each sentence carries distinct information, though the return-field enumeration is dense and slightly overlong.

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 two-parameter list tool with no output schema, the description covers filtering, ordering, sibling differentiation, and the shape of the returned data (fields, totals, currency unit in öre). Nothing an agent needs to invoke it correctly 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?

Schema description coverage is 100%, so both orgnr and status are already fully documented, including status values and the orgnr format. The description mentions optional status filtering but adds no syntax or meaning 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?

States a specific verb (Listar) and resource (kundfakturor), plus scope details (nyast först, valfritt filtrerade på status). It explicitly distinguishes itself from get_customer_invoice (single invoice) and customer_outstanding (unpaid per customer), so an agent can pick the right tool without opening schemas.

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?

Names concrete use cases (hitta en faktura, se vad som är obetalt) and routes to the correct alternatives by condition: get_customer_invoice for a single invoice and customer_outstanding for per-customer unpaid. The alternative selection logic is explicit rather than implied.

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

list_documentsLista dokumentA
Read-onlyIdempotent
Inspect

Listar dokumenten i dokumentarkivet, t.ex. avtal, policyer, protokoll, attestordningar och leverantörsfakturor, för alla bolag du har åtkomst till, nyast först. Använd för att hitta ett dokument och dess id; policyernas innehåll läses med list_policies och read_policy. Returnerar per dokument id, namn, filnamn, filtyp, storlek, kategori, vilka bolag det gäller, synlighet och vem som laddade upp det. Bara uppgifter om dokumenten, inget innehåll. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing ordering (newest first), the metadata-only nature ('Bara uppgifter om dokumenten, inget innehåll'), and confirms read-only behavior in prose, which helps an agent understand what it actually receives.

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

Conciseness4/5

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

It is front-loaded: purpose and scope first, then usage, then returned fields, then the read-only assurance. The enumeration of return fields is slightly verbose but earns its place since no output schema exists; no sentence is pure filler. Slightly long overall, so not a 5.

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 compensates well by enumerating what is returned per document (id, name, filename, file type, size, category, companies, visibility, uploader) and by confirming metadata-only. Annotations cover safety, scope is stated, and the sibling routing is provided, leaving little an agent would need to call it correctly.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 per the rubric. The description does not need to explain parameter meaning, and it instead usefully describes the returned fields, which is extra value rather than a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Listar dokumenten i dokumentarkivet') with concrete scope (all companies you have access to, newest first) and example categories. It explicitly separates itself from related siblings by noting that policy content is read with list_policies and read_policy, so an agent can tell it apart from delete_document/edit_document without opening any schema.

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

Usage Guidelines4/5

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

Gives clear context ('Använd för att hitta ett dokument och dess id') and names the alternative tools used for a related-but-different need (list_policies/read_policy for policy content). It does not spell out explicit when-not-to-use conditions, but the routing guidance to the alternatives is present and unambiguous.

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

list_employeesLista anställdaA
Read-onlyIdempotent
Inspect

Listar bolagets anställda. Använd för att hitta en anställds id inför run_payroll, calc_payroll, get_payslip eller upsert_employee; för tidrapporterade timmar, använd list_time_entries. Returnerar per anställd id, namn, personnummer, skattetabell och kolumn, månadslön och timlöner i öre, arbetsgivaravgift, semesterersättning och om den anställde är aktiv. Läser bara, ändrar inget. Svaret innehåller personuppgifter; visa bara det användaren behöver.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, but the description adds material context they do not cover: the response contains personal data (personnummer) and the agent is instructed to display only what the user needs. It goes slightly beyond by restating 'Läser bara, ändrar inget', which duplicates the annotations, but the PII/handling guidance is genuinely additive.

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

Conciseness4/5

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

Front-loads purpose followed by usage routing, then return fields, then the read-only and privacy notes. The long enumerated return-field sentence is dense but earns its place because no output schema exists; still, the field list could be tighter.

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

Completeness5/5

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

With no output schema, the description enumerates the returned fields (id, name, personnummer, tax table/column, salary, employer contributions, holiday pay, active flag) so the agent knows what it receives. Combined with usage routing and PII guidance, nothing needed to call it correctly 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?

Only one parameter with 100% schema description coverage, so the schema already documents format (10 digits, optional hyphen, example) and the source (list_companies). The description adds no further parameter semantics; baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Listar bolagets anställda') and immediately distinguishes itself from siblings by naming the downstream tools it feeds (run_payroll, calc_payroll, get_payslip, upsert_employee) and the alternative for time data (list_time_entries). An agent can place it without opening any schema.

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?

Gives explicit when-to-use (find an employee's id before payroll/employee operations) and an explicit when-not-to-use with the correct alternative (list_time_entries for hourly time reporting). Nothing is left to inference.

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

list_findingsLista avvikelserA
Read-onlyIdempotent
Inspect

Listar avvikelser som avstämningen inte har kunnat klara av automatiskt, var och en med ett förslag till rättelse. Gäller hela det senaste räkenskapsåret, inte en enskild månad; för månadsvisa avstämningar, använd get_open_reconciliations. Returnerar per avvikelse ett stabilt id (ref, används som finding_ref i create_proposal och book_voucher), kategori, rubrik, förklaring, belopp i öre, konto, underlag och ett föreslaget verifikat. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Läser bara, ändrar inget' largely restates them. However, the description adds genuinely non-obvious behavior beyond the annotations: the stable id contract (ref reused as finding_ref in create_proposal and book_voucher) and the exact return payload per finding.

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

Conciseness4/5

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

Front-loaded with the purpose, then scope, then the sibling alternative, then the return contract. Dense and largely waste-free, though the enumeration of return fields is long; still, each sentence carries information an agent needs.

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?

There is no output schema, yet the description compensates by enumerating the return fields and explaining the ref identifier's downstream role in create_proposal and book_voucher. Combined with annotations and a fully described single parameter, an agent has everything needed to call this 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 coverage is 100% and the sole parameter (orgnr) is fully documented in the schema, including format and how to obtain it via list_companies. The description adds no parameter-level detail, 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?

States a specific verb (listar) and resource (avvikelser), and immediately scopes it as exceptions the reconciliation could not resolve automatically, each with a proposed correction. It explicitly distinguishes itself from the sibling get_open_reconciliations, which handles monthly reconciliations.

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?

Explicit when-to-use and when-not-to-use: applies to the whole latest fiscal year, not a single month, and names the alternative (get_open_reconciliations) for monthly reconciliations. Nothing is left to inference.

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

list_fiscal_yearsLista räkenskapsårA
Read-onlyIdempotent
Inspect

Lista bolagets räkenskapsår (senaste först) med period, status (open/partly_locked/locked), antal verifikat, årets resultat (öre, vinst positiv) och var föregående års resultat står (prior_result.state: none/waiting/ready/transferred). Visar också vilket år som kan läggas till efter (next_year) och före (previous_year). Scope view. Argument: orgnr.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description goes further by disclosing the sort order, the enumerated status values (open/partly_locked/locked), the sign convention for profit (öre, vinst positiv), and the prior_result.state lifecycle (none/waiting/ready/transferred) – meaningful context that no other structured field provides.

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

Conciseness4/5

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

One dense sentence front-loads the resource and its ordering before enumerating return fields; every clause carries information. It is long but not padded, though it could be split for readability.

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

Completeness4/5

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

With no output schema, the description usefully documents the return shape and enum values, which an agent needs to interpret results. It omits any mention of pagination or result-size limits, a minor gap for a list 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?

Schema description coverage is 100% and the single parameter is fully documented in the schema (10 digits, hyphen optional, example, sourced via list_companies). The description only restates 'Argument: orgnr' and adds no syntax or format detail, 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?

States a specific verb and resource ('Lista bolagets räkenskapsår') plus sort order ('senaste först') and the exact fields returned, which cleanly separates it from siblings like add_fiscal_year, lock_fiscal_year, and get_year_end_checklist.

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 mention of 'Scope view' hints at company scoping, but there is no explicit statement of when to call this versus alternatives (e.g. add_fiscal_year to create one, lock_fiscal_year to change status). Usage is implied by the tool name rather than stated.

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

list_fixed_assetsLista anläggningstillgångarA
Read-onlyIdempotent
Inspect

Lista anläggningstillgångar (K2). accumulated_depreciation_ore är BERÄKNAD (planerad linjär) avskrivning; booked_depreciation_ore är FAKTISKT bokförd i huvudboken och unbooked_depreciation_ore skillnaden (ännu ej bokförd). Kräver 'view'. Argument: orgnr.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine value beyond that by disclosing the 'view' permission requirement and disambiguating the three depreciation fields the response carries.

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

Conciseness4/5

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

The sentence is dense but front-loaded with the purpose, and every clause caria its weight – the field disambiguation is essential for the missing output schema. Minor terseness in the trailing 'Argument: orgnr' fragment costs a point.

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

Completeness4/5

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

With no output schema, the description correctly spends its budget explaining the meaning of returned depreciation fields and the required permission. For a single-parameter list tool whose annotations cover safety, this is nearly complete, though it omits pagination or volume expectations.

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% and the single orgnr parameter is fully documented in the schema (format and where to obtain it). The description's 'Argument: orgnr' adds no meaning 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.

Purpose4/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 ('Lista anläggningstillgångar (K2)'), making it clear this is a list operation over fixed assets. It does not explicitly differentiate itself from the singular sibling get_fixed_asset, but the plural name and the K2 framing make the scope inferable.

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 states a prerequisite ('Kräver view'), which is useful context, but gives no when-to-use vs when-not guidance and does not name alternatives such as get_fixed_asset for a single asset. Usage is only implied.

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

list_inboxLista inkorgA
Read-onlyIdempotent
Inspect

Listar bolagets inkorg: inkomna mejl med kvitton och fakturor, nyast först. Använd för att se vad som väntar på att bokföras eller registreras; för att sortera ett mejl, använd attach_inbox_item, och för underlag som kan kopplas till ett verifikat, list_available_underlag. Returnerar per meddelande id, avsändare, ämne, text, status (pending eller filed), när det kom in, vem som hanterat det och bilagor med dokument-id, samt antal som väntar. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description's 'Läser bara, ändrar inget' is confirmatory. It adds genuine behavioral context beyond the annotations via ordering ('nyast först') and a detailed return-field disclosure, which matters since there is no output schema.

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

Conciseness4/5

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

Front-loaded with the core purpose, then usage, then return shape. Dense and informative, though the return-field enumeration is lengthy; each sentence still carries weight.

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

Completeness5/5

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

With no output schema, the description fully compensates by enumerating returned fields (id, sender, subject, text, status, timestamp, handler, attachments, pending count). Nothing an agent needs to call it correctly 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?

Only one parameter (orgnr) with 100% schema description coverage, including the format hint and a pointer to list_companies. The description adds no additional parameter semantics, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Listar) and resource (bolagets inkorg) with scope (inkomna mejl med kvitton och fakturor, nyast först). An agent can immediately distinguish it from list_available_underlag and other list_* siblings.

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 it ('för att se vad som väntar på att bokföras eller registreras') and routes to named alternatives for adjacent tasks: attach_inbox_item for sorting and list_available_underlag for voucher-linkable documents. Nothing is left to inference.

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

list_integration_dataLista data från kopplingarA
Read-onlyIdempotent
Inspect

Listar data som kommit in från bolagets kopplingar, till exempel Shopify-ordrar, Stripe-betalningar och utbetalningar, sorterad i fack per källa och sort. Kvickd bokför inte den här datan själv: den ligger kvar som ohanterad tills den bokförts eller sorterats bort. Använd när list_companies eller get_overview visar ohanterad kopplingsdata, eller när användaren vill bokföra försäljning och utbetalningar från en koppling; för all detalj om en post, använd get_integration_record, och när posten är bokförd, resolve_integration_records. Returnerar kopplingarna med antal per fack och status, samt poster (äldst först) med id, källa, sort, datum, rubrik, belopp i öre, status och en kort sammanfattning. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoValfritt: till (inte med) datum, ÅÅÅÅ-MM-DD, t.ex. 2026-10-01.
kindNoValfritt: sort inom källan, t.ex. order eller payout för Shopify, charge eller payout för Stripe.
limitNoAntal poster per sida, 1 till 200.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
startNoValfritt: från och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-09-01.
offsetNoHoppa över så många poster (sidbläddring).
statusNounhandled (standard: nya och ändrade efter hantering), all, new, handled, ignored eller changed.unhandled
providerNoValfritt: källa, t.ex. shopify eller stripe. Utelämna för alla kopplingar.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds lifecycle context beyond that: the data stays unhandled until booked or sorted away, and records are returned oldest-first. The closing 'Läser bara, ändrar inget' largely restates the annotation, so it stops short of 5.

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

Conciseness4/5

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

Front-loaded with purpose, then lifecycle, usage routing, return format, and safety in a tight sequence. It is dense and runs long, but nearly every clause carries routing or return-value information, so waste is minimal.

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

Completeness5/5

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

With no output schema, the description carries the return contract fully: integrations with count per compartment and status, plus records (oldest first) with id, source, kind, date, heading, amount in öre, status, and summary. Combined with annotations and full schema coverage, nothing an agent needs 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?

Schema coverage is 100%, so every parameter (provider, kind, status, dates, limit, offset) is already documented in the schema. The description hints at the compartment/kind grouping and oldest-first ordering but adds no syntax or format detail beyond what the schema provides; 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?

States a specific verb (listar) and resource (data från kopplingar) with concrete examples (Shopify-ordrar, Stripe-betalningar), and explicitly frames the data as unhandled integration data. An agent can distinguish it from siblings like get_integration_record or resolve_integration_records without opening any schema.

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?

Gives explicit triggers (when list_companies or get_overview shows unhandled integration data, or when the user wants to bookkeep sales/payouts) and names the alternatives with their conditions: get_integration_record for record detail, resolve_integration_records when the record is booked.

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

list_payroll_runsLista lönekörningarA
Read-onlyIdempotent
Inspect

Listar lönekörningarna för ett år i ordning efter utbetalningsdag, och med en månad angiven även arbetsgivardeklarationens (AGI) sammanställning för månaden. Använd för att se vad som har betalats ut; för en anställds lönebesked, använd get_payslip, och för att räkna fram en ny lön, använd calc_payroll. Returnerar per körning id, period, utbetalningsdag, status (draft, booked eller reversed), verifikat och rader per anställd med bruttolön, förmåner, skatteavdrag, arbetsgivaravgift och nettolön i öre. Läser bara, ändrar inget. Svaret innehåller personuppgifter (personnummer, bankkonto); visa bara det användaren behöver.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesKalenderår för lönekörningarna, t.ex. 2026.
monthNoValfritt: månad 1 till 12. Anges den följer AGI-sammanställningen för månaden med.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent safety, but the description adds context annotations cannot: the status value set (draft, booked, reversed), the fact that a month parameter pulls in the AGI compilation, and a genuine operational warning that the response contains personal data (personnummer, bankkonto) which should be minimized in output. It also restates read-only behavior consistently rather than contradicting the hints.

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

Conciseness4/5

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

One dense paragraph with the core purpose and ordering front-loaded, followed by routing, return shape, and the PII caution. Slightly long and the read-only clause is redundant with annotations, but no sentence is filler.

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?

There is no output schema, so the description carries the return-shape burden and does so with specific per-run fields (id, period, utbetalningsdag, status, verifikat, per-employee rows with bruttolön, förmåner, skatteavdrag, arbetsgivaravgift, nettolön in öre). Combined with the sibling routing and PII handling guidance, an agent has everything needed to call and interpret it.

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% and each parameter is documented in the schema, including orgnr format and the month→AGI behavior. The description largely repeats the schema's month semantics rather than adding syntax, format, or edge-case detail, 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?

States a specific verb and resource ('Listar lönekörningarna för ett år') plus ordering semantics ('i ordning efter utbetalningsdag') and the conditional AGI sammanställning when a month is supplied. It explicitly distinguishes itself from the two closest siblings, get_payslip and calc_payroll, so an agent can select it without opening either schema.

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?

Gives an explicit when-to-use ('Använd för att se vad som har betalats ut') and names two alternatives with the conditions that select them: get_payslip for one employee's payslip, calc_payroll for computing a new salary. Nothing about tool selection is left to inference.

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

list_policiesLista policyerA
Read-onlyIdempotent
Inspect

Lista policydokument och uppladdade underlag (manualer, avtal, policyer, kontoutdrag, kvitton). Läs textinnehåll med read_policy. Poster med status 'image' (t.ex. kvitton som skärmdump/foto) läses i stället som bild med read_underlag_image. Valfritt orgnr filtrerar till ett bolag. Scope view.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrNoValfritt: bolagets organisationsnummer, t.ex. 559900-1004, för att bara visa det bolagets policyer. Utelämna för alla bolag du har åtkomst till.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered. The description adds genuinely new context: the 'image' status routing behaviour and the 'Scope view' permission requirement, plus what orgnr omission means. It does not cover return shape or pagination, but adds real value beyond the annotations.

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

Conciseness4/5

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

Front-loaded with what is listed, then routing guidance, then the filter — a logical order with no filler. Slightly dense with parenthetical examples, but every clause carries information.

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

Completeness4/5

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

For a zero-required-parameter read/list tool with no output schema, the description covers what is returned (policies and underlag), how to follow up on each item type, and the filtering option. Only the response structure/pagination is unstated, which is minor here.

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% for the single orgnr parameter and the schema itself documents the format example (559900-1004) and the omit-for-all-companies behaviour. The description's mention of orgnr filtering largely restates the schema, so the 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?

States a specific verb and resource ('Lista policydokument och uppladdade underlag') and enumerates the content types covered (manualer, avtal, policyer, kontoutdrag, kvitton). It also names the sibling tools that read the listed items, so an agent can distinguish it from read_policy and read_underlag_image immediately.

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?

Explicit routing rules: use read_policy for text content, and read_underlag_image instead for entries whose status is 'image' (e.g. photographed receipts). It also states the optional orgnr filter condition and notes the required scope ('Scope view').

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

list_proposalsLista förslagA
Read-onlyIdempotent
Inspect

Listar förslag på justerande poster och bankmatchningar, nyast först, med status och motivering. Använd för att se vad som väntar på granskning eller redan har hanterats; verifikatförslag i kön Väntande verifikat listas med list_voucher_drafts. Returnerar per förslag id, typ, status, bilaga och konto, säkerhet (0 till 1), motivering, källhänvisning, föreslaget verifikat i öre, finding_ref, period och när det skapades. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoValfritt: kalenderår för perioden förslaget gäller, t.ex. 2026.
monthNoValfritt: månad 1 till 12 för perioden förslaget gäller.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the closing 'Läser bara, ändrar inget' is reinforcement rather than new information. The description does add real behavioral context beyond annotations: the newest-first ordering and a full enumeration of returned fields, which matters because no output schema exists. It stops short of disclosing result caps or pagination behavior.

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

Conciseness4/5

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

Purpose, usage, alternative and return contents are front-loaded in that order, and every sentence does work. The return-field enumeration is long but justified since there is no output schema; only the trailing read-only restatement is arguably wasted.

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

Completeness4/5

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

With no output schema and only three parameters, the description compensates well by listing what each proposal contains and stating ordering and read-only behavior. What is missing is boundary behavior: pagination/limits and how the optional period filters combine, which an agent listing many proposals would want to know.

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 year, month and orgnr are already documented in the schema with format examples and the list_companies pointer. The description only hints at the year/month filter indirectly by naming 'period' as a returned field; it adds no filtering semantics (e.g. whether year and month must be supplied together). Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Listar förslag på justerande poster och bankmatchningar') with an explicit ordering rule ('nyast först') and the fields carried in each result. It also carves itself away from the adjacent sibling list_voucher_drafts, so an agent can distinguish the two without opening either schema.

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?

Gives concrete conditions for use ('se vad som väntar på granskning eller redan har hanterats') and names the alternative tool plus the exact case that selects it ('verifikatförslag i kön Väntande verifikat listas med list_voucher_drafts'). Routing between sibling tools is left to no inference.

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

list_rot_rutROT/RUT-lägetA
Read-onlyIdempotent
Inspect

Visar läget för ROT- och RUT-avdrag: fakturor där utbetalning kan begäras nu, fakturor som väntar på kundens betalning, gjorda begäranden till Skatteverket och gällande regler. Använd innan du skapar en begäran med create_rot_rut_request; för filen till Skatteverket, använd get_rot_rut_request_file. Returnerar fakturorna med avdragsbelopp och deadline, begärandena med status (skapad, inskickad eller klar) och belopp, summor i öre, arbetstyper samt procentsatser och tak. Läser bara, ändrar inget. Svaret innehåller personnummer.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), and 'Läser bara, ändrar inget' largely restates them. The description does add genuine behavioural context beyond annotations: the response includes personnummer, deduction amounts with deadlines, request statuses, sums in öre, work types, percentages and caps. No output schema exists, so this return-shape disclosure is doing real work.

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?

Front-loads the purpose, then adds the sibling routing, then the return contents. Dense but every clause carries actionable information (routing, statuses, units, privacy note) with no filler.

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

Completeness5/5

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

With no output schema and no annotations covering return content, the description supplies the missing pieces: the enumeration of returned entities, the request status vocabulary (skapad, inskickad, klar), monetary units in öre, and the personnummer disclosure. An agent has everything needed to call it and interpret the result.

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?

Only one parameter, and the schema already documents it fully (10-digit orgnr, hyphen optional, example 559900-1004, pointer to list_companies). Schema coverage is 100%, so the baseline of 3 applies; the description adds no parameter-level meaning.

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?

Starts with a specific verb + resource ('Visar läget för ROT- och RUT-avdrag') and then enumerates exactly what categories are surfaced: invoices payable now, invoices awaiting customer payment, submitted requests, and current rules. It also names the two related siblings (create_rot_rut_request, get_rot_rut_request_file) so an agent can place it in the workflow without opening another schema.

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?

Gives explicit routing: use this before creating a request via create_rot_rut_request, and use get_rot_rut_request_file for the Skatteverket file. That is a clear when-to-use plus named alternatives, leaving little to inference.

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

list_supplier_invoicesLista leverantörsfakturorA
Read-onlyIdempotent
Inspect

Listar bolagets leverantörsfakturor, nyast först, valfritt filtrerat på status. Använd för att se vad som ska betalas eller hitta en faktura; för en enskild faktura med alla detaljer, använd get_supplier_invoice. Returnerar fakturorna med samma fält som get_supplier_invoice samt summa totalt och summa kvarvarande saldo i öre. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
statusNoValfritt filter: ej_bokford, obetald (allt med saldo kvar, även förfallna och delbetalda), forfallen, under_betalning, slutbetald eller makulerad. Utelämna för alla.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds beyond that: result ordering (newest first) and return contents (same fields as get_supplier_invoice plus totalsumma and kvarvarande saldo i öre). The 'läser bara, ändrar inget' line only restates the annotations, but the return-format detail is genuine added value.

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

Conciseness4/5

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

Three front-loaded sentences, each doing work: purpose/ordering, routing to the alternative, and return contents. Could drop the redundant read-only clause to be tighter, but overall efficient.

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?

Though there is no output schema, the description compensates by describing what is returned (same fields as get_supplier_invoice plus total and remaining-balance sums in öre). For a 2-parameter, annotation-covered list tool, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the orgnr and status parameters are fully documented in the schema itself. The description only mentions that status filtering is optional and that omitting it returns all, which the schema already states; baseline 3 applies when the schema carries the 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?

States a specific verb+resource ('Listar bolagets leverantörsfakturor') with ordering scope (newest first) and an optional status filter. It also names the sibling get_supplier_invoice for the single-invoice case, so an agent can distinguish it from the many list/get siblings.

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?

Gives explicit use cases ('se vad som ska betalas eller hitta en faktura') and names the alternative (get_supplier_invoice) with the condition that selects it (single invoice with all details). Nothing is left to inference.

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

list_supplier_underlagUnderlag att registreraA
Read-onlyIdempotent
Inspect

Lista dokument klassade som Leverantörsfaktura (uppladdade eller triage:ade från inkorgen) som ännu inte registrerats som en faktura — att registrera i reskontran. Skapa fakturan med create_supplier_invoice och koppla underlaget via document_id. Scope view. Argument: orgnr.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context on top of that: which documents qualify (uploaded or triaged from the inbox), their lifecycle state (not yet registered as an invoice), and the 'Scope view' note. It does not go into result shape, but no output schema exists and the criteria for inclusion effectively describe the payload.

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

Conciseness4/5

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

Front-loaded with the resource and its qualifying state, then the follow-up workflow, then scope. Every clause carries information, though 'Argument: orgnr' is redundant with a 100%-documented schema field and could be dropped.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so reasonably: it defines the returned set by classification and lifecycle state. For a single-parameter read tool with full annotation coverage, an agent has enough to call it correctly; only the concrete return fields remain unspecified.

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% and the schema already gives the format, an example, and points to list_companies. The description's 'Argument: orgnr' adds nothing beyond the schema, and the actual parameter meaning already comes from structured data, so this sits at the high-coverage baseline of 3.

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 gives a specific verb+resource with scope: documents classified as supplier invoices that have NOT yet been registered. This distinguishes it from list_supplier_invoices (already registered) and from the underlying document store. It never names the closest siblings explicitly, so there is no direct differentiation for an agent scanning names alone.

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

Usage Guidelines4/5

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

Usage is clearly implied – find unregistered underlag so they can be registered in the ledger – and it spells out the follow-up action: create the invoice with create_supplier_invoice and link via document_id. It stops short of saying when NOT to use it (e.g. vs list_available_underlag, list_inbox, or list_documents), which is the remaining gap.

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

list_time_entriesLista tidposterA
Read-onlyIdempotent
Inspect

Listar rapporterade tidposter, nyast först, valfritt filtrerade på datum, anställd och status. Använd för att granska eller attestera tid; för en sammanställning inför lönen, använd get_payroll_time_basis, och för länk och koder, get_time_reporting. Returnerar per post id, datum, typ, minuter och timmar, projekt, notering, status, anställd, vem som attesterat och ev. lönekörning, samt minuter per status och totalt. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
statusNoValfritt: rapporterad, attesterad, avvisad eller utbetald.
date_toNoValfritt: till och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-10-31.
date_fromNoValfritt: från och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-10-01.
employee_idNoValfritt: den anställdes id (heltal), från list_employees.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description reinforces it ("Läser bara, ändrar inget") and adds the sort order (newest first) and the shape of the returned payload. It does not mention pagination or result limits, which would be the remaining behavioral gap.

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

Conciseness4/5

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

Three front-loaded sentences ordered purpose → usage/alternatives → return payload, with no filler. The return-value enumeration is dense but each item is a distinct field, and it earns its space because no output schema exists; slightly long only in that clause.

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

Completeness5/5

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

With no output schema, the description carries the return contract and does so thoroughly (per-entry fields plus per-status and total minutes). Combined with the annotations covering safety and the fully documented schema, an agent has everything needed to call it correctly.

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

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 every parameter including formats and enum-like values. The description only restates the same filterable fields (datum, anställd, status) without adding format or combination semantics, so the baseline 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?

States a specific verb and resource ("Listar rapporterade tidposter") plus scope details (newest first, optional filters). It explicitly distinguishes itself from two siblings by name, get_payroll_time_basis and get_time_reporting, so an agent can route without opening another schema.

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?

Gives explicit when-to-use ("Använd för att granska eller attestera tid") and names the two alternatives with the conditions that select them (payroll compilation, links/codes). No inference required.

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

list_vat_periodsLista momsperioderA
Read-onlyIdempotent
Inspect

Momsperioderna enligt bolagets momsperiod (månad/kvartal/år) med nyckel, datumintervall, netto och status. before_kvickd=true betyder att perioden hanterades innan bolaget lades in i Kvickd: påminn inte om den som försenad. Scope view. Argument: orgnr; valfritt year (default innevarande år).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already establish the read-only, idempotent, non-destructive profile, so the bar is lower. The description goes beyond them by explaining the before_kvickd semantics (periods handled before the company was onboarded should not be flagged as late), a non-obvious behavioral rule an agent would otherwise misuse.

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

Conciseness4/5

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

Front-loaded with the returned content and reasonably tight. The before_kvickd note is a slight digression but it carries real behavioral value, so the length is largely earned.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields and covers both arguments. For a simple read-only list tool the coverage is adequate; only the missing when-to-use routing against sibling VAT tools keeps it from 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 only 50%: orgnr is documented in the schema (with a pointer to list_companies) while year has no schema description. The description restates orgnr and clarifies that year is optional and defaults to the current year, which adds some meaning over the null default in the schema, but it does not fully compensate for the gap.

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?

States a specific resource (VAT periods) scoped to the company's VAT period type (month/quarter/year), and even enumerates the returned fields (key, date range, net, status). It is clear what the tool does, though it never names a sibling like get_vat_return to sharpen the boundary.

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

Usage Guidelines2/5

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

The only usage cue is the bare phrase 'Scope view', which is opaque. Nothing says when to call this versus get_vat_return or the other VAT tools, and no preconditions (e.g. fiscal year must exist) are given.

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

list_voucher_draftsLista verifikatförslagA
Read-onlyIdempotent
Inspect

Lista väntande verifikatförslag (drafts) som ännu inte godkänts eller avvisats. Kräver behörigheten 'view'. Argument: orgnr.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds an authorization requirement ('Kräver behörigheten view'), which is genuine behavioral context not present in the annotations.

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

Conciseness4/5

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

Three compact, front-loaded sentences with the core purpose stated first. The trailing 'Argument: orgnr' is mildly redundant given the schema but costs little.

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 single-parameter read tool with safety annotations already covering behavior and no output schema to document, the description is largely sufficient. Return shape (what a draft looks like) is the only notable omission, and that is minor for a list endpoint.

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% and the orgnr property already documents format and how to obtain it via list_companies. The description's 'Argument: orgnr' merely restates the parameter name and adds no syntax or format detail, so the baseline 3 applies.

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?

States a specific verb and resource: listing pending voucher drafts that have not yet been approved or rejected. The 'pending/unapproved' qualifier distinguishes it in scope from list_vouchers, but it does not explicitly name any sibling (e.g. list_vouchers, approve_voucher_draft) to route the agent.

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

Usage Guidelines3/5

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

It gives the scope condition (only drafts not yet approved or rejected) and the required 'view' permission, which is useful context. However, it offers no explicit alternatives or when-not guidance, so the agent must infer why it should pick this over list_vouchers or the approve/reject sibling tools.

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

list_vouchersLista verifikatA
Read-onlyIdempotent
Inspect

Listar bokförda verifikat för ett räkenskapsår, sorterade på serie och nummer, en sida i taget. Använd för att bläddra bland verifikat eller hitta ett id; för ett enskilt verifikat med momskoder, använd get_voucher, och för ett kontos rörelser, get_general_ledger. Returnerar totalt antal, limit och offset, och per verifikat id, serie, nummer, datum, text, källa, vem som skapade det, underlag och rader med konto och belopp i öre (debet positivt, kredit negativt). Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2026.
limitNoAntal verifikat per sida, standard 200.
monthNoValfritt: kalendermånad 1 till 12 för verifikatets datum.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
offsetNoAntal verifikat att hoppa över, för nästa sida. Standard 0.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the final sentence ('Läser bara, ändrar inget') merely restates that. However, the description adds behavior annotations cannot express: sort order, one-page-at-a-time pagination, and the full return shape (totals, limit/offset, and per-voucher fields including sign convention for öre). That is real added context, though no auth or rate-limit notes.

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

Conciseness4/5

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

Single dense paragraph, front-loaded with purpose, then alternatives, then return values. Every clause is useful except 'Läser bara, ändrar inget', which duplicates the readOnly annotation and could be dropped; the long return-field enumeration is justified because no output schema exists.

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

Completeness5/5

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

With no output schema, the description carries the return-shape burden and does so completely: totals, pagination fields, and per-voucher payload including amount sign convention. Combined with sibling routing and sort/pagination behavior, an agent has everything needed to call and interpret this list 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?

Schema description coverage is 100%, so every parameter (year, month, limit, offset, orgnr) is already documented in the schema. The description restates limit/offset only implicitly via 'en sida i taget' and 'totalt antal, limit och offset', adding no syntax or format detail beyond the schema. 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?

States a specific verb and resource ('Listar bokförda verifikat') plus fiscal-year scope, sort order ('sorterade på serie och nummer') and pagination ('en sida i taget'). It also explicitly distinguishes itself from get_voucher and get_general_ledger, so an agent can tell it apart from siblings without opening a schema.

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?

Gives explicit usage ('Använd för att bläddra bland verifikat eller hitta ett id') and names two alternatives with the conditions that select each ('för ett enskilt verifikat med momskoder, använd get_voucher'; 'för ett kontos rörelser, get_general_ledger'). No routing decision is left to inference.

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

lock_fiscal_yearLås räkenskapsårA
Idempotent
Inspect

Lås (stäng) hela räkenskapsåret när årsbokslutets fyra poster är klara (booked/skipped). Låset låser alla årets månader och gör att INK2- och årsredovisningsutkastet blir synligt i appen (samma som knappen 'Lås perioden' i Årsbokslut). Höjer fel med vad som återstår om något steg inte är klart. Scope book. Argument: orgnr, year.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing three concrete behaviors: it locks every month of the year, it makes the INK2 and annual report drafts visible in the app, and it raises an error listing what remains when a step is incomplete. It also declares the required OAuth scope ('Scope book'), which annotations do not cover.

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

Conciseness4/5

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

Front-loaded with the action and its precondition, and every sentence carries information (precondition, effect, error behavior, scope, args). Slightly dense with parenthetical asides, but no significant 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 2-parameter mutation tool with no output schema, the description supplies preconditions, side effects, error behavior and the required scope, which is largely sufficient. The main gap is the unspecified year parameter semantics.

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 only 50%: orgnr is well documented in the schema but year has no description, and the description merely names the arguments ('Argument: orgnr, year') without adding format, range, or which fiscal year is valid. It fails to compensate for the undocumented year parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (Lås/lock the entire fiscal year) plus the precondition (the four year-end items are booked/skipped) and the resulting side effects. An agent can separate this lock operation from siblings like book_year_end_step or unlock_fiscal_year without opening the schema.

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

Usage Guidelines4/5

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

Clearly states when to use it: only once the four year-end items are complete (booked/skipped), and notes it corresponds to the 'Lås perioden' button in Årsbokslut. It does not explicitly name the inverse alternative (unlock_fiscal_year) or warn about when not to use it, so it stops short of full routing guidance.

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

mark_rot_rut_request_submittedMarkera ROT/RUT-begäran inskickadA
Idempotent
Inspect

Markerar att en ROT/RUT-begäran har lämnats in till Skatteverket, eller tar bort markeringen. Använd efter att användaren själv har skickat in filen från get_rot_rut_request_file; när Skatteverket har betalat ut, använd register_rot_rut_payout. Returnerar begäran med ny status och belopp. Bieffekt: bara en statusmarkering i Kvickd, inget skickas till Skatteverket. Kräver behörigheten reconcile.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
submittedNotrue för inskickad (standard), false för att ta bort markeringen.
request_idYesBegärans id (heltal), t.ex. 3. Hämta med list_rot_rut.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: it clarifies that nothing is actually sent to Skatteverket (only a local status marking in Kvickd), names the required permission (reconcile), and describes the returned request with its new status and amount. Combined with destructiveHint=false/idempotentHint=true, the agent has a full picture of side effects.

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 tightly packed sentences: purpose first, then usage/alternatives, then return value, then side effect and permission. Every sentence earns its place with no filler.

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

Completeness5/5

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

With no output schema, the description supplies the return shape ('begäran med ny status och belopp'), the permission requirement, and the local-only side effect. Nothing an agent needs to invoke this correctly 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?

Schema description coverage is 100%, so orgnr, submitted, and request_id are already fully documented in the schema. The description reinforces the toggle semantics ('eller tar bort markeringen') but adds no format or syntax detail beyond what the schema provides, 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?

States a specific verb (mark/remove marking) plus the exact resource (a ROT/RUT request's submitted status), and it explicitly distinguishes itself from sibling get_rot_rut_request_file and register_rot_rut_payout. An agent can tell what this does without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit 'use after' trigger (the user has submitted the file themselves from get_rot_rut_request_file) and an explicit alternative for the next stage (register_rot_rut_payout once Skatteverket has paid out). The submitted=false case is also named.

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

mark_submittedMarkera inlämnadA
Idempotent
Inspect

Markera en bokslutsleverabel som inlämnad/godkänd. INTERNT (ingen extern transmission till Skatteverket/Bolagsverket sker). Bekräfta med användaren först. Scope statutory. Argument: orgnr, year, kind (ARSREDOVISNING|INK2), status (NOT_SUBMITTED|SUBMITTED|APPROVED); valfritt note.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
noteNo
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
statusYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare mutation (readOnlyHint=false), idempotency and non-destructiveness, and the description usefully adds context beyond them: that nothing is transmitted to Skatteverket/Bolagsverket and that user confirmation is required first. It does not describe downstream effects of the status change, but the safety-critical context is well covered.

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

Conciseness4/5

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

Front-loads the action, then the safety caveat, then the argument list in a single dense paragraph with little waste. The enumeration of arguments is slightly redundant with the schema, but the inline enum values justify it.

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 5-parameter mutation tool with no output schema, the description covers purpose, the internal-only guarantee, the confirmation requirement, and the enumerations. It leaves the post-marking consequences and status semantics unexplained, which keeps it from being fully complete.

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

Parameters4/5

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

Schema description coverage is only 20% (just orgnr documented), so the description carries real weight — it supplies the allowed values for 'kind' (ARSREDOVISNING|INK2) and 'status' (NOT_SUBMITTED|SUBMITTED|APPROVED) that the schema lacks entirely (0 enums). It does not explain the semantics of individual statuses or how 'year' should be sourced, but it substantially compensates for the coverage gap.

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?

States a concrete verb and resource — marking a 'bokslutsleverabel' as submitted/approved — and pairs it with an explicit scope ('Scope statutory'), which helps separate it from the broadly similar sibling mark_rot_rut_request_submitted. It does not name a sibling directly, so it falls just short of full differentiation.

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?

Gives one actionable rule ('Bekräfta med användaren först') and clarifies the operation is internal with no external transmission, which implicitly tells the agent when this tool applies. However, it never says when NOT to use it, nor does it route the agent to related alternatives like read_statutory_status or the year-end step tools.

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

post_depreciationBokför avskrivningA
Idempotent
Inspect

Bokför månadens linjära avskrivning (D avskrivningskostnad / K ackumulerad avskrivning), i bokslutsserien. Utan asset_id bokförs alla tillgångar; med asset_id bara den. Idempotent per period. Förhandsgranska först med preview_depreciation. Kräver behörigheten 'book'. Argument: orgnr, year, month; valfritt asset_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
asset_idNo

TDQS

A4.4/5.0
Behavior4/5

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

Adds genuine context beyond the annotations: the 'book' permission requirement and the all-assets-vs-single-asset scope behavior. Idempotency ('Idempotent per period') largely restates idempotentHint=true, so it is not new information, and no return/error behavior is described. Solid but partly redundant with the annotation.

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?

One tight paragraph that front-loads the purpose and entries, then scope, idempotency, the preview alternative, permission, and arguments in that order. No filler sentences.

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 mutation tool with no output schema, it covers the decisions an agent must make: scope, permission, idempotency, and the preview prerequisite. It does not describe the response or failure modes, but the essentials for correct invocation are present.

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 only 25% (only orgnr is documented), so the description must compensate. It lists orgnr/year/month and explains the crucial asset_id semantics (omitted = all assets, present = only that asset), but gives no format or range guidance for year/month. Partial compensation, so a 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?

States a specific verb (bokför/post), the exact resource (månadens linjära avskrivning), the accounting entries produced (D avskrivningskostnad / K ackumulerad avskrivning), and the scope (bokslutsserien). An agent can distinguish this from preview_depreciation and other booking siblings without opening any schema.

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?

Gives explicit routing: 'Förhandsgranska först med preview_depreciation', plus the branching rule 'utan asset_id bokförs alla tillgångar; med asset_id bara den'. It also states the required 'book' permission, so the when-to-use and prerequisites are fully covered.

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

prepare_bilagaFörbered bilagaA
Idempotent
Inspect

Markera en bilaga som FÖRBEREDD (motsvarar knappen Förbered i appen). Kan ALDRIG attestera. Attest (fyra-ögon) görs av människa i appen. Kräver att nyckeln har behörigheten 'reconcile'. Argument: orgnr, bilaga_type (BANK/AR_CONTROL/AP_CONTROL/VAT/AGI/TAX_ACCOUNT/ASSET/GL_ACCOUNT), account (0 för aggregat som moms), year, month.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
accountYes
bilaga_typeYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds genuinely new behavioral context: the 'reconcile' permission requirement and the hard constraint that it can never attest. It does not describe state transitions beyond 'marked as prepared', so it is strong but not exhaustive.

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

Conciseness4/5

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

Front-loaded with the core action and kept to a compact run of sentences, with no filler. It is dense, packing permission, scope, and argument semantics into one block, which slightly reduces readability but wastes nothing.

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 five-parameter mutation with no output schema, the description supplies the missing enum values, the account special case, the auth requirement, and the approval boundary. Only minor gaps remain (year/month format, returned state), which are low-stakes given annotations carry the safety and idempotency profile.

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 only 20% and contains no enums, yet the description enumerates the full bilaga_type vocabulary (BANK/AR_CONTROL/AP_CONTROL/VAT/AGI/TAX_ACCOUNT/ASSET/GL_ACCOUNT) and explains the non-obvious account='0 för aggregat som moms'. Year/month format remains unspecified, but the description substantially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Markera en bilaga som FÖRBEREDD') and explicitly anchors it to the app's 'Förbered' button, so the operation is unambiguous. It also carves out scope by declaring 'Kan ALDRIG attestera', separating it from the sibling approve/attest tools.

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

Usage Guidelines4/5

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

Gives a clear usage context (equivalent to the Prepare button) and a prerequisite (key must hold the 'reconcile' permission), plus a boundary that attestation is a human four-eyes step. It stops short of naming an alternative such as revert_prepare_bilaga for undoing the action, so routing is implicit rather than explicit.

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

preview_depreciationFörhandsgranska avskrivningA
Read-onlyIdempotent
Inspect

Förhandsgranska månadens avskrivning UTAN att bokföra: rader per tillgång (debit-/kreditkonto + belopp), summa, och om perioden redan är bokförd (already_posted). Med asset_id förhandsgranskas bara den tillgången. Kräver 'view'. Argument: orgnr, year, month; valfritt asset_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
asset_idNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds genuine value beyond that: it discloses the return content (per-asset debit/credit rows + amount, a total, and an already_posted flag) and the required 'view' permission, which the annotations do not convey.

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

Conciseness5/5

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

A single dense, front-loaded block: the core action and its non-posting nature come first, followed by return contents, scoping, permission, and arguments. No filler sentences.

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 4-param, no-output-schema tool, the description compensates well by describing the return shape (rows, total, already_posted), the auth requirement, and the scoping behavior. Minor gaps remain around period/validation semantics, but the essential calling information is present.

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 only 25% (only orgnr documented), so the description must compensate. It lists the arguments explicitly and clarifies that asset_id is optional and scopes the preview to one asset, adding semantics the bare integer schema omits. year/month remain self-evident but unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Förhandsgranska' = preview) and resource ('avskrivning' = depreciation), and immediately scopes it against the write counterpart with 'UTAN att bokföra' (without posting). An agent can distinguish this from the sibling post_depreciation without opening either schema.

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

Usage Guidelines4/5

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

Explains the key usage condition (preview only, no posting) and clarifies that supplying asset_id narrows the preview to a single asset. It also states the required permission ('view'). It does not explicitly name post_depreciation as the alternative when you actually want to commit, so it stops just short of full routing guidance.

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

propose_bank_matchFöreslå bankmatchningAInspect

Föreslå en bankmatchning: koppla en omatchad bankrad till en eller flera BEFINTLIGA kandidater (huvudboks-/reskontraposter). Får bara peka på befintliga id:n, hittar aldrig på belopp. LLM föreslår, människa godkänner. Kräver 'reconcile'. Argument: orgnr, year, month, bank_txn_id, target_ids (lista käll-id); valfritt reasoning, confidence, model, finding_ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
modelNo
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
reasoningNo
confidenceNo
target_idsYes
bank_txn_idYes
finding_refNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare non-readonly/non-destructive behavior; the description adds real value beyond them: it may only reference existing ids, never fabricates amounts, requires 'reconcile' authorization, and is a proposal subject to human approval. It doesn't cover what happens on rejection or prerequisite state.

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?

Dense but front-loaded: the core action and its key constraint ('only existing ids, never fabricates amounts') come first, followed by the approval/auth model and parameter listing. No filler sentences.

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 proposal-style tool with no output schema and sparse schema descriptions, it covers the essential behavior, authorization requirement, and all parameter names. Missing only edge details such as what a successful proposal returns or how failures are surfaced.

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

Parameters4/5

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

With schema coverage at only 11%, the description carries the load by naming all nine arguments and clarifying that target_ids is a list of source ids and that reasoning/confidence/model/finding_ref are optional. It leaves year/month and bank_txn_id formats unspecified, but adds meaning well beyond the bare 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?

States a precise verb (propose) and resource (bank match), plus the concrete operation: linking an unmatched bank row to one or more existing GL/subledger candidates. This distinguishes it cleanly from siblings like create_proposal or propose_voucher.

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

Usage Guidelines4/5

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

Gives clear context: it applies to unmatched bank rows, the LLM proposes and a human approves, and it requires the 'reconcile' permission. It does not explicitly name an alternative sibling or state when-not-to-use, 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.

propose_voucherFöreslå verifikat för attestAInspect

Lägger ett verifikatförslag i kön Väntande verifikat, där en människa godkänner eller avvisar det innan något bokförs. Använd när användaren vill granska först eller när konteringen är osäker. För att bokföra direkt, använd book_voucher eller create_voucher; för en justering som hör till en avstämning (bilaga), använd create_proposal. Returnerar draft_id, serie, datum och status pending. Bieffekt: inget bokförs. Förslaget godkänns med approve_voucher_draft, ändras med edit_voucher_draft och avvisas med reject_voucher_draft. Underlag i annan valuta än SEK: gissa aldrig växelkursen. Fråga användaren efter kursen (SEK per 1 enhet) eller SEK-beloppet (t.ex. det som drogs från kontot), räkna raderna i SEK och ange currency, foreign_amount_minor och fx_rate eller total_sek_ore, så dokumenteras kursen på verifikatet. Kräver behörigheten reconcile.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
noteNo
textYes
linesYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
seriesNoA
fx_rateNo
currencyNo
underlag_idsNo
total_sek_oreNo
foreign_amount_minorNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare it a non-readonly, non-destructive, non-idempotent write. The description adds the crucial non-obvious behavior: it is a queued draft that books nothing ('Bieffekt: inget bokförs'), a human gate sits between proposal and booking, and it requires the 'reconcile' permission. It also documents the return fields (draft_id, serie, datum, status pending), all beyond structured data.

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

Conciseness4/5

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

Front-loaded with purpose, then usage, alternatives, return values, side effect, follow-up tools, and finally the FX edge case — a logical progression. It is dense and long, but nearly every sentence carries distinct information; only the FX paragraph could be trimmed slightly.

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 an 11-parameter mutation with no output schema and near-zero schema documentation, the description covers return values, approval workflow, permissions, side effects, and the FX edge case. The remaining gap is the shape of 'lines', which an agent must infer to actually construct a valid proposal.

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 only 9%, so the description must carry parameter meaning, and it does so for the hardest ones: it explains currency, foreign_amount_minor, fx_rate and total_sek_ore and how to derive SEK lines ('räkna raderna i SEK'). It leaves the required lines/text/date and series/note/underlag_ids structure unexplained, so coverage is substantial but incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb + resource ('Lägger ett verifikatförslag i kön Väntande verifikat') and pins down the scope: a human approves/rejects before anything is booked. It also names the sibling tools it is not (book_voucher, create_voucher, create_proposal), so an agent can distinguish it without opening any schema.

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?

Gives an explicit trigger ('Använd när användaren vill granska först eller när konteringen är osäker') plus conditional alternatives: direct booking goes to book_voucher/create_voucher, and reconciliation adjustments go to create_proposal. It also names the downstream approve/edit/reject tools, leaving nothing to inference.

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

read_annual_reportÅrsredovisningens siffror ur bokföringenA
Read-onlyIdempotent
Inspect

Hämtar årsredovisningens siffror ur bokföringen för ett räkenskapsår: resultat- och balansräkning som K2-rader med jämförelseår, och bolagsuppgifter. Använd som utgångspunkt för årsredovisningen; för användarens sparade utkast i årsredovisningsguiden, använd read_annual_report_draft, för vad som saknas inför inlämning, get_arsredovisning_status, och för den färdiga filen, generate_ixbrl. Returnerar bolagsuppgifter med räkenskapsårets datum, raderna med belopp för året och jämförelseåret i kronor och om jämförelseår finns. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025). Utelämna för det senaste.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the closing 'Läser bara, ändrar inget' is largely a restatement. The description does add genuinely useful non-annotation context: the scope of what is read (bokföringen), the result shape (rows with current and comparison-year amounts in SEK, whether a comparison year exists), and the boundary that it does not touch the user's draft.

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

Conciseness4/5

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

Front-loaded with purpose in the first clause, then sibling routing, then return shape, then the read-only note. The single long sentence is dense but every clause carries distinct information; the only mild redundancy is restating the read-only annotation hint.

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?

There is no output schema, so the description carries the return-value burden itself and does so: company details with fiscal-year dates, K2 rows with current- and comparison-year amounts in kronor, and a flag for whether a comparison year exists. Combined with full parameter documentation and explicit sibling routing, nothing needed to call it correctly 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?

Schema description coverage is 100%: the year parameter's end-of-fiscal-year convention and the default-to-latest behavior, plus the orgnr format and its list_companies provenance, are all documented in the schema. The description only implies fiscal-year scope ('för ett räkenskapsår') and adds no syntax or format detail beyond it, 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?

States a specific verb and resource ('Hämtar årsredovisningens siffror ur bokföringen för ett räkenskapsår') and pins down exactly which artifacts are produced (K2 resultat-/balansräkning med jämförelseår samt bolagsuppgifter). It also names the three sibling tools it is not, so an agent can distinguish it from read_annual_report_draft, get_arsredovisning_status and generate_ixbrl without opening any schema.

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 frames itself as the starting point ('Använd som utgångspunkt för årsredovisningen') and then routes to three named alternatives with the condition that selects each: saved draft → read_annual_report_draft, missing items before filing → get_arsredovisning_status, finished file → generate_ixbrl. Nothing is left to inference.

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

read_annual_report_draftLäs årsredovisningsutkastA
Read-onlyIdempotent
Inspect

Läser det sparade utkastet till årsredovisningen för ett räkenskapsår, som det sparats i årsredovisningsguiden: belopp, noter, förvaltningsberättelse och undertecknare. Använd för att fortsätta på ett påbörjat utkast; för årsredovisningen härledd ur bokföringen, använd read_annual_report, och för vad som saknas inför inlämning, använd get_arsredovisning_status. Returnerar exists, utkastets innehåll (payload) och när det senast sparades. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025).
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds useful behavior beyond them: the return shape (exists, payload, last-saved timestamp) and the fact that it reads a persisted guide draft. The closing 'Läser bara, ändrar inget' largely restates readOnlyHint, which is why this is a 4 rather than a 5.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose, then routing, then return values — no filler and a logical order. It loses a point only for the trailing 'Läser bara, ändrar inget', which duplicates the readOnlyHint annotation rather than adding new information.

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 two-parameter read-only tool with no output schema, the description covers everything needed: what is read, when to choose it over its two closest siblings, and what the response contains. Nothing an agent needs in order to call it correctly 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?

Schema description coverage is 100% and both parameters are richly documented in the schema (the year convention for fiscal years ending, the orgnr format and how to obtain it via list_companies). The description adds no parameter-level meaning of its own, 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?

Starts with a specific verb+resource ('Läser det sparade utkastet till årsredovisningen') scoped to a fiscal year, and enumerates the content categories (belopp, noter, förvaltningsberättelse, undertecknare). It explicitly separates itself from the similarly named read_annual_report, so an agent can distinguish the two without opening either schema.

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?

Gives an explicit when-to-use condition ('Använd för att fortsätta på ett påbörjat utkast') and names two alternatives with their selecting conditions: read_annual_report for the report derived from bookkeeping, and get_arsredovisning_status for what is missing before submission. This is textbook routing guidance.

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

read_checklistAtt göra just nuA
Read-onlyIdempotent
Inspect

Visar bolagets att göra-lista per dagens datum, utifrån vad som faktiskt har gjorts: leverantörsfakturor att betala, momsavstämning och deklaration, månadsavstämning och, när ett räkenskapsår har stängts, bokslut, INK2 och årsredovisning. Använd för frågor som vad behöver jag göra nu; för årsbokslutets fyra bokföringssteg i ett visst år, använd get_year_end_checklist. Returnerar poster med förfallodatum, allvarlighetsgrad och i förekommande fall ett action-verktyg som utför åtgärden efter användarens godkännande. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the read-only restatement adds little. The description earns credit for disclosing the return shape (poster med förfallodatum, allvarlighetsgrad) and the non-obvious nuance that some entries carry an action-verktyg that performs the action after user approval, which matters for an agent deciding whether this call 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?

Front-loaded with the verb and resource, then coverage, then usage routing, then return shape. Each sentence does distinct work and there is no filler 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?

With no output schema, the description steps in to describe the returned entries (due date, severity, optional action tool). Combined with the routing guidance and the read-only guarantee, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Only one parameter with 100% schema description coverage, and the schema already documents the orgnr format (10 digits, optional hyphen) and how to obtain it via list_companies. The description adds nothing beyond that, 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?

Specific verb ('Visar') plus resource ('att göra-lista') with an explicit scope ('per dagens datum, utifrån vad som faktiskt har gjorts'). It enumerates the concrete domains covered (leverantörsfakturor, moms, månadsavstämning, bokslut, INK2, årsredovisning) and names the sibling it is not (get_year_end_checklist), so the agent can separate the two checklists immediately.

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?

States the triggering question ('vad behöver jag göra nu') and explicitly routes the alternative case ('för årsbokslutets fyra bokföringssteg i ett visst år, använd get_year_end_checklist'). Both when-to-use and when-to-use-something-else are covered.

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

read_policyLäs policyA
Read-onlyIdempotent
Inspect

Hämta ett policydokuments/underlags innehåll som markdown (token-snålt). Argument: policy_id (från list_policies). Har posten status 'image' finns ingen text att läsa, använd read_underlag_image för att se bilden. Scope view.

ParametersJSON Schema
NameRequiredDescriptionDefault
policy_idYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world. Beyond those, the description adds the return format (markdown, token-efficient), the image/status edge case, and a scope requirement ('Scope view'), which are useful behavioral details not covered by the annotations.

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

Conciseness4/5

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

Compact and front-loaded: the core fetch action and format lead, followed by parameter provenance and the image exception. Every sentence carries information, with 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?

With no output schema, the description correctly notes the return type (markdown), which the agent would otherwise lack. Combined with the annotations covering safety and the sibling routing for the image case, it is complete enough to call correctly.

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

Parameters4/5

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

The schema has 0% description coverage and does not explain the single integer parameter. The description compensates by stating what policy_id is and its provenance ('från list_policies'), which is meaningful guidance beyond the bare 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?

States a specific verb (hämta/read) and resource (policydokument/underlags innehåll) and specifies the output format (markdown). It also names the sibling it is not when the content is an image, letting an agent distinguish it from read_underlag_image without opening either schema.

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?

Gives explicit when-to-use context (policy_id comes from list_policies) and an explicit when-not-to-use rule with the alternative: if the entry's status is 'image', use read_underlag_image instead. Nothing is left to inference.

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

read_statutory_statusInlämningsstatus för årsredovisning och INK2A
Read-onlyIdempotent
Inspect

Visar inlämningsstatus för ett räkenskapsår: om årsredovisningen och INK2 finns som utkast, om de är inlämnade (av vem och när) och vilken deadline som gäller. Använd för frågor som är årsredovisningen inlämnad; för en allmän lägesbild, använd get_overview, och för årsbokslutets bokföringssteg, använd get_year_end_checklist. Returnerar utkastläge, inlämningsstatus och deadline för årsredovisning och INK2. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025).
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the closing 'Läser bara, ändrar inget' largely restates that. The description does add real behavioral value by specifying what is inspected (draft state, who submitted and when, applicable deadline) and enumerating the returned elements, which matters since no output schema exists.

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

Conciseness4/5

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

Well front-loaded: what it does, then when to use it versus alternatives, then what it returns. It is a reasonable length with little waste, though the trailing read-only sentence is redundant with the annotations and could be cut.

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 two-parameter read tool, the description covers purpose, routing, and the returned fields, and annotations handle the safety profile, so an agent can call it correctly. The one shortfall is that it never explains how it differs from get_arsredovisning_status, leaving ambiguity inside this large sibling set.

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%, and the schema itself documents both parameters thoroughly, including the fiscal-year-end convention with a worked example and how to obtain the orgnr via list_companies. The description adds no meaning beyond 'för ett räkenskapsår', so the baseline of 3 applies.

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?

States a specific verb and resource: submission status for the annual report and INK2 for a fiscal year, including draft/submitted/deadline. It clearly separates itself from get_overview and get_year_end_checklist. It does not, however, distinguish itself from the very similar sibling get_arsredovisning_status, which an agent could easily confuse with it.

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?

Explicit routing: use this for questions like 'is the annual report submitted', use get_overview for a general picture, and get_year_end_checklist for the year-end bookkeeping steps. Each alternative is paired with the condition that selects it, leaving nothing to inference (aside from the unmentioned get_arsredovisning_status).

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

read_taxLäs skatteberäkningA
Read-onlyIdempotent
Inspect

Visar bolagets skatteberäkning och INK2 för ett räkenskapsår, härledd direkt ur bokslutet utan justeringar. Använd för frågor om skatt och skattemässigt resultat; för att pröva justeringar som INK2S och periodiseringsfond, använd compute_tax, och för SRU-filerna, använd download_ink2_sru. Returnerar årets resultat, periodiseringsfond, särskild löneskatt, skattemässigt resultat, beskattningsbar inkomst och skatt i kronor, INK2-raderna i kronor och bokföringsposterna för skatten i öre. Beräkningen gäller alltid hela räkenskapsåret. Läser bara, ändrar inget.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025). Utelämna för det senaste.
monthNoAnvänds inte; beräkningen gäller alltid hela räkenskapsåret.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real behavioural context beyond that: the calculation is derived directly from bokslutet with no adjustments, and it always covers the full fiscal year. It stops short of stating permissions prerequisites or pagination, but adds clear value.

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

Conciseness4/5

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

Front-loaded with the core action, then alternatives, then return contents. Dense but every sentence carries information (scope, routing, outputs, read-only). Slightly list-heavy in the returns clause but no waste.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the returned fields (resultat, periodiseringsfond, löneskatt, beskattningsbar inkomst, INK2-rader, bokföringsposter) and their units (kronor/öre). Combined with annotations covering safety and routing covered in usage, nothing needed to call it correctly is missing.

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% and the schema itself explains year, month (unused) and orgnr. The description reinforces semantics by stating the calculation always concerns the whole fiscal year, which explains why month is ignored - a nuance the schema only gives implicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (visar/läser) and resource (skatteberäkning och INK2 för ett räkenskapsår) and explicitly distinguishes itself from compute_tax and download_ink2_sru. An agent can choose it without opening any sibling schema.

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?

Gives an explicit when-to-use ('frågor om skatt och skattemässigt resultat') and names two alternatives with the exact condition that selects them (compute_tax for INK2S/periodiseringsfond adjustments, download_ink2_sru for SRU files). Routing is unambiguous.

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

read_underlag_imageLäs bildunderlagA
Read-onlyIdempotent
Inspect

Läs ett bildunderlag (t.ex. ett kvitto som skärmdump eller foto) som en bild du kan titta på. Används för dokument/underlag med status 'image' (se list_policies/read_policy). Argument: policy_id. Scope view.

ParametersJSON Schema
NameRequiredDescriptionDefault
policy_idYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, non-openWorld, so the safety profile is covered. The description adds useful behavior beyond that: it returns a viewable image and requires 'Scope view', which the annotations don't convey.

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

Conciseness4/5

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

Three short, front-loaded sentences with no filler: purpose, applicability, and the argument/scope. Efficient and easy to scan.

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 read tool with annotations covering safety and no output schema, the description supplies purpose, the 'image' status gating, and the required scope. Only edge cases (non-image status, error behavior) are unaddressed.

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 0% for the single policy_id parameter, so the description must carry meaning, yet it only names the argument. The pointer to list_policies/read_policy hints at the ID's origin, which is some compensation but not full semantics.

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?

States a specific verb (read/Läs) and resource (bildunderlag) and clarifies the outcome as 'en bild du kan titta på', distinguishing it from text-based underlag handling. It doesn't name a direct sibling alternative, but the described scope is unmistakable.

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 scopes usage to documents with status 'image' and points the agent to list_policies/read_policy for that status. This is clear context for when to use it, though it stops short of describing what to use for non-image underlag.

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

register_customer_paymentBokför kundinbetalningAInspect

Bokför en INbetalning på en kundfaktura (D likvidkonto / K 1510). KODEN postar. Kräver scope book; bokföringstaket får inte överstigas. Argument: orgnr, invoice_id, pay_date (YYYY-MM-DD), amount_ore; valfritt bank_account (likvidkonto som debiteras, default 1930).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
pay_dateYes
amount_oreYes
invoice_idYes
bank_accountNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare write/non-destructive/non-idempotent, so the bar is lower. The description adds real value beyond them: the scope requirement, the booking-limit constraint, that 'KODEN postar' (the code performs the posting), and the default cash account. It stops short of stating reversibility or what happens on re-invocation.

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

Conciseness4/5

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

Dense and front-loaded: purpose, accounting entry, prerequisites, then arguments in one compact block. Telegraphic phrasing is efficient rather than padded, though the argument list crowds the prose slightly.

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 mutation tool with no output schema, the description covers the accounting effect, the auth/limit prerequisites, and every parameter including the optional one. An agent has enough to invoke it correctly, barring explicit idempotency/reversal behavior.

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 only 20%, so the description must compensate, and it does list all five args including the pay_date format (YYYY-MM-DD) and the bank_account default/meaning ('likvidkonto som debiteras, default 1930'). It leaves amount_ore's unit and invoice_id semantics to the schema, but the added format and default detail lift it above 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?

States a specific verb and resource ('Bokför en INbetalning på en kundfaktura') and even gives the resulting accounting entry (D likvidkonto / K 1510). This clearly distinguishes it from reverse_customer_payment and register_supplier_payment.

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?

Provides prerequisites ('Kräver scope book', booking limit must not be exceeded), which is genuine usage context. However, it never says when to choose this over alternatives such as reverse_customer_payment or book_customer_invoice; the routing guidance is only implied.

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

register_rot_rut_payoutBokför ROT/RUT-utbetalningAInspect

Registrera Skatteverkets utbetalning för en ROT/RUT-begäran. KODEN postar: D likvidkonto / K 1513 för det utbetalda. Nekade Skatteverket hela eller delar av ett ärende, ange beviljat belopp i approved ([{item_id, approved_ore}]); skillnaden flyttas till kundens fordran (D 1510 / K 1513) och fakturan blir delbetald så att kunden kan faktureras resten. Utelämnade ärenden räknas som helt beviljade. Kräver scope book; bokföringstaket får inte överstigas. Argument: orgnr, request_id, pay_date (YYYY-MM-DD); valfritt approved, bank_account (default 1930).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
approvedNo
pay_dateYes
request_idYes
bank_accountNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only give the bare write/non-idempotent/not-destructive profile; the description goes well beyond by disclosing the exact ledger postings (D likvidkonto / K 1513), the denial fallback posting (D 1510 / K 1513), the side effect that the invoice becomes partially paid, and the auth/ceiling constraints. This is rich behavioral context an agent cannot get from the annotations.

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

Conciseness4/5

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

Front-loaded with the purpose, followed by posting logic, edge-case rules, prerequisites, then a compact argument summary. Dense but every sentence carries business meaning; the single-paragraph form is slightly harder to scan than a structured breakdown but not wasteful.

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 non-idempotent posting tool with no output schema, the description covers the accounting mechanics, denial handling, omitted-case default, required scope and ceiling constraint. It is light on error behavior when the ceiling is exceeded and on exactly how request_id maps to the source request, but the operational picture is otherwise complete.

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

Parameters4/5

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

Schema description coverage is only 20%, so the description must compensate, and it largely does: it spells out the approved array shape as [{item_id, approved_ore}] with the semantic that the difference goes to the customer claim, gives pay_date format YYYY-MM-DD, and notes bank_account defaults to 1930. It leaves request_id's provenance (which request id) and item_id's source unexplained, keeping it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource in Swedish: registering Skatteverket's payout for a ROT/RUT request, and immediately disambiguates from next-step siblings like create_rot_rut_request, mark_rot_rut_request_submitted and reverse_rot_rut_payout by naming the payout event itself. An agent can distinguish it from those without opening the schema.

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

Usage Guidelines4/5

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

Gives clear trigger context: use it when Skatteverket has paid out, and describes the partial/full denial branch plus the rule that omitted cases count as fully approved. It also states the 'scope book' prerequisite and bookkeeping-ceiling constraint. It does not explicitly name reverse_rot_rut_payout as the undo path or state when not to call 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.

register_supplier_paymentBokför leverantörsbetalningAInspect

Bokför en leverantörsbetalning på en faktura. KODEN postar. Kräver scope book; ett satt bokföringstak (0 = ingen gräns) får inte överstigas. Argument: orgnr, invoice_id, pay_date (YYYY-MM-DD), amount_ore; valfritt bank_account (likvidkonto som krediteras, default 1930), settle (faktura i annan valuta: amount_ore = SEK som faktiskt betalades och settle=true slutreglerar fakturan; skillnaden mot den bokförda skulden bokförs som kursförlust 7960 eller kursvinst 3960).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
settleNo
pay_dateYes
amount_oreYes
invoice_idYes
bank_accountNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=false, and the description adds meaningful context beyond them: 'KODEN postar' (the call performs the posting), the booking-cap constraint, and detailed settle behavior including which accounts absorb FX differences (7960 loss / 3960 gain). It does not state reversibility or repeat-call behavior explicitly.

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

Conciseness4/5

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

It is front-loaded with the action and preconditions, then the argument list. Dense but every clause carries information given the low schema coverage; it is a long single block rather than cleanly segmented, which costs it a point.

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 non-idempotent mutation with no output schema, the description supplies preconditions (scope, cap), the argument semantics, and the FX handling — enough to invoke correctly. It stops short of covering failure modes or what happens on repeated calls.

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 only 17% (essentially just orgnr), so the description carries the load: it documents pay_date format (YYYY-MM-DD), bank_account as the credited cash account with default 1930, and full settle semantics where amount_ore means SEK actually paid. It adds little for invoice_id, hence not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Bokför en leverantörsbetalning på en faktura' (book a supplier payment against an invoice). Combined with the name register_supplier_payment, this clearly differentiates it from siblings like book_supplier_invoice, reverse_supplier_payment, and register_customer_payment.

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 states real preconditions: requires scope book and a booking cap that must not be exceeded (0 = no limit). This tells the agent when the call will succeed but does not explicitly name alternative tools (e.g. reverse_supplier_payment) or contrast use cases.

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

reject_voucher_draftAvvisa verifikatförslagA
DestructiveIdempotent
Inspect

Avvisa (ta bort) ett väntande verifikatförslag (draft). Ev. bilagor går tillbaka till underlagspoolen. Gör bara detta när användaren instruerat dig att avvisa. Kräver behörigheten 'reconcile'. Argument: orgnr, draft_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
draft_idYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true and idempotentHint=true, but the description adds real value beyond them: attachments return to the underlagspool (underlagspoolen), the required 'reconcile' permission, and a caution to act only on user instruction. This is meaningful behavioral context for a destructive operation.

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

Conciseness4/5

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

Three tight sentences, with the action and the delete semantics front-loaded. The final 'Argument: orgnr, draft_id' clause is redundant filler already conveyed by the schema, a minor blemish.

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 destructive mutation with annotations covering safety, the description supplies the missing pieces an agent needs: the permission requirement, the side effect on attachments, and the user-consent condition. No output schema is required for a delete operation, so it is nearly 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?

Schema coverage is 50%: orgnr is well documented in the schema with format and a list_companies pointer, while draft_id has no description anywhere. The description's trailing 'Argument: orgnr, draft_id' merely restates the names and adds no format or meaning, so it does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reject (delete) a pending voucher draft. It is cleanly distinguishable from siblings like approve_voucher_draft and edit_voucher_draft, and the parenthetical 'ta bort' confirms the delete semantics.

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 says to perform this only when the user has instructed a rejection, which is clear when-to-use guidance. It does not name the natural alternative (approve_voucher_draft) as the contrasting action, so a 4 rather than 5.

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

resolve_integration_recordsMarkera kopplingsdata som hanteradA
Idempotent
Inspect

Markerar poster från en koppling som hanterade (bokförda), ignorerade (ska inte bokföras, t.ex. dubbletter) eller som nya igen (ångra). Använd efter att du bokfört posterna med de vanliga verktygen, och ange då verifikatens id så att posten pekar på bokföringen; för att läsa posterna, använd list_integration_data. Bokför ingenting själv. Returnerar posterna med ny status. Bieffekt: posterna flyttas från ohanterade och flaggas inte längre. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoValfritt: kort anteckning, t.ex. varför posten ignoreras.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
statusYeshandled (bokförd eller hanterad), ignored (ska inte bokföras) eller new (ångra).
record_idsYesPostens eller posternas id, t.ex. [42, 43]. Högst 500 per anrop.
voucher_idsNoValfritt: id för verifikaten som bokför posterna, t.ex. [118]. Kontrolleras mot bolagets huvudbok.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, idempotent=true, destructive=false) by disclosing the side effect that records leave the unhandled set and stop being flagged, the required 'book' permission, and the return shape ('Returnerar posterna med ny status'). It also forbids booking within this call, which is essential for a status-mutation tool. No contradiction with the annotation profile.

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?

Front-loads the action and the three possible states, then sequences prerequisites, prohibition, return value, side effect and permission in descending priority. Every sentence carries information; no filler.

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 multi-record mutation with no output schema, the description covers the mutation semantics, the prerequisite workflow, the authorization requirement, the side effect, and the return value. An agent has everything needed 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?

Schema description coverage is 100%, so the schema already explains orgnr, record_ids (max 500), status, voucher_ids and note. The description adds contextual meaning for voucher_ids (linking the record to the booking) and restates the three status values, but no syntax or format detail beyond the schema. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Markerar poster från en koppling') plus the full set of target states (handled/ignored/new), and it names the sibling it is not — list_integration_data for reading and the 'vanliga verktygen' for booking. An agent can distinguish it from every booking or lookup sibling without opening a schema.

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?

Explicit when-to-use ('Använd efter att du bokfört posterna med de vanliga verktygen'), how to supply the link ('ange verifikatens id så att posten pekar på bokföringen'), an explicit prohibition ('Bokför ingenting själv'), and a named alternative for the read path (list_integration_data). Nothing about selection is left to inference.

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

reverse_customer_paymentBacka kundinbetalningAInspect

Backa den senaste registrerade inbetalningen på en kundfaktura (postar ett omvänt verifikat, K likvidkonto / D 1510, så fakturan blir obetald igen). KODEN postar. Scope book. Argument: orgnr, invoice_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only give generic hints (readOnly=false, idempotent=false, destructive=false). The description adds real behavioral context: it discloses the exact reversing entry (K likvidkonto / D 1510), that the invoice becomes unpaid again, and that the code posts automatically ('KODEN postar').

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 core sentence is well front-loaded and information-dense, but the trailing 'Argument: orgnr, invoice_id' fragment is a pure restatement of the schema and the 'Scope book' fragment is left unexplained.

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 two-param mutation tool with annotations and no output schema, the description covers the mechanism, the accounting result, and the scope. It omits failure conditions (e.g. behaviour when no payment exists) and permission requirements, but covers the essentials.

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 50% – invoice_id has no description anywhere – and the description does nothing to compensate, merely restating 'Argument: orgnr, invoice_id' without adding format, lookup, or constraint details beyond what the schema already says for orgnr.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Backa den senaste registrerade inbetalningen på en kundfaktura') and distinguishes itself from the sibling reverse_supplier_payment by scoping to customer invoices. It also names the exact scope ('book') and the accounting effect.

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

Usage Guidelines3/5

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

Usage is only implied: 'den senaste registrerade inbetalningen' hints that this targets the most recent payment, but there is no explicit when/when-not, no mention of prerequisites, and no routing against near neighbours like credit_customer_invoice or cancel_customer_invoice.

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

reverse_payroll_runBacka lönekörningAInspect

Backa en bokförd lönekörning: omför löneverifikatet (spegelverifikat) och utesluter körningen ur AGI. Historiken bevaras (status → reversed). Kräver scope payroll. Argument: orgnr, run_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
run_idYes

TDQS

A4/5.0
Behavior4/5

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

With annotations present, the description adds real value beyond them: it explains the mirror voucher that gets posted, that the run is excluded from AGI, and that history is preserved via status → reversed. That reconciles the apparently destructive verb with destructiveHint=false, so no contradiction. It still omits what happens on a second call (idempotentHint=false) or if the run is already reversed.

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

Conciseness4/5

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

Dense and front-loaded: purpose first, then side effects, then history semantics, then prerequisite. The trailing 'Argument: orgnr, run_id' adds no information and is the one redundant fragment.

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

Completeness4/5

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

No output schema exists, yet the description covers the meaningful outcomes (mirror voucher, AGI exclusion, preserved history) and the auth scope. The main gap is the unresolved run_id parameter and undefined behavior on repeat/already-reversed runs, which is minor for a two-parameter operation.

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 only 50% – run_id has no description at all – so the description must compensate, and it does not: 'Argument: orgnr, run_id' merely restates the parameter names. It never explains what run_id refers to or that it comes from list_payroll_runs, which the sibling list_payroll_runs would supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Backa en bokförd lönekörning') and immediately scopes it to booked runs, which separates it from run_payroll (create) and list_payroll_runs (read). An agent can identify the operation without opening any schema.

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

Usage Guidelines4/5

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

It gives a clear precondition ('bokförd' – only booked runs can be reversed) and a hard requirement ('Kräver scope payroll'), which tells the agent when the call is valid. It does not, however, name an alternative or state what to do instead when the run is not booked, so exclusions are left implicit.

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

reverse_rot_rut_payoutBacka ROT/RUT-utbetalningAInspect

Backa en registrerad ROT/RUT-utbetalning (postar ett omvänt verifikat) så att Skatteverkets beslut kan registreras om. Går inte om kunden redan betalat ett nekat belopp. KODEN postar. Scope book. Argument: orgnr, request_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
request_idYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, and the description adds that the code posts a reversing voucher and that it is blocked when a denied amount is already paid — meaningful context beyond annotations. It does not state idempotency or auth scope beyond 'Scope book'.

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

Conciseness4/5

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

Three compact sentences, front-loaded with purpose and mechanism. The terse 'KODEN postar. Scope book.' fragments are efficient if a bit cryptic.

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 mutation with no output schema, the description covers purpose, a blocking condition, and posting behavior, but omits required permissions, idempotency, and the meaning/format of request_id. Adequate but with 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 50%; orgnr is well described in the schema (format and list_companies hint), but request_id has no description in schema or tool description. Baseline 3 is appropriate.

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?

States a specific verb (Backa/reverse) and resource (ROT/RUT-utbetalning) with the mechanism noted (postar ett omvänt verifikat). It is distinguishable from register_rot_rut_payout and delete_rot_rut_request, though it doesn't explicitly name those siblings.

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?

Gives one exclusion: 'Går inte om kunden redan betalat ett nekat belopp.' But it doesn't say when to choose this over delete_rot_rut_request or other reversal tools, so usage is only partially guided.

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

reverse_supplier_paymentBacka leverantörsbetalningAInspect

Backar den senast registrerade betalningen på en leverantörsfaktura med ett motverifikat, så att fakturan blir obetald igen. Använd när en betalning har registrerats fel eller inför makulering med cancel_supplier_invoice; för att registrera en betalning, använd register_supplier_payment. Returnerar fakturan med nytt saldo och status. Bieffekt: ett omvänt betalningsverifikat bokförs och originalet ligger kvar. Ger ett fel om fakturan saknar betalning. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
invoice_idYesLeverantörsfakturans id (heltal), t.ex. 42. Hämta med list_supplier_invoices.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only give the generic safety flags (readOnly=false, destructive=false, idempotent=false); the description adds real behavioral context beyond them: a reversing voucher is posted while the original entry remains, an error is returned if the invoice has no payment, and the 'book' permission is required. This is consistent with destructiveHint=false since the original is retained.

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 dense sentences with zero filler, front-loaded with the action and effect before routing guidance and edge cases. Every sentence contributes a distinct fact.

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 non-idempotent mutation with no output schema, the description covers the return value (invoice with new balance and status), the side effect, the error condition, and the required permission. An agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (orgnr, invoice_id) already carry format examples and pointers to list_companies/list_supplier_invoices. The description adds no parameter-level detail, 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?

States a specific verb and resource ('Backar den senast registrerade betalningen på en leverantörsfaktura med ett motverifikat') including the scope limitation of only the most recent payment. It clearly distinguishes itself from register_supplier_payment, cancel_supplier_invoice, and reverse_customer_payment, so an agent can pick it without opening a schema.

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 names both when to use it (when a payment was registered incorrectly, or as a prerequisite step before cancel_supplier_invoice) and the alternative for the opposite operation (register_supplier_payment). Nothing is left to inference.

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

reverse_voucherOmför verifikatAInspect

Rätta ett verifikat genom att bokföra ett spegelverifikat (omvända tecken) i en öppen period, originalet lämnas orört (append-only). Använd t.ex. för att rätta en post vars period är låst. Koden bokför och validerar. Kräver scope book. Argument: orgnr, voucher_id; valfritt date (YYYY-MM-DD, default idag).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
voucher_idYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare a non-read, non-destructive write, and the description adds genuinely new context beyond them: append-only behavior, the original being left untouched, posting into an open period, and the required 'book' scope. It does not say what happens if no open period exists or how failures surface, which keeps it from a 5.

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

Conciseness5/5

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

A single dense paragraph that front-loads the core mechanic before use case, validation, auth scope, and arguments. Every sentence carries information; nothing is redundant with the schema or annotations.

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 3-parameter mutation tool with no output schema, the description covers behavior, the append-only guarantee, the use case, auth scope, and argument formats. Minor gaps remain, such as preconditions on the target voucher and error behavior, but nothing essential to a correct call is missing.

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 only 33% (only orgnr is documented in the schema), so the description must compensate. It supplies the date format (YYYY-MM-DD) and its 'default today' behavior, and enumerates the argument set including which is optional, though it does not clarify what voucher_id must reference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and effect: correct a voucher by posting a mirror voucher with reversed signs, leaving the original intact. This mechanic cleanly distinguishes it from siblings like book_voucher, create_voucher, get_voucher, and edit_voucher_draft, which do not reverse an existing posting.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use condition: correcting an entry whose period is locked, which is exactly the scenario that rules out edit_voucher_draft. It does not name sibling alternatives explicitly or state when NOT to use it (e.g. for open-period drafts), so it stops short of full routing guidance.

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

revert_prepare_bilagaÅngra förberedd bilagaA
Idempotent
Inspect

Ångra en FÖRBEREDD-markering på en bilaga (tar bort PREPARER-steget, status → Ej startad). Nekas om bilagan redan är attesterad, då måste en människa ångra attesten i appen först. Kräver 'reconcile'. Argument: orgnr, bilaga_type, account, year, month.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
accountYes
bilaga_typeYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare non-read-only, idempotent, non-destructive, and the description's mutation semantics agree with that. It adds genuine context beyond the annotations: the exact state transition, the attestation gate, and the required 'reconcile' permission.

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

Conciseness4/5

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

Three tight sentences with no filler; the change in state and the blocking condition are front-loaded before the permission and argument list. Appropriate length for the operation's complexity.

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 no-output-schema mutation tool the gating and permission details are well covered, but with 20% schema coverage the four undocumented parameters leave an agent guessing about accepted formats and values. Adequate, not complete.

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 description coverage is only 20% (only orgnr is documented), so the description carries the burden — but it merely enumerates the argument names already visible in the schema. It adds no format, range, or valid-value meaning for year, month, account, or bilaga_type.

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?

States a specific verb ('Ångra') and resource ('FÖRBEREDD-markering på en bilaga') and spells out the state effect (tar bort PREPARER-steget, status → Ej startad). It is the clear inverse of the sibling prepare_bilaga, though that sibling is not named explicitly.

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

Usage Guidelines4/5

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

Gives real usage conditions: it is refused if the bilaga is already attesterad, in which case a human must undo the attestation in the app first, and it requires the 'reconcile' permission. It stops short of naming alternative tools, but the operative when/when-not is present.

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

review_time_entriesAttestera tidposterA
Idempotent
Inspect

Attestera eller avvisa rapporterade tidposter. status = attesterad (godkänd, går till nästa lönekörning), avvisad (skickas tillbaka; den anställde ser note och kan rätta) eller rapporterad (ångra attest). Utbetalda poster kan inte ändras. Scope payroll. Argument: orgnr, entry_ids, status; valfritt note.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
statusYes
entry_idsYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (non-readonly, idempotent, non-destructive), and the description adds real value on top: the downstream consequence of each status, the note being visible to the employee, and the immutability of paid entries. It omits permission/role requirements, which keeps it from a 5.

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

Conciseness4/5

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

Front-loaded with the action, then status semantics, constraint, scope and arguments in descending priority. Dense but every clause carries information; the trailing 'Argument: ...' list is mildly redundant with the schema.

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 mutation tool with no output schema, the description covers the outcomes of each status and a key precondition, and annotations handle safety. Missing detail on who may attest, multi-entry partial-success behavior, and the return shape leaves it short of complete.

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

Parameters4/5

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

Schema coverage is only 25% (orgnr alone is documented), so the description must carry the rest, and it does for the critical parameters: the allowed status values and their effects and the purpose of note are explained. entry_ids is only named without format or array-item semantics, which is the remaining gap.

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?

States a specific verb+resource ('Attestera eller avvisa rapporterade tidposter') and spells out the state semantics for each status value. The time-entry resource naturally separates it from voucher tools like reject_voucher_draft, but no sibling is named explicitly, so it stays a notch below the top.

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?

Explains what each mode does (approved goes to next payroll run, rejected is sent back for correction, reported undoes the approval) and gives an explicit precondition that paid entries cannot be changed. It lacks named alternatives (e.g. use list_time_entries to view, delete_time_entry to remove), so it is clear context without routing.

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

run_payrollKör lönAInspect

Bokför en lönekörning (skapar PayrollRun och bokför löneverifikatet, serie L, i huvudboken). Beloppen räknas deterministiskt av koden. Kräver scope payroll. Ett bokföringstak kan valfritt sättas på nyckeln (0/tomt = ingen gräns); körningar vars totalkostnad överstiger ett satt tak avvisas. Argument: orgnr, year, month, pay_date, entries ([{employee_id, gross_cash_ore, benefit_ore?, extra_tax_ore?, components?, time_entry_ids?}]); components = lönearter (semester/övertid/sjuklön/sjukavdrag/förmån/utlägg/nettoavdrag), se calc_payroll. time_entry_ids = attesterade tidposter som lönen bygger på (från get_payroll_time_basis); de märks som utbetalda och släpps om körningen backas. Valfritt note, net_pay_account (konto nettolönen krediteras, default 1930; löneskuldkonto om ej betald). En exakt dubblett (samma period/datum och identiska rader) blockeras; sätt allow_duplicate=true för att medvetet bokföra ytterligare en (t.ex. extra utbetalning).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
yearYes
monthYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
entriesYes
pay_dateYes
allow_duplicateNo
net_pay_accountNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations (which only give readOnly=false/destructive=false/idempotent=false): discloses the required 'payroll' scope, deterministic amount calculation, the optional bokföringstak with rejection behavior, exact-duplicate blocking with the allow_duplicate escape hatch, and the side effect that time_entry_ids are marked paid and released on reversal. This is exactly the auth, mutation, and reversibility context an agent needs.

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

Conciseness4/5

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

Front-loaded with the core action and the PayrollRun/voucher outcome, then arguments, then edge cases (cap, dedup). Dense with parentheticals and long, but essentially every clause conveys non-obvious behavior, so little is wasted.

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 an 8-param, 5-required mutation tool with no output schema and near-zero schema documentation, the description covers the required scope, defaults, dedup/cap failure modes, and cross-tool dependencies. Nothing essential to invoking it correctly is missing.

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 only 13% (just orgnr documented), so the description carries the burden and largely does: it expands the entries object shape (employee_id, gross_cash_ore, benefit_ore?, extra_tax_ore?, components?, time_entry_ids?), enumerates components = lönearter, and explains net_pay_account's default 1930 and liability-account behavior. year/month/pay_date are only named, not clarified, keeping it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Bokför en lönekörning'), names the side effect (skapar PayrollRun och bokför löneverifikatet serie L), and thereby implicitly distinguishes itself from calc_payroll, which only computes. An agent can tell what this tool does and what artifact it produces without opening the schema.

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

Usage Guidelines4/5

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

It routes the agent to sibling tools by name ('se calc_payroll' for lönearter, 'från get_payroll_time_basis' for time entries), giving clear usage context. It stops short of an explicit when-to-use-this-vs-calc_payroll statement or when-not-to-book, so it is clear context rather than full decision guidance.

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

search_companySök bolag i registretA
Read-onlyIdempotent
Inspect

Sök ett svenskt bolag i Bolagsverkets register på namn eller organisationsnummer (10 siffror ger exakt träff). Använd för att fylla i kundens namn, org.nr och adress innan create_customer_invoice (eller leverantörens vid create_supplier_invoice): varje träff har invoice_fields = {customer_name, customer_orgnr, customer_address} som kan skickas rakt in. Scope view. Argument: query; valfritt limit (1-10, default 5).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so safety is covered. The description goes further and discloses the return shape (each hit exposes invoice_fields = {customer_name, customer_orgnr, customer_address}), which is critical because there is no output schema, plus the exact-match behavior for 10-digit input.

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

Conciseness4/5

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

Dense but front-loaded: search behavior first, then the integration use case, then arguments. Every clause carries information, though the single long sentence packs the downstream-tool instructions tightly enough that it is slightly less scannable.

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 two-parameter read-only search with no output schema, the description covers purpose, usage flow, parameter ranges, and the returned field structure. Nothing an agent needs in order to call it and consume the result is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the load: it explains that query accepts a name or an organisationsnummer (10 digits = exact hit) and documents limit's range (1-10) and default (5), neither of which appears in the schema's min/max. Minor gap: no format guidance (e.g. hyphenated org numbers).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Sök ett svenskt bolag i Bolagsverkets register') plus the two search modes (name or org number, with the 10-digit exact-hit nuance). This is clearly distinguishable from siblings like list_companies (enumeration) and get_company (single-fetch), even without naming them.

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

Usage Guidelines4/5

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

Gives an explicit, actionable use case: look up the company to populate name, org.nr and address before create_customer_invoice or create_supplier_invoice. It routes the agent to the downstream tools well but does not state when *not* to use it (e.g. for the agent's own company record).

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

set_arsredovisning_inputsSpara årsredovisnings-inputsA
Idempotent
Inspect

Skriv en delmängd av årsredovisningens user_inputs till utkastet (assistenten föreslår, användaren godkänner, sedan skriv) och få tillbaka det uppdaterade status-svaret (samma form som get_arsredovisning_status). Fältnamnen är exakt de i buildUserInputs/ixbrl_inputs (t.ex. sate, verksamhet, inkludera_utdelning). Belopp i HELA KRONOR. Scope statutory. Argument: orgnr, year, inputs (dict med delmängd av fälten).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
inputsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds real behavioral context beyond them: it writes only a SUBSET of fields, requires user approval first, and returns the updated status response. It does not describe what happens to unspecified fields or error behavior, keeping it short of a 5.

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

Conciseness4/5

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

A single dense but front-loaded paragraph that opens with the action, then the return shape, field-name convention, unit convention, scope, and arguments. No filler sentences, though the run-on style packs several concerns into one block.

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

Completeness4/5

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

With no output schema, the description still tells the agent the response mirrors get_arsredovisning_status. Combined with the note on nested-object field provenance and whole-kronor units, it is nearly complete for this complexity, missing only explicit failure/validation behavior.

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 only 33% (just orgnr), but the description compensates: it documents that inputs is a dict of exact field names from buildUserInputs/ixbrl_inputs with examples (sate, verksamhet, inkludera_utdelning), and specifies that amounts are in whole kronor. This meaningfully extends the bare 'object' 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?

States a specific verb and resource in Swedish ('Skriv en delmängd av årsredovisningens user_inputs till utkastet'), names the destination (draft) and the return shape (same form as get_arsredovisning_status). Gives concrete example field names so an agent can distinguish it from siblings like edit_annual_report_draft without opening a schema.

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

Usage Guidelines4/5

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

Explicitly encodes the workflow precondition ('assistenten föreslår, användaren godkänner, sedan skriv') and states the scope ('Scope statutory'). It does not, however, explicitly route the agent away from edit_annual_report_draft, so the when-not guidance is only implied.

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

set_bilaga_specErsätt alla avstämningsraderA
Idempotent
Inspect

Ersätter alla manuella specifikationsrader på en avstämning (bilaga), som radeditorn i appen. Använd när hela specifikationen ska sättas eller nollställas (skicka [] för att tömma); för att lägga till en enstaka rad och behålla resten, använd add_bilaga_row. Summan av raderna blir det avstämda beloppet; för att nolla differensen ska den matcha kontots slutsaldo (gl_balance_ore i get_reconciliation). Returnerar bilagan med rader, avstämt belopp och differens. Bieffekt: tidigare rader skrivs över; attesten ändras inte. Kräver behörigheten reconcile.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYesAlla rader som ska gälla: [{description, amount_ore}], belopp i öre. Skicka [] för att tömma.
yearYesKalenderår för avstämningsmånaden, t.ex. 2026.
monthYesAvstämningsmånad 1 till 12, t.ex. 3 för mars.
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
accountYesKontonummer i BAS-kontoplanen, t.ex. 1930.
bilaga_typeYesAvstämningens typ som den visas i get_open_reconciliations, t.ex. BANK eller GL_ACCOUNT.

TDQS

A4.4/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the overwrite side effect ('tidigare rader skrivs över'), that the attestation is untouched, the required permission ('Kräver behörigheten reconcile'), and the returned content. Since annotations already declare write/idempotent/non-destructive, this added behavioral context is a genuine gain; a possible tension with destructiveHint=false exists but the full-state 'set' semantics and idempotent re-run make it defensible rather than contradictory.

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

Conciseness4/5

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

Front-loads the purpose, then usage, then behavioral consequences and return values, in a compact single block. Dense but every sentence carries information; slightly more prose than strictly required but no filler.

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?

Although there is no output schema, the description states what is returned (rows, reconciled amount, difference), the destructive side effect, the permission requirement, and the relationship to get_reconciliation. Nothing essential for a correct call 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?

Schema description coverage is 100% and every parameter (orgnr, bilaga_type, account, year, month, rows) is already documented in the schema. The description adds conceptual meaning for rows (their sum becomes the reconciled amount, [] empties it), but no per-parameter syntax beyond what the schema supplies, 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?

States a specific verb and resource ('Ersätter alla manuella specifikationsrader på en avstämning'), and immediately distinguishes itself from the sibling add_bilaga_row by naming the full-set-replace semantics. An agent can tell it apart from the incremental-row tool without opening either schema.

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?

Explicit when-to-use ('när hela specifikationen ska sättas eller nollställas (skicka [] för att tömma)'), explicit when-not ('för att lägga till en enstaka rad och behålla resten'), and it names the alternative (add_bilaga_row). It further routes the agent to get_reconciliation for the gl_balance_ore needed to zero the difference.

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

skip_year_end_stepKvittera årsavslutsstegA
Idempotent
Inspect

Kvittera ett årsavslutssteg som ej aktuellt (hoppa över, utan verifikat) — t.ex. inga periodiseringar eller belopp 0. Kräver scope book. Argument: orgnr, year, step (periodiseringar|dispositioner|aktuell_skatt|arets_resultat).

ParametersJSON Schema
NameRequiredDescriptionDefault
stepYes
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4/5.0
Behavior4/5

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

Adds meaningful context beyond the annotations: no voucher is created ('utan verifikat') and a 'book' scope is required. This complements idempotentHint=true and destructiveHint=false by clarifying that the operation mutates year-end state without producing an accounting entry. No contradiction with annotations.

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

Conciseness4/5

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

Two compact sentences, front-loaded with the action and then the qualifying condition and requirements. No filler, though the dense mixed-language phrasing slightly reduces readability.

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 3-parameter mutation tool with no output schema, the description covers the action, the when, the scope requirement, and the valid step values — everything needed to call it correctly. Only the year parameter and return behavior are left implicit, which is minor given no output schema exists.

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 only 33% (only orgnr is documented), and the description compensates by enumerating the step values (periodiseringar|dispositioner|aktuell_skatt|arets_resultat), which the schema does not declare as an enum. This is real added value over the structured fields, though year remains undocumented.

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?

States a specific verb and resource: acknowledging a year-end step as not applicable, explicitly 'utan verifikat' (without voucher), which distinguishes it from the booking siblings like book_year_end_step and undo_year_end_step. It does not name those siblings directly, so the contrast is implied rather than explicit.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use condition: a year-end step that is not applicable, e.g. no accruals or a zero amount. It does not explicitly exclude or name the alternative (booking the step), leaving the agent to infer that a real posting should go through book_year_end_step instead.

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

transfer_prior_year_resultFör om föregående års resultatA
Idempotent
Inspect

För om föregående års resultat från Årets resultat (2099) till Balanserat resultat (2091) på räkenskapsårets första dag. Görs annars automatiskt när föregående år låses; använd när det inte skett (t.ex. äldre år). Kräver att föregående års resultat är bokfört (8999/2099). Bokför bara det som återstår (transfer=null om inget återstår). Scope book. Argument: orgnr, year (det NYA året).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare mutation, idempotency and non-destructiveness, but the description adds real behavioral context: the prerequisite that the prior year result must be booked (8999/2099) and the 'only book what remains, null if nothing remains' semantics. It stops short of describing the response or failure modes, so not a 5.

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

Conciseness4/5

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

Front-loaded with the core action, then when to use it, then prerequisites and argument notes. Dense but every sentence carries operational weight; only minor compression is possible.

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 scoped mutation tool with no output schema and solid annotations, the description covers action, trigger conditions, prerequisites and residual-amount behavior. It omits return/error handling, but that is a minor gap here.

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 50% — orgnr is well documented in the schema but year has no schema description. The description compensates by clarifying that 'year' is the NEW year (det NYA året), which is essential to call the tool correctly and is not derivable from 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?

States a specific verb (transfer/för om) and resource (prior year result) and even names the exact accounts moved between (Årets resultat 2099 → Balanserat resultat 2091). An agent can distinguish it from siblings like lock_fiscal_year or book_year_end_step without opening the schema.

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

Usage Guidelines5/5

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

Explicitly says the transfer happens automatically when the prior year is locked and to use this tool only when that hasn't occurred (e.g. older years). It names the alternative mechanism and the condition that selects this tool, leaving little to inference.

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

undo_year_end_stepÅngra årsavslutsstegAInspect

Ångra ett årsavslutssteg. Ett BOKFÖRT steg backas med en VÄNDANDE bokning (spegelverifikat i samma serie — originalet rörs aldrig) och steget återöppnas; ett KVITTERAT steg återställs till pending. Kräver scope book. Argument: orgnr, year, step (periodiseringar|dispositioner|aktuell_skatt|arets_resultat).

ParametersJSON Schema
NameRequiredDescriptionDefault
stepYes
yearYes
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that a booked step is undone via a reversing mirror voucher in the same series with the original left untouched, that the step is reopened, and that a reconciled step is reset to pending. It also states the required scope (book). This is exactly the mutation-mechanics and auth context the readOnly/destructive hints cannot convey, and it is consistent with destructiveHint=false.

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

Conciseness4/5

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

Front-loaded with the action, then mechanics, then permission requirement, then arguments — a sensible order with no filler. It is dense but each clause carries information; the main cost is the mixed-language surface against English sibling names.

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

Completeness4/5

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

No output schema exists, and the description covers the mutation mechanism, the resulting state, the required scope, and the accepted argument values, which is enough to call it correctly. It omits error/failure behavior (e.g. what happens if the step is in neither state) and any response shape, leaving a minor gap for a non-idempotent mutation.

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

Parameters4/5

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

With schema coverage at only 33% (only orgnr is documented in-schema), the description compensates by naming all three arguments and supplying the allowed step values (periodiseringar|dispositioner|aktuell_skatt|arets_resultat), which the schema lacks entirely (0 enums). It does not clarify the expected year format or orgnr handling beyond the schema, but it substantially fills the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Ångra ett årsavslutssteg') and then distinguishes the two operating modes by input state (BOKFÖRT vs KVITTERAT), which no sibling (book_year_end_step, skip_year_end_step, reverse_voucher) shares. An agent can tell this apart from the other year-end tools without opening any schema.

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

Usage Guidelines4/5

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

Gives clear conditional context: it applies to steps that are booked or reconciled, and explains what each state triggers. It does not, however, explicitly say when to prefer this over book_year_end_step, skip_year_end_step, or reverse_voucher, so routing versus the closest siblings is left to inference.

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

unlock_fiscal_yearLås upp räkenskapsårA
Idempotent
Inspect

Låser upp ett räkenskapsår igen, alla dess månader, så att rättelser kan bokföras. Använd bara när användaren uttryckligen vill rätta i ett låst år; en rättelse kan ofta göras utan upplåsning med ett motverifikat i en öppen period (reverse_voucher), och för att låsa igen, använd lock_fiscal_year. Returnerar årets låsstatus. Bieffekt: årets perioder öppnas för bokföring. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesRäkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025).
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover the safety profile (destructiveHint=false, idempotentHint=true), but the description adds context annotations cannot express: the side effect that the year's periods are opened for booking, the required 'book' permission, and the returned lock status. This is meaningful disclosure for a state-changing operation, though it doesn't address concurrent-lock or audit-trail implications.

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 core action and its purpose come first, followed by the usage restriction and alternatives, then side effects and permissions. Every sentence carries distinct information with no repetition of the name or schema.

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

Completeness5/5

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

With no output schema, the description compensates by stating what is returned ('Returnerar årets låsstatus'), and it covers the side effect, the permission requirement, and the alternatives. An agent has everything needed to decide and invoke 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% – both orgnr and year are fully documented in the schema, including the fiscal-year-end convention. The description adds no parameter-level meaning beyond that, 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?

States a specific verb and resource ('Låser upp ett räkenskapsår igen, alla dess månader') plus the goal ('så att rättelser kan bokföras'). It distinguishes itself from siblings by name, explicitly calling out reverse_voucher as the lighter alternative and lock_fiscal_year as the inverse operation.

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?

Gives an explicit when-to-use condition ('Använd bara när användaren uttryckligen vill rätta i ett låst år'), names a preferred alternative for the common case (reverse_voucher in an open period), and routes to the complementary tool for re-locking (lock_fiscal_year). Nothing is left to inference.

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

update_companyÄndra bolagA
Idempotent
Inspect

Ändra ett bolags inställningar (namn, ort, räkenskapsår, momsperiod, bokföringsmetod). Scope book. Argument: company_id; valfritt name, city, fiscal_year, fiscal_year_end_month (slutmånad 1-12), vat_period, accounting_method (faktura|kontant), first_fy_start/first_fy_end (ISO-datum, avvikande första räkenskapsår för nystartat bolag, högst 18 månader) och clear_first_fy=true för att ta bort det. Ändrat räkenskapsår räknar om verifikatens år; nekas om bolaget har låsta perioder.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
nameNo
company_idYes
vat_periodNo
fiscal_yearNo
first_fy_endNo
clear_first_fyNo
first_fy_startNo
accounting_methodNo
fiscal_year_end_monthNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is partly covered. The description adds real behavioral context beyond that: changing the fiscal year recalculates the year of existing vouchers, and the operation is refused when locked periods exist. It still omits required permissions/authorization context.

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

Conciseness4/5

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

Two sentences, front-loading the purpose before the argument enumeration, with zero filler. The long parameter clause is justified by the 0% schema coverage, though it is quite dense and would benefit from tighter grouping.

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 10-parameter mutation tool with no output schema and no schema-level descriptions, this covers every parameter plus the key side effect and failure condition. It stops short of describing auth requirements or what is returned, but nothing critical for a correct call is missing.

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

Parameters5/5

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

Schema description coverage is 0% across 10 parameters, so the description must carry the burden — and it does. It labels company_id as the required argument, marks the rest optional, gives the fiscal_year_end_month range (1-12), the accounting_method enum (faktura|kontant), the ISO date format and 18-month cap for first_fy_start/end, and the semantics of clear_first_fy=true.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Ändra ett bolags inställningar") and enumerates the exact settings affected (name, city, fiscal year, VAT period, accounting method). An agent can immediately distinguish this from get_company, create_company, or search_company.

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

Usage Guidelines3/5

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

Usage is implied: it modifies an existing company's settings, and it names a hard precondition (mutation is denied if the company has locked periods) plus a 'Scope book' requirement. However, it never routes to alternatives such as create_company for new entities or get_company for reads, so the when-to-use guidance stays implied rather than explicit.

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

update_customer_invoiceÄndra kundfakturaA
Idempotent
Inspect

Ändra en EJ bokförd kundfaktura (utkast). Bara medskickade fält ändras. Med lines ersätts raderna och total/moms räknas om. Scope reconcile. Argument: orgnr, invoice_id; valfritt customer_name, invoice_number, ocr, invoice_date, due_date, total_ore, vat_ore, currency, income_account, rounding_ore, lines, customer_orgnr, customer_address, customer_email, customer_reference, payment_terms, service_description, seller_address, seller_bank, seller_iban, seller_bic, seller_bankgiro, seller_contact, husarbete (ROT/RUT, samma form som i create_customer_invoice; {type: ""} tar bort husarbetet). Ändras raderna utan att husarbete skickas med behålls beloppen om de ryms, annars sänks avdraget till högsta möjliga.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNo
linesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
vat_oreNo
currencyNo
due_dateNo
husarbeteNo
total_oreNo
invoice_idYes
seller_bicNo
seller_bankNo
seller_ibanNo
invoice_dateNo
rounding_oreNo
customer_nameNo
payment_termsNo
customer_emailNo
customer_orgnrNo
income_accountNo
invoice_numberNo
seller_addressNo
seller_contactNo
seller_bankgiroNo
customer_addressNo
customer_referenceNo
service_descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the mutation/idempotency profile; the description adds substantial semantics beyond them: partial-update behavior ('Bara medskickade fält ändras'), lines replacing rows with total/VAT recalculation, husarbete sharing the create_customer_invoice shape, '{type: ""}' clearing the ROT/RUT deduction, and the fallback that retained amounts are lowered to the maximum allowed. This is exactly the non-obvious behavioral context annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the decisive constraint (only draft invoices) and the update semantics before the argument enumeration. It is dense and the 26-name argument list is close to a data dump, but given the near-empty schema it largely earns its length.

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 26-parameter mutation with no output schema and 4% schema coverage, the description covers the essential preconditions and the non-obvious update rules (lines replacement, husarbete handling). It leaves out format expectations for most optional fields and any note on what is returned/confirmed after the update.

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 only 4% (only orgnr documented), so the description must carry the burden, and it does list every argument name plus real semantics for the tricky ones (lines, husarbete, orgnr/invoice_id requiredness). It does not give formats for the many seller_*/customer_* string fields, so it falls short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Ändra = change/update) and resource (kundfaktura = customer invoice), and adds the crucial scope qualifier 'EJ bokförd (utkast)' that separates it from book_customer_invoice, cancel_customer_invoice and create_customer_invoice. An agent can identify exactly what this mutates without opening the schema.

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

Usage Guidelines4/5

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

The precondition 'EJ bokförd kundfaktura (utkast)' tells the agent when this tool is applicable and implicitly excludes booked invoices, and it names the required auth scope (reconcile). It does not explicitly name alternative tools (e.g. cancel_/credit_customer_invoice for other states), so it stops 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.

update_fixed_assetÄndra anläggningstillgångA
Idempotent
Inspect

Ändra en anläggningstillgång. Kräver behörigheten 'book'. Argument: orgnr, asset_id; valfritt name, acquired (YYYY-MM-DD), cost_ore, useful_life_months, residual_ore, gl_account, accum_depr_account, depr_expense_account, asset_type, notes, depreciation_start (YYYY-MM-DD), opening_accumulated_ore, document_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
notesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
acquiredNo
asset_idYes
cost_oreNo
asset_typeNo
gl_accountNo
document_idNo
residual_oreNo
accum_depr_accountNo
depreciation_startNo
useful_life_monthsNo
depr_expense_accountNo
opening_accumulated_oreNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the safety burden is lifted. The description adds genuinely useful context beyond that: the required 'book' permission and the accepted date format (YYYY-MM-DD) for acquired and depreciation_start.

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

Conciseness4/5

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

The description is front-loaded (purpose, then permission, then arguments) and wastes no words. The flat run-on argument list is dense but acceptable given 15 parameters.

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 15-parameter mutation tool with 7% schema coverage and no output schema, the description gives the argument inventory, permission, and date formats, but omits whether unspecified fields are left unchanged (partial-update semantics) and the units of the _ore fields, which an agent needs to call 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?

Schema description coverage is only 7%, so the description must carry the load. It names every parameter and clarifies the two date formats, but gives no semantic meaning for cost_ore, residual_ore, useful_life_months, gl_account, or the account-code fields, leaving the rest undocumented in both places.

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?

'Ändra en anläggningstillgång' states a specific verb (edit) and resource (fixed asset), so the action is unmistakable. It does not, however, explicitly differentiate itself from siblings like create_fixed_asset, delete_fixed_asset, or dispose_fixed_asset beyond the verb.

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 states the required permission ('book'), which is a useful precondition, and the presence of orgnr + asset_id implies this operates on an existing record. But it never explicitly says when to use this versus create/delete/dispose variants.

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

update_supplier_invoiceÄndra leverantörsfakturaA
Idempotent
Inspect

Ändra en ännu ej bokförd leverantörsfaktura (bara medskickade fält ändras). Med lines ([{account, net_ore, vat_rate, description?}]) ersätts raderna och total/moms räknas om; document_id kopplar/ändrar fakturans underlag (PDF) i efterhand. Scope reconcile. Argument: orgnr, invoice_id; valfritt supplier_name, invoice_number, ocr, invoice_date, due_date, total_ore, vat_ore, currency, expense_account, document_id, lines, rounding_ore, fx_rate, total_sek_ore (annan valuta: belopp i fakturans valuta, kurs eller SEK-belopp från ANVÄNDAREN).

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNo
linesNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
fx_rateNo
vat_oreNo
currencyNo
due_dateNo
total_oreNo
invoice_idYes
document_idNo
invoice_dateNo
rounding_oreNo
supplier_nameNo
total_sek_oreNo
invoice_numberNo
expense_accountNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations cover safety (readOnly=false, idempotent=true, destructive=false) but the description adds real value beyond them: partial-update semantics ('bara medskickade fält ändras'), that lines replacement triggers total/VAT recalculation, that document_id re-links the PDF afterwards, and the required OAuth scope 'reconcile'. It omits permission/auth prerequisites beyond the scope string.

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

Conciseness4/5

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

Front-loads the mutation semantics and the important lines/document_id behavior before the argument enumeration. Dense but each sentence carries information; the trailing argument list is somewhat redundant with the schema, though justified by the near-zero schema coverage.

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 16-parameter mutation tool with no output schema, the description covers scope, partial-update behavior, recalculation effects, and the meaning of the tricky currency/line fields. Missing only date formats and any statement of return value, which is a modest gap.

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 only 6%, so the description carries the burden, and it mostly does: it names all 16 arguments, documents the lines item shape ({account, net_ore, vat_rate, description?}), explains document_id's role, and clarifies fx_rate/total_sek_ore semantics for foreign currency. Format details for dates and several other fields remain undocumented, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Ändra en ännu ej bokförd leverantörsfaktura') and scopes it to unbooked invoices, which distinguishes it from book_supplier_invoice and create_supplier_invoice. An agent can identify the target object and the pre-condition without opening the schema.

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

Usage Guidelines4/5

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

The 'ännu ej bokförd' constraint plus 'bara medskickade fält ändras' clearly signals when this tool applies (draft invoices only, partial update). It does not name a specific alternative tool or state what to do for already-booked invoices, so it stops short of a full when/when-not routing.

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

upload_underlagLadda upp underlag till avstämningAInspect

Laddar upp ett underlag för en avstämning, t.ex. ett kontoutdrag, avtal eller protokoll, och kopplar det valfritt till en bilaga för ett konto och en månad. Använd för underlag som styrker ett saldo i en avstämning. Kvitton och fakturor till ett verifikat laddas upp med add_voucher_underlag, och stora filer (t.ex. foton) med create_underlag_upload. När en bilaga anges returneras dess aktuella saldo och differens, så att du kan bekräfta att underlaget matchar. Bieffekt: filen sparas bland bolagets underlag (base64, högst 15 MB). Kräver behörigheten upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
yearNo
monthNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
accountNo
bilaga_typeNo
content_typeNo
content_base64Yes

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: the side effect that the file is stored among the company's underlag, the base64/15 MB size limit, the required 'upload' permission, and the fact that supplying a bilaga returns its current balance and difference. This is rich behavioral disclosure that annotations alone (readOnly=false, destructive=false) do not provide.

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

Conciseness4/5

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

Front-loads the core purpose, then alternatives, then return behavior and constraints. It is dense but every sentence carries information; only slight compactness is lost to the multi-clause sentences.

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

Completeness5/5

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

With no output schema, the description still explains what is returned (current balance and difference) and covers side effects, size limits and permissions. Nothing an agent needs to invoke it correctly is missing for an 8-param upload 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?

Schema coverage is only 13%, so the description must compensate, and it partially does by explaining that a bilaga is linked for a given account and month and noting the base64/15 MB constraint. However, parameters such as year, bilaga_type, content_type, and name are left undocumented, so the gap is not fully closed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Laddar upp ett underlag för en avstämning') with concrete examples (kontoutdrag, avtal, protokoll) and clearly positions itself against siblings add_voucher_underlag and create_underlag_upload. An agent can distinguish it without opening any schema.

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 says when to use it ('underlag som styrker ett saldo i en avstämning') and when to use alternatives instead: receipts/invoices for a voucher go to add_voucher_underlag, large files go to create_underlag_upload. Routing is fully specified.

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

upsert_accountSkapa eller ändra kontoA
Idempotent
Inspect

Skapar ett konto i bolagets kontoplan eller ändrar namn, kontotyp, SRU-kod och momskod på ett befintligt konto. Använd när ett konto som behövs för en bokning saknas eller har fel uppgifter; slå först upp kontoplanen med list_accounts. Returnerar ok och kontonumret. Bieffekt: ändringen gäller kontot framöver; inga belopp i befintliga verifikat ändras. Kräver behörigheten book.

ParametersJSON Schema
NameRequiredDescriptionDefault
sruNoValfritt: SRU-kod som kontot summeras på i deklarationen.
nameYesKontots namn, t.ex. IT-tjänster.
typeYesKontotyp: T (tillgång), S (skuld eller eget kapital), I (intäkt) eller K (kostnad).
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
numberYesKontonummer i BAS-kontoplanen, minst fyrsiffrigt (1000 eller högre), t.ex. 6540.
vat_codeNoValfritt: kontots momskod.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare non-readOnly, idempotent, non-destructive, but the description goes well beyond them: it discloses the side effect (the change applies to the account going forward, existing voucher amounts are untouched), the required authorization ('book' permission), and the return contents. That is exactly the extra behavioral context annotations cannot convey.

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

Conciseness4/5

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

Five short sentences, each carrying distinct payload (purpose, trigger, prerequisite, return, side effect, permission) and front-loaded with the core action. Slightly dense but there is no filler 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?

Despite there being no output schema, the description states what is returned (ok plus the account number). Combined with the permission requirement, the stated side effects, and the look-up prerequisite, an agent has everything needed to invoke this mutation safely.

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%, with each of the six parameters documented including formats and examples, so the baseline is 3. The description names which fields are updatable (name, type, SRU, VAT) but adds no syntax, defaults, or constraints beyond what the schema already provides.

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 precise verb+resource pair (creates or modifies an account in the company's chart of accounts) and enumerates the fields it can touch: name, account type, SRU code and VAT code. This resolves the ambiguous 'upsert' name and lets an agent distinguish it from list_accounts and other company-edit tools.

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 gives an explicit trigger ('when an account needed for a booking is missing or has incorrect data') and names the required prerequisite/alternative action: look up the chart of accounts first with list_accounts. Both when-to-use and the ordering dependency are spelled out, leaving nothing to inference.

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

upsert_employeeSpara anställdA
Idempotent
Inspect

Skapa eller uppdatera en anställd. Utan employee_id skapas en ny (personnummer krävs då); med employee_id uppdateras den och BARA medskickade fält ändras (personnummer behövs inte). Scope payroll. Argument: orgnr; valfritt employee_id, personnummer, first_name, last_name, tax_table, tax_column, monthly_salary_ore, employer_fee_bps, bank_account, active, note. Timanställda: hourly_rate_ore (timlön), overtime_rate_ore (ersättning per övertidstimme), ob_rate_ore (OB-tillägg per timme) och vacation_pay_bps (semesterersättning som betalas med varje lön, 1200 = 12 %); de används av get_payroll_time_basis.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
orgnrYesBolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies.
activeNo
last_nameNo
tax_tableNo
first_nameNo
tax_columnNo
employee_idNo
ob_rate_oreNo
bank_accountNo
personnummerNo
hourly_rate_oreNo
employer_fee_bpsNo
vacation_pay_bpsNo
overtime_rate_oreNo
monthly_salary_oreNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond them: partial-update semantics ('BARA medskickade fält ändras' — unspecified fields are left untouched), a conditional required field, and the payroll scope gate. It does not mention failure behavior or auth/permission detail beyond scope.

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

Conciseness4/5

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

Front-loaded with the upsert decision rule, then the scope, then the argument glossary. The raw argument list repeats schema property names, which is mildly redundant, but it is compact for a 16-parameter tool and every clause adds either a condition or a unit meaning.

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 16-parameter mutation with no output schema and near-zero schema documentation, the description covers the create/update branch, the conditionally required field, the partial-update rule, scope, and the special unit conventions. What is missing (return value, tax table meaning, error behavior) is secondary for correct invocation.

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 only 6%, so the description carries nearly the whole burden, and it largely does: it enumerates all 16 arguments and, critically, explains the time-employee fields (hourly_rate_ore, overtime_rate_ore, ob_rate_ore, vacation_pay_bps) including the non-obvious scale convention '1200 = 12 %'. It leaves tax_table/tax_column, employer_fee_bps units, and employee_id format unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Skapa eller uppdatera en anställd') and immediately disambiguates against the plain create/update siblings by explaining the upsert key logic. An agent can tell this apart from delete_employee, list_employees or calc_payroll without opening the schema.

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

Usage Guidelines4/5

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

Gives explicit conditional routing: no employee_id ⇒ create (personnummer required), with employee_id ⇒ update (personnummer not needed). It also names the consuming sibling get_payroll_time_basis for the hourly-rate fields. It stops short of stating when NOT to use it (e.g. bulk import or payroll runs), so it is strong but not fully exhaustive.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Addedget_integration_record
    • Addedlist_integration_data
    • Addedresolve_integration_records
  2. 8 tool updates
    • Changedattach_inbox_item2 fields changed
      • addedInput schema / properties / category / description
        Added value: +"Valfritt: avtal, policy, protokoll, attestordning, leverantorsfaktura eller ovrigt."
      • addedInput schema / properties / inbox_id / description
        Added value: +"Inkorgspostens id (heltal), t.ex. 18. Hämta med list_inbox."
    • Changedbook_customer_invoice1 field changed
      • addedInput schema / properties / invoice_id / description
        Added value: +"Kundfakturans id (heltal), t.ex. 42. Hämta med list_customer_invoices."
    • Changedbook_supplier_invoice3 fields changed
      • addedInput schema / properties / fx_rate / description
        Added value: +"Valfritt: växelkurs i SEK per 1 enhet som användaren har angett, t.ex. 11.42. Bara för faktura i annan valuta som saknar kurs."
      • addedInput schema / properties / invoice_id / description
        Added value: +"Leverantörsfakturans id (heltal), t.ex. 42. Hämta med list_supplier_invoices."
      • addedInput schema / properties / total_sek_ore / description
        Added value: +"Valfritt, i stället för fx_rate: fakturans totalbelopp i SEK, i öre, som användaren har angett."
    • Changededit_annual_report_draft2 fields changed
      • addedInput schema / properties / payload / description
        Added value: +"Hela utkastet i samma form som payload i read_annual_report_draft, med belopp i hela kronor."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025)."
    • Changedmark_rot_rut_request_submitted2 fields changed
      • addedInput schema / properties / request_id / description
        Added value: +"Begärans id (heltal), t.ex. 3. Hämta med list_rot_rut."
      • addedInput schema / properties / submitted / description
        Added value: +"true för inskickad (standard), false för att ta bort markeringen."
    • Changedreverse_supplier_payment1 field changed
      • addedInput schema / properties / invoice_id / description
        Added value: +"Leverantörsfakturans id (heltal), t.ex. 42. Hämta med list_supplier_invoices."
    • Changedunlock_fiscal_year1 field changed
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025)."
    • Changedupsert_account5 fields changed
      • addedInput schema / properties / name / description
        Added value: +"Kontots namn, t.ex. IT-tjänster."
      • addedInput schema / properties / number / description
        Added value: +"Kontonummer i BAS-kontoplanen, minst fyrsiffrigt (1000 eller högre), t.ex. 6540."
      • addedInput schema / properties / sru / description
        Added value: +"Valfritt: SRU-kod som kontot summeras på i deklarationen."
      • addedInput schema / properties / type / description
        Added value: +"Kontotyp: T (tillgång), S (skuld eller eget kapital), I (intäkt) eller K (kostnad)."
      • addedInput schema / properties / vat_code / description
        Added value: +"Valfritt: kontots momskod."
  3. 17 tool updates
    • Changeddownload_ink2_sru1 field changed
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025). Utelämna för det senaste."
    • Changedgenerate_ixbrl1 field changed
      • addedInput schema / properties / user_inputs / description
        Added value: +"Årsredovisningsguidens alla uppgifter, samma fält som i set_arsredovisning_inputs, med belopp i hela kronor. Hämta t.ex. payload.user_inputs med read_annual_report_draft."
    • Changedget_balance_sheet1 field changed
      • addedInput schema / properties / balansdag / description
        Added value: +"Datum som saldona gäller per, ÅÅÅÅ-MM-DD, t.ex. 2026-06-30."
    • Changedget_fixed_asset1 field changed
      • addedInput schema / properties / asset_id / description
        Added value: +"Tillgångens id (heltal), t.ex. 4. Hämta med list_fixed_assets."
    • Changedget_general_ledger3 fields changed
      • addedInput schema / properties / account / description
        Added value: +"Valfritt: visa bara ett konto, t.ex. 1930."
      • addedInput schema / properties / end / description
        Added value: +"Till och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-03-31."
      • addedInput schema / properties / start / description
        Added value: +"Från och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-01-01."
    • Changedget_income_statement2 fields changed
      • addedInput schema / properties / end / description
        Added value: +"Till och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-03-31."
      • addedInput schema / properties / start / description
        Added value: +"Från och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-01-01."
    • Changedget_open_reconciliations2 fields changed
      • addedInput schema / properties / month / description
        Added value: +"Månad 1 till 12, t.ex. 3 för mars. Avstämningen gäller månadens sista dag."
      • addedInput schema / properties / year / description
        Added value: +"Kalenderår för månaden, t.ex. 2026."
    • Changedget_reconciliation2 fields changed
      • addedInput schema / properties / month / description
        Added value: +"Månad 1 till 12, t.ex. 3 för mars. Avstämningen gäller månadens sista dag."
      • addedInput schema / properties / year / description
        Added value: +"Kalenderår för månaden, t.ex. 2026."
    • Changedget_trial_balance1 field changed
      • addedInput schema / properties / balansdag / description
        Added value: +"Datum som saldona gäller per, ÅÅÅÅ-MM-DD, t.ex. 2026-06-30."
    • Changedget_voucher1 field changed
      • addedInput schema / properties / voucher_id / description
        Added value: +"Verifikatets id (heltal), t.ex. 812. Hämta med list_vouchers."
    • Changedlist_customer_invoices1 field changed
      • addedInput schema / properties / status / description
        Added value: +"Valfritt filter: ej_bokford (utkast), obetald (allt med saldo kvar, även förfallna och delbetalda), forfallen, under_betalning (delbetald), slutbetald eller makulerad. Utelämna för alla."
    • Changedlist_payroll_runs2 fields changed
      • addedInput schema / properties / month / description
        Added value: +"Valfritt: månad 1 till 12. Anges den följer AGI-sammanställningen för månaden med."
      • addedInput schema / properties / year / description
        Added value: +"Kalenderår för lönekörningarna, t.ex. 2026."
    • Changedlist_proposals2 fields changed
      • addedInput schema / properties / month / description
        Added value: +"Valfritt: månad 1 till 12 för perioden förslaget gäller."
      • addedInput schema / properties / year / description
        Added value: +"Valfritt: kalenderår för perioden förslaget gäller, t.ex. 2026."
    • Changedlist_time_entries4 fields changed
      • addedInput schema / properties / date_from / description
        Added value: +"Valfritt: från och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-10-01."
      • addedInput schema / properties / date_to / description
        Added value: +"Valfritt: till och med datum, ÅÅÅÅ-MM-DD, t.ex. 2026-10-31."
      • addedInput schema / properties / employee_id / description
        Added value: +"Valfritt: den anställdes id (heltal), från list_employees."
      • addedInput schema / properties / status / description
        Added value: +"Valfritt: rapporterad, attesterad, avvisad eller utbetald."
    • Changedlist_vouchers4 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Antal verifikat per sida, standard 200."
      • addedInput schema / properties / month / description
        Added value: +"Valfritt: kalendermånad 1 till 12 för verifikatets datum."
      • addedInput schema / properties / offset / description
        Added value: +"Antal verifikat att hoppa över, för nästa sida. Standard 0."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2026."
    • Changedread_annual_report1 field changed
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025). Utelämna för det senaste."
    • Changedread_tax2 fields changed
      • addedInput schema / properties / month / description
        Added value: +"Används inte; beräkningen gäller alltid hela räkenskapsåret."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025). Utelämna för det senaste."
  4. 113 tool updates
    • Changedadd_bilaga_row7 fields changed
      • addedInput schema / properties / account / description
        Added value: +"Kontonummer i BAS-kontoplanen, t.ex. 1930."
      • addedInput schema / properties / amount_ore / description
        Added value: +"Belopp i öre (heltal), t.ex. 1250000 för 12 500 kr. Negativt för kreditsaldo."
      • addedInput schema / properties / bilaga_type / description
        Added value: +"Avstämningens typ som den visas i get_open_reconciliations, t.ex. BANK eller GL_ACCOUNT."
      • addedInput schema / properties / description / description
        Added value: +"Radens text, t.ex. Saldo enligt kontoutdrag 2026-03-31."
      • addedInput schema / properties / month / description
        Added value: +"Avstämningsmånad 1 till 12, t.ex. 3 för mars."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / year / description
        Added value: +"Kalenderår för avstämningsmånaden, t.ex. 2026."
    • Changedadd_fiscal_year1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedadd_time_entry1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedadd_voucher_underlag4 fields changed
      • addedInput schema / properties / content_base64 / description
        Added value: +"Filens innehåll, base64-kodat. Passar små filer; för stora filer, använd create_underlag_upload."
      • addedInput schema / properties / name / description
        Added value: +"Filnamn med filändelse, t.ex. kvitto-2026-03-14.pdf."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / voucher_id / description
        Added value: +"Valfritt: id (heltal) på verifikatet som underlaget ska kopplas till, t.ex. från list_vouchers eller svaret från book_voucher. Utelämna för att lägga underlaget i underlagspoolen."
    • Changedapprove_and_book_vat1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedapprove_voucher_draft1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedattach_inbox_item1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedattach_underlag4 fields changed
      • addedInput schema / properties / document_ids / description
        Added value: +"Valfritt: lista med dokument-id (heltal) från inkorgen eller dokumentarkivet, t.ex. [12, 15]. Hämta med list_available_underlag."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / underlag_ids / description
        Added value: +"Valfritt: lista med underlags-id (heltal) från underlagspoolen, t.ex. [7]. Hämta med list_available_underlag."
      • addedInput schema / properties / voucher_id / description
        Added value: +"Id (heltal) på verifikatet som underlagen ska kopplas till, t.ex. från list_vouchers."
    • Changedbook_customer_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedbook_supplier_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedbook_voucher1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedbook_year_end_step1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcalc_payroll1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcancel_customer_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcancel_supplier_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcompute_tax5 fields changed
      • addedInput schema / properties / balance_sheet / description
        Added value: +"Valfria rader i balansräkningen [{label, amount}], belopp i kronor, som ersätter de rader som annars härleds ur bokslutet."
      • addedInput schema / properties / income_statement / description
        Added value: +"Valfria rader i resultaträkningen [{label, amount}], belopp i kronor, som ersätter de rader som annars härleds ur bokslutet."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / user_inputs / description
        Added value: +"Valfria justeringar som i årsredovisningsguidens skattesteg, t.ex. INK2S-justeringar och periodiseringsfond. Utelämna för att räkna på bokslutet som det är."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsår relativt bokslutet: 0 = aktuellt räkenskapsår (standard), -1 = föregående."
    • Changedcreate_company1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_customer_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_fixed_asset1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_proposal1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_rot_rut_request1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_supplier_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_underlag_upload3 fields changed
      • addedInput schema / properties / content_type / description
        Added value: +"Valfritt: filens MIME-typ, t.ex. image/jpeg eller application/pdf."
      • addedInput schema / properties / name / description
        Added value: +"Filnamn med filändelse, t.ex. kvitto-2026-03-14.jpg."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcreate_voucher1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcredit_customer_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedcustomer_outstanding1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changeddelete_document1 field changed
      • addedInput schema / properties / doc_id / description
        Added value: +"Dokumentets id (heltal), t.ex. 31. Hämta med list_documents."
    • Changeddelete_employee1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changeddelete_fixed_asset1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changeddelete_rot_rut_request1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changeddelete_time_entry1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changeddispose_fixed_asset1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changeddownload_ink2_sru1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changededit_annual_report_draft1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changededit_voucher_draft1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedexport_report1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedgenerate_ixbrl1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedgenerate_supplier_invoice_pdf1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_arsredovisning_status1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_balance_sheet1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_company1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_customer_invoice2 fields changed
      • addedInput schema / properties / invoice_id / description
        Added value: +"Kundfakturans id (heltal), t.ex. 42. Hämta med list_customer_invoices."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_fixed_asset1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_general_ledger1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_income_statement1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_open_reconciliations1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_overview1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_payroll_time_basis1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_payslip1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_reconciliation1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_rot_rut_request_file1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_supplier_invoice2 fields changed
      • addedInput schema / properties / invoice_id / description
        Added value: +"Leverantörsfakturans id (heltal), t.ex. 42. Hämta med list_supplier_invoices."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_time_reporting1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_trial_balance1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_vat_return1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_voucher1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedget_year_end_checklist2 fields changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025)."
    • Changedimport_sie1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_accounts1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_available_underlag1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_customer_invoices1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_employees1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_findings1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_fiscal_years1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_fixed_assets1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_inbox1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_payroll_runs1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_policies1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Valfritt: bolagets organisationsnummer, t.ex. 559900-1004, för att bara visa det bolagets policyer. Utelämna för alla bolag du har åtkomst till."
    • Changedlist_proposals1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_rot_rut1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_supplier_invoices2 fields changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / status / description
        Added value: +"Valfritt filter: ej_bokford, obetald (allt med saldo kvar, även förfallna och delbetalda), forfallen, under_betalning, slutbetald eller makulerad. Utelämna för alla."
    • Changedlist_supplier_underlag1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_time_entries1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_vat_periods1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_voucher_drafts1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlist_vouchers1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedlock_fiscal_year1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedmark_rot_rut_request_submitted1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedmark_submitted1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedpost_depreciation1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedprepare_bilaga1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedpreview_depreciation1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedpropose_bank_match1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedpropose_voucher1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedread_annual_report1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedread_annual_report_draft2 fields changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025)."
    • Changedread_checklist1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedread_statutory_status2 fields changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / year / description
        Added value: +"Räkenskapsåret, angivet som året då räkenskapsåret slutar, t.ex. 2025 (för 2024-07-01 till 2025-06-30 anges 2025)."
    • Changedread_tax1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedregister_customer_payment1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedregister_rot_rut_payout1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedregister_supplier_payment1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreject_voucher_draft1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreverse_customer_payment1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreverse_payroll_run1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreverse_rot_rut_payout1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreverse_supplier_payment1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreverse_voucher1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedrevert_prepare_bilaga1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedreview_time_entries1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedrun_payroll1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedset_arsredovisning_inputs1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedset_bilaga_spec6 fields changed
      • addedInput schema / properties / account / description
        Added value: +"Kontonummer i BAS-kontoplanen, t.ex. 1930."
      • addedInput schema / properties / bilaga_type / description
        Added value: +"Avstämningens typ som den visas i get_open_reconciliations, t.ex. BANK eller GL_ACCOUNT."
      • addedInput schema / properties / month / description
        Added value: +"Avstämningsmånad 1 till 12, t.ex. 3 för mars."
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
      • addedInput schema / properties / rows / description
        Added value: +"Alla rader som ska gälla: [{description, amount_ore}], belopp i öre. Skicka [] för att tömma."
      • addedInput schema / properties / year / description
        Added value: +"Kalenderår för avstämningsmånaden, t.ex. 2026."
    • Changedskip_year_end_step1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedtransfer_prior_year_result1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedundo_year_end_step1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedunlock_fiscal_year1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedupdate_customer_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedupdate_fixed_asset1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedupdate_supplier_invoice1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedupload_underlag1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedupsert_account1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
    • Changedupsert_employee1 field changed
      • addedInput schema / properties / orgnr / description
        Added value: +"Bolagets organisationsnummer, 10 siffror med eller utan bindestreck, t.ex. 559900-1004. Hämta med list_companies."
  5. 121 tool updates
    • First observedadd_bilaga_row
    • First observedadd_fiscal_year
    • First observedadd_instruction
    • First observedadd_time_entry
    • First observedadd_voucher_underlag
    • First observedapprove_and_book_vat
    • First observedapprove_voucher_draft
    • First observedattach_inbox_item
    • First observedattach_underlag
    • First observedbook_customer_invoice
    • First observedbook_supplier_invoice
    • First observedbook_voucher
    • First observedbook_year_end_step
    • First observedcalc_payroll
    • First observedcancel_customer_invoice
    • First observedcancel_supplier_invoice
    • First observedcompute_tax
    • First observedcreate_company
    • First observedcreate_customer_invoice
    • First observedcreate_fixed_asset
    • First observedcreate_proposal
    • First observedcreate_rot_rut_request
    • First observedcreate_supplier_invoice
    • First observedcreate_underlag_upload
    • First observedcreate_voucher
    • First observedcredit_customer_invoice
    • First observedcustomer_outstanding
    • First observeddelete_document
    • First observeddelete_employee
    • First observeddelete_fixed_asset
    • First observeddelete_rot_rut_request
    • First observeddelete_time_entry
    • First observeddispose_fixed_asset
    • First observeddownload_ink2_sru
    • First observededit_annual_report_draft
    • First observededit_document
    • First observededit_voucher_draft
    • First observedexport_report
    • First observedgenerate_ixbrl
    • First observedgenerate_supplier_invoice_pdf
    • First observedget_arsredovisning_status
    • First observedget_balance_sheet
    • First observedget_company
    • First observedget_customer_invoice
    • First observedget_fixed_asset
    • First observedget_general_ledger
    • First observedget_income_statement
    • First observedget_open_reconciliations
    • First observedget_overview
    • First observedget_payroll_time_basis
    • First observedget_payslip
    • First observedget_reconciliation
    • First observedget_rot_rut_request_file
    • First observedget_supplier_invoice
    • First observedget_time_reporting
    • First observedget_trial_balance
    • First observedget_vat_return
    • First observedget_voucher
    • First observedget_year_end_checklist
    • First observedimport_sie
    • First observedlist_accounts
    • First observedlist_available_underlag
    • First observedlist_companies
    • First observedlist_customer_invoices
    • First observedlist_documents
    • First observedlist_employees
    • First observedlist_findings
    • First observedlist_fiscal_years
    • First observedlist_fixed_assets
    • First observedlist_inbox
    • First observedlist_payroll_runs
    • First observedlist_policies
    • First observedlist_proposals
    • First observedlist_rot_rut
    • First observedlist_supplier_invoices
    • First observedlist_supplier_underlag
    • First observedlist_time_entries
    • First observedlist_vat_periods
    • First observedlist_voucher_drafts
    • First observedlist_vouchers
    • First observedlock_fiscal_year
    • First observedmark_rot_rut_request_submitted
    • First observedmark_submitted
    • First observedpost_depreciation
    • First observedprepare_bilaga
    • First observedpreview_depreciation
    • First observedpropose_bank_match
    • First observedpropose_voucher
    • First observedread_annual_report
    • First observedread_annual_report_draft
    • First observedread_checklist
    • First observedread_policy
    • First observedread_statutory_status
    • First observedread_tax
    • First observedread_underlag_image
    • First observedregister_customer_payment
    • First observedregister_rot_rut_payout
    • First observedregister_supplier_payment
    • First observedreject_voucher_draft
    • First observedreverse_customer_payment
    • First observedreverse_payroll_run
    • First observedreverse_rot_rut_payout
    • First observedreverse_supplier_payment
    • First observedreverse_voucher
    • First observedrevert_prepare_bilaga
    • First observedreview_time_entries
    • First observedrun_payroll
    • First observedsearch_company
    • First observedset_arsredovisning_inputs
    • First observedset_bilaga_spec
    • First observedskip_year_end_step
    • First observedtransfer_prior_year_result
    • First observedundo_year_end_step
    • First observedunlock_fiscal_year
    • First observedupdate_company
    • First observedupdate_customer_invoice
    • First observedupdate_fixed_asset
    • First observedupdate_supplier_invoice
    • First observedupload_underlag
    • First observedupsert_account
    • First observedupsert_employee

Publisher details

Operator
Kvickd · Publisher source
Operator website
https://www.kvickd.com
Vendor relationship
First-party · Publisher source
Restrictions
Requires a Kvickd account (free plan available, no credit card). The free plan includes 10 AI credits per month; Pro (SEK 99/month excl. VAT) gives unlimited AI usage. Built for Swedish limited companies (aktiebolag) reporting under K2. Sign-in is OAuth with automatic client registration; no custom OAuth app or API key is needed. · Publisher source

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Swedish accounting data analysis (SIE4, Spiris/Visma) with tools for reading financial records, generating reports, and preparing draft actions under strict human approval.
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables MCP clients to read invoices, supplier invoices, vouchers, financial reports, and AR/AP ageing from a Swedish accounting system, with optional draft-only write tools for customers, offers, orders, and unsent invoice drafts after confirmation. It also exposes many other read endpoints through a safety allowlist.
    26
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to read and write Bokio accounting data for one company through 85 tools covering invoices, customers, suppliers, journal entries, chart of accounts, fiscal years, items, tags, uploads, SIE export, and bank payments.
    40
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables users to work with Fortnox from an AI assistant to understand financial results, costs and liquidity, manage receipts and bookkeeping proposals, prepare invoices, track payments, and handle multiple companies with self-hosting. Manual verifications require approval before bookkeeping, with Fortnox as the persistent source of financial data.
    AGPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources