Skip to main content
Glama

Final POS – Custom POS Builder

Import customers

hub_import_customers
Destructive

Load a customer list in one call — a mailing list, a migration from another system. For one person use create_customer. This is the ONE import that recognises records it already has: pass rows and the server looks each one up BY EMAIL, updating that customer instead of duplicating them. A row with no email is always created new and can never be matched again, so push for emails before importing. Fields you pass overwrite the stored ones; fields you omit are left alone — but an address you pass replaces the stored address whole, and tags replaces the whole tag list. ALL-OR-NOTHING: unlike the other imports this one runs in a single transaction, so one bad row rolls the entire batch back and nothing is written. There is no per-row failure list. Max 500 rows per call. BEFORE CALLING: show the merchant a preview of the first few rows, state the EXACT number of rows and which resource they hit, and get an explicit yes. There is NO undo and no dry-run — nothing here validates without writing. If you are unsure a row is right, ask; a wrong bulk import is far more expensive to repair than a question. Afterwards, tell the merchant what landed: an import done here does NOT appear in the cabinet's Recent Imports list, which only records uploads made through the wizard.

Input Schema

NameRequiredDescriptionDefault
rowsNoSpreadsheet rows — matched by email, then created or updated by the server
updatesNoUse only when you already hold the id and do not want email matching

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only supply the destructive/read-only profile; the description adds substantial behavior beyond them: email-based upsert matching, no-email rows always created, field-level overwrite semantics, whole-address and whole-tag-list replacement, all-or-nothing transaction with no per-row failure list, 500-row cap, and the fact that it does not appear in Recent Imports.

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?

Long but front-loaded and dense with actionable detail; nearly every sentence carries unique constraints (matching, overwrite rules, atomicity, limits, confirmation protocol). Slightly sprawling, which keeps it short of a 5.

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

Completeness5/5

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

For a destructive bulk-mutation tool with no output schema, the description covers the missing pieces an agent needs: return/failure behavior (no per-row list, all-or-nothing), durability (no undo), confirmation protocol, and the Recent Imports caveat.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents both params, but the description adds genuine semantics beyond it: how `rows` are matched by email and created-or-updated, and the overwrite/omit rules. It does not explicitly explain the `updates` parameter's role, leaving that to the schema.

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

Purpose5/5

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

States a specific verb+resource ('Import customers' / load a customer list in one call) and explicitly distinguishes itself from create_customer for single records and from the other imports ('the ONE import that recognises records it already has'). An agent can identify it without opening the schema.

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

Usage Guidelines5/5

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

Names the alternative (create_customer) with the selecting condition (one person), describes the appropriate scenarios (mailing list, migration), and gives explicit preconditions via the BEFORE CALLING block plus the 'no undo, no dry-run' warning.

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.