Skip to main content
Glama

Pressmark

Server Details

Vector PDF document engine for invoices, estimates, receipts, contracts & real estate agreements.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
mooshee/pressmark
GitHub Stars
0
Server Listing
Pressmark MCP Server

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation4/5

Most tools have distinct inputs and outputs: calculate_totals computes totals, get_pricing reads pricing, and preview_document renders PNG previews. However, generate_document, convert_document, and record_payment all synthesize PDFs and have some boundary overlap that an agent must resolve from the descriptions.

Naming Consistency5/5

All six tool names follow a consistent snake_case verb_noun pattern with clear verbs: calculate, convert, generate, get, preview, and record. There is no mixing of casing or naming conventions.

Tool Count5/5

Six tools is a well-scoped set for a stateless document-generation and billing server. Each tool covers a distinct step in the workflow, and none appears to be filler.

Completeness4/5

The surface covers pricing, generation, preview, conversion, totals calculation, and payment recording, which is strong lifecycle coverage for a stateless server. Minor gaps remain, such as listing supported document types/templates or validating incoming document payloads, but agents can work around these.

Available Tools

6 tools
calculate_totalsCalculate Document TotalsA
Read-onlyIdempotent
Inspect

Statelessly compute subtotal, tax, discount, grand total, and balance due for a document payload without mutating server records. Example: calculate_totals({"document":{"items":[{"quantity":2,"unit_price":50}]}})

NameRequiredDescriptionDefault
documentYesInput document JSON payload containing items, tax_rate, discount_amount, and optional amount_paid.

Output Schema

NameRequiredDescription
is_paidYesTrue when balance_due is zero.
subtotalYesSum of line item amounts before tax and document discount.
tax_totalYesCalculated tax amount.
amount_paidYesAmount already paid toward the document.
balance_dueYesRemaining unpaid balance due.
grand_totalYesTotal amount payable after tax and discount.
discount_amountYesDocument-level discount applied.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered; the description reinforces it with 'statelessly' and 'without mutating server records.' It adds no detail on precision/rounding or how partial payloads are handled, which are the remaining behavioral unknowns for a calculation tool.

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

Conciseness5/5

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

Two sentences: the capability and its scope first, a compact worked example second. Nothing is redundant with the annotations or title, and the example is directly load-bearing.

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?

An output schema exists so return values need not be described, annotations cover the mutation profile, and the example disambiguates the single nested parameter. What's left unexplained is the semantic convention for tax_rate (rate vs percentage) and rounding — the main source of mis-invocation for a totals calculator.

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

Parameters4/5

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

Schema coverage is 100%, so baseline would be 3; the inline example goes beyond the schema by revealing the internal shape of the nested document, including field names inside items (quantity, unit_price) that the schema never documents. It does not show how tax_rate or discount_amount are expressed, so it falls short of 5.

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

Purpose5/5

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

Names a specific verb (compute) plus an enumerated set of outputs (subtotal, tax, discount, grand total, balance due) scoped to a document payload. The phrase 'statelessly ... without mutating server records' separates it from mutating siblings like record_payment and generate_document.

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

Usage Guidelines4/5

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

The stateless/no-mutation framing makes the intended context clear: use it when totals are needed for a preview or validation without persisting anything. It stops short of naming an explicit alternative or exclusion rule (e.g. 'use record_payment when you intend to settle the balance').

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

convert_documentStateless Document Lifecycle ConversionA
Read-onlyIdempotent
Inspect

Stateless in-memory transformation and PDF synthesis converting an Estimate/Quote JSON into an Invoice, Receipt, or Credit Note without mutating server records. Example: convert_document({"document":{},"target_type":"invoice"})

NameRequiredDescriptionDefault
documentYesStateless input document JSON payload to transform (returns a new synthesized document without mutating server records).
due_daysNoNumber of days until payment is due (for invoice conversion).
target_typeYesTarget lifecycle document type (invoice, receipt, estimate, credit_note, refund).
payment_linkNoOptional checkout URL to embed as a vector QR code and clickable link.
credit_reasonNoReason for issuing credit note or refund (e.g. Overbilling, Cancellation).
payment_qr_codeNoWhether to render an SVG vector QR code for 1-scan mobile payment.

Output Schema

NameRequiredDescription
documentYesNewly synthesized converted document JSON.
pdf_base64YesBase64-encoded vector PDF of the converted document.
compile_time_msYesVector compilation latency in milliseconds.

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the description's 'stateless ... without mutating server records' largely restates that. It does add that a brand-new synthesized document is returned and that PDF synthesis occurs, but it omits anything on prerequisites, error conditions, or how credit_reason/due_days alter behavior.

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

Conciseness4/5

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

Two sentences, front-loaded with the core verb and the stateless constraint, followed by a compact example call. The inline JSON example is slightly noisy but earns its place by showing the required payload shape.

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 an output schema present and full schema description coverage, the description does not need to explain return values, and it covers statelessness and the target types adequately. The main gap is the lack of any relation to the five sibling tools, which for a six-parameter tool in a crowded namespace is the missing piece.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, including the target_type enum, due_days being invoice-only, and payment_link QR embedding. The description adds only an example call showing document plus target_type; it contributes no semantics beyond the schema, which is the baseline-3 case.

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

Purpose4/5

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

The description states a specific verb and resource: it converts an Estimate/Quote JSON into another lifecycle document (invoice, receipt, credit note) statelessly and in memory. The scope is clear enough to distinguish it from mutation-oriented siblings, though the listed targets omit 'estimate' and 'refund' which the target_type enum actually supports, and it never names generate_document or preview_document as the alternatives.

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

Usage Guidelines3/5

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

The phrase 'without mutating server records' implies the selection condition (use this when you want a throwaway synthesized document rather than a persisted one), and a concrete invocation example is given. However, there is no explicit when-to-use / when-not-to-use statement and no named alternative among the five siblings (generate_document, preview_document, calculate_totals, record_payment, get_pricing), so routing is left to inference.

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

generate_documentGenerate Vector PDF DocumentA
Read-onlyIdempotent
Inspect

Statelessly synthesize a vector PDF document (invoice, receipt, contract, NDA, or lease) in <25ms without mutating server records. Example: generate_document({"doc_type":"invoice","from":{"name":"Acme"},"to":{"name":"Client"}})

NameRequiredDescriptionDefault
toYesRecipient, buyer, client, or tenant details.
fromYesIssuer, seller, landlord, or service provider details.
itemsNoBillable line items, milestones, rent schedules, or fee breakdowns.
notesNoCustomer-facing notes or remittance instructions.
termsNoPayment terms, late fee policy, or legal clauses.
themeNoVisual typography and color theme preset.
titleNoCustom document heading override (e.g., 'TAX INVOICE').
countyNoCounty name for notarial jurat and recording cover header (e.g., 'Hamilton').
is_paidNoMarks the document PAID IN FULL.
currencyNoISO 4217 currency code or symbol (default 'USD'; supports EUR, GBP, CAD, AUD, JPY, CHF).USD
doc_typeYesDocument archetype across 57 commercial, legal, and real estate templates (e.g., invoice, residential_lease).
due_dateNoPayment due or expiration date (YYYY-MM-DD).
sectionsNoStructured legal clauses or terms sections.
tax_rateNoPercentage tax rate applied to subtotal (e.g., 8.25).
doc_numberNoUnique document identifier (e.g., 'INV-2026-0042'); auto-generated when omitted.
issue_dateNoDocument issue date (YYYY-MM-DD).
recordableNoApplies County Recorder 3-inch top margin header and official stamp reserve.
signaturesNoMulti-party signature blocks.
state_codeNo2-letter US state or DC code (e.g., 'TN', 'CA', 'NY') for 50-state statutory clauses.
year_builtNoProperty construction year (< 1978 triggers Federal Lead-Based Paint disclosure).
date_formatNoDate rendering format.
municipalityNoMunicipal sub-profile ('Chicago', 'Cook County', 'New York City', 'San Francisco', 'Seattle', 'Portland').
payment_linkNoHTTPS checkout URL embedded as a link and vector QR code.
unit_measureNoUnit suffix for quantities (e.g., 'hrs', 'mo', 'RSF').
custom_fieldsNoCustom key-value metadata fields.
primary_colorNoCustom primary brand hex color (e.g., '#4f46e5').
execution_modeNoExecution and signature mode.
compliance_modeNoRegulatory compliance notice banner.
discount_amountNoFlat document-level discount subtracted before grand total.
notary_requiredNoRenders a state-specific Notarial Acknowledgment and Jurat block.
number_decimalsNoDecimal places for formatted amounts (default 2).
payment_qr_codeNoEmbeds a vector SVG QR code when payment_link is provided.
currency_placementNoPlace currency symbol/code before or after amounts.
lease_package_modeNoAppends mandatory state statutory attachment sheets and move-in checklist.
currency_separatorsNoThousands and decimal separator style.
include_clerk_stampNoReserves a County Clerk recording stamp zone on wet-ink jurats.
currency_symbol_modeNoDisplay currency symbol ('$') or ISO code ('USD').

Output Schema

NameRequiredDescription
doc_numberYesAssigned or effective document number.
pdf_base64YesBase64-encoded vector PDF bytes.
grand_totalYesComputed grand total.
compile_time_msYesVector compilation latency in milliseconds.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the non-mutating claim largely restates structured data. However, the description adds genuinely new behavioral facts: statelessness and a <25ms latency expectation, which help an agent decide to call it inline rather than batch.

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

Conciseness4/5

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

Two sentences with the core capability front-loaded and a single compact example; nothing is padded. The example is somewhat redundant given a 100%-documented schema, which keeps it from a 5.

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

Completeness3/5

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

An output schema and rich annotations remove the need to describe return values or safety, and the schema fully documents parameters. But for a 37-parameter, 57-archetype tool, the description says nothing about mode interactions or the preview-then-generate workflow, leaving the agent to infer routing from sibling names alone.

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

Parameters3/5

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

Schema description coverage is 100% across all 37 parameters, so the schema carries the semantic load. The inline example pins down the shape of from/to/doc_type, adding marginal value, but there is no explanation of the interactions between parameters (e.g., payment_link with payment_qr_code, or state_code with notary_required).

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

Purpose4/5

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

The description uses a specific verb-plus-resource ('synthesize a vector PDF document') and enumerates concrete archetypes (invoice, receipt, contract, NDA, lease), so an agent knows exactly what is produced. It does not distinguish itself from siblings like preview_document or convert_document, which also deal with documents, so it stops short of a 5.

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

Usage Guidelines3/5

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

The phrase 'statelessly ... without mutating server records' implies a generation-only, safe-to-call context, but there is no explicit when-to-use or when-not-to-use guidance. It never tells the agent why to pick this over preview_document (dry run?) or convert_document, which is the most likely routing confusion.

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

get_pricingGet Pressmark Pricing CatalogA
Read-onlyIdempotent
Inspect

Read static subscription tiers, single-pass unlocks, and checkout links without mutating server records. Example: get_pricing({})

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
plansYesAvailable Pressmark subscription tiers and features.
currencyYesPricing catalog currency (USD).
microtransactionsYesSingle-pass document unlock options.

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'without mutating server records' largely restates structured data. 'Static' is the one genuinely additive cue, implying the catalog is fixed and not user-specific, but nothing is said about freshness or environment scoping.

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

Conciseness5/5

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

Two short sentences, front-loaded with the resource and scope, followed by a compact call example. Nothing is padded and nothing needs to be re-read.

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 an output schema present, return values need not be described, and the description still names the three payload categories plus the read-only guarantee for a zero-parameter tool. Minor gap: no statement about whether the catalog differs by environment or how often it changes.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 and the schema has nothing to explain. The 'get_pricing({})' example usefully confirms that an empty object is the correct call shape rather than omitting arguments.

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

Purpose4/5

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

The description gives a specific verb ('Read') and enumerates the concrete payload: subscription tiers, single-pass unlocks, and checkout links. That clearly separates it from the action-oriented siblings (calculate_totals, convert_document, record_payment), though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: the example 'get_pricing({})' shows the no-argument invocation, so the agent knows how to call it, but there is no statement of when to prefer this over record_payment or calculate_totals, nor any precondition.

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

preview_documentPreview Document as PNGA
Read-onlyIdempotent
Inspect

Statelessly render a 144-PPI PNG preview of a document as a Base64 data URI without mutating server records. Example: preview_document({"doc_type":"invoice","from":{"name":"Acme"},"to":{"name":"Client"}})

NameRequiredDescriptionDefault
toYesRecipient, buyer, client, or tenant details.
fromYesIssuer, seller, landlord, or service provider details.
itemsNoBillable line items, milestones, rent schedules, or fee breakdowns.
notesNoCustomer-facing notes or remittance instructions.
termsNoPayment terms, late fee policy, or legal clauses.
themeNoVisual typography and color theme preset.
titleNoCustom document heading override (e.g., 'TAX INVOICE').
countyNoCounty name for notarial jurat and recording cover header (e.g., 'Hamilton').
is_paidNoMarks the document PAID IN FULL.
currencyNoISO 4217 currency code or symbol (default 'USD'; supports EUR, GBP, CAD, AUD, JPY, CHF).USD
doc_typeYesDocument archetype across 57 commercial, legal, and real estate templates (e.g., invoice, residential_lease).
due_dateNoPayment due or expiration date (YYYY-MM-DD).
sectionsNoStructured legal clauses or terms sections.
tax_rateNoPercentage tax rate applied to subtotal (e.g., 8.25).
doc_numberNoUnique document identifier (e.g., 'INV-2026-0042'); auto-generated when omitted.
issue_dateNoDocument issue date (YYYY-MM-DD).
recordableNoApplies County Recorder 3-inch top margin header and official stamp reserve.
signaturesNoMulti-party signature blocks.
state_codeNo2-letter US state or DC code (e.g., 'TN', 'CA', 'NY') for 50-state statutory clauses.
year_builtNoProperty construction year (< 1978 triggers Federal Lead-Based Paint disclosure).
date_formatNoDate rendering format.
municipalityNoMunicipal sub-profile ('Chicago', 'Cook County', 'New York City', 'San Francisco', 'Seattle', 'Portland').
payment_linkNoHTTPS checkout URL embedded as a link and vector QR code.
unit_measureNoUnit suffix for quantities (e.g., 'hrs', 'mo', 'RSF').
custom_fieldsNoCustom key-value metadata fields.
primary_colorNoCustom primary brand hex color (e.g., '#4f46e5').
execution_modeNoExecution and signature mode.
compliance_modeNoRegulatory compliance notice banner.
discount_amountNoFlat document-level discount subtracted before grand total.
notary_requiredNoRenders a state-specific Notarial Acknowledgment and Jurat block.
number_decimalsNoDecimal places for formatted amounts (default 2).
payment_qr_codeNoEmbeds a vector SVG QR code when payment_link is provided.
currency_placementNoPlace currency symbol/code before or after amounts.
lease_package_modeNoAppends mandatory state statutory attachment sheets and move-in checklist.
currency_separatorsNoThousands and decimal separator style.
include_clerk_stampNoReserves a County Clerk recording stamp zone on wet-ink jurats.
currency_symbol_modeNoDisplay currency symbol ('$') or ISO code ('USD').

Output Schema

NameRequiredDescription
image_data_uriYesBase64 PNG data URI (data:image/png;base64,...).
compile_time_msYesRaster preview latency in milliseconds.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the description doesn't need to re-argue safety. It does add genuinely new behavioral facts: output resolution (144 PPI), output encoding (Base64 data URI), and the stateless no-persistence contract. Rate limits and size limits for large documents are not mentioned, which keeps it off a 5.

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

Conciseness5/5

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

Two sentences, front-loaded with the operation and output format, with the example placed last where it aids rather than delays comprehension. No filler or restatement of the tool name.

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?

An output schema exists, so return-value structure need not be explained, and the description still usefully names the Base64 PNG form. Annotations cover the safety profile. The remaining gap is workflow context: with 37 overlapping parameters shared across generate_document and convert_document, the description should say when a preview is preferred over a generated file.

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

Parameters3/5

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

Schema description coverage is 100%, so all 37 parameters are already documented with per-field descriptions and 8 enums. The description contributes only a single example call exercising doc_type, from, and to; it adds no guidance on interaction between the many optional formatting flags. Baseline 3 applies when the schema carries the load.

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

Purpose4/5

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

States a concrete verb and output artifact: render a 144-PPI PNG preview as a Base64 data URI, statelessly. That is far more specific than the title alone. However, it never names or contrasts itself with generate_document or convert_document, which share the same 37-parameter payload, so an agent cannot tell from the description which of the three to pick.

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

Usage Guidelines3/5

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

The phrase 'statelessly ... without mutating server records' implies this is the read-only preview path versus a persisting generate step, and the inline example shows a minimal valid call. But there is no explicit when-to-use/when-not-to-use statement and no mention of the sibling generate_document or convert_document, leaving the routing decision to inference.

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

record_paymentStateless Payment Receipt & Balance SynthesisA
Read-onlyIdempotent
Inspect

Stateless in-memory payment calculation and PDF synthesis returning a new Receipt or partial-payment Invoice JSON + PDF without mutating server records. Example: record_payment({"document":{},"amount_paid":100})

NameRequiredDescriptionDefault
documentYesStateless input invoice JSON payload to compute payment against (returns a new synthesized document without mutating server records).
paid_dateNoDate payment was received (YYYY-MM-DD).
amount_paidNoAmount paid; defaults to grand total (PAID IN FULL) or computes partial balance due.
payment_methodNoMethod of payment (e.g., Stripe, Apple Pay, Bank Wire).
transaction_referenceNoTransaction or checkout reference ID.

Output Schema

NameRequiredDescription
documentYesNewly synthesized receipt or partial-payment invoice JSON.
pdf_base64YesBase64-encoded vector PDF.
compile_time_msYesVector compilation latency in milliseconds.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful context beyond annotations: the operation is stateless and in-memory, it returns a new synthesized document rather than mutating server records, and it produces PDF output. It does not discuss authentication or limits, but those are less critical here.

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

Conciseness4/5

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

The description is two sentences and front-loads the core behavior. The example is compact, though using an empty document object as the example payload is slightly confusing since document is a required object containing invoice data.

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

Completeness4/5

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

Given that an output schema exists and annotations cover safety traits, the description provides enough context for an agent to understand that this is a stateless, non-mutating synthesis operation. It could be improved with explicit sibling differentiation, but the essential behavioral picture is complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters including defaults for amount_paid. The description adds only a minimal example call and does not explain parameter interactions or formatting beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: stateless in-memory payment calculation and PDF synthesis returning a Receipt or partial-payment Invoice. It clearly distinguishes itself from mutating tools by emphasizing 'without mutating server records,' though it does not explicitly contrast itself with siblings like calculate_totals or generate_document.

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

Usage Guidelines3/5

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

The description implies usage when a stateless payment receipt or balance calculation is needed, but it never states when to choose this over calculate_totals or generate_document. It provides an example call but no explicit conditions or alternatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updates
    • First observedcalculate_totals
    • First observedconvert_document
    • First observedgenerate_document
    • First observedget_pricing
    • First observedpreview_document
    • First observedrecord_payment

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.