Skip to main content
Glama

Import CRM exports

migrate_crm

Admin CRM import: describe → preview (no writes) → user reviews exact values/exclusions → stage the same preparation → start jobId in background. Explain preview.activationGuidance before starting; activation is reviewed separately and waiting rows remain saved for resume. Stage also returns guidance. Page status/list for every outcome. Identical source identity/payload is skipped; changed identities and email/domain collisions require manual resolution, never name merges. Resolve per-record approval requirements first: they block imports. Historical imports emit no automation events or enrichment. Custom objects, workflows, attachments and unavailable history need separate scoping. See inputs for authority, mappings, limits and retries. snake_case input aliases are accepted; outputs unchanged.

When to use: An administrator imports a Salesforce, HubSpot, Attio or CSV export with explicit mappings and resumable progress.

Example: Help me move our CRM data to Capable.

Input Schema

NameRequiredDescriptionDefault
nameNoA human-readable name for this import batch (1–120 characters), shown on the staged job and in list/status.
filesNoUp to 20 exports as {name,sourceObject,csv,idColumn?}: raw CSV with header; idColumn is the stable source-id column (auto-detected if omitted). Batch limits: 5000 rows, 2000000 CSV bytes, 3900000 request bytes, 5242880 normalized bytes.
jobIdNoThe job id (uuid) returned by stage, list or status; required for start, run and status.
actionYesdescribe (destinations/fields), preview (validate, no writes), status (one job, paged), list (jobs) use read authority. stage (save batch), start (background), run (legacy, ≤25 rows synchronously) require write authority. Explicit tool policies apply. start retries unsuccessful rows after execution finishes; replay never duplicates an imported source identity.
job_idNoAlias of jobId.
sourceNoThe exporting system — salesforce, hubspot, attio or csv; it selects the id-column and column-name conventions used to read the files.
mappingsNoPer sourceObject: {sourceObject,objectType,fields:{column:{field,referenceObject?,valueMap?,amountUnit?}},ignoredColumns,defaults?}; map or ignore every column. Preserve relationships via referenceObject source ids. Explicitly map owners, stages, currencies and amount units; money defaults to integer minor units, multiselect to JSON-array strings.
rowLimitNoFor status: job rows per page (1–200, default 100).
rowOffsetNoFor status: job rows to skip (0–5000, default 0); advance by the returned rows.length while hasMoreRows is true.
row_limitNoAlias of rowLimit.
row_offsetNoAlias of rowOffset.
sourceInstanceNoA stable label for the customer's source CRM instance (1–200 chars); reuse the same value for every later export so source ids resolve to the same records.
source_instanceNoAlias of sourceInstance.

Output Schema

NameRequiredDescriptionDefault
jobNo
jobsNo
noteNo
errorNo
appliedNo
previewNo
destinationsNo
activationGuidanceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"describe (destinations/fields), preview (validate, no writes), stage (save a batch), start (background execution), run (≤25 rows now), status (one job, paged), list (all jobs)."New value: +"describe (destinations/fields), preview (validate, no writes), status (one job, paged), list (jobs) use read authority. stage (save batch), start (background), run (legacy, ≤25 rows synchronously) require write authority. Explicit tool policies apply. start retries unsuccessful rows after execution finishes; replay never duplicates an imported source identity."
    • changedInput schema / properties / files / description
      Previous value: -"Up to 20 exports as {name, sourceObject, csv, idColumn?}: csv is the raw CSV text with a header row; idColumn names the stable source-id column (auto-detected when omitted)."New value: +"Up to 20 exports as {name,sourceObject,csv,idColumn?}: raw CSV with header; idColumn is the stable source-id column (auto-detected if omitted). Batch limits: 5000 rows, 2000000 CSV bytes, 3900000 request bytes, 5242880 normalized bytes."
    • changedInput schema / properties / mappings / description
      Previous value: -"One per sourceObject: {sourceObject, objectType, fields: {column: {field, referenceObject?, valueMap?, amountUnit?}}, ignoredColumns, defaults?}; every column is mapped or ignored."New value: +"Per sourceObject: {sourceObject,objectType,fields:{column:{field,referenceObject?,valueMap?,amountUnit?}},ignoredColumns,defaults?}; map or ignore every column. Preserve relationships via referenceObject source ids. Explicitly map owners, stages, currencies and amount units; money defaults to integer minor units, multiselect to JSON-array strings."
  2. Changed1 schema field changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
  3. Changed2 schema fields changed
    • removedInput schema / properties / jobId / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • removedInput schema / properties / job_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
  4. Changed12 schema fields changed
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedOutput schema / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / activationGuidance / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / activationGuidance / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / destinations / items / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / destinations / items / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / job / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / job / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / jobs / items / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / jobs / items / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / preview / additionalProperties
      Removed value: -{}
    • removedOutput schema / properties / preview / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
  5. Changed1 schema field changed
    • addedOutput schema / properties / activationGuidance
      Added value: +{
      +  "additionalProperties": {},
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only give readOnlyHint=false and destructiveHint=false; the description goes well beyond them: preview performs no writes, stage stores the identical preparation, identical source identity/payload is skipped, changed identities and email/domain collisions require manual resolution and 'never name merges', approvals block imports, historical imports emit no automation events or enrichment, and waiting rows persist for resume. It also discloses that start retries unsuccessful rows after execution without duplicating an already-imported source identity.

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

Conciseness3/5

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

Purpose is front-loaded and nearly every clause carries real information (dedupe, collisions, approvals, unsupported objects, aliases), so it is not padded. However, distinct concerns are flattened into two long semicolon-chained paragraphs, making the workflow order and the caveats hard to scan; bullets or phase labels would have made it far more usable.

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 7-action, 13-parameter bulk-mutation tool, the description covers the full lifecycle, safety posture, dedupe/collision policy, prerequisites, resumability, and what is out of scope. Limits, retries and authority are correctly delegated to the schema, and an output schema exists so return-value explanation is unnecessary.

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%, and the per-action authority, row paging and mapping rules are already fully documented in the schema, so the baseline 3 applies. The description adds only a pointer ('See inputs for authority, mappings, limits and retries') and the fact that snake_case aliases are accepted, which is genuinely useful but thin given 13 parameters and two enums.

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?

Opens with 'Admin CRM import' plus the explicit action pipeline (describe → preview → stage → start), and the example 'move our CRM data to Capable' makes the verb+resource concrete. It never states plainly that records get created in the destination CRM, and no sibling is named for contrast (e.g. create_record for single records), but no sibling could be confused with a bulk import, so differentiation is implicit.

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

Usage Guidelines4/5

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

'When to use: An administrator imports a Salesforce, HubSpot, Attio or CSV export with explicit mappings and resumable progress' gives a clear triggering condition and actor. It also supplies ordering rules (resolve approvals first, preview before stage, explain activationGuidance before start) and exclusions ('Custom objects, workflows, attachments and unavailable history need separate scoping'). It stops short of naming what to use instead for those excluded cases.

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