Skip to main content
Glama
invoice-match-mcp

invoice-match-mcp

check_invoice

Three-way match a supplier invoice against its purchase order and goods receipt to return approval, hold, or review decisions with reasons; optionally register approved invoices to flag duplicates.

Instructions

Three-way match one invoice against the PO file.

invoice_json: {"invoice_number": str, "supplier": str, "po_number": str|null, "currency": "EUR", "lines": [{"sku": str, "qty": number, "unit_price": number}]} register: if true and the decision is APPROVE, remember the invoice so a resubmission is flagged as a duplicate. Returns status (APPROVE, HOLD_*, REVIEW), reasons and the PO used. It never pays or posts anything.

Input Schema

NameRequiredDescriptionDefault
registerNo
invoice_jsonYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden well: it declares the return shape (status with APPROVE/HOLD_*/REVIEW, reasons, PO used), states the safety boundary ('never pays or posts anything'), and discloses the hidden side effect of register — a persistent memory that causes future resubmissions to be flagged as duplicates. What's missing is behavior on errors and how the HOLD_* variants differ.

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 operation, followed by parameter detail, then return and safety notes. Every block earns its place — the JSON shape is necessary given 0% schema coverage, and the duplicate-flagging side effect is non-obvious 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 and no annotations, the description supplies both the return contract and the safety profile, which is most of what an agent needs. Minor gaps remain around the meaning of the HOLD_* sub-statuses and how reasons are formatted, which would matter for deciding next steps.

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 0% and the schema types invoice_json as a bare string, so the description does the heavy lifting by spelling out the required JSON object shape, field types, the nullable po_number, the fixed EUR currency, and the line-item structure. It also states the exact conditional under which register fires (true AND decision APPROVE).

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 verb+resource is specific and domain-precise: 'three-way match one invoice against the PO file' tells an agent exactly what operation runs and on what object. It is clearly distinct from the sibling list_open_purchase_orders, though 'the PO file' is left slightly vague as to where PO data is sourced.

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 rather than stated: the tool is evidently a pre-payment invoice validation step, and the register parameter documents one conditional behavior. There is no explicit when-to-use/when-not-to-use guidance, no discussion of what an agent should do with HOLD_* or REVIEW decisions, and no alternatives named.

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

Deploy Server

Other Tools