DAP Foundry
Server Details
Tools that refuse rather than guess: settlement day counts, Unix timestamps, base64, line diffs.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool targets a clearly separate operation: settlement day-count computation, Unix timestamp conversion, base64 decoding, and line-list diffing. There is no overlapping purpose or ambiguous selection cue between them.
All tool names use kebab-case with a verb-first pattern: compute-, convert-, decode-, and diff-. The convention is consistent throughout, with only natural differences in phrase length.
Four tools is compact and well-scoped for a focused deterministic utility server. Each tool earns its place by covering a distinct endpoint, and none is redundant.
The set covers four standalone operations, but obvious companion operations are missing, such as date-to-Unix conversion or text-to-base64 encoding. Agents needing common inverse or adjacent utilities would hit a gap in the surface.
Available Tools
4 toolscompute-day-count-to-settlementCompute day count to settlementARead-onlyIdempotentInspect
Settlement date on the Payments Canada holiday calendar, and the accrual fraction under ACT/360, ACT/365F, 30/360, 30E/360 or ACT/ACT-ISDA. Send all seven inputs, including acknowledge no-ruling-v1 and a freshness_tolerance in whole days written PD. It refuses rather than guesses: a missing acknowledgement or tolerance, a tolerance over the ratified ceiling, calendar data older than your tolerance, a trade date outside the calendar's coverage or not a business day, and any missing, unknown or malformed input. Costs $0.01 in USDC on Base per computed answer, under x402; a refusal is not charged. The answer is the JSON envelope of https://foundry.dap.solutions/api/compute-day-count-to-settlement, byte for byte, with the artifact hash that answered. Full rules: https://foundry.dap.solutions/hub.md
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | Yes | ||
| convention | Yes | ||
| trade_date | Yes | a business day on the calendar | |
| acknowledge | Yes | ||
| accrual_start | Yes | a real calendar date, the first day of the accrual period, counted | |
| settlement_lag | Yes | ||
| freshness_tolerance | Yes | at most the ratified ceiling |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), and the description adds material context they cannot carry: a $0.01 USDC x402 charge per answer with refusals uncharged, a fail-closed refusal policy enumerating six distinct failure modes, and a byte-for-byte deterministic response bound to an artifact hash. That is exactly the economics and error semantics an agent needs before spending money.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: purpose, required inputs, refusal conditions, cost, then output contract and docs link. A little repetition ('no-ruling-v1' and the tolerance are restated in the refusal list) costs it the top band, but almost every clause carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the return contract and does so explicitly: the JSON envelope of the named endpoint byte for byte, including the artifact hash. Combined with cost, refusal behavior and a rules URL, an agent has everything needed to call this correctly or predict why it will refuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 43%, and the description compensates by pinning the acknowledge sentinel value ('no-ruling-v1') and the freshness_tolerance grammar ('P<n>D' whole days, ceiling-bounded), plus stating that trade_date must be an in-coverage business day. It says less about settlement_lag and accrual_start, which the schema already patterns, so it stops short of full coverage but clearly outpaces the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the precise computational product — a settlement date on the Payments Canada holiday calendar plus an accrual fraction under five named conventions — which no sibling tool touches. The verb is elided in the opening fragment, but the resource, scope and domain are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Send all seven inputs, including acknowledge no-ruling-v1 and a freshness_tolerance..." gives an explicit calling prerequisite, and the refusal list effectively states the preconditions that must hold. There is no comparison against alternative tools, but the siblings (base64, timestamps, list diff) are unrelated, so no routing ambiguity exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert-unix-timestamp-to-dateConvert Unix timestamp to dateARead-onlyIdempotentInspect
Unix timestamps to UTC dates in ISO 8601. text holds one or more timestamps, one per line: whole seconds or milliseconds, where a magnitude of 100000000000 or more is milliseconds. The answer is a CSV of input, unit and date. It refuses empty text, more than 1,048,576 bytes or 10,000 lines, and any line that is not digits with an optional leading minus inside the years 0001 to 9999. Free. The answer is the JSON envelope of https://foundry.dap.solutions/api/convert-unix-timestamp-to-date, byte for byte, with the artifact hash that answered. Full rules: https://foundry.dap.solutions/hub.md
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | One or more Unix timestamps, one per line: whole seconds or milliseconds, digits with an optional leading minus, inside the years 0001 to 9999. At most 1,048,576 bytes of UTF-8 and 10,000 lines; a line break at the very end is not a line. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description still adds substantial detail beyond them: hard input limits, exact refusal conditions, unit-inference threshold, and the response shape (CSV of input, unit, date plus artifact hash). Nothing about cost or failure modes is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core mapping and constraints, and dense with useful facts. It is slightly repetitive, though: 'The answer is…' appears twice, once for the CSV and once for the JSON envelope, and the full endpoint URL is restated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A single-parameter tool with no output schema would otherwise leave the return value undefined; the description specifies the CSV columns and the JSON envelope plus artifact hash. Input limits, unit rules and failure behavior are all covered, so an agent can call it correctly without the linked documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns above baseline by supplying the concrete millisecond threshold (magnitude ≥ 100000000000) that the schema only gestures at with 'whole seconds or milliseconds'. It does not go further into parsing edge cases such as whitespace handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource+output form: 'Unix timestamps to UTC dates in ISO 8601.' The tool's domain is unmistakable and does not overlap with the arithmetic/encoding/list siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operating context — free, one timestamp per line, seconds or milliseconds — and names the conditions under which it refuses input (empty text, >1,048,576 bytes, >10,000 lines, malformed lines). No alternatives are needed given the dissimilar siblings, but there is no explicit statement of when to prefer this over manual conversion or a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode-base64-to-textDecode base64 to textARead-onlyIdempotentInspect
Base64 to UTF-8 text. text holds standard base64: A to Z, a to z, 0 to 9, + and /, padding optional; white space is ignored. It refuses empty text, more than 1,048,576 bytes, the URL-safe alphabet, a length or padding that cannot be base64, and bytes that are not valid UTF-8. Free. The answer is the JSON envelope of https://foundry.dap.solutions/api/decode-base64-to-text, byte for byte, with the artifact hash that answered. Full rules: https://foundry.dap.solutions/hub.md
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Base64 that decodes to UTF-8 text: the letters A to Z and a to z, the digits 0 to 9, + and /, then one or two = of padding at the end, which may be left out but, when given, must make the length a multiple of four. A length that leaves one character over a multiple of four is refused. White space anywhere is ignored and not counted in the length. At most 1,048,576 bytes of UTF-8, white space included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe/idempotent read profile, and the description goes well beyond them: the exact size ceiling, the permitted alphabet, the refusal conditions, cost ('Free'), and the return shape (the endpoint's JSON envelope with an artifact hash). That is unusually rich disclosure for a stateless converter with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the transformation first, then constraints, then return shape and pointer — a sensible ordering. It is dense but the only real overhead is the repeated full URL, which could be shortened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, side-effect-free tool with no output schema, the description supplies the input grammar, the failure modes, the byte ceiling, and the structure of the returned envelope. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; the description earns an extra point by adding refusal semantics not spelled out in the schema, notably that the URL-safe alphabet (- and _) is rejected. It does partly restate the schema's whitespace and padding rules, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Base64 to UTF-8 text'), and the body constrains exactly what 'text' means. It is unmistakable against siblings like compute-day-count-to-settlement or diff-two-line-lists, none of which involve encoding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states acceptable input and enumerates the refusal cases (empty input, >1,048,576 bytes, URL-safe alphabet, impossible length/padding, invalid UTF-8), which tells an agent when this call will fail. It stops short of naming alternatives, though no sibling overlaps in purpose, so there is little ambiguity to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff-two-line-listsDiff two line listsARead-onlyIdempotentInspect
Compare two lists of lines. text holds a line ---A---, then list A, then a line ---B---, then list B. The answer is a CSV of each distinct line, matched exactly as sent, marked only_a, only_b or both. It refuses empty text, more than 1,048,576 bytes or 50,000 lines, and a text without the two markers in that order. Free. The answer is the JSON envelope of https://foundry.dap.solutions/api/diff-two-line-lists, byte for byte, with the artifact hash that answered. Full rules: https://foundry.dap.solutions/hub.md
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Two lists of lines: a line ---A---, then list A, then a line ---B---, then list B, one item per line. At most 1,048,576 bytes of UTF-8 and 50,000 lines; a line break at the very end is not a line. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond by disclosing hard refusals (empty text, >1,048,576 bytes, >50,000 lines, markers out of order), the exact output shape (CSV marked only_a/only_b/both with exact matching), and that responses mirror the backing API byte-for-byte with an artifact hash. That is substantial behavioral context an agent could not derive from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in one sentence, then input format, output, and limits in a logical order with no filler despite being dense. Minor cost: the closing sentence about the JSON envelope and artifact hash is terse and slightly opaque, and the 'Free.' fragment is abrupt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 carries the burden by describing the CSV result and its only_a/only_b/both markers. Limits and failure modes are enumerated, so an agent knows exactly what makes a call fail. The only soft spot is the vague 'JSON envelope ... byte for byte' reference, which leaves the exact response shape slightly unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'text' parameter is already fully documented, including byte/line limits. The description mostly restates that format, adding only 'matched exactly as sent', which clarifies comparison semantics but is a marginal gain. This is the baseline case where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compare two lists of lines') and immediately explains the exact input shape and output form. An agent can predict what the tool does and what it returns without opening the schema, and the operation is unmistakably distinct from the timestamp/base64 siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining the required input format ('---A---' then list A, '---B---' then list B), which is effectively a precondition for calling it. However, it never states when to reach for this tool versus alternatives, and there are no sibling comparisons. It also notes the service is 'Free', a cost signal useful for selection, but broader when/when-not guidance is absent.
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.
4 tool updates
- First observed
compute-day-count-to-settlement - First observed
convert-unix-timestamp-to-date - First observed
decode-base64-to-text - First observed
diff-two-line-lists
Related MCP Connectors
Free deterministic tools for math, data transforms, dates, text, statistics, finance, and units.
QR codes, JSON diff/format, hashes, JWT, cron, timestamps, placeholders, flowcharts, forms, regex.
22 developer utilities: base64, hashes, JWT, JSON tools, unit conversion. Free, keyless.
42 free deterministic utilities: JSON, CSV, YAML, encoding, hashing, JWT, cron, formatters, CSS.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenance21 tools for things AI is bad at — deterministic math, cryptographic randomness, date arithmetic, hashing, encoding, unit conversion, and more.323 npm9MIT
- AlicenseAqualityBmaintenanceEnables users to compute everyday developer and text utilities—including JSON formatting, QR codes, unit and timestamp conversion, hashing, Base64, regex testing, password/UUID generation, and word counting—through read-only tools without AI calls or external lookups.10498 npmMIT
- AlicenseAqualityBmaintenanceEnables AI agents to perform exact, reproducible mechanical computation — text diffing, hashing, JSON querying, calendar arithmetic, deadline-bounded regex extraction, CSV parsing, similarity scoring, unit and base conversion — instead of relying on probabilistic guessing. Runs dependency-free, read-only and offline over stdio, with schema validation and hard caps on every operation so no call can hang the client.1541 npmMIT
- AlicenseNot gradedqualityCmaintenanceA zero-dependency MCP server exposing 15 timestamp tools that LLMs compute unreliably, including cron edge cases, the Excel 1900 leap-year bug, ISO-8601 duration arithmetic, multi-dialect SQL timestamp generation, business-day counting, and batch conversion, with both stdio and HTTP transports.149 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.