Skip to main content
Glama
SynderAccounting

gl-importer

Official

gl-importer (Claude Code plugin)

Import CSV/XLSX accounting data into QuickBooks Online or Xero from inside Claude Code, using the Synder Importer API.

This plugin bundles:

  • An MCP server wrapping the Synder Importer REST API (/api/v1) — full read + write, 19 tools covering account, companies, settings, entities, fields, mappings, imports, status polling, results, cancel, revert, plus two composite "happy path" tools.

  • The gl-importer agent skill with natural-language guidance for the two-step import flow (dry-run → confirm).

Requirements

  • Node.js 18 or newer

  • Claude Code with plugin support (/plugin command available)

  • A Synder Importer API token — set as IMPORTER_API_TOKEN in your shell env. Generate at importer.synder.comAccount → API Keys.

Related MCP server: MCP Accounting

Install

/plugin marketplace add SynderAccounting/gl-importer-plugin
/plugin install gl-importer

Then set your token in the shell that launches Claude Code:

export IMPORTER_API_TOKEN="your_token_here"

Claude Desktop (one-click MCP install)

Download the latest .mcpb bundle from Releases and double-click it. Claude Desktop will prompt you for the API token.

From source (development)

git clone https://github.com/SynderAccounting/gl-importer-plugin
cd gl-importer-plugin
npm install
npm run build
# Point Claude Code at this directory:
claude --plugin-dir .

Configuration

Env var

Required

Default

Purpose

IMPORTER_API_TOKEN

yes

Bearer token for the Synder Importer API

IMPORTER_BASE_URL

no

https://importer.synder.com/api/v1

Override for staging/test

Example prompts

Once installed, talk to Claude Code naturally:

  • "Import ~/Downloads/march-bills.csv as Bills into my QuickBooks company."

  • "What entities can I import into Xero?"

  • "Show me the saved mapping called 'Stripe payouts' and update it to map Date → TxnDate."

  • "List my last 10 imports and tell me which ones failed."

  • "Revert import 12345 — I uploaded the wrong file."

  • "What's the status of import 12345? Wait for it to finish and tell me how many warnings."

The skill will walk Claude Code through a safe two-step flow: a dry-run that shows the proposed field mapping, then a confirmed call that actually creates the import and polls until it terminates.

Tools

The MCP server exposes 19 tools. The ones an LLM will hit most often:

Tool

Purpose

import_csv

Happy path. Auto-resolves company, uploads file, runs dry-run, then (on confirm) executes + waits.

wait_for_import

Polls a running import to a terminal state with exponential backoff (2s → 1.5× → 30s cap).

list_companies / list_entities / get_fields

Discover what you can import where.

list_mappings / create_mapping / update_mapping / delete_mapping

Saved-mapping CRUD.

auto_import / execute_import

Lower-level: create an import with auto-mapping or an explicit mapping.

get_import_status / get_import_results / cancel_import / revert_import

Lifecycle.

get_settings / update_settings

Per-company import settings.

get_account

Whoami / token check.

Full schemas are emitted at MCP startup — the agent skill (skills/gl-importer/SKILL.md) also documents the conventions.

Development

npm install
npm run build       # tsc → dist/
npm test            # vitest, 60+ unit tests, virtual-clock polling tests
npm run watch       # tsc --watch for iterative dev

CI runs on every push and PR (.github/workflows/ci.yml).

Release process

  1. Bump version in package.json and .claude-plugin/plugin.json (keep them in sync).

  2. Commit and tag: git tag v0.x.y && git push --tags.

  3. The publish.yml workflow publishes to npm on the tag push (uses NPM_TOKEN secret).

  4. The marketplace install path resolves through this GitHub repo, so the tag is the release.

License

MIT — see LICENSE.

Support

Available Tools

19 tools
auto_importA

Uploads a file and asks the server to auto-map columns to the target entity. Set dryRun=true to get the proposed mapping back without creating an import — useful for showing the user what will happen and asking 'does this look right?' before committing. Set dryRun=false (default) to auto-map and import in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
filePathYesAbsolute path to a .csv, .xlsx, or .xls file.
entityNameYesEntity to import as — must match list_entities output.
dryRunNoIf true, returns proposed mapping without starting an import. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoImport id (present when dryRun=false).
statusNoImport status (present when dryRun=false).
proposedMappingNoAuto-resolved column→field mapping (present when dryRun=true).
detectedColumnsNoHeaders found in the uploaded file (present when dryRun=true).
missingRequiredNoRequired target fields the auto-mapper could not resolve.

TDQS

A4.2/5.0
Behavior4/5

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

Description explains the tool's behavior: uploads a file, auto-maps, and optionally imports or returns mapping. Annotations indicate non-destructive, open-world, which aligns. No contradictions but lacks details on error handling or permissions.

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

Conciseness5/5

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

Two sentences efficiently convey the core function and the dryRun variants without redundancy. Every sentence is essential and well-structured.

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?

Given the tool's simplicity and presence of output schema and annotations, the description covers main usage and dryRun distinction. It lacks guidance on file path interpretation or error scenarios but is adequate for the context.

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 100%, so baseline is 3. Description adds value by explaining dryRun's purpose with a use case, but other parameters rely solely on schema descriptions, adding no new semantics.

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?

Description clearly states it uploads a file and auto-maps columns to a target entity, differentiating from siblings like import_csv (likely manual mapping) and execute_import (no mapping). The dryRun feature further clarifies the purpose.

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?

Description provides explicit guidance on when to use dryRun=true vs false, improving usage clarity. However, it does not explicitly state when not to use this tool or mention alternatives like create_mapping or execute_import.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_importA
DestructiveIdempotent

Cancels a SCHEDULED or IN_PROGRESS import. Already-imported rows are NOT rolled back — use revert_import for that. Returns the updated import status.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
importIdYesImport id from list_imports.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesImport id.
statusYesLifecycle status (SCHEDULED, IN_PROGRESS, FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED, REVERTING, REVERTED).
entityNameNoEntity type being imported.
fileNameNoUploaded file name.
summaryNoCounts per result type.
createdAtNoISO timestamp.
finishedAtNoISO timestamp when reached terminal status, if applicable.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark destructive and idempotent; description adds context that already-imported rows are not rolled back, which is critical behavioral info beyond annotations.

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

Conciseness5/5

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

Two sentences with zero wasted words, front-loaded with action, and clearly structured.

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?

Given simple tool with output schema, description covers effect, return value, and boundary with revert_import, making it complete for agent invocation.

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 covers both parameters fully with descriptions referencing list_companies and list_imports. Description adds no further parameter details, so baseline 3 is appropriate.

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?

Description clearly states it cancels imports and specifies it works for SCHEDULED or IN_PROGRESS states, directly distinguishing from revert_import for rollback.

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?

Explicitly states when to use (for scheduled/in-progress imports) and when not to (if rollback needed, use revert_import), providing clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_mappingA

Creates a new field mapping for an entity (e.g. 'Journal Entry', 'Bill', 'Invoice'). Look up valid target fields with get_fields first. Returns the created mapping including its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
titleYesHuman-readable mapping name.
entityNameYesEntity this mapping targets — must match list_entities output (e.g. 'Journal Entry').
fieldsYesField mappings. Each entry maps a CSV column or a constant to an Importer target field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesMapping id.
titleYesMapping name.
entityNameYesEntity this mapping targets.
fieldsYesPersisted field entries.
createdAtNoISO timestamp.
updatedAtNoISO timestamp.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate non-read-only, non-destructive, non-idempotent, and open-world. The description adds that it returns the created mapping including its id, which is useful. It does not disclose potential failure modes or permission requirements, but these are typical for creation tools.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action, and no unnecessary words. Every sentence earns its place.

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?

Given the four required parameters, nested fields array, and output schema, the description combined with schema and annotations is complete. It mentions the prerequisite step and return value adequately.

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 parameters. The description adds context by advising to use get_fields first, which relates to the fields parameter. This goes beyond the schema alone.

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?

The description clearly states the action 'Creates a new field mapping for an entity', providing specific examples (e.g., 'Journal Entry', 'Bill', 'Invoice'). It distinguishes itself from sibling tools like update_mapping and delete_mapping by focusing on creation.

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?

The description explicitly advises to look up valid target fields with get_fields first, providing a clear prerequisite. However, it does not explicitly state when not to use this tool or mention alternative tools for different actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_mappingA
DestructiveIdempotent

Deletes a saved mapping. Irreversible. Imports that referenced this mapping keep their historical record but new imports can no longer pick it.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
mappingIdYesMapping id from list_mappings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYesTrue if the mapping was deleted.
mappingIdYesId of the deleted mapping.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds important behavioral details: it is irreversible, historical records are kept for imports referencing the mapping, and new imports cannot use it. This goes beyond annotations.

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

Conciseness5/5

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

Two concise sentences: first states the action, second explains the consequences. Every sentence adds value with no redundant information.

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?

Given the tool's complexity (delete operation with irreversible effects), the description covers the key behavioral impact on imports. Annotations provide destructive and idempotent hints, and an output schema exists. No gaps are apparent.

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 100% and both parameters have descriptions referencing other tools (companyId from list_companies, mappingId from list_mappings). The description does not add further parameter semantics, but the schema is sufficient.

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?

The description clearly states the action ('Deletes a saved mapping') with a specific verb and resource. It distinguishes from sibling tools like 'create_mapping' (opposite action) and 'list_mappings' (listing vs deletion).

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 description implies usage (deleting a mapping) but does not explicitly state when to use or not use this tool, nor does it provide alternatives. However, the context of sibling tools and the action itself make the purpose clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_importA

Uploads a CSV/XLSX file and starts an import using an existing mapping. The MCP server reads the file from disk — pass an absolute path. Returns the created import object including importId. Status starts as SCHEDULED — poll get_import_status or use wait_for_import. Limits: .csv/.xlsx/.xls only, 50MB max.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
filePathYesAbsolute path to a .csv, .xlsx, or .xls file on the machine running the MCP server.
entityNameYesEntity to import as — must match list_entities (e.g. 'Journal Entry').
mappingIdYesMapping id from list_mappings to apply to the file.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesImport id.
statusYesLifecycle status (SCHEDULED, IN_PROGRESS, FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED, REVERTING, REVERTED).
entityNameNoEntity type being imported.
fileNameNoUploaded file name.
summaryNoCounts per result type.
createdAtNoISO timestamp.
finishedAtNoISO timestamp when reached terminal status, if applicable.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false suggesting mutation, and the description confirms this by saying 'uploads and starts an import'. It adds details beyond annotations: file read from disk, absolute path required, returns import object with importId, status starts SCHEDULED, and file limits. This provides useful behavioral context without contradiction.

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

Conciseness5/5

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

The description is three sentences long, each serving a purpose: stating the main action, providing operational details, and specifying constraints. It is front-loaded with the key operation and wastes no words.

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?

Given the tool has 4 required parameters, an output schema, and several sibling tools, the description covers the core functionality, input requirements, return value, and status polling. It is mostly complete but could explicitly mention that the mapping must be created beforehand (implied by 'using an existing mapping').

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 100%, so parameters are fully documented in the schema. The description adds minimal extra meaning: it mentions absolute path for filePath and implies that entityName must match list_entities entities. This is adequate but does not significantly enhance understanding beyond 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?

The description clearly states the tool uploads a CSV/XLSX file and starts an import using an existing mapping. The verb and resource are specific, and the explanation of returning an import object with importId distinguishes it from siblings like import_csv which may not use existing mappings.

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?

The description provides context by specifying to pass an absolute path, to poll get_import_status or use wait_for_import, and file format limits. However, it does not explicitly contrast with siblings like auto_import or import_csv, nor does it state when not to use this tool or mention prerequisites like needing to create a mapping first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accountA
Read-only

Returns the current Synder Importer account: email, name, status, subscription, and connected-company count. Call this first to verify the IMPORTER_API_TOKEN is valid.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoAccount id.
emailNoAccount owner email.
nameNoAccount owner full name.
statusNoAccount lifecycle status (e.g. ACTIVE, TRIAL, SUSPENDED).
subscriptionNoSubscription plan + billing fields.
connectedCompaniesCountNoNumber of accounting companies linked to this account.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds context about return fields and token verification. No contradictions, but does not disclose additional behavioral details beyond what annotations provide.

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

Conciseness5/5

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

Two sentences: first states what it returns, second gives usage context. No unnecessary words, front-loaded with key information.

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?

For a simple read-only tool with no parameters and an output schema implied, the description adequately covers return values and usage. However, it does not mention error conditions or how to interpret the results beyond token verification.

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?

No parameters, so schema coverage is 100%. The description does not need to add parameter info. Baseline of 4 is appropriate.

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?

The description clearly states it returns the current Synder Importer account and lists the specific fields (email, name, status, subscription, connected-company count). This distinguishes it from sibling tools which focus on imports, mappings, etc.

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?

Explicitly says 'Call this first to verify the IMPORTER_API_TOKEN is valid.' This provides clear guidance on when to use this tool before other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fieldsA
Read-only

Returns the field schema for an entity in a company: every field with its type, required flag, alternativeTitles, and predefinedValues. Use to build or verify a mapping before running an import.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
entityNameYesEntity name from list_entities (e.g., 'Invoice', 'Bill').

Output Schema

ParametersJSON Schema
NameRequiredDescription
fieldsNoField schema entries for the entity.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false. Description adds what the tool returns (field schema details) and its role in import workflow. No additional behavioral traits needed beyond annotations.

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

Conciseness5/5

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

Two concise sentences: first returns data, second states usage. No redundancy or fluff. Every sentence adds value.

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?

Given full input schema, clear annotations (readOnly, nondestructive, openWorld), and output schema exists, the description is sufficient. It covers return content and usage context without missing information.

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 baseline 3. Description adds context: 'Company id from list_companies' and 'Entity name from list_entities (e.g., 'Invoice', 'Bill')', clarifying parameter sources and examples.

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?

Clear verb 'returns' and specific resource 'field schema for an entity'. Description explicitly lists returned data (type, required, alternativeTitles, predefinedValues) and use case (build/verify mapping). Distinguishes from sibling tools like create_mapping and execute_import.

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?

Explicitly states when to use: 'Use to build or verify a mapping before running an import.' No confusion about applicability; implies it's for schema inspection only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_import_resultsA
Read-only

Returns per-row results for a finished import. Filter by 'type' (INFO / WARNING / ERROR) to surface only failures. Paginated — defaults to 20 rows per page, max 100.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
importIdYesImport id from list_imports.
typeNoOptional: filter rows by result type.
pageNoPage number (1-indexed). Default 1.
perPageNoRows per page. Default 20, max 100.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNoPer-row results.
pageNoCurrent page (1-indexed).
perPageNoRows per page.
totalNoTotal result rows across all pages.
totalPagesNoTotal page count.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. The description adds concrete behavioral details: pagination (default 20, max 100) and filtering by type. It complements annotations without contradiction.

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

Conciseness5/5

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

Two sentences: first clearly states purpose, second adds essential details on filtering and pagination. No wasted words. The key information is front-loaded, making it easy for an agent to quickly grasp the tool's function.

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?

Given that an output schema exists, the description does not need to explain return values. It covers the main use case (per-row results), filtering, and pagination. It implicitly states that the import must be finished. Slight gap: it could explicitly note that companyId and importId are required, but the schema already marks them as required.

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 100% with detailed descriptions for all 5 parameters. The description adds minimal extra beyond the schema: it reiterates the type filter and pagination defaults. Per the guidelines, baseline is 3 when schema coverage is high, and the description does not significantly enhance parameter understanding.

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?

The description clearly states the verb 'Returns' and the resource 'per-row results for a finished import', which immediately defines the tool's purpose. The title from annotations reinforces 'Get per-row import results'. This distinguishes it from siblings like get_import_status (overall status) and list_imports (list imports).

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?

The description explicitly says to filter by type to surface failures, providing clear usage guidance. It also gives pagination defaults and limits. However, it does not mention when to avoid this tool (e.g., if import is not finished) or compare with alternatives like get_import_status for overall results.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_import_statusA
Read-only

Returns a single import's current status and summary (total / succeeded / failed / warnings). Status lifecycle: SCHEDULED → IN_PROGRESS → FINISHED | FINISHED_WITH_WARNINGS | FAILED | CANCELED. FINISHED can transition to REVERTING → REVERTED.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
importIdYesImport id from list_imports.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesImport id.
statusYesLifecycle status (SCHEDULED, IN_PROGRESS, FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED, REVERTING, REVERTED).
entityNameNoEntity type being imported.
fileNameNoUploaded file name.
summaryNoCounts per result type.
createdAtNoISO timestamp.
finishedAtNoISO timestamp when reached terminal status, if applicable.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds the status lifecycle (SCHEDULED, IN_PROGRESS, etc.) and possible transitions beyond the readOnlyHint annotation. No contradiction with annotations.

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

Conciseness5/5

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

The description is highly concise with two sentences, each adding essential information. There is no wasted text.

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?

The description covers the tool's purpose and status lifecycle. With an output schema present, it does not need to detail return values. It could mention that the tool is for a single import, but it is already implied.

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?

The description adds meaning to the parameters by stating that companyId comes from list_companies and importId from list_imports. Schema coverage is 100%, so the description enhances understanding.

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?

The description clearly states the tool returns a single import's current status and summary, distinguishing it from list_imports which lists many imports. The status lifecycle is also specified.

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 description implies usage for checking a single import's status but does not explicitly state when to use this tool versus alternatives like get_import_results. No exclusion criteria or when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_settingsA
Read-only

Returns per-company import settings (dateFormat, document-number behavior, product/account auto-creation, duplicate-skip). Check dateFormat before importing — CSV date columns must match.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateFormatNoDate parse format (e.g. 'MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy-MM-dd').
incrementDocNumberNoAuto-increment document numbers on conflict.
createMissingProductsNoCreate products in QBO/Xero if not found.
createMissingAccountsNoCreate chart-of-accounts entries if not found.
skipDuplicatesNoSkip rows that look like duplicates of existing entries.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing the returned fields and purpose, but does not significantly expand on behavioral traits.

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

Conciseness5/5

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

Two sentences: first summarizes functionality, second provides actionable advice. No wasted words, perfectly front-loaded.

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?

Given the presence of an output schema, the description covers the essential purpose and usage context for a simple getter tool. Lacks mention of error handling or prerequisites, but is adequate.

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 covers 100% of the parameter (companyId) with a description. The tool description does not add additional semantic detail beyond what the schema already provides.

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 description clearly states that the tool returns per-company import settings and lists specific fields. Although it distinguishes from siblings by indicating it is a read-only settings getter, it does not explicitly compare to other tools.

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?

Provides explicit guidance to check dateFormat before importing, indicating when to use the tool. However, it does not mention when not to use it or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_csvA

Happy-path CSV/XLSX importer. Two-step: first call (without confirmed) auto-resolves the company, uploads the file, and returns the server's proposed mapping plus any missingRequired fields — show this to the user. Re-call with confirmed=true (and the same filePath) to run the real import and poll until it terminates. Returns { stage: 'DRY_RUN' | 'DONE', importId?, status, summary?, proposedMapping?, missingRequired? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute path to a .csv, .xlsx, or .xls file.
entityNameYesEntity to import as — match list_entities (e.g. 'Journal Entry').
companyIdNoOptional. If omitted and exactly one ACTIVE company exists, it's picked automatically.
confirmedNoSet true on the second call to commit the import. Default false (dry-run only).
timeoutSecondsNoForwarded to wait_for_import on the confirmed call. Default 600.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageYesDRY_RUN when confirmed=false (first call); DONE when confirmed=true.
companyIdNo
entityNameNo
importIdNoPresent when stage=DONE.
statusNoFinal import status (stage=DONE).
proposedMappingNoAuto-resolved column→field mapping (stage=DRY_RUN).
missingRequiredNoRequired target fields the auto-mapper could not resolve (stage=DRY_RUN).
summaryNoPer-type result counts when stage=DONE and the import reached a terminal state.
hintNoNext-step hint for the LLM.

TDQS

A4.5/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it explains the two-step call, polling, default timeout forwarding, and auto-company detection. Annotations indicate non-read-only, non-destructive behavior; description confirms with details.

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?

The description is well-structured with a clear opening sentence, step-by-step instructions, and return value format. It is relatively concise for the complexity, though could trim minor details.

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?

Given the tool's complexity (two-step workflow, optional auto-detection, output schema), the description covers the essential workflow and return shape. It lacks edge cases but is adequate for the happy path.

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?

Input schema covers all 5 parameters with descriptions (100% coverage). The description adds value by explaining the role of 'confirmed' in the two-step process and that 'timeoutSeconds' is forwarded to wait_for_import, improving semantic understanding.

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?

The description clearly states the tool's purpose: 'Happy-path CSV/XLSX importer' and explains the two-step process of dry-run then commit. It distinguishes itself from sibling tools like auto_import by detailing the sequential workflow.

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?

The description provides clear guidance on when to use the tool and how to use it step-by-step (first call without confirmed, then with confirmed). However, it does not explicitly mention when not to use it or compare it to alternatives like auto_import.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_companiesA
Read-only

Lists all accounting companies connected to the Importer account (QuickBooks Online via 'intuit', Xero via 'xero'). Use the returned 'id' as companyId for downstream tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
companiesNoConnected accounting companies.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating no side effects. The description adds minor behavioral context about the types of accounting companies (via 'intuit', 'xero'), but does not significantly expand beyond the annotations.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the primary action, and every word adds value. No unnecessary information.

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?

Given the simplicity of the tool (no parameters, output schema exists), the description is complete. It explains the output and its downstream use, making it self-contained.

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?

With zero parameters, the input schema is empty, and schema coverage is 100%. The description adds meaning by specifying what companies are listed and that the output provides IDs for downstream use, exceeding the baseline of 4.

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?

The description clearly states the tool lists all accounting companies connected to the Importer account, specifying sources like QuickBooks and Xero. It distinguishes itself from sibling tools which are focused on imports and mappings.

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?

The description explains that the returned 'id' should be used as companyId for downstream tools, providing clear usage context. However, it does not explicitly state when not to use this tool or compare it with alternatives, though the context with siblings makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_entitiesA
Read-only

Lists importable entity types for a company (Invoice, Bill, JournalEntry, Customer, Vendor, etc.). Use the returned 'name' as entityName for get_fields and import tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.

Output Schema

ParametersJSON Schema
NameRequiredDescription
entitiesNoImportable entity types for this company.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about using the output for other tools but does not elaborate on additional behaviors beyond the annotations.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the main action, no wasted words.

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?

The tool has one parameter, is simple, has an output schema, and the description explains the purpose and next steps. Nothing critical is missing for an agent to use it correctly.

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?

The only parameter companyId is described in the schema as 'Company id from list_companies,' which is sufficient. The description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

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?

The description clearly states the tool lists importable entity types for a company, provides examples (Invoice, Bill, etc.), and explains the purpose of the returned 'name' for use with get_fields and import tools, distinguishing it from siblings.

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?

The description implies when to use (to get entity types) and how to use the output (as entityName for other tools), but does not explicitly state when not to use or describe alternatives, though siblings provide context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_importsA
Read-only

Lists recent imports for a company with status and timestamps. Use to find an importId for status / results / revert / cancel.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.

Output Schema

ParametersJSON Schema
NameRequiredDescription
importsNoRecent imports.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint and destructiveHint, so the description adds minimal behavioral context beyond 'recent' and the fields included. No mention of pagination or limits.

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

Conciseness5/5

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

Two sentences: first states functionality, second states when to use. No wasted words, front-loaded.

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?

Given the single required parameter (fully documented in schema) and presence of output schema, the description is adequate. Could mention return count or ordering but not essential.

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 100%, and the description merely references the companyId parameter without adding new semantics beyond what the schema already provides.

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?

Description clearly states it lists recent imports with status and timestamps, and explicitly says to use it to find an importId for status/results/revert/cancel, distinguishing it from sibling tools.

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?

Description provides a clear use case for finding an importId, but does not explicitly mention when not to use this tool or suggest alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mappingsA
Read-only

Lists field mappings saved for a company. Each mapping is reusable across imports of the same entity type.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.

Output Schema

ParametersJSON Schema
NameRequiredDescription
mappingsNoSaved field mappings.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds the context that mappings are reusable across imports, which is useful behavioral information beyond annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and contains no redundant or unnecessary words.

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?

All structured fields (schema, annotations) and output schema exist. The description covers the tool's purpose and key behavioral insight (reusability), making it complete for a read-only list tool.

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%, with companyId described as 'Company id from list_companies.' The description does not add additional meaning to the parameter beyond what the schema provides.

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?

The description uses a specific verb 'Lists' and resource 'field mappings saved for a company', clearly distinguishing it from siblings like create_mapping, delete_mapping, and update_mapping.

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?

The description states that each mapping is reusable across imports, implying usage when needing to view existing mappings. However, it does not explicitly state when not to use this tool or compare it to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revert_importA
DestructiveIdempotent

Reverts a FINISHED or FINISHED_WITH_WARNINGS import — deletes the QuickBooks/Xero entries the import created, using their live SyncTokens. Status transitions FINISHED → REVERTING → REVERTED. Confirm with the user before calling — irreversible from their perspective.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
importIdYesImport id from list_imports.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesImport id.
statusYesLifecycle status (SCHEDULED, IN_PROGRESS, FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED, REVERTING, REVERTED).
entityNameNoEntity type being imported.
fileNameNoUploaded file name.
summaryNoCounts per result type.
createdAtNoISO timestamp.
finishedAtNoISO timestamp when reached terminal status, if applicable.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it mentions that the tool deletes entries using live SyncTokens, details the status transitions, and warns that the action is irreversible from the user's perspective. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise (three complete sentences) with no extraneous information. It front-loads the purpose and then logically flows into status details and a usage warning. Every sentence earns its place.

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?

Given the tool's simplicity (2 required parameters with schema descriptions, presence of output schema, and comprehensive annotations), the description covers all necessary aspects: what it does, when to use it (status condition), side effects (irreversibility), and status flow. It is fully complete for an agent to correctly invoke the tool.

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?

The input schema already provides 100% coverage with descriptions for both parameters. The description adds value by specifying that companyId comes from list_companies and importId from list_imports, and that importId must refer to a finished import, which helps the agent source the correct values.

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?

The description clearly states the verb 'Revert' and the specific resource 'finished import', explains what it does (deletes created entries) and the status transition flow. It distinguishes from sibling tools like cancel_import by specifying it works only on FINISHED or FINISHED_WITH_WARNINGS imports.

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?

The description explicitly says to confirm with the user before calling due to irreversibility, and it specifies the valid statuses (FINISHED or FINISHED_WITH_WARNINGS). However, it does not explicitly name alternative tools for other cases, though cancel_import is implied for non-finished imports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_mappingA
Idempotent

Replaces an existing mapping in full. Fetch the current mapping with list_mappings first and send the whole desired shape — this is a PUT, not a patch. Returns the updated mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
mappingIdYesMapping id from list_mappings.
titleYesHuman-readable mapping name.
entityNameYesEntity this mapping targets — must match list_entities output.
fieldsYesField mappings (full replacement).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesMapping id.
titleYesMapping name.
entityNameYesEntity this mapping targets.
fieldsYesPersisted field entries.
createdAtNoISO timestamp.
updatedAtNoISO timestamp.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare it's not read-only and not destructive, and that it's idempotent. The description adds context: it is a full replacement (PUT, not patch) and returns the updated mapping, matching the annotations without contradiction.

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

Conciseness5/5

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

Two sentences, no redundant phrases. Front-loaded with the key action and essential instruction to fetch first.

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?

Given the tool's complexity (5 required params, nested objects), the description covers what it does, how to use it (fetch first), and what it returns. Output schema exists so return details are not needed.

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 the schema already documents parameter meanings well. The description reinforces the 'full replacement' concept but adds no new parameter-specific details.

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?

The description clearly states it replaces an existing mapping in full (PUT vs patch), and explicitly instructs to fetch the current mapping with list_mappings first. This distinguishes it from create_mapping and delete_mapping siblings.

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?

The description provides explicit usage guidance: fetch the current mapping first and send the whole desired shape. It implies when to use (update an existing mapping) but does not explicitly state when not to use or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_settingsA
Idempotent

Updates per-company import settings. Pass only the fields you want to change inside 'settings' (e.g. { dateFormat: 'dd/MM/yyyy' }). Fetch current values with get_settings first so you don't clobber unrelated fields. Returns the updated settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
settingsYesSettings patch. Common fields: dateFormat ('MM/dd/yyyy' | 'dd/MM/yyyy' | 'yyyy-MM-dd'), incrementDocNumber, createMissingProducts, createMissingAccounts, skipDuplicates.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateFormatNoDate parse format.
incrementDocNumberNo
createMissingProductsNo
createMissingAccountsNo
skipDuplicatesNo

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and not destructive, but the description adds valuable context like the partial update pattern and that it returns updated settings. No contradictions.

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

Conciseness5/5

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

Two sentences with no wasted words. The purpose is front-loaded, and every sentence adds critical information.

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 tool with nested objects and 2 parameters, the description covers the partial update pattern, references get_settings, mentions return value, and lists common fields. Output schema exists, so no need to detail return format.

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

Parameters5/5

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

Schema coverage is 100%, and the description adds meaning by explaining the patch pattern with an example (e.g., dateFormat) and listing common fields, going beyond the schema's generic description.

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?

The description explicitly states 'Updates per-company import settings,' clearly identifying the verb (updates) and resource (import settings). It distinguishes from siblings like get_settings, which is referenced as the read-only counterpart.

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?

Provides clear guidance: 'Pass only the fields you want to change inside settings' and 'Fetch current values with get_settings first so you don't clobber unrelated fields.' This explicitly states when to use and what to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_importA
Read-only

Polls get_import_status until the import reaches a terminal state (FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED, REVERTED). Exponential backoff (2s → 1.5× → cap 30s). Default timeout 600s — if exceeded, returns { status: 'POLLING', importId, lastSeen } so the LLM can re-call. Includes a per-type result count summary on terminal states (INFO / WARNING / ERROR; null if the server didn't return totals).

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesCompany id from list_companies.
importIdYesImport id from list_imports or execute_import.
timeoutSecondsNoMax seconds to wait before returning POLLING. Default 600.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoImport id.
statusNoEither a terminal status (FINISHED, FINISHED_WITH_WARNINGS, FAILED, CANCELED, REVERTED) or 'POLLING' if timeoutSeconds elapsed.
importIdNoEchoed back when status='POLLING' so the LLM can re-call wait_for_import.
summaryNoPer-type result counts on terminal states. Values may be null if the server didn't return totals.
lastSeenNoLast get_import_status response observed before the timeout, present when status='POLLING'.

TDQS

A4.4/5.0
Behavior5/5

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

The description extensively covers behavioral traits beyond annotations: exponential backoff (2s → 1.5× → cap 30s), default timeout 600s, timeout response format, and result count summary on terminal states. Annotations only provide readOnlyHint and destructiveHint; the description adds rich operational details.

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

Conciseness5/5

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

The description is concise with four sentences, each adding unique value: purpose, backoff, timeout behavior, and output details. No unnecessary words; front-loaded with key action.

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?

The description is thorough given the tool's complexity and the presence of output schema and annotations. It covers polling behavior, timing, and output on timeout and terminal states. Lacks mention of immediate return if import is already terminal, but overall complete.

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 100%, and the description does not add parameter-specific meaning beyond the schema's existing descriptions. The description provides global context for timeout default, but that is already in the schema. Baseline 3 is appropriate.

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?

The description clearly states the tool polls get_import_status until a terminal state, listing all possible terminal states. It specifies the resource (import) and the action (wait for termination), distinguishing it from sibling tools like get_import_status which does a single check.

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?

The description implicitly guides usage by detailing the polling behavior and timeout handling, including the instruction to re-call on POLLING response. However, it does not explicitly state when to use this tool versus alternatives like get_import_status or cancel_import.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 37 tool updatesv0.1.5
    • Removedaccount_get
    • Addedauto_import
    • Addedcancel_import
    • Removedcompanies_list
    • Addedcreate_mapping
    • Addeddelete_mapping
    • Removedentities_list
    • Addedexecute_import
    • Removedfields_get
    • Addedget_account
    • Addedget_fields
    • Addedget_import_results
    • Addedget_import_status
    • Addedget_settings
    • Removedimport_auto
    • Removedimport_cancel
    • Changedimport_csv3 fields changed
      • changedInput schema / properties / entityName / description
        Previous value: -"Entity to import as — match entities_list (e.g. 'Journal Entry')."New value: +"Entity to import as — match list_entities (e.g. 'Journal Entry')."
      • changedInput schema / properties / timeoutSeconds / description
        Previous value: -"Forwarded to import_wait on the confirmed call. Default 600."New value: +"Forwarded to wait_for_import on the confirmed call. Default 600."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "companyId": {
        +      "type": "string"
        +    },
        +    "entityName": {
        +      "type": "string"
        +    },
        +    "hint": {
        +      "description": "Next-step hint for the LLM.",
        +      "type": "string"
        +    },
        +    "importId": {
        +      "description": "Present when stage=DONE.",
        +      "type": "string"
        +    },
        +    "missingRequired": {
        +      "description": "Required target fields the auto-mapper could not resolve (stage=DRY_RUN).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "proposedMapping": {
        +      "additionalProperties": true,
        +      "description": "Auto-resolved column→field mapping (stage=DRY_RUN).",
        +      "type": "object"
        +    },
        +    "stage": {
        +      "description": "DRY_RUN when confirmed=false (first call); DONE when confirmed=true.",
        +      "enum": [
        +        "DRY_RUN",
        +        "DONE"
        +      ],
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Final import status (stage=DONE).",
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": true,
        +      "description": "Per-type result counts when stage=DONE and the import reached a terminal state.",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "stage"
        +  ],
        +  "type": "object"
        +}
    • Removedimport_execute
    • Removedimport_results
    • Removedimport_revert
    • Removedimport_status
    • Removedimport_wait
    • Removedimports_list
    • Addedlist_companies
    • Addedlist_entities
    • Addedlist_imports
    • Addedlist_mappings
    • Removedmapping_create
    • Removedmapping_delete
    • Removedmapping_update
    • Removedmappings_list
    • Addedrevert_import
    • Removedsettings_get
    • Removedsettings_update
    • Addedupdate_mapping
    • Addedupdate_settings
    • Addedwait_for_import
  2. 19 tool updatesv0.1.1
    • First observedaccount_get
    • First observedcompanies_list
    • First observedentities_list
    • First observedfields_get
    • First observedimport_auto
    • First observedimport_cancel
    • First observedimport_csv
    • First observedimport_execute
    • First observedimport_results
    • First observedimport_revert
    • First observedimport_status
    • First observedimport_wait
    • First observedimports_list
    • First observedmapping_create
    • First observedmapping_delete
    • First observedmapping_update
    • First observedmappings_list
    • First observedsettings_get
    • First observedsettings_update

TDQS

A4.3/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between auto_import, import_csv, and execute_import. Detailed descriptions help differentiate them, though an agent might still need to read carefully.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores, e.g., create_mapping, list_companies. Very predictable and easy to understand.

Tool Count5/5

19 tools is appropriate for an import server covering account info, companies, entities, mappings, multiple import workflows, settings, and results. Each tool earns its place.

Completeness5/5

The tool set covers the full import lifecycle: mapping CRUD, multiple import methods, status polling, results, cancellation, reversion, and settings management. No obvious gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Enables interaction with the QuickBooks Online Accounting API to manage customers, invoices, expenses, and payments through MCP-compatible clients. It supports comprehensive financial workflows and the generation of reports like Profit and Loss or Balance Sheets.
    133
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    An API-based accounting analysis tool that identifies financial anomalies like unusually large transactions and duplicate payments from CSV datasets. It allows AI agents to perform automated financial auditing and transaction analysis through structured tool endpoints.
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server that enables AI agents to interact with QuickBooks Online accounts to manage invoices, customers, payments, and financial reports. It provides 20 tools to automate accounting workflows and retrieve financial data through natural language interfaces.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 55 tools for managing QuickBooks entities like customers, invoices, and bills via any MCP-compatible client, built on Cloudflare Workers with OAuth 2.0 authentication.
    8
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SynderAccounting/gl-importer-plugin'

If you have feedback or need assistance with the MCP directory API, please join our Discord server