LuckPanda Document Tools
Server Details
Create invoices, quotes, receipts and credit notes with GST or VAT, as prefilled links or PDFs.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 9 tools
The calculate_* tools are cleanly separated by domain (EMI vs GST vs VAT), and check_gstin/find_hsn_code/get_document_rules occupy distinct roles. The only mild overlap is create_document_link vs create_document_pdf, since both accept a document and return an editor_url, but the descriptions clearly distinguish the editor-link output from the base64 PDF output.
All names use lowercase snake_case with a consistent verb_noun shape (calculate_emi, create_document_pdf, find_hsn_code, get_document_rules, list_tools, check_gstin). No mixing of conventions or vague verbs.
Nine tools is well within the ideal 3-15 range and each serves an evident purpose: three calculators, two document outputs, validation, rules lookup, code search, and page discovery. No redundant or filler tools.
The surface covers document creation (link and PDF), the pre-flight rules, tax-code lookup, tax-ID validation, and standalone calculators, which is coherent lifecycle coverage for a document tool. Minor gaps: no way to retrieve or manage previously created documents beyond the link id, and no listing of stored links, but these appear intentional.
Available Tools
9 toolscalculate_emiCalculate a loan EMIBRead-onlyIdempotentInspect
Monthly EMI on a reducing-balance loan, total interest, total payment and the year-by-year schedule. Read-only arithmetic.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Loan term in years (up to 50). Used when months is not given. | |
| months | No | Loan term in months (1 to 600). Give months or years. | |
| currency | No | ISO 4217 code; default INR. | |
| principal | Yes | Loan amount. | |
| annual_rate | Yes | Yearly interest in percent, e.g. 9.5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| emi | Yes | |
| locale | No | |
| months | Yes | |
| currency | Yes | |
| formatted | Yes | The amounts formatted for the currency's country. |
| principal | Yes | |
| total_payment | Yes | |
| total_interest | Yes | |
| schedule_by_year | Yes | |
| annual_rate_percent | Yes |
TDQS
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 'Read-only arithmetic' mostly restates structured data. The genuinely added behavioral context is the reducing-balance methodology, which tells the agent which amortization convention the numbers follow.
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?
A single output-enumerating sentence plus a short qualifier — front-loaded and free of padding. Slightly fragmentary phrasing, but nothing is wasted.
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?
An output schema exists and annotations fully cover the safety profile, so the description only needs to frame the computation. It does that adequately for a low-complexity arithmetic tool; the main omission is any usage/routing guidance.
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 100%, so every parameter (including the years-vs-months precedence and the ISO 4217 default) is already documented in the schema. The description adds no additional parameter semantics, so the baseline 3 is appropriate.
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 names a specific resource (reducing-balance loan) and enumerates the concrete outputs: monthly EMI, total interest, total payment, and a year-by-year schedule. It is clearly distinct from the GST/VAT/GSTIN siblings by domain, though it never uses an explicit verb like 'calculate' and leans on the noun-phrase form to convey the action.
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?
There is no when-to-use guidance, no mention of prerequisites, and no routing to or away from the sibling calculators (calculate_gst, calculate_vat). 'Read-only arithmetic' hints at the nature of the call but does not tell an agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_gstCalculate India GSTARead-onlyIdempotentInspect
GST on an amount in rupees: add GST to an amount before tax, or take it out of an amount that includes it; CGST + SGST for a supply within one state, IGST across states. Read-only arithmetic.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | add: the amount is before GST (default). remove: the amount includes GST. | |
| rate | No | GST rate in percent; default 18. | |
| amount | Yes | Amount in rupees, e.g. 10000. | |
| supply | No | intra: within one state, CGST + SGST (default). inter: another state or an export, IGST. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gst | Yes | |
| mode | Yes | |
| note | No | |
| locale | No | |
| supply | Yes | |
| currency | Yes | |
| formatted | Yes | The amounts formatted for the currency's country. |
| components | Yes | |
| rate_percent | Yes | |
| amount_before_gst | Yes | |
| amount_including_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the description's 'Read-only arithmetic' adds no new safety information. It does add domain behavior context (the intra-state vs. inter-state tax split), which is modestly useful but not beyond what a caller already knows from the enums.
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?
One dense, front-loaded sentence with zero filler; the core operation comes first and the tax-split detail follows. Every clause carries meaning.
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?
An output schema exists, so return values need not be described. For a 4-parameter arithmetic tool with full schema coverage and complete annotations, the description supplies everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both enums are documented in-schema, so the parameters are already self-explanatory. The description echoes the add/remove and intra/inter semantics but adds no format or edge-case detail (e.g. treating rate as a string, default values) beyond the schema.
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?
States a specific verb (calculate) and resource (GST on an amount), and names the two distinct calculations it performs (add GST vs. remove GST) plus the CGST+SGST/IGST split. This clearly separates it from siblings like calculate_vat and calculate_emi.
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 explains when each mode applies (amount before tax vs. amount including tax) and when to expect CGST+SGST versus IGST, which is genuine usage guidance. It doesn't, however, explicitly route the agent away from calculate_vat/calculate_emi for non-India or non-GST cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_vatCalculate VATARead-onlyIdempotentInspect
VAT on an amount: add it to a net amount or take it out of a gross one. UK by default; EU countries and the UAE by country (standard rate if no rate is given). Read-only arithmetic.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | add: the amount is net (default). remove: the amount includes VAT. | |
| rate | No | VAT rate in percent; default the country's standard rate. | |
| amount | Yes | Amount in the country's currency, e.g. 1000. | |
| country | No | GB (default), DE, FR, NL, IE, ES, IT, BE, AT, PT, FI or AE. |
Output Schema
| Name | Required | Description |
|---|---|---|
| net | Yes | |
| vat | Yes | |
| mode | Yes | |
| gross | Yes | |
| locale | No | |
| country | Yes | |
| currency | Yes | |
| formatted | Yes | The amounts formatted for the currency's country. |
| rate_percent | Yes | |
| standard_rate_percent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false), so "Read-only arithmetic" adds nothing and risks being redundant. The description does add the default-resolution behavior (UK and standard rate when unspecified), which is genuinely useful, but no further behavioral context such as rounding or currency handling is disclosed.
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?
Two tight sentences with no waste, and the primary operation is front-loaded before the geographic defaults. Every clause earns its place.
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?
An output schema exists, so return values need not be explained, and the description covers modes, country default and rate default well. Fully sufficient for correct invocation, with only minor room for rounding or currency-precision notes.
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 100%, so the schema already documents mode, rate, amount and country in detail. The description restates the mode and default behavior rather than adding syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (calculate VAT) plus the resource and both directions of the operation (net→gross and gross→net). The geographic scope (UK default, EU/UAE by country) implicitly separates it from sibling calculate_gst, but no sibling is named explicitly, so it falls just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the geographic defaults: an agent can infer it should call this for UK/EU/UAE VAT rather than Indian GST. However, there is no explicit when-to-use/when-not-to-use statement and no pointer to calculate_gst as the alternative, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_gstinCheck a GSTIN's formatARead-onlyIdempotentInspect
Checks that an Indian GSTIN is well formed (15 characters, state code, PAN, check character) and decodes the state and PAN. It makes no lookup and does not confirm that the registration exists or is active. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| gstin | Yes | The 15-character GSTIN, e.g. 27AAPFU0939F1ZV. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pan | No | |
| note | No | |
| gstin | Yes | |
| problem | No | |
| state_code | No | |
| state_name | No | |
| valid_format | Yes | |
| pan_holder_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, destructiveHint, and openWorldHint=false. The description reinforces 'Read-only' and adds the crucial non-obvious constraint that no external lookup occurs, which is important for an agent to know this is purely structural validation. However, it doesn't mention error behavior (e.g., what happens if the GSTIN fails the check character) or rate limits.
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?
Three concise sentences: purpose/scope front-loaded, then the critical negative constraint, then a one-word read-only tag. Every sentence earns its place with zero waste.
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?
With an output schema present, return values need not be described. The description covers purpose, structural scope, negative boundaries, and read-only nature. It could be improved by mentioning the error/validation result behavior more explicitly, but it is largely complete for a simple single-parameter validation tool.
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 100%, so the schema fully documents the single gstin parameter including an example. The description adds no parameter-level detail beyond what the schema provides. Baseline 3 is appropriate.
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?
States a specific verb and resource ('Checks that an Indian GSTIN is well formed') and immediately scopes what is checked (15 characters, state code, PAN, check character), plus what it decodes. Clearly distinguishable from siblings like calculate_gst and find_hsn_code.
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 clearly delineates what the tool does NOT do: 'makes no lookup and does not confirm that the registration exists or is active.' This is strong negative guidance that routes the agent correctly. However, it does not name an alternative tool for actual GSTIN lookup or validation of registration status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_document_linkCreate a prefilled document linkAInspect
Validates a document (invoice, quote, proforma invoice, receipt or credit note) and returns editor_url, a short link that opens it prefilled in the LuckPanda editor, where the person can review, edit and download the PDF. Also returns the totals with tax worked out, the required fields still missing and any parts left out as invalid. Side effect: the document is stored on LuckPanda's servers for 7 days under a random link id (not listed or indexed), and every call creates a new link. Nothing is issued, numbered or sent. Use details the person gave; do not invent them.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | A document to prefill. Parts that fail validation are left out and listed in `ignored`; nothing is ever rendered as HTML. | |
| page | No | The page to open: a slug ("credit-note", "gst-invoice-format") or its URL. Default: the generator for the document type and country. |
Output Schema
| Name | Required | Description |
|---|---|---|
| totals | Yes | Totals with tax worked out. |
| country | Yes | |
| ignored | Yes | Parts of the input that were left out because they were invalid, as dotted paths. |
| missing | Yes | Required fields still empty, as dotted paths (e.g. buyer.name, lines.0.description). |
| currency | Yes | |
| docs_url | No | Public page describing this server and its tools. |
| page_url | Yes | The editor page the link opens, without the document. |
| editor_url | Yes | Short link that opens the document prefilled in the LuckPanda editor. Valid until expires_at (7 days). |
| expires_at | Yes | ISO 8601 time the link stops opening. |
| prefill_url | No | A self-contained link with the document in the URL; present only when it is short enough. |
| document_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the 7-day server-side storage under a random, unlisted/unindexed link id, that every call creates a new link (reinforcing idempotentHint=false), and that nothing is issued, numbered or sent. It also describes the response contents (totals with tax, missing required fields, ignored invalid parts). This is exactly the kind of side-effect disclosure a mutation tool needs.
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 purpose, then return values, then side effects, then the no-issue constraint and input rule — a logical ordering with little waste. It is somewhat long, and enumerating the five document kinds duplicates the enum already in the schema.
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 a nested-object schema and an output schema, the description covers what an agent needs: what is validated, what comes back, storage side effects, and the constraint that nothing is issued. Return-value explanation is technically redundant given the output schema but harmless.
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 100% and the nested schema carries extensive per-field documentation, so the baseline is 3. The description adds only the input-integrity rule about not inventing details; it contributes no syntax, format or default information beyond the schema.
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?
States a specific verb and resource (validate a document, return editor_url that opens it prefilled in the LuckPanda editor) and enumerates the supported document kinds. It is clearly separable from the create_document_pdf sibling because it produces a link, not the PDF itself, and explicitly says nothing is issued, numbered or sent.
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?
Gives clear context for use ('person can review, edit and download') and an explicit constraint on inputs ('Use details the person gave; do not invent them'). It does not, however, name the alternative create_document_pdf or state when a caller should pick one over the other, so it lacks true when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_document_pdfCreate a document PDFAInspect
Generates a PDF of a document (invoice, quote, proforma invoice, receipt or credit note) and returns it base64-encoded in structuredContent.pdf_base64, with its verification URL and an editor_url that opens the same document in the editor. PDFs from this tool include a LuckPanda footer and a verification QR code. Side effects: stores a verification record for the PDF (issuer name, document type, date, currency and total; no client details) and a 7-day copy of the document behind editor_url. Limit: about 40 PDFs an hour per network.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | A document to prefill. Parts that fail validation are left out and listed in `ignored`; nothing is ever rendered as HTML. | |
| page | No | The page to open: a slug ("credit-note", "gst-invoice-format") or its URL. Default: the generator for the document type and country. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes | |
| totals | Yes | Totals with tax worked out. |
| ignored | Yes | Parts of the input that were left out because they were invalid, as dotted paths. |
| missing | Yes | Required fields still empty, as dotted paths (e.g. buyer.name, lines.0.description). |
| variant | No | "branded": the PDF carries the LuckPanda footer and verification QR code. |
| docs_url | No | Public page describing this server and its tools. |
| file_name | Yes | |
| editor_url | No | Short link that opens the same document in the LuckPanda editor (7 days). Omitted when the link limit is reached. |
| pdf_base64 | Yes | The PDF file, base64-encoded. |
| size_bytes | Yes | |
| verify_url | Yes | Page that confirms the PDF was made by LuckPanda and shows what was printed on it. |
| fingerprint | No | |
| verify_code | Yes | |
| content_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false — they establish that this writes and is non-idempotent but say nothing about what it writes. The description supplies exactly that: what gets persisted (verification record with issuer name, type, date, currency, total, explicitly no client details), the 7-day editor copy, the base64 return channel, the LuckPanda footer/QR branding, and a concrete rate limit of ~40 PDFs/hour per network.
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?
A single dense paragraph, front-loaded with the output (what is returned) before side effects and limits. Every clause carries information, though the run-on return-format sentence is slightly harder to scan than a short list would be.
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 write tool with nested input and an existing output schema, this covers the gaps that matter: return shape, branding, persisted side effects, retention, and throughput limits. An agent has everything needed to call it and to anticipate its consequences.
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 100%, so the schema already documents `doc` and `page` including enums, defaults and validation-failure behavior. The description adds no field-level syntax or default detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generates a PDF of a document') and enumerates the supported document kinds, so an agent knows exactly what it produces. It does not, however, name or contrast itself with the sibling create_document_link, which is the obvious alternative for the same document object.
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?
There is no explicit when-to-use or when-not-to-use guidance and no mention of create_document_link as the alternative for callers who want a link rather than an embedded PDF. The context is inferable from the purpose, but nothing steers the agent between the two sibling creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_hsn_codeFind an HSN or SAC code (India GST)ARead-onlyIdempotentInspect
Searches HSN codes (goods) and SAC codes (services) by product or service words or by code digits, with the official description, the chapter and heading it sits under, and the GST rate where it has been checked against the rate notification (otherwise rate_percent is null: check the notification). Returns the dataset scope with every answer. India only.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Goods (hsn), services (sac) or both (default). | |
| limit | No | At most 25; default 10. | |
| query | Yes | Words (e.g. "laptop", "legal services") or 2 to 8 digits of a code. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | No | |
| as_of | No | |
| query | Yes | |
| scope | Yes | What the dataset covers and does not. |
| total | Yes | Matches found; results holds the best ones up to the limit. |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), yet the description adds real behavioral context: which fields come back, the meaning of a null rate_percent, and that dataset scope accompanies every answer. That is genuinely additive rather than a restatement of the structured hints.
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 the core action and scope, then a dense but purposeful second sentence covering outputs, the null-rate caveat, and dataset scope. Slightly packed with clause stacking, but every sentence carries 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?
With an output schema present, return values need not be explained, yet the description usefully flags the null rate case and dataset scope. Between annotations, full schema coverage, and output schema, an agent has enough to call this correctly; only comparative routing to sibling tools is missing.
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 100%, so the schema already documents type, limit (max 25, default 10) and the query format including the 2-to-8-digit rule. The description mirrors the query semantics ('words or code digits') but adds no syntax or constraint beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (searches) and resource (HSN codes for goods, SAC codes for services), plus the retrieval keys (product/service words or code digits). This is clearly distinguishable from siblings like calculate_gst and check_gstin, which compute or validate rather than look up codes.
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?
Scope is stated ('India only') and one important conditional is explained (rate_percent null means the rate was not checked against the notification, so check it). However, there is no explicit guidance on when to choose this over siblings such as calculate_gst for rate computation, leaving usage only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_rulesGet fields and tax rules for a documentARead-onlyIdempotentInspect
Returns what to collect before creating a document of a given type and country: required, recommended and optional fields, the tax ID and tax names, the country's invoicing rules (for example India GST rule 46, UK VAT invoice contents), the CGST/SGST versus IGST split and state codes for India, and credit-note reasons. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO alpha-2 of the seller, e.g. IN, US, GB, DE. | |
| document_type | Yes | The kind of document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gst | No | India only: the CGST/SGST versus IGST split, place of supply and state codes. |
| tax | Yes | |
| rules | Yes | |
| fields | Yes | |
| locale | No | |
| country | Yes | |
| formats | No | |
| reasons | No | Credit notes only. |
| currency | Yes | |
| disclaimer | Yes | |
| country_name | No | |
| document_type | Yes | |
| what_to_include | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld=false, so the trailing 'Read-only' is largely repetition. The description does add useful scope about the breadth of returned rule content, but since an output schema exists, that content detail is mostly redundant and adds little behavioral context beyond what structured fields supply.
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?
A single front-loaded sentence opens with the core purpose before listing return contents, so the key information leads. It is dense with enumerated clauses, though each clause is substantive rather than filler.
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 two-parameter, read-only lookup with a full output schema and complete annotation coverage, the description is nearly sufficient: it conveys purpose, scope of returned rules and safety profile. The remaining gap is routing guidance relative to the calculation and check_gstin siblings, which is not addressed.
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 100% and both parameters are fully documented (country as ISO alpha-2 with examples, document_type as a five-value enum). The description only restates 'a given type and country' without adding format or constraint detail, so the baseline 3 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?
States a specific verb and resource: it 'returns what to collect before creating a document of a given type and country', enumerating the concrete outputs (required/recommended/optional fields, tax ID and names, country invoicing rules, CGST/SGST vs IGST split, credit-note reasons). This clearly separates it from calculation siblings like calculate_gst and calculate_vat, which compute amounts rather than surface schema/rules metadata.
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 phrase 'what to collect before creating a document' implies the usage context: call this prior to document creation to discover the required inputs. However, it never names an explicit alternative or a when-not-to-use condition, despite siblings such as create_document_pdf, calculate_gst and check_gstin that an agent could confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_toolsList document pages and calculatorsARead-onlyIdempotentInspect
Lists the document pages on luckpanda.app (generators for invoices, quotes, proforma invoices, receipts and credit notes, plus country and trade templates) and its calculator pages, each with its URL. Optional filters: document_type, country, query. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Words to look for in a page's name or summary, e.g. "freelance" or "GST". | |
| country | No | ISO alpha-2: pages for this country plus the ones for any country. | |
| document_type | No | The kind of document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| docs_url | No | Public page describing this server and its tools. |
| documents | Yes | |
| calculators | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the trailing 'Read-only' is largely redundant. The description does add genuine context about the scope of the corpus (document generators plus country/trade templates and calculator pages), but says nothing about result volume, ordering, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense opening sentence establishes the corpus, then a compact filter line. Front-loaded and free of filler, though the parenthetical inventory of generator types is somewhat long for the value it adds.
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?
An output schema exists, so return format need not be explained, and the description covers the domain scope. For a zero-required-parameter listing tool this is nearly complete; only result-size/ordering behavior is unaddressed.
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 100%, so the baseline is 3. The description merely restates the three filter names, adding no syntax, defaults, or combination semantics beyond what the schema already documents (including the enum and the ISO alpha-2 note).
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?
States a specific verb ('Lists') plus the exact resource: document pages on luckpanda.app (enumerating the generator categories) and its calculator pages. This clearly separates it from the sibling calculate_*/create_* tools, which compute values or produce artifacts rather than enumerate pages.
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 this is a discovery/browse tool and notes that all filters are optional, but it never says when to reach for it over siblings like calculate_gst or find_hsn_code, nor any exclusions. Usage must be inferred from the enumerated content.
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.
9 tool updates
- Changed
calculate_emi6 fields changed- changed
Input schema / properties / annual_rate / descriptionPrevious value: -"Yearly interest in percent."New value: +"Yearly interest in percent, e.g. 9.5." - changed
Input schema / properties / currency / descriptionPrevious value: -"Default INR."New value: +"ISO 4217 code; default INR." - added
Input schema / properties / months / descriptionAdded value: +"Loan term in months (1 to 600). Give months or years." - added
Input schema / properties / principal / descriptionAdded value: +"Loan amount." - added
Input schema / properties / years / descriptionAdded value: +"Loan term in years (up to 50). Used when months is not given." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "annual_rate_percent": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "emi": { + "type": "number" + }, + "formatted": { + "description": "The amounts formatted for the currency's country.", + "properties": { + "emi": { + "type": "string" + }, + "total_interest": { + "type": "string" + }, + "total_payment": { + "type": "string" + } + }, + "required": [ + "emi", + "total_interest", + "total_payment" + ], + "type": "object" + }, + "locale": { + "type": "string" + }, + "months": { + "type": "integer" + }, + "principal": { + "type": "number" + }, + "schedule_by_year": { + "items": { + "properties": { + "balance": { + "type": "number" + }, + "interest": { + "type": "number" + }, + "principal": { + "type": "number" + }, + "year": { + "type": "integer" + } + }, + "required": [ + "year", + "principal", + "interest", + "balance" + ], + "type": "object" + }, + "type": "array" + }, + "total_interest": { + "type": "number" + }, + "total_payment": { + "type": "number" + } + }, + "required": [ + "currency", + "principal", + "annual_rate_percent", + "months", + "emi", + "total_interest", + "total_payment", + "formatted", + "schedule_by_year" + ], + "type": "object" +}
- Changed
calculate_gst4 fields changed- added
Input schema / properties / amount / descriptionAdded value: +"Amount in rupees, e.g. 10000." - added
Input schema / properties / mode / descriptionAdded value: +"add: the amount is before GST (default). remove: the amount includes GST." - added
Input schema / properties / supply / descriptionAdded value: +"intra: within one state, CGST + SGST (default). inter: another state or an export, IGST." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "amount_before_gst": { + "type": "number" + }, + "amount_including_gst": { + "type": "number" + }, + "components": { + "items": { + "properties": { + "amount": { + "type": "number" + }, + "name": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate_percent": { + "type": "number" + } + }, + "required": [ + "name", + "rate_percent", + "amount" + ], + "type": "object" + }, + "type": "array" + }, + "currency": { + "type": "string" + }, + "formatted": { + "description": "The amounts formatted for the currency's country.", + "properties": { + "amount_before_gst": { + "type": "string" + }, + "amount_including_gst": { + "type": "string" + }, + "gst": { + "type": "string" + } + }, + "required": [ + "amount_before_gst", + "gst", + "amount_including_gst" + ], + "type": "object" + }, + "gst": { + "type": "number" + }, + "locale": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate_percent": { + "type": "number" + }, + "supply": { + "type": "string" + } + }, + "required": [ + "currency", + "mode", + "supply", + "rate_percent", + "amount_before_gst", + "gst", + "amount_including_gst", + "components", + "formatted" + ], + "type": "object" +}
- Changed
calculate_vat4 fields changed- added
Input schema / properties / amount / descriptionAdded value: +"Amount in the country's currency, e.g. 1000." - added
Input schema / properties / mode / descriptionAdded value: +"add: the amount is net (default). remove: the amount includes VAT." - changed
Input schema / properties / rate / descriptionPrevious value: -"VAT rate in percent."New value: +"VAT rate in percent; default the country's standard rate." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "formatted": { + "description": "The amounts formatted for the currency's country.", + "properties": { + "gross": { + "type": "string" + }, + "net": { + "type": "string" + }, + "vat": { + "type": "string" + } + }, + "required": [ + "net", + "vat", + "gross" + ], + "type": "object" + }, + "gross": { + "type": "number" + }, + "locale": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "net": { + "type": "number" + }, + "rate_percent": { + "type": "number" + }, + "standard_rate_percent": { + "type": "number" + }, + "vat": { + "type": "number" + } + }, + "required": [ + "country", + "currency", + "mode", + "rate_percent", + "net", + "vat", + "gross", + "formatted" + ], + "type": "object" +}
- Changed
check_gstin2 fields changed- added
Input schema / properties / gstin / descriptionAdded value: +"The 15-character GSTIN, e.g. 27AAPFU0939F1ZV." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "gstin": { + "type": "string" + }, + "note": { + "type": "string" + }, + "pan": { + "type": [ + "string", + "null" + ] + }, + "pan_holder_type": { + "type": [ + "string", + "null" + ] + }, + "problem": { + "type": [ + "string", + "null" + ] + }, + "state_code": { + "type": [ + "string", + "null" + ] + }, + "state_name": { + "type": [ + "string", + "null" + ] + }, + "valid_format": { + "type": "boolean" + } + }, + "required": [ + "gstin", + "valid_format" + ], + "type": "object" +}
- Changed
create_document_link6 fields changed- added
Input schema / properties / doc / properties / currency / descriptionAdded value: +"ISO 4217 code. If missing: the seller country's currency." - added
Input schema / properties / doc / properties / issue_date / descriptionAdded value: +"YYYY-MM-DD. Default: today." - added
Input schema / properties / doc / properties / lines / descriptionAdded value: +"The items or services, 1 to 100 lines." - added
Input schema / properties / doc / properties / notes / descriptionAdded value: +"Shown on the document, for example a thank-you or a delivery note." - added
Input schema / properties / doc / properties / terms / descriptionAdded value: +"Payment terms and bank details; for a quote, validity and delivery terms." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "docs_url": { + "description": "Public page describing this server and its tools.", + "type": "string" + }, + "document_type": { + "type": "string" + }, + "editor_url": { + "description": "Short link that opens the document prefilled in the LuckPanda editor. Valid until expires_at (7 days).", + "type": "string" + }, + "expires_at": { + "description": "ISO 8601 time the link stops opening.", + "type": "string" + }, + "ignored": { + "description": "Parts of the input that were left out because they were invalid, as dotted paths.", + "items": { + "type": "string" + }, + "type": "array" + }, + "missing": { + "description": "Required fields still empty, as dotted paths (e.g. buyer.name, lines.0.description).", + "items": { + "type": "string" + }, + "type": "array" + }, + "page_url": { + "description": "The editor page the link opens, without the document.", + "type": "string" + }, + "prefill_url": { + "description": "A self-contained link with the document in the URL; present only when it is short enough.", + "type": "string" + }, + "totals": { + "description": "Totals with tax worked out.", + "properties": { + "currency": { + "description": "ISO 4217 code.", + "type": "string" + }, + "discount_minor": { + "type": "integer" + }, + "formatted": { + "description": "The amounts formatted for the document's country.", + "properties": { + "subtotal": { + "type": "string" + }, + "tax": { + "type": "string" + }, + "total": { + "type": "string" + } + }, + "required": [ + "subtotal", + "tax", + "total" + ], + "type": "object" + }, + "subtotal_minor": { + "description": "Before tax and discount, in minor units (cents, paise).", + "type": "integer" + }, + "supply": { + "description": "India: the kind of supply, when it is known.", + "type": "string" + }, + "tax_lines": { + "items": { + "properties": { + "amount": { + "type": "string" + }, + "name": { + "type": "string" + }, + "rate_percent": { + "type": "number" + } + }, + "required": [ + "name", + "rate_percent", + "amount" + ], + "type": "object" + }, + "type": "array" + }, + "tax_minor": { + "type": "integer" + }, + "total_minor": { + "description": "Amount payable, in minor units.", + "type": "integer" + } + }, + "required": [ + "currency", + "total_minor", + "formatted", + "tax_lines" + ], + "type": "object" + } + }, + "required": [ + "editor_url", + "expires_at", + "page_url", + "document_type", + "country", + "currency", + "totals", + "missing", + "ignored" + ], + "type": "object" +}
- Changed
create_document_pdf6 fields changed- added
Input schema / properties / doc / properties / currency / descriptionAdded value: +"ISO 4217 code. If missing: the seller country's currency." - added
Input schema / properties / doc / properties / issue_date / descriptionAdded value: +"YYYY-MM-DD. Default: today." - added
Input schema / properties / doc / properties / lines / descriptionAdded value: +"The items or services, 1 to 100 lines." - added
Input schema / properties / doc / properties / notes / descriptionAdded value: +"Shown on the document, for example a thank-you or a delivery note." - added
Input schema / properties / doc / properties / terms / descriptionAdded value: +"Payment terms and bank details; for a quote, validity and delivery terms." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "content_type": { + "type": "string" + }, + "docs_url": { + "description": "Public page describing this server and its tools.", + "type": "string" + }, + "editor_url": { + "description": "Short link that opens the same document in the LuckPanda editor (7 days). Omitted when the link limit is reached.", + "type": "string" + }, + "file_name": { + "type": "string" + }, + "fingerprint": { + "type": "string" + }, + "ignored": { + "description": "Parts of the input that were left out because they were invalid, as dotted paths.", + "items": { + "type": "string" + }, + "type": "array" + }, + "missing": { + "description": "Required fields still empty, as dotted paths (e.g. buyer.name, lines.0.description).", + "items": { + "type": "string" + }, + "type": "array" + }, + "pages": { + "type": "integer" + }, + "pdf_base64": { + "description": "The PDF file, base64-encoded.", + "type": "string" + }, + "size_bytes": { + "type": "integer" + }, + "totals": { + "description": "Totals with tax worked out.", + "properties": { + "currency": { + "description": "ISO 4217 code.", + "type": "string" + }, + "discount_minor": { + "type": "integer" + }, + "formatted": { + "description": "The amounts formatted for the document's country.", + "properties": { + "subtotal": { + "type": "string" + }, + "tax": { + "type": "string" + }, + "total": { + "type": "string" + } + }, + "required": [ + "subtotal", + "tax", + "total" + ], + "type": "object" + }, + "subtotal_minor": { + "description": "Before tax and discount, in minor units (cents, paise).", + "type": "integer" + }, + "supply": { + "description": "India: the kind of supply, when it is known.", + "type": "string" + }, + "tax_lines": { + "items": { + "properties": { + "amount": { + "type": "string" + }, + "name": { + "type": "string" + }, + "rate_percent": { + "type": "number" + } + }, + "required": [ + "name", + "rate_percent", + "amount" + ], + "type": "object" + }, + "type": "array" + }, + "tax_minor": { + "type": "integer" + }, + "total_minor": { + "description": "Amount payable, in minor units.", + "type": "integer" + } + }, + "required": [ + "currency", + "total_minor", + "formatted", + "tax_lines" + ], + "type": "object" + }, + "variant": { + "description": "\"branded\": the PDF carries the LuckPanda footer and verification QR code.", + "type": "string" + }, + "verify_code": { + "type": "string" + }, + "verify_url": { + "description": "Page that confirms the PDF was made by LuckPanda and shows what was printed on it.", + "type": "string" + } + }, + "required": [ + "file_name", + "content_type", + "size_bytes", + "pages", + "verify_code", + "verify_url", + "totals", + "missing", + "ignored", + "pdf_base64" + ], + "type": "object" +}
- Changed
find_hsn_code1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "as_of": { + "type": "string" + }, + "query": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "code": { + "type": "string" + }, + "description": { + "type": "string" + }, + "kind": { + "enum": [ + "HSN", + "SAC" + ], + "type": "string" + }, + "level": { + "type": "string" + }, + "path": { + "items": { + "properties": { + "code": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "code", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "rate_note": { + "type": [ + "string", + "null" + ] + }, + "rate_percent": { + "description": "GST rate in percent where it was checked against the rate notification, otherwise null.", + "type": [ + "number", + "null" + ] + }, + "sources": { + "items": { + "properties": { + "href": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "label", + "href" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "code", + "kind", + "description", + "rate_percent" + ], + "type": "object" + }, + "type": "array" + }, + "scope": { + "description": "What the dataset covers and does not.", + "type": "string" + }, + "total": { + "description": "Matches found; results holds the best ones up to the limit.", + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "required": [ + "query", + "total", + "results", + "scope" + ], + "type": "object" +}
- Changed
get_document_rules2 fields changed- added
Input schema / properties / document_type / descriptionAdded value: +"The kind of document." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "country": { + "type": "string" + }, + "country_name": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "disclaimer": { + "type": "string" + }, + "document_type": { + "type": "string" + }, + "fields": { + "items": { + "properties": { + "field": { + "type": "string" + }, + "need": { + "enum": [ + "required", + "recommended", + "optional" + ], + "type": "string" + }, + "note": { + "type": "string" + } + }, + "required": [ + "field", + "need" + ], + "type": "object" + }, + "type": "array" + }, + "formats": { + "properties": { + "date": { + "type": "string" + }, + "money": { + "type": "string" + } + }, + "required": [ + "money", + "date" + ], + "type": "object" + }, + "gst": { + "description": "India only: the CGST/SGST versus IGST split, place of supply and state codes.", + "properties": {}, + "required": [], + "type": "object" + }, + "locale": { + "type": "string" + }, + "reasons": { + "description": "Credit notes only.", + "items": { + "properties": { + "code": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "code", + "label" + ], + "type": "object" + }, + "type": "array" + }, + "rules": { + "items": { + "type": "string" + }, + "type": "array" + }, + "tax": { + "properties": { + "name": { + "type": "string" + }, + "seller_tax_id": { + "type": "string" + }, + "seller_tax_id_example": { + "type": "string" + }, + "vat_country": { + "type": "boolean" + } + }, + "required": [ + "name", + "seller_tax_id" + ], + "type": "object" + }, + "what_to_include": { + "items": { + "properties": { + "field": { + "type": "string" + }, + "what": { + "type": "string" + } + }, + "required": [ + "field", + "what" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "document_type", + "country", + "currency", + "tax", + "fields", + "rules", + "disclaimer" + ], + "type": "object" +}
- Changed
list_tools3 fields changed- added
Input schema / properties / document_type / descriptionAdded value: +"The kind of document." - added
Input schema / properties / query / descriptionAdded value: +"Words to look for in a page's name or summary, e.g. \"freelance\" or \"GST\"." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "calculators": { + "items": { + "properties": { + "api_url": { + "type": "string" + }, + "mcp_tool": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page_url": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "name", + "slug", + "page_url" + ], + "type": "object" + }, + "type": "array" + }, + "docs_url": { + "description": "Public page describing this server and its tools.", + "type": "string" + }, + "documents": { + "items": { + "properties": { + "country": { + "description": "ISO alpha-2, or null for a page that fits any country.", + "type": [ + "string", + "null" + ] + }, + "document_type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page_url": { + "description": "The page, which also opens prefilled with ?doc=.", + "type": "string" + }, + "slug": { + "type": "string" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "name", + "slug", + "document_type", + "country", + "summary", + "page_url" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "documents", + "calculators" + ], + "type": "object" +}
9 tool updates
- First observed
calculate_emi - First observed
calculate_gst - First observed
calculate_vat - First observed
check_gstin - First observed
create_document_link - First observed
create_document_pdf - First observed
find_hsn_code - First observed
get_document_rules - First observed
list_tools
Related MCP Connectors
Create, send and track invoices for freelancers and small businesses.
Make invoice, quote and receipt PDFs from a chat: totals, tax, 26 currencies. Free, nothing stored.
Create invoices from your AI assistant in 6 languages and 10 currencies, ready for WhatsApp.
Quotations, invoices and 8 more document kinds; quote to invoice; tax for 195 countries; forms.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables the generation of professional PDF invoices and their distribution via email using customizable templates. It allows users to create, manage, and send invoices with standard business fields like tax rates and line items through natural language.319 npm2MIT
- AlicenseCqualityDmaintenanceProvides access to the Invoices Generator API to create professional, customizable invoices with detailed buyer, seller, and service information. It supports multiple languages, currencies, and tax configurations through a standardized tool interface.1MIT
- AlicenseAqualityCmaintenanceCreate free, no-signup invoices from your AI assistant — the create_invoice tool returns a link that opens blankinvoicemaker.com pre-filled, ready to download as a watermark-free PDF.240 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables drafting quotations and invoices from AI assistants like ChatGPT, Claude, and Gemini, with 133 templates, tax rules for 195 countries, and a link to the finished document.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.