Skip to main content
Glama

出口单 chukoudan

生成报价单

make_quote
Read-onlyIdempotent

按报价工具的输入和卖方的条款,生成一份发给买方的报价单:quote 是结构化数据(https://chukoudan.com/schemas/quote/v1.json,只有价格和条款,带 digest 和汇率依据,买方可核对),text 是可直接发出的纯文本(语言按 language),internal 是卖方自己的成本、退税和利润,只给卖方看,绝不发给买方。本站不保存任何内容。 Make a quote for a buyer from the quote calculator’s inputs (pricing) and the seller’s terms (quote): quote is the quote as data (schema https://chukoudan.com/schemas/quote/v1.json; prices and terms only, with a digest and the dated rate it rests on, so the buyer can check it), text is the same quote as plain text ready to send, and internal holds the seller’s own cost, refund and profit: for the seller only, NEVER send it to the buyer. Leave pricing.fxRate out to use the day’s RMB central parity. Nothing is stored.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
quoteYes报价单上的其他内容:卖方、买方、品名、术语、港口、有效期、付款方式、交货期。 What the quote says besides the prices: seller, buyer, goods, terms, ports, validity, payment, lead time.
pricingYes报价工具(baojia)的输入;不填 fxRate 就用当天的人民币汇率中间价。 The inputs of the quote calculator (baojia); leave fxRate out to use the day’s RMB central parity.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYes
toolYes
quoteYes
internalYesThe seller’s own figures (cost, refund, profit, margin, break-even): never send these to the buyer.
provenanceYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / pricing / examples
      Added value: +[
      +  {
      +    "containers": "1",
      +    "currency": "USD",
      +    "freight": "1800",
      +    "freightBasis": "container",
      +    "fxRate": "7.0850",
      +    "margin": "10",
      +    "marginBasis": "quote",
      +    "mode": "forward",
      +    "price": "50",
      +    "quantity": "4500",
      +    "quotedPrice": "7.50",
      +    "refundRate": "13",
      +    "taxRate": "13",
      +    "term": "FOB"
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "PlainValue": {
      +      "description": "A figure, tagged so a reader knows how to write it: amounts and quantities are exact decimal strings, never floats.",
      +      "oneOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "amount": {
      +              "type": "string"
      +            },
      +            "currency": {
      +              "description": "An ISO 4217 code.",
      +              "type": "string"
      +            },
      +            "kind": {
      +              "const": "money"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "amount",
      +            "currency"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "kind": {
      +              "const": "quantity"
      +            },
      +            "places": {
      +              "description": "How many decimal places the rounding rule keeps; pad to it, never round.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "unit": {
      +              "type": "string"
      +            },
      +            "value": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "value",
      +            "unit"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "kind": {
      +              "const": "ratio"
      +            },
      +            "value": {
      +              "description": "A fraction: 0.13 is 13 %.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "base": {
      +              "type": "string"
      +            },
      +            "kind": {
      +              "const": "rate"
      +            },
      +            "per": {
      +              "description": "`per` units of `base` cost `value` units of `quote`.",
      +              "type": "string"
      +            },
      +            "quote": {
      +              "type": "string"
      +            },
      +            "value": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "value",
      +            "base",
      +            "quote",
      +            "per"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "grouping": {
      +              "const": false
      +            },
      +            "kind": {
      +              "const": "count"
      +            },
      +            "value": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "kind": {
      +              "const": "code"
      +            },
      +            "value": {
      +              "description": "A token from a fixed list the tool exports; the words for it are the copy key `<tool>.code.<value>`.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "kind": {
      +              "const": "date"
      +            },
      +            "value": {
      +              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "kind",
      +            "value"
      +          ],
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "Provenance": {
      +      "additionalProperties": false,
      +      "description": "Where the figures in an answer come from. In every answer, errors included.",
      +      "properties": {
      +        "api": {
      +          "const": "v1"
      +        },
      +        "datasets": {
      +          "items": {
      +            "$ref": "#/$defs/ProvenanceDataset"
      +          },
      +          "type": "array"
      +        },
      +        "generated_at": {
      +          "description": "When the answer was made.",
      +          "format": "date-time",
      +          "type": "string"
      +        },
      +        "language": {
      +          "description": "The language of the source lines.",
      +          "enum": [
      +            "zh-CN",
      +            "en",
      +            "ja",
      +            "ko"
      +          ]
      +        },
      +        "license": {
      +          "additionalProperties": false,
      +          "description": "The license as copy keys: which text applies. `status` was `draft` until the text was approved (2026-10-12) and is `approved` now.",
      +          "properties": {
      +            "ours": {
      +              "type": "string"
      +            },
      +            "status": {
      +              "enum": [
      +                "draft",
      +                "approved"
      +              ]
      +            },
      +            "underlying": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "ours",
      +            "underlying"
      +          ],
      +          "type": "object"
      +        },
      +        "notice": {
      +          "description": "本站非官方渠道的说明:引用本站数据时请和来源行一起转述。 / The site’s own line that it is not an official channel: pass it on with the source line when you quote us.",
      +          "type": "string"
      +        },
      +        "site": {
      +          "description": "The site the data is published by.",
      +          "type": "string"
      +        },
      +        "source_line": {
      +          "description": "来源行:回复用户时请原样引用它,让读者知道数据出自哪里、有多新。 / The credit line to quote as it is when you answer: who the figures come from and how fresh they are (the newest publisher’s day among the datasets used, or the day the answer was made).",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "api",
      +        "site",
      +        "generated_at",
      +        "language",
      +        "source_line",
      +        "notice",
      +        "datasets",
      +        "license"
      +      ],
      +      "type": "object"
      +    },
      +    "ProvenanceDataset": {
      +      "additionalProperties": false,
      +      "description": "A dataset version an answer drew on. An origin the register does not let the site show is named nowhere.",
      +      "properties": {
      +        "id": {
      +          "description": "The dataset.",
      +          "type": "string"
      +        },
      +        "origin": {
      +          "description": "The origin’s id in the register; null when the site may not show it.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "published_at": {
      +          "description": "The publisher’s own date (and time, with its offset, when it gives one).",
      +          "type": "string"
      +        },
      +        "source": {
      +          "description": "The publisher’s own source line, in the answer’s language; null when there is none to show.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "source_url": {
      +          "description": "The publisher’s page, only where the register lets the site link to it.",
      +          "type": "string"
      +        },
      +        "version": {
      +          "description": "Its version, named after the publisher’s date.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "version",
      +        "published_at",
      +        "origin",
      +        "source"
      +      ],
      +      "type": "object"
      +    },
      +    "QuoteDocument": {
      +      "additionalProperties": false,
      +      "description": "One seller’s quote to one buyer: prices and terms only, never the seller’s costs. Each field’s description names its counterpart in OASIS UBL 2.4 Quotation. `digest` is sha256 of the canonical JSON (UTF-8, keys sorted, no spaces) of the document without `digest`; `basis.rate` names the dated exchange rate the prices rest on, which a buyer can check at https://chukoudan.com/v1/datasets/central-parity.",
      +      "properties": {
      +        "basis": {
      +          "additionalProperties": false,
      +          "description": "The dated exchange rate the prices rest on, when the seller includes it, so a buyer can check it.",
      +          "properties": {
      +            "made_with": {
      +              "const": "https://chukoudan.com"
      +            },
      +            "rate": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "base": {
      +                  "pattern": "^[A-Z]{3}$",
      +                  "type": "string"
      +                },
      +                "day": {
      +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                  "type": "string"
      +                },
      +                "per": {
      +                  "enum": [
      +                    "1",
      +                    "100"
      +                  ],
      +                  "type": "string"
      +                },
      +                "quote": {
      +                  "const": "CNY"
      +                },
      +                "source": {
      +                  "description": "`central-parity`: the RMB central parity of `day`, from https://chukoudan.com/v1/datasets/central-parity; `given`: the seller’s own rate.",
      +                  "enum": [
      +                    "central-parity",
      +                    "given"
      +                  ],
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "base",
      +                "quote",
      +                "value",
      +                "per",
      +                "source"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "made_with"
      +          ],
      +          "type": "object"
      +        },
      +        "buyer": {
      +          "additionalProperties": false,
      +          "description": "UBL: cac:OriginatorCustomerParty. country: ISO 3166-1 alpha-2.",
      +          "properties": {
      +            "contact": {
      +              "maxLength": 200,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "country": {
      +              "pattern": "^[A-Z]{2}$",
      +              "type": "string"
      +            },
      +            "name": {
      +              "maxLength": 120,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "country"
      +          ],
      +          "type": "object"
      +        },
      +        "currency": {
      +          "description": "ISO 4217 code of every price. UBL: cbc:PricingCurrencyCode.",
      +          "pattern": "^[A-Z]{3}$",
      +          "type": "string"
      +        },
      +        "digest": {
      +          "description": "`sha256:` and the hex SHA-256 of this document’s canonical JSON without `digest`: UTF-8, keys sorted, no spaces, non-ASCII characters written as themselves (Python: json.dumps(doc, sort_keys=True, separators=(\",\", \":\"), ensure_ascii=False)).",
      +          "pattern": "^sha256:[0-9a-f]{64}$",
      +          "type": "string"
      +        },
      +        "issued": {
      +          "description": "The day the quote is issued, YYYY-MM-DD. UBL: cbc:IssueDate.",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +          "type": "string"
      +        },
      +        "items": {
      +          "description": "The goods. One line in v1. UBL: cac:QuotationLine/cac:LineItem.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "description": {
      +                "description": "UBL: cac:Item/cbc:Description.",
      +                "type": "string"
      +              },
      +              "hs_code": {
      +                "description": "The seller’s HS code, digits only. UBL: cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode.",
      +                "type": "string"
      +              },
      +              "origin": {
      +                "description": "Country of origin, ISO 3166-1 alpha-2. UBL: cac:Item/cac:OriginCountry.",
      +                "pattern": "^[A-Z]{2}$",
      +                "type": "string"
      +              },
      +              "packing": {
      +                "description": "How the goods are packed, as the seller says it.",
      +                "type": "string"
      +              },
      +              "quantity": {
      +                "description": "A decimal string. UBL: cac:LineItem/cbc:Quantity.",
      +                "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$",
      +                "type": "string"
      +              },
      +              "unit": {
      +                "description": "UN/ECE Recommendation 20 code: the quantity’s unitCode in UBL.",
      +                "enum": [
      +                  "PCE",
      +                  "SET",
      +                  "CT",
      +                  "KGM"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "description",
      +              "origin",
      +              "quantity",
      +              "unit"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 1,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "lead_time_days": {
      +          "description": "Days from order to shipment, a whole number.",
      +          "type": "integer"
      +        },
      +        "notes": {
      +          "description": "UBL: cbc:Note.",
      +          "type": "string"
      +        },
      +        "number": {
      +          "description": "The seller’s quote number. UBL: cbc:ID.",
      +          "type": "string"
      +        },
      +        "payment": {
      +          "description": "Payment terms as the seller writes them (T/T, L/C at sight…). UBL: cac:PaymentTerms/cbc:Note.",
      +          "type": "string"
      +        },
      +        "prices": {
      +          "description": "One price per term offered. UBL quotes one set of delivery terms per document; this lists several side by side.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "commission_included": {
      +                "description": "Whether the price includes the buying agent’s commission (含佣).",
      +                "type": "boolean"
      +              },
      +              "place": {
      +                "description": "The named place: port of loading for FOB, port of destination for CFR and CIF.",
      +                "type": "string"
      +              },
      +              "term": {
      +                "description": "Incoterms 2020 term. UBL: cac:Delivery/cac:DeliveryTerms/cbc:ID.",
      +                "enum": [
      +                  "FOB",
      +                  "CFR",
      +                  "CIF"
      +                ],
      +                "type": "string"
      +              },
      +              "total": {
      +                "description": "unit_price × quantity, a decimal string in `currency`. UBL: cbc:LineExtensionAmount.",
      +                "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$",
      +                "type": "string"
      +              },
      +              "unit_price": {
      +                "description": "A decimal string in `currency`. UBL: cac:Price/cbc:PriceAmount.",
      +                "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "term",
      +              "place",
      +              "unit_price",
      +              "total",
      +              "commission_included"
      +            ],
      +            "type": "object"
      +          },
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "schema": {
      +          "const": "https://chukoudan.com/schemas/quote/v1.json",
      +          "description": "This schema’s address, which names its version."
      +        },
      +        "seller": {
      +          "additionalProperties": false,
      +          "description": "UBL: cac:SellerSupplierParty. country: ISO 3166-1 alpha-2.",
      +          "properties": {
      +            "contact": {
      +              "maxLength": 200,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "country": {
      +              "pattern": "^[A-Z]{2}$",
      +              "type": "string"
      +            },
      +            "name": {
      +              "maxLength": 120,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "country"
      +          ],
      +          "type": "object"
      +        },
      +        "valid_until": {
      +          "description": "The last day the quote holds. UBL: cac:ValidityPeriod/cbc:EndDate.",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "schema",
      +        "issued",
      +        "valid_until",
      +        "seller",
      +        "buyer",
      +        "items",
      +        "currency",
      +        "prices",
      +        "basis"
      +      ],
      +      "title": "Quote (chukoudan.com, v1)",
      +      "type": "object"
      +    },
      +    "Step": {
      +      "additionalProperties": false,
      +      "description": "One line of the worked example: `id` is the copy key of its sentence, `values` fill it in.",
      +      "properties": {
      +        "id": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "description": "这一步的一句话说明,数值已代入,用请求的语言。 / The step as one sentence in the language asked, its figures filled in. Absent when a sentence cannot be made whole.",
      +          "type": "string"
      +        },
      +        "values": {
      +          "additionalProperties": {
      +            "$ref": "#/$defs/PlainValue"
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "values"
      +      ],
      +      "type": "object"
      +    },
      +    "Warning": {
      +      "additionalProperties": false,
      +      "description": "Something a reader should know about a result; `code` is a copy key.",
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        },
      +        "level": {
      +          "description": "Absent means a caution.",
      +          "enum": [
      +            "note",
      +            "hint"
      +          ]
      +        },
      +        "message": {
      +          "description": "这条提醒的一句话说明,数值已代入,用请求的语言:回复时请用它,不要自己编数字。 / The warning as one sentence in the language asked, its figures filled in: use it, do not make up figures. Absent when a sentence cannot be made whole.",
      +          "type": "string"
      +        },
      +        "next": {
      +          "description": "For a hint: the slug of the tool it points to.",
      +          "type": "string"
      +        },
      +        "values": {
      +          "additionalProperties": {
      +            "$ref": "#/$defs/PlainValue"
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "values"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "additionalProperties": false,
      +  "properties": {
      +    "internal": {
      +      "description": "The seller’s own figures (cost, refund, profit, margin, break-even): never send these to the buyer.",
      +      "properties": {
      +        "do_not_send": {
      +          "const": true
      +        },
      +        "outputs": {
      +          "type": "object"
      +        },
      +        "steps": {
      +          "items": {
      +            "$ref": "#/$defs/Step"
      +          },
      +          "type": "array"
      +        },
      +        "warnings": {
      +          "items": {
      +            "$ref": "#/$defs/Warning"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "do_not_send",
      +        "outputs",
      +        "steps",
      +        "warnings"
      +      ],
      +      "type": "object"
      +    },
      +    "provenance": {
      +      "$ref": "#/$defs/Provenance"
      +    },
      +    "quote": {
      +      "$ref": "#/$defs/QuoteDocument"
      +    },
      +    "text": {
      +      "type": "string"
      +    },
      +    "tool": {
      +      "const": "make_quote"
      +    }
      +  },
      +  "required": [
      +    "tool",
      +    "quote",
      +    "text",
      +    "internal",
      +    "provenance"
      +  ],
      +  "type": "object"
      +}
  2. Added

TDQS

A4.1/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint, idempotent, non-destructive, closed world), and the description corroborates and extends it: 'Nothing is stored' explains why a document-generating tool is read-only, and it discloses the shape and audience of each output field. The explicit warning that `internal` holds the seller's cost, refund and profit and must NEVER be sent to the buyer is exactly the kind of behavioral disclosure annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the core purpose and then the three output fields, the buyer-safety warning, and the fxRate default — each sentence adds information. The bilingual duplication roughly doubles the length, but given the audience mix it is dense rather than padded.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, yet the description still describes the three returned fields and the no-storage guarantee, which is more than sufficient for a 2-parameter tool. The only gap is the dangling `language` reference that controls the `text` language but is absent from the input schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every `pricing` and `quote` field, which sets the baseline at 3. The description adds some value by characterizing the nested `quote` object (prices and terms only, with a digest and the dated rate it rests on) and the fxRate default, but its reference to a `language` parameter that does not exist in the schema slightly muddies parameter semantics.

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

Purpose5/5

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

States a specific verb and resource (generate a quote for a buyer) and grounds it in the two input sources: the quote calculator's pricing inputs plus the seller's terms. The three-part output structure (quote/text/internal) further pins down what the tool produces, which cleanly distinguishes it from the sibling calculator `baojia`.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: it says the quote is built from 'the quote calculator's inputs (pricing)', which hints the agent should run `baojia` first, and it gives a concrete default rule ('Leave pricing.fxRate out to use the day's RMB central parity'). But it never says when to call this versus `baojia`, nor any exclusion or prerequisite, so the agent must infer the workflow.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources