Skip to main content
Glama

Save a trade corridor

exim__corridor__save

Saves an exporter-importer-HS code lane as a named corridor for reuse; optionally starred with a default currency and Incoterm.

Input Schema

NameRequiredDescriptionDefault
nameYesCorridor name or id (kebab-case, e.g. fr-de-widgets). Discover via `corridor list`.
starNoStar this corridor (surfaces as starter chip)
hsCodeNoHS code for this corridor (optional — anchor later via update)
baseVersionNoThe loaded version; if it changed, the save is refused with the current value.
defaultCurrencyNoISO 4217 currency (e.g. 'USD')
defaultIncotermNoDefault Incoterm (e.g. 'FOB', 'CIF')
exporterCountryYesSending country — accepts country name, ISO2, ISO3 (e.g. "Viet Nam", "VN", "VNM")
importerCountryYesReceiving country — accepts country name, ISO2, ISO3 (e.g. "Germany", "DE", "DEU")

Output Schema

NameRequiredDescriptionDefault
dataYes
statsNo
_debugNo
summaryYes
warningsNo
nextActionsYes
correlationIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • removedInput schema / properties / --baseVersion
      Removed value: -{
      -  "description": "The loaded version; if it changed, the save is refused with the current value.",
      -  "type": "string"
      -}
    • removedInput schema / properties / --defaultCurrency
      Removed value: -{
      -  "description": "ISO 4217 currency (e.g. 'USD')",
      -  "type": "string"
      -}
    • removedInput schema / properties / --defaultIncoterm
      Removed value: -{
      -  "description": "Default Incoterm (e.g. 'FOB', 'CIF')",
      -  "type": "string"
      -}
    • removedInput schema / properties / --exporterCountry
      Removed value: -{
      -  "description": "Sending country — accepts country name, ISO2, ISO3 (e.g. \"Viet Nam\", \"VN\", \"VNM\")",
      -  "type": "string"
      -}
    • removedInput schema / properties / --hsCode
      Removed value: -{
      -  "description": "HS code for this corridor (optional — anchor later via update)",
      -  "type": "string"
      -}
    • removedInput schema / properties / --importerCountry
      Removed value: -{
      -  "description": "Receiving country — accepts country name, ISO2, ISO3 (e.g. \"Germany\", \"DE\", \"DEU\")",
      -  "type": "string"
      -}
    • removedInput schema / properties / --name
      Removed value: -{
      -  "description": "Corridor name or id (kebab-case, e.g. fr-de-widgets). Discover via `corridor list`.",
      -  "type": "string"
      -}
    • removedInput schema / properties / --star
      Removed value: -{
      -  "description": "Star this corridor (surfaces as starter chip)",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / baseVersion
      Added value: +{
      +  "description": "The loaded version; if it changed, the save is refused with the current value.",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / defaultCurrency
      Added value: +{
      +  "description": "ISO 4217 currency (e.g. 'USD')",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / defaultIncoterm
      Added value: +{
      +  "description": "Default Incoterm (e.g. 'FOB', 'CIF')",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / exporterCountry
      Added value: +{
      +  "description": "Sending country — accepts country name, ISO2, ISO3 (e.g. \"Viet Nam\", \"VN\", \"VNM\")",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / hsCode
      Added value: +{
      +  "description": "HS code for this corridor (optional — anchor later via update)",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / importerCountry
      Added value: +{
      +  "description": "Receiving country — accepts country name, ISO2, ISO3 (e.g. \"Germany\", \"DE\", \"DEU\")",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "Corridor name or id (kebab-case, e.g. fr-de-widgets). Discover via `corridor list`.",
      +  "maxLength": 8000,
      +  "type": "string"
      +}
    • addedInput schema / properties / star
      Added value: +{
      +  "description": "Star this corridor (surfaces as starter chip)",
      +  "type": "boolean"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "--exporterCountry",
      -  "--importerCountry",
      -  "--name"
      -]New value: +[
      +  "exporterCountry",
      +  "importerCountry",
      +  "name"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "value0": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "id": {
      +          "type": "string"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "version": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "name",
      +        "version"
      +      ],
      +      "type": "object"
      +    },
      +    "value1": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": [
      +              "null",
      +              "boolean",
      +              "number",
      +              "string",
      +              "array",
      +              "object"
      +            ]
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value2": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/value3"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value3": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "command": {
      +          "type": "string"
      +        },
      +        "cost": {
      +          "type": "string"
      +        },
      +        "label": {
      +          "type": "string"
      +        },
      +        "rationale": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "command",
      +        "cost",
      +        "label",
      +        "rationale"
      +      ],
      +      "type": "object"
      +    },
      +    "value4": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {
      +            "type": "number"
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value5": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/value6"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "value6": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "message"
      +      ],
      +      "type": "object"
      +    },
      +    "value7": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {
      +            "type": [
      +              "null",
      +              "boolean",
      +              "number",
      +              "string",
      +              "array",
      +              "object"
      +            ]
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "additionalProperties": false,
      +  "properties": {
      +    "_debug": {
      +      "$ref": "#/$defs/value7"
      +    },
      +    "correlationId": {
      +      "type": "string"
      +    },
      +    "data": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "context": {
      +          "type": [
      +            "null",
      +            "boolean",
      +            "number",
      +            "string",
      +            "array",
      +            "object"
      +          ]
      +        },
      +        "cursor": {
      +          "type": "string"
      +        },
      +        "has_more": {
      +          "type": "boolean"
      +        },
      +        "items": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "$ref": "#/$defs/value0"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "context",
      +        "has_more",
      +        "items"
      +      ],
      +      "type": "object"
      +    },
      +    "nextActions": {
      +      "$ref": "#/$defs/value2"
      +    },
      +    "stats": {
      +      "$ref": "#/$defs/value4"
      +    },
      +    "summary": {
      +      "type": "string"
      +    },
      +    "warnings": {
      +      "$ref": "#/$defs/value5"
      +    }
      +  },
      +  "required": [
      +    "data",
      +    "nextActions",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds the composition of the corridor and the optional starring/currency/Incoterm behavior, but says nothing about the baseVersion conflict handling, auth needs, or what a repeat save does beyond the annotation hint.

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?

A single, front-loaded sentence that leads with the action and resource before the optional modifiers. Dense but free of filler, though the 'optionally starred with a default currency and Incoterm' clause packs several concepts tightly.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the 100%-covered schema carries parameter detail. For a mutation tool whose annotations already state the safety profile, the description is nearly complete, missing only when to prefer this over get/list or update.

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

Parameters3/5

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

Schema description coverage is 100%, so all eight parameters are already documented in the schema, including the baseVersion optimistic-concurrency semantics. The description only restates the optional star/currency/Incoterm fields, adding no syntax or format detail beyond the schema.

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

Purpose4/5

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

States a specific verb (Saves) and resource (corridor), and defines what a corridor is composed of (exporter-importer-HS code lane) plus optional attributes. This is clearly distinguishable from the read-only siblings corridor__get and corridor__list, though neither is named.

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

Usage Guidelines3/5

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

The phrase 'for reuse' implies the motivation to persist a lane, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g. corridor list/get or update). Usage is left largely to inference.

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.