Merit MCP
The Merit MCP server provides an unofficial MCP interface to the Merit Aktiva accounting system, enabling AI assistants to read and write live accounting data via natural language, with a two-step preview/confirm flow for all write operations.
Read Operations
Master data: customers, customer groups, vendors, items, taxes, banks, accounts, projects, cost centers, departments, units of measure, financial years, and dimensions
Sales: invoices, offers, recurring invoices, recurring invoice addresses, and invoice PDFs
Purchases: purchase invoices and purchase orders
Financial: payments, payment types, payment imports, expense/income payments, and GL batches
Inventory: locations, movements, fixed assets, fixed asset locations, prices, and discounts
Reports: customer debts, customer payments, profit/loss, balance sheets, inventory, sales, and purchase reports
Write Operations (two-step preview → confirm required)
Customers & Vendors: create or update customers and vendors
Sales: create/delete sales invoices, create credit invoices, send invoices by email or e-invoice
Purchases: create purchase invoices
Financial: create purchase invoice payments (including multi-currency), upsert tax rates, add/update items, and add dimensions
Safety & Utility
Two-step confirmation: all write tools return a
confirmation_codethat must be explicitly confirmed before changes are appliedSetup check:
get_setup_instructionsreports API credential status and configuration guidanceTool catalog:
merit://tools/cataloglists all available tools and their required inputsBuilt-in prompts: guided workflows for setup, creating sales invoices, and finding/creating customers
Merit Unofficial MCP Server
English summary: Unofficial MCP server and Python SDK for the Merit Aktiva accounting REST API. Exposes 32 tools, 3 workflow prompts, and 2 resources to AI coding assistants (Claude Code, Cursor, Windsurf, Gemini CLI, etc.), letting you read and write accounting data — customers, invoices, payments, taxes, and more — through natural-language prompts. Write operations use a two-step preview/confirm flow to prevent accidental changes. Requires a Merit Aktiva Premium account and API credentials (
MERIT_API_ID,MERIT_API_KEY). Run/install instantly viauvx. Experimental and unofficial — use at your own risk.
MCP server ja Pythoni SDK Merit Aktiva REST API jaoks. MCP server eksponeerib praegu 32 tööriista, 3 töövoo prompti ja 2 ressurssi. See on mõeldud töötama MCP klientidega nagu Claude Code, Codex CLI, Cursor, Windsurf, Cline, Gemini CLI ja sarnased tööriistad.
Aktiivne arendus. See projekt areneb endiselt. MCP kiht on kasutatav, kuid see ei ole veel täisfunktsionaalne raamatupidamise töövoosüsteem. Kontrolli iga kirjutava operatsiooni tulemust live-raamatupidamisandmete vastu enne selle usaldamist.
Vastutusest loobumine
See on eksperimentaalne ja mitteametlik projekt. See ei ole seotud AS Merit Tarkvaraga, ei ole nende poolt toetatud ega ametlikult kinnitatud.
Kasutad seda täielikult omal vastutusel. See tarkvara saab lugeda ja muuta live-raamatupidamisandmeid, sh kliente, hankijaid, artikleid, arveid, makseid, makse ja dimensioone. Autorid ei vastuta vigaste kannete, kustutatud kirjete ega muu kaudse kahju eest.
Seda tarkvara kasutades nõustud, et:
vastutad ise kõigi loodud või muudetud raamatupidamisandmete kontrollimise eest
peaksid enne tähtsate live-andmete vastu kasutamist põhjalikult testima
tegemist on eksperimentaalse tarkvaraga ilma igasuguse garantiita
Related MCP server: e-arveldaja MCP Server
Kasutaja API võtmed
Server vajab järgmisi võtmeid, mille saab Meriti Aktivast Ettevõtte andmete > API Seadistustes, vajalik piisav kasutaja õiguste tase (haldaja) ja pakett (Premium või parem):
MERIT_API_IDMERIT_API_KEYMERIT_API_COUNTRYon valikuline,EEvõiPL, vaikimisiEE
Käsurea-vahendites saab need panna keskkonda (environment variables):
export MERIT_API_ID=your-api-id
export MERIT_API_KEY=your-api-key
export MERIT_API_COUNTRY=EEKui MERIT_API_ID või MERIT_API_KEY puudub, võib käivituda server seadistusrežiimis, aga kindlam on need seadistada json failis nagu kirjas allpool. Seadistusrežiimis:
get_setup_instructionsjääb kättesaadavaksressursid jäävad kättesaadavaks
promptid jäävad kättesaadavaks
API-põhised tööriistad tagastavad seadistusjuhise ega kutsu Merit API-t
Paigaldus ja seadistus
Eeltingimused
Arvutisse peab olema paigaldatud uv — kaasaegne ja kiire Pythoni pakihaldur.
1. Lisa MCP server
Server käivitatakse lokaalselt taustal ja ühendub otse Meriti pilveteenusega. Kolmandaid osapooli ei kaasata.
Claude Code: (käsurealt)
claude mcp add merit-api -- uvx merit-unofficial-mcp-serverTeised tööriistad JSON-konfiguratsiooniga (nt. Claude Desktop, Cursor, Cline):
{
"mcpServers": {
"merit-api": {
"command": "uvx",
"args": ["merit-unofficial-mcp-server"],
"env": {
"MERIT_API_ID": "your-api-id-here",
"MERIT_API_KEY": "your-api-key-here",
"MERIT_API_COUNTRY": "EE"
}
}
}
}Seadistusfail Claude Desktop-is:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Codex CLI TOML-konfiguratsiooniga:
[mcp_servers.merit-api]
command = "uvx"
args = ["merit-unofficial-mcp-server"]uvx tõmbab ja käivitab serveri otse PyPI registrist, tagades et alati on olemas vajalikud Pythoni moodulid ilma masinat risustamata.
Tööriist | Konfiguratsioonifail |
Claude Code |
|
Codex CLI |
|
Gemini CLI |
|
Cursor | projekti |
Windsurf |
|
Cline | VS Code seadetes |
2. Käivitamine lähtekoodist (arenduseks)
Kui soovite serverit lokaalselt muuta või testida, kloonige repositoorium ja käivitage see uv workspace toel:
git clone https://github.com/jaakla/merit_api.git
cd merit_api
# Paigalda lokaalsed sõltuvused (sh pytest arendustestide jaoks)
uv sync --all-extras
# Käivita MCP server otse lokaalsest koodist
uv run --package merit-unofficial-mcp-server merit-unofficial-mcpMCP promptid
Server sisaldab kolme lihtsat näidisprompti, kuid kasutada saab ka mistahes teistsuguseid, keerukamaid käske:
Prompt | Kirjeldus |
| Selgitab, kuidas seadistada vajalikud keskkonnamuutujad ja server käivitada |
| Juhendab assistenti kliendi leidmisel ja müügiarve loomisel |
| Juhendab assistenti kliendi andmete otsimisel ja loomisel |
Ressursid
Ressurss | Kirjeldus |
| Serveri metaandmed, seadistusrežiimi staatus, toetatud env muutujad ja hoiatus |
| Tööriistade kataloog koos konsolideeritud tööriistade, nende action'ite ja nõutud väljadega |
Tööriistad (tools)
Merit võimaldab kümneid erinevaid käske, see MCP server koondab need üldistatud tööriistadeks, et vältida liiga pikka nimekirja käskudest. Üldine tööriist kasutab action välja, et valida konkreetne Merit'i workflow.
Lugemise, Read-only tööriistad:
merit_read_master_datamerit_read_salesmerit_read_purchasesmerit_read_financialmerit_read_inventorymerit_read_reports
Muutmise/kirjutamise tööriistad toimivad kahe käsuna, et vältida vigaste andmete sisestust:
merit_write_customers(eelvaade) jamerit_write_customers_confirm(kinnitatud muutmine)merit_write_sales(eelvaade) jamerit_write_sales_confirm(kinnitatud muutmine)merit_write_purchases(eelvaade) jamerit_write_purchases_confirm(kinnitatud muutmine)merit_write_financial(eelvaade) jamerit_write_financial_confirm(kinnitatud muutmine)
Kirjutavad tööriistad on kahe sammuga. Esimene merit_write_* kutse ei tee Merit'is muudatusi: see tagastab eelvaate, confirmation_tool nime ja unikaalse confirmation_code väärtuse. Pärast eelvaate ülevaatamist tuleb sama action'i ja samade argumentidega kutsuda vastavat *_confirm tööriista ning anda kaasa confirmation_code ja confirmed=true. Kood on seotud konkreetsete argumentidega ja seda ei saa kasutada teise muudatuse kinnitamiseks.
NB! mõned AI mudelid püüavad olla "abivalmid" ja proovivad teha _confirm käsku automaatselt ise. Ole tähelepanelik, enne kui vajutad "Allow".
Kõigi tööriistade täielik action-kataloog on ressursis merit://tools/catalog.
Kasutusnäited
Kui MCP server on ühendatud, saad AI assistendiga suhelda eesti, inglise (tegelikult enamvähem mistahes) keeles.
Uuri põhiandmeid
"Näita kliente, mis vastavad nimele Acme"
Töövahend peaks kasutama merit_read_master_data tööriista action'iga customers_list ja filters={"Name": "Acme"}.
Loo või uuenda kliendi andmeid
"Loo uus klient Example OÜ"
Töövahend peaks koostama kliendi andmete faili ja kutsuma merit_write_customers tööriista action'iga customer_upsert.
Merit nõuab teatud (ja kahjuks mitte dokumenteeritud) minimaalset komplekti andmeid, seega esimene katse võib ebaõnnestuda. Siiski paremad AI mudelid oskavad neid automaatselt juurde otsida veebist, küsida kasutajalt ja ka mitu korda erinevalt andmeid proovida, kuni toimib.
Loo müügiarve
"Loo kliendile Acme müügiarve aprilli konsultatsiooniteenuse eest"
Töövahend saab kasutada merit_read_master_data action'iga customers_list, vajadusel find-or-create-customer, ja seejärel merit_write_sales action'iga sales_invoice_create.
merit_write_sales tagastab eelvaate; arve luuakse alles merit_write_sales_confirm kutsega, kui kasutaja on eelvaate üle vaadanud.
Uuri sisestatud andmeid
"Mis pangad, kulukohad, projektid ja maksud Merit'is olemas on?"
Assistant saab kasutada merit_read_master_data tööriista action'eid banks_list, cost_centers_list, projects_list ja taxes_list.
Kontrolli seadistuse seisu
"Kontrolli, kas Merit MCP server on õigesti seadistatud ja saan Meritiga ühenduda"
Assistant saab kasutada get_setup_instructions ja merit://server/info.
SDK kasutamine
See repository sisaldab ka eraldi avatud koodiga Pythoni SDK projekti kataloogis merit_api/. Siit saad kontrollida, mida täpselt tarkvara teeb, ja arendusoskuse korral pakkuda välja koodiparandusi ja -täiendusi.
Näide:
from merit_api import MeritAPI
client = MeritAPI(api_id="YOUR_API_ID", api_key="YOUR_API_KEY")
customers = client.customers.get_list()
invoices = client.sales.get_invoices(
PeriodStart="2024-01-01",
PeriodEnd="2024-01-31",
)SDK sisaldab praegu:
deterministlikku request body serialiseerimist signeerimiseks
seadistatavat timeouti ja retry käitumist (kordusi tehakse ainult idempotentsetele päringutele; muteerivaid kirjutusi nagu arve või makse loomine ei korrata, sest aegunud, kuid serveris juba kinnitatud päringu kordamine looks duplikaadi)
request/response logger hooke koos saladuste redaktsiooniga
valikulist idempotency headeri genereerimist (tähelepanu: Merit API ei dedubleeri selle headeri põhjal — see ei ole duplikaadivastane garantii, vaid valmidus juhuks, kui server seda kunagi toetab)
ostuarvete ja maksete duplikaadikaitset: vaikimisi ei looda sama tarnija +
BillNoostuarvet ega samaBillNo+ summaga makset teist korda; möödaminekuks annaallow_duplicate=TrueAPI taseme vigade haldust, eristust HTTP 200 vastustest
Uuendamine
Uuendamise viis sõltub sellest, kuidas serverit käivitad.
Kui kasutad uvx
Kuna server on avaldatud PyPI-s, laadib uvx automaatselt alla uusima versiooni. Kui soovite olemasolevat paigaldust käsitsi viimasele versioonile uuendada, käivitage:
uvx --upgrade merit-unofficial-mcp-serverSeejärel taaskäivita oma AI töövahend.
Kui jooksutad algkoodist, lokaalsest GIT checkout'ist
git pull
# Kuna kasutusel on uv workspace, siis uv sync teeb kõik automaatselt korda:
uv syncSeejärel taaskäivita oma AI töövahend.
Arendus
Repositoorium on jaotatud ühisesse uv workspace'i kuuluvateks alamprojektideks:
merit_api/ SDK jaoks (pakett:
merit-api)mcp/ Pythoni MCP serveri jaoks (pakett:
merit-unofficial-mcp-server)root
pyproject.tomlworkspace seadete jaoks
SDK testid:
uv run --package merit-api pytestMCP testid:
uv run --package merit-unofficial-mcp-server pytestSDK live integratsioonitestid on opt-in:
MERIT_API_INTEGRATION_TEST=true uv run --package merit-api pytestIga Merit päringu ja vastuse väljatrükkimiseks lisa MERIT_API_VERBOSE=true ja pytesti -s lipp:
MERIT_API_INTEGRATION_TEST=true MERIT_API_VERBOSE=true uv run --package merit-api pytest -sVersiooni avaldamine (hooldajale)
Mõlemad paketid — merit-api (SDK) ja merit-unofficial-mcp-server (MCP server) — avaldatakse PyPI-sse käsitsi; automaatset CI avaldusvoogu ei ole. Versioonid hoitakse lukus, st kõik tõstetakse korraga samale numbrile.
Tõsta versioon samale numbrile kõigis neljas kohas:
package.json— väliversionmcp/pyproject.toml—versionning sõltuvuse pinmerit-api>=X.Y.Zmerit_api/pyproject.toml—version
Lisa muudatused
CHANGELOG.md-sse uue versiooni pealkirja alla.Värskenda lukufaili:
uv lockJooksuta testid:
uv run --package merit-api pytest uv run --package merit-unofficial-mcp-server pytestTee commit ja silt:
git add -A git commit -m "release: vX.Y.Z" git tag -a vX.Y.Z -m "vX.Y.Z"Lükka GitHubi:
git push origin main git push origin vX.Y.ZEhita paketid (tulemused tekivad kausta
dist/):uv build --package merit-api uv build --package merit-unofficial-mcp-serverAvalda PyPI-sse — kõigepealt SDK (
merit-api), sest MCP server sõltub sellest, ja alles siis MCP server. Vajab PyPI API tokenit (UV_PUBLISH_TOKENkeskkonnamuutuja või lipp--token):uv publish dist/merit_api-X.Y.Z* uv publish dist/merit_unofficial_mcp_server-X.Y.Z*
Pärast avaldamist laadib uvx merit-unofficial-mcp-server automaatselt uue versiooni.
npm pakett
merit-unofficial-mcpon aegunud ega vaja enam avaldamist — kasutajad suunatakseuvxpeale.
Hea teada
Kasuta tipptasemel AI/LLM mudeleid, kuigi need on pisut kallimad : Opus/Pro tase, ja mitte Light, mini või Haiku tase.
Praegune MCP server toetab ainult ühte ühendust korraga, ehk siis ühe ettevõttega tööd. Kui sa oled raamatupidamisfirma, kes soovib selle tasuta ja garaantiita koodi ning AI abil kõikide oma klientide raamatupidamist automaatselt hallata, siis olgu Jumala arm sinuga (loe: ei ole hea mõte).
Auditeerimiseks logi püsisalvestust ei ole
Dry-run kirjutusvooge veel ei ole — aga kirjutus käib läbi kontrolli, see peaks asendama dry-run enamuse juhtudel
Dokumentide sisestust mis nõuaks OCR töövoogu veel ei ole - nt ostuarvete sisestuseks kasuta muud AI tööriista või -mudelit, mis teeb selle tekstiks. PDF faili saab manusega ostuarvele lisada küll.
Litsents - tasuta, omal vastutusel
Available Tools
15 toolsget_setup_instructionsGet Setup InstructionsARead-onlyIdempotent
Report whether MERIT_API_ID and MERIT_API_KEY are configured, and explain how to set them when they are not.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds meaningful context by specifying the exact environment variables checked and that the tool provides instructions when not configured. This goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single succinct sentence that conveys all necessary information with no unnecessary words. Every part is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, present annotations, and an output schema, the description fully covers what the agent needs to know: it will report configuration status and optionally provide setup instructions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is effectively 100%. The description does not need to elaborate on parameters; the baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to report whether MERIT_API_ID and MERIT_API_KEY are configured and provide setup instructions. This distinctively sets it apart from sibling tools which focus on data operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool (to check configuration status and get setup instructions). While it doesn't explicitly state when not to use it or list alternatives, the sibling tools are so different that usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_read_financialMerit Read FinancialBRead-onlyIdempotent
Read-only tool. Read payments, banks, and GL information. Actions: payments_list: List payments.; payment_types_list: List payment types.; payment_imports_list: List payment imports for a bank.; expense_payments_list: List expense payments for a bank.; income_payments_list: List income payments for a bank.; gl_batches_list: List GL batches.; gl_batch_get: Fetch one GL batch by id.; gl_batches_full_list: List GL batches with full details.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description's 'Read-only tool' is consistent with annotations but adds no additional behavioral context (e.g., rate limits, auth requirements). This is adequate given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with 'Read-only tool' and lists actions succinctly. However, the repetitive 'List ...' structure could be condensed, and the inclusion of periods and semicolons makes it slightly verbose. Adequate but not exemplary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no output schema, and extensive sibling tools, the description is incomplete. It fails to explain parameter mechanics, filter usage, or return behavior, leaving significant gaps for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate but does not. It only lists possible values for the 'action' parameter, leaving id, filters, payload, etc. unexplained. The agent cannot infer correct parameter usage beyond action selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a read-only tool for payments, banks, and GL information, distinguishing it from write siblings. However, the purpose is presented as a list of actions rather than a concise single statement, slightly reducing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes 'Read-only tool,' which implies it should not be used for writes, but it does not explicitly mention alternatives like merit_write_financial or specify when to use this vs. other read tools such as merit_read_purchases. Some guidance is present but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_read_inventoryMerit Read InventoryCRead-onlyIdempotent
Read-only tool. Read inventory, fixed asset, and pricing data. Actions: locations_list: List inventory locations.; movements_list: List inventory movements.; fixed_asset_locations_list: List fixed asset locations.; fixed_asset_responsible_persons_list: List fixed asset responsible persons.; fixed_assets_list: List fixed assets.; prices_list: List prices.; discounts_list: List discounts.; price_get: Fetch an effective price.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds 'Read-only tool' but does not elaborate on permissions, rate limits, or side effects beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively short but uses a run-on list with semicolons. It could be better structured (e.g., bullet points) and still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no output schema, no enums), the description is insufficient. It does not cover parameter interactions, default behaviors, or the full scope of actions and their constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 9 parameters, the description fails to explain the meaning of key parameters (e.g., action, id, filters, payload). Only action is mentioned via a list of sub-actions, but no enum or format details are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a read-only tool for inventory, fixed asset, and pricing data with a list of actions. However, it does not explicitly differentiate from sibling tools like merit_read_financial or merit_read_master_data, which may have overlapping scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While it identifies the tool as read-only, there is no guidance on when to use it versus alternative tools, nor does it explain which action to use in different scenarios. The description lacks context-specific usage recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_read_master_dataMerit Read Master DataCRead-onlyIdempotent
Read-only tool. Read common master and reference data from Merit. Actions: customers_list: List customers with optional filters.; customer_groups_list: List customer groups.; vendors_list: List vendors with optional filters.; vendor_groups_list: List vendor groups.; items_list: List items with optional filters.; item_groups_list: List item groups.; taxes_list: List tax rates.; dimensions_list: List dimensions.; banks_list: List banks.; accounts_list: List accounts.; projects_list: List projects.; cost_centers_list: List cost centers.; departments_list: List departments.; units_list: List units of measure.; financial_years_list: List financial years.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description reiterates 'Read-only tool' and lists actions, adding moderate value by specifying the type of data (master/reference), but does not disclose behaviors like rate limits, permissions, or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise; the action list is structured but somewhat lengthy. It front-loads the read-only nature, but a more compact grouping could improve readability without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 0% parameter coverage, the description should explain what each action returns and how to use optional parameters. It fails to do so, leaving significant gaps for an agent to understand tool usage correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. Only the 'action' parameter is implicitly explained via the list of action values. Other critical parameters (id, filters, payload, etc.) are not described at all, leaving the agent to guess their purpose and format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for reading master and reference data from Merit, and lists 18 specific actions (e.g., customers_list, accounts_list). The purpose is clear but does not differentiate from sibling read tools like merit_read_financial which may also list accounts or other overlapping actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the many other read tools (e.g., merit_read_financial, merit_read_inventory). The description simply enumerates actions without contextualizing scope or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_read_purchasesMerit Read PurchasesARead-onlyIdempotent
Read-only tool. Read purchase invoices and purchase orders. Actions: invoices_list: List purchase invoices.; invoice_get: Fetch one purchase invoice by id.; orders_list: List purchase orders.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'Read-only tool' adds no new safety context. It lists actions but lacks details on pagination, error behavior, or output structure, though not required given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short and front-loaded with 'Read-only tool,' then lists actions. No wasted words, though a list format could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description is incomplete given 9 parameters and no output schema. Only action parameter is explained; key details on filters, payload, and response are missing, making it insufficient for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description must compensate but only explains the 'action' parameter values. Other 8 parameters (id, filters, payload, etc.) receive no explanation, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads purchase invoices and purchase orders, listing specific actions (invoices_list, invoice_get, orders_list), which distinguishes it from sibling read tools like merit_read_sales.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for purchase documents through naming and actions, but does not explicitly state when not to use it or compare with alternatives like merit_read_financial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_read_reportsMerit Read ReportsCRead-onlyIdempotent
Read-only tool. Read Merit reports and report continuations. Actions: customer_debts_get: Get customer debts report.; customer_payments_get: Get customer payment report.; more_data_get: Get continuation page for a report.; profit_report_get: Get statement of profit or loss.; balance_report_get: Get statement of financial position.; inventory_report_get: Get inventory report.; sales_report_get: Get sales report.; purchase_report_get: Get purchase report.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds a list of actions but no additional behavioral details like pagination or error handling. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise but the list of actions is run-on and could be better formatted. It front-loads 'Read-only tool' but is not particularly well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no explanation of return values or continuation mechanism. Given the complexity (8 reports, 9 parameters), the description is incomplete and does not cover how to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description lists the valid action values, which is critical, but does not explain the other 8 parameters (id, filters, payload, etc.). For a tool with 9 parameters, this is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads Merit reports and lists eight specific actions, making the purpose clear. However, it does not differentiate from sibling read tools like merit_read_financial or merit_read_sales, which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the specific read tools (e.g., merit_read_financial). The description only says 'Read-only tool' but lacks any when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_read_salesMerit Read SalesARead-onlyIdempotent
Read-only tool. Read sales invoices, offers, and recurring invoice data. Actions: invoices_list: List sales invoices.; invoice_get: Fetch one sales invoice by id.; invoice_pdf_get: Fetch one sales invoice PDF by id.; offers_list: List sales offers.; offer_get: Fetch one sales offer by id.; recurring_invoices_list: List recurring invoices.; recurring_invoice_get: Fetch one recurring invoice by id.; recurring_invoice_addresses_list: List recurring invoice addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description reinforces read-only behavior but adds no additional behavioral context beyond listing actions. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with key purpose ('Read-only tool'). Actions listed in a structured format. Slightly long due to enumeration, but each line is concise. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the action list is useful, the description fails to document parameter semantics, return values (no output schema), or provide examples. Given 9 parameters and zero schema descriptions, the tool definition is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It enumerates valid action values in text, aiding the agent. However, it does not explain id, filters, payload, or other parameters, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is a read-only tool for sales invoices, offers, and recurring invoices. Lists all available actions. Distinguishes from sibling write tools like merit_write_sales.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states read-only nature, implying not for modifications. Does not provide explicit when-not-to-use or alternatives, but siblings are clearly write tools. Within the tool, actions list provides guidance on which action to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_customersMerit Write CustomersARead-only
Preview-only write tool. Does not execute changes; returns intended operation details and a confirmation_code for merit_write_customers_confirm. Create or update customers and vendors. Actions: customer_upsert: Create or update a customer.; vendor_upsert: Create or update a vendor.; vendor_update: Update an existing vendor by Id. Only Id is required; all other fields are optional. Typical use: after receiving a new purchase invoice (e.g. as PDF), verify and sync the vendor's BankAccount (IBAN) and SWIFT_BIC so future payments require no manual lookup. Payload fields: Id (guid, required), Name, CountryCode, Address, City, PostalCode, PhoneNo, PhoneNo2, Email, RegNo, VatRegNo, SalesInvLang, VatAccountable, BankAccount, ReferenceNo, VendGrCode, VendGrId, PayerReceiverName, Dimensions ([{DimId, DimValueId, DimCode}]).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly explains the preview-only nature: 'Does not execute changes; returns intended operation details and a confirmation_code.' This aligns with the readOnlyHint annotation and adds value by describing the confirmation flow. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but somewhat verbose and unstructured. It could be more concise and organized, e.g., bullet points for actions and payload fields. However, it is not excessively long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no output schema, and a complex payload with many fields, the description lacks details on return values, payload structure, and all parameters. It covers only partial context, leaving gaps for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description only lists some payload fields (Id, Name, CountryCode, etc.) but does not explain other parameters like filters, add_attachment, delivnote, bank_id, confirmation_code, or confirmed. This leaves many parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a preview-only write tool for creating/updating customers and vendors, with specific actions like customer_upsert, vendor_upsert, vendor_update. It distinguishes from sibling tools by focusing on customer/vendor writes and explicitly mentioning the confirmation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a typical use case: after receiving a purchase invoice, verify and sync vendor bank details. It also mentions the confirmation_code for merit_write_customers_confirm. However, it does not explicitly state when not to use it or alternative tools for other domains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_customers_confirmMerit Write Customers ConfirmADestructive
Confirmed mutating tool. Executes a previously previewed write operation from merit_write_customers when called with confirmation_code and confirmed=true. Create or update customers and vendors. Actions: customer_upsert: Create or update a customer.; vendor_upsert: Create or update a vendor.; vendor_update: Update an existing vendor by Id. Only Id is required; all other fields are optional. Typical use: after receiving a new purchase invoice (e.g. as PDF), verify and sync the vendor's BankAccount (IBAN) and SWIFT_BIC so future payments require no manual lookup. Payload fields: Id (guid, required), Name, CountryCode, Address, City, PostalCode, PhoneNo, PhoneNo2, Email, RegNo, VatRegNo, SalesInvLang, VatAccountable, BankAccount, ReferenceNo, VendGrCode, VendGrId, PayerReceiverName, Dimensions ([{DimId, DimValueId, DimCode}]).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description confirms it's a mutating tool. The description adds details about actions (create/update customers/vendors) and notes that for vendor_update only Id is required. However, it does not describe behavior on failure, rollback, or what happens if confirmed=false, so some behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is multi-sentence but each sentence adds information: purpose, actions, typical use, payload fields. It is front-loaded with the key fact that it is a confirmed mutating tool. Slight redundancy in describing 'Create or update customers and vendors' followed by specific actions, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does not cover return values. It lacks details on error handling, the effect of setting confirmed=false, or prerequisites beyond the preview step. For a confirm tool, this could be more complete, but the typical use case helps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It explains payload fields (Id, Name, etc.) and notes required parameters (action, confirmation_code, confirmed). However, it does not describe other parameters like id, filters, add_attachment, delivnote, bank_id, leaving some parameters undocumented. Partial coverage but adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool executes a previously previewed write operation from merit_write_customers, requiring confirmation_code and confirmed=true. It lists specific actions (customer_upsert, vendor_upsert, vendor_update) and provides a typical use case. This fully distinguishes it from sibling tools like merit_write_customers (preview).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use the tool: after previewing from merit_write_customers, with confirmation_code and confirmed=true. It includes a typical use scenario involving vendor BankAccount synchronization. Though it doesn't explicitly state exclusions or alternatives, the context of a confirm tool is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_financialMerit Write FinancialARead-only
Preview-only write tool. Does not execute changes; returns intended operation details and a confirmation_code for merit_write_financial_confirm. Create purchase payments and update related financial master data. Actions: purchase_invoice_payment_create: Create a payment for a purchase invoice. Payload fields: BankId (guid, required), VendorName (str, required), BillNo (invoice number, required), Amount (decimal, required), IBAN (str, auto-fetched from vendor BankAccount if omitted), PaymentDate (YYYYMMDD, defaults to invoice DueDate if omitted), CurrencyCode (str, only for non-EUR payments). Uses v1/sendPaymentV for EUR; v2/sendPaymentV when CurrencyCode is present. Returns the raw Merit API response. Raises error if IBAN or PaymentDate cannot be resolved automatically.; tax_upsert: Create or update a tax rate.; dimensions_add: Add dimensions.; items_add: Add items.; item_update: Update an item.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds significant behavioral context: it is preview-only, returns a confirmation_code, uses different API versions based on currency (v1/v2), and raises errors if IBAN or PaymentDate are unresolved. These details are valuable and extend beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and includes bullet points with action-specific details. It front-loads the key preview-only behavior, but the exhaustive listing of actions and parameter details makes it less concise. It is adequately structured but could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (multiple actions, 9 parameters, no output schema), the description is incomplete. It fails to explain general schema parameters like id, filters, payload, add_attachment, delivnote, bank_id, confirmation_code, and confirmed. It also provides minimal detail for most actions, leaving the agent uncertain about how to use the tool for actions other than purchase_invoice_payment_create.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides detailed parameter semantics for the purchase_invoice_payment_create action (field types, defaults, auto-fetch), but other actions (tax_upsert, dimensions_add, items_add, item_update) receive only one-line summaries with no parameter details. The schema has 9 parameters with no descriptions, and the description covers only a subset, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a preview-only write tool that does not execute changes, returning a confirmation_code for confirmation. It lists specific actions (purchase_invoice_payment_create, tax_upsert, etc.) and distinguishes itself from the sibling confirmation tool (merit_write_financial_confirm). The purpose is specific and well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool should be used for previewing financial write operations before confirming with merit_write_financial_confirm, but it does not explicitly state when to use this tool versus other write tools like merit_write_customers or merit_write_purchases. Usage guidelines are implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_financial_confirmMerit Write Financial ConfirmADestructive
Confirmed mutating tool. Executes a previously previewed write operation from merit_write_financial when called with confirmation_code and confirmed=true. Create purchase payments and update related financial master data. Actions: purchase_invoice_payment_create: Create a payment for a purchase invoice. Payload fields: BankId (guid, required), VendorName (str, required), BillNo (invoice number, required), Amount (decimal, required), IBAN (str, auto-fetched from vendor BankAccount if omitted), PaymentDate (YYYYMMDD, defaults to invoice DueDate if omitted), CurrencyCode (str, only for non-EUR payments). Uses v1/sendPaymentV for EUR; v2/sendPaymentV when CurrencyCode is present. Returns the raw Merit API response. Raises error if IBAN or PaymentDate cannot be resolved automatically.; tax_upsert: Create or update a tax rate.; dimensions_add: Add dimensions.; items_add: Add items.; item_update: Update an item.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds that it is a 'confirmed mutating tool', mentions error conditions (raises error if IBAN or PaymentDate unresolved), and specifies API versions used (v1/sendPaymentV for EUR, v2 otherwise). This provides behavioral context beyond annotations, though it does not detail all effects of mutations for every action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy and includes an extensive parameter list for one action, which could be considered verbose. It is structured with a clear first sentence and bullet-like list of actions, but the level of detail is uneven. A more concise approach focusing on the confirm behavior and directing to the preview tool for action details would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, 1 required, and no output schema, the description covers the return value (raw Merit API response) and error conditions for one action. However, it is incomplete for other actions: parameters like id, filters, payload for tax_upsert, dimensions_add, etc., are not explained. The agent may struggle to use actions beyond purchase_invoice_payment_create without additional knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It provides detailed parameter descriptions for the purchase_invoice_payment_create action (e.g., BankId, VendorName, etc.). However, it does not explain the generic parameters (id, filters, add_attachment, delivnote, bank_id) aside from bank_id and confirmation_code/confirmed. Other actions (tax_upsert, dimensions_add, etc.) are only named with no parameter details, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes a previously previewed write operation from merit_write_financial, with specific verb 'executes' and resource 'write operation'. It lists actions like purchase_invoice_payment_create, which clarifies scope. However, it does not explicitly distinguish it from sibling confirm tools like merit_write_customers_confirm, relying on the tool name for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage conditions: must be called with confirmation_code and confirmed=true. It implies the tool is used after merit_write_financial preview. It does not mention when not to use it or alternatives, but the context of sibling confirm tools suggests each corresponds to a preview tool. The guidance is clear for the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_purchasesMerit Write PurchasesARead-only
Preview-only write tool. Does not execute changes; returns intended operation details and a confirmation_code for merit_write_purchases_confirm. Create purchase invoices. Actions: purchase_invoice_create: Create a purchase invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states it does not execute changes and returns preview details plus a confirmation_code, which matches the readOnlyHint annotation. It adds context about return values and the workflow with the confirm sibling, going beyond the annotation's simple read-only flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences and one bullet point. It front-loads the critical preview behavior and action, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description is incomplete. It lacks details on other parameters, expected values, or the structure of the intended operation details. The agent would need additional knowledge to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should compensate by explaining key parameters, but it only mentions 'action' and 'purchase_invoice_create'. It does not describe other parameters (id, filters, payload, etc.), leaving the agent without guidance on how to construct inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a preview-only write tool that creates purchase invoices and returns a confirmation_code for a sibling confirm tool. It distinguishes itself from the confirm sibling and other write tools by highlighting its preview nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Preview-only write tool. Does not execute changes; returns intended operation details and a confirmation_code for merit_write_purchases_confirm.' This provides clear guidance on when to use (for previewing) and implies the confirm tool for execution. However, it does not explicitly state when not to use it or list alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_purchases_confirmMerit Write Purchases ConfirmBDestructive
Confirmed mutating tool. Executes a previously previewed write operation from merit_write_purchases when called with confirmation_code and confirmed=true. Create purchase invoices. Actions: purchase_invoice_create: Create a purchase invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true (mutating) and readOnlyHint=false. The description adds that it is a 'confirmed mutating tool' and that it executes a write operation. However, it does not elaborate on the consequences or irreversibility, leaving some behavioral aspects ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but contains redundancy (e.g., repeating 'Create purchase invoices') and could be streamlined. It front-loads the purpose but could be more organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters and no output schema or schema descriptions, the description is insufficient. It does not explain the full workflow (e.g., how to obtain confirmation_code from merit_write_purchases) or the meaning of many parameters, leaving the agent with significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description only explains 'action' (purchase_invoice_create) and mentions 'confirmation_code' and 'confirmed'. Six other parameters (id, filters, payload, add_attachment, delivnote, bank_id) are left undocumented, requiring the agent to infer or guess their purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a confirm step for a previously previewed write operation from merit_write_purchases, requiring confirmation_code and confirmed=true. It also specifies the action 'purchase_invoice_create' to create purchase invoices. However, there is slight redundancy and the purpose could be more explicitly tied to the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies to use this tool when you have a confirmation_code and confirmed=true, implying it follows a preview from merit_write_purchases. It lists one supported action (purchase_invoice_create). It lacks explicit guidance on when not to use or alternatives, but the context is generally clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_salesMerit Write SalesARead-only
Preview-only write tool. Does not execute changes; returns intended operation details and a confirmation_code for merit_write_sales_confirm. Create, delete, and deliver sales invoices. Actions: sales_invoice_create: Create a draft sales invoice through Merit v1 /sendinvoice. The payload is passed through to Merit and must use the create schema, not the invoice_get response shape. Required shape: Customer.Id, DocDate, TransactionDate, and DueDate as YYYYMMDD strings, mandatory string InvoiceNo, CurrencyCode (usually EUR), PriceInclVat (usually false), optional FComment footer note, singular InvoiceRow list, TaxAmount list, and TotalAmount. Each InvoiceRow item must use Item={Code, Description, UOMName}, Quantity, Price, row-level TaxId GUID, and Account. Gotchas: use InvoiceRow (singular), not InvoiceRows; Merit will not auto-assign InvoiceNo, so read merit_read_sales action=invoices_list and use the next integer; UOMName belongs inside Item; use Account, not AccountCode; use TaxId GUID, not TaxName or TaxPct; TaxAmount is required even for zero VAT, e.g. [{'TaxId': '', 'Amount': 0}]; TotalAmount is required and should match the row Price x Quantity total. For Googolplex no-VAT 'Ei ole käive', the known TaxId is 7e170b45-fe96-4048-b824-39733c33e734; verify with merit_read_master_data action=taxes_list if it changes. Do not include DelivNote/delivnote=true in invoice creation payloads; invoices should remain undelivered drafts and delivery is handled manually in Merit.; sales_invoice_delete: Delete a sales invoice by id.; credit_invoice_create: Create a credit invoice.; sales_invoice_send_email: Send a sales invoice by email. This delivers the invoice; do not use it in the normal draft creation flow where delivery is handled manually in Merit. Keep delivnote=false unless the user explicitly asks for delivery note mode without prices.; sales_invoice_send_einvoice: Send a sales invoice as e-invoice. This delivers the invoice; do not use it in the normal draft creation flow where delivery is handled manually in Merit. Keep delivnote=false unless the user explicitly asks for delivery note mode without prices.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses it is preview-only and does not execute changes, but the annotation readOnlyHint=true contradicts this, as the tool performs write operations (even if only preview). This is a serious inconsistency, lowering the score despite some transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not wasteful; it front-loads the key preview-only nature then covers actions and gotchas. Some sections are run-on but necessary for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with multiple actions and no output schema, the description adequately covers return value (operation details and confirmation_code). It provides gotchas and references sibling tools. However, some parameter descriptions are lacking, and the contradiction with annotations reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It does explain the 'action' parameter by listing actions and the 'payload' parameter in great detail for sales_invoice_create. However, other parameters (id, filters, add_attachment, bank_id, confirmation_code, confirmed, delivnote) are not explicitly explained, though some context is given via action descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a 'Preview-only write tool' that handles multiple actions (create, delete, deliver, credit, send email/e-invoice). It distinguishes from sibling tools like merit_write_sales_confirm by mentioning confirmation code and preview nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use (for preview, not execution) and when not (e.g., not to use send actions in normal draft creation flow). It also references sibling tools (merit_read_sales, merit_read_master_data) for verification and provides conditions for delivnote use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merit_write_sales_confirmMerit Write Sales ConfirmADestructive
Confirmed mutating tool. Executes a previously previewed write operation from merit_write_sales when called with confirmation_code and confirmed=true. Create, delete, and deliver sales invoices. Actions: sales_invoice_create: Create a draft sales invoice through Merit v1 /sendinvoice. The payload is passed through to Merit and must use the create schema, not the invoice_get response shape. Required shape: Customer.Id, DocDate, TransactionDate, and DueDate as YYYYMMDD strings, mandatory string InvoiceNo, CurrencyCode (usually EUR), PriceInclVat (usually false), optional FComment footer note, singular InvoiceRow list, TaxAmount list, and TotalAmount. Each InvoiceRow item must use Item={Code, Description, UOMName}, Quantity, Price, row-level TaxId GUID, and Account. Gotchas: use InvoiceRow (singular), not InvoiceRows; Merit will not auto-assign InvoiceNo, so read merit_read_sales action=invoices_list and use the next integer; UOMName belongs inside Item; use Account, not AccountCode; use TaxId GUID, not TaxName or TaxPct; TaxAmount is required even for zero VAT, e.g. [{'TaxId': '', 'Amount': 0}]; TotalAmount is required and should match the row Price x Quantity total. For Googolplex no-VAT 'Ei ole käive', the known TaxId is 7e170b45-fe96-4048-b824-39733c33e734; verify with merit_read_master_data action=taxes_list if it changes. Do not include DelivNote/delivnote=true in invoice creation payloads; invoices should remain undelivered drafts and delivery is handled manually in Merit.; sales_invoice_delete: Delete a sales invoice by id.; credit_invoice_create: Create a credit invoice.; sales_invoice_send_email: Send a sales invoice by email. This delivers the invoice; do not use it in the normal draft creation flow where delivery is handled manually in Merit. Keep delivnote=false unless the user explicitly asks for delivery note mode without prices.; sales_invoice_send_einvoice: Send a sales invoice as e-invoice. This delivers the invoice; do not use it in the normal draft creation flow where delivery is handled manually in Merit. Keep delivnote=false unless the user explicitly asks for delivery note mode without prices.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| id | No | ||
| filters | No | ||
| payload | No | ||
| add_attachment | No | ||
| delivnote | No | ||
| bank_id | No | ||
| confirmation_code | No | ||
| confirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description reinforces this by stating it is a 'mutating tool' and detailing operations. It adds many behavioral gotchas (e.g., payload shape, required fields, limitations like not including DelivNote) that go beyond annotations, ensuring the agent understands 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but overly long and dense, mixing general purpose with detailed payload examples. While front-loaded with the main purpose, it could benefit from more structured formatting (e.g., bullet points) to improve readability without losing detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and parameter details comprehensively but lacks explanation of return values or error handling, which is significant given no output schema. It also omits descriptions for some schema fields like filters and add_attachment, relying on inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description extensively explains the payload structure for each action and clarifies the use of confirmation_code, confirmed, and delivnote. However, it does not directly describe all parameters (e.g., filters, id, add_attachment) with equal depth, though their context is inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'Confirmed mutating tool' that executes previously previewed write operations from merit_write_sales. It lists specific actions (create, delete, credit, send email, send e-invoice) and distinguishes itself from the sibling tool merit_write_sales by requiring confirmation_code and confirmed=true.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use (only after preview from merit_write_sales) and when not to use (e.g., do not use send email in normal draft creation). It gives detailed context on alternative flows and prerequisites like confirmation_code and confirmed flag.
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. Dates show when Glama detected each change.
14 tool updates
v0.5.0- Changed
merit_read_financial2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_read_inventory2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_read_master_data2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_read_purchases2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_read_reports2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_read_sales2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_customers2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_customers_confirm2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_financial2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_financial_confirm2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_purchases2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_purchases_confirm2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_sales2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
- Changed
merit_write_sales_confirm2 fields changed- changed
Input schema / properties / filters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / payload / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +]
15 tool updates
v0.1.0- First observed
get_setup_instructions - First observed
merit_read_financial - First observed
merit_read_inventory - First observed
merit_read_master_data - First observed
merit_read_purchases - First observed
merit_read_reports - First observed
merit_read_sales - First observed
merit_write_customers - First observed
merit_write_customers_confirm - First observed
merit_write_financial - First observed
merit_write_financial_confirm - First observed
merit_write_purchases - First observed
merit_write_purchases_confirm - First observed
merit_write_sales - First observed
merit_write_sales_confirm
TDQS
Each tool has a clear prefix (merit_read_* or merit_write_*) and domain suffix (financial, sales, purchases, etc.), making them easily distinguishable. The confirmation tools are explicitly paired with their preview counterparts, leaving no ambiguity.
All tools follow a consistent verb_noun pattern using snake_case: 'merit_read_<domain>' and 'merit_write_<domain>_confirm'. The single outlier 'get_setup_instructions' also follows a clear convention.
15 tools is well-suited for an ERP integration covering financial, inventory, sales, purchases, master data, and reports. The count covers the essential read and write operations without being excessive.
The tool set covers CRUD for sales and purchases but lacks write operations for inventory and reports, and has no delete for certain entities (e.g., customers). Notably, no update for purchase invoices or sales invoices beyond creation and deletion. These gaps may require workarounds.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Bookkeeping for owner-operated businesses. Query transactions, invoices, and reports.
Sits between accounting and payment rails for reminders, Pay Now, autopay, portal, and book sync.
Connect your AI to your Well financial data - invoices, companies, contacts.
Read-only NuMetric.work accounting & ERP data: statements, KPIs, reports, invoices, documents.
Related MCP Servers
- AlicenseCqualityDmaintenanceConnect to a sales recorder system (or POS, cash register).17222GPL 3.0
- AlicenseCqualityAmaintenanceEnables interaction with the Estonian e-arveldaja (RIK e-Financials) REST API to manage financial records like invoices and journal entries using natural language. It supports automating purchase invoice entry from PDFs, reconciling bank transactions, and generating financial reports.1303,18834Apache 2.0
- FlicenseBqualityBmaintenanceConnects AI assistants to Big Red Cloud accounting data, enabling read-only lookups and safe write operations with confirmation drafts.100-
- AlicenseNot gradedqualityBmaintenanceExposes ~60 tools for the Merit Aktiva accounting API, covering sales/purchase invoices, payments, customers, vendors, items, general ledger, offers, reference data, and reports with both read and write operations.17MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaakla/merit_api'
If you have feedback or need assistance with the MCP directory API, please join our Discord server