MCP Universal EC E-Invoice Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Universal EC E-Invoice Serverissue a B2C invoice for NT$500 to customer John Doe"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Universal EC E-Invoice Server
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.pyConfiguration
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_snEnvironment | URL |
Test (測試機) |
|
Production (正式機) |
|
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 testsTools (27 total)
System
Tool | Code | Description |
| Y01 | Connection test / get server time |
Invoice Number Management
Tool | Code | Description |
| A01 | Get invoice number allocation (current period) |
| C01 | Get invoice number allocation (next period) |
| Z21 | Get numbers expanded per-invoice with AESKEY |
| Z22 | Get next period numbers expanded with AESKEY |
B2C Invoices
Tool | Code | Description |
| C0401 | Create B2C invoice (positional field format) |
| C0401N | Create B2C invoice (named field format) |
| C0501 | Void a B2C invoice |
B2B Invoices
Tool | Code | Description |
| A0401 | Create B2B invoice (platform certified) |
| A0501 | Void a B2B invoice |
| A0101 | Create B2B exchange invoice |
| A0201 | Void a B2B exchange invoice |
Allowances (折讓)
Tool | Code | Description |
| D0401 | Create B2C allowance |
| D0401N | Create B2C allowance (named format) |
| D0501 | Void a B2C allowance |
| B0401 | Create B2B allowance |
| B0501 | Void a B2B allowance |
| B0101 | Create B2B exchange allowance |
Cancellation (註銷)
Tool | Code | Description |
| C0701 | Cancel an invoice |
| B0701 | Batch cancel with full invoice data |
Queries
Tool | Code | Description |
| Z11 | Get invoice cancel process status |
| Z31 | Query downloaded track ranges |
| Z33 | Query tax ID number assignment |
| Z34 | Download winning invoice list |
Administration
Tool | Code | Description |
| Z32 | Upload next period track numbers |
| E0401 | Branch office track assignment |
| 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 -sArchitecture
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 toolsassign_branch_tracksB
Assign invoice track ranges to a branch (E0401). Returns the API response.
| Name | Required | Description | Default |
|---|---|---|---|
| head_ban | Yes | Head company tax ID (HeadBan). | |
| branch_ban | Yes | Branch company tax ID (BranchBan). | |
| year_month | Yes | Year-month period (YYMM format). | |
| invoice_type | Yes | Invoice type code. | |
| invoice_track | Yes | Invoice track (2 uppercase letters). | |
| invoice_end_no | Yes | Ending invoice number for the main track. | |
| invoice_begin_no | Yes | Beginning invoice number for the main track. | |
| branch_track_items | Yes | List of branch track items. Each item: {InvoiceBeginNo, InvoiceEndNo, InvoiceBooklet}. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of invoice line items in positional format (B). Each item: {B1, B2, B3, B5, B6, B7, B13}. | |
| total | Yes | Total amount including tax (C7). | |
| buyer_id | Yes | Buyer identifier (A5). | |
| currency | No | Currency code (C11). | |
| discount | No | Discount amount (C8). | |
| free_tax | Yes | Tax-exempt sales amount (C2). | |
| tax_rate | Yes | Tax rate (C5). | |
| tax_type | Yes | Tax type (C4). | |
| zero_tax | Yes | Zero-tax-rate sales amount (C3). | |
| donate_to | No | NPO ban love code (A29). | |
| buyer_name | Yes | Buyer name (A6). | |
| print_mark | Yes | Print mark (A28). | |
| tax_amount | Yes | Tax amount (C6). | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| carrier_id1 | No | Carrier ID primary (A26). | |
| carrier_id2 | No | Carrier ID secondary (A27). | |
| donate_mark | Yes | Donate mark (A24). | |
| main_remark | No | Main remark (A16). | |
| carrier_type | No | Carrier type (A25). | |
| invoice_date | Yes | Invoice date (A3). | |
| invoice_time | Yes | Invoice time (A4). | |
| invoice_type | Yes | Invoice type code (A22). | |
| sales_amount | Yes | Taxable sales amount (C1). | |
| cancel_reason | Yes | Cancellation reason. | |
| exchange_rate | No | Exchange rate (C10). | |
| random_number | Yes | Random number (A30). | |
| invoice_number | Yes | Invoice number (A2, positional format). | |
| zero_tax_reason | No | Zero-tax-rate reason code (A31). | |
| customs_clearance | No | Customs clearance mark (A17). | |
| original_currency_amount | No | Original currency amount (C9). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remark | No | Remark. | |
| buyer_id | Yes | Buyer identifier. | |
| seller_id | Yes | Seller identifier. | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| invoice_date | Yes | Original invoice date (YYYYMMDD). | |
| cancel_reason | Yes | Cancellation reason. | |
| invoice_number | Yes | Invoice number to cancel (註銷). | |
| return_tax_document_number | No | Return/tax document number. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of product items. Each item: {ALLOWANCESEQUENCENUMBER, ORIGINALINVOICEDATE, ORIGINALINVOICENUMBER, ORIGINALDESCRIPTION, QUANTITY, UNITPRICE, AMOUNT, TAX, TAXTYPE, optional: UNIT, ORIGINALSEQUENCENUMBER}. | |
| buyer_name | Yes | Buyer name. | |
| tax_amount | Yes | Tax amount. | |
| buyer_email | No | Buyer email address. | |
| seller_name | Yes | Seller name. | |
| seller_email | No | Seller email address. | |
| total_amount | Yes | Total amount. | |
| buyer_address | No | Buyer address. | |
| allowance_date | Yes | Allowance date (YYYYMMDD). | |
| allowance_type | Yes | Allowance type. | |
| seller_address | Yes | Seller address (mandatory). | |
| buyer_facsimile | No | Buyer facsimile number. | |
| buyer_telephone | No | Buyer telephone number. | |
| allowance_number | Yes | Allowance number. | |
| buyer_identifier | Yes | Buyer tax ID. | |
| seller_facsimile | No | Seller facsimile (S_FACSIMILENUMBER). | |
| seller_telephone | No | Seller telephone (S_TELEPHONENUMBER). | |
| buyer_role_remark | No | Buyer role remark. | |
| seller_role_remark | No | Seller role remark. | |
| buyer_customer_number | No | Buyer customer number. | |
| buyer_person_in_charge | No | Buyer person in charge. | |
| seller_customer_number | No | Seller customer number. | |
| seller_person_in_charge | No | Seller person in charge (S_PERSONINCHARGE). | |
| original_invoice_buyer_id | No | Original invoice buyer ID. | |
| original_invoice_seller_id | No | Original invoice seller ID. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of product items. Each item: {ALLOWANCESEQUENCENUMBER, ORIGINALINVOICEDATE, ORIGINALINVOICENUMBER, ORIGINALDESCRIPTION, QUANTITY, UNITPRICE, AMOUNT, TAX, TAXTYPE, optional: UNIT, ORIGINALSEQUENCENUMBER}. | |
| buyer_name | Yes | Buyer name. | |
| tax_amount | Yes | Tax amount. | |
| seller_name | Yes | Seller name. | |
| seller_email | No | Seller email address. | |
| total_amount | Yes | Total amount. | |
| buyer_address | No | Buyer address. | |
| allowance_date | Yes | Allowance date (YYYYMMDD). | |
| allowance_type | Yes | Allowance type. | |
| seller_address | Yes | Seller address (mandatory). | |
| allowance_number | Yes | Allowance number. | |
| buyer_identifier | Yes | Buyer tax ID. | |
| seller_facsimile | No | Seller facsimile number. | |
| seller_telephone | No | Seller telephone number. | |
| seller_identifier | Yes | Seller tax ID. | |
| seller_person_in_charge | No | Seller person in charge. | |
| original_invoice_buyer_id | No | Original invoice buyer ID. | |
| original_invoice_seller_id | No | Original invoice seller ID. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of product items. Each item: {Description, Quantity, UnitPrice, DTaxType, Amount, SequenceNumber, optional: Unit, Remark, RelateNumber}. | |
| currency | No | Currency code (e.g. 'USD'). | |
| tax_rate | Yes | Tax rate. | |
| tax_type | Yes | Tax type. | |
| buyer_name | Yes | Buyer name. | |
| print_mark | Yes | Print mark ('Y' or 'N'). | |
| tax_amount | Yes | Tax amount. | |
| donate_mark | Yes | Donate mark ('0'=no donate). | |
| main_remark | No | Main remark. | |
| seller_name | Yes | Seller name. | |
| check_number | No | Check number. | |
| invoice_date | Yes | Invoice date (YYYYMMDD). | |
| invoice_time | Yes | Invoice time (HHmmss). | |
| invoice_type | Yes | Invoice type code. | |
| sales_amount | Yes | Taxable sales amount. | |
| seller_email | No | Seller email address. | |
| total_amount | Yes | Total amount including tax. | |
| buyer_address | No | Buyer address. | |
| exchange_rate | No | Exchange rate. | |
| invoice_number | Yes | Invoice number. | |
| seller_address | Yes | Seller address (mandatory for exchange invoices). | |
| discount_amount | No | Discount amount. | |
| buyer_identifier | Yes | Buyer tax ID. | |
| seller_facsimile | No | Seller facsimile number. | |
| seller_telephone | No | Seller telephone number. | |
| seller_identifier | Yes | Seller tax ID. | |
| bonded_area_confirm | No | Bonded area confirm. | |
| zero_tax_rate_reason | No | Zero-tax-rate reason code. | |
| customs_clearance_mark | No | Customs clearance mark. | |
| seller_person_in_charge | No | Seller person in charge. | |
| original_currency_amount | No | Original currency amount. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of product items. Each item: {Description, Quantity, UnitPrice, TaxType, Amount, SequenceNumber, optional: Unit, Remark, RelateNumber}. | |
| currency | No | Currency code (e.g. 'USD'). | |
| tax_rate | Yes | Tax rate. | |
| tax_type | Yes | Tax type. | |
| buyer_name | Yes | Buyer name. | |
| print_mark | Yes | Print mark ('Y' or 'N'). | |
| tax_amount | Yes | Tax amount. | |
| buyer_email | No | Buyer email address. | |
| donate_mark | Yes | Donate mark ('0'=no donate). | |
| main_remark | No | Main remark. | |
| seller_name | Yes | Seller name. | |
| buyer_remark | No | Buyer remark. | |
| check_number | No | Check number. | |
| invoice_date | Yes | Invoice date (YYYYMMDD). | |
| invoice_time | Yes | Invoice time (HHmmss). | |
| invoice_type | Yes | Invoice type code. | |
| sales_amount | Yes | Taxable sales amount. | |
| seller_email | No | Seller email address. | |
| total_amount | Yes | Total amount including tax. | |
| buyer_address | No | Buyer address. | |
| exchange_rate | No | Exchange rate. | |
| invoice_number | Yes | Invoice number. | |
| seller_address | No | Seller address. | |
| buyer_facsimile | No | Buyer facsimile number. | |
| buyer_telephone | No | Buyer telephone number. | |
| discount_amount | No | Discount amount. | |
| buyer_identifier | Yes | Buyer tax ID. | |
| seller_facsimile | No | Seller facsimile number. | |
| seller_telephone | No | Seller telephone number. | |
| buyer_role_remark | No | Buyer role remark. | |
| seller_identifier | Yes | Seller tax ID. | |
| seller_role_remark | No | Seller role remark. | |
| bonded_area_confirm | No | Bonded area confirm. | |
| zero_tax_rate_reason | No | Zero-tax-rate reason code. | |
| buyer_customer_number | No | Buyer customer number. | |
| buyer_person_in_charge | No | Buyer person in charge. | |
| customs_clearance_mark | No | Customs clearance mark. | |
| seller_customer_number | No | Seller customer number. | |
| seller_person_in_charge | No | Seller person in charge. | |
| original_currency_amount | No | Original currency amount. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List 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_id | Yes | Buyer identifier (tax ID or empty string). | |
| buyer_name | Yes | Buyer name. | |
| tax_amount | Yes | Tax amount (C2). | |
| buyer_email | No | Buyer email (B7). | |
| total_amount | Yes | Total amount (C3). | |
| buyer_address | No | Buyer address (B3). | |
| allowance_date | Yes | Allowance date (YYYYMMDD). | |
| allowance_type | Yes | Allowance type ('2'=seller notice). | |
| buyer_facsimile | No | Buyer facsimile (B6). | |
| buyer_telephone | No | Buyer telephone (B5). | |
| allowance_number | Yes | Allowance number. | |
| buyer_role_remark | No | Buyer role remark (B9). | |
| original_buyer_id | No | Original buyer ID (C5). | |
| original_seller_id | No | Original seller ID (C4). | |
| buyer_customer_number | No | Buyer customer number (B8). | |
| buyer_person_in_charge | No | Buyer person in charge (B4). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of product items. Each item: {ORIGINALINVOICEDATE, ORIGINALINVOICENUMBER, ALLOWANCESEQUENCENUMBER, ORIGINALDESCRIPTION, QUANTITY, UNITPRICE, AMOUNT, TAX, TAXTYPE, optional: UNIT, ORIGINALSEQUENCENUMBER}. | |
| address | No | Buyer address. | |
| buyer_name | Yes | Buyer name. | |
| tax_amount | Yes | Tax amount. | |
| role_remark | No | Buyer role remark. | |
| total_amount | Yes | Total amount. | |
| email_address | No | Buyer email address. | |
| allowance_date | Yes | Allowance date (YYYYMMDD). | |
| allowance_type | Yes | Allowance type ('2'=seller notice). | |
| customer_number | No | Buyer customer number. | |
| allowance_number | Yes | Allowance number. | |
| buyer_identifier | Yes | Buyer identifier (tax ID or empty string). | |
| facsimile_number | No | Buyer facsimile number. | |
| person_in_charge | No | Buyer person in charge. | |
| telephone_number | No | Buyer telephone number. | |
| original_invoice_buyer_id | No | Original invoice buyer ID. | |
| original_invoice_seller_id | No | Original invoice seller ID. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of invoice line items. Each item: {B1: seq, B2: description, B3: qty, B5: unit_price, B6: amount, B7: tax_type, B13: tax_amount}. | |
| total | Yes | Total amount including tax. | |
| buyer_id | Yes | Buyer identifier (tax ID or empty string). | |
| currency | No | Currency code (e.g. 'USD'). | |
| discount | No | Discount amount. | |
| free_tax | Yes | Tax-exempt sales amount. | |
| tax_rate | Yes | Tax rate (e.g. '0.05'). | |
| tax_type | Yes | Tax type ('1'=taxable, '2'=zero-rate, '3'=exempt, '9'=mixed). | |
| zero_tax | Yes | Zero-tax-rate sales amount. | |
| donate_to | No | NPO ban (love code) when donating. | |
| buyer_name | Yes | Buyer name. | |
| print_mark | Yes | Print mark ('Y' or 'N'). | |
| tax_amount | Yes | Tax amount. | |
| carrier_id1 | No | Carrier ID primary (encoded). | |
| carrier_id2 | No | Carrier ID secondary (plain). | |
| donate_mark | Yes | Donate mark ('1'=donate, '0'=no). | |
| main_remark | No | Main remark. | |
| carrier_type | No | Carrier type (e.g. '3J0002' for mobile barcode). | |
| invoice_date | Yes | Invoice date (YYYYMMDD). | |
| invoice_time | Yes | Invoice time (HHmmss). | |
| invoice_type | Yes | Invoice type code (e.g. '07'). | |
| sales_amount | Yes | Taxable sales amount. | |
| exchange_rate | No | Exchange rate. | |
| random_number | Yes | 4-digit random number. | |
| invoice_number | Yes | Invoice number (e.g. 'AB12345678'). | |
| zero_tax_reason | No | Zero-tax-rate reason code. | |
| customs_clearance | No | Customs clearance mark. | |
| original_currency_amount | No | Original currency amount. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | List of product items. Each item: {Description, Quantity, UnitPrice, TaxType, Amount, SequenceNumber}. | |
| npo_ban | No | NPO ban (love code) when donating. | |
| tax_rate | Yes | Tax rate. | |
| buyer_name | Yes | Buyer name. | |
| print_mark | Yes | Print mark ('Y' or 'N'). | |
| tax_amount | Yes | Tax amount. | |
| carrier_id1 | No | Carrier ID primary (encoded). | |
| carrier_id2 | No | Carrier ID secondary (plain). | |
| donate_mark | Yes | Donate mark ('1'=donate, '0'=no). | |
| main_remark | No | Main remark. | |
| carrier_type | No | Carrier type code. | |
| invoice_date | Yes | Invoice date (YYYYMMDD). | |
| invoice_time | Yes | Invoice time (HHmmss). | |
| invoice_type | Yes | Invoice type code. | |
| sales_amount | Yes | Taxable sales amount. | |
| total_amount | Yes | Total amount including tax. | |
| random_number | Yes | 4-digit random number. | |
| invoice_number | Yes | Invoice number. | |
| amount_tax_type | Yes | Tax type for amount section. | |
| buyer_identifier | Yes | Buyer tax ID (or empty string). | |
| seller_identifier | Yes | Seller tax ID. | |
| zero_tax_rate_reason | No | Zero-tax-rate reason code. | |
| free_tax_sales_amount | Yes | Tax-exempt sales amount. | |
| zero_tax_sales_amount | Yes | Zero-tax-rate sales amount. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| head_ban | Yes | Head company tax ID (HeadBan). | |
| branch_ban | Yes | Branch company tax ID (BranchBan). | |
| year_month | Yes | Year-month period (YYMM format). | |
| invoice_type | Yes | Invoice type code. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_date | Yes | Invoice date (YYYYMMDD). | |
| invoice_number | Yes | Invoice number to check cancellation status. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| head_ban | Yes | Head company tax ID (HeadBan). | |
| branch_ban | Yes | Branch company tax ID (BranchBan). | |
| year_month | Yes | Year-month period (YYMM format, e.g. '11304'). | |
| invoice_type | Yes | Invoice type code. | |
| invoice_track | Yes | Invoice track (2 uppercase letters). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_month | No | Invoice period (YYMM, e.g. '11304'). If empty, gets current period. | |
| invoice_header | No | Invoice track (2 uppercase letters, e.g. 'DC'). If empty, auto-assigned. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_month | No | Invoice period (YYMM). | |
| invoice_header | No | Invoice track (2 uppercase letters). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_month | No | Invoice period (YYMM). If empty, gets next period. | |
| invoice_header | No | Invoice track (2 uppercase letters). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tax_month | No | Invoice period (YYMM). | |
| invoice_header | No | Invoice track (2 uppercase letters). |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year_month | Yes | Year-month period (YYMM format) for the winning number list. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| head_ban | Yes | Head company tax ID (HeadBan). | |
| branch_ban | Yes | Branch company tax ID (BranchBan). | |
| year_month | Yes | Year-month period (YYMM format). | |
| blank_items | Yes | List of unused (blank) track ranges. Each item: {InvoiceBeginNo, InvoiceEndNo}. | |
| invoice_type | Yes | Invoice type code. | |
| invoice_track | Yes | Invoice track (2 uppercase letters). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| head_ban | Yes | Head company tax ID (HeadBan). | |
| branch_ban | Yes | Branch company tax ID (BranchBan). | |
| year_month | Yes | Year-month period (YYMM format) for next period. | |
| invoice_type | Yes | Invoice type code. | |
| invoice_track | Yes | Invoice track (2 uppercase letters). | |
| invoice_end_no | Yes | Ending invoice number for the track. | |
| invoice_begin_no | Yes | Beginning invoice number for the track. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remark | No | Remark. | |
| buyer_id | Yes | Buyer tax ID. | |
| seller_id | Yes | Seller tax ID. | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| cancel_reason | Yes | Cancellation reason. | |
| allowance_date | Yes | Original allowance date (YYYYMMDD). | |
| allowance_type | No | Allowance type. | |
| allowance_number | Yes | Allowance number to void. | |
| return_tax_document_number | No | Return/tax document number. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remark | No | Remark. | |
| buyer_id | Yes | Buyer tax ID. | |
| seller_id | Yes | Seller tax ID. | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| invoice_date | Yes | Original invoice date (YYYYMMDD). | |
| cancel_reason | Yes | Cancellation reason. | |
| cancel_invoice_number | Yes | Exchange invoice number to void. | |
| return_tax_document_number | No | Return/tax document number. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remark | No | Remark. | |
| buyer_id | Yes | Buyer tax ID. | |
| seller_id | Yes | Seller tax ID. | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| invoice_date | Yes | Original invoice date (YYYYMMDD). | |
| cancel_reason | Yes | Cancellation reason. | |
| buyer_email_address | No | Buyer email address for notification. | |
| cancel_invoice_number | Yes | Invoice number to void. | |
| return_tax_document_number | No | Return/tax document number. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remark | No | Remark. | |
| buyer_id | Yes | Buyer identifier. | |
| seller_id | Yes | Seller identifier. | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| cancel_reason | Yes | Cancellation reason. | |
| allowance_date | Yes | Original allowance date (YYYYMMDD). | |
| allowance_type | No | Allowance type. | |
| allowance_number | Yes | Allowance number to void. | |
| return_tax_document_number | No | Return/tax document number. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remark | No | Remark. | |
| buyer_id | Yes | Buyer identifier. | |
| seller_id | Yes | Seller identifier. | |
| cancel_date | Yes | Cancellation date (YYYYMMDD). | |
| cancel_time | Yes | Cancellation time (HHmmss). | |
| invoice_date | Yes | Original invoice date (YYYYMMDD). | |
| cancel_reason | Yes | Cancellation reason. | |
| invoice_number | Yes | Invoice number to void. | |
| return_tax_document_number | No | Return/tax document number. |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Taiwan payments (ECPay 綠界 + NewebPay 藍新) & e-invoices for AI agents. Stateless, never holds funds.
Peru CPE invoices for AI agents - issue, query, void facturas/boletas via SUNAT (2 backends).
Vietnam MISA meInvoice: AI agents create, publish and query e-invoices, stateless BYO.
Ecuador factura electronica for AI agents - issue and query SRI e-invoices via Datil. Stateless BYO.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes tools for Taiwan's ezPay e-invoice lifecycle, enabling AI assistants to issue, void, and query invoices and allowances through the standard MCP protocol.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to accept payments and issue Taiwanese government e-invoices via ECPay. Supports payment link creation, status query, invoice issue and void.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to create CVS store pickup and home delivery shipments in Taiwan, including label printing and tracking via the ECPay Logistics API.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to issue, query, and transmit Korean electronic tax invoices (전자세금계산서) via POPBiLL/Linkhub, including VAT computation and NTS reporting.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/asgard-ai-platform/mcp-universalec-e-invoice'
If you have feedback or need assistance with the MCP directory API, please join our Discord server