Skip to main content
Glama

Create Records Run

create_records_run

Create a run that searches a data provider for people matching your criteria and CREATES them in the CRM -- contacts that do not exist there yet, each attached to its employer's account. If a person's employer is already an account, the contact is attached to it; if not, the account is created first, so this never duplicates an account you already have. THIS IS THE ONLY TOOL THAT ADDS RECORDS. Every other tool changes records that already exist, so this one takes no filter -- there is nothing to filter over. IT SPENDS MONEY when dispatched: one provider credit per contact created (record_cap is how many you want), and credit_cap, at least record_cap, is the most the whole run may spend: people it finds who moved are looked up for job changes with what the creates leave, and any past it are reported as not looked up. Searching is free. CALL list_search_criteria FIRST, the way a filter follows list_filterable_fields: the search schema names the criteria but not that a department is 'Engineering & Technical' rather than 'Engineering'. A wrong value in one of the six with a fixed vocabulary is refused HERE, naming what it should have been -- industry, job_function, management_level, department, company_type and has. A wrong free-text value (job_title, company_name, state, country, postal_code) cannot be checked against a list and is only discovered by the provider at DISPATCH, after the run exists. An unlisted criterion is always refused here. template_id names an ENRICHMENT configuration, which says where each provider field lands in the CRM; list them with list_rule_templates. It must map something to LastName (lastname on a HubSpot connection) or the run is refused, because a contact needs a last name. A lead run takes a LEAD configuration, which must also map Company; HubSpot has no lead to create.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesA name for the run, shown in the Runs tab. Dispatching this CREATES NEW RECORDS in the CRM and spends one provider credit for each.
searchYesWho to bring in, as rows of input/operator/value. Every row must hold (they are ANDed); several values in one row mean ANY of them. Call list_search_criteria for each input's operators and its exact vocabulary — the values that read most plausibly are often the ones this provider refuses. person_ids is exclusive: it NAMES people, so it cannot share a search with rows that describe a population. Specific people, by provider id (is) — free text Job title (contains/is exactly/is not) — free text; “is exactly” wants the WHOLE title character for character (“Vice President, Global Sales Operations”), so it usually finds nobody — “contains” is almost always what you want. Job function (is) — one of 186 values Management level (is/is not) — one of 6 values Department (is) — one of 11 values Industry (is/is primarily) — one of 180 values Company name (is) — free text Company, by provider id (is) — free text Company type (is) — one of 3 values State or region (is) — free text Country (is) — free text Postal code (is) — free text Has (is) — one of 5 values; several values mean ALL of them, so this input NARROWS. “email” is worth reaching for: barely half of any population has a business email Employees (at least/at most) — a whole number Revenue (at least/at most) — a whole number Contact accuracy (at least) — a whole number; 70 to 99
tam_checkNoApply the connection's TAM to each person found before creating them: a person whose new contact, or whose employer account, would fall outside the TAM is not created and is reported with the criteria it failed. Their credit is already spent. Refused when the connection has no TAM. Subscription sets it, because its search is compiled from the TAM and can come back wider than it.
credit_capYesRequired: the most provider credits this run may spend in all, at least record_cap. Its creates spend first; people it finds who moved are looked up for job changes with what is left, and any past that are reported as not looked up.
record_capYesRequired: how many contacts to create. Each costs one Enrich credit; searching is free.
update_capNoHow many people the provider matches who are ALREADY contacts here may be refreshed with current data instead of skipped. 0 (the default) skips them and reports how many there were. Refreshing costs no credit; it bounds how long the run takes and how many records it writes. A plan that runs on a schedule must set it above 0, or every firing after the first finds the same people already known and does nothing for them.
dispositionNoWho releases this run's writes. 'execute' dispatches the pass on request, which is the default. 'queue' stamps the run awaiting_approval and launches nothing until a person approves it, which for this tool also means no provider credit is spent. There is no 'propose' here: a create run brings in records that do not exist yet, so a per-record proposal would name no CRM record and link to nothing a reviewer could open. Reviewing a create is reviewing the run.execute
object_typeNoWhich CRM object the run targets. Contact and Lead only — an account is minted as a CONTACT's parent when its employer is not already one, and never as the subject of its own run. A LEAD has no parent: its employer is the Company field, which its LEAD configuration must fill, as it must fill LastName.contact
template_idYesRequired: an enrichment configuration, by id (list_rule_templates), whose mapping decides which provider fields are written to each new contact. A field set to dont_update is not written.
scope_filterNoWith tam_check, the filter to check each new person against instead of the connection's TAM: {"account": a filter group over companies or null, "persona": a filter group over people or null}. A prebuilt plan scoped by a filter sets it.
connection_idYesThe CRM connection. Required. Call list_crm_connections to get one.
create_accountsNoCreate the person's employer as a new account when it matches no existing account. Default true; false leaves such contacts without an account.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / description
      Previous value: -"The Create run's create contract.\n\nsearch — the provider criteria, in this product's names (create/search.py). Required: a create run\n  with no criteria is a request for everybody, and the vendor refuses it too.\nrecord_cap — how many contacts to create, AND how much the run may spend, because they are the same\n  number: search is free and every record created costs exactly one Enrich credit. Required for the\n  reason the enrichment cap is required — it is the only field that decides how much money this\n  costs, so a person states it rather than discovering the scale of it from a bill.\ntemplate_id — an ENRICHMENT configuration, reused. A create mapping is provider-field-to-CRM-field,\n  which is an enrichment mapping with its `when` column removed: `when` decides what to do about a\n  value the CRM already holds, and on a create there is none. dont_update means the field is not\n  written; the other two both mean it is. One mapping concept, one authoring surface.\ncreate_accounts — mint the employer as an Account when the contact matches none. Defaulted true\n  because the alternative is contacts with no company, which is the state this tool exists to avoid.\n\nNO filter_spec, and its absence is the tool. Every other run scopes over records that exist; this one\nhas nothing to scope over, which is exactly why it is a separate tool rather than a mode."New value: +"The Create run's create contract.\n\nsearch — the provider criteria, in this product's names (create/search.py). Required: a create run\n  with no criteria is a request for everybody, and the vendor refuses it too.\nrecord_cap — how many contacts to create. Each costs one Enrich credit; search is free.\ncredit_cap — the most the run may spend on everything: its creates, and the job-change lookups for movers it\n  finds, which draw on what the creates leave (spend controls). Required, at least record_cap so the records\n  asked for can be paid for, and refused above the workspace's per-run maximum when one is set.\ntemplate_id — an ENRICHMENT configuration, reused. A create mapping is provider-field-to-CRM-field,\n  which is an enrichment mapping with its `when` column removed: `when` decides what to do about a\n  value the CRM already holds, and on a create there is none. dont_update means the field is not\n  written; the other two both mean it is. One mapping concept, one authoring surface.\ncreate_accounts — mint the employer as an Account when the contact matches none. Defaulted true\n  because the alternative is contacts with no company, which is the state this tool exists to avoid.\n\nNO filter_spec, and its absence is the tool. Every other run scopes over records that exist; this one\nhas nothing to scope over, which is exactly why it is a separate tool rather than a mode."
    • addedInput schema / properties / credit_cap
      Added value: +{
      +  "description": "Required: the most provider credits this run may spend in all, at least record_cap. Its creates spend first; people it finds who moved are looked up for job changes with what is left, and any past that are reported as not looked up.",
      +  "minimum": 1,
      +  "title": "Credit Cap",
      +  "type": "integer"
      +}
    • changedInput schema / properties / record_cap / description
      Previous value: -"Required: how many contacts to create, which is also the most this run may spend: searching is free and each contact created costs one Enrich credit."New value: +"Required: how many contacts to create. Each costs one Enrich credit; searching is free."
    • changedInput schema / required
      Previous value: -[
      -  "connection_id",
      -  "name",
      -  "record_cap",
      -  "search",
      -  "template_id"
      -]New value: +[
      +  "connection_id",
      +  "credit_cap",
      +  "name",
      +  "record_cap",
      +  "search",
      +  "template_id"
      +]
  2. Changed3 schema fields changed
    • addedInput schema / properties / create_accounts / description
      Added value: +"Create the person's employer as a new account when it matches no existing account. Default true; false leaves such contacts without an account."
    • addedInput schema / properties / record_cap / description
      Added value: +"Required: how many contacts to create, which is also the most this run may spend: searching is free and each contact created costs one Enrich credit."
    • addedInput schema / properties / template_id / description
      Added value: +"Required: an enrichment configuration, by id (list_rule_templates), whose mapping decides which provider fields are written to each new contact. A field set to dont_update is not written."
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the write/safety profile (readOnlyHint=false, destructiveHint=false), and the description adds substantial context beyond them: it SPENDS MONEY (one provider credit per created contact), credit_cap must be >= record_cap, searching is free, tam_check spends credit even on rejects, and account creation avoids duplicating existing accounts.

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-loads purpose, cost, and the list_search_criteria prerequisite before the template caveats, and each block earns its place for a 12-param money-spending tool. It is dense with capitalized emphasis and some overlap with the schema's own long description, but not padded.

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 complex tool with no output schema, the description covers cost model, refusal behavior at submission vs dispatch, required template mapping, and ordering of preparatory calls — everything needed to call it correctly. Nothing material is missing.

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 baseline is 3, but the description adds real meaning beyond it: template_id must map LastName (lastname on HubSpot) or the run is refused, a lead config must also map Company, credit_cap relates to record_cap, and fixed-vocabulary criteria are validated here while free-text ones are not.

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 (create a run that searches a provider and creates contacts in the CRM) and explicitly distinguishes itself from every sibling: 'THIS IS THE ONLY TOOL THAT ADDS RECORDS. Every other tool changes records that already exist.' An agent can route to it without opening any 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?

Gives explicit ordering and prerequisite guidance ('CALL list_search_criteria FIRST', 'list them with list_rule_templates'), states when values are refused here vs discovered at dispatch, and explains why it takes no filter unlike other runs. Alternatives and when-nots are both present.

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.