Skip to main content
Glama
asgard-ai-platform

MCP Universal EC E-Invoice Server

MCP Universal EC E-Invoice Server

PyPI version Python versions License: MIT GitHub stars GitHub issues GitHub last commit

繁體中文

An open-source MCP (Model Context Protocol) server wrapping the Universal EC (汎宇電商) Taiwan E-Invoice POS Web Service (JSON format, MIG4.1). Exposes 27 AI-callable tools covering all available function codes via stdio JSON-RPC 2.0.

Built for Claude Code and any MCP-compatible AI client. Enables AI agents to issue invoices, void invoices, manage invoice numbers, query cancellation status, and handle allowances through natural language.

Features

  • 27 MCP tools — Full coverage of all Universal EC e-invoice API function codes

  • stdio JSON-RPC 2.0 — Standard MCP transport protocol

  • 3 wrapper formats — INDEX, Invoice, Allowance (auto-selected per function)

  • Credential injection — SELLERID/POSID/POSSN auto-injected by connector

  • TDD tested — 53 unit tests + 5 live regression tests

Related MCP server: app.wishpool/taiwan-payments-mcp

Quick Start

# Setup
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"

# Configure credentials
cp .env.example .env
# Edit .env with your Universal EC credentials

# Run server
python mcp_server.py

Configuration

Create a .env file with your Universal EC POS credentials:

EINVOICE_BASE_URL=https://epostw.einvoice.com.tw/GetInvoice.ashx
EINVOICE_SELLER_ID=your_seller_id
EINVOICE_POS_ID=your_pos_id
EINVOICE_POS_SN=your_pos_sn

Environment

URL

Test (測試機)

https://epostw.einvoice.com.tw/GetInvoice.ashx

Production (正式機)

https://eposw.einvoice.com.tw/GetInvoice.ashx

Project Structure

mcp-universalec-e-invoice/
├── app.py                          # FastMCP singleton
├── mcp_server.py                   # Entry point (stdio transport)
├── config/
│   └── settings.py                 # URL + credentials from .env
├── connectors/
│   └── einvoice_client.py          # Single POST connector (3 wrappers)
├── tools/
│   ├── system_tools.py             # Y01
│   ├── invoice_number_tools.py     # A01, C01, Z21, Z22
│   ├── b2c_invoice_tools.py        # C0401, C0401N, C0501
│   ├── b2b_invoice_tools.py        # A0401, A0501, A0101, A0201
│   ├── allowance_tools.py          # D0401, D0401N, D0501, B0401, B0501, B0101
│   ├── cancel_tools.py             # C0701, B0701
│   ├── query_tools.py              # Z11, Z31, Z33, Z34
│   └── admin_tools.py              # Z32, E0401, E0402
└── tests/
    ├── conftest.py                 # Shared fixtures
    ├── test_einvoice_client.py     # Connector unit tests
    ├── test_system_tools.py        # Y01 tests
    ├── test_invoice_number_tools.py
    ├── test_b2c_invoice_tools.py
    ├── test_b2b_invoice_tools.py
    ├── test_allowance_tools.py
    ├── test_cancel_tools.py
    ├── test_query_tools.py
    ├── test_admin_tools.py
    └── test_regression.py          # Live API tests

Tools (27 total)

System

Tool

Code

Description

get_system_time

Y01

Connection test / get server time

Invoice Number Management

Tool

Code

Description

get_invoice_numbers

A01

Get invoice number allocation (current period)

get_next_period_numbers

C01

Get invoice number allocation (next period)

get_invoice_numbers_expanded

Z21

Get numbers expanded per-invoice with AESKEY

get_next_period_numbers_expanded

Z22

Get next period numbers expanded with AESKEY

B2C Invoices

Tool

Code

Description

create_b2c_invoice

C0401

Create B2C invoice (positional field format)

create_b2c_invoice_named

C0401N

Create B2C invoice (named field format)

void_b2c_invoice

C0501

Void a B2C invoice

B2B Invoices

Tool

Code

Description

create_b2b_invoice

A0401

Create B2B invoice (platform certified)

void_b2b_invoice

A0501

Void a B2B invoice

create_b2b_exchange_invoice

A0101

Create B2B exchange invoice

void_b2b_exchange_invoice

A0201

Void a B2B exchange invoice

Allowances (折讓)

Tool

Code

Description

create_b2c_allowance

D0401

Create B2C allowance

create_b2c_allowance_named

D0401N

Create B2C allowance (named format)

void_b2c_allowance

D0501

Void a B2C allowance

create_b2b_allowance

B0401

Create B2B allowance

void_b2b_allowance

B0501

Void a B2B allowance

create_b2b_exchange_allowance

B0101

Create B2B exchange allowance

Cancellation (註銷)

Tool

Code

Description

cancel_invoice

C0701

Cancel an invoice

batch_cancel_invoice

B0701

Batch cancel with full invoice data

Queries

Tool

Code

Description

get_cancel_status

Z11

Get invoice cancel process status

get_downloaded_track_ranges

Z31

Query downloaded track ranges

get_assignment_info

Z33

Query tax ID number assignment

get_winning_list

Z34

Download winning invoice list

Administration

Tool

Code

Description

upload_next_period_tracks

Z32

Upload next period track numbers

assign_branch_tracks

E0401

Branch office track assignment

report_unused_tracks

E0402

Report unused track ranges

Usage Examples

Once the MCP server is running, an AI assistant (e.g. Claude) can call these tools on your behalf. Here are real-world scenarios showing what you say and how the AI responds.


"Help me check if the e-invoice system is connected"

You: 幫我測試一下電子發票系統有沒有連線成功

AI calls: get_system_time()

Result: The system returns REPLY: "1" with MESSAGE: "連線成功" and the server time 2026/04/01 22:29:03. Your connection is working.


"What invoice numbers do I have available right now?"

You: 我目前有哪些可用的發票號碼?

AI calls: get_invoice_numbers()

Result: Current period is 115 年 03-04 月, track GS, numbers 82775400 ~ 82775449 (50 invoices available). The AI can also explain the QRCode AES key returned for barcode generation.


"I need to get the detailed invoice numbers with AES keys for printing"

You: 我需要取得每張發票的 AESKEY 跟隨機碼,準備列印用

AI calls: get_invoice_numbers_expanded()

Result: Returns 50 individual invoices, each with its own number, AESKEY, and random number:

GS82775450 → AESKEY: Xymp9aqy..., RandomNumber: 7833
GS82775451 → AESKEY: XausdWBO..., RandomNumber: 4581
...

"Issue an invoice for a customer who bought 2 lattes and 1 cake"

You: 幫我開一張發票,客人買了 2 杯拿鐵 65 元、1 個巧克力蛋糕 85 元,總共 215 元含稅,紙本發票已列印

AI calls: get_invoice_numbers_expanded() to get an available number, then:

create_b2c_invoice(
  invoice_number = "GS82775402",     ← from the allocation
  invoice_date   = "2026-04-01",
  invoice_time   = "14:30:00",
  buyer_id       = "0000000000",     ← consumer, no tax ID
  buyer_name     = "0000",
  invoice_type   = "07",
  donate_mark    = "0",
  print_mark     = "Y",
  random_number  = "6136",           ← from the allocation
  tax_type = "1", tax_rate = "0.05", tax_amount = "10",
  sales_amount = "205", free_tax = "0", zero_tax = "0", total = "215",
  items = [
    {B1:"1", B2:"拿鐵咖啡", B3:"2", B5:"65", B6:"130", B7:"1", B13:"1"},
    {B1:"2", B2:"巧克力蛋糕", B3:"1", B5:"85", B6:"85", B7:"2", B13:"1"},
  ]
)

Result: REPLY: "1", MESSAGE: "成功", invoice GS82775402 created.


"Please void invoice GS82775401"

You: 請幫我作廢發票 GS82775401,原因是客戶取消訂單

AI calls:

void_b2c_invoice(
  invoice_number = "GS82775401",
  invoice_date   = "2026-04-01",
  buyer_id       = "0000000000",
  seller_id      = "23997652",
  cancel_date    = "2026-04-01",
  cancel_time    = "15:00:00",
  cancel_reason  = "客戶取消訂單",
)

Result: REPLY: "1", MESSAGE: "成功" — invoice voided successfully.


"Check the cancellation status of invoice GS82775400"

You: 幫我查一下 GS82775400 這張發票的註銷狀態

AI calls: get_cancel_status(invoice_number="GS82775400", invoice_date="2026-04-01")

Result: STATUSCODE: "1" = completed, "2" = pending, "3" = failed. The AI interprets and tells you the current status in plain language.


"Cancel invoice GS82775400 — it was issued by mistake"

You: 發票 GS82775400 開錯了,幫我註銷

AI calls:

cancel_invoice(
  invoice_number = "GS82775400",
  invoice_date   = "2026-04-01",
  buyer_id       = "0000000000",
  seller_id      = "23997652",
  cancel_date    = "2026-04-01",
  cancel_time    = "16:00:00",
  cancel_reason  = "誤開發票",
)

Result: If the invoice has been uploaded to the tax authority, REPLY: "1" confirms cancellation. If it hasn't been uploaded yet, the system returns REPLY: "-1" with a message explaining the invoice is still being processed — the AI will tell you to try again later.

Note: "作廢" (C0501 void) and "註銷" (C0701 cancel) are different. Void happens before upload to tax authority; cancel happens after. The AI picks the right tool based on context.


"I need to check what invoice number ranges have been downloaded"

You: 查一下統編 23997652 在 11504 期的 GS 字軌已下載的配號區間

AI calls:

get_downloaded_track_ranges(
  head_ban      = "23997652",
  branch_ban    = "23997652",
  invoice_type  = "07",
  year_month    = "11504",
  invoice_track = "GS",
)

Result: Returns the track ranges that have been successfully downloaded for this period.

Testing

# Unit tests (mocked HTTP, no credentials needed)
pytest tests/ --ignore=tests/test_regression.py -v

# Regression tests (requires .env with valid credentials)
pytest tests/test_regression.py -v -s

Architecture

All 27 functions communicate through a single POST endpoint (GetInvoice.ashx), differentiated by function code in the JSON body. The connector auto-injects credentials (SELLERID, POSID, POSSN) and system time.

Three JSON wrapper formats:

  • INDEX — System/number functions (Y01, A01, C01, Z21, Z22, Z11)

  • Invoice — Invoice/allowance/admin CRUD (C0401, A0401, D0401, C0701, E0401, Z31, etc.)

  • Allowance — B0501 only (void B2B allowance)

License

MIT License — see LICENSE for details.

Part of the Asgard Ecosystem

See the full Asgard AI Platform for more MCP servers.

Available Tools

27 tools
assign_branch_tracksB

Assign invoice track ranges to a branch (E0401). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
head_banYesHead company tax ID (HeadBan).
branch_banYesBranch company tax ID (BranchBan).
year_monthYesYear-month period (YYMM format).
invoice_typeYesInvoice type code.
invoice_trackYesInvoice track (2 uppercase letters).
invoice_end_noYesEnding invoice number for the main track.
invoice_begin_noYesBeginning invoice number for the main track.
branch_track_itemsYesList of branch track items. Each item: {InvoiceBeginNo, InvoiceEndNo, InvoiceBooklet}.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It states the tool 'returns the API response' but does not disclose behavioral details such as whether the operation is destructive, idempotent, or requires specific permissions.

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?

Description is a single informative sentence without wasted words. It is front-loaded with the core action and result, but could be expanded slightly without becoming verbose.

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

Completeness2/5

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

For a tool with 8 required parameters, no output schema, and no annotations, the description is too brief. It does not explain what a track range is, the meaning of parameters like branch_track_items, or any constraints, leaving the agent underinformed.

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

Parameters3/5

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

Schema description coverage is 100% with each parameter having a description. The tool description adds no additional meaning beyond the schema, meeting the baseline for high coverage.

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

Purpose5/5

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

Description clearly states the action 'assign invoice track ranges to a branch' and references the specific system code E0401. This distinguishes it from sibling tools like create_invoice or cancel_invoice.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Sibling tools like get_assignment_info or get_downloaded_track_ranges exist but no context is provided about prerequisites or when assignment is appropriate.

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

batch_cancel_invoiceC

Batch cancel an invoice by re-submitting full invoice data with cancellation info (B0701). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of invoice line items in positional format (B). Each item: {B1, B2, B3, B5, B6, B7, B13}.
totalYesTotal amount including tax (C7).
buyer_idYesBuyer identifier (A5).
currencyNoCurrency code (C11).
discountNoDiscount amount (C8).
free_taxYesTax-exempt sales amount (C2).
tax_rateYesTax rate (C5).
tax_typeYesTax type (C4).
zero_taxYesZero-tax-rate sales amount (C3).
donate_toNoNPO ban love code (A29).
buyer_nameYesBuyer name (A6).
print_markYesPrint mark (A28).
tax_amountYesTax amount (C6).
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
carrier_id1NoCarrier ID primary (A26).
carrier_id2NoCarrier ID secondary (A27).
donate_markYesDonate mark (A24).
main_remarkNoMain remark (A16).
carrier_typeNoCarrier type (A25).
invoice_dateYesInvoice date (A3).
invoice_timeYesInvoice time (A4).
invoice_typeYesInvoice type code (A22).
sales_amountYesTaxable sales amount (C1).
cancel_reasonYesCancellation reason.
exchange_rateNoExchange rate (C10).
random_numberYesRandom number (A30).
invoice_numberYesInvoice number (A2, positional format).
zero_tax_reasonNoZero-tax-rate reason code (A31).
customs_clearanceNoCustoms clearance mark (A17).
original_currency_amountNoOriginal currency amount (C9).

TDQS

C2.9/5.0
Behavior2/5

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

The description mentions 're-submitting full invoice data with cancellation info', implying a mutation operation, but does not explicitly state that this cancels the invoice or disclose side effects like irreversibility. No annotations exist to clarify behavior. The description is sparse, only noting that it returns an API response.

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

Conciseness4/5

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

The description is concise and front-loaded, with a single sentence that conveys the basic purpose. It is not overly verbose, but it could include more information without significant bloat, such as clarifying batch behavior.

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

Completeness2/5

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

Given the complexity of 31 parameters and no output schema or annotations, the description is insufficient. It does not explain the cancellation process, when to use this batch version, or any resubmission rules. A tool with many required fields demands more contextual guidance.

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?

The input schema has 100% description coverage, but many descriptions are cryptic codes (e.g., 'C2', 'A5'). The tool description adds no additional meaning beyond the schema. However, the phrase 're-submitting full invoice data' provides context that all parameters are needed to reconstruct the original invoice, which slightly aids understanding.

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 'Batch cancel an invoice', which clearly indicates the action and resource. However, the term 'batch' is ambiguous and not differentiated from the sibling tool 'cancel_invoice', which likely handles single invoice cancellations. The description lacks specificity about what the batch aspect entails.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus other cancellation tools, such as 'cancel_invoice'. There is no mention of prerequisites, context, or scenarios where batch cancellation is appropriate. The description does not help the agent decide when to invoke this tool.

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

cancel_invoiceC

Cancel (註銷) an invoice (C0701). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
remarkNoRemark.
buyer_idYesBuyer identifier.
seller_idYesSeller identifier.
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
invoice_dateYesOriginal invoice date (YYYYMMDD).
cancel_reasonYesCancellation reason.
invoice_numberYesInvoice number to cancel (註銷).
return_tax_document_numberNoReturn/tax document number.

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavior. It merely states 'Returns the API response' without explaining side effects, error conditions, or required state (e.g., invoice must exist and be cancellable).

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

Conciseness3/5

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

The description is concise (one sentence) but too minimal. It lacks critical guidance and reads as an under-specification rather than efficient detail.

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

Completeness2/5

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

With 9 parameters, no output schema, and no annotations, the description is insufficient. It does not explain the return format, error handling, or the meaning of the cancellation code C0701, leaving the agent dangerously underinformed.

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 by default baseline is 3. The description adds no extra meaning beyond the schema; it does not elaborate on parameter usage or constraints.

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

Purpose4/5

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

The description clearly states the action 'Cancel an invoice' and includes the code C0701. It is specific to a single cancellation, distinguishing it from batch or void siblings, though it could be more precise about the scope.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like batch_cancel_invoice or void tools. The description does not indicate prerequisites or when cancellation is appropriate.

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

create_b2b_allowanceB

Create a B2B allowance (B0401). Seller address is mandatory. Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of product items. Each item: {ALLOWANCESEQUENCENUMBER, ORIGINALINVOICEDATE, ORIGINALINVOICENUMBER, ORIGINALDESCRIPTION, QUANTITY, UNITPRICE, AMOUNT, TAX, TAXTYPE, optional: UNIT, ORIGINALSEQUENCENUMBER}.
buyer_nameYesBuyer name.
tax_amountYesTax amount.
buyer_emailNoBuyer email address.
seller_nameYesSeller name.
seller_emailNoSeller email address.
total_amountYesTotal amount.
buyer_addressNoBuyer address.
allowance_dateYesAllowance date (YYYYMMDD).
allowance_typeYesAllowance type.
seller_addressYesSeller address (mandatory).
buyer_facsimileNoBuyer facsimile number.
buyer_telephoneNoBuyer telephone number.
allowance_numberYesAllowance number.
buyer_identifierYesBuyer tax ID.
seller_facsimileNoSeller facsimile (S_FACSIMILENUMBER).
seller_telephoneNoSeller telephone (S_TELEPHONENUMBER).
buyer_role_remarkNoBuyer role remark.
seller_role_remarkNoSeller role remark.
buyer_customer_numberNoBuyer customer number.
buyer_person_in_chargeNoBuyer person in charge.
seller_customer_numberNoSeller customer number.
seller_person_in_chargeNoSeller person in charge (S_PERSONINCHARGE).
original_invoice_buyer_idNoOriginal invoice buyer ID.
original_invoice_seller_idNoOriginal invoice seller ID.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states 'Returns the API response,' which is vague. There is no mention of side effects, validation rules, or prerequisites beyond seller address.

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 three short sentences with no wasted words. It efficiently conveys the core purpose and a critical constraint, though it could be slightly more structured.

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

Completeness2/5

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

Given 25 parameters and a large sibling set, the description is too sparse. It lacks context about the B2B allowance document type, relationships between parameters, and the response format, making it insufficient for complex usage.

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 baseline is 3. The description adds no new parameter meaning beyond what the schema already provides (e.g., seller_address is mandatory, already in required array).

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

Purpose4/5

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

The description clearly states it creates a B2B allowance (B0401), with a specific verb and resource. However, it does not differentiate from the sibling create_b2b_exchange_allowance, which is a closely related tool.

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

Usage Guidelines3/5

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

It provides one usage hint (seller address is mandatory) but no guidance on when to use this tool versus alternatives like create_b2b_invoice or create_b2b_exchange_allowance.

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

create_b2b_exchange_allowanceC

Create a B2B exchange allowance (B0101). Seller address is mandatory. Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of product items. Each item: {ALLOWANCESEQUENCENUMBER, ORIGINALINVOICEDATE, ORIGINALINVOICENUMBER, ORIGINALDESCRIPTION, QUANTITY, UNITPRICE, AMOUNT, TAX, TAXTYPE, optional: UNIT, ORIGINALSEQUENCENUMBER}.
buyer_nameYesBuyer name.
tax_amountYesTax amount.
seller_nameYesSeller name.
seller_emailNoSeller email address.
total_amountYesTotal amount.
buyer_addressNoBuyer address.
allowance_dateYesAllowance date (YYYYMMDD).
allowance_typeYesAllowance type.
seller_addressYesSeller address (mandatory).
allowance_numberYesAllowance number.
buyer_identifierYesBuyer tax ID.
seller_facsimileNoSeller facsimile number.
seller_telephoneNoSeller telephone number.
seller_identifierYesSeller tax ID.
seller_person_in_chargeNoSeller person in charge.
original_invoice_buyer_idNoOriginal invoice buyer ID.
original_invoice_seller_idNoOriginal invoice seller ID.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions the tool creates a record and returns the API response, but omits important details such as whether the operation is idempotent, required authentication, or potential side effects. The minimal information leaves significant gaps.

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

Conciseness5/5

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

The description is extremely concise: two sentences with no unnecessary words. It front-loads the purpose and includes a key constraint and return value. Every sentence earns its place.

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

Completeness2/5

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

Given the tool's complexity (18 parameters, no output schema, no annotations), the description is too sparse. It lacks context on error responses, prerequisites, or usage scenarios. A more complete description would cover these aspects to assist an AI agent.

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?

The input schema has 100% description coverage for all 18 parameters, so the schema already documents each parameter's meaning. The description adds only that seller address is mandatory, which is already indicated by the 'required' list. No additional semantic value is provided beyond the schema.

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

Purpose4/5

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

The description clearly states the tool creates a B2B exchange allowance (B0101) and mentions seller address is mandatory. It uses a specific verb and resource, but does not differentiate from similar sibling tools like create_b2b_allowance or create_b2c_allowance, so it loses a point for lack of distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling allowance tools, the description should indicate when a B2B exchange allowance is appropriate, but it does not.

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

create_b2b_exchange_invoiceC

Create a B2B exchange invoice (A0101). Seller address is mandatory. Item tax type field is DTaxType. Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of product items. Each item: {Description, Quantity, UnitPrice, DTaxType, Amount, SequenceNumber, optional: Unit, Remark, RelateNumber}.
currencyNoCurrency code (e.g. 'USD').
tax_rateYesTax rate.
tax_typeYesTax type.
buyer_nameYesBuyer name.
print_markYesPrint mark ('Y' or 'N').
tax_amountYesTax amount.
donate_markYesDonate mark ('0'=no donate).
main_remarkNoMain remark.
seller_nameYesSeller name.
check_numberNoCheck number.
invoice_dateYesInvoice date (YYYYMMDD).
invoice_timeYesInvoice time (HHmmss).
invoice_typeYesInvoice type code.
sales_amountYesTaxable sales amount.
seller_emailNoSeller email address.
total_amountYesTotal amount including tax.
buyer_addressNoBuyer address.
exchange_rateNoExchange rate.
invoice_numberYesInvoice number.
seller_addressYesSeller address (mandatory for exchange invoices).
discount_amountNoDiscount amount.
buyer_identifierYesBuyer tax ID.
seller_facsimileNoSeller facsimile number.
seller_telephoneNoSeller telephone number.
seller_identifierYesSeller tax ID.
bonded_area_confirmNoBonded area confirm.
zero_tax_rate_reasonNoZero-tax-rate reason code.
customs_clearance_markNoCustoms clearance mark.
seller_person_in_chargeNoSeller person in charge.
original_currency_amountNoOriginal currency amount.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only mentions returning the API response, but omits details about mutation, side effects, idempotency, or failure modes. Parameter constraints like seller address mandatory are given, but broader behavior is not disclosed.

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 concisely convey the core purpose and key detail. Front-loaded with the primary action, no wasted words.

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

Completeness2/5

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

Given the complexity (31 parameters, 17 required, no annotations, no output schema), the description is insufficient. It does not explain differences from similar tools, expected response structure, or validation rules.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description adds that seller address is mandatory (already in schema as required) and clarifies that item tax type field is DTaxType. This provides minor additional clarity beyond the schema.

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

Purpose4/5

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

The description clearly states it creates a B2B exchange invoice and mentions the document type code A0101, which distinguishes it from other invoice creation tools. However, it does not explicitly differentiate from the similar create_b2b_invoice tool.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings like create_b2b_invoice or create_b2b_allowance. The description lacks context for appropriate usage scenarios.

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

create_b2b_invoiceC

Create a B2B invoice using named nested format (A0401). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of product items. Each item: {Description, Quantity, UnitPrice, TaxType, Amount, SequenceNumber, optional: Unit, Remark, RelateNumber}.
currencyNoCurrency code (e.g. 'USD').
tax_rateYesTax rate.
tax_typeYesTax type.
buyer_nameYesBuyer name.
print_markYesPrint mark ('Y' or 'N').
tax_amountYesTax amount.
buyer_emailNoBuyer email address.
donate_markYesDonate mark ('0'=no donate).
main_remarkNoMain remark.
seller_nameYesSeller name.
buyer_remarkNoBuyer remark.
check_numberNoCheck number.
invoice_dateYesInvoice date (YYYYMMDD).
invoice_timeYesInvoice time (HHmmss).
invoice_typeYesInvoice type code.
sales_amountYesTaxable sales amount.
seller_emailNoSeller email address.
total_amountYesTotal amount including tax.
buyer_addressNoBuyer address.
exchange_rateNoExchange rate.
invoice_numberYesInvoice number.
seller_addressNoSeller address.
buyer_facsimileNoBuyer facsimile number.
buyer_telephoneNoBuyer telephone number.
discount_amountNoDiscount amount.
buyer_identifierYesBuyer tax ID.
seller_facsimileNoSeller facsimile number.
seller_telephoneNoSeller telephone number.
buyer_role_remarkNoBuyer role remark.
seller_identifierYesSeller tax ID.
seller_role_remarkNoSeller role remark.
bonded_area_confirmNoBonded area confirm.
zero_tax_rate_reasonNoZero-tax-rate reason code.
buyer_customer_numberNoBuyer customer number.
buyer_person_in_chargeNoBuyer person in charge.
customs_clearance_markNoCustoms clearance mark.
seller_customer_numberNoSeller customer number.
seller_person_in_chargeNoSeller person in charge.
original_currency_amountNoOriginal currency amount.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description fails to disclose behavioral traits such as side effects, permissions required, or error handling. It merely states creation and response return, which is minimal.

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 concise with two sentences, front-loading the main purpose. It wastes no words, though it could be expanded to include critical usage context.

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

Completeness2/5

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

Given the tool's high complexity (40 parameters, 16 required) and no output schema, the description is insufficient. It does not explain the meaning of 'named nested format', important constraints, or typical invocation patterns.

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 fully documents each parameter. The description adds no additional semantic value beyond stating the format (A0401). Baseline score of 3 applies.

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

Purpose4/5

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

The description clearly states the tool's verb ('Create'), resource ('B2B invoice'), and format ('named nested format A0401'). It also mentions it returns the API response. However, it does not explicitly differentiate from sibling tools like create_b2b_exchange_invoice, though the name and format hint at distinction.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., other invoice creation tools). No indications of prerequisites, context, or when not to use it.

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

create_b2c_allowanceB

Create a B2C allowance using positional field format (D0401). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of allowance items. Each item: {D1: seq, D2: original_date, D3: original_inv_number, D4: seq_number, D5: description, D6: qty, D8: unit_price, D9: amount, D10: tax, D11: tax_type}.
buyer_idYesBuyer identifier (tax ID or empty string).
buyer_nameYesBuyer name.
tax_amountYesTax amount (C2).
buyer_emailNoBuyer email (B7).
total_amountYesTotal amount (C3).
buyer_addressNoBuyer address (B3).
allowance_dateYesAllowance date (YYYYMMDD).
allowance_typeYesAllowance type ('2'=seller notice).
buyer_facsimileNoBuyer facsimile (B6).
buyer_telephoneNoBuyer telephone (B5).
allowance_numberYesAllowance number.
buyer_role_remarkNoBuyer role remark (B9).
original_buyer_idNoOriginal buyer ID (C5).
original_seller_idNoOriginal seller ID (C4).
buyer_customer_numberNoBuyer customer number (B8).
buyer_person_in_chargeNoBuyer person in charge (B4).

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It only states 'Returns the API response' without detailing side effects, auth requirements, rate limits, or what the response contains. This is insufficient for a creation tool.

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

Conciseness4/5

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

The description is one short sentence, front-loaded with the tool's purpose. However, it could include more useful information without becoming verbose.

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

Completeness2/5

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

Given 17 parameters (8 required), no output schema, and no annotations, the description is incomplete. It does not explain what a B2C allowance is, error handling, or provide any context for usage.

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 baseline is 3. The description adds 'positional field format (D0401)' but does not explain parameters beyond what the schema already provides. No additional semantics.

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

Purpose5/5

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

The description clearly states 'Create a B2C allowance', specifying the verb and resource. It also includes the positional field format (D0401), which distinguishes it from the sibling tool create_b2c_allowance_named that likely uses named fields.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like create_b2c_allowance_named or create_b2b_allowance. There is no mention of prerequisites, context, or when not to use it.

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

create_b2c_allowance_namedB

Create a B2C allowance using named field format (D0401N). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of product items. Each item: {ORIGINALINVOICEDATE, ORIGINALINVOICENUMBER, ALLOWANCESEQUENCENUMBER, ORIGINALDESCRIPTION, QUANTITY, UNITPRICE, AMOUNT, TAX, TAXTYPE, optional: UNIT, ORIGINALSEQUENCENUMBER}.
addressNoBuyer address.
buyer_nameYesBuyer name.
tax_amountYesTax amount.
role_remarkNoBuyer role remark.
total_amountYesTotal amount.
email_addressNoBuyer email address.
allowance_dateYesAllowance date (YYYYMMDD).
allowance_typeYesAllowance type ('2'=seller notice).
customer_numberNoBuyer customer number.
allowance_numberYesAllowance number.
buyer_identifierYesBuyer identifier (tax ID or empty string).
facsimile_numberNoBuyer facsimile number.
person_in_chargeNoBuyer person in charge.
telephone_numberNoBuyer telephone number.
original_invoice_buyer_idNoOriginal invoice buyer ID.
original_invoice_seller_idNoOriginal invoice seller ID.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says 'Creates' (write operation) and 'Returns the API response', but does not disclose important behavioral traits such as idempotency, side effects, authentication requirements, error handling, or data validation. Minimal transparency for a mutation tool.

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

Conciseness4/5

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

The description is a single sentence that is efficient and front-loaded with key information (action, format, return). However, it is slightly under-specified given the tool's complexity. No unnecessary words, but could include more context without being verbose.

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

Completeness2/5

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

Given the tool has 17 parameters, no output schema, and no annotations, the description is far too sparse. It does not explain the D0401N format, error scenarios, prerequisites, or the structure of the return response. An agent would lack sufficient context to use this tool correctly in complex workflows.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all parameters, so the schema already documents parameter meanings. The tool description adds no additional parameter information beyond what is in the schema. The 'items' parameter has a textual description but no formal schema—still, the description does not elaborate. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (Create a B2C allowance), the specific format (named field format D0401N), and the return (API response). The verb 'Create' and resource 'B2C allowance' are unambiguous. Distinguishes from sibling 'create_b2c_allowance' by specifying format.

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 for named field format, but does not explicitly state when to use this tool versus alternatives like 'create_b2c_allowance'. No when-not or alternative guidance is provided. The format mention gives some context but not enough for an agent to choose correctly without more info.

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

create_b2c_invoiceC

Create a B2C invoice using positional field format (C0401). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of invoice line items. Each item: {B1: seq, B2: description, B3: qty, B5: unit_price, B6: amount, B7: tax_type, B13: tax_amount}.
totalYesTotal amount including tax.
buyer_idYesBuyer identifier (tax ID or empty string).
currencyNoCurrency code (e.g. 'USD').
discountNoDiscount amount.
free_taxYesTax-exempt sales amount.
tax_rateYesTax rate (e.g. '0.05').
tax_typeYesTax type ('1'=taxable, '2'=zero-rate, '3'=exempt, '9'=mixed).
zero_taxYesZero-tax-rate sales amount.
donate_toNoNPO ban (love code) when donating.
buyer_nameYesBuyer name.
print_markYesPrint mark ('Y' or 'N').
tax_amountYesTax amount.
carrier_id1NoCarrier ID primary (encoded).
carrier_id2NoCarrier ID secondary (plain).
donate_markYesDonate mark ('1'=donate, '0'=no).
main_remarkNoMain remark.
carrier_typeNoCarrier type (e.g. '3J0002' for mobile barcode).
invoice_dateYesInvoice date (YYYYMMDD).
invoice_timeYesInvoice time (HHmmss).
invoice_typeYesInvoice type code (e.g. '07').
sales_amountYesTaxable sales amount.
exchange_rateNoExchange rate.
random_numberYes4-digit random number.
invoice_numberYesInvoice number (e.g. 'AB12345678').
zero_tax_reasonNoZero-tax-rate reason code.
customs_clearanceNoCustoms clearance mark.
original_currency_amountNoOriginal currency amount.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only states that the tool returns an API response, but does not disclose side effects, error conditions, authentication needs, or the effects of creating an invoice. This is minimal transparency for a mutation tool.

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

Conciseness4/5

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

The description is a single concise sentence that front-loads the core purpose and format. No unnecessary words, but could include more structural cues like preconditions or output summary.

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

Completeness2/5

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

Given the high complexity (28 parameters, 17 required) and lack of output schema or annotations, this short description provides insufficient context. Important details like the meaning of 'positional field format' and the structure of the API response are omitted.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The tool description adds no additional parameter-level information beyond the schema, justifying a baseline of 3.

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

Purpose4/5

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

The description clearly states it creates a B2C invoice and mentions a specific format ('positional field format (C0401)'). This distinguishes it from related tools like create_b2c_invoice_named, though it does not explicitly contrast them.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus any of the 26 sibling tools, such as create_b2c_invoice_named or create_b2c_allowance. The description lacks context about prerequisites or use cases.

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

create_b2c_invoice_namedB

Create a B2C invoice using named nested field format (C0401N). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of product items. Each item: {Description, Quantity, UnitPrice, TaxType, Amount, SequenceNumber}.
npo_banNoNPO ban (love code) when donating.
tax_rateYesTax rate.
buyer_nameYesBuyer name.
print_markYesPrint mark ('Y' or 'N').
tax_amountYesTax amount.
carrier_id1NoCarrier ID primary (encoded).
carrier_id2NoCarrier ID secondary (plain).
donate_markYesDonate mark ('1'=donate, '0'=no).
main_remarkNoMain remark.
carrier_typeNoCarrier type code.
invoice_dateYesInvoice date (YYYYMMDD).
invoice_timeYesInvoice time (HHmmss).
invoice_typeYesInvoice type code.
sales_amountYesTaxable sales amount.
total_amountYesTotal amount including tax.
random_numberYes4-digit random number.
invoice_numberYesInvoice number.
amount_tax_typeYesTax type for amount section.
buyer_identifierYesBuyer tax ID (or empty string).
seller_identifierYesSeller tax ID.
zero_tax_rate_reasonNoZero-tax-rate reason code.
free_tax_sales_amountYesTax-exempt sales amount.
zero_tax_sales_amountYesZero-tax-rate sales amount.

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It only states the tool creates an invoice and returns an API response, lacking details about side effects, idempotency, permissions, error handling, or any constraints. This is insufficient for a mutation tool.

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

Conciseness4/5

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

The description is a single, efficient sentence with no wasted words. It front-loads the core action. However, it could benefit from a brief list of key parameters or behavior to aid understanding, but it remains concise.

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

Completeness2/5

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

Given the tool has 24 parameters, 18 required, no output schema, and is one of many invoice-related siblings, the description is too minimal. It does not explain the nested field format, what the API response contains, how items are structured, or any prerequisites. The tool's complexity demands richer description.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains each parameter. The description adds no additional meaning beyond mentioning 'named nested field format', which does not clarify parameter usage. Thus, baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool creates a B2C invoice using a specific named nested field format (C0401N), distinguishing it from the plain create_b2c_invoice sibling. The verb 'Create' and resource 'B2C invoice' are specific and unambiguous.

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 does not explicitly state when to use this tool versus alternatives like create_b2c_invoice or the allowance tools. Usage context is implied by the name and format mention, but no direct guidance on when-not-to-use or prerequisites is provided.

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

get_assignment_infoC

Get invoice assignment info for a period (Z33). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
head_banYesHead company tax ID (HeadBan).
branch_banYesBranch company tax ID (BranchBan).
year_monthYesYear-month period (YYMM format).
invoice_typeYesInvoice type code.

TDQS

C2.9/5.0
Behavior2/5

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

The description implies a read-only operation but does not explicitly state idempotency, safety, or side effects. The phrase 'Returns the API response' is vague about what the response contains.

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 concise with two sentences, front-loading the main purpose. It is not verbose, though it could include a bit more detail on the response without being excessive.

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

Completeness2/5

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

Given no output schema, the description should explain what the API response contains. It merely states it returns the response, leaving the agent uninformed about the structure or content of the result.

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

Parameters3/5

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

All parameters are described in the input schema with 100% coverage. The description adds no additional meaning beyond what is already in the schema, so baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states it retrieves invoice assignment info for a period, with the specific reference 'Z33' indicating a standard. It distinguishes from siblings that focus on creation, cancellation, or number retrieval.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like other invoice-related tools. There is no indication of prerequisites or scenarios where other tools are more appropriate.

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

get_cancel_statusB

Get the cancellation status of an invoice (Z11). STATUSCODE: 1=completed, 2=pending, 3=failed. Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_dateYesInvoice date (YYYYMMDD).
invoice_numberYesInvoice number to check cancellation status.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It mentions that the tool returns a status code (1=completed, 2=pending, 3=failed) and the API response, but does not disclose side effects, authentication requirements, or what happens if the invoice does not exist or has not been cancelled. The description is insufficient for a tool with no annotations.

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

Conciseness5/5

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

The description is extremely concise: two sentences. The first sentence states the core purpose, and the second explains the status codes and output. Every word is necessary, and no filler is present. It is front-loaded with the main action.

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

Completeness4/5

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

For a simple tool with two parameters and no output schema, the description is fairly complete. It explains what the tool does, the meaning of status codes, and that it returns the API response. However, it lacks context on when to call this tool (e.g., after a cancellation request) and does not describe the response structure further, which could help agents parse the output. Overall, it meets most needs for a simple status check.

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?

The input schema has 100% description coverage: both 'invoice_date' and 'invoice_number' are described with their types and format. The description adds no additional meaning beyond the schema; it does not mention how parameters are used together or any constraints. With high schema coverage, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get the cancellation status of an invoice (Z11).' It specifies the verb 'Get' and the resource 'cancellation status of an invoice,' which distinguishes it from sibling tools like 'cancel_invoice' or 'batch_cancel_invoice.' The inclusion of the specific code Z11 adds precision.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus alternatives such as 'cancel_invoice' or 'batch_cancel_invoice.' It lacks explicit conditions for use, prerequisites (e.g., invoice must be cancelled first), or scenarios to avoid. The agent has no information on when to invoke this tool.

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

get_downloaded_track_rangesB

Get downloaded track ranges for an invoice period (Z31). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
head_banYesHead company tax ID (HeadBan).
branch_banYesBranch company tax ID (BranchBan).
year_monthYesYear-month period (YYMM format, e.g. '11304').
invoice_typeYesInvoice type code.
invoice_trackYesInvoice track (2 uppercase letters).

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, so description must carry full burden. Merely states 'Returns the API response' without disclosing read-only nature, potential side effects, or authentication needs. Insufficient for a 5-param tool.

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

Conciseness4/5

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

Single sentence is concise and front-loaded, but could benefit from adding usage or behavioral details without becoming verbose.

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

Completeness2/5

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

No output schema, so description should explain return values meaningfully. 'Returns the API response' is vague and does not help an agent understand what data to expect. Missing details on pagination or error conditions.

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

Parameters3/5

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

Schema coverage is 100% with all parameters described. Description adds no additional meaning beyond schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'get' and resource 'downloaded track ranges' for a specific context ('invoice period (Z31)'). It distinguishes from siblings like other 'get_*' tools which focus on different resources.

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 for invoice period Z31 but provides no explicit when-to-use or when-not-to-use guidance. Among siblings with similar 'get_' prefixes, no differentiation criteria are given.

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

get_invoice_numbersA

Get invoice number allocation for the current period (A01). Returns track, start/end numbers, and QRCode AES key.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_monthNoInvoice period (YYMM, e.g. '11304'). If empty, gets current period.
invoice_headerNoInvoice track (2 uppercase letters, e.g. 'DC'). If empty, auto-assigned.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses return values (track, start/end numbers, QRCode AES key), which is helpful. However, it does not mention authorization needs, rate limits, or any side effects. For a read operation, this is adequate but not exhaustive.

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

Conciseness5/5

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

The description is one concise sentence that front-loads the purpose and then provides details. No superfluous words. Every part earns its place.

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

Completeness4/5

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

Given the tool's simplicity (2 optional params, no output schema, no annotations), the description is fairly complete. It names the return values. The only gap is not addressing when to use sibling tools, but overall it provides sufficient context for an agent.

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

Parameters4/5

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

Schema description coverage is 100% (both parameters have descriptions). The description adds context beyond the schema: it states that if tax_month is empty, it gets the current period, and if invoice_header is empty, it's auto-assigned. This adds value.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get invoice number allocation for the current period (A01).' It specifies the resource (invoice number allocation), the action (get), and the scope (current period). This distinguishes it from siblings like get_next_period_numbers.

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 for the current period but does not explicitly guide when to use this tool versus alternatives like get_invoice_numbers_expanded or get_next_period_numbers. No when-not-to-use or exclusion criteria are provided.

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

get_invoice_numbers_expandedC

Get invoice numbers expanded per-invoice with AESKEY for current period (Z21). Returns INVOICEDATA array with individual invoice numbers, AESKEY, and random numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_monthNoInvoice period (YYMM).
invoice_headerNoInvoice track (2 uppercase letters).

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions the return format but does not state if the operation is read-only, requires authentication, or has any side effects. For a read operation, this is a significant gap.

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

Conciseness4/5

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

The description is two sentences with no redundancy. It is concise and front-loaded with the core action. Could be slightly improved with bullet points for return fields, but still effective.

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?

Given two simple optional parameters and no output schema, the description covers the basics but lacks explanation of 'expanded' meaning, default period assumption, and relation to sibling tools. Adequate but not thorough.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters (tax_month and invoice_header). The description adds no additional parameter details, so a baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool returns expanded invoice numbers with AESKEY and random numbers per invoice, distinguishing it from a basic list. However, it does not explicitly differentiate from the sibling 'get_invoice_numbers' tool, which likely returns a simpler list.

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

Usage Guidelines2/5

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

No guidance on when to use this tool over alternatives such as 'get_invoice_numbers' or 'get_next_period_numbers_expanded'. The context signals show many siblings, but description provides no selection criteria.

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

get_next_period_numbersB

Get invoice number allocation for the next period (C01). Returns track, start/end numbers, and QRCode AES key.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_monthNoInvoice period (YYMM). If empty, gets next period.
invoice_headerNoInvoice track (2 uppercase letters).

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description discloses returns (track, start/end numbers, QRCode AES key) but does not state whether the operation is read-only or has side effects. It is adequate for a simple retrieval.

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

Conciseness5/5

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

The description is a single sentence that efficiently states the purpose and return data with no wasted words.

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

Completeness3/5

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

The description is adequate for a simple tool with two optional parameters, but it omits explanation of 'C01' and lacks context on when the period allocation is used, which could be helpful given related sibling tools.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are well-documented in the schema. The description adds minimal value beyond the schema, just mentioning 'next period' context.

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

Purpose4/5

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

The description clearly states the tool's purpose: getting invoice number allocation for the next period (C01) and lists returned data. However, it does not differentiate from the sibling tool 'get_next_period_numbers_expanded'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'get_invoice_numbers' or 'get_next_period_numbers_expanded'. The description is functional only.

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

get_next_period_numbers_expandedB

Get invoice numbers expanded per-invoice with AESKEY for next period (Z22). Returns INVOICEDATA array with individual invoice numbers, AESKEY, and random numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
tax_monthNoInvoice period (YYMM).
invoice_headerNoInvoice track (2 uppercase letters).

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description must carry the full burden. It describes the return structure but does not disclose whether the operation is read-only, has side effects (e.g., advancing period), or requires specific permissions. The phrase 'for next period (Z22)' is ambiguous about state changes.

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 a single sentence that efficiently conveys the core purpose and output. It is front-loaded with key information, though it could benefit from a slight expansion on usage without becoming verbose.

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?

Given the tool has only two optional parameters and no output schema, the description is minimally adequate. However, it lacks context on typical use cases, prerequisites, or how the returned data relates to other invoice operations. A bit more detail would improve completeness.

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 baseline is 3. The description does not add any extra meaning or usage hints beyond what the schema already provides for the two parameters.

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

Purpose5/5

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

The description uses specific verbs ('Get') and clearly identifies the resource ('invoice numbers expanded per-invoice with AESKEY for next period (Z22)'). It distinguishes from sibling tools by including 'expanded' and mentioning AESKEY and random numbers, which are not in the basic get_next_period_numbers.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternative sibling tools like get_invoice_numbers or get_next_period_numbers. There is no mention of exclusions or context for when it is appropriate.

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

get_system_timeA

Get the e-invoice server system time. Also serves as a connection test (Y01).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, but description indicates a read-only operation (get time) with no destructive or side effects. The connection test note adds transparency about intended use. Could be improved by explicitly stating idempotency or safety, but current description is adequate for a simple read.

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, complete and direct. No unnecessary words. Front-loaded with primary purpose, followed by secondary use case. Excellent efficiency.

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

Completeness5/5

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

For a parameterless tool with no output schema, description fully covers what the tool does and when to use it. The connection test note provides additional context for real-world use. No gaps in information given the tool's simplicity.

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?

Tool has zero parameters, baseline score of 4 applies. Description adds no parameter info because none exist, which is appropriate. Schema coverage is 100% (empty schema), so no additional parameter documentation needed.

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?

Description clearly states the tool gets e-invoice server system time and serves as a connection test. The verb 'Get' and specific resource 'system time' make purpose unambiguous. It distinguishes from sibling tools like get_assignment_info which have different resources.

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

Usage Guidelines4/5

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

Explicitly mentions connection test (Y01) which implies usage for connectivity checks. While no explicit 'when not to use' is given, the simplicity of the tool and clear purpose make it obvious when to invoke. Sibling tools are all for different operations (e.g., create, cancel, get other info), so usage boundaries are clear.

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

get_winning_listC

Download the winning invoice number list for a period (Z34). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
year_monthYesYear-month period (YYMM format) for the winning number list.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description must convey behavioral traits. It states 'download' implying read-only, but does not disclose if it consumes tracks, requires authentication, or has side effects. 'Returns the API response' is vague.

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 (15 words) with no wasted words. Starts with the action verb 'Download' and immediately conveys the purpose.

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

Completeness2/5

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

Despite simple structure, description lacks information about response format, error conditions, or whether the operation is safe (idempotent, read-only). For a tool with no output schema and no annotations, more context is needed.

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 covers 100% of the single parameter with description. Tool description adds 'for a period (Z34)' which repeats schema context without adding new meaning about the format or usage.

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?

Description specifies 'download winning invoice number list for a period', which is a specific verb and resource. The term 'winning' is slightly ambiguous but contextually likely refers to a lottery or selection. It distinguishes from sibling tools that get general invoice numbers or assign tracks.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings like get_invoice_numbers, get_assignment_info, etc. No conditions or prerequisites mentioned.

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

report_unused_tracksC

Report unused invoice track ranges back to the system (E0402). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
head_banYesHead company tax ID (HeadBan).
branch_banYesBranch company tax ID (BranchBan).
year_monthYesYear-month period (YYMM format).
blank_itemsYesList of unused (blank) track ranges. Each item: {InvoiceBeginNo, InvoiceEndNo}.
invoice_typeYesInvoice type code.
invoice_trackYesInvoice track (2 uppercase letters).

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states the action and return value ('Returns the API response'), omitting side effects, idempotency, permissions, or error scenarios. The agent cannot infer behavior beyond the stated purpose.

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 free of fluff. However, it could include more context without becoming verbose, such as noting that this is a submission endpoint.

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

Completeness2/5

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

Given no output schema and minimal description, the tool lacks completeness. The agent knows only that it returns the API response, but not what that response contains or how to interpret it. Contextual gaps remain.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond the schema's parameter descriptions. Baseline 3 is appropriate.

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

Purpose4/5

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

The description states the action ('Report unused invoice track ranges') and the resource, making the purpose clear. However, it does not distinguish it from sibling tools like get_assignment_info or get_downloaded_track_ranges, which might overlap.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. No prerequisites or exclusions mentioned. The agent has no context for appropriate invocation.

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

upload_next_period_tracksB

Upload next period invoice track allocation data (Z32). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
head_banYesHead company tax ID (HeadBan).
branch_banYesBranch company tax ID (BranchBan).
year_monthYesYear-month period (YYMM format) for next period.
invoice_typeYesInvoice type code.
invoice_trackYesInvoice track (2 uppercase letters).
invoice_end_noYesEnding invoice number for the track.
invoice_begin_noYesBeginning invoice number for the track.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only says 'Upload' and 'Returns the API response' - no details on side effects, authorization needs, or error behavior.

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

Conciseness4/5

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

Single sentence, front-loaded with purpose. Efficient but could be more informative.

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

Completeness2/5

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

Missing context about the API response, error handling, prerequisites, and relationship to other tools. Incomplete for a tool with 7 required parameters and no output schema.

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. The description adds no extra meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Upload' and the resource 'next period invoice track allocation data (Z32)', and notes it returns the API response. This distinguishes it from sibling tools like create_b2b_invoice or get_next_period_numbers.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. No preconditions, prerequisites, or exclusions mentioned.

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

void_b2b_allowanceB

Void (invalidate) a B2B allowance (B0501). Uses Allowance wrapper. Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
remarkNoRemark.
buyer_idYesBuyer tax ID.
seller_idYesSeller tax ID.
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
cancel_reasonYesCancellation reason.
allowance_dateYesOriginal allowance date (YYYYMMDD).
allowance_typeNoAllowance type.
allowance_numberYesAllowance number to void.
return_tax_document_numberNoReturn/tax document number.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations. Description adds 'Uses Allowance wrapper' and 'Returns the API response' but fails to disclose destructive nature, side effects, or auth requirements.

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, minimal waste. Front-loaded with action. Could be slightly more structured with prerequisites or warnings.

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

Completeness2/5

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

Lacks explanation of response format, relationship between cancel and void, and guidance among many similar sibling tools. Incomplete for a complex 10-parameter tool.

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

Parameters3/5

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

Schema describes all 10 parameters fully (100% coverage). Description provides no additional parameter meaning beyond schema.

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

Purpose5/5

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

Clearly states verb 'void' and resource 'B2B allowance' with code B0501. Distinguishes from sibling tools like void_b2b_invoice or void_b2c_allowance.

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?

Implies usage for voiding a B2B allowance but does not explicitly state when to use versus alternatives or when not to use.

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

void_b2b_exchange_invoiceB

Void (invalidate) a B2B exchange invoice (A0201). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
remarkNoRemark.
buyer_idYesBuyer tax ID.
seller_idYesSeller tax ID.
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
invoice_dateYesOriginal invoice date (YYYYMMDD).
cancel_reasonYesCancellation reason.
cancel_invoice_numberYesExchange invoice number to void.
return_tax_document_numberNoReturn/tax document number.

TDQS

B3.1/5.0
Behavior2/5

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

The description only states the action and that it returns the API response. It does not disclose side effects (e.g., irreversible changes), required permissions, error conditions, or rate limits. With no annotations provided, the description carries full burden but underdelivers.

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 a single concise sentence with no wasted words. It could be considered terse, but for a straightforward void operation it is appropriately sized, though it lacks structural elements like front-loading key info.

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

Completeness2/5

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

Given the tool has 9 parameters (7 required) and no output schema or annotations, the description is too minimal. It does not explain the purpose of the 'A0201' code, typical use cases, or what the API response contains, leaving agents underinformed for proper invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the parameter descriptions in the schema are clear (e.g., 'Cancellation date (YYYYMMDD)'). The tool description adds no additional meaning beyond what the schema already provides, meeting the baseline.

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

Purpose5/5

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

The description clearly states the action 'Void (invalidate)' and the specific resource 'B2B exchange invoice (A0201)', distinguishing it from sibling tools like void_b2b_invoice and void_b2b_allowance. The inclusion of the document code adds precision.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., void_b2b_invoice), nor any context about prerequisites or conditions for voiding. Agents must infer usage from the tool name alone.

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

void_b2b_invoiceC

Void (invalidate) a B2B invoice (A0501). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
remarkNoRemark.
buyer_idYesBuyer tax ID.
seller_idYesSeller tax ID.
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
invoice_dateYesOriginal invoice date (YYYYMMDD).
cancel_reasonYesCancellation reason.
buyer_email_addressNoBuyer email address for notification.
cancel_invoice_numberYesInvoice number to void.
return_tax_document_numberNoReturn/tax document number.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It discloses only the basic action and return of API response, omitting details about destructiveness, permissions, or side effects.

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

Conciseness4/5

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

The description is short and front-loaded with the purpose, but given the tool's 10 parameters, slightly more context on usage could be beneficial without losing conciseness.

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

Completeness2/5

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

For a complex tool with 7 required parameters and no output schema, the description lacks completeness: it does not explain return values, prerequisites, or business context like legal implications of voiding an invoice.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema's parameter descriptions, but the schema itself is adequate.

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

Purpose4/5

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

The description clearly states the tool voids a B2B invoice (A0501), but it does not differentiate it from sibling tools such as void_b2b_allowance or cancel_invoice, missing an opportunity for clarity.

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

Usage Guidelines2/5

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

No usage guidelines are provided; the description does not specify when to use this tool versus alternatives like cancel_invoice or other void tools among siblings.

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

void_b2c_allowanceB

Void (invalidate) a B2C allowance (D0501). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
remarkNoRemark.
buyer_idYesBuyer identifier.
seller_idYesSeller identifier.
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
cancel_reasonYesCancellation reason.
allowance_dateYesOriginal allowance date (YYYYMMDD).
allowance_typeNoAllowance type.
allowance_numberYesAllowance number to void.
return_tax_document_numberNoReturn/tax document number.

TDQS

B3/5.0
Behavior2/5

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

No annotations provided, so description must carry full burden. It indicates a mutation but lacks details on side effects, authorization, or behavior beyond 'returns the API response'.

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

Conciseness3/5

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

Appropriately short but borderline under-informative. Every sentence is necessary, but additional context would improve utility without much length.

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

Completeness2/5

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

With 10 parameters, 7 required, no annotations, and no output schema, the description is too minimal. Lacks explanation of parameter roles, constraints, or response details.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description adds no additional meaning beyond what the input schema provides.

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

Purpose5/5

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

Description clearly states the tool voids a B2C allowance (D0501) and distinguishes it from sibling void tools for other entities like void_b2b_allowance and void_b2c_invoice.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, prerequisites, or conditions. The description only states the action without context.

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

void_b2c_invoiceB

Void (invalidate) a B2C invoice (C0501). Returns the API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
remarkNoRemark.
buyer_idYesBuyer identifier.
seller_idYesSeller identifier.
cancel_dateYesCancellation date (YYYYMMDD).
cancel_timeYesCancellation time (HHmmss).
invoice_dateYesOriginal invoice date (YYYYMMDD).
cancel_reasonYesCancellation reason.
invoice_numberYesInvoice number to void.
return_tax_document_numberNoReturn/tax document number.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations present. The description only says 'Void (invalidate)' and 'Returns the API response', failing to disclose side effects, permission requirements, irreversibility, or error handling.

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?

Extremely concise single sentence with a return note. Front-loaded and efficient, though slightly under-specified.

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

Completeness2/5

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

With 9 parameters and no output schema or annotations, the description omits details about return format, error conditions, and contextual usage among many siblings.

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

Parameters3/5

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

Schema coverage is 100% with detailed parameter descriptions. The tool description adds no extra meaning beyond the schema, meeting the baseline but not exceeding it.

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

Purpose5/5

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

The description clearly states the verb 'Void' and the resource 'B2C invoice (C0501)', distinguishing it from siblings like void_b2b_invoice and void_b2c_allowance. The document code adds specificity.

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

Usage Guidelines2/5

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

No guidance on when to use versus alternatives such as cancel_invoice or void_b2c_allowance. No prerequisites or context provided.

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

TDQS

B3.3/5.0
Disambiguation4/5

Most tools have distinct purposes, but pairs like create_b2c_allowance and create_b2c_allowance_named differ only in field format, and get_invoice_numbers vs expanded versions may confuse agents. Overall, the set is well-disambiguated.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with clear prefixes (create, void, cancel, get) and type qualifiers (b2b, b2c, allowance, invoice). Suffixes like '_named' and '_expanded' are used systematically.

Tool Count4/5

27 tools is on the higher side, but the domain of e-invoice management requires many distinct operations for different transaction types, formats, and lifecycle stages. The count is justified given the comprehensive coverage.

Completeness3/5

The set covers creation, void, cancel, and number management well, but lacks a general tool to retrieve invoice details (e.g., get_invoice). Missing update operations are handled via exchange tools, but the absence of a retrieval tool is a notable gap.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to create CVS store pickup and home delivery shipments in Taiwan, including label printing and tracking via the ECPay Logistics API.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to issue, query, and transmit Korean electronic tax invoices (전자세금계산서) via POPBiLL/Linkhub, including VAT computation and NTS reporting.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/asgard-ai-platform/mcp-universalec-e-invoice'

If you have feedback or need assistance with the MCP directory API, please join our Discord server