Skip to main content
Glama
kinbinghua-lgtm

agent-core-mcp

agent-core-mcp

Deterministic computation tools for AI agents. Exact diffing, hashing, JSON querying, calendar arithmetic, regex extraction under a hard execution deadline, CSV parsing, similarity scoring and unit/base conversion — as an MCP server.

Zero dependencies. No network. Read-only.


Why this exists

Language models are excellent at generating language and unreliable at exact, reproducible mechanical computation. That is not a capability gap — it is an architectural property. Asking a probabilistic system to count, diff, hash or do calendar math guarantees a certain rate of confident wrong answers.

This server moves those operations out of the model and into a deterministic engine.

The result is not a better guess. It is a different category of answer: one that is exact and reproducible.

There is a second reason, specific to the MCP ecosystem. The most-reported problems with published servers are credential exfiltration, undisclosed shell execution, dependency trees carrying known CVEs, and servers that hang the client. A server with no network, no credentials, no execution surface, and a bounding deadline on every operation cannot exhibit any of them.

Related MCP server: TinyFn MCP Server

Guarantees

Guarantee

Meaning

Zero dependencies

No node_modules. Nothing to audit, nothing to go stale, nothing to break.

No network access

Nothing here calls out. Not one request, ever.

No credentials

Reads no tokens, no API keys, no environment variables.

Read-only

No file writes, no shell execution, no state. Stateless per call.

Deterministic

Identical input produces byte-identical output.

Bounded

Every loop and result set is capped. Regex execution runs in a worker thread that is terminated on deadline, so no pattern can hang the client.

The server publishes these as a machine-readable contract resource (agent-core://contract), so a client can verify what it is installing rather than trusting this file.

Install

npx agent-core-mcp

No install step is required to run it. Requires Node.js 18 or newer.

Available from:

Configure

Claude Code

This repository ships a .mcp.json, so cloning it is enough:

git clone https://github.com/kinbinghua-lgtm/agent-core-mcp
cd agent-core-mcp
claude   # the agent-core server is discovered automatically

Or add it to any project:

{
  "mcpServers": {
    "agent-core": {
      "command": "npx",
      "args": ["-y", "agent-core-mcp"]
    }
  }
}

Claude Desktop, Cursor, VS Code, Windsurf, Continue, Zed

Same block, in that client's MCP configuration file. No API keys. No environment variables. Nothing to sign up for.

Tools

Tool

What it does

Why the model shouldn't do it itself

diff_text

Exact line diff (LCS) with line numbers and added/removed counts

Requires exact sequence alignment; refuses oversized input rather than hanging

hash

sha256 / sha512 / sha1 / md5 / HMAC, hex + base64 + UTF-8 byte length

Cannot be computed by inspection

json_validate

Validity plus the parser message and computed line/column

Pinpointing the error by eye is error-prone

json_query

Path access like a.b[0].c; separates absent from present-but-null

Conflating those two silently causes real bugs

json_pick

Resolve many paths in one call

Cheaper than N round trips

text_stats

Code points, UTF-8 bytes, lines, words, sentences, paragraphs, unique words, top words

Counting is precisely what probabilistic generation gets wrong

date_calc

Interval in days/weeks/months/years/hours/minutes/seconds/businessDays

True calendar months, not 30-day approximations

date_add

Offset a date, calendar-correct

Month-end and leap-year handling

regex_extract

All matches with indices, numbered and named groups, under a hard deadline

A catastrophic pattern is terminated instead of hanging

regex_analyze

Static ReDoS risk assessment of a pattern

Nested quantifiers, overlapping alternation, backreferences

fuzzy_match

Rank candidates by Sorensen-Dice similarity

Deterministic scoring instead of vibes

similarity

Single similarity score, 0..1

parse_table

RFC 4180 CSV/TSV with quotes, escapes, embedded newlines; delimiter auto-detection

Naive comma-splitting breaks on any real CSV

convert

Length, mass, time, data size; rejects cross-family conversions

Unit errors are silent and catastrophic

base_convert

Bases 2-36 with arbitrary precision

Values above 2^53 lose precision in naive conversion

The ReDoS deadline

regex_extract accepts an optional budgetMs (default 1000, maximum 10000). Execution happens in a worker thread that is terminated when the deadline expires.

This is not a nicety. Node's regex engine cannot be interrupted, so a pattern with catastrophic backtracking blocks the main thread indefinitely. Measured growth for (a+)+$ against 'a'.repeat(n) + '!':

n

time

20

18 ms

22

70 ms

24

276 ms

26

1108 ms

Roughly 4x per two additional characters. At n=40 it does not return. In an MCP server, which runs on the client's main thread, this freezes the user's editor. Process isolation plus termination is the only real boundary.

On expiry the response says so, and tells the caller how to fix the pattern:

{
  "timedOut": true,
  "budgetMs": 300,
  "safety": {
    "risk": "high",
    "reasons": ["nested quantifier inside a repeated group — classic exponential backtracking"]
  },
  "advice": "Pattern execution exceeded 300ms and was terminated. ... Rewrite it to remove ambiguity — typically by replacing a nested quantifier such as (a+)+ with an unambiguous form such as a+ ..."
}

Argument validation

Every call is validated against the tool's own JSON Schema before dispatch: required fields, primitive types, enum membership, numeric bounds and unknown properties. A malformed call returns a specific error instead of a confident wrong answer.

This matters because clients do not reliably honour schemas. A server that silently proceeds on a malformed call is worse than one that refuses it.

Examples

Exact diff

{ "a": "line one\nline two", "b": "line one\nline 2" }

{ "added": 1, "removed": 1, "lines": [ { "op": "equal", "aLine": 1, "bLine": 1 }, ... ] }

Big-integer conversion that stays exact

{ "value": "9007199254740993", "fromBase": 10, "toBase": 16 }

{ "result": "20000000000001", "decimal": "9007199254740993" }

Business days between two dates

{ "from": "2026-01-05", "to": "2026-01-12", "unit": "businessDays" }

{ "value": 5 }

Check a pattern before running it

{ "pattern": "(a+)+$" }

{ "risk": "high", "reasons": ["nested quantifier inside a repeated group — classic exponential backtracking"] }

Absent versus null

{ "json": "{\"a\":null}", "path": "a" }

{ "resolved": true, "found": false, "value": null, "type": "null" }

Design notes

Why stdio and not HTTP? A stdio server has no listening socket: no attack surface, no port to expose, no auth to get wrong, no data leaving the machine. For pure computation, HTTP would add risk and buy nothing.

Why no caching? Every call is stateless. Caching would introduce state, invalidation bugs and a place for data to persist. The operations are cheap enough that this is not a tradeoff.

Why refuse oversized input? An MCP server that hangs takes the client session with it. Refusing with an actionable message is strictly better than exhausting memory.

Why no dependencies at all? Every dependency is an ongoing obligation: updates, advisories, supply-chain risk, and one more reason the server might stop working. The Node standard library covers everything here.

Development

node server.cjs              # speaks MCP over stdio
node selftest.mjs            # engine verification, 35 assertions
node protocol-test.cjs       # protocol verification, 88 assertions
npm test                     # both suites

Both suites run on plain Node with no install step.

selftest.mjs checks hashing against published constants, big-integer round trips past 2^53, RFC 4180 quoting edge cases, Unicode word segmentation and calendar arithmetic. protocol-test.cjs drives the real handler through a fake transport and covers the handshake, version negotiation, every tool, argument validation, the ReDoS deadline, malformed frames, split frames, batches, concurrent request correlation and determinism.

Two bugs found by these suites, both retained as regression tests:

  • A ReDoS in the word-segmentation regex. The original textStats pattern was [\p{L}\p{N}][\p{L}\p{N}'’-]* — two adjacent, overlapping character classes. On a long letter run followed by a non-match it backtracked exponentially and hung the process. The analyzer shipped in this package did not catch it, because it statically inspects the pattern it is given and cannot see patterns written by hand in the source. The execution deadline above exists because of this.

  • Schema validation was absent. Missing required arguments were silently treated as absent values, so a caller that forgot path received missing-key instead of an error. Client-side schemas are not enforcement.

License

MIT — see LICENSE.

Available Tools

15 tools
base_convertA
Read-onlyIdempotent

Convert an integer string between bases 2 and 36 with arbitrary precision. Uses big-integer parsing, so values beyond IEEE-754 double precision (2^53) stay exact, which is exactly where naive conversion goes wrong. A leading 0b/0x/0o prefix is ignored.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesInteger as text, e.g. "ff" or "255"
toBaseYesTarget base
fromBaseYesSource base

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description still adds real behavioral context: arbitrary precision via big-integer parsing, exactness beyond 2^53 where naive conversion fails, and tolerance of leading 0b/0x/0o prefixes. These are traits an agent cannot recover from the structured fields.

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?

Three tight sentences, front-loaded with the core action and scope, then precision guarantees, then the prefix edge case. Every sentence carries information; nothing is redundant padding.

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?

With no output schema, the description should ideally specify the return representation (a string in the target base), which it leaves unstated, and it says nothing about error behavior for out-of-range digits. All three required parameters are documented and the precision caveat is covered, so it is close to complete for a simple deterministic tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond it by clarifying that 'value' may carry a 0b/0x/0o prefix that is ignored. It does not clarify the return type (string vs number) or behavior on invalid digits, so it falls short of fully complementing the schema.

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?

States a specific verb (convert), a specific resource (integer string), and an explicit scope (bases 2-36), which is far more precise than the sibling name 'convert' alone. It does not explicitly contrast itself with the sibling 'convert', so sibling differentiation is only implicit.

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 narrow purpose: use it when you need a base-to-base integer conversion. There is no explicit when-to-use/when-not guidance and no mention of how it relates to the nearby 'convert' or 'hash' siblings; an agent must infer the boundary.

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

convertA
Read-onlyIdempotent

Convert a value between units of length, mass, time or data size. Cross-family conversions are rejected rather than silently producing nonsense. Data sizes: kb/mb/gb are decimal (1000), kib/mib/gib are binary (1024). Supported units: m, km, cm, mm, mi, yd, ft, in, nmi, kg, g, mg, t, lb, oz, s, min, h, d, b, kb, mb, gb, kib, mib, gib.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget unit
fromYesSource unit
valueYesNumeric value to convert

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes further by disclosing error semantics (cross-family requests fail loudly rather than returning nonsense) and the decimal-vs-binary convention for data units. It does not mention precision or rounding, which keeps it at 4 rather than 5.

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?

Three sentences, front-loaded with purpose before the constraint, then the unit vocabulary. The long unit list is information-dense rather than padding, and every clause earns its place.

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 stateless, side-effect-free conversion with full annotation coverage, the definition gives everything needed to call it correctly. The only unmet detail is what the return value looks like (bare number vs object), which is not stated and no output schema exists to cover it.

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 schema descriptions are minimal ('Source unit', 'Target unit', 'Numeric value'), so the description carries real load by supplying the complete accepted vocabulary for from/to and disambiguating kb/mb/gb (1000) from kib/mib/gib (1024). This is meaningfully more than the 100%-covered schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (convert) plus the resource families (length, mass, time, data size) and then enumerates every supported unit, so an agent can tell at a glance that this is physical-unit conversion and not the sibling base_convert (numeric base conversion). No ambiguity about what it does.

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 purpose and the constraint that from/to must belong to the same family ('cross-family conversions are rejected'), but there is no explicit when-to-use statement and no routing guidance against the closely related base_convert sibling. Adequate but leaves the alternative-selection decision to inference.

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

date_addA
Read-onlyIdempotent

Offset an ISO-8601 date by days, weeks, months, years, hours, minutes or seconds. Negative amounts subtract. Calendar-correct across month ends and leap years.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesBase date, e.g. 2026-01-31
unitNoUnit (default days)
amountYesAmount to add; negative to subtract

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds useful behavioral detail beyond the annotations: negative amounts subtract and arithmetic is calendar-correct across month ends and leap years. It does not cover error handling or return format.

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?

Three short, front-loaded sentences with no filler. The purpose, sign convention, and calendar behavior are stated efficiently.

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 date utility with full schema coverage and safety annotations, the description is largely complete. It omits any mention of the return format, which matters slightly since no output schema exists, but the core operation is clear.

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 description coverage is 100%, so the schema already documents each parameter. The description adds semantic meaning by clarifying that negative amounts subtract and that month/year arithmetic is calendar-correct, which is not fully conveyed by the schema.

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?

States a specific verb (offset) and resource (ISO-8601 date) with the supported units. It does not differentiate from the sibling date_calc tool, so it falls short of a 5.

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

Usage Guidelines2/5

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

The description explains what the tool does but gives no explicit guidance on when to choose it over alternatives like date_calc, nor any exclusions or prerequisites. Usage is only implied by the operation itself.

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

date_calcA
Read-onlyIdempotent

Interval between two ISO-8601 dates in days, weeks, months, years, hours, minutes, seconds or businessDays (Mon-Fri). Months and years use true calendar arithmetic, not 30/365-day approximations. All math is UTC.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd date, same formats
fromYesStart date, e.g. 2026-01-15 or 2026-01-15T08:30:00Z
unitNoUnit for the result (default days)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish the safe read-only, idempotent, non-destructive profile, so the bar is lower. The description still adds real behavioral context beyond them: true calendar arithmetic rather than 30/365 approximations, and UTC-only math, both of which materially affect results.

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?

Three tight sentences, all earning their place, with the core operation front-loaded and the caveats (calendar arithmetic, UTC) following immediately. No filler or repetition of the tool name.

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?

No output schema exists, and the description is sufficient to call the tool correctly given the fully documented three-parameter schema. The one residual gap is whether the result is signed or absolute when 'to' precedes 'from', which the description never addresses.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description goes past bare restatement by defining businessDays as Mon-Fri and confirming calendar-accurate handling of the 'months' and 'years' enum values. It does not clarify sign/direction semantics for from vs to.

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 states a specific computation (interval between two ISO-8601 dates) and enumerates the units returned, so the resource and operation are unambiguous. It does not explicitly name the sibling date_add or draw the boundary against it, so an agent must infer the distinction from the semantics alone.

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 phrasing 'interval between two ISO-8601 dates', which naturally contrasts with date_add's offset semantics. However, there is no explicit statement of when to prefer this tool over date_add, nor any prerequisites or exclusions, so guidance stops at implication.

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

diff_textA
Read-onlyIdempotent

Compute an exact line-by-line diff between two texts using a longest-common-subsequence algorithm. Returns per-line operations (equal/del/ins) with line numbers plus added/removed/unchanged counts. Exact and reproducible; refuses oversized input rather than hanging.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYesThe original text
bYesThe revised text
maxLinesNoCap on returned diff lines (default 2000)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds a genuinely useful trait beyond them: it refuses oversized input rather than hanging, and describes the per-line operation output plus added/removed/unchanged counts.

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?

Three tight sentences, front-loaded with the core action and algorithm, then output shape, then the oversize failure mode. No filler.

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 no output schema, the description fully specifies return contents (per-line equal/del/ins with line numbers plus counts) and the oversize behavior, so nothing needed to invoke it correctly is missing.

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 a, b and maxLines are fully documented in the schema. The description only restates 'two texts' and the maxLines cap indirectly, adding no syntax or format detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (compute a line-by-line diff between two texts) and even names the algorithm (LCS), which implicitly distinguishes it from sibling tools like similarity and fuzzy_match that do approximate matching.

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?

No explicit when-to-use or when-not guidance, and no sibling is named. Usage is only implied: exact/reproducible diff contrasts with the fuzzy/approximate siblings, but the agent must infer this.

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

fuzzy_matchA
Read-onlyIdempotent

Score every candidate string against a query using the Sorensen-Dice coefficient over character bigrams and return the best matches in descending order. Deterministic. Useful for deduplication, record linkage, typo-tolerant lookup and confirming which of several candidates was meant.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoHow many results (default 5)
needleYesThe string to match against the list
haystackYesCandidate strings
thresholdNoMinimum score to include (default 0)

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds genuinely new behavioral facts: that the result is deterministic and that matches are returned in descending score order. It stops short of stating result payload shape or big-haystack performance characteristics.

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?

Three tight sentences, with the core operation front-loaded before the use-case list. No filler or repetition. Slightly over-compressed on the return-value side, but every sentence earns its place.

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

Completeness3/5

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

With no output schema, the description carries the burden of describing the return value, and it only says 'best matches in descending order' without stating whether results are bare strings or string/score pairs. With four parameters and no output schema, more precision about the response was warranted.

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 needle, haystack, topN and threshold are already documented in the schema; baseline is 3. The description clarifies that scoring is per-candidate against the query, but adds no format or edge-case detail (e.g. empty haystack, threshold semantics) beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation (score candidate strings against a query), the exact algorithm (Sorensen-Dice over character bigrams), and the output ordering. It is unambiguous about what the tool does. However, it makes no attempt to distinguish itself from the sibling tool 'similarity', which likely overlaps, so it falls short of a 5.

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?

It lists concrete use cases (deduplication, record linkage, typo-tolerant lookup, disambiguation), which implies when to use it. But it names no alternative and no exclusions, and conspicuously ignores the close sibling 'similarity', leaving the agent to guess which is appropriate.

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

hashA
Read-onlyIdempotent

Compute a cryptographic hash of a UTF-8 string. Returns hex and base64 digests plus the UTF-8 byte length. Supports sha256 (default), sha512, sha1, md5, and HMAC variants via hmacKey. Use for content fingerprints, deduplication and integrity checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
algoNoHash algorithm (default sha256)
textYesText to hash
hmacKeyNoIf set, compute HMAC with this key

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds genuinely new behavioral context: the return shape (hex + base64 digests plus UTF-8 byte length), the default algorithm, and the HMAC mode triggered by hmacKey.

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?

Three tight sentences: purpose first, output/options second, use cases last. No filler, and the most important 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 simple deterministic tool with no output schema, the description covers purpose, inputs, defaults and return format. An agent has everything needed to call it correctly and interpret the result.

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 documents text, algo (with enum and default) and hmacKey, and the description merely restates these. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Compute a cryptographic hash of a UTF-8 string') and enumerates the algorithm set. No sibling tool performs hashing, so the scope is unambiguous within the tool set.

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?

Gives concrete use cases ('content fingerprints, deduplication and integrity checks'), which tells the agent when this tool is appropriate. It does not name alternatives or exclusions, but no sibling overlaps with hashing, so there is little to route against.

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

json_pickA
Read-onlyIdempotent

Resolve several paths against one JSON document in a single call. Cheaper than issuing many json_query calls when you need multiple fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonYesThe JSON document as text
pathsYesPaths to resolve

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered. The description adds batch-efficiency context but says nothing about the 200-path cap, what happens on unresolvable paths, or how results are keyed to inputs. Some added value, but not rich behavioral disclosure.

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

Conciseness5/5

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

Two sentences, zero waste, and the core capability is front-loaded ahead of the comparative guidance. Nothing redundant or padded.

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

Completeness3/5

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

For a batch resolver with no output schema, the return contract matters, and the description does not explain how results map back to the input paths, their ordering, or error handling for missing paths. The core purpose and when-to-use are complete, but the output/error behavior is a real gap.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented in the schema, which sets the baseline at 3. The description conveys that paths are batch-resolved but adds no path syntax (JSONPath vs. dot notation) or ordering/alignment semantics 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?

States a specific verb and resource ('Resolve several paths against one JSON document') plus the batching scope 'in a single call.' It also names the sibling json_query, so an agent can distinguish it from the single-path query tool without opening either schema.

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?

Explicitly routes usage: use this 'when you need multiple fields' and frames it as cheaper than many json_query calls. The inverse condition (use json_query for a single field) is left implicit, and no exclusions or prerequisites are given, so it falls just short of a 5.

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

json_queryA
Read-onlyIdempotent

Extract a value from a JSON document by path, e.g. "a.b[0].c" or "$.items[3].name". Reports resolved (did the path reach a location) separately from found (is the value non-null), so absent is distinguishable from present-but-null. Failure types are specific: missing-key, out-of-range, not-an-array, not-an-object.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonYesThe JSON document as text
pathYesPath, e.g. "a.b[0].c"

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, but the description adds real behavioral value: it separates `resolved` from `found` so absent-vs-null is distinguishable, and it enumerates specific failure modes (missing-key, out-of-range, not-an-array, not-an-object). It stops short of describing the overall response shape.

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?

Three tightly packed sentences, front-loaded with the core action, then semantics, then error taxonomy. No filler and nothing repeated from the 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?

With no output schema, the description must carry return semantics, and it does explain the resolved/found distinction and error types. It omits the field name/structure that actually carries the extracted value, which for a simple 2-parameter tool is a minor but real gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by showing a second path dialect (`$.items[3].name`), implying JSONPath-style prefixes are accepted where the schema example only shows dotted notation.

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?

States a specific verb (extract) and resource (value from a JSON document by path) and gives concrete path syntax examples, so the operation is unambiguous. It does not, however, distinguish itself from the sibling json_pick, leaving the agent to guess which extraction tool fits.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives such as json_pick or json_validate, even though those siblings clearly overlap. Usage must be inferred entirely from the purpose sentence.

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

json_validateA
Read-onlyIdempotent

Check whether a string is valid JSON. On failure returns the parser message plus the computed line and column of the error. On success returns the top-level shape. Distinguishes valid-but-empty-object from invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe JSON text to validate
describeTopLevelNoInclude top-level keys or array length (default true)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description goes further by disclosing return behavior on both paths (parser message with computed line/column on failure, top-level shape on success) and the valid-empty-object edge case, which is genuine added context.

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?

Three short sentences, front-loaded with the core purpose, then failure behavior, then success behavior. No filler or restatement of the name.

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?

There is no output schema, so the description carries the burden of explaining returns — and it does, covering both success and failure outputs plus an edge case. Combined with full schema coverage and annotation safety hints, an agent has everything needed to call and interpret this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented by the schema, making 3 the baseline. The phrase 'top-level shape' in the description loosely corresponds to describeTopLevel but adds no format, default, or constraint detail beyond the schema.

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?

States a specific verb+resource: 'Check whether a string is valid JSON', which is unambiguous about what the tool does. However, it does not differentiate itself from siblings like json_query or json_pick, which an agent might plausibly confuse with validation work.

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

Usage Guidelines3/5

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

The description implies the use case (validation before parsing) but never states when to pick this over json_query or json_pick, nor any prerequisites or exclusions. Usage is inferable but not guided.

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

parse_tableA
Read-onlyIdempotent

Parse delimited text into a header plus rows, handling quoted fields, escaped quotes, embedded delimiters and embedded newlines (RFC 4180 style). If no delimiter is given, the most frequent candidate on the first line is chosen and reported back. Use instead of splitting on commas, which breaks on any real CSV.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesDelimited text
maxRowsNoRow cap (default 5000)
delimiterNoSingle-character delimiter; auto-detected if omitted
hasHeaderNoTreat the first row as a header (default true)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: auto-detection behavior ('most frequent candidate on the first line is chosen and reported back') and the RFC 4180 conformance guarantee. It doesn't mention behavior at row-cap truncation, which would be the last missing piece.

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?

Three sentences, each earning its place: capability, auto-detection behavior, and the routing contrast. The most important distinguishing information (RFC 4180 and the anti-pattern warning) is front-loaded. No filler.

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 read-only, idempotent parse tool with no output schema, the description covers purpose, edge cases, auto-detection, and routing. The only gap is that it doesn't describe the shape of the returned header/rows structure, which matters somewhat since there's no output schema. Still, the RFC 4180 reference implies a standard table structure an agent can reason about.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented with defaults and ranges. The description reinforces auto-detection semantics for the delimiter parameter, which is genuinely useful added meaning, but does not add syntax or format detail for text, maxRows, or hasHeader. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Parse) and resource (delimited text into header plus rows), and goes further by enumerating the exact edge cases handled (quoted fields, escaped quotes, embedded delimiters, embedded newlines, RFC 4180). This distinguishes it clearly from siblings like regex_extract or convert, which are the nearest overlap candidates.

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

Usage Guidelines5/5

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

Explicitly says when to use it versus the naive alternative: 'Use instead of splitting on commas, which breaks on any real CSV.' This names the anti-pattern and the reason, giving the agent a clear routing rule without needing to guess.

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

regex_analyzeA
Read-onlyIdempotent

Statically analyse a regular expression for catastrophic backtracking (ReDoS): nested quantifiers, overlapping alternation inside repeated groups, backreferences under quantifiers, excessive wildcards. Returns a risk level and the specific reasons. The pattern is not executed.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesRegular expression source to analyse

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower. The description still adds real value beyond them: it enumerates the specific hazards detected (nested quantifiers, overlapping alternation, backreferences under quantifiers, excessive wildcards) and explicitly states the pattern is not executed, which matters for safety-sensitive callers.

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?

Three tight sentences, front-loaded with the purpose, then the detection scope, then the return shape. Every sentence earns its place with no filler.

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?

With no output schema, the description correctly compensates by describing the return ('a risk level and the specific reasons'). It could go slightly further by naming the risk-level values or flagging that only heuristic static analysis is performed, but an agent has enough to call and interpret it.

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?

There is a single parameter and the schema already documents it fully (100% coverage: 'Regular expression source to analyse'). The description adds no syntax or format guidance beyond that, so baseline 3 applies.

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 names a specific verb and resource ('statically analyse a regular expression') and states the exact problem domain (catastrophic backtracking / ReDoS). It is easily distinguished from the sibling regex_extract, which extracts rather than analyses.

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 nature of the tool — you use it to vet a pattern for ReDoS risk — and 'The pattern is not executed' hints it is a safe pre-flight check. However, it never states when to prefer this over alternatives or when analysis is unnecessary, so guidance remains implicit.

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

regex_extractA
Read-onlyIdempotent

Apply a regular expression and return every match with its index, numbered capture groups and named groups. Iteration and match counts are hard-capped so a pathological pattern cannot hang the host. The response includes a ReDoS risk assessment of the pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to search
flagsNoFlags from g i m s u y (g is always applied)
patternYesRegular expression source, without slashes
budgetMsNoExecution deadline in milliseconds (default 1000, max 10000). Execution runs in a worker thread that is terminated on expiry.
maxMatchesNoCap on returned matches (default 500)

TDQS

A3.5/5.0
Behavior4/5

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

With readOnlyHint, idempotentHint and destructiveHint=false already declared, the safety profile is covered. The description goes further by disclosing operational behavior the annotations cannot: iteration and match counts are hard-capped, a worker thread is terminated on budget expiry against pathological patterns, and a ReDoS risk assessment is returned. These are real behavioral traits 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?

Three sentences, no filler, and the primary capability is front-loaded before the safety and response details. Tight and well-ordered, though the middle sentence about caps could be folded into the parameter documentation.

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?

There is no output schema, so the description carries the return-value burden and does so by naming the match index, capture groups and named groups. It also covers failure-mode behavior with the cap and deadline narrative. The only real gap is the absent routing versus regex_analyze.

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 all five parameters (text, pattern, flags, budgetMs, maxMatches) are already documented in the schema, including defaults and the worker-termination semantics for budgetMs. The description adds only a general note about match capping, which the schema already states for maxMatches, so it earns the baseline rather than more.

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 states a specific verb and resource (apply a regex, return every match) and even enumerates the return shape: match index, numbered capture groups, named groups. This is far more than a restatement of the name. It does not, however, distinguish itself from the sibling regex_analyze, which is the closest competing tool.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of the sibling regex_analyze, which appears to be the nearest alternative for regex work. An agent must infer from context alone whether it should extract matches or analyze the pattern.

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

similarityA
Read-onlyIdempotent

Sorensen-Dice similarity of two strings, from 0 (no shared character bigrams) to 1 (identical). One deterministic comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds meaningful value beyond them: the 0-1 output scale and its interpretation (0 = no shared character bigrams, 1 = identical) tell the agent how to read the result, which the annotations do not. Determinism partly restates idempotentHint.

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 tight sentences, front-loaded with the algorithm and resource and followed by the range interpretation. Every clause carries information; 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 two-argument pure function with no output schema, the description is nearly sufficient because it defines the return semantics. Minor gaps remain: no note on case sensitivity, unicode/bigram normalization, or empty-string edge cases.

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 0% and the parameters are bare 'a' and 'b', but the description compensates partially by stating both inputs are strings ('two strings'). It does not state which argument is the reference vs. the candidate, whether order matters, or empty-string behavior, so it only partly fills the gap.

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 names the exact algorithm (Sorensen-Dice), the resource (two strings), and the output scale, so an agent knows precisely what computation it performs. It does not explicitly distinguish itself from the nearest siblings fuzzy_match or diff_text, which is the only thing keeping it from a 5.

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 rather than stated: 'of two strings' and 'one deterministic comparison' suggest a single pairwise similarity check, but there is no explicit guidance on when to pick this over fuzzy_match or diff_text, nor any exclusions or preconditions. Adequate but leaves the sibling-routing decision to inference.

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

text_statsA
Read-onlyIdempotent

Exact text statistics: Unicode code points, UTF-8 bytes, lines, non-empty lines, words, sentences, paragraphs, unique words, average word length and most frequent words. Word segmentation is Unicode-aware so non-Latin scripts are counted correctly. Use whenever a count must be exact.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to measure
topNNoHow many top words to return (default 10)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds meaningful context beyond that: Unicode-aware word segmentation and the exactness guarantee, which are important behavioral traits for a counting tool.

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

Conciseness5/5

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

Two sentences, front-loaded with the full metric list and then the key behavioral guarantee and usage cue. Every phrase carries useful information with no redundancy.

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 annotations covering safety and schema covering inputs, the description's enumeration of computed metrics compensates for the absence of an output schema. It is complete enough for an agent to select and invoke the tool 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 both parameters are already documented. The description does not add any parameter-specific detail beyond what the schema provides, such as the meaning of topN or its default. 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 states the specific operation (exact text statistics) and enumerates the exact metrics returned, which clearly distinguishes it from siblings like diff_text, hash, or regex tools. An agent can immediately understand what the tool computes.

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?

It gives a clear usage condition: 'Use whenever a count must be exact.' This tells the agent when the tool is appropriate, though it does not name alternatives or explicitly state when not to use it.

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.

  1. 15 tool updatesv0.1.1
    • First observedbase_convert
    • First observedconvert
    • First observeddate_add
    • First observeddate_calc
    • First observeddiff_text
    • First observedfuzzy_match
    • First observedhash
    • First observedjson_pick
    • First observedjson_query
    • First observedjson_validate
    • First observedparse_table
    • First observedregex_analyze
    • First observedregex_extract
    • First observedsimilarity
    • First observedtext_stats

TDQS

A4/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct operation, and the few potential pairs are explicitly differentiated in the descriptions: json_query (single path) vs json_pick (multiple paths), date_calc (interval) vs date_add (offset), regex_extract (apply) vs regex_analyze (static ReDoS analysis), and fuzzy_match (many candidates) vs similarity (one comparison). An agent can reliably pick the right tool for each intent.

Naming Consistency4/5

All names use consistent snake_case, mostly following a noun_verb or verb_noun pattern (json_validate, date_add, regex_extract, parse_table, base_convert). A few single-word nouns (hash, similarity, convert) break the strict action-oriented pattern slightly, but the set is uniformly readable.

Tool Count5/5

Fifteen tools sit comfortably in the well-scoped range, and each one covers a genuinely distinct capability (hashing, diffing, JSON, dates, regex, similarity, delimited parsing, unit and base conversion). No tool feels redundant or filler.

Completeness4/5

As a general text/data utility toolkit it covers its sub-domains well: JSON validate/query/pick, date arithmetic both directions, regex matching plus safety analysis, similarity, parsing and conversions. Minor gaps remain within sub-domains (e.g. no JSON formatting/minify or general string encoding/decoding), but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a set of micro-tools (time calculation, regex, encoding, JSON diff, etc.) for LLM agents to handle deterministic, precision tasks that models often get wrong.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides over 500 deterministic tools for math, conversions, validation, hashing, and more, enabling AI agents to perform accurate calculations and data transformations without hallucination.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides deterministic, verifiable text/code/measurement utilities for AI agents, enabling tasks like unit conversion, citation formatting, diffing, proofreading, readability scoring, and syntax checking with re-executable proof.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Portable agent tools with typed schemas (diff, cron, units, JSON→TS, outdoor helpers, prompts). Free to try—no account required.
    30
    MIT