Skip to main content
Glama

Server Details

AI-powered data integration platform. Onboard users and run DPF data workflows.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP
URL

Available Tools

18 tools
call_dpf_apiCall any DPF API action (fallback for requests with no dedicated tool)A
Destructive
Inspect

Escape hatch for DPF capabilities that don't have a dedicated tool yet. ALWAYS prefer a dedicated tool when one exists — get_status, list_data, submit_query, delete_data_spec, onboard_data_source, update_data_spec, run_data_job, manage_connection, manage_trigger, setup_scheduled_pull, list_my_workspaces, create_workspace — and reach for this only when none of those fit (e.g. "how many credits do I have?" -> path "/auth/billing", action "get-balance"; a brand-new action added to the API since this server's tools were last updated). Every DPF endpoint is POST with a JSON body of { action, ...fields }, authenticated with your OAuth session automatically. Pass workspaceId explicitly for workspace-scoped actions (data-specs, connections, job-triggers, and under "/workspaces": get-workspace, list-queries, list-bytes-accessed, list-storage, list-processed-files, list-trigger-runs) — omit it entirely for account-level actions that reject one (under "/workspaces": create, get-workspaces, grant-permission, revoke-permission, update/delete-workspace; under "/auth/billing": get-balance only — billing mutations such as purchase-credits, modify-subscription, manage-payment, and create-customer are NOT available via MCP; direct the user to https://dpf-it.com/workspace.html#credits for all credit and subscription management). If unsure of an action's exact fields, read the "dpf-openapi-spec" resource (dpf://openapi/spec.yaml) rather than guessing. Exception: the raw Iceberg REST proxy under "/iceberg/v1/..." (e.g. to read or set a table's "dpf.primary-keys" property via a commit-table request) does not use the action convention at all — give action any placeholder string (it's ignored) and put the real Iceberg REST commit body, e.g. {"requirements":[],"updates":[{"action":"set-properties","updates":{"dpf.primary-keys":"col_a,col_b"}}]}, in params. This tool only issues POST, so Iceberg's GET-based reads (loadTable, listTables) aren't reachable this way. Returns the raw response data (or, for endpoints like the Iceberg proxy with no {success, data} envelope, the whole response body).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAPI path, e.g. "/auth/billing" (leading slash, no query string).
actionYesThe "action" field this endpoint routes on, e.g. "get-balance".
paramsNoAdditional action-specific fields to merge into the request body alongside action/workspaceId.
workspaceIdNoInclude for workspace-scoped actions. Omit entirely for account-level actions.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Adds important context beyond annotations: all requests are POST only, OAuth authentication is automatic, billing mutations are not available via MCP, and response shape varies (raw response or whole body). This enriches the destructiveHint/readOnlyHint annotations without contradicting them.

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?

Long but densely packed with necessary information–every sentence earns its place. The fallback tool's complexity justifies the length, and the text is well-structured with examples and explicit exclusions, front-loaded with the core purpose.

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, the description is remarkably complete. It covers authentication, HTTP method, workspace scoping, unsupported actions, Iceberg exception, return value conventions, and points to the OpenAPI spec for field details. The output schema exists, so return-value details are adequately supplemented.

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 descriptions cover the basics, but the tool description goes much deeper: it explains path format with an example, clarifies action usage, and gives detailed guidance on workspaceId inclusion/omission. It also demonstrates how to structure params for the Iceberg proxy, adding significant semantic value 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?

Clearly states it is a fallback/escape hatch for DPF API actions without a dedicated tool. The verb 'call' and resource 'DPF API action' are specific, and it explicitly contrasts with the dedicated sibling tools by saying 'ALWAYS prefer a dedicated tool when one exists'.

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 explicit when-to-use vs when-not-to-use guidance, naming many dedicated tools and stating to prefer them. Includes concrete examples (credits balance, new actions) and rules for workspaceId (include for workspace-scoped, omit for account-level) plus an exception for Iceberg endpoints.

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

contactSend a message to the DPF teamBInspect

Send a message to the DPF team — request a demo, ask about licensing, report an issue, or request a feature. No authentication required. Always ask the user for their email if they have not already given it in this conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
emailYesThe sender's email address, so DPF can reply.
reasonYes
messageYes

TDQS

B3.3/5.0
Behavior2/5

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

The annotations are all false, providing no hints about read-only, destructiveness, or idempotency. The description does not disclose side effects, confirmation, or what happens after the message is sent. It only mentions lack of authentication, but this is more of a prerequisite than a behavior. Transparency is limited.

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 and well-structured, with one main sentence followed by two short clauses. No unnecessary information is included, and it is easy to read.

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

Completeness2/5

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

No output schema is present, so return values are not expected. However, the description does not explain what happens after sending (e.g., confirmation, response time) or the meaning of the reason enum values. Given the low parameter coverage and lack of behavioral details, the description is incomplete for full context.

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

Parameters1/5

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

Schema coverage is only 25% (only email has a description). The other parameters (name, reason, message) lack any semantic explanation beyond their types. The enum for reason is self-explanatory, but its allowed values are not elaborated. Overall, parameter meanings are poorly specified.

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: sending a message to the DPF team, and enumerates specific use cases (demo request, licensing, issue, feature). This is specific and distinguishable 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?

The description provides practical usage instructions: no authentication required and a directive to always ask for the user's email if not already provided. It does not explicitly mention when not to use the tool, but the guidance is sufficient for most scenarios.

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

create_workspaceCreate a workspaceAInspect

Create a new workspace, owned by the authenticated user. Use this if list_my_workspaces returns none.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWorkspace name
descriptionNoOptional workspace description.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
createdAtYes
createdByYes
permissionYes
descriptionNo
permissionsYes
workspaceIdYes

TDQS

A4/5.0
Behavior3/5

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

Annotations (readOnlyHint: false, idempotentHint: false) communicate the non-idempotent write semantics. The description adds the ownership context, which is a useful behavioral trait. However, it stops short of disclosing edge cases like duplicate name errors or quota limits. The addition is decent but not deep.

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 succinct sentences with zero fluff. The first states the action and ownership; the second conveys a critical usage condition. Both sentences are information-dense and earn their place in the description.

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 2-parameter tool with an output schema and simple semantics, the description covers the essentials: action, ownership, and the primary use case condition. Exposing failure modes (e.g., duplicate names) would push it higher, but the current scope is well-handled and unimpeded by missing 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 description coverage is 100% (both 'name' and 'description' fields are documented in the schema). The description adds no parameter-level semantics, but given the full schema coverage, the baseline of 3 is the correct score per the rubric.

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 uses a specific verb+resource pairing ('Create a new workspace') and clarifies ownership ('owned by the authenticated user'). It's clear what the tool does, though it doesn't explicitly differentiate from siblings (not that any overlap is apparent).

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?

The instruction 'Use this if list_my_workspaces returns none' provides an explicit when-to-use trigger and directs the agent to a related sibling tool. This is exactly the kind of concrete conditional guidance agents need and is a best-in-class example of usage context.

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

delete_data_specDelete a data specA
DestructiveIdempotent
Inspect

Permanently delete a data spec and its associated configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNameYesName of the data spec to delete.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
specIdYes
messageYes
specNameYes
retainedJobsNo
deletedS3DataNo
alreadyDeletedNo
deletedS3SpecsNo
deletedTargetTablesNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the bar for added context is met. The phrase 'and its associated configuration' adds genuine behavioral context about cascading effects not present in annotations. No contradiction between description and 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?

A single, front-loaded sentence with zero filler. Every word earns its place - 'permanently' carries the destructive weight, and 'and its associated configuration' adds scope. No redundancy with the title or schema.

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 2-parameter mutation tool with a solid annotation set and an output schema, the description covers the essentials: what happens (delete) and scope (associated configuration). Slightly more color on the return value or edge cases (e.g., deleting a spec in use) would elevate it further.

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 both specName and workspaceId already well-described in the schema itself. The description adds no extra parameter-level detail beyond what the schema provides, so the baseline of 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 uses a specific verb ('delete') with a clear resource ('data spec') and scope ('associated configuration'). The word 'permanently' unambiguously signals the destructive, irreversible nature of the operation, distinguishing it from siblings like update_data_spec or manage_connection.

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?

Usage is implied by the name/description - an agent would know this is the action for removing a data spec. However, no explicit when/when-not guidance is given, no alternatives are named, and there's no mention of prerequisites (e.g., cannot delete if in use). Adequate but minimal.

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

finish_data_jobRun a data processing job, step 2: start processing after uploadingA
Idempotent
Inspect

Call after uploading the file(s) returned by run_data_job — starts processing and waits until the job completes or fails. If it returns before that (timedOut: true), do NOT call this tool again just to keep checking — that re-attempts starting the job. Poll with get_status (jobId) instead until it reaches a terminal status.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesjobId returned by run_data_job.
specNameYesName of the data spec this job belongs to.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
jobIdNo
specIdNo
statusNo"processing" | "completed" | "failed"
endTimeNo
jobSizeNo
messageYes
metricsNo
progressNo
timedOutNo
startTimeNo
durationMsNo
logLocationNo
workspaceIdNo
errorDetailsNo
currentLambdaNo
statusMessageNo
creditsChargedNo

TDQS

A3.9/5.0
Behavior1/5

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

The description contradicts the idempotentHint annotation by stating that calling again re-attempts starting the job, implying non-idempotent behavior despite the annotation saying it is idempotent. This is a significant 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 two sentences, front-loaded with the main action and followed by crucial usage warnings. No 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?

Given the tool's moderate complexity, the description covers the execution flow, timeout behavior, and provides the correct fallback (get_status). It does not need to explain output schema, which exists separately.

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 schema already provides descriptions for each parameter (jobId, specName, workspaceId), and the description adds minimal extra meaning beyond reiterating that jobId comes from run_data_job. Baseline of 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 starts processing and waits for completion or failure, and explicitly distinguishes it from related tools like run_data_job and get_status by specifying it should be called after uploading and not for polling.

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?

It gives explicit when-to-use (after uploading) and when-not-to-use (not for polling after timeout) instructions, and names the alternative (get_status), making usage guidelines very clear.

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

finish_data_source_onboardingOnboard a new data source, step 2: run analysis after uploadingA
Idempotent
Inspect

Call after uploading the file(s) returned by onboard_data_source — kicks off AI analysis and waits until the spec reaches "ready" or "failed". If it returns before that (timedOut: true), do NOT call this tool again just to keep checking — that re-attempts starting analysis. Poll with get_status (specId) instead until it reaches a terminal status.

ParametersJSON Schema
NameRequiredDescriptionDefault
specIdYesspecId returned by onboard_data_source.
specNameYesName of the data spec being onboarded.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.
loadSampleDataNoWhether to load the sample file and trigger the data-load job once analysis finishes (default true).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
specIdNo
statusNo"processing" | "ready" | "failed"
messageYes
progressNo
timedOutNo
lastJobIdNo
workspaceIdNo
errorDetailsNo
statusMessageNo
analysisEndTimeNo
analysisStartTimeNo
analysisDurationMsNo
hasTransformationConfigNo

TDQS

A3.9/5.0
Behavior1/5

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

The description directly contradicts the annotation idempotentHint: true. It warns 'do NOT call this tool again just to keep checking — that re-attempts starting analysis,' implying repeated calls have a side effect and do not return a cached/terminal result. This undermines the idempotency annotation and is a serious consistency problem.

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 focused sentences and immediately gives the required trigger, the behavior, and the critical warning. Every sentence earns its place and the most important actionable information is front-loaded.

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 a rich input schema and output schema, the description covers the necessary operational context: after which step to call it, what it waits for, what happens on timeout, why re-calling is wrong, and what to use instead. No essential behavior is left unexplained for the agent to invoke it safely.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter already has a meaningful description (e.g., 'specId returned by onboard_data_source', 'loadSampleData ... default true'). The tool description adds some usage context around the parameters but does not need to compensate for missing schema info.

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 specific role: 'Call after uploading the file(s) returned by onboard_data_source — kicks off AI analysis and waits until the spec reaches "ready" or "failed"'. This distinguishes it from the sibling onboarding step and from status-polling tools like get_status.

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?

The description explicitly says when to call it ('after uploading the file(s) returned by onboard_data_source') and provides an explicit alternative: 'Poll with get_status (specId) instead until it reaches a terminal status.' It also warns against repeated calls, making the usage boundary very clear.

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

finish_data_spec_updateUpdate an existing data spec, step 2: run analysis after uploadingAInspect

Call after uploading the file(s) returned by update_data_spec — kicks off AI analysis and waits until the spec reaches "ready" or "failed". If it returns before that (timedOut: true), do NOT call this tool again just to keep checking — that re-attempts starting analysis. Poll with get_status (specId) instead until it reaches a terminal status.

ParametersJSON Schema
NameRequiredDescriptionDefault
specIdYesspecId returned by update_data_spec.
specNameYesName of the data spec being updated.
runAnalysisNoDefault true — set false to skip analysis and just confirm the upload.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.
loadSampleDataNoWhether analysis should also trigger the data-load job (default true).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
specIdNo
statusNo"processing" | "ready" | "failed"
messageYes
progressNo
timedOutNo
lastJobIdNo
workspaceIdNo
errorDetailsNo
statusMessageNo
analysisEndTimeNo
analysisStartTimeNo
analysisDurationMsNo
hasTransformationConfigNo

TDQS

A4.7/5.0
Behavior5/5

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

It reveals important non-obvious behaviors beyond the annotations: that it waits for the spec to reach 'ready' or 'failed', may return early with timedOut: true, and that calling it again re-attempts analysis rather than simply querying status. This is highly valuable because the annotations only indicate mutability and non-idempotency without detail.

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 compact and front-loaded: it starts with the exact invocation context, then explains behavior, timeout handling, and the correct polling alternative. Every sentence carries meaningful operational guidance with 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?

For a tool with five parameters, a complete output schema, and important orchestration side effects, the description covers the critical workflow context: when to call, what it does, how long it may take, how timeouts are signaled, and how to handle them. It is fully sufficient for an agent to invoke the tool safely and 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 input schema already provides 100% parameter descriptions, so the baseline is 3. The tool description itself does not add parameter-level detail beyond referencing specId and the returned files, but no additional clarification is necessary given the schema richness.

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 action: it starts AI analysis after a spec upload and waits for a terminal status. It also distinguishes itself from sibling tools like update_data_spec and get_status by framing it as 'step 2' and explicitly relegating status checking to get_status.

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?

The description explicitly says to call it after uploading files returned by update_data_spec, warns against re-invoking the tool on timeout, and instructs using get_status instead. This gives strong when-to-use and when-not-to-use guidance.

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

get_statusGet spec or job statusA
Read-onlyIdempotent
Inspect

Poll the status of either a data spec's own process (schema inference + code generation, run by start-analysis — pass specId, reaches "ready" or "failed") or a data-load job (pass jobId, reaches "complete" or "failed"). Pass exactly one of specId or jobId. Right after create-spec/update-spec + start-analysis, poll by specId; once that reaches "ready", its response's lastJobId (if present) points at the data-load job — poll that separately by jobId for load progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdNoPoll a data-load job's status. Pass exactly one of specId or jobId.
specIdNoPoll a data spec's analysis status. Pass exactly one of specId or jobId.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
jobIdNo
specIdNo
statusNoe.g. "processing" | "ready" | "failed" for a spec; "processing" | "completed" | "failed" for a job
endTimeNo
jobSizeNo
metricsNoPresent once a job completes: recordsRead, recordsWritten, filesProcessed, etc.
progressNo
lastJobIdNospec poll only: the data-load job triggered once analysis reaches "ready".
startTimeNo
durationMsNo
logLocationNo
workspaceIdNo
errorDetailsNo
currentLambdaNo
statusMessageNo
creditsChargedNo
analysisEndTimeNo
analysisStartTimeNo
analysisDurationMsNo
hasTransformationConfigNo

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool is safe to poll repeatedly. The description adds behavioral context by naming the expected resolution states and the workflow that transitions from spec status to job status. It does not discuss rate limits or pagination, but for a poll tool this is not a significant gap.

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, front-loaded with the main purpose, and every sentence adds necessary information. No filler or redundancy; it balances specificity with brevity perfectly.

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 polling tool with an output schema available, the description covers both modes of operation, the exact trigger points, and the parameter usage. It is complete enough for an agent to invoke correctly without additional context, especially given the annotations already convey safety.

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% with descriptions for each param, but the description enriches semantics by explaining the distinct use of specId and jobId, their mutual exclusivity, and the default behavior for workspaceId. It also connects the parameters to the broader workflow, ensuring the agent selects the correct one based on context.

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 polls the status of two distinct resources: a data spec's own process (schema inference + code generation) and a data-load job. It specifies the terminal states ('ready'/'failed' and 'complete'/'failed') and ties them to the relevant identifiers, distinguishing from sibling tools by the unique workflow involving start-analysis and lastJobId.

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 explains when to use: right after create-spec/update-spec + start-analysis, poll by specId; once 'ready', use the response's lastJobId to poll the data-load job by jobId. It also states the required exclusivity of specId/jobId, preventing incorrect invocation.

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

list_dataList data specs or jobsA
Read-onlyIdempotent
Inspect

List either the data specs (parsing + mapping rule sets, resource: "specs") or the data processing jobs (executions of a spec, resource: "jobs") defined in a workspace. Each spec includes its specId and current status — poll a specific one with get_status. Both resources are paginated (default 25/page, max 100, newest first); pass the returned nextCursor to fetch more.

This is NOT a table listing — specs describe configured pipelines (parsing/mapping rules), not the live set of Iceberg tables in the workspace. Multiple specs can target the same table (e.g. one spec creates it, another merges more data into it), and specs can be deleted or fail without the underlying table being dropped. For "what tables exist in my workspace" or any question about actual current data, use submit_query with SHOW TABLES instead of inferring an answer from specs.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoOpaque `nextCursor` from a prior page (omit for the first page).
pageSizeNoRecords per page (default 25).
resourceYesWhich kind of resource to list
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobsNoPresent when resource is "jobs"
countYesNumber of items in this page, not the workspace total
specsNoPresent when resource is "specs"
pageSizeNo
nextCursorNoOpaque cursor for the next page; null when exhausted

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description need not repeat safety. It adds useful behavioral context: pagination defaults (25/page, max 100, newest first), use of nextCursor, and the important semantic distinction that specs are not tables. Does not contradict 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 paragraphs; the first is a direct action statement with resource options and pagination; the second clarifies a common misapplication. Every sentence adds necessary information, no fluff, and the key usage is front-loaded.

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 dual-resource list tool with pagination and a frequent misuse case, the description covers all essentials: what it lists, page size/cursor mechanics, delineation from table lists, and a pointer to get_status. Given the detailed output schema exists, not describing return format is acceptable; the description is complete.

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% as all parameters have descriptions, so baseline is 3. The description adds value by explaining the resource enum meaning (specs vs jobs), the pagination behavior with cursor, and the workspaceId default, which enriches interpretation beyond the bare 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 lists either data specs (parsing + mapping rule sets) or data jobs, specifying the resource parameter values. It distinguishes from siblings by explicitly naming get_status for polling and submit_query for table queries, making the purpose unambiguous.

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 explicit when-to-use guidance: for listing specs or jobs, and when-not-to-use: 'NOT a table listing' and directs users to submit_query with SHOW TABLES for actual table existence. Also mentions polling with get_status for specific spec status, covering alternatives and exclusions.

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

list_my_workspacesList my workspacesA
Read-onlyIdempotent
Inspect

List every workspace the authenticated user has access to, including their permission on each.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
workspacesYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds meaningful context by specifying the access scope (authenticated user), the universal inclusion of workspaces, and the inclusion of permission information, which goes 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 a single well-structured sentence that is front-loaded with the core action and resource. It contains no filler or 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?

This is a simple zero-parameter read tool with strong annotations and an output schema. The description fully covers the tool's behavior and access scope without needing to explain return values or parameters.

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 has no parameters, so the baseline is 4. There is nothing more needed beyond the schema, and the description accurately reflects the zero-parameter interface.

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 ('List') and a clear resource ('every workspace the authenticated user has access to'), and it adds the useful detail that permissions are included per workspace. This clearly distinguishes the tool from sibling tools like list_data and get_status.

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 clearly frames when the tool should be used: to view all workspaces available to the authenticated user and their permissions. It does not explicitly name alternatives or exclusions, but its resource scope is unambiguous given the sibling tool list.

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

manage_accountGet instructions for DPF account signup, email verification, or password resetA
Read-onlyIdempotent
Inspect

Returns instructions for creating a DPF account, verifying its email, resending the verification code, or resetting a forgotten password — it never performs these itself and never asks for a password. A password typed into this chat would sit in the conversation transcript, so every action instead returns the DPF website's own form, or a curl command that reads the password from a shell variable the user sets themselves in their own terminal. Hand the command to the user to run — do not run it yourself even if you have shell access, since composing the export line would require seeing the password. action "register": requires email, firstName, lastName, and termsAccepted: true (only after the user has explicitly agreed to the DPF Terms of Service and Privacy Policy in this conversation). action "verify": confirm the 6-digit code DPF emailed after registration (requires otp). action "resend": re-send that code if it never arrived. action "forgot-password": request a password-reset code (requires email). action "reset-password": submit that code and set a new password (requires otp).

ParametersJSON Schema
NameRequiredDescriptionDefault
otpNoaction "verify" and "reset-password" only. The 6-digit code from the email DPF sent.
emailYes
actionYes
lastNameNoaction "register" only
firstNameNoaction "register" only
termsAcceptedNoaction "register" only. Must be true.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations indicate readOnlyHint: true and idempotentHint: true. The description adds substantial context: it never performs actions, never asks for a password, and emphasizes the risk of password transcripts. This aligns with annotations and enriches behavioral understanding beyond structured data.

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 lengthy but each section adds necessary detail for safe usage. The action list is well-structured. While slightly verbose, it avoids redundancy and front-loads the critical safety information about password handling.

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 complexity (6 parameters, 5 actions) and absence of an output schema, the description fully documents behavior, parameter constraints, and safety considerations. It provides complete guidance for an agent to correctly invoke the tool without additional context.

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 67%, but the description explains each action's parameter requirements in detail (e.g., 'verify' requires otp, 'register' requires firstName, lastName, termsAccepted, and that termsAccepted must be true only after explicit consent). This goes beyond schema descriptions and clarifies conditional usage.

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 instructions' for specific account actions (signup, verify, resend, forgot-password, reset-password) and explicitly contrasts with performing actions itself. It distinguishes itself from siblings by focusing solely on account management instructions, which is unique among the listed tools.

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 instructs when to use the tool (handing commands to the user) and when not to (do not run commands even with shell access, due to password exposure). Per-action usage requirements are detailed, such as requiring termsAccepted only after explicit user agreement, and verifying OTP formats.

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

manage_connectionManage an external data-source connection (SFTP, AWS S3)A
Destructive
Inspect

Create, list, test, or delete a workspace connection to an external data source. Two types are supported: "sftp" and "aws_s3". For sftp, create generates a keypair and returns the public key — it must be installed in the remote server's authorized_keys before test (or a trigger using this connection) will succeed. For aws_s3, create generates an ExternalId and returns a trustPolicy plus dpfPrincipalArn — the customer must create (or update) the IAM role at roleArn with that trust policy and a permissions policy granting the S3 access DPF needs, before test will succeed. Either type must pass test before it can be used in a trigger. For a first-time "pull files from this server/bucket on a schedule" request, prefer setup_scheduled_pull, which chains create + test + create-trigger for you.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoConnection type. Required for create; defaults to "sftp".
actionYesWhich operation to perform.
roleArnNoaws_s3 only. The IAM role the customer will create/update. Required for create.
hostnameNosftp only. Remote server hostname. Required for create.
usernameNosftp only. Remote username. Optional for create; defaults to "sftpuser".
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.
connectionIdNoExisting connection to test or delete. Required for test/delete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo
countNoaction "list" only
accountNoaction "test", type "aws_s3" only
messageNo
roleArnNo
successNoaction "test" only
hostnameNo
usernameNo
createdAtNo
createdByNo
fileCountNoaction "test", type "sftp" only
publicKeyNo
updatedAtNo
entryCountNoaction "test", type "sftp" only
externalIdNo
connectionsNoaction "list" only
trustPolicyNo
workspaceIdNo
connectionIdNo
lastTestedAtNo
assumedRoleArnNoaction "test", type "aws_s3" only
lastTestStatusNo
dpfPrincipalArnNo

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses behavioral nuances beyond annotations: create generates a keypair and returns a public key for SFTP; for AWS S3 it returns a trustPolicy and dpfPrincipalId. It also clarifies that both types must pass test before a trigger can work. This is substantial behavioral disclosure not present in annotations (which only say destructive=true). No contradiction.

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 longer but information-dense. It packs a lot: two types, four actions, setup prerequisites, and alternative tool. The structure is logical (overview, type-specific flows, usage rule). Could be slightly tightened but the length is justified by complexity. Front-loaded with the core action list.

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 two types and multi-step setup, this description covers: the actions, per-type requirements, the test gate, and the recommended alternative tool (setup_scheduled_pull). It even explains what the create action returns (public key, trustPolicy) which is critical. An output schema exists, so return formats are elsewhere covered. Very complete.

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 covers 100% of params with descriptions, so baseline is 3. The description adds contextual meaning: roleArn is aws_s3 only, hostname/username are sftp only, connectionId needed for test/delete, workspaceId defaults to sole workspace. This clarifies which params apply to which action/type, which the schema does not. Solid upgrade over 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 creates, lists, tests, or deletes workspace connections, explicitly names the two supported types (sftp, aws_s3), and distinguishes itself from the sibling tool setup_scheduled_pull by advising to prefer that tool for first-time scheduled pulls.

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?

The description explicitly explains when to use this tool versus setup_scheduled_pull, and provides per-type setup steps (install public key for SFTP, update IAM role for S3) and the test-before-use requirement. It also says what's required for each action (create requires certain fields, test/delete require connectionId).

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

manage_triggerManage a workspace trigger (SFTP/AWS S3 pull, spec chaining, or schedule)A
Destructive
Inspect

Create, list, update, delete, or fire a workspace job trigger. Four types:

  • "sftp"/"aws_s3": pulls files from a connection (sftp: remote server; aws_s3: S3 bucket/prefix) into an already-analyzed data spec on a schedule (hourly/daily/monthly, UTC). Type must match the connection's type; aws_s3 also requires s3Bucket (s3Prefix optional). Natural-language preRules (which files to pick up) and postRules (what to do after upload) are compiled into executable code server-side — never pass raw code. The connection must already exist and have passed test (see manage_connection). For a first-time "set up a daily/scheduled pull" request, prefer setup_scheduled_pull, which sets up the connection and trigger together.

  • "spec_success": fires a spec automatically whenever a DIFFERENT spec's job completes successfully (set upstreamSpecName to that spec). No connection/frequency. Use this when the request ties the run to another job finishing (e.g. "run this after the customers load finishes").

  • "schedule": fires a spec directly on a plain frequency (hourly/daily/monthly, UTC), no connection and no upstream spec. Use this when the request is time-based with no dependency (e.g. "run this every morning").

IMPORTANT: "spec_success" and "schedule" triggers can only target a table-source (sourceType: "tables") spec (see onboard_data_source) — they have no file to load, only a generated query to re-run. If asked to set up a scheduled/recurring job that reads from an already-loaded table (e.g. "keep a daily summary of the orders table up to date"), create that as an onboard_data_source sourceType "tables" spec first, THEN create the trigger here. Prefer "spec_success" when the user's phrasing implies "after X loads/finishes"; prefer "schedule" when they just want a cadence with no stated dependency; ask if genuinely ambiguous. For sftp/aws_s3, the referenced spec must already have been analyzed once (see onboard_data_source).

After firing a trigger (action "run-now") — or any one-off manual run — use action "run-history" to monitor its outcome: it starts as status: running and settles to success, failed, or no-files, with filesPulled and a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoTrigger type. Optional for create (defaults to "sftp"). For sftp/aws_s3 must match the connection's type.
actionYesWhich operation to perform.
cursorNorun-history: opaque `nextCursor` from a prior page (omit for the first page).
dedupeNosftp/aws_s3 only. Required for create — ask the user rather than assuming a value; do not default it silently. Whether repeat pulls should skip files already loaded into this spec, matched by file name. Has real consequences: with dedupe true, a file that reappears under the same name (e.g. re-uploaded with corrected data) will be silently skipped; with dedupe false, an unchanged file left on the server will be reloaded every run. Omit only for update, where omitting leaves the trigger's existing setting unchanged.
specIdNorun-history: filter to runs of triggers feeding this spec.
enabledNoWhether the trigger is active. Defaults to true on create.
endTimeNorun-history: ISO 8601 upper bound (inclusive) on when the run started.
pageSizeNorun-history: records per page (default 25).
preRulesNosftp/aws_s3 only. Natural language: which files to pick up (e.g. "only *.csv under /outbound").
s3BucketNoaws_s3 only. Bucket to poll. Required for create when type is "aws_s3", or to change it on update. Each run lists at most 5000 objects from the bucket/prefix (oldest key first) — past that, new files can be missed. On create, a successful response includes a `warnings` array with this note; relay it to the user and suggest an S3 lifecycle rule to expire/transition old objects.
s3PrefixNoaws_s3 only. Optional key prefix; defaults to the whole bucket.
specNameNoThe spec this trigger fires. Required for create.
frequencyNoRequired for create when type is "sftp", "aws_s3", or "schedule"; optional on update to change the schedule. Not applicable to spec_success.
postRulesNosftp/aws_s3 only. Natural language: what to do after a file loads (e.g. "rename with .done suffix").
startTimeNorun-history: ISO 8601 lower bound (inclusive) on when the run started.
triggerIdNoExisting trigger. Required for update/delete/run-now/clear-processed-files.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.
connectionIdNosftp/aws_s3 only. Connection to pull from. Required for create when type is "sftp"/"aws_s3". Also usable as a run-history filter.
upstreamSpecNameNospec_success only. The spec whose successful job completion fires this trigger. Required for create when type is "spec_success".

Output Schema

ParametersJSON Schema
NameRequiredDescription
runsNoaction "run-history" only
typeNo
countNoaction "list" only
dedupeNo
specIdNo
deletedNoaction "clear-processed-files" only
enabledNo
messageNo
pageSizeNoaction "run-history" only
preRulesNo
s3BucketNo
s3PrefixNo
specNameNo
triggersNoaction "list" only
warningsNoaction "create", type "aws_s3" only. Advisory notes, e.g. the 5000-object S3 listing cap — relay to the user.
createdAtNo
createdByNo
frequencyNo
lastJobIdNo
lastRunAtNo
postRulesNo
triggerIdNo
updatedAtNo
nextCursorNoaction "run-history" only
workspaceIdNo
connectionIdNo
lastRunStatusNo
upstreamSpecIdNotype "spec_success" only
upstreamSpecNameNotype "spec_success" only

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already flag readOnlyHint=false, destructiveHint=true, openWorldHint=true. The description adds rich context: for s3 it notes the 5000-object listing limit and warns to relay the `warnings` array and suggest an S3 lifecycle rule; for dedupe it details what happens when the same file reappears; for run-now it explains status transitions to success/failed/no-files. It also warns that preRules/postRules compile server-side (never pass raw code). Minor deduction: some behaviors (e.g., what happens on delete) are not enumerated, but the description goes well beyond the structured 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 substantial but every section serves a purpose: lead verbs, per-type paragraphs, an 'IMPORTANT' callout for the most common mistake, a bulleted list of trigger types, and a final 'after firing' note. Formatting with newlines and bold text improves scannability without bloat.

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 19-parameter, 7-action, 4-type tool, the description covers all operational contexts: create vs. update vs. run-history, prerequisites (connection tested, spec analyzed, table-source spec for spec_success/schedule), type-specific requirements (s3Bucket for aws_s3), and monitoring via run-history. The output schema's existence lowers the need to document return values, and the description still mentions `filesPulled`/`message` fields. Nothing critical left unexplained given the tool's complexity.

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 already 100%, so the baseline is 3. But the description goes further: it explains the `dedupe` parameter's real-world consequences (silently skipped re-uploads or reloaded files), documents connection prerequisites, clarifies the relationship between type and connection, and explains the `warnings` array in the response, adding meaning beyond the schema's prose.

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 opens with a specific verb ('Create, list, update, delete, or fire') and resource ('a workspace job trigger') and immediately distinguishes four trigger types (sftp/aws_s3, spec_success, schedule) with concrete examples ('run this after the customers load finishes'). This clearly differentiates from siblings like setup_scheduled_pull and manage_connection by naming them where relevant.

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?

Explicit guidance is given throughout: 'prefer setup_scheduled_pull' for first-time scheduled pulls, 'Prefer spec_success when... prefer schedule when... ask if genuinely ambiguous,' and the special constraint that spec_success/schedule only target table-source specs. This goes beyond vague alternatives to provide decision rules with concrete user-phrasing examples.

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

onboard_data_sourceOnboard a new data source, step 1: create a data spec and get upload URL(s)AInspect

First step of setting up a new data integration: creates a data spec. By default (sourceType "file") this returns presigned upload URL(s) for the sample file (and optional format/target-schema file) — upload the file(s) per the returned instructions, then call finish_data_source_onboarding with the returned specId to kick off AI analysis and wait for it to complete.

Use sourceType "tables" instead when the request is to derive/aggregate data that is ALREADY loaded into workspace tables — e.g. "build me a daily summary of the customers table", or "set up a job that reads from the orders table and maintains a running total" — rather than loading a new file. It generates a SQL query (INSERT or MERGE, per merge) via AI instead of a Python parser, run through the query engine instead of a Glue job. There are never sample/format files, but targetOption still works the same three ways as sourceType "file" (see targetOption below) — so this call returns files: [] and you can call finish_data_source_onboarding immediately UNLESS targetOption is "target-schema-file", in which case it returns one upload URL for that file, same as the file-source path. The generated SQL automatically windows itself to rows added since the spec's last successful run. sourceType "tables" ALSO requires autoRefresh — how this spec stays up to date is not optional to decide, and must not be inferred from other jobs/triggers that happen to already exist in the workspace: ask the user whether it should re-run automatically whenever a specific upstream spec finishes loading ("spec_success" — the natural choice when the request is "run this after X finishes/loads"), on a plain cron-like cadence ("schedule" — the natural choice when the request is "run this every day/hour" with no mention of depending on another job), or stay manual-only ("none" — re-run later with run_data_job). If the request already states the timing unambiguously, that answers it; otherwise ask before calling this tool. Getting this wrong either way has a real cost: "none" means the summary silently goes stale until someone remembers to re-run it by hand, while an unwanted trigger keeps re-running (and charging credits for) a spec the user only wanted once. See autoRefresh below.

ParametersJSON Schema
NameRequiredDescriptionDefault
mergeNoUpsert instead of plain append when true (default false). For sourceType "tables": generates a MERGE statement instead of an INSERT — use true for a running aggregate/summary that updates existing rows. For sourceType "file" with targetOption "existing-tables": upserts loaded rows by the target table's inferred key instead of always inserting — use true whenever the request implies re-loading the same rows shouldn't create duplicates (e.g. "upsert on id", syncing/backfilling into a table that already has overlapping rows). Already automatic, no need to request it via additionalPrompt: target columns with no corresponding source column are null on newly inserted rows, and on a match keep their existing value rather than being nulled out.
specNameYesName for the new data spec.
sourceTypeNoDefaults to "file" (upload a sample file). Use "tables" to query existing workspace table(s) — see sourceTables — instead of loading a new file.
autoRefreshNosourceType "tables" only. Required for it — ask the user rather than assuming, and do not infer this from other jobs/triggers already in the workspace (a similar existing pipeline is not the user's answer for this one). "spec_success" re-runs this spec whenever autoRefreshUpstreamSpecName finishes loading; "schedule" re-runs it on autoRefreshFrequency; "none" leaves it manual-only (re-run later with run_data_job).
descriptionNoOptional description of the data spec.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.
sourceTablesNosourceType "tables" only: names of existing workspace tables the generated query reads from. Required for sourceType "tables".
targetOptionNoWhere transformed data should land — works the same for both sourceType values: "auto-infer" (default) lets the AI design the target table (for sourceType "tables", it designs the schema and the query together in one pass), "existing-tables" uses a table already in the workspace (requires targetTables), "target-schema-file" creates the table from a provided schema file (requires targetSchemaFileName).
targetTablesNoNames of existing workspace tables to target — exactly one entry for sourceType "tables" (the generated query has a single target), one or more for sourceType "file". Required when targetOption is "existing-tables". Optional otherwise: for "target-schema-file"/"auto-infer" the target table (and its name) is derived automatically — from the schema file, or AI-designed — unless you want to pin the name yourself, in which case pass exactly one entry.
formatFileNameNosourceType "file" only. File name of an optional format spec file.
sampleFileNameNosourceType "file" only (and required for it). File name of the sample data file (e.g. "customers.csv") — used to derive content-type, not read from disk.
additionalPromptNoInstructions for the AI. For sourceType "tables", describe what the query should compute from the source table(s) (e.g. "count signups per day per region"). This is stored on the spec verbatim and reused on every future re-analysis, so keep it to instructions that actually change behavior — do not restate default platform behavior (e.g. that unmapped target columns are null/preserved, see merge above) just to document it, since a note that's only true for one case (like new rows) can read as a standing instruction later and cause confusion on updates.
autoRefreshFrequencyNoRequired when autoRefresh is "schedule".
targetSchemaFileNameNoFile name of a target schema file. Required when targetOption is "target-schema-file", for either sourceType.
autoRefreshUpstreamSpecNameNoRequired when autoRefresh is "spec_success". The spec whose successful job completion should re-run this one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
specIdYes
messageYes
nextStepYesThe finish_data_source_onboarding call to make (once upload(s) are done, or immediately for sourceType "tables").
specNameYes
triggerIdNosourceType "tables" only, when autoRefresh was not "none": the auto-refresh trigger created alongside the spec.

TDQS

A4.9/5.0
Behavior5/5

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

With annotations all false, the description carries the full burden of explaining side effects. It details what is created, what is returned (upload URLs or empty files array), how the SQL query is generated for tables mode, and the real-world consequences (credits charged, stale summaries) of choosing the wrong autoRefresh value.

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 lengthy, but the complexity of the tool (15 params, two modes) justifies the detail. It front-loads the core purpose and organizes related information together. Could potentially be tightened with bullet formatting, but every sentence contributes useful guidance.

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 15 parameters, nested objects, enums, and an output schema, the description covers all major decision points, return flows, and next steps. It explains what to do after the call, what to expect in different sourceType/targetOption combinations, and when to ask the user for clarification.

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?

Despite 100% schema coverage, the description adds substantial meaning to parameters like autoRefresh (explains the three options and when each is appropriate), merge (clarifies behavior for null columns), and targetOption. It provides decision guidance that goes far beyond the schema's field descriptions.

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 is the first step of onboarding a data source, creating a data spec and returning presigned upload URLs. It distinguishes itself from sibling tools like finish_data_source_onboarding by explicitly labeling itself as 'step 1' and describing the follow-up flow.

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?

The description provides explicit guidance on when to use sourceType 'file' vs 'tables', with concrete examples ('build me a daily summary of the customers table'). It instructs the agent to ask the user for autoRefresh rather than inferring from existing workspace state, and warns about the costs of wrong choices.

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

run_data_jobRun a data processing job, step 1: create job and get upload URL(s)AInspect

First step of processing new data files through an already-configured data spec: creates a job and returns presigned upload URL(s) for each file. Upload the file(s) per the returned instructions, then call finish_data_job with the returned jobId to start processing and wait for it to complete.

Do NOT call this right after onboard_data_source/finish_data_source_onboarding or update_data_spec/finish_data_spec_update unless loadSampleData was explicitly set to false there — by default those already load and process the sample file as their own job (see the returned lastJobId), so calling run_data_job again for that same file creates a redundant second job. Only use this for files beyond the initial sample (new batches, additional files to process later).

ParametersJSON Schema
NameRequiredDescriptionDefault
specNameYesName of the already-configured data spec to process files through.
fileNamesYesFile names of the data files to process (e.g. ["jan.csv", "feb.csv"])
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
jobIdYes
messageYes
nextStepYesThe finish_data_job call to make once upload(s) are done.
specNameYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, but the description adds important behavioral context: it creates a job, returns presigned upload URLs, and requires a subsequent call to finish_data_job. It also discloses the side effect of creating a redundant job if misused. This goes beyond the annotations, though it doesn't detail the upload process or job lifecycle fully.

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 first sentence and a warning paragraph. It is slightly verbose but every sentence adds value, explaining the workflow and the redundancy pitfall. The front-loading is good, with the core purpose stated first.

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 (multi-step workflow, potential redundancy), the description covers the key points: what it does, how to proceed, and when to avoid it. It doesn't explain the upload instructions or job completion details, but the output schema likely covers return values, and the description points to finish_data_job for the next step. It is complete enough for an agent to use 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?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context about the relationship between specName and fileNames (processing files through a configured spec) and the workflow (upload then finish), but it doesn't add significant new meaning beyond 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's purpose: 'First step of processing new data files through an already-configured data spec: creates a job and returns presigned upload URL(s) for each file.' It specifies the verb (creates), the resource (job), and the scope (for new data files), and distinguishes it from sibling tools like finish_data_job and onboard_data_source.

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?

The description provides explicit when-to-use and when-not-to-use guidance. It warns against calling this tool right after onboarding or spec update unless loadSampleData was false, and explains the alternative (using the returned lastJobId). It also clarifies the intended use case: 'Only use this for files beyond the initial sample.'

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

setup_scheduled_pullSet up a scheduled SFTP or S3 pull into an existing data specAInspect

End-to-end workflow for "pull files from this SFTP server / S3 bucket on a schedule" requests: reuses a matching connection if one already exists in the workspace (same hostname/username for sftp, same roleArn for aws_s3), otherwise creates one; tests it; then creates a trigger that feeds an already-analyzed data spec (see onboard_data_source) on the given frequency. Pass hostname for an sftp pull, or roleArn (+ s3Bucket, required) for an aws_s3 pull — exactly one of the two is expected. Use this instead of calling manage_connection + manage_trigger yourself for first-time setup. If the connection test fails (e.g. the sftp public key or the aws_s3 IAM role isn't set up yet on the customer's side), no trigger is created — ask the user to finish that setup and re-run this tool, which will reuse the same connection and pick up where it left off. This is for pulling a NEW file from an external source — for "run this on a schedule/after another job" where the spec queries tables already in the workspace (sourceType "tables"), use manage_trigger with type "schedule" or "spec_success" instead; there is no connection involved.

ParametersJSON Schema
NameRequiredDescriptionDefault
dedupeNoRequired — ask the user rather than assuming a value; omitting it fails the call. Whether repeat pulls should skip files already loaded into this spec, matched by file name. Has real consequences: with dedupe true, a file that reappears under the same name (e.g. re-uploaded with corrected data) will be silently skipped; with dedupe false, an unchanged file left on the server will be reloaded every run.
roleArnNoaws_s3: the IAM role the customer will create/update.
hostnameNosftp: SFTP server hostname to pull from.
preRulesNoNatural language: which files to pick up (e.g. "only *.csv under /outbound")
s3BucketNoaws_s3: bucket to poll. Required when roleArn is given.
s3PrefixNoaws_s3 only. Optional key prefix; defaults to the whole bucket.
specNameYesAlready-analyzed data spec to load files into (see onboard_data_source)
usernameNosftp only. Defaults to "sftpuser".
frequencyYesPull schedule.
postRulesNoNatural language: what to do after a file loads (e.g. "rename with .done suffix")
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dedupeNo
specIdNo
enabledNo
messageYes
s3BucketNo
s3PrefixNo
specNameNo
warningsNoaws_s3 only. Advisory notes about the created trigger, e.g. the 5000-object S3 listing cap.
frequencyNo
triggerIdNoPresent only once the connection test succeeded and a trigger was created.
connectionIdNo
testSucceededNo
connectionTypeNo

TDQS

A5/5.0
Behavior5/5

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

The description discloses key behaviors beyond annotations: it reuses a matching connection if one exists, otherwise creates one, tests it, and only creates a trigger if the test passes. It notes that no trigger is created on failure and that re-running picks up where it left off. It also explains consequences of dedupe true/false. This goes well beyond the minimal readOnly/destructive hints.

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 dense but every sentence contributes value: the workflow, parameter selection rule, alternative guidance, failure behavior, and exclusion clause. It is appropriately sized for an 11-parameter tool and front-loaded with the primary purpose.

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 (11 params, nested frequency object, output schema exists), the description covers the end-to-end workflow, parameter selection constraints, failure handling, and alternatives. It references onboard_data_source for the spec prerequisite. The presence of an output schema makes return-value documentation unnecessary.

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?

The description adds crucial parameter semantics not fully captured by the schema: exactly one of hostname or roleArn must be provided, and s3Bucket is required with roleArn. It also clarifies the SFTP vs aws_s3 pull modes. Schema coverage is 100%, so this extra information elevates the score above the baseline of 3.

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 with a specific verb ('Set up a scheduled SFTP or S3 pull') and identifies the resource ('into an existing data spec'). It further distinguishes itself from siblings by explicitly saying 'Use this instead of calling manage_connection + manage_trigger yourself' and referencing manage_trigger with type 'schedule' or 'spec_success' for a different use case.

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?

The description provides explicit when-to-use guidance (first-time setup for scheduled external pulls), when-not-to-use guidance (schedule/spec_success on tables already in the workspace should use manage_trigger instead), and alternatives (manage_connection + manage_trigger, manage_trigger). It also explains what to do if the connection test fails (ask user to finish setup and re-run).

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

submit_queryQuery workspace dataA
Read-onlyIdempotent
Inspect

Run a SQL query against the Iceberg tables loaded into a workspace. To list the tables that actually exist in the workspace, run SHOW TABLES — this is the authoritative source (unlike list_data's specs, which describe pipelines, not live tables). Qualified table references (catalog/schema prefixes, e.g. information_schema.tables) are rejected; reference tables by name only. Table functions that introspect the engine itself (e.g. duckdb_functions(), duckdb_tables()) are also rejected as external-data-source access — don't try to discover available SQL functions this way. A BLOB column is very likely an HLL sketch (produced by a merge-mode table-source spec's approximate-distinct aggregate — see onboard_data_source's merge option): decode it with datasketch_hll_estimate(col), or datasketch_hll_estimate(datasketch_hll_union(12, col)) to union several rows to a coarser grain first. If the user's goal is an HTML page/dashboard built from these results (not just seeing the data here), do NOT default to embedding this result set as a static snapshot. Ask the user first: (a) a one-time static page with these results baked in, which goes stale and never changes again, or (b) a live page that logs in and queries DPF itself whenever it's opened, so it always reflects current data. If they want live/dynamic (or don't say and the data looks like it changes over time), read the dpf://examples/auth-and-query.html resource and adapt that pattern (login form, JWT cookie, fetch-based query call) instead of hand-rolling auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesSQL query, e.g. SELECT * FROM customers LIMIT 10
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
schemaYesColumn name -> DuckDB type
rowCountNo
executionTimeMsNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, etc.), the description discloses significant behavioral traits: rejection of qualified table references, rejection of engine-introspection functions, the fact that BLOB columns are very likely HLL sketches, and the specific decoding functions. It also clarifies that results should not be embedded as static snapshots without user consultation. This adds substantial context 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.

Conciseness4/5

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

The description is long but information-dense. The first sentence is concise and clear, but subsequent paragraphs contain essential caveats and branching logic. While every sentence earns its place, the length is substantial; however, given the complexity of the tool (query execution, HLL sketches, dashboard context), it is appropriately structured and 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?

Despite having an output schema, the description still adds critical context: it explains rejection rules, HLL sketch handling, and the decision process for static vs. live dashboards. It covers edge cases and clarifies what to do when results are for a dashboard, making it complete for a complex query tool. The presence of an output schema does not substitute for these behavioral and contextual details.

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 schema already covers 100% of the parameters with descriptions (sql and workspaceId). The description does not add new meaning to the parameters themselves, aside from providing example SQL syntax in the schema description. The behavioral guidance about what sql can contain is more about tool behavior than parameter semantics, so no significant extra value is added 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's function: 'Run a SQL query against the Iceberg tables loaded into a workspace.' It uses a specific verb (Run) and resource (SQL query on workspace tables), and distinguishes itself from sibling list_data by noting that SHOW TABLES is authoritative for live tables, not list_data. This provides clear differentiation from related tools.

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?

Explicit usage context is provided: it advises using SHOW TABLES to discover tables, warns against qualified references and engine-introspection functions, and explains when to ask users about static vs. live HTML pages. It also mentions an alternative (list_data) and instructs to read a resource for live dashboards, giving clear when-to-use and when-not-to-use guidance.

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

update_data_specUpdate an existing data specA
Idempotent
Inspect

Change an existing data spec's configuration. If no replacement file names are given, this runs synchronously (no upload needed): saves changes and — by default — re-runs AI analysis, returning the final status directly. If a replacement sample/format/target-schema file name IS given, this instead returns presigned upload URL(s); upload the file(s), then call finish_data_spec_update. Only pass the fields you want to change — omitted fields keep their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
mergeNoWhether new data should merge/upsert into existing rows rather than append. For sourceType "tables" also changes the generated SQL between MERGE and INSERT.
specNameYesName of the existing data spec to update
computeSizeNoCompute size for analysis/processing. Omit to keep the current setting.
descriptionNoNew description for the spec. Omit to keep the current value.
runAnalysisNoWhether to run analysis and wait for it after saving the changes (default true). Only applies to the synchronous (no-file-change) path.
workspaceIdNoWorkspace to act on. Defaults to your only workspace if you have exactly one.
sourceTablesNosourceType "tables" specs only: replacement list of source tables the generated query reads from.
targetOptionNoChange where transformed data lands. Omit to keep the current setting.
targetTablesNosourceType "file" specs: new list of existing workspace tables to load into. Required when setting targetOption to "existing-tables". sourceType "tables" specs: the query's single target table name — pass a one-element array to rename the target (its schema is re-resolved per the spec's targetOption).
formatFileNameNosourceType "file" specs only. File name of a replacement format spec file, if replacing it.
loadSampleDataNoWhether re-analysis should also trigger the data-load job (default true). Only used when runAnalysis is true.
sampleFileNameNosourceType "file" specs only. File name of a replacement sample data file, if replacing it.
additionalPromptNoExtra natural-language guidance for the AI schema inference/mapping. Replaces the previously stored value when given (omit to keep it as-is), and is reused on every future re-analysis — keep it to instructions that actually change behavior. Don't restate default platform behavior (e.g. that unmapped target columns are null on insert and preserved on merge match) just to document it; a note only true for one case (like new rows) can read as a standing instruction later and confuse updates.
targetSchemaFileNameNoFile name of a replacement target schema file. Required when setting targetOption to "target-schema-file".

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
filesNoPresent only when replacement file(s) were given — upload these, then call finish_data_spec_update.
specIdNo
statusNo
messageYes
nextStepNoThe finish_data_spec_update call to make once upload(s) are done. Only present alongside files.
progressNo
specNameNo
timedOutNo
lastJobIdNo
errorDetailsNo
statusMessageNo
hasTransformationConfigNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and destructiveHint=false latently; the description adds real behavioral detail: it re-runs AI analysis by default, returns final status synchronously in one path, and requires a follow-up call in the other. This goes beyond the annotations, which lack such nuance. 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.

Conciseness4/5

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

The main body is two dense sentences that front-load the key distinction (sync vs. async) and end with a clear 'only pass the fields you want to change' rule. The additionalPrompt field description is verbose, but it carries critical guidance about not restating default behavior drifted into standing instructions—arguably necessary for that parameter. Overall it is structured and efficient.

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?

With 14 parameters need conditional guidance; the description covers the two top-level modesusing `sourceType`, points to the required follow-up tool (finish_data_spec_update), and the schema covers param types/enums. The output schema exists (not shown) so return-value details are not needed. Adds important context about side effects like re-running AI analysis and loadSampleData interplay, making the description complete enough for safe invocation.

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%, so the baseline is 3. The description adds cross-parameter semantics (e.g., formatFileName implies the async path, targetSchemaFileName is required when targetOption is 'target-schema-file', omitted fields keep current values) and warns about additionalPrompt misuse. This clearly enhances the schema's per-field definitions.

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 changes an existing data spec ('Change an existing data spec'), specifying the resource and action. It distinguishes from siblings like finish_data_spec_update and delete_data_spec by explaining the two distinct paths (synchronous save vs. presigned-URL upload). This is a specific verb+resource with clear differentiation.

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?

The description explicitly explains when to use the synchronous path (no replacement file names) vs. the upload path (when a sample/format/target-schema file name is given), and directs the agent to call finish_data_spec_update after upload. It also clarifies that omitted fields keep current values, guiding correct invocation. This is strong, explicit usage guidance.

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. 3 tool updates
    • Changedmanage_account3 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "register",
        -  "verify",
        -  "resend"
        -]New value: +[
        +  "register",
        +  "verify",
        +  "resend",
        +  "forgot-password",
        +  "reset-password"
        +]
      • changedInput schema / properties / otp / description
        Previous value: -"action \"verify\" only. The 6-digit code from the verification email."New value: +"action \"verify\" and \"reset-password\" only. The 6-digit code from the email DPF sent."
      • removedInput schema / properties / password
        Removed value: -{
        -  "description": "action \"register\" only",
        -  "minLength": 8,
        -  "type": "string"
        -}
    • Changedmanage_trigger2 fields changed
      • changedInput schema / properties / s3Bucket / description
        Previous value: -"aws_s3 only. Bucket to poll. Required for create when type is \"aws_s3\", or to change it on update."New value: +"aws_s3 only. Bucket to poll. Required for create when type is \"aws_s3\", or to change it on update. Each run lists at most 5000 objects from the bucket/prefix (oldest key first) — past that, new files can be missed. On create, a successful response includes a `warnings` array with this note; relay it to the user and suggest an S3 lifecycle rule to expire/transition old objects."
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "action \"create\", type \"aws_s3\" only. Advisory notes, e.g. the 5000-object S3 listing cap — relay to the user.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedsetup_scheduled_pull1 field changed
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "aws_s3 only. Advisory notes about the created trigger, e.g. the 5000-object S3 listing cap.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 2 tool updates
    • Addedcontact
    • Addedmanage_account
  3. 11 tool updates
    • Changedcreate_workspace1 field changed
      • addedInput schema / properties / description / description
        Added value: +"Optional workspace description."
    • Changeddelete_data_spec1 field changed
      • addedInput schema / properties / specName / description
        Added value: +"Name of the data spec to delete."
    • Changedfinish_data_job2 fields changed
      • addedInput schema / properties / jobId / description
        Added value: +"jobId returned by run_data_job."
      • addedInput schema / properties / specName / description
        Added value: +"Name of the data spec this job belongs to."
    • Changedfinish_data_source_onboarding2 fields changed
      • addedInput schema / properties / specId / description
        Added value: +"specId returned by onboard_data_source."
      • addedInput schema / properties / specName / description
        Added value: +"Name of the data spec being onboarded."
    • Changedfinish_data_spec_update2 fields changed
      • addedInput schema / properties / specId / description
        Added value: +"specId returned by update_data_spec."
      • addedInput schema / properties / specName / description
        Added value: +"Name of the data spec being updated."
    • Changedmanage_connection1 field changed
      • addedInput schema / properties / action / description
        Added value: +"Which operation to perform."
    • Changedmanage_trigger3 fields changed
      • addedInput schema / properties / action / description
        Added value: +"Which operation to perform."
      • addedInput schema / properties / enabled / description
        Added value: +"Whether the trigger is active. Defaults to true on create."
      • addedInput schema / properties / frequency / properties / unit / description
        Added value: +"Schedule cadence."
    • Changedonboard_data_source3 fields changed
      • addedInput schema / properties / autoRefreshFrequency / properties / unit / description
        Added value: +"Schedule cadence."
      • addedInput schema / properties / description / description
        Added value: +"Optional description of the data spec."
      • addedInput schema / properties / specName / description
        Added value: +"Name for the new data spec."
    • Changedrun_data_job1 field changed
      • addedInput schema / properties / specName / description
        Added value: +"Name of the already-configured data spec to process files through."
    • Changedsetup_scheduled_pull2 fields changed
      • addedInput schema / properties / frequency / description
        Added value: +"Pull schedule."
      • addedInput schema / properties / frequency / properties / unit / description
        Added value: +"Schedule cadence."
    • Changedupdate_data_spec2 fields changed
      • addedInput schema / properties / computeSize / description
        Added value: +"Compute size for analysis/processing. Omit to keep the current setting."
      • addedInput schema / properties / description / description
        Added value: +"New description for the spec. Omit to keep the current value."
  4. 16 tool updates
    • First observedcall_dpf_api
    • First observedcreate_workspace
    • First observeddelete_data_spec
    • First observedfinish_data_job
    • First observedfinish_data_source_onboarding
    • First observedfinish_data_spec_update
    • First observedget_status
    • First observedlist_data
    • First observedlist_my_workspaces
    • First observedmanage_connection
    • First observedmanage_trigger
    • First observedonboard_data_source
    • First observedrun_data_job
    • First observedsetup_scheduled_pull
    • First observedsubmit_query
    • First observedupdate_data_spec

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Connects AI clients to the Matih data platform, enabling SQL queries, table profiling, analytics, chart creation, and file uploads through MCP tools with OAuth/PKCE authentication.
    83
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Turns Google Sheets, CSV, Excel, and Parquet files into durable, queryable data for AI agents. Lets clients securely discover datasets, inspect semantic models, run bounded analytics, and manage approved semantic overlays.
    3
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.2/5.0
Disambiguation4/5

Most tools map to distinct lifecycle phases and the descriptions explicitly separate overlapping-sounding concepts, such as list_data versus submit_query and the generic call_dpf_api from dedicated tools. The three finish_* tools are similarly worded but each is clearly tied to a specific preceding operation, so confusion should be limited.

Naming Consistency4/5

The tool names are uniformly snake_case and mostly follow a readable verb_noun pattern like delete_data_spec, create_workspace, and run_data_job. It is not a perfect 5 because broader names like manage_connection and manage_trigger, the generic call_dpf_api, and list_my_workspaces with its pronoun make the naming pattern less predictable.

Tool Count4/5

At 16 tools, the set is just slightly above the ideal range, but the tools generally earn their place by representing distinct steps or workflow boundaries. The start/finish pairs create some apparent redundancy, but that is a natural consequence of the multi-step file-upload flow.

Completeness4/5

The toolset provides solid coverage of the core data-platform lifecycle: workspaces, data specs, jobs, connections, triggers, scheduled pulls, status polling, and SQL querying. Some additional DPF capabilities are only reachable through the generic call_dpf_api rather than dedicated tools, and billing mutations are explicitly left outside the MCP surface, so coverage is strong but not absolute.

Resources