FluentEDI
Deterministic tools for AI agents. No key, no signup, no SDK.
A public HTTP API of deterministic tools for the work a language model cannot do reliably by reasoning: knowing the current time in any timezone and whether an instant falls inside a window, exact arithmetic, hashing and signature verification, canonicalizing and content-addressing JSON, repairing malformed JSON and pinpointing where it broke, querying and diffing structured data, parsing CSV correctly, converting units, colours and currencies at live ECB rates, testing regular expressions, resolving DNS, looking up WHOIS/RDAP registration for any domain or IP, validating email addresses down to their MX records, checking whether a URL is still live, and extracting the text of PDF, Word, Excel and OpenDocument files as markdown. Every tool is one stateless GET or POST returning JSON, and the same tools are exposed over the Model Context Protocol at /mcp. Coverage runs deepest in retail EDI — X12 850, 856, 810, 855 and 997 parsing and validation, and GS1 check digits — which no other free, unauthenticated service offers agents.
Calling a tool
GET http://fluentedi.com/v1/time/now?timezone=Asia/Tokyo
POST http://fluentedi.com/v1/time/now {"timezone":"Asia/Tokyo"}
No API key. No signup. No SDK. Responses are JSON: {"ok":true,"tool":"…","result":{…}}. Failed calls return the parameter schema and working examples, so the next call succeeds.
Worked solutions
Specific failures, each with a real failing input and the exact diagnostic returned for it.
- EDI 997 specification: every segment and code, with a live decoder
- EDI 856 specification: segment structure, the HL hierarchy, and a worked ASN
- EDI 850 specification: purchase order segments and a worked example
- Why an 856 ASN is rejected for HL hierarchy errors
- Computing and validating an SSCC-18 check digit
- SE01 segment count does not match: what the receiver is counting
- Reading a 997: what AK5, AK3 and AK4 codes actually mean
- The ISA header is fixed-width: 106 characters, no exceptions
- Repairing malformed JSON from a language model
- Why agents miss deadlines: timezone and window arithmetic
- Stopping credentials leaking when an agent shares logs
Machine-readable descriptors
- llms.txt — the agent-facing summary
- llms-full.txt — every tool, parameter and example
- openapi.json — OpenAPI 3.1
- /v1/tools — the tool registry as JSON
http://fluentedi.com/mcp— Model Context Protocol, streamable HTTP
Tools
Time, dates and windows
time.now— Current date and time in any IANA timezone.time.convert— Convert a timestamp between timezones.time.add— Add or subtract a duration from a date, calendar-aware.time.diff— Duration between two dates, in every unit.time.window— Test whether an instant falls inside a time window, and by how much it misses.time.zones— List or search IANA timezone identifiers with current offsets.
Scheduling
cron.next— Validate a cron expression, explain it in English, and list its next run times.
JSON and tabular data
json.query— Extract values from a JSON document with a JSONPath expression.json.repair— Repair malformed JSON and pinpoint the exact line and column when it cannot be repaired.json.canonical— Canonicalize JSON (RFC 8785) and content-address it with SHA-256 and a CIDv1.json.diff— Structural difference between two JSON documents, as RFC 6902-style operations.json.schema— Infer a JSON Schema from an example document.api.diff— Diff an API's declared contract against payloads it actually returned; classify the drift.csv.convert— Convert between CSV and JSON with correct quote handling.
Documents (PDF, Word, Excel)
doc.extract— Extract the text of a PDF, Word, Excel or other document as markdown or plain text.
Text
text.stats— Count characters, words, bytes, sentences and estimated tokens; score readability.text.case— Convert a string to camelCase, snake_case, kebab-case, Title Case, a URL slug and more.text.diff— Unified diff between two texts, with change statistics and a similarity score.text.offset— Convert between text positions: byte offset, UTF-16 index, code point, grapheme, and line/column.text.unicode— Find invisible characters, bidi overrides and script confusables hiding in text.shell.quote— Quote a value safely for a shell, and report what would have gone wrong unquoted.regex.test— Test a regular expression against text and inspect every match and capture group.
Hashing, signatures, encoding and identifiers
hash— Hash or HMAC-sign text with MD5, SHA-1, SHA-256/384/512 or CRC32.crypto.verify— Verify an Ed25519, ECDSA, RSA or HMAC signature against a message and public key.jwt.decode— Decode a JWT and check its expiry, optionally verifying an HMAC signature.encode— Convert text between base64, base64url, hex, URL and HTML encodings.id.generate— Generate UUIDv4, UUIDv7, ULID, nanoid or short random IDs.
Calculation and conversion
math.eval— Evaluate a mathematical expression exactly.unit.convert— Convert between units of length, mass, temperature, data, time, speed, area, volume, pressure, energy and angle.color.convert— Convert a colour between hex, RGB, HSL and OKLCh, and check WCAG contrast.money.convert— Convert between 30 currencies at current or historical European Central Bank reference rates.
Web and network
url.parse— Parse, normalise or resolve a URL and break out its query parameters.url.scan— Detect credentials, tokens and personal data leaking in a URL, and return a redacted version.secret.scan— Find credentials and personal data in text, and return a redacted copy safe to share.http.check— Check whether a URL is still live: status, redirect chain, and whether a citation still says what it said.http.assert— Verify a URL actually returns what you expected — status, headers, JSON values — and return a pass/fail proof.dns.lookup— Resolve DNS records (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA and more).net.inspect— Report the caller's IP, geolocation, network and TLS details as seen from the edge.domain.lookup— WHOIS for a domain or IP: registration and expiry dates, registrar, nameservers, status — or the network that owns an address.email.validate— Validate an email address: syntax, whether the domain can receive mail (MX), disposable and role-account detection, typo suggestions.
EDI and retail supply chain (X12)
edi.parse— Parse an X12 EDI document (850, 856, 810, 855, 997 and others) into structured JSON.edi.validate— Check an X12 document's envelope integrity and 856 HL hierarchy for the errors that cause rejections.edi.build— Generate a valid X12 856 ASN or 850 purchase order from JSON, with correct HL pointers and envelope counts.edi.acknowledge— Read a 997 or 999 acknowledgment and say which documents were accepted, which were rejected, and why.gs1.checkdigit— Calculate or validate a GS1 mod-10 check digit for SSCC-18, GTIN-14/13/12/8 and UPC.id.validate— Validate an identifier's checksum: IBAN, card, ISBN, ISSN, ISIN, CUSIP, LEI, routing number, IMEI, ORCID, GTIN, VIN, GSTIN and more.
Finding your way around
tool.search— Find the right tool for a task by describing it in plain language.tool.describe— Get the full parameter schema and worked examples for one tool.tool.call— Invoke any tool by name, including ones not in the default listing.