Skip to main content
Glama

Bulk create items

bulk_create_items

Create up to 1000 items on one sheet in one call, in the order given. Use this after mapping a CSV or Excel the user attached onto the sheet columns. A call with 10 or more rows, or 3 or more rows with a colour, size, style, or option column, or 2 or more rows that repeat a product name, returns needs_input until plan_token from plan_import matches these rows, the plan target is sheet, and the token records a barcode choice that matches barcode_mode. Two rows with a colour or size column and different names are unchanged. SKU is optional. Empty SKU, brand, or type does not block after accepted_gaps on the token lists that code. An empty barcode is not a gap when barcode_choice is none or cloudlabels_ean13. Otherwise an empty barcode does not block after accepted_gaps lists that code. Do not invent those values. Under 10 rows with none of those signs is unchanged. plan_token is optional. When a token is sent, its signed answers must cover the relevant questions and barcode_mode must match barcode_choice. A token without answers is rejected: call plan_import again. Do not pick a default. When it is accepted, the result includes import_check and manual_fixes. Empty SKU is reported there and never blocks. Accepted gaps are not a mismatch. If mismatch is true, tell the user and do not hide it. Warnings from validate do not set mismatch. A strict rejection writes nothing, is not stored for idempotency_key, and is not an import_check failure. File barcode columns are ignored unless the token barcode choice is supplied. The server assigns the next number only when barcode_mode is cloudlabels_ean13 and the token records that choice. Omit barcode unless the file has a real GTIN the user chose to supply. The server then reserves the next numbers when sequential assignment already works. On a GS1 sheet, or a text column that already holds EAN-13 values, Show choices together. Clickable form if the client supports it. Otherwise one number, only when it cannot show choices. Wait. Do not choose for the user. Do not continue until the user has answered. Do you want barcodes? No, no barcodes now (barcode_mode="none"). Cloudlabels generates EAN-13 (codes starting with 2 are internal store codes, not registered GS1 codes), barcode_mode="cloudlabels_ean13". This call only. Does not change sheet settings. I have my own codes (own GTIN). No option is recommended. A needs_input error lists those options. If get_import_guide or plan_import is missing, reconnect MCP. The same rules still apply. If the organization has opted in to its GS1 company prefix for this column and the sheet standard is EAN-13, UPC-A, or EAN-8, empty barcodes reserve the next prefix numbers before saving and barcodeSource is gs1_prefix. The cell stores the digit body without the check digit. A full prefix is an error and does not fall back to a random code. Returns barcode plus barcodeSource per row. The plan item limit still applies. Optional validate defaults to false, so a caller that omits it is unchanged. validate true, strict true, or a non-empty required_columns list checks the rows before save. required_columns is skipped when validate is false. warnings lists row (1-based), column id, code (empty_required, not_numeric, or duplicate_row), and a short English message. The message names the row and the column id. It does not include the cell value or the column header. not_numeric applies when the column role or header is a price or quantity (unit cost, selling price, total qty, default location qty), or value_kind is currency. A grouped price such as 1 299,00, 1.299,00, 1,299.00, or a value with a currency symbol or code still counts as a number. With required_columns, duplicate_row is another row in this call with the same values in those columns. Without required_columns, duplicate_row is an exact copy: the same non-empty cells. Variants that share a name and differ in another column are not duplicates. strict true writes nothing when any warning is present and returns rejected true with count 0 and items []. That rejection is not stored for idempotency_key, so the same key can be sent again after the rows are corrected. Without strict, every row is still saved and warnings are included. Optional idempotency_key. Omit this field when it is not used. Null, an empty string, or only spaces are also treated as omitted. Use a unique value such as a UUID. The same key and the same arguments return the stored result for 24 hours and set idempotent_replay to true. A key still in progress is rejected until the lease expires (15 minutes by default). The same key can also stay reserved until the lease expires (15 minutes by default) after a call failed after writing rows, so check whether those rows were saved before trying again. The same key with different arguments is rejected. A stored result over 200 KB is replaced by a short summary of ids and counts.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "items": "<items>"
    },
    "name": "bulk_create_items"
  }
}

Input Schema

NameRequiredDescriptionDefault
itemsYes
strictNo
validateNo
plan_tokenNo
barcode_modeNo
sheet_numberNo
accepted_gapsNo
idempotency_keyNoOptional. Omit this field when it is not used. An empty string is also treated as omitted. Use a unique value such as a UUID when you send one. Same key and same arguments return the stored result for 24 hours in this organization, with idempotent_replay true. A different payload is rejected.
required_columnsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / accepted_gaps
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "empty_sku",
      +      "empty_barcode",
      +      "empty_brand",
      +      "empty_type",
      +      "size_unexpanded",
      +      "price_without_currency",
      +      "unknown_columns"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 7,
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / plan_token
      Added value: +{
      +  "type": "string"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / required_columns
      Added value: +{
      +  "items": {
      +    "maxLength": 60,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedInput schema / properties / strict
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / validate
      Added value: +{
      +  "type": "boolean"
      +}
  4. First observed

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare the safety profile (not read-only, not destructive, no open-world access), and the description adds substantial behavior beyond them: needs_input gating, plan_token requirements, strict/validate warning behavior, barcode reservation, and idempotency replay/lease details. That extra context is valuable, but it is disorganized and includes confusing or contradictory-sounding rules.

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

Conciseness2/5

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

The first sentence is efficient, but the body is extremely long and unstructured. It includes user-facing dialogue that does not belong in a tool description ('Do you want barcodes? No, no barcodes now...') and repeats idempotency details in several places, making the definition hard to scan.

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

Completeness2/5

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

This is a complex bulk mutation with nine parameters and no output schema, so the description must clearly cover prerequisites, failure modes, and return behavior. It mentions import_check, manual_fixes, warnings, barcodeSource, and idempotent_replay, but in a tangled way and omits sheet_number semantics, leaving the agent without a reliable operating picture.

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

Parameters3/5

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

Schema coverage is only 11%, with idempotency_key being the sole documented parameter, so the description must compensate. It explains most parameters (items max, strict, validate, plan_token, barcode_mode, accepted_gaps, required_columns, idempotency_key), but sheet_number is never described and the items object shape is left vague.

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

Purpose4/5

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

The first sentence clearly states a specific verb (Create), resource (items), scope (up to 1000 on one sheet), ordering, and batch nature. It implicitly distinguishes from create_item and bulk_update_items via 'bulk' and 'items', though it never names those alternatives explicitly.

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

Usage Guidelines3/5

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

It says to use this after mapping a CSV or Excel attachment onto sheet columns, and it describes conditions requiring plan_import and a plan_token. However, there is no explicit when-not guidance or named alternative tools, and the gating rules are dense and hard to apply confidently.

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