Skip to main content
Glama

data_transform

Read-onlyIdempotent

Five deterministic data utilities behind one tool, chosen by operation. csv_normalize: sniffs the delimiter, strips the BOM and normalises line endings, snake_cases headers (duplicates renamed), pads or trims ragged rows, drops empty rows and optionally duplicate rows, and returns CSV or JSON rows (max 200,000 cells, 1,000 columns, 64 KB per cell). json_shape: infers a JSON Schema (draft 2020-12) from 1-1,000 samples, with required, enum and format only where every sample supports them (max depth 32, 200,000 nodes). json_extract: evaluates up to 50 paths from a safe JSONPath subset ($, .key, ['key'], [n], [-n], [], ., ..key); filters, scripts, slices and unions are rejected, and each path returns at most 10,000 matches. unit_convert: exact rational conversion within one dimension (length, mass, volume, temperature, time, data, speed, area, pressure, energy), rounded to 12 significant digits, single or up to 1,000 per batch. text_dedupe: exact, normalized (NFKC, casefold, whitespace and edge punctuation) or near-duplicate (3-word-shingle Jaccard) removal over up to 50,000 strings, 2 MB total (near mode 5,000). 2 MB request body. Caller content is never executed or evaluated and nothing is fetched. Deterministic, no LLM.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "operation": "<operation>"
    },
    "name": "data_transform"
  }
}

Input Schema

NameRequiredDescriptionDefault
toNounit_convert (single): target unit, same dimension as from.
csvNocsv_normalize: the CSV text. Required for that operation.
fromNounit_convert (single): source unit, case-insensitive, canonical or alias. Canonical units: mm cm m km in ft yd mi nmi | mg g kg t oz lb st | ml l m3 tsp tbsp floz cup pt qt gal uk_gal uk_pt | C F K | ms s min h d wk | bit B KB MB GB TB KiB MiB GiB TiB | m/s km/h mph kn | m2 km2 ha acre ft2 in2 | Pa kPa bar psi atm | J kJ cal kcal Wh kWh. Aliases include full names, e.g. "kilometres", "fahrenheit", "pounds".
jsonNojson_shape: a single sample (an array here is ONE sample, not a list of samples). json_extract: the document to query (required).
keepNotext_dedupe: which occurrence of a duplicate group survives.first
modeNotext_dedupe: exact string match, normalized match (NFKC + casefold + collapsed whitespace + edge punctuation stripped), or near-duplicate by shingle similarity.exact
trimNocsv_normalize: strip whitespace around every cell.
itemsNounit_convert (batch): up to 1,000 objects {value, from, to}; send items or value/from/to, not both. text_dedupe: up to 50,000 strings, 2 MB total (5,000 in near mode); required for that operation.
pathsNojson_extract: 1-50 JSONPath expressions, e.g. "$.orders[*].id" or "$..email". Filters ?(...), scripts, slices [a:b] and unions [a,b] are rejected with a 400.
valueNounit_convert (single): the number, or a decimal string up to 100 chars for exact input, e.g. "1.005". Exponents beyond +/-1000 are rejected.
headerNocsv_normalize: the first non-empty row is a header. When false, columns are named column_1, column_2, ...
outputNocsv_normalize: return result.csv (comma-delimited text) or result.rows (one object per row).csv
samplesNojson_shape: 1-1,000 sample documents. Send samples or json, not both.
delimiterNocsv_normalize: "auto" sniffs the first 64 KB; falls back to comma.auto
operationYesWhich utility to run. Each reads only its own fields below.
thresholdNotext_dedupe near mode: minimum Jaccard similarity of 3-word shingles to count as a duplicate. Validated in every mode.
dedupe_rowsNocsv_normalize: drop rows identical to an earlier row.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, it discloses that caller content is never executed or evaluated, nothing is fetched, and no LLM is involved — directly relevant security behavior. It also quantifies caps per operation (200,000 cells, depth 32, 10,000 matches per path, 5,000 strings in near mode), which an agent needs to avoid failing calls.

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

Conciseness4/5

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

Front-loaded with the operation-dispatch model and zero filler; every clause carries a constraint or behavior. It is a single dense block of ~180 words, so a bulleted per-operation layout would scan better, but nothing is redundant.

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 17-parameter, five-mode tool with no output schema, it covers inputs, limits, rejection behavior, and the broad return shape (CSV or JSON rows, 10,000 matches per path). What it omits is exact response envelopes per operation, which only matters marginally given the schema's own field descriptions.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, and the description goes further by explaining the safe JSONPath subset and what is rejected, what 'normalized' and 'near-duplicate' mean concretely (NFKC, casefold, 3-word-shingle Jaccard), and the unit dimensions supported. It largely restates limits that also appear in the schema, hence not a 5.

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?

Names a specific resource (five deterministic data utilities) and enumerates each operation with its exact transformation, so an agent knows precisely what the tool does. Nothing in the sibling list overlaps, so differentiation is implicit but unambiguous.

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 conveyed only indirectly through the per-operation descriptions and their hard limits (e.g. 50,000 strings, 2 MB body), which imply when a request will be rejected. There is no explicit when-to-use / when-not-to-use framing and no named alternative for adjacent tasks such as text normalization versus humanize_text.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.