Diff gatekeeper, pre-merge review, unicode safety, SMT prover, dependency advisor.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
AI-BOM License Chain Resolver for Hugging Face Models — Walks the Hugging Face lineage of up to 10 models (base_model chain, training datasets; at most 30 nodes, 4 generations) and applies a curated, hash-pinned table of license clauses (Apache-2.0, MIT, CC-BY, CC-BY-NC, CC-BY-SA, OpenRAIL variants, Llama 2 / 3 / 3.1 / 3.2 / 3.3, Gemma, Mistral Research License) to each intended use: commercial or not, API, weights or on-prem, fine-tuning, monthly acti
Intended uses to decide, each evaluated independently.
Hugging Face model repo ids (owner/name) used together in the system.
Extra Hugging Face dataset repo ids; datasets named on the model cards are followed automatically.
advisory (default): a dataset license restriction yields UNDETERMINED because it is unsettled whether it binds trained weights. binding: treat it as binding and report CONFLICT.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http writerslogic-developer https://agents.writerslogic.com/mcp/developer
AI-BOM License Chain Resolver for Hugging Face Models — Walks the Hugging Face lineage of up to 10 models (base_model chain, training datasets; at most 30 nodes, 4 generations) and applies a curated, hash-pinned table of license clauses (Apache-2.0, MIT, CC-BY, CC-BY-NC, CC-BY-SA, OpenRAIL variants, Llama 2 / 3 / 3.1 / 3.2 / 3.3, Gemma, Mistral Research License) to each intended use: commercial or not, API, weights or on-prem, fine-tuning, monthly acti
| Argument | Type | Description |
|---|---|---|
| uses* | array | Intended uses to decide, each evaluated independently. |
| models* | array | Hugging Face model repo ids (owner/name) used together in the system. |
| datasets | array | Extra Hugging Face dataset repo ids; datasets named on the model cards are followed automatically. |
| dataset_terms | string | advisory (default): a dataset license restriction yields UNDETERMINED because it is unsettled whether it binds trained weights. binding: treat it as binding and report CONFLICT. |
{
"type": "object",
"required": [
"models",
"uses"
],
"properties": {
"uses": {
"type": "array",
"items": {
"type": "object",
"required": [
"commercial",
"distribution"
],
"properties": {
"id": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "Label echoed in the result; defaults to use-1, use-2, ..."
},
"fine_tune": {
"type": "boolean",
"description": "You will fine-tune, merge, quantize or otherwise modify the models. Default false."
},
"commercial": {
"type": "boolean",
"description": "Any commercial activity, revenue, or business operations connected to the use."
},
"distribution": {
"enum": [
"api",
"weights",
"on_prem"
],
"type": "string",
"description": "api: hosted service, weights stay with you. weights: you redistribute model weights. on_prem: internal use only."
},
"jurisdiction": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166-1 alpha-2 country of the licensee's domicile or principal place of business, e.g. DE. Required for regional clauses."
},
"fields_of_use": {
"type": "array",
"items": {
"enum": [
"medical_advice",
"law_enforcement_justice",
"military",
"automated_legal_decisions"
],
"type": "string"
},
"maxItems": 4,
"description": "Sensitive fields the use touches; checked against field-of-use clauses."
},
"trains_other_models": {
"type": "boolean",
"description": "Outputs of these models will train or improve a different model that is not a derivative of the same family (distillation). Default false."
},
"monthly_active_users": {
"type": "integer",
"maximum": 10000000000000,
"minimum": 0,
"description": "Monthly active users of your products and affiliates; compared with user-count thresholds such as Llama's 700 million. Required to evaluate those clauses."
}
},
"additionalProperties": false
},
"maxItems": 6,
"minItems": 1,
"description": "Intended uses to decide, each evaluated independently."
},
"models": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 10,
"minItems": 1,
"description": "Hugging Face model repo ids (owner/name) used together in the system."
},
"datasets": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 10,
"description": "Extra Hugging Face dataset repo ids; datasets named on the model cards are followed automatically."
},
"dataset_terms": {
"enum": [
"advisory",
"binding"
],
"type": "string",
"description": "advisory (default): a dataset license restriction yields UNDETERMINED because it is unsettled whether it binds trained weights. binding: treat it as binding and report CONFLICT."
}
},
"additionalProperties": false
}Archive extraction preflight: zip-slip, duplicate destinations, symlink conflicts — Checks a manifest of up to 2000 archive entries (path, type, link target, sizes) before extraction, for an agent that unpacks zip, tar or OOXML files: ../ traversal (also through backslashes), absolute, drive-letter and UNC paths, entries that write through a symlink, symlink and hardlink targets that leave the root, duplicate destinations, case-only and NFC/NFD collisions, Windows reserved names,
| Argument | Type | Description |
|---|---|---|
| limits | object | |
| entries* | array | At most 200000 characters of paths and link targets in total. |
| targets | array | Filesystems to check collisions and name rules for. Default: windows, macos and linux. |
| destinationRoot | string | Extraction directory; counted towards total path length. |
{
"type": "object",
"required": [
"entries"
],
"properties": {
"limits": {
"type": "object",
"properties": {
"maxEntries": {
"type": "integer",
"minimum": 0
},
"maxTotalBytes": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"maxExpansionRatio": {
"type": "number",
"minimum": 0
}
}
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 1024,
"minLength": 1,
"description": "Entry name exactly as stored in the archive."
},
"size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Uncompressed size in bytes."
},
"type": {
"enum": [
"file",
"dir",
"symlink",
"hardlink"
],
"type": "string",
"description": "Default: dir when the name ends with /, else file."
},
"linkTarget": {
"type": "string",
"maxLength": 1024,
"description": "Required for symlink and hardlink entries."
},
"compressedSize": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
}
},
"maxItems": 2000,
"minItems": 1,
"description": "At most 200000 characters of paths and link targets in total."
},
"targets": {
"type": "array",
"items": {
"enum": [
"windows",
"macos",
"linux"
],
"type": "string"
},
"maxItems": 3,
"description": "Filesystems to check collisions and name rules for. Default: windows, macos and linux."
},
"destinationRoot": {
"type": "string",
"maxLength": 1024,
"description": "Extraction directory; counted towards total path length."
}
},
"additionalProperties": false
}Decode EVM calldata, return data, revert data or event logs against an ABI — Decodes hex calldata (selector plus arguments), function return data, revert data or an event log against a caller-supplied ABI using ethers, for agents inspecting a transaction before signing or after it fails. Handles tuples, nested and dynamic arrays, bytes and strings, and the built-in Error(string) and Panic(uint256) reverts; a strict re-encode check flags trailing bytes, dirty padding and no
| Argument | Type | Description |
|---|---|---|
| abi* | array | Fragments of the contract ABI (JSON objects or human-readable strings). |
| data* | string | 0x-prefixed hex, whole bytes; up to 20000 bytes. |
| mode | string | Default call: data is selector plus arguments. |
| topics | array | mode event: 0x topics, topic0 first. |
| function | string | mode return: function name or signature. |
{
"type": "object",
"required": [
"abi",
"data"
],
"properties": {
"abi": {
"type": "array",
"items": {
"description": "JSON ABI fragment object or human-readable signature string."
},
"maxItems": 200,
"minItems": 1,
"description": "Fragments of the contract ABI (JSON objects or human-readable strings)."
},
"data": {
"type": "string",
"maxLength": 40002,
"description": "0x-prefixed hex, whole bytes; up to 20000 bytes."
},
"mode": {
"enum": [
"call",
"return",
"error",
"event"
],
"type": "string",
"description": "Default call: data is selector plus arguments."
},
"topics": {
"type": "array",
"items": {
"type": "string",
"maxLength": 66
},
"maxItems": 4,
"description": "mode event: 0x topics, topic0 first."
},
"function": {
"type": "string",
"maxLength": 200,
"description": "mode return: function name or signature."
}
},
"additionalProperties": false
}CIDR math: IPv4 and IPv6 overlap, adjacency, merge, subtract, membership — Computes exact CIDR relations for agents planning networks, firewall rules or allow-lists: for up to 200 IPv4/IPv6 blocks it reports which pairs are equal, nested, partially overlapping or merely adjacent, the minimal merged CIDR list, a subtraction (blocks minus exclusions), address membership with the most specific match, or each block's first/last address, count and host-bits-set errors. It doe
| Argument | Type | Description |
|---|---|---|
| op* | string | inspect: normalize each range and flag host bits set. relations: pairwise equal/contains/overlap/adjacent/disjoint (pass only when no two ranges intersect). merge: minimal CIDR cover of the union. subtract: ranges minus exclude. contains: which ranges contain each address (pass only when every address is covered). |
| ranges* | array | CIDR (10.0.0.0/8, 2001:db8::/32), a bare address (a /32 or /128), or an inclusive range 10.0.0.1-10.0.0.9. |
| exclude | array | Only for op=subtract. |
| addresses | array | Only for op=contains. |
| normalizeMapped | boolean | Treat ::ffff:a.b.c.d (and prefixes of 96 bits or longer inside ::ffff:0:0/96) as the IPv4 block a.b.c.d. Default false. |
{
"type": "object",
"required": [
"op",
"ranges"
],
"properties": {
"op": {
"enum": [
"inspect",
"relations",
"merge",
"subtract",
"contains"
],
"type": "string",
"description": "inspect: normalize each range and flag host bits set. relations: pairwise equal/contains/overlap/adjacent/disjoint (pass only when no two ranges intersect). merge: minimal CIDR cover of the union. subtract: ranges minus exclude. contains: which ranges contain each address (pass only when every address is covered)."
},
"ranges": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"minItems": 1,
"description": "CIDR (10.0.0.0/8, 2001:db8::/32), a bare address (a /32 or /128), or an inclusive range 10.0.0.1-10.0.0.9."
},
"exclude": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"description": "Only for op=subtract."
},
"addresses": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 500,
"description": "Only for op=contains."
},
"normalizeMapped": {
"type": "boolean",
"description": "Treat ::ffff:a.b.c.d (and prefixes of 96 bits or longer inside ::ffff:0:0/96) as the IPv4 block a.b.c.d. Default false."
}
},
"additionalProperties": false
}Migrate a v1 config to a v2 schema with an explicit mapping, and list what was dropped or defaulted — Applies a declared mapping (from pointer, to pointer, optional transform such as string-to-number or a value map) to a v1 JSON config, carries over unmapped keys the v2 schema declares, fills schema defaults, validates the result against the v2 JSON Schema 2020-12 and returns the migrated config plus three exact lists: dropped (v1 values that landed nowhere, with their JSON pointers), defaulted (v
| Argument | Type | Description |
|---|---|---|
| v1* | any | The old config (any JSON value). |
| mapping* | array | |
| v2Schema* | any | The new config's schema. Full JSON Schema 2020-12 (local $ref only). |
| applyDefaults | boolean | Fill missing v2 properties from schema defaults (default true). |
| carryDeclared | boolean | Copy unmapped v1 values to the same pointer when v2 declares that property (default true). |
{
"type": "object",
"required": [
"v1",
"v2Schema",
"mapping"
],
"properties": {
"v1": {
"description": "The old config (any JSON value)."
},
"mapping": {
"type": "array",
"items": {
"type": "object",
"required": [
"from"
],
"properties": {
"to": {
"type": "string",
"maxLength": 300,
"description": "JSON pointer in v2; omit with drop true."
},
"drop": {
"type": "boolean",
"description": "Acknowledge that this v1 value is intentionally discarded."
},
"from": {
"type": "string",
"maxLength": 300,
"description": "JSON pointer in v1."
},
"valueMap": {
"description": "Object of {stringified old value: new value} for transform value-map."
},
"transform": {
"enum": [
"none",
"string-to-number",
"number-to-string",
"string-to-boolean",
"boolean-to-string",
"to-array",
"first-of-array",
"value-map"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 100
},
"v2Schema": {
"description": "The new config's schema. Full JSON Schema 2020-12 (local $ref only)."
},
"applyDefaults": {
"type": "boolean",
"description": "Fill missing v2 properties from schema defaults (default true)."
},
"carryDeclared": {
"type": "boolean",
"description": "Copy unmapped v1 values to the same pointer when v2 declares that property (default true)."
}
},
"additionalProperties": false
}CORS preflight decision from Fetch spec — Takes a browser request shape (origin, method, headers, credentials flag) and a server CORS policy (allow-origin, allow-methods, allow-headers, allow-credentials, expose-headers, max-age) and returns the exact decision a browser would make per the Fetch Living Standard §3.2 and §4.10: whether a preflight OPTIONS is required, whether the main request is allowed, which response headers the script ca
| Argument | Type | Description |
|---|---|---|
| policy* | object | |
| request* | object |
{
"type": "object",
"required": [
"request",
"policy"
],
"properties": {
"policy": {
"type": "object",
"properties": {
"maxAge": {
"type": "integer",
"description": "Access-Control-Max-Age in seconds."
},
"allowOrigin": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 100
}
],
"description": "The Access-Control-Allow-Origin value, as a string ('*' or an origin) or an array of permitted origins the server echoes from."
},
"allowHeaders": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 100,
"description": "Access-Control-Allow-Headers (case-insensitive). '*' is accepted (ignored with credentials)."
},
"allowMethods": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20
},
"maxItems": 20,
"description": "Access-Control-Allow-Methods. '*' is accepted (ignored with credentials)."
},
"exposeHeaders": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 100,
"description": "Access-Control-Expose-Headers."
},
"allowCredentials": {
"type": "boolean",
"description": "Access-Control-Allow-Credentials: true."
}
}
},
"request": {
"type": "object",
"required": [
"origin",
"method"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2000,
"description": "Target URL, optional. Not used in the Fetch decision; carried through for logging."
},
"method": {
"type": "string",
"maxLength": 20,
"description": "HTTP method of the main request (not the preflight), e.g. 'POST'."
},
"origin": {
"type": "string",
"maxLength": 200,
"description": "The ASCII serialization of the request's origin, e.g. 'https://app.example.com'. 'null' for opaque origins."
},
"headers": {
"type": "object",
"description": "Request headers the main request will send. Names are case-insensitive."
},
"withCredentials": {
"type": "boolean",
"description": "True if the request uses credentials mode 'include'."
}
}
}
},
"additionalProperties": false
}CRA Exploited-Vulnerability Evidence and Art. 14 Deadline Clock — Takes a CycloneDX or SPDX JSON SBOM (or a purl list), asks OSV.dev for the advisories that affect each exact component version (OSV evaluates the version ranges per ecosystem), then checks each CVE against the CISA Known Exploited Vulnerabilities catalog and the ENISA EUVD exploited-vulnerability index, and adds FIRST EPSS scores. Returns a per-component verdict, the evidence with source URLs and
| Argument | Type | Description |
|---|---|---|
| sbom | any | CycloneDX 1.4-1.6 or SPDX 2.2/2.3 JSON SBOM, as an object or a JSON string, up to 5 MB. Components need a purl with a version (SPDX: a purl externalRef). Exactly one of sbom or purls. |
| purls | array | Alternative to sbom: versioned package URLs, e.g. pkg:maven/org.apache.logging.log4j/[email protected]. Ecosystems: npm, pypi, maven, golang, cargo, nuget, gem, composer, hex, pub, swift. |
| product | object | Your product with digital elements; used only to fill the draft fields (defaults to the SBOM's own product name). |
| issue_record | boolean | Default false. When true, adds a standalone awareness_record (evidence snapshot, SBOM digest, evaluation time; signed with the hub attestation key when configured) for you to retain. It does not switch off the hub's standard signed response credential, which every response carries and which already binds the output and input digests to a timestamp. |
| awareness_time | string | When the manufacturer became aware, ISO 8601 with UTC offset (e.g. 2026-11-04T09:30:00Z). Defaults to now. Taken as given; this agent cannot verify it. |
EU CRA Readiness Check — Repository or manifests in, EU Cyber Resilience Act Art. 14 position out: dependency-advisor resolves every declared package to its locked version (deterministic, no model), those versions go to cra-exploit-clock as package URLs (OSV, CISA KEV, EPSS, EUVD), and each actively exploited component is joined back to the manifest that declares it with the fixed versions and the advisor's findings. Repo
| Argument | Type | Description |
|---|---|---|
| ref | string | Branch, tag or commit; defaults to the default branch. |
| repo | string | Public GitHub repository: owner/repo, https://github.com/owner/repo[/tree/ref], a commit URL, or a pull request URL (analyzed at the PR head). |
| files | array | Alternative to repo: manifests (package.json, lockfile, pyproject.toml, requirements.txt, Cargo.toml) and source files with repository-relative paths. |
| product | object | Your product with digital elements; used only to fill the draft fields (defaults to the SBOM's own product name). |
| ecosystems | array | Restrict the analysis; default all detected. |
| repoLicense | string | SPDX id of the repository's license, for alternative ranking; detected from manifests or LICENSE when absent. |
| awareness_time | string | When the manufacturer became aware, ISO 8601 with UTC offset (e.g. 2026-11-04T09:30:00Z). Defaults to now. Taken as given; this agent cannot verify it. |
Check caller-declared rules across fields of a JSON record: end after start, conditional required, exactly one of — Evaluates up to 100 rules you declare over one JSON document and reports, per rule, pass, fail or unknown with the JSON pointer of every violating field and the actual value class (absent, null, empty string, value). Rule kinds: compare (>, >=, <, <=, ==, != on numbers, exact decimals, RFC 3339 dates or date-times, strings), required-if, forbidden-if, exactly-one, at-most-one, at-least-one, all-or
| Argument | Type | Description |
|---|---|---|
| data* | any | The JSON document the rules apply to. |
| rules* | array | |
| onMissing | string | Missing or null compare operand: unknown (default), fail or skip. |
{
"type": "object",
"required": [
"data",
"rules"
],
"properties": {
"data": {
"description": "The JSON document the rules apply to."
},
"rules": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"kind"
],
"properties": {
"as": {
"enum": [
"auto",
"number",
"decimal",
"date",
"datetime",
"string"
],
"type": "string"
},
"id": {
"type": "string",
"maxLength": 80
},
"op": {
"enum": [
"==",
"!=",
">",
">=",
"<",
"<="
],
"type": "string"
},
"kind": {
"enum": [
"compare",
"required-if",
"forbidden-if",
"exactly-one",
"at-most-one",
"at-least-one",
"all-or-none",
"sum-equals"
],
"type": "string"
},
"left": {
"type": "string",
"maxLength": 300,
"description": "JSON pointer; * matches every array element."
},
"when": {
"type": "object",
"required": [
"path",
"op"
],
"properties": {
"op": {
"enum": [
"equals",
"not-equals",
"in",
"not-in",
"present",
"absent",
"empty"
],
"type": "string"
},
"path": {
"type": "string",
"maxLength": 300
},
"value": {
"description": "Operand for equals, not-equals, in, not-in."
}
},
"additionalProperties": false
},
"right": {
"type": "string",
"maxLength": 300,
"description": "JSON pointer compared with left (use value for a constant)."
},
"total": {
"type": "string",
"maxLength": 300
},
"value": {
"description": "Constant to compare with, or the expected total."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 50
},
"forbid": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 20
},
"require": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 20
},
"presence": {
"enum": [
"defined",
"non-null",
"non-empty"
],
"type": "string",
"description": "What counts as present: defined (key exists), non-null (default), non-empty."
},
"tolerance": {
"type": "string",
"maxLength": 40,
"description": "Decimal tolerance for sum-equals, default 0."
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1
},
"onMissing": {
"enum": [
"unknown",
"fail",
"skip"
],
"type": "string",
"description": "Missing or null compare operand: unknown (default), fail or skip."
}
},
"additionalProperties": false
}Content-Security-Policy audit — Parses a Content-Security-Policy header or <meta> value and reports every clause that weakens it: 'unsafe-inline' without nonces or hashes, 'unsafe-eval', wildcard hosts, data:/blob: in script-src, scheme-only https:, duplicate directives (second is discarded), missing base-uri or object-src 'none', open frame-ancestors or form-action, and the strict-dynamic cases that silently ignore host sources
| Argument | Type | Description |
|---|---|---|
| policy* | string | The full Content-Security-Policy value (not the header line). |
| deployTarget | string | Reserved for future harsher checks in enforce mode. |
{
"type": "object",
"required": [
"policy"
],
"properties": {
"policy": {
"type": "string",
"maxLength": 8000,
"description": "The full Content-Security-Policy value (not the header line)."
},
"deployTarget": {
"enum": [
"report-only",
"enforce"
],
"type": "string",
"description": "Reserved for future harsher checks in enforce mode."
}
},
"additionalProperties": false
}Detect a CSV file's delimiter, quote, header row and broken header names — Detects the delimiter (comma, semicolon, tab, pipe), quote character, line terminator, BOM, header row offset (preamble lines above the header) and whether a header exists in CSV text, parsed per RFC 4180 so quoted delimiters and CRLF inside quoted fields are handled. Returns every candidate dialect with its score, each ragged row with its physical line, and header repairs (empty, duplicate or BOM
| Argument | Type | Description |
|---|---|---|
| text* | string | CSV text, up to 200000 characters. Detection samples the first 50000; structure checks cover all of it. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"description": "CSV text, up to 200000 characters. Detection samples the first 50000; structure checks cover all of it."
}
},
"additionalProperties": false
}Will this CSV survive a typed round trip and a spreadsheet: leading zeros, big ids, dates, formulas, empty vs null — Parses CSV text (RFC 4180, caller dialect) against a column type map and reports, per cell with row, column, physical line and byte offset, everything that would change on a parse-serialize-parse round trip or when opened in Excel or Sheets: leading zeros stripped, integers beyond 2^53 or 15 significant digits, scientific-notation and date coercion ("1E5", "1-2", "MARCH1"), formula injection (= +
| Argument | Type | Description |
|---|---|---|
| text* | string | CSV text, up to 200000 characters. |
| types | any | Object mapping column name to one of string, identifier, integer, decimal, boolean, date, datetime (max 200). Unlisted columns are "string". Use "identifier" for digit strings that must keep leading zeros. |
| dialect | object | |
| nullToken | string | Text that means null (e.g. "NULL", "\\N"). Default: none, so only an unquoted empty field is null. |
| spreadsheet | boolean | Check Excel/Sheets coercion hazards (default true). |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"description": "CSV text, up to 200000 characters."
},
"types": {
"description": "Object mapping column name to one of string, identifier, integer, decimal, boolean, date, datetime (max 200). Unlisted columns are \"string\". Use \"identifier\" for digit strings that must keep leading zeros."
},
"dialect": {
"type": "object",
"properties": {
"quote": {
"type": "string",
"maxLength": 1,
"description": "Default '\"'."
},
"header": {
"type": "boolean",
"description": "First row is a header (default true). Without one, columns are named 0, 1, 2..."
},
"delimiter": {
"type": "string",
"maxLength": 1,
"description": "Default \",\"."
}
},
"additionalProperties": false
},
"nullToken": {
"type": "string",
"maxLength": 20,
"description": "Text that means null (e.g. \"NULL\", \"\\\\N\"). Default: none, so only an unquoted empty field is null."
},
"spreadsheet": {
"type": "boolean",
"description": "Check Excel/Sheets coercion hazards (default true)."
}
},
"additionalProperties": false
}Dependency Underuse & Replacement Advisor — Audits the dependencies of a public GitHub repo, commit or pull request (or uploaded manifests and sources) and returns a pass/warn/fail verdict, a 0-100 risk score, the top findings with manifest file:line and the fix, and a SARIF 2.1.0 log for GitHub code scanning. Parses JS/TS, Python and Rust imports with a tokenizer-level scanner and maps them to declared npm, PyPI and crates.io dependencies.
| Argument | Type | Description |
|---|---|---|
| ref | string | Branch, tag or commit; defaults to the default branch. |
| mode | string | deterministic makes no model call; auto makes at most one, only for symbols the curated table cannot decide. |
| repo | string | Public GitHub repository: owner/repo, https://github.com/owner/repo[/tree/ref], a commit URL, or a pull request URL (analyzed at the PR head). |
| files | array | Alternative to repo: manifests (package.json, lockfile, pyproject.toml, requirements.txt, Cargo.toml) and source files with repository-relative paths. |
| ecosystems | array | Restrict the analysis; default all detected. |
| repoLicense | string | SPDX id of the repository's license, for alternative ranking; detected from manifests or LICENSE when absent. |
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"maxLength": 200,
"description": "Branch, tag or commit; defaults to the default branch."
},
"mode": {
"enum": [
"auto",
"deterministic"
],
"type": "string",
"description": "deterministic makes no model call; auto makes at most one, only for symbols the curated table cannot decide."
},
"repo": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Public GitHub repository: owner/repo, https://github.com/owner/repo[/tree/ref], a commit URL, or a pull request URL (analyzed at the PR head)."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"content": {
"type": "string",
"maxLength": 400000
}
},
"additionalProperties": false
},
"maxItems": 600,
"description": "Alternative to repo: manifests (package.json, lockfile, pyproject.toml, requirements.txt, Cargo.toml) and source files with repository-relative paths."
},
"ecosystems": {
"type": "array",
"items": {
"enum": [
"npm",
"pypi",
"cargo"
],
"type": "string"
},
"maxItems": 3,
"description": "Restrict the analysis; default all detected."
},
"repoLicense": {
"type": "string",
"maxLength": 100,
"description": "SPDX id of the repository's license, for alternative ranking; detected from manifests or LICENSE when absent."
}
},
"additionalProperties": false
}Developer pipeline toolkit: 9 deterministic CI/CD checks — One endpoint, nine deterministic CI/CD primitives, each a sub-millisecond algorithmic check with cited specs: jwt-verify (RFC 7515/7518/8725), cron-explain (POSIX + Quartz), openapi-breaking-change (OAS 3.1 diff), webhook-verify (Stripe/GitHub/Shopify/Slack/Twilio/Linear/Clerk/SendGrid), csp-audit (CSP Level 3), cors-preflight (Fetch spec §3.2/§4.10), x509-inspect (RFC 5280/6125), graphql-cost (Gr
| Argument | Type | Description |
|---|---|---|
| args* | object | The chosen tool's own input object. Validated against that tool's schema before the call is billed. |
| tool* | string | Which deterministic primitive to run. See the individual agents' schemas at /api/v1/<tool> for the args shape. |
{
"type": "object",
"required": [
"tool",
"args"
],
"properties": {
"args": {
"type": "object",
"description": "The chosen tool's own input object. Validated against that tool's schema before the call is billed."
},
"tool": {
"enum": [
"cors-preflight",
"cron-explain",
"csp-audit",
"graphql-cost",
"jwt-verify",
"license-identify",
"openapi-breaking-change",
"webhook-verify",
"x509-inspect"
],
"type": "string",
"description": "Which deterministic primitive to run. See the individual agents' schemas at /api/v1/<tool> for the args shape."
}
},
"additionalProperties": false
}PR / Dependency Breaking-Change & Exploit Gatekeeper — Merge gate for a pull request: pass/warn/fail verdict, 0-100 risk score, the top findings with file:line and a fix, drop-in patches, GitHub Checks annotations and a SARIF 2.1.0 log. Accepts a raw unified diff, a GitHub PR, commit or compare URL, or per-file patches. Deterministic scanners (secrets, SQL and command injection, weak crypto, risky package.json changes) run beside a model review for bu
| Argument | Type | Description |
|---|---|---|
| files | array | Alternative to gitDiff: changed files with their patch hunks, as returned by GitHub's pull request files API. |
| prUrl | string | Alternative to gitDiff: a public GitHub pull request, commit or compare URL (github.com/owner/repo/pull/123). Its .diff is downloaded; a diff over 300,000 characters is cut at a file boundary and the rest reported as unreviewed. |
| context | string | What the PR is supposed to do. |
| gitDiff | string | Raw unified diff (git diff output). Provide exactly one of gitDiff, prUrl or files. |
| packageJsonDiff | string |
{
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"patch"
],
"properties": {
"path": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"patch": {
"type": "string",
"maxLength": 300000
},
"status": {
"enum": [
"added",
"modified",
"removed",
"renamed"
],
"type": "string"
},
"previousPath": {
"type": "string",
"maxLength": 500
}
},
"additionalProperties": false
},
"maxItems": 300,
"description": "Alternative to gitDiff: changed files with their patch hunks, as returned by GitHub's pull request files API."
},
"prUrl": {
"type": "string",
"maxLength": 300,
"minLength": 20,
"description": "Alternative to gitDiff: a public GitHub pull request, commit or compare URL (github.com/owner/repo/pull/123). Its .diff is downloaded; a diff over 300,000 characters is cut at a file boundary and the rest reported as unreviewed."
},
"context": {
"type": "string",
"maxLength": 4000,
"description": "What the PR is supposed to do."
},
"gitDiff": {
"type": "string",
"maxLength": 300000,
"minLength": 1,
"description": "Raw unified diff (git diff output). Provide exactly one of gitDiff, prUrl or files."
},
"packageJsonDiff": {
"type": "string",
"maxLength": 50000
}
},
"additionalProperties": false
}Document to Markdown with per-page hashes and offsets — Converts a PDF (text layer), DOCX, XLSX or PPTX file, or normalizes an HTML, Markdown, text, CSV or JSON file, into Markdown (or plain text) for an agent that must read or cite a document. Give an https URL or up to 4 MB as base64. Returns the content plus one unit per page, sheet or slide with its exact character range in the content and a SHA-256 of that unit's text, so later quote and citation
| Argument | Type | Description |
|---|---|---|
| url | string | https URL of the document. Provide this or content_base64. |
| pages | string | Page, sheet or slide selection such as "1-5,8", at most 200 pages. Default: the first 200. |
| format | string | markdown (default) or text (Markdown syntax removed). |
| describe | boolean | Also suggest a file name, tags and a summary with a language model. Default false. |
| filename | string | Original file name; helps format detection and is kept as the extension of the suggested name. |
| max_chars | integer | Output cap in characters, cut at a unit boundary. Default 120000. |
| content_base64 | string | Standard padded base64 of the file, at most 4 MB decoded. Provide this or url. |
Dockerfile build-cache and reproducibility lint — Parses a Dockerfile (continuations, escape directive, heredocs, flags, stages) and reports instruction orderings that defeat the layer cache or make rebuilds drift, for agents writing or reviewing container builds. Cache: COPY of the whole context before a dependency or package install, apt-get update in its own RUN, per-build ARG/ENV values (build date, git sha) declared before later RUN steps. R
| Argument | Type | Description |
|---|---|---|
| basePin | string | tag (default): flag only missing or :latest tags. digest: flag every base image not pinned by @sha256. |
| include | array | Rule categories that decide the status. Default cache and reproducibility. |
| dockerfile* | string | Dockerfile text, at most 5000 lines and 128 stages. |
{
"type": "object",
"required": [
"dockerfile"
],
"properties": {
"basePin": {
"enum": [
"tag",
"digest"
],
"type": "string",
"description": "tag (default): flag only missing or :latest tags. digest: flag every base image not pinned by @sha256."
},
"include": {
"type": "array",
"items": {
"enum": [
"cache",
"reproducibility",
"hygiene"
],
"type": "string"
},
"maxItems": 3,
"minItems": 1,
"description": "Rule categories that decide the status. Default cache and reproducibility."
},
"dockerfile": {
"type": "string",
"maxLength": 100000,
"description": "Dockerfile text, at most 5000 lines and 128 stages."
}
},
"additionalProperties": false
}Duplicate JSON object keys found in raw text, before a parser drops them — Scans raw JSON text (RFC 8259) for repeated object member names at any depth, including inside arrays and keys spelled differently but equal after unescaping ("a" vs "\u0061"), and reports each with its JSON pointer, UTF-8 byte offset, line, column and the value every occurrence carried, plus whether the values conflict. Also reports a leading BOM, unpaired surrogates, __proto__ keys and the exact
| Argument | Type | Description |
|---|---|---|
| text* | string | Raw JSON text, up to 200000 characters and 64 levels of nesting. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"description": "Raw JSON text, up to 200000 characters and 64 levels of nesting."
}
},
"additionalProperties": false
}Map free-text values onto a closed set of allowed values, or abstain — Maps each input string onto one member of a closed caller-supplied set using, in order: exact match, caller aliases, a deterministic normal form (Unicode NFKC, case and accent folding, punctuation and underscore collapse), then bounded edit distance (optimal string alignment, so a swapped pair of letters costs 1). Returns the canonical value, the method, the distance and the nearest candidates; it
| Argument | Type | Description |
|---|---|---|
| values* | array | Strings to canonicalize. |
| aliases | array | Caller synonyms; each canonical must be in allowed. |
| allowed* | array | The closed set of canonical values. |
| maxDistance | integer | Largest edit distance accepted (default 2). The effective limit is also capped at one third of the normalized input length. |
| caseSensitive | boolean | Skip case, accent and punctuation folding (only NFKC and whitespace collapse). Default false. |
{
"type": "object",
"required": [
"values",
"allowed"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"minItems": 1,
"description": "Strings to canonicalize."
},
"aliases": {
"type": "array",
"items": {
"type": "object",
"required": [
"alias",
"canonical"
],
"properties": {
"alias": {
"type": "string",
"maxLength": 100
},
"canonical": {
"type": "string",
"maxLength": 100
}
},
"additionalProperties": false
},
"maxItems": 500,
"description": "Caller synonyms; each canonical must be in allowed."
},
"allowed": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 500,
"minItems": 1,
"description": "The closed set of canonical values."
},
"maxDistance": {
"type": "integer",
"maximum": 5,
"minimum": 0,
"description": "Largest edit distance accepted (default 2). The effective limit is also capped at one third of the normalized input length."
},
"caseSensitive": {
"type": "boolean",
"description": "Skip case, accent and punctuation folding (only NFKC and whitespace collapse). Default false."
}
},
"additionalProperties": false
}Which GPS, serial-number and owner EXIF tags an image carries (keys only) — Lists which privacy-relevant EXIF tags exist in a JPEG, TIFF, PNG (eXIf) or WebP (EXIF) image, for an agent that is about to publish, upload or forward a photo. Reports tag ids and names for GPS, body and lens serial numbers, camera owner, artist, unique image id, device, software, timestamps and thumbnails; values are never returned. Input is the image as base64 (up to 96 KiB, enough for the meta
| Argument | Type | Description |
|---|---|---|
| data* | string | Padded base64 of the image file or its first 96 KiB (the metadata block must be inside it). |
| forbid | array | Categories whose presence fails the check. Default gps, serial, owner. |
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "string",
"maxLength": 131072,
"description": "Padded base64 of the image file or its first 96 KiB (the metadata block must be inside it)."
},
"forbid": {
"type": "array",
"items": {
"enum": [
"gps",
"serial",
"owner",
"unique-id",
"device",
"software",
"datetime",
"description",
"makernote",
"thumbnail",
"copyright"
],
"type": "string"
},
"maxItems": 11,
"description": "Categories whose presence fails the check. Default gps, serial, owner."
}
},
"additionalProperties": false
}Floating-point stability of an expression over variable ranges — Evaluates a real-valued expression in binary64 (or binary32) on a deterministic grid over the caller's variable ranges and compares each point with a certified arbitrary-precision reference, reporting the decimal digits lost, the worst input, and overflow, underflow or NaN. Recognises and rewrites exp(x)-1, 1-cos(x), log(1+x), sqrt(a)-sqrt(b), a^2-b^2, the quadratic formula, sqrt(x^2+y^2) and log-
| Argument | Type | Description |
|---|---|---|
| precision | string | Arithmetic of the code under test. Default binary64. |
| variables* | array | Range of every free variable. |
| expression* | string | Expression in the declared variables, e.g. 'exp(x) - 1'. Operators + - * / ^ (or **); functions sqrt exp expm1 log log1p log2 log10 sin cos tan atan sinh cosh tanh abs pow hypot min max; constants pi, e. |
| alternative | string | Optional algebraically equal expression to score on the same grid. |
| maxDigitsLost | integer | Fail above this many lost digits. Default 4. |
{
"type": "object",
"required": [
"expression",
"variables"
],
"properties": {
"precision": {
"enum": [
"binary64",
"binary32"
],
"type": "string",
"description": "Arithmetic of the code under test. Default binary64."
},
"variables": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"min",
"max"
],
"properties": {
"max": {
"type": "number",
"description": "Largest value."
},
"min": {
"type": "number",
"description": "Smallest value the variable takes (finite binary64)."
},
"name": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
"maxLength": 32
},
"scale": {
"enum": [
"linear",
"log"
],
"type": "string",
"description": "Grid spacing. Default: log when 0 < min and max/min >= 1000, else linear (with probes near 0 when the range contains it)."
}
}
},
"maxItems": 6,
"minItems": 1,
"description": "Range of every free variable."
},
"expression": {
"type": "string",
"maxLength": 500,
"description": "Expression in the declared variables, e.g. 'exp(x) - 1'. Operators + - * / ^ (or **); functions sqrt exp expm1 log log1p log2 log10 sin cos tan atan sinh cosh tanh abs pow hypot min max; constants pi, e."
},
"alternative": {
"type": "string",
"maxLength": 500,
"description": "Optional algebraically equal expression to score on the same grid."
},
"maxDigitsLost": {
"type": "integer",
"maximum": 16,
"minimum": 0,
"description": "Fail above this many lost digits. Default 4."
}
},
"additionalProperties": false
}Coordinate axis-order and unit check from a CRS and its area of use — Checks up to 1000 coordinate pairs (or one bounding box) against the EPSG coordinate system you name, for agents handling GIS or map data: it flags longitude/latitude swaps, degrees supplied where metres are expected (or the reverse), values outside the CRS's area of use, and inverted bounds, with the point index and values. It does not reproject, geocode, validate geometry topology or datum, or j
| Argument | Type | Description |
|---|---|---|
| crs* | string | EPSG code in any common form (EPSG:4326, 4326, urn:ogc:def:crs:EPSG::4326) or CRS84. See versions for the snapshot of known codes; others return unknown unless areaOfUse is supplied. |
| bounds | array | [minFirst, minSecond, maxFirst, maxSecond] in the data's own order; its two corners are checked like points and min must not exceed max. |
| areaOfUse | array | [south, west, north, east] degrees; overrides the snapshot for a geographic CRS or supplies one for an unknown geographic code. |
| coordinates | array | [first, second] pairs exactly as they appear in the data. |
| declaredOrder | string | What the data claims: lon-lat or easting-northing means the first value is the east axis; lat-lon or northing-easting means north first. Default: the CRS's EPSG authority order (CRS84: lon-lat). |
{
"type": "object",
"required": [
"crs"
],
"properties": {
"crs": {
"type": "string",
"maxLength": 80,
"description": "EPSG code in any common form (EPSG:4326, 4326, urn:ogc:def:crs:EPSG::4326) or CRS84. See versions for the snapshot of known codes; others return unknown unless areaOfUse is supplied."
},
"bounds": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"description": "[minFirst, minSecond, maxFirst, maxSecond] in the data's own order; its two corners are checked like points and min must not exceed max."
},
"areaOfUse": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"description": "[south, west, north, east] degrees; overrides the snapshot for a geographic CRS or supplies one for an unknown geographic code."
},
"coordinates": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 2,
"minItems": 2
},
"maxItems": 1000,
"description": "[first, second] pairs exactly as they appear in the data."
},
"declaredOrder": {
"enum": [
"lon-lat",
"lat-lon",
"easting-northing",
"northing-easting"
],
"type": "string",
"description": "What the data claims: lon-lat or easting-northing means the first value is the east axis; lat-lon or northing-easting means north first. Default: the CRS's EPSG authority order (CRS84: lon-lat)."
}
},
"additionalProperties": false
}GraphQL depth and static complexity score — Parses a GraphQL document (query, mutation or subscription) per the June 2018 spec and returns depth, field count, alias count, fragment list, cycle detection and a static complexity score. Complexity uses the common 'Σ field-score × list-multiplier' model: a listFields config maps parent-type + field-name to either a constant multiplier or a field argument name to read (e.g. 'first', 'limit'), wi
| Argument | Type | Description |
|---|---|---|
| query* | string | The GraphQL document text. |
| maxDepth | integer | Fail if depth exceeds this. Default 15. |
| variables | object | Variable values, used only to resolve list-argument multipliers like first: $first. |
| listFields | object | Per-type field multiplier config. See description for shape. |
| maxComplexity | integer | Fail if complexity exceeds this. Default 1000. |
| operationName | string | Pick this operation; defaults to the first. |
| defaultListMultiplier | integer | Fallback multiplier for list fields not declared in listFields. Default 10. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200000,
"description": "The GraphQL document text."
},
"maxDepth": {
"type": "integer",
"description": "Fail if depth exceeds this. Default 15."
},
"variables": {
"type": "object",
"description": "Variable values, used only to resolve list-argument multipliers like first: $first."
},
"listFields": {
"type": "object",
"description": "Per-type field multiplier config. See description for shape."
},
"maxComplexity": {
"type": "integer",
"description": "Fail if complexity exceeds this. Default 1000."
},
"operationName": {
"type": "string",
"maxLength": 100,
"description": "Pick this operation; defaults to the first."
},
"defaultListMultiplier": {
"type": "integer",
"description": "Fallback multiplier for list fields not declared in listFields. Default 10."
}
},
"additionalProperties": false
}Self-Healing Scraper & DOM-to-JSON Compiler — Synthesizes durable CSS selectors (Cheerio; no XPath) for a target JSON schema, proves them against the live DOM in-request, and returns the extracted data plus a ready-to-run TypeScript Cheerio extractor.
| Argument | Type | Description |
|---|---|---|
| url | string | Page to fetch. Provide url or html. |
| html | string | Raw HTML to use instead of fetching. |
| targetSchema* | object | JSON Schema of the fields to extract: an object whose properties are string/number/integer/boolean (or arrays of those), or an array whose items are such an object for list pages. The pattern keyword is not allowed. |
| previousBrokenSelectors | object | Map of field name to the CSS selector that stopped working. |
{
"type": "object",
"required": [
"targetSchema"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "Page to fetch. Provide url or html."
},
"html": {
"type": "string",
"maxLength": 1500000,
"description": "Raw HTML to use instead of fetching."
},
"targetSchema": {
"type": "object",
"description": "JSON Schema of the fields to extract: an object whose properties are string/number/integer/boolean (or arrays of those), or an array whose items are such an object for list pages. The pattern keyword is not allowed."
},
"previousBrokenSelectors": {
"type": "object",
"description": "Map of field name to the CSS selector that stopped working."
}
},
"additionalProperties": false
}HTTP cacheability, CORS and redirect-loop explainer — Explains from supplied response headers (and optionally the request's headers, a CORS request, and a redirect chain) whether a shared and a private HTTP cache may store the response (RFC 9111 section 3), its freshness lifetime and basis (s-maxage, max-age, Expires minus Date, or the 10% Last-Modified heuristic), Vary, invalid max-age or Expires, the CORS check and preflight outcome per the Fetch S
| Argument | Type | Description |
|---|---|---|
| cors | object | |
| request | object | |
| response* | object | |
| redirects | array |
{
"type": "object",
"required": [
"response"
],
"properties": {
"cors": {
"type": "object",
"required": [
"origin"
],
"properties": {
"method": {
"type": "string",
"maxLength": 20
},
"origin": {
"type": "string",
"maxLength": 300,
"description": "Serialized request origin, e.g. https://app.example, or null."
},
"preflight": {
"type": "boolean",
"description": "The supplied response is the OPTIONS preflight response."
},
"credentials": {
"type": "boolean",
"description": "Request credentials mode include."
},
"headerNames": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 30,
"description": "Request header names beyond the CORS-safelisted ones; safelisting by value is not evaluated."
}
},
"additionalProperties": false
},
"request": {
"type": "object",
"properties": {
"method": {
"enum": [
"GET",
"HEAD"
],
"type": "string"
},
"headers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"value": {
"type": "string",
"maxLength": 1024
}
},
"additionalProperties": false
},
"maxItems": 100,
"description": "Only Authorization presence and Vary-selected names matter; values may be redacted."
}
},
"additionalProperties": false
},
"response": {
"type": "object",
"required": [
"status",
"headers"
],
"properties": {
"status": {
"type": "integer",
"maximum": 599,
"minimum": 200,
"description": "Final status; 1xx is not cached."
},
"headers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"value": {
"type": "string",
"maxLength": 4096
}
},
"additionalProperties": false
},
"maxItems": 100
}
},
"additionalProperties": false
},
"redirects": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"status",
"location"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048
},
"status": {
"type": "integer",
"maximum": 399,
"minimum": 300
},
"location": {
"type": "string",
"maxLength": 2048
},
"cacheControl": {
"type": "string",
"maxLength": 1024
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1
}
},
"additionalProperties": false
}IAM policy action minimizer: wildcards to the required action list — Takes an AWS IAM policy JSON and the exact list of actions a task needs (up to 300), and returns the policy with each Allow statement's Action narrowed to just those actions, plus what the original over-grants: wildcards, unused actions, Allow+NotAction, required actions no statement grants, and required actions an unconditional Deny blocks. For an agent that is about to attach or propose a policy
| Argument | Type | Description |
|---|---|---|
| policy* | any | The IAM policy document as a JSON object or JSON string. At most 60,000 characters. |
| knownActions | array | Optional catalog of real actions (from the AWS service reference JSON), used to count what each wildcard grants. |
| requiredActions* | array | Concrete actions the task needs, e.g. s3:GetObject. No wildcards. |
{
"type": "object",
"required": [
"policy",
"requiredActions"
],
"properties": {
"policy": {
"description": "The IAM policy document as a JSON object or JSON string. At most 60,000 characters."
},
"knownActions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 128
},
"maxItems": 3000,
"description": "Optional catalog of real actions (from the AWS service reference JSON), used to count what each wildcard grants."
},
"requiredActions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 128,
"minLength": 3
},
"maxItems": 300,
"minItems": 1,
"description": "Concrete actions the task needs, e.g. s3:GetObject. No wildcards."
}
},
"additionalProperties": false
}Row multiplication, unmatched keys and uniqueness violations before a table join — Takes the join keys of two tables (every row's key, or distinct keys with row counts) and computes the exact output row count of an inner, left, right or full equi-join with SQL NULL semantics, the observed cardinality (one-to-one, one-to-many, many-to-one, many-to-many), the keys that multiply rows the most, unmatched keys on each side and the first duplicate row when a side was assumed unique. I
| Argument | Type | Description |
|---|---|---|
| left* | object | |
| right* | object | |
| expect | object | |
| joinType* | string | |
| normalize | object | Normalization your pipeline applies to string keys before joining. |
{
"type": "object",
"required": [
"left",
"right",
"joinType"
],
"properties": {
"left": {
"type": "object",
"properties": {
"keys": {
"type": "array",
"items": {
"description": "One row's join key: a string, number or boolean, null for SQL NULL, or an array of those for a composite key."
},
"maxItems": 20000,
"description": "Join key of every row, in table order."
},
"counts": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"count"
],
"properties": {
"key": {
"description": "A join key (scalar, null, or array for composite)."
},
"count": {
"type": "integer",
"maximum": 1000000,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 5000,
"description": "Key summary: how many rows carry each distinct key."
},
"nullRows": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "With counts: rows whose key is NULL."
}
},
"additionalProperties": false
},
"right": {
"type": "object",
"properties": {
"keys": {
"type": "array",
"items": {
"description": "One row's join key: a string, number or boolean, null for SQL NULL, or an array of those for a composite key."
},
"maxItems": 20000,
"description": "Join key of every row, in table order."
},
"counts": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"count"
],
"properties": {
"key": {
"description": "A join key (scalar, null, or array for composite)."
},
"count": {
"type": "integer",
"maximum": 1000000,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 5000,
"description": "Key summary: how many rows carry each distinct key."
},
"nullRows": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "With counts: rows whose key is NULL."
}
},
"additionalProperties": false
},
"expect": {
"type": "object",
"properties": {
"leftUnique": {
"type": "boolean",
"description": "Left keys (non-NULL) must be distinct."
},
"rightUnique": {
"type": "boolean",
"description": "Right keys (non-NULL) must be distinct."
},
"maxOutputRows": {
"type": "integer",
"maximum": 9000000000000000,
"minimum": 0
},
"everyLeftMatched": {
"type": "boolean"
},
"everyRightMatched": {
"type": "boolean"
},
"noRowMultiplication": {
"type": "boolean",
"description": "The output must not have more rows than the preserved side."
}
},
"additionalProperties": false
},
"joinType": {
"enum": [
"inner",
"left",
"right",
"full"
],
"type": "string"
},
"normalize": {
"type": "object",
"properties": {
"trim": {
"type": "boolean"
},
"caseFold": {
"type": "boolean"
}
},
"description": "Normalization your pipeline applies to string keys before joining.",
"additionalProperties": false
}
},
"additionalProperties": false
}Conflicts between two to four RFC 6902 JSON Patches made against the same document — Takes one base document and 2 to 4 JSON Patch (RFC 6902) operation lists written against it and reports, per pair, whether they commute: same-path writes, ancestor/descendant overlaps, array-index shifts (an insert or remove moves the elements a later patch addressed by index), concurrent `-` appends whose final order depends on application order, `test` operations invalidated by another patch, an
| Argument | Type | Description |
|---|---|---|
| patches* | array | |
| document* | any | The base document both patches were written against (any JSON value). |
{
"type": "object",
"required": [
"document",
"patches"
],
"properties": {
"patches": {
"type": "array",
"items": {
"type": "object",
"required": [
"ops"
],
"properties": {
"ops": {
"type": "array",
"items": {
"description": "A JSON Patch operation object: {op, path, value?, from?}."
},
"maxItems": 100
},
"name": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": false
},
"maxItems": 4,
"minItems": 2
},
"document": {
"description": "The base document both patches were written against (any JSON value)."
}
},
"additionalProperties": false
}JWT lint: alg none, crit, key-URL headers, expiry, audience (decode only) — Decodes a compact JWT (never verifies the signature) and checks it against RFC 7519 and RFC 8725 for an agent about to trust or forward it: alg none or missing, crit and key-supplying headers (jku, x5u, jwk), kid injection shape, duplicate claims, and exp, nbf, iat against a caller-supplied time, plus optional expected algorithms, issuer and audience. Without asOf the time claims are not judged an
| Argument | Type | Description |
|---|---|---|
| asOf | integer | Reference instant, epoch seconds. Required to judge exp/nbf/iat. |
| token* | string | Compact JWS: header.payload.signature. |
| requireExp | boolean | Default true: a token without exp fails. |
| expectedAlgs | array | Allow-list of algorithms; any other alg fails. |
| leewaySeconds | integer | Clock-skew allowance, default 0. |
| expectedIssuer | string | |
| expectedAudience | string |
{
"type": "object",
"required": [
"token"
],
"properties": {
"asOf": {
"type": "integer",
"maximum": 100000000000,
"minimum": 0,
"description": "Reference instant, epoch seconds. Required to judge exp/nbf/iat."
},
"token": {
"type": "string",
"maxLength": 8192,
"description": "Compact JWS: header.payload.signature."
},
"requireExp": {
"type": "boolean",
"description": "Default true: a token without exp fails."
},
"expectedAlgs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20
},
"maxItems": 10,
"description": "Allow-list of algorithms; any other alg fails."
},
"leewaySeconds": {
"type": "integer",
"maximum": 3600,
"minimum": 0,
"description": "Clock-skew allowance, default 0."
},
"expectedIssuer": {
"type": "string",
"maxLength": 500
},
"expectedAudience": {
"type": "string",
"maxLength": 500
}
},
"additionalProperties": false
}JWT signature and claims verification — Verifies a JWS-compact JWT: signature over `base64url(header).base64url(payload)` with Web Crypto under the exact algorithm in the token's `alg` header (HS256/384/512, RS256/384/512, PS256/384/512, ES256/384/512, EdDSA). Refuses 'none' unconditionally and rejects any alg not in the caller's allowedAlgorithms. Validates exp/nbf with a configurable clock-skew tolerance (default 60s), iss equality, a
| Argument | Type | Description |
|---|---|---|
| key* | object | |
| token* | string | The JWS-compact JWT: three base64url parts joined by '.'. |
| issuer | string | Require payload.iss to equal this. |
| nowIso | string | Override 'now' for deterministic tests. |
| audience | string | Require payload.aud to include this. |
| toleranceSeconds | integer | Clock-skew tolerance for exp/nbf. Default 60s. |
| allowedAlgorithms* | array | Algorithms the caller accepts; verification fails if the header's alg is not here. |
{
"type": "object",
"required": [
"token",
"key",
"allowedAlgorithms"
],
"properties": {
"key": {
"type": "object",
"required": [
"kind",
"value"
],
"properties": {
"kind": {
"enum": [
"hmac-secret",
"pem-spki",
"jwk"
],
"type": "string"
},
"value": {
"description": "The key material: a string for hmac-secret and pem-spki, a JWK object for jwk."
}
}
},
"token": {
"type": "string",
"maxLength": 16000,
"description": "The JWS-compact JWT: three base64url parts joined by '.'."
},
"issuer": {
"type": "string",
"maxLength": 200,
"description": "Require payload.iss to equal this."
},
"nowIso": {
"type": "string",
"maxLength": 40,
"description": "Override 'now' for deterministic tests."
},
"audience": {
"type": "string",
"maxLength": 200,
"description": "Require payload.aud to include this."
},
"toleranceSeconds": {
"type": "integer",
"description": "Clock-skew tolerance for exp/nbf. Default 60s."
},
"allowedAlgorithms": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"description": "Algorithms the caller accepts; verification fails if the header's alg is not here."
}
},
"additionalProperties": false
}Kubernetes manifest cross-reference check — Parses up to 20 Kubernetes YAML manifests and checks that they agree with each other, for an agent that generated or edited manifests before kubectl apply: Service selectors against pod template labels (with the nearest near-miss), named targetPorts against containerPort names, Service port naming, Deployment selector against its template labels, Ingress backends against Services, and ConfigMap/Se
| Argument | Type | Description |
|---|---|---|
| manifests* | array | YAML text, multi-document allowed. At most 24000 characters in total (the parser costs about 1 ms per 1,000 characters). |
| closedWorld | boolean | Declare that the manifests are the complete set: a reference to an object that is not supplied then fails instead of staying unverified. |
{
"type": "object",
"required": [
"manifests"
],
"properties": {
"manifests": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200000
},
"maxItems": 20,
"minItems": 1,
"description": "YAML text, multi-document allowed. At most 24000 characters in total (the parser costs about 1 ms per 1,000 characters)."
},
"closedWorld": {
"type": "boolean",
"description": "Declare that the manifests are the complete set: a reference to an object that is not supplied then fails instead of staying unverified."
}
},
"additionalProperties": false
}SPDX license identification from LICENSE text — Normalizes a LICENSE file (SPDX varietal substitutions: whitespace, case, quotes, bullets, copyright lines) and matches it against distinctive phrases of 32 common SPDX licenses (MIT, MIT-0, Apache-2.0, BSD-2/3/4-Clause, 0BSD, GPL-2/3 +/- or-later, LGPL-2.1/3.0 +/- or-later, AGPL-3.0 +/- or-later, MPL-2.0, ISC, Unlicense, CC0-1.0, Zlib, Artistic-2.0, EPL-2.0, BSL-1.0, WTFPL, Python-2.0, PostgreSQL
| Argument | Type | Description |
|---|---|---|
| text* | string | The full LICENSE file content. |
| restrict | array | Only consider these SPDX ids. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"description": "The full LICENSE file content."
},
"restrict": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 40,
"description": "Only consider these SPDX ids."
}
},
"additionalProperties": false
}Resolve git conflict markers in package-lock.json or a YAML lockfile — Takes a lockfile (package-lock.json or a YAML lockfile such as pnpm-lock.yaml) containing git merge-conflict markers, rebuilds both sides, and merges them key by key (using the diff3 base when present), returning the resolved file or the exact conflicting key paths with both values, for agents rebasing or merging branches. An optional prefer=ours|theirs applies one explicit policy to the remaining
| Argument | Type | Description |
|---|---|---|
| format | string | Default auto: JSON when the file starts with { or [. |
| prefer | string | Policy for keys changed on both sides. Default none: report them. |
| content* | string | Whole file text; YAML at most 100000 characters. |
{
"type": "object",
"required": [
"content"
],
"properties": {
"format": {
"enum": [
"auto",
"json",
"yaml"
],
"type": "string",
"description": "Default auto: JSON when the file starts with { or [."
},
"prefer": {
"enum": [
"none",
"ours",
"theirs"
],
"type": "string",
"description": "Policy for keys changed on both sides. Default none: report them."
},
"content": {
"type": "string",
"maxLength": 200000,
"description": "Whole file text; YAML at most 100000 characters."
}
},
"additionalProperties": false
}Does this value survive conversion to another numeric or spreadsheet type? Range, precision, leading zeros, E notation — Takes raw JSON literals (as written, so 9007199254740993, 1e400, -0, "007" and 0.10 are judged on their digits, not on a parsed double) and target types (binary64, binary32, int8..int64, uint8..uint64, PostgreSQL numeric(p,s), Arrow decimal128/decimal256, Parquet decimal, Excel cell, pandas int64) and reports for each pair whether the value is exact, lossy (rounded, truncated, leading zeros or sig
| Argument | Type | Description |
|---|---|---|
| pairs | array | Identifier or text values before and after a round trip through another system. |
| samples | array | Raw JSON scalar literals exactly as written, e.g. 9007199254740993, "007", 1e400, 0.10, null. |
| targets | array | Target types: float64, float32, int8, int16, int32, int64, uint8, uint16, uint32, uint64, numeric(p,s), decimal128(p,s), decimal256(p,s), parquet-decimal(p,s), excel-number, pandas-int64. |
{
"type": "object",
"required": [],
"properties": {
"pairs": {
"type": "array",
"items": {
"type": "object",
"required": [
"before",
"after"
],
"properties": {
"after": {
"type": "string",
"maxLength": 400
},
"before": {
"type": "string",
"maxLength": 400
}
},
"additionalProperties": false
},
"maxItems": 200,
"description": "Identifier or text values before and after a round trip through another system."
},
"samples": {
"type": "array",
"items": {
"type": "string",
"maxLength": 400
},
"maxItems": 200,
"description": "Raw JSON scalar literals exactly as written, e.g. 9007199254740993, \"007\", 1e400, 0.10, null."
},
"targets": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 12,
"description": "Target types: float64, float32, int8, int16, int32, int64, uint8, uint16, uint32, uint64, numeric(p,s), decimal128(p,s), decimal256(p,s), parquet-decimal(p,s), excel-number, pandas-int64."
}
},
"additionalProperties": false
}File type vs leading bytes (magic numbers, disguised HTML, truncation) — Compares a claimed file type (MIME type and/or file name) with the first bytes of the file, for an agent that is about to open, parse or forward a download. Detects PNG, JPEG, GIF, WebP, ZIP and OOXML (docx/xlsx/pptx), GZIP, PDF, MP4 (ftyp), ELF, PE, RAR, BMP, ICO and HTML, flags an HTML login or error page saved as a PDF/image/archive, and reports truncation from end-of-file markers when the last
| Argument | Type | Description |
|---|---|---|
| head* | string | Standard padded base64 of the first bytes of the file (up to 32768 bytes decoded). |
| tail | string | Optional base64 of the last bytes (up to 4096 decoded), used for end-of-file markers when head is not the whole file. |
| complete | boolean | True when head is the entire file; end-of-file markers are then checked on it. |
| totalSize | integer | Optional total file size in bytes, for size-field comparisons (RIFF, MP4 boxes, ZIP directory). |
| claimedMime | string | Claimed Content-Type, parameters ignored. |
| claimedName | string | File name or path; the last extension is the claim. |
{
"type": "object",
"required": [
"head"
],
"properties": {
"head": {
"type": "string",
"maxLength": 43692,
"description": "Standard padded base64 of the first bytes of the file (up to 32768 bytes decoded)."
},
"tail": {
"type": "string",
"maxLength": 5464,
"description": "Optional base64 of the last bytes (up to 4096 decoded), used for end-of-file markers when head is not the whole file."
},
"complete": {
"type": "boolean",
"description": "True when head is the entire file; end-of-file markers are then checked on it."
},
"totalSize": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "Optional total file size in bytes, for size-field comparisons (RIFF, MP4 boxes, ZIP directory)."
},
"claimedMime": {
"type": "string",
"maxLength": 255,
"description": "Claimed Content-Type, parameters ignored."
},
"claimedName": {
"type": "string",
"maxLength": 255,
"description": "File name or path; the last extension is the claim."
}
},
"additionalProperties": false
}STL mesh check: open edges, non-manifold edges, inverted normals — Checks a binary or ASCII STL mesh of up to 4000 triangles for a 3D-printing or CAD agent: open (boundary) edges, edges shared by more than two triangles, inconsistent winding, degenerate and duplicate triangles, normals that disagree with the vertex order, and an inside-out (negative signed volume) closed mesh, with triangle indices as witnesses. Input is base64 of the STL file (up to 200084 bytes
| Argument | Type | Description |
|---|---|---|
| data* | string | Padded base64 of the STL file, binary or ASCII. |
| weldTolerance | number | Vertices closer than this (grid-snapped, model units) are treated as the same vertex. Default 0: exact float32 equality. |
{
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"type": "string",
"maxLength": 266780,
"description": "Padded base64 of the STL file, binary or ASCII."
},
"weldTolerance": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Vertices closer than this (grid-snapped, model units) are treated as the same vertex. Default 0: exact float32 equality."
}
},
"additionalProperties": false
}Whether two metric definitions measure the same thing, and which fields differ — Compares two structured metric definitions field by field (numerator, denominator, aggregation, weighting, population, filters, exclusions, period grain and calendar, timezone, currency, FX and tax basis, unit) and returns which differences make the numbers not comparable, which are adjustable with raw data, and which fields are missing from one side. In drift mode a is the old and b the new defin
| Argument | Type | Description |
|---|---|---|
| a* | object | |
| b* | object | |
| mode | string | drift: a is the previous definition and b the current one under the same name. |
{
"type": "object",
"required": [
"a",
"b"
],
"properties": {
"a": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"unit": {
"type": "string",
"maxLength": 60
},
"period": {
"type": "object",
"properties": {
"end": {
"type": "string",
"maxLength": 40
},
"start": {
"type": "string",
"maxLength": 40
},
"calendar": {
"enum": [
"calendar",
"fiscal",
"iso-week",
"us-week",
"rolling"
],
"type": "string"
},
"timezone": {
"type": "string",
"maxLength": 60
},
"windowDays": {
"type": "integer",
"maximum": 3660,
"minimum": 1
},
"granularity": {
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year",
"rolling"
],
"type": "string"
}
},
"additionalProperties": false
},
"filters": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 30,
"description": "Inclusion filters."
},
"currency": {
"type": "object",
"properties": {
"code": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "ISO 4217 alphabetic code."
},
"fxBasis": {
"enum": [
"none",
"transaction-date",
"period-average",
"period-end",
"fixed-rate"
],
"type": "string"
},
"taxBasis": {
"enum": [
"gross",
"net",
"unspecified"
],
"type": "string"
}
},
"additionalProperties": false
},
"numerator": {
"type": "string",
"maxLength": 300,
"description": "What is counted or summed, in words or SQL-free prose."
},
"weighting": {
"enum": [
"none",
"equal",
"volume",
"revenue",
"custom"
],
"type": "string"
},
"exclusions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 30,
"description": "Excluded records (test accounts, refunds, internal traffic)."
},
"population": {
"type": "string",
"maxLength": 300,
"description": "Who or what is measured (all users, paying accounts, active devices)."
},
"aggregation": {
"enum": [
"sum",
"count",
"distinct-count",
"mean",
"median",
"max",
"min",
"percentile",
"ratio-of-sums",
"mean-of-ratios"
],
"type": "string"
},
"denominator": {
"type": "string",
"maxLength": 300,
"description": "The base of a ratio; omit for counts and sums."
},
"definitionVersion": {
"type": "string",
"maxLength": 60
}
},
"additionalProperties": false
},
"b": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"unit": {
"type": "string",
"maxLength": 60
},
"period": {
"type": "object",
"properties": {
"end": {
"type": "string",
"maxLength": 40
},
"start": {
"type": "string",
"maxLength": 40
},
"calendar": {
"enum": [
"calendar",
"fiscal",
"iso-week",
"us-week",
"rolling"
],
"type": "string"
},
"timezone": {
"type": "string",
"maxLength": 60
},
"windowDays": {
"type": "integer",
"maximum": 3660,
"minimum": 1
},
"granularity": {
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year",
"rolling"
],
"type": "string"
}
},
"additionalProperties": false
},
"filters": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 30,
"description": "Inclusion filters."
},
"currency": {
"type": "object",
"properties": {
"code": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "ISO 4217 alphabetic code."
},
"fxBasis": {
"enum": [
"none",
"transaction-date",
"period-average",
"period-end",
"fixed-rate"
],
"type": "string"
},
"taxBasis": {
"enum": [
"gross",
"net",
"unspecified"
],
"type": "string"
}
},
"additionalProperties": false
},
"numerator": {
"type": "string",
"maxLength": 300,
"description": "What is counted or summed, in words or SQL-free prose."
},
"weighting": {
"enum": [
"none",
"equal",
"volume",
"revenue",
"custom"
],
"type": "string"
},
"exclusions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 30,
"description": "Excluded records (test accounts, refunds, internal traffic)."
},
"population": {
"type": "string",
"maxLength": 300,
"description": "Who or what is measured (all users, paying accounts, active devices)."
},
"aggregation": {
"enum": [
"sum",
"count",
"distinct-count",
"mean",
"median",
"max",
"min",
"percentile",
"ratio-of-sums",
"mean-of-ratios"
],
"type": "string"
},
"denominator": {
"type": "string",
"maxLength": 300,
"description": "The base of a ratio; omit for counts and sums."
},
"definitionVersion": {
"type": "string",
"maxLength": 60
}
},
"additionalProperties": false
},
"mode": {
"enum": [
"compare",
"drift"
],
"type": "string",
"description": "drift: a is the previous definition and b the current one under the same name."
}
},
"additionalProperties": false
}Migration DDL: data-loss and rollback hazards per dialect — Classifies each statement of a PostgreSQL, MySQL or SQLite migration (up to 20000 characters) as reversible, needing a backup, needing the original definition, or irreversible, for agents that write or review schema migrations. Flags DROP TABLE/COLUMN, TRUNCATE, unbounded DELETE/UPDATE, lossy type changes, NOT NULL or constraints that fail on existing rows, table-rewrite and lock hazards, and MySQ
| Argument | Type | Description |
|---|---|---|
| sql* | string | The migration's statements. |
| dialect* | string |
{
"type": "object",
"required": [
"sql",
"dialect"
],
"properties": {
"sql": {
"type": "string",
"maxLength": 20000,
"description": "The migration's statements."
},
"dialect": {
"enum": [
"postgres",
"mysql",
"sqlite"
],
"type": "string"
}
},
"additionalProperties": false
}OpenAPI 3.x breaking-change diff — Diffs two OpenAPI 3.x documents and classifies every delta as breaking, compatible or informational. Breaking: removed path/operation/response status/media type, type/format/pattern tightening, enum value removed, required property added, request body became required, maximum lowered or minimum raised, nullable removed. Compatible: additions (new paths, optional params, enum values, response statu
| Argument | Type | Description |
|---|---|---|
| base* | object | The previously-published OpenAPI 3.x document. |
| head* | object | The proposed OpenAPI 3.x document. |
{
"type": "object",
"required": [
"base",
"head"
],
"properties": {
"base": {
"type": "object",
"description": "The previously-published OpenAPI 3.x document."
},
"head": {
"type": "object",
"description": "The proposed OpenAPI 3.x document."
}
},
"additionalProperties": false
}Slice one operation out of an OpenAPI 3.0 or 3.1 document with every component it needs — Extracts one operation (path plus HTTP method, matching templated paths like /pets/{id}) from an OpenAPI 3.0.x or 3.1.x document, given as JSON, YAML or a parsed object, and returns a smaller valid OpenAPI document holding that operation, its path-level parameters and servers, and the transitive closure of every local $ref it uses: schemas, parameters, requestBodies, responses, headers, examples,
| Argument | Type | Description |
|---|---|---|
| path* | string | Concrete or templated path, e.g. /pets/{petId} or /pets/42. |
| spec | any | The OpenAPI document as a JSON object (use specText for YAML). |
| method* | string | |
| specText | string | The OpenAPI document as JSON text (up to 400000 characters) or YAML text (up to 50000 characters). |
{
"type": "object",
"required": [
"path",
"method"
],
"properties": {
"path": {
"type": "string",
"maxLength": 500,
"description": "Concrete or templated path, e.g. /pets/{petId} or /pets/42."
},
"spec": {
"description": "The OpenAPI document as a JSON object (use specText for YAML)."
},
"method": {
"enum": [
"get",
"put",
"post",
"delete",
"options",
"head",
"patch",
"trace"
],
"type": "string"
},
"specText": {
"type": "string",
"maxLength": 400000,
"description": "The OpenAPI document as JSON text (up to 400000 characters) or YAML text (up to 50000 characters)."
}
},
"additionalProperties": false
}Package exists on npm, PyPI or crates.io (hallucinated dependency check) — Checks whether up to 10 package names (optionally with a version) exist in the live npm, PyPI or crates.io registry, for coding agents about to add a dependency they may have invented. Per package: exists, latest version, deprecated or yanked flag, and for a missing name the closest names the registry's own search returns (npm, crates.io; PyPI has no search API). Reads registry metadata only: neve
| Argument | Type | Description |
|---|---|---|
| items* | array | At most 5 items for crates.io (its API policy allows one request per second). |
| ecosystem* | string |
{
"type": "object",
"required": [
"ecosystem",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 214
},
"version": {
"type": "string",
"maxLength": 64,
"description": "Exact version (npm also accepts a dist-tag)."
}
},
"additionalProperties": false
},
"maxItems": 10,
"minItems": 1,
"description": "At most 5 items for crates.io (its API policy allows one request per second)."
},
"ecosystem": {
"enum": [
"npm",
"pypi",
"crates"
],
"type": "string"
}
},
"additionalProperties": false
}Page capture: screenshot or PDF of a public URL — Renders one public web page in a real browser (Cloudflare Browser Run, JavaScript enabled) and returns a PNG or JPEG screenshot or a PDF as base64 with its sha256, for agents that need to see or archive a page. Does not log in, click or fill forms, does not capture private or internal hosts, and returns an error rather than a capture larger than 6 MB.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL. |
| output | string | |
| viewport | object | Default 1280x800. |
| full_page | boolean | Capture the full scroll height (screenshots only; a PDF is always the whole page). |
| timeout_ms | integer | Page navigation timeout. |
| wait_until | string |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 8,
"description": "Public http(s) URL."
},
"output": {
"enum": [
"png",
"jpeg",
"pdf"
],
"type": "string",
"default": "png"
},
"viewport": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer",
"maximum": 1920,
"minimum": 320
},
"height": {
"type": "integer",
"maximum": 1080,
"minimum": 320
}
},
"description": "Default 1280x800.",
"additionalProperties": false
},
"full_page": {
"type": "boolean",
"default": false,
"description": "Capture the full scroll height (screenshots only; a PDF is always the whole page)."
},
"timeout_ms": {
"type": "integer",
"default": 15000,
"maximum": 30000,
"minimum": 1000,
"description": "Page navigation timeout."
},
"wait_until": {
"enum": [
"load",
"networkidle0"
],
"type": "string",
"default": "load"
}
},
"additionalProperties": false
}Page contents: URL to clean Markdown or text — Fetches one public web page and returns its main content as clean GitHub-flavored Markdown or plain text, with title, canonical URL, language, absolute links and content hashes, for agents that feed pages to a model. Deterministic, no model. Does not run JavaScript (client-rendered pages come back sparse), does not follow links, does not consult robots.txt, and drops navigation, footers, sidebars
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL. |
| format | string | |
| max_chars | integer | Content is cut to this many characters; truncated says whether it was. |
| include_links | boolean | Keep Markdown links and return a links list (at most 200). |
| include_tables | boolean | Convert data tables to GFM tables; false drops them. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 8,
"description": "Public http(s) URL."
},
"format": {
"enum": [
"markdown",
"text"
],
"type": "string",
"default": "markdown"
},
"max_chars": {
"type": "integer",
"default": 60000,
"maximum": 200000,
"minimum": 1000,
"description": "Content is cut to this many characters; truncated says whether it was."
},
"include_links": {
"type": "boolean",
"default": true,
"description": "Keep Markdown links and return a links list (at most 200)."
},
"include_tables": {
"type": "boolean",
"default": true,
"description": "Convert data tables to GFM tables; false drops them."
}
},
"additionalProperties": false
}File path portability check across Windows, macOS and Linux — Checks up to 500 relative file paths for names that break or collide on Windows, macOS or Linux: Windows reserved device names (CON.txt, NUL.tar.gz, COM¹), reserved characters, trailing dots and spaces, component and total length limits, and distinct paths that become one file through case folding or NFC/NFD normalization. For an agent that writes files from an archive, a generated tree or a repo
| Argument | Type | Description |
|---|---|---|
| paths* | array | Relative paths with "/" separators. At most 200000 characters in total. |
| targets | array | Default: windows, macos and linux. |
| destinationRoot | string | Directory the paths will be created under; counted towards the total path length. |
{
"type": "object",
"required": [
"paths"
],
"properties": {
"paths": {
"type": "array",
"items": {
"type": "string",
"maxLength": 4096,
"minLength": 1
},
"maxItems": 500,
"minItems": 1,
"description": "Relative paths with \"/\" separators. At most 200000 characters in total."
},
"targets": {
"type": "array",
"items": {
"enum": [
"windows",
"macos",
"linux"
],
"type": "string"
},
"maxItems": 3,
"description": "Default: windows, macos and linux."
},
"destinationRoot": {
"type": "string",
"maxLength": 1024,
"description": "Directory the paths will be created under; counted towards the total path length."
}
},
"additionalProperties": false
}Which gitignore, CODEOWNERS or glob rule matches a path — Evaluates up to 25 file paths against the text of a .gitignore, a CODEOWNERS file or a list of glob patterns and reports, per path, whether it matched, the winning rule's line and pattern, and why (last match wins, directory-only rules, negation, a re-include blocked by an excluded parent directory, CODEOWNERS owner lists). Optional per-path expectations turn it into a pass/fail check, and CODEOWN
| Argument | Type | Description |
|---|---|---|
| kind* | string | |
| paths* | array | |
| rules* | string | File text, at most 300 pattern lines. |
{
"type": "object",
"required": [
"kind",
"rules",
"paths"
],
"properties": {
"kind": {
"enum": [
"gitignore",
"codeowners",
"glob"
],
"type": "string"
},
"paths": {
"type": "array",
"items": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 300,
"description": "Repository-relative path with / separators, at most 12 segments."
},
"isDir": {
"type": "boolean",
"description": "gitignore/glob: the path is a directory (a trailing / also says so)."
},
"expect": {
"enum": [
"match",
"no-match"
],
"type": "string",
"description": "match = ignored (gitignore), owned (codeowners, default), matched (glob)."
}
},
"additionalProperties": false
},
"maxItems": 25,
"minItems": 1
},
"rules": {
"type": "string",
"maxLength": 40000,
"description": "File text, at most 300 pattern lines."
}
},
"additionalProperties": false
}Privilege expansion between two manifests: npm, Chrome extension, Android — Compares an old and a new manifest and reports every way the new one gains privilege, for agents reviewing dependency bumps and extension or app updates. npm package.json: new or changed install-time lifecycle scripts, gypfile, bin entries and URL/git/file dependencies (including overrides). Chrome manifest.json: added permissions with Chrome's own warning text, host access not covered by the old
| Argument | Type | Description |
|---|---|---|
| kind* | string | Manifest format of both documents. |
| after* | string | New manifest text. |
| before* | string | Old manifest text (package.json, manifest.json or AndroidManifest.xml). |
| threshold | string | any (default): every added permission fails. sensitive: ignore Chrome permissions without a warning and Android normal permissions. |
{
"type": "object",
"required": [
"kind",
"before",
"after"
],
"properties": {
"kind": {
"enum": [
"npm",
"chrome-extension",
"android"
],
"type": "string",
"description": "Manifest format of both documents."
},
"after": {
"type": "string",
"maxLength": 100000,
"description": "New manifest text."
},
"before": {
"type": "string",
"maxLength": 100000,
"description": "Old manifest text (package.json, manifest.json or AndroidManifest.xml)."
},
"threshold": {
"enum": [
"any",
"sensitive"
],
"type": "string",
"description": "any (default): every added permission fails. sensitive: ignore Chrome permissions without a warning and Android normal permissions."
}
},
"additionalProperties": false
}Pre-merge Review Pack — One unified diff in, one merge decision out: the PR exploit gatekeeper (bug hunter, patch synthesizer, secret/dependency/SAST scans) plus the adversarial Unicode / Trojan Source gate. Runs diff-gatekeeper ($0.50) + unicode-safety-gate ($0.25) in one paid call for 20% less than buying them separately. Charged only when every member succeeds.
| Argument | Type | Description |
|---|---|---|
| diff* | string | Unified diff of the change (git diff / PR .diff). |
| context | string | What the PR is supposed to do. |
| packageJsonDiff | string |
{
"type": "object",
"required": [
"diff"
],
"properties": {
"diff": {
"type": "string",
"maxLength": 300000,
"minLength": 1,
"description": "Unified diff of the change (git diff / PR .diff)."
},
"context": {
"type": "string",
"maxLength": 4000,
"description": "What the PR is supposed to do."
},
"packageJsonDiff": {
"type": "string",
"maxLength": 50000
}
},
"additionalProperties": false
}PDF page box check: trim, bleed and safe area from supplied boxes — Checks the five PDF page boxes you supply (MediaBox, CropBox, BleedBox, TrimBox, ArtBox, in points) for a print job: applies the ISO 32000-1 defaults and media-box clipping, measures bleed on each side of the trim box, and tests the content box against a safe margin inside the trim, for agents that prepare or accept print-ready PDFs. It does not read a PDF file, check fonts, colour, image resoluti
| Argument | Type | Description |
|---|---|---|
| userUnit | number | The page's UserUnit (default 1): the size of one user space unit in 1/72 inch. |
| pageBoxes* | object | mediaBox is required; the others are optional and default per ISO 32000-1 (cropBox to mediaBox; bleedBox, trimBox, artBox to cropBox). |
| contentBox | array | Bounding box of the live content, same coordinates as the page boxes. If absent the ArtBox (when supplied) is used. |
| requirements | object |
{
"type": "object",
"required": [
"pageBoxes"
],
"properties": {
"userUnit": {
"type": "number",
"maximum": 1000,
"minimum": 0.0001,
"description": "The page's UserUnit (default 1): the size of one user space unit in 1/72 inch."
},
"pageBoxes": {
"type": "object",
"required": [
"mediaBox"
],
"properties": {
"artBox": {
"type": "array",
"items": {
"type": "number",
"maximum": 10000000,
"minimum": -10000000
},
"maxItems": 4,
"minItems": 4,
"description": "[x1 y1 x2 y2] in default user space units; any two diagonal corners."
},
"cropBox": {
"type": "array",
"items": {
"type": "number",
"maximum": 10000000,
"minimum": -10000000
},
"maxItems": 4,
"minItems": 4,
"description": "[x1 y1 x2 y2] in default user space units; any two diagonal corners."
},
"trimBox": {
"type": "array",
"items": {
"type": "number",
"maximum": 10000000,
"minimum": -10000000
},
"maxItems": 4,
"minItems": 4,
"description": "[x1 y1 x2 y2] in default user space units; any two diagonal corners."
},
"bleedBox": {
"type": "array",
"items": {
"type": "number",
"maximum": 10000000,
"minimum": -10000000
},
"maxItems": 4,
"minItems": 4,
"description": "[x1 y1 x2 y2] in default user space units; any two diagonal corners."
},
"mediaBox": {
"type": "array",
"items": {
"type": "number",
"maximum": 10000000,
"minimum": -10000000
},
"maxItems": 4,
"minItems": 4,
"description": "[x1 y1 x2 y2] in default user space units; any two diagonal corners."
}
},
"description": "mediaBox is required; the others are optional and default per ISO 32000-1 (cropBox to mediaBox; bleedBox, trimBox, artBox to cropBox).",
"additionalProperties": false
},
"contentBox": {
"type": "array",
"items": {
"type": "number",
"maximum": 10000000,
"minimum": -10000000
},
"maxItems": 4,
"minItems": 4,
"description": "Bounding box of the live content, same coordinates as the page boxes. If absent the ArtBox (when supplied) is used."
},
"requirements": {
"type": "object",
"properties": {
"unit": {
"enum": [
"pt",
"mm",
"in"
],
"type": "string",
"description": "Unit of minBleed and safeMargin; default mm. pt means points (1/72 inch) of user space after UserUnit."
},
"minBleed": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Smallest allowed distance from trim to bleed box on every side."
},
"safeMargin": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "Smallest allowed distance from trim to live content on every side."
},
"tolerancePt": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Slack in points before a shortfall counts (default 0.01) so 3 mm written as 8.5 pt is not a failure."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Redirect chain credential-leak check — Walks a supplied HTTP redirect chain (up to 25 hops of status + Location) for an agent or HTTP client author and reports, per hop, which of the request's header names (Authorization, Cookie, Proxy-Authorization, API-key-like, Referer) are stripped or still forwarded, the method after the hop (301/302 POST to GET, 303, 307/308), whether the hop crosses origin, scheme, or registrable domain, an http
| Argument | Type | Description |
|---|---|---|
| hops* | array | |
| method | string | Initial request method. Default GET. |
| requestUrl* | string | Initial absolute URL. |
| publicSuffixes | array | Extra public suffixes for registrable-domain decisions. |
| requestHeaderNames* | array | Names of headers on the initial request. Never send values. |
| clientStripsOnCrossOrigin | array | Header names your client deletes on an origin change. Default: ["authorization"], the Fetch Standard rule. |
{
"type": "object",
"required": [
"requestUrl",
"requestHeaderNames",
"hops"
],
"properties": {
"hops": {
"type": "array",
"items": {
"type": "object",
"required": [
"status",
"location"
],
"properties": {
"status": {
"enum": [
301,
302,
303,
307,
308
],
"type": "integer"
},
"location": {
"type": "string",
"maxLength": 2048,
"description": "Location header value; relative references resolve against the previous URL."
}
},
"additionalProperties": false
},
"maxItems": 25,
"minItems": 1
},
"method": {
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"type": "string",
"description": "Initial request method. Default GET."
},
"requestUrl": {
"type": "string",
"maxLength": 2048,
"description": "Initial absolute URL."
},
"publicSuffixes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"description": "Extra public suffixes for registrable-domain decisions."
},
"requestHeaderNames": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 40,
"description": "Names of headers on the initial request. Never send values."
},
"clientStripsOnCrossOrigin": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 40,
"description": "Header names your client deletes on an origin change. Default: [\"authorization\"], the Fetch Standard rule."
}
},
"additionalProperties": false
}Regex catastrophic-backtracking check, then test cases only if proven safe — Statically analyses an ECMAScript regular expression (up to 500 characters) for catastrophic backtracking (nested or overlapping quantifiers, ambiguous alternation in a loop, backreferences, lookarounds) for agents that write or accept regexes. Runs the caller's test subjects (up to 20, 1000 characters each) only when the pattern is proven polynomially bounded and the subject is short enough for t
| Argument | Type | Description |
|---|---|---|
| cases | array | Subjects to test; at most 10000 characters in total. |
| flags | string | Flags among dgimsuy (v is reported unsupported). |
| pattern* | string | ECMAScript regex source, without slashes. |
{
"type": "object",
"required": [
"pattern"
],
"properties": {
"cases": {
"type": "array",
"items": {
"type": "object",
"required": [
"subject"
],
"properties": {
"subject": {
"type": "string",
"maxLength": 1000
},
"expectMatch": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "Subjects to test; at most 10000 characters in total."
},
"flags": {
"type": "string",
"pattern": "^[dgimsuvy]*$",
"maxLength": 8,
"description": "Flags among dgimsuy (v is reported unsupported)."
},
"pattern": {
"type": "string",
"maxLength": 500,
"description": "ECMAScript regex source, without slashes."
}
},
"additionalProperties": false
}robots.txt (RFC 9309) rule reading with llms.txt and AI-use signals — Reads a supplied robots.txt the RFC 9309 way for an agent deciding whether to fetch up to 25 paths as one product-token user agent: group selection (merged groups, "*" fallback), longest-match with the Allow-wins-tie rule, "*" and "$" patterns, percent-encoding normalization, fetch-status handling (4xx = no rules, 5xx = disallow all), the rule and line that decided each path. It also lints a suppl
| Argument | Type | Description |
|---|---|---|
| paths* | array | Path plus optional query beginning with /, or a full http(s) URL (path and query are used). |
| headers | array | Response headers of the page: X-Robots-Tag, tdm-reservation, tdm-policy. |
| llmsTxt | string | |
| purpose | string | ai-training also treats noai, noimageai and tdm-reservation: 1 as restrictions. Default crawl. |
| metaTags | array | HTML meta elements: robots, googlebot, tdm-reservation, tdm-policy. |
| robotsTxt | string | robots.txt body, at most 512,000 UTF-8 bytes (500 KiB). |
| userAgent* | string | Product token only (letters, underscore, hyphen), e.g. "Googlebot"; no version. |
| fetchStatus |
Breaking-change diff between two JSON Schemas or OpenAPI documents, and whether cached calls still validate — Compares an old and a new JSON Schema 2020-12 (or two OpenAPI 3.0/3.1 documents) and lists each change with its path, keyword, old and new value, whether it narrows or widens what is accepted, and whether it breaks clients: newly required properties, removed or retyped properties, removed enum values, tightened limits, additionalProperties flips, removed operations, removed or newly required param
| Argument | Type | Description |
|---|---|---|
| kind* | string | |
| role | string | json-schema only: request (default) or response; OpenAPI compares each side in its own role. |
| after* | any | The new schema, or new OpenAPI document. Full JSON Schema 2020-12 (local $ref only). |
| calls | array | |
| before* | any | The old schema, or old OpenAPI document. Full JSON Schema 2020-12 (local $ref only). |
{
"type": "object",
"required": [
"before",
"after",
"kind"
],
"properties": {
"kind": {
"enum": [
"json-schema",
"openapi"
],
"type": "string"
},
"role": {
"enum": [
"request",
"response"
],
"type": "string",
"description": "json-schema only: request (default) or response; OpenAPI compares each side in its own role."
},
"after": {
"description": "The new schema, or new OpenAPI document. Full JSON Schema 2020-12 (local $ref only)."
},
"calls": {
"type": "array",
"items": {
"type": "object",
"required": [
"arguments"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"arguments": {
"description": "Cached call arguments (JSON schema: validated against the root; OpenAPI: against the operation's JSON request body)."
},
"operation": {
"type": "object",
"required": [
"path",
"method"
],
"properties": {
"path": {
"type": "string",
"maxLength": 500
},
"method": {
"enum": [
"get",
"put",
"post",
"delete",
"options",
"head",
"patch",
"trace"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"maxItems": 50
},
"before": {
"description": "The old schema, or old OpenAPI document. Full JSON Schema 2020-12 (local $ref only)."
}
},
"additionalProperties": false
}Repair a JSON value toward a schema using only the coercions the caller declares — Validates a JSON value against a caller-supplied JSON Schema 2020-12 and applies only the coercions you list (for example string-to-integer for "42", trim-strings, enum-case, apply-defaults, drop-additional) when each one strictly reduces the number of schema errors. Every change is returned with its JSON pointer, the rule, the old and new value; every error that remains is returned with its exact
| Argument | Type | Description |
|---|---|---|
| value* | any | The JSON value to repair. |
| schema* | any | The schema the value must satisfy. Full JSON Schema 2020-12 (local $ref only). |
| coercions* | array | Coercions you allow. Empty means validate only. |
{
"type": "object",
"required": [
"schema",
"value",
"coercions"
],
"properties": {
"value": {
"description": "The JSON value to repair."
},
"schema": {
"description": "The schema the value must satisfy. Full JSON Schema 2020-12 (local $ref only)."
},
"coercions": {
"type": "array",
"items": {
"enum": [
"string-to-number",
"string-to-integer",
"string-to-boolean",
"number-to-string",
"boolean-to-string",
"trim-strings",
"enum-case",
"empty-string-to-null",
"null-to-default",
"apply-defaults",
"drop-additional",
"wrap-in-array",
"unwrap-single-element-array"
],
"type": "string"
},
"maxItems": 13,
"minItems": 0,
"description": "Coercions you allow. Empty means validate only."
}
},
"additionalProperties": false
}One valid and one invalid example for each constraint in a JSON Schema — Walks a caller-supplied JSON Schema 2020-12 and, for every constraint keyword (type, enum, const, minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, minLength, maxLength, pattern, format, minItems, maxItems, uniqueItems, required, minProperties, maxProperties, additionalProperties false, dependentRequired), returns the JSON pointer of the constraint, an example that satisfies it and
| Argument | Type | Description |
|---|---|---|
| schema* | any | The schema to generate examples for. Full JSON Schema 2020-12 (local $ref only). |
| maxConstraints | integer | Stop after this many constraints (default 100). |
{
"type": "object",
"required": [
"schema"
],
"properties": {
"schema": {
"description": "The schema to generate examples for. Full JSON Schema 2020-12 (local $ref only)."
},
"maxConstraints": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Stop after this many constraints (default 100)."
}
},
"additionalProperties": false
}Version range check: npm, PEP 440, Cargo, Maven — Parses a dependency version range in npm (node-semver), PEP 440 specifier, Cargo requirement or Maven range syntax and tests up to 100 candidate versions against it, for agents that write or review manifests. Returns per-version satisfies/violates with the failing comparator, the normalized range, the sorted versions and the highest match; pre-release, caret on 0.x, epoch and local-version rules f
| Argument | Type | Description |
|---|---|---|
| range* | string | The range: npm '^1.2.3 || >=2', PEP 440 '>=1.0,<2', Cargo '>=1.2, <1.5', Maven '[1.0,2.0)'. |
| versions | array | Candidate versions to test; omit to only validate the range. |
| ecosystem* | string | Which range syntax and version ordering to apply. |
| prereleases | boolean | npm includePrerelease / PEP 440 prereleases=true. Default false (ecosystem default exclusion applies). |
{
"type": "object",
"required": [
"ecosystem",
"range"
],
"properties": {
"range": {
"type": "string",
"maxLength": 300,
"description": "The range: npm '^1.2.3 || >=2', PEP 440 '>=1.0,<2', Cargo '>=1.2, <1.5', Maven '[1.0,2.0)'."
},
"versions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 100,
"description": "Candidate versions to test; omit to only validate the range."
},
"ecosystem": {
"enum": [
"npm",
"pep440",
"cargo",
"maven"
],
"type": "string",
"description": "Which range syntax and version ordering to apply."
},
"prereleases": {
"type": "boolean",
"description": "npm includePrerelease / PEP 440 prereleases=true. Default false (ecosystem default exclusion applies)."
}
},
"additionalProperties": false
}Placeholder values hiding as data: caller-declared sentinels and likely candidates — Scans columns of values for sentinels. Values you declare in a dictionary (for example -1 means unknown in column age) are reported as asserted hits with their row paths. Other values that look like missing-data markers are reported separately as candidates, never asserted: the pandas default NA strings, spreadsheet error values, whitespace-only text, placeholder words, zero and epoch dates, fixed
| Argument | Type | Description |
|---|---|---|
| columns* | array | |
| dictionary | array | Values you know are sentinels. |
{
"type": "object",
"required": [
"columns"
],
"properties": {
"columns": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"values"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"values": {
"type": "array",
"items": {
"description": "A cell: string, number, boolean or null."
},
"maxItems": 2000
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"dictionary": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"description": "The sentinel value (string, number or boolean); matched by type and value."
},
"column": {
"type": "string",
"maxLength": 100,
"description": "Limit the entry to this column; omit for all columns."
},
"meaning": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false
},
"maxItems": 100,
"description": "Values you know are sentinels."
}
},
"additionalProperties": false
}Shell quoting for bash, PowerShell and cmd.exe with a parse-back check — Turns up to 50 literal strings into a safely quoted argument for bash/sh (POSIX single-quote method), PowerShell (single-quoted literal) and cmd.exe, for agents that build a command line from untrusted or free-form text, and parses each result back with a model of that shell's rules to prove it yields the original string. It returns `unsupported` for strings cmd.exe cannot carry safely (line break
| Argument | Type | Description |
|---|---|---|
| values* | array | Literal argument values; at most 100000 characters in total. |
| targets | array | Shells to quote for; default all three. Status is unsupported when any requested target cannot carry a value. |
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string",
"maxLength": 4096
},
"maxItems": 50,
"minItems": 1,
"description": "Literal argument values; at most 100000 characters in total."
},
"targets": {
"type": "array",
"items": {
"enum": [
"bash",
"powershell",
"cmd"
],
"type": "string"
},
"maxItems": 3,
"minItems": 1,
"description": "Shells to quote for; default all three. Status is unsupported when any requested target cannot carry a value."
}
},
"additionalProperties": false
}SMT Contract & Policy Logic Prover — Answers a yes/no logic question about contract clauses, IAM/OPA policies or business rules with a solver-backed result and a plain-language headline and next step. Takes clauses or pasted text (or a formal IR directly with zero LLM calls), formalizes them into typed Boolean, integer and rational constraints, then answers "is P possible", "does invariant I always hold" or "are any clauses contradic
| Argument | Type | Description |
|---|---|---|
| ir | object | Formal IR, solved with zero LLM calls: {variables:[{name,type:bool|int|real,min?,max?}], constraints:[{id,expr,source?}], query:{mode:possible|always|consistency,formula?,source?}}. Expressions are JSON ASTs: {op:"var",name}, {op:"num",value:"3/4"}, {op:"true"|"false"}, and {op,args} for not, and, or, implies, iff, ite, =, !=, <, <=, >, >=, add, sub, neg, mul (one side constant). Numbers are exact strings. |
| text | string | Alternative to clauses: the contract, policy or rules pasted as plain text. It is split into clauses by blank lines and numbered or bulleted lines (ids C1.2 or S3). Use clauses when you need your own ids. Requires query. |
| query | string | The question, e.g. "Can an unauthorized user ever approve a payout over $10,000?" or "Are any clauses mutually contradictory?". Required with clauses. |
| budget | object | Optional lower step budgets. |
| clauses | array | Natural-language contract clauses, IAM/OPA policy statements or business rules, each with a caller-chosen id. Mutually exclusive with ir. |
SPDX license expression parse and policy check — Parses up to 50 SPDX license expressions (AND, OR, WITH exceptions, + or-later, LicenseRef) and evaluates each against a caller policy (allow list, deny list, allowed exceptions, OSI/FSF flags, copyleft tier) for agents vetting dependency licenses. Returns the canonical expression, per-license flags from the pinned SPDX License List, the verdict, and which licenses satisfy an OR. Does not detect l
| Argument | Type | Description |
|---|---|---|
| deny | array | SPDX ids that always fail. |
| allow | array | If non-empty, only these SPDX ids pass (GPL-2.0-only and GPL-2.0 are the same entry; GPL-2.0+ means or-later and must be listed as such). |
| expressions* | array | SPDX expressions, e.g. 'MIT OR (GPL-2.0-only WITH Classpath-exception-2.0)'. |
| denyCopyleft | string | Id-family heuristic: strong = GPL/AGPL/SSPL/EUPL/OSL/CC-BY-SA; any adds LGPL/MPL/EPL/CDDL and similar. |
| allowDeprecated | boolean | Default true: deprecated ids only add a witness. false: they fail. |
| allowExceptions | array | If non-empty, only these WITH exception ids pass. |
| requireFsfLibre | boolean | Fail licenses without isFsfLibre in the SPDX list. |
SQL guard: single statement, read-only, table allowlist — Checks one SQL string (up to 20000 characters; PostgreSQL, MySQL, SQLite or generic) before an agent executes it: exactly one statement, read-only (SELECT/VALUES/SHOW/EXPLAIN without side effects), and every table it reads or writes on a caller allowlist. Tokenizer-level: comments, string literals, quoted identifiers and dollar quoting cannot hide a second statement; reports statement kind, refere
| Argument | Type | Description |
|---|---|---|
| sql* | string | |
| dialect | string | Lexical rules; default ansi. |
| readOnly | boolean | Default true: anything but a plain read fails. |
| transpileTo | string | Always answered unsupported. |
| allowedTables | array | Allowed tables, lower-cased match: 'users', 'public.users' or 'public.*'. Unqualified and qualified names are different entries. |
{
"type": "object",
"required": [
"sql"
],
"properties": {
"sql": {
"type": "string",
"maxLength": 20000
},
"dialect": {
"enum": [
"postgres",
"mysql",
"sqlite",
"ansi"
],
"type": "string",
"description": "Lexical rules; default ansi."
},
"readOnly": {
"type": "boolean",
"description": "Default true: anything but a plain read fails."
},
"transpileTo": {
"enum": [
"postgres",
"mysql",
"sqlite",
"bigquery",
"snowflake",
"tsql"
],
"type": "string",
"description": "Always answered unsupported."
},
"allowedTables": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 200,
"description": "Allowed tables, lower-cased match: 'users', 'public.users' or 'public.*'. Unqualified and qualified names are different entries."
}
},
"additionalProperties": false
}State Machine Model Checker — Returns PASS, FAIL or INCONCLUSIVE for a finite state machine, protocol, or concurrent routine, with the shortest failing path as readable process.transition steps and a next step. Accepts a formal spec (no LLM), a plain-language workflow, or source code (translated to a spec by an LLM, with every transition quoted from the source and two independent translations compared). A pure TypeScript expli
| Argument | Type | Description |
|---|---|---|
| code | string | Source code of a state machine, protocol, or concurrent routine; translated to a spec by an LLM, with each transition carrying its verbatim source span. |
| spec | object | Formal spec (zero LLM calls). {vars:{name:{type:'bool'|'int'|'enum'|'array',min,max,values,size|keys,of,init}}, processes:[{name,instances?,fairness?:'none'|'weak'|'strong',transitions:[{name,guard?,updates:[{var,at?,value}]}]}], initWhere?, terminal?, progress?, invariants:[{name,expr}], liveness:[{name,kind:'eventually'|'alwaysEventually'|'leadsTo',p,q?}]}. Expressions are JSON nodes ({var,at?}, {sym}, {param}, {op,args}, forall/exists) or infix strings such as "pc[self] == wait && !flag[1 - self]"; nothing is evaluated as code. |
| options | object | |
| properties | array | Properties to check, in plain language (with description or code only). |
| description | string | Natural-language workflow or protocol; translated to a spec by an LLM, with each transition quoted from the text. |
SVG layout check: clipping, overlaps and empty shapes from supplied geometry — Checks up to 200 SVG shapes you describe (rect, circle, ellipse, line, polygon, polyline, text, or a path's bounding box) against the viewBox and viewport the way an SVG renderer would: finds shapes clipped or entirely outside the drawn region, shapes that render nothing (zero or negative size, unstroked line), partial overlaps between shapes, and a zero, negative or malformed viewBox, for agents
| Argument | Type | Description |
|---|---|---|
| width | number | Viewport width in px (the svg width attribute). |
| checks | array | Subset of clip, empty, overlap; default all. Overlap reports partial overlaps only; a shape fully inside another (a label on a card) is listed as nested and never fails. |
| height | number | Viewport height in px. |
| shapes* | array | Shapes in user coordinates (no transform). rect: x,y,width,height. circle: cx,cy,r. ellipse: cx,cy,rx,ry. line: x1,y1,x2,y2,strokeWidth. polygon/polyline: points. text: x,y,text,fontSize,textAnchor. bbox: bbox [minX,minY,maxX,maxY] for a path you measured yourself. |
| viewBox | string | The viewBox attribute value, e.g. "0 0 800 600". |
| preserveAspectRatio | string | Default xMidYMid meet. |
{
"type": "object",
"required": [
"shapes"
],
"properties": {
"width": {
"type": "number",
"maximum": 10000000,
"minimum": 0.001,
"description": "Viewport width in px (the svg width attribute)."
},
"checks": {
"type": "array",
"items": {
"enum": [
"clip",
"empty",
"overlap"
],
"type": "string"
},
"maxItems": 3,
"description": "Subset of clip, empty, overlap; default all. Overlap reports partial overlaps only; a shape fully inside another (a label on a card) is listed as nested and never fails."
},
"height": {
"type": "number",
"maximum": 10000000,
"minimum": 0.001,
"description": "Viewport height in px."
},
"shapes": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"r": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"x": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"y": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"cx": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"cy": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"id": {
"type": "string",
"maxLength": 80
},
"rx": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"ry": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"x1": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"x2": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"y1": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"y2": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"bbox": {
"type": "array",
"items": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"maxItems": 4,
"minItems": 4
},
"text": {
"type": "string",
"maxLength": 500
},
"type": {
"enum": [
"rect",
"circle",
"ellipse",
"line",
"polygon",
"polyline",
"text",
"bbox"
],
"type": "string"
},
"width": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"height": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"points": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number",
"maximum": 1000000000,
"minimum": -1000000000
},
"maxItems": 2,
"minItems": 2
},
"maxItems": 200
},
"fontSize": {
"type": "number",
"maximum": 100000,
"minimum": 0
},
"textAnchor": {
"enum": [
"start",
"middle",
"end"
],
"type": "string"
},
"strokeWidth": {
"type": "number",
"maximum": 1000000,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1,
"description": "Shapes in user coordinates (no transform). rect: x,y,width,height. circle: cx,cy,r. ellipse: cx,cy,rx,ry. line: x1,y1,x2,y2,strokeWidth. polygon/polyline: points. text: x,y,text,fontSize,textAnchor. bbox: bbox [minX,minY,maxX,maxY] for a path you measured yourself."
},
"viewBox": {
"type": "string",
"maxLength": 120,
"description": "The viewBox attribute value, e.g. \"0 0 800 600\"."
},
"preserveAspectRatio": {
"type": "string",
"maxLength": 40,
"description": "Default xMidYMid meet."
}
},
"additionalProperties": false
}Is this export in the npm package's published type declarations — Checks that up to 20 named exports (functions, classes, constants, types, default) exist in the .d.ts files published for an exact npm package version, read from jsDelivr, for coding agents that may be calling an API that does not exist. Follows export lists and relative export-star re-exports within the package (at most 7 files) and reports when the export surface cannot be fully enumerated. Neve
| Argument | Type | Description |
|---|---|---|
| entry | string | package.json exports key, default '.'. |
| package* | string | npm package name. |
| symbols* | array | |
| version* | string | Exact version or dist-tag (jsDelivr resolves it). |
| typesPath | string | Declaration file path inside the package, overriding package.json resolution. |
{
"type": "object",
"required": [
"package",
"version",
"symbols"
],
"properties": {
"entry": {
"type": "string",
"maxLength": 100,
"description": "package.json exports key, default '.'."
},
"package": {
"type": "string",
"maxLength": 214,
"description": "npm package name."
},
"symbols": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z_$][A-Za-z0-9_$]*$",
"maxLength": 100
},
"maxItems": 20,
"minItems": 1
},
"version": {
"type": "string",
"pattern": "^[0-9A-Za-z.+_~-]{1,64}$",
"maxLength": 64,
"description": "Exact version or dist-tag (jsDelivr resolves it)."
},
"typesPath": {
"type": "string",
"maxLength": 200,
"description": "Declaration file path inside the package, overriding package.json resolution."
}
},
"additionalProperties": false
}Adversarial Unicode & Trojan Source gatekeeper — Scans a public GitHub repo, a pull request, a unified diff or a list of files for adversarial Unicode with the 19 rules (USC001-USC019) of dcondrey/unicode-safety-check: bidi controls (Trojan Source), invisible and default-ignorable characters, variation-selector and tag-character payloads (Glassworm), private-use code points, homoglyph and mixed-script identifiers, confusable collisions, misplace
| Argument | Type | Description |
|---|---|---|
| ref | string | Branch, tag or commit for repo; defaults to the default branch. |
| diff | string | Unified diff (git diff output). Only added lines are scanned; findings carry new-file line numbers. |
| repo | string | Alternative to files and diff: a public GitHub repository, owner/repo or https://github.com/owner/repo[/tree/ref]. Read from its source archive; files are scanned shallowest first up to the character cap and the rest are listed as skipped. |
| files | array | Files to scan in full. Provide exactly one of files, diff, repo or prUrl; total content is capped at 1000000 characters. |
| prUrl | string | Alternative to files and diff: a public GitHub pull request, commit or compare URL. Only added lines are scanned. |
| scanExcluded | boolean | Also scan paths the upstream scanner skips (node_modules/, vendor/, dist/, build/, .lock, .min.js, images, archives). Default false. |
Which oneOf / anyOf branch a JSON value matches, or why several or none do — Evaluates a JSON value against every branch of a oneOf or anyOf in a caller-supplied JSON Schema 2020-12 (or OpenAPI schema converted to it) and reports which branches match, the exact errors of each branch that fails with the JSON pointer of each offending value, the closest branch, and which branch an OpenAPI `discriminator` points to. For agents debugging why a tool or API payload is rejected w
| Argument | Type | Description |
|---|---|---|
| at | string | JSON pointer to the subschema holding the union ("" for the root, "/properties/pet" for a nested one). |
| value* | any | The JSON value to classify. |
| schema* | any | The root schema; $ref targets are resolved inside it. Full JSON Schema 2020-12 (local $ref only). |
| keyword | string | Required only when the subschema has both. |
{
"type": "object",
"required": [
"schema",
"value"
],
"properties": {
"at": {
"type": "string",
"maxLength": 500,
"description": "JSON pointer to the subschema holding the union (\"\" for the root, \"/properties/pet\" for a nested one)."
},
"value": {
"description": "The JSON value to classify."
},
"schema": {
"description": "The root schema; $ref targets are resolved inside it. Full JSON Schema 2020-12 (local $ref only)."
},
"keyword": {
"enum": [
"oneOf",
"anyOf"
],
"type": "string",
"description": "Required only when the subschema has both."
}
},
"additionalProperties": false
}URL canonicalizer and lookalike-host check — Canonicalizes up to 50 absolute http(s) URLs for an agent about to fetch, dedupe or click them: WHATWG-parsed lowercase host, default port and fragment and userinfo removed, dot segments and unreserved percent-escapes normalized, tracking parameters (utm_*, gclid, fbclid and the Mozilla strip list plus yours) removed, and flags userinfo@host tricks, backslash and multiple-@ authorities, obfuscated
| Argument | Type | Description |
|---|---|---|
| urls* | array | Absolute URLs including the scheme. |
| sortQuery | boolean | Sort remaining query segments for a dedupe key. Off by default: order can matter to servers. |
| publicSuffixes | array | Extra public suffixes (e.g. "co.xx") used for registrable-domain decisions. |
| extraTrackingParams | array | Extra query parameter names to strip (case-insensitive). |
{
"type": "object",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
},
"maxItems": 50,
"minItems": 1,
"description": "Absolute URLs including the scheme."
},
"sortQuery": {
"type": "boolean",
"description": "Sort remaining query segments for a dedupe key. Off by default: order can matter to servers."
},
"publicSuffixes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"description": "Extra public suffixes (e.g. \"co.xx\") used for registrable-domain decisions."
},
"extraTrackingParams": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 50,
"description": "Extra query parameter names to strip (case-insensitive)."
}
},
"additionalProperties": false
}Web search: licensed Exa/Brave results with snippets — Runs a web search through a licensed search API (Exa or Brave) and returns up to 10 ranked results with title, URL, snippet, highlights and published date, for agents that need current links. Does not scrape search engines, does not fetch or summarize the result pages (use page-contents for that), and does not use a model.
| Argument | Type | Description |
|---|---|---|
| site | string | Restrict to a domain, for example example.com. |
| query* | string | Search query. |
| provider | string | auto uses Exa when configured, else Brave. |
| date_from | string | Only results published on or after this date, YYYY-MM-DD. |
| num_results | integer | |
| include_text | boolean | Ask the provider for highlights/extra snippet text per result. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"site": {
"type": "string",
"maxLength": 253,
"description": "Restrict to a domain, for example example.com."
},
"query": {
"type": "string",
"maxLength": 400,
"minLength": 1,
"description": "Search query."
},
"provider": {
"enum": [
"auto",
"exa",
"brave"
],
"type": "string",
"default": "auto",
"description": "auto uses Exa when configured, else Brave."
},
"date_from": {
"type": "string",
"maxLength": 10,
"description": "Only results published on or after this date, YYYY-MM-DD."
},
"num_results": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1
},
"include_text": {
"type": "boolean",
"default": false,
"description": "Ask the provider for highlights/extra snippet text per result."
}
},
"additionalProperties": false
}Verify webhook signatures from 8 providers — Constant-time verification of inbound webhook signatures from Stripe, GitHub, Shopify, Slack, Twilio, Linear, Clerk (Svix) and SendGrid HMAC, each using the exact signing string that provider documents. Every scheme uses Web Crypto HMAC with a timing-safe compare and, where the provider signs a timestamp, a configurable clock-skew tolerance (default 300s) to block replay. Returns the verdict and t
| Argument | Type | Description |
|---|---|---|
| url | string | Full request URL. Required for Twilio, ignored elsewhere. |
| nowIso | string | Override 'now' for deterministic tests; ISO-8601 instant. |
| secret* | string | The signing secret; for Clerk/Svix a 'whsec_<base64>' value is accepted. |
| source* | string | |
| headers* | object | Request headers as sent by the provider (string values). Names are case-insensitive. |
| rawBody* | string | The exact request body bytes as a string. Reparsed JSON will not match; send the raw bytes. |
| formParams | object | Form parameters parsed from a Twilio POST (string values); order does not matter. |
Is there a compatible PyPI wheel for this Python and platform — Lists the wheels PyPI offers for a package release and picks those compatible with a given CPython version, OS, CPU architecture and libc (glibc or musl version, or macOS version), best match first, for agents choosing base images or debugging 'building from source' installs. Applies PEP 425/600/656 tag ordering, abi3, legacy manylinux aliases, Requires-Python and yanked files. CPython only (no Py
| Argument | Type | Description |
|---|---|---|
| python* | string | CPython major.minor, e.g. 3.12. |
| package* | string | PyPI project name. |
| version | string | Release; default latest. |
| platform* | object | |
| freeThreaded | boolean | Free-threaded build (cp313t): abi3 wheels do not apply. |
{
"type": "object",
"required": [
"package",
"python",
"platform"
],
"properties": {
"python": {
"type": "string",
"pattern": "^3\\.[0-9]{1,2}$",
"maxLength": 8,
"description": "CPython major.minor, e.g. 3.12."
},
"package": {
"type": "string",
"maxLength": 100,
"description": "PyPI project name."
},
"version": {
"type": "string",
"maxLength": 64,
"description": "Release; default latest."
},
"platform": {
"type": "object",
"required": [
"os",
"arch"
],
"properties": {
"os": {
"enum": [
"linux",
"macos",
"windows"
],
"type": "string"
},
"arch": {
"enum": [
"x86_64",
"aarch64",
"i686",
"armv7l",
"ppc64le",
"s390x",
"arm64",
"amd64",
"x86"
],
"type": "string",
"description": "linux: x86_64 aarch64 i686 armv7l ppc64le s390x; macos: x86_64 arm64; windows: amd64 x86 arm64."
},
"libc": {
"enum": [
"glibc",
"musl"
],
"type": "string",
"description": "linux only; default glibc."
},
"libcVersion": {
"type": "string",
"pattern": "^[0-9]{1,3}\\.[0-9]{1,3}$",
"maxLength": 8,
"description": "linux: glibc '2.28' or musl '1.2'. Without it only the linux_<arch> tag matches."
},
"macosVersion": {
"type": "string",
"pattern": "^[0-9]{1,3}\\.[0-9]{1,3}$",
"maxLength": 8,
"description": "macOS '14.0' or '10.15'."
}
},
"additionalProperties": false
},
"freeThreaded": {
"type": "boolean",
"description": "Free-threaded build (cp313t): abi3 wheels do not apply."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 15, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| fix_available_at | string | When a corrective or mitigating measure became available, ISO 8601 with UTC offset; sets the Art. 14(2)(c) final-report date. |
{
"type": "object",
"properties": {
"sbom": {
"anyOf": [
{
"type": "object"
},
{
"type": "string",
"maxLength": 5000000
}
],
"description": "CycloneDX 1.4-1.6 or SPDX 2.2/2.3 JSON SBOM, as an object or a JSON string, up to 5 MB. Components need a purl with a version (SPDX: a purl externalRef). Exactly one of sbom or purls."
},
"purls": {
"type": "array",
"items": {
"type": "string",
"maxLength": 400,
"minLength": 8
},
"maxItems": 1000,
"description": "Alternative to sbom: versioned package URLs, e.g. pkg:maven/org.apache.logging.log4j/[email protected]. Ecosystems: npm, pypi, maven, golang, cargo, nuget, gem, composer, hex, pub, swift."
},
"product": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"version": {
"type": "string",
"maxLength": 100
}
},
"description": "Your product with digital elements; used only to fill the draft fields (defaults to the SBOM's own product name).",
"additionalProperties": false
},
"issue_record": {
"type": "boolean",
"description": "Default false. When true, adds a standalone awareness_record (evidence snapshot, SBOM digest, evaluation time; signed with the hub attestation key when configured) for you to retain. It does not switch off the hub's standard signed response credential, which every response carries and which already binds the output and input digests to a timestamp."
},
"awareness_time": {
"type": "string",
"maxLength": 40,
"description": "When the manufacturer became aware, ISO 8601 with UTC offset (e.g. 2026-11-04T09:30:00Z). Defaults to now. Taken as given; this agent cannot verify it."
},
"fix_available_at": {
"type": "string",
"maxLength": 40,
"description": "When a corrective or mitigating measure became available, ISO 8601 with UTC offset; sets the Art. 14(2)(c) final-report date."
}
},
"additionalProperties": false
}| fix_available_at | string | When a corrective or mitigating measure became available, ISO 8601 with UTC offset; sets the Art. 14(2)(c) final-report date. |
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"maxLength": 200,
"description": "Branch, tag or commit; defaults to the default branch."
},
"repo": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Public GitHub repository: owner/repo, https://github.com/owner/repo[/tree/ref], a commit URL, or a pull request URL (analyzed at the PR head)."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"content": {
"type": "string",
"maxLength": 400000
}
},
"additionalProperties": false
},
"maxItems": 600,
"description": "Alternative to repo: manifests (package.json, lockfile, pyproject.toml, requirements.txt, Cargo.toml) and source files with repository-relative paths."
},
"product": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"version": {
"type": "string",
"maxLength": 100
}
},
"description": "Your product with digital elements; used only to fill the draft fields (defaults to the SBOM's own product name).",
"additionalProperties": false
},
"ecosystems": {
"type": "array",
"items": {
"enum": [
"npm",
"pypi",
"cargo"
],
"type": "string"
},
"maxItems": 3,
"description": "Restrict the analysis; default all detected."
},
"repoLicense": {
"type": "string",
"maxLength": 100,
"description": "SPDX id of the repository's license, for alternative ranking; detected from manifests or LICENSE when absent."
},
"awareness_time": {
"type": "string",
"maxLength": 40,
"description": "When the manufacturer became aware, ISO 8601 with UTC offset (e.g. 2026-11-04T09:30:00Z). Defaults to now. Taken as given; this agent cannot verify it."
},
"fix_available_at": {
"type": "string",
"maxLength": 40,
"description": "When a corrective or mitigating measure became available, ISO 8601 with UTC offset; sets the Art. 14(2)(c) final-report date."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "https URL of the document. Provide this or content_base64."
},
"pages": {
"type": "string",
"maxLength": 1000,
"description": "Page, sheet or slide selection such as \"1-5,8\", at most 200 pages. Default: the first 200."
},
"format": {
"enum": [
"markdown",
"text"
],
"type": "string",
"description": "markdown (default) or text (Markdown syntax removed)."
},
"describe": {
"type": "boolean",
"description": "Also suggest a file name, tags and a summary with a language model. Default false."
},
"filename": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Original file name; helps format detection and is kept as the extension of the suggested name."
},
"max_chars": {
"type": "integer",
"maximum": 400000,
"minimum": 1000,
"description": "Output cap in characters, cut at a unit boundary. Default 120000."
},
"content_base64": {
"type": "string",
"maxLength": 5592408,
"minLength": 1,
"description": "Standard padded base64 of the file, at most 4 MB decoded. Provide this or url."
}
},
"additionalProperties": false
}| integer |
| HTTP status the robots.txt fetch ended with (after at most 5 redirects). Omit when robotsTxt is supplied and was a 2xx. |
{
"type": "object",
"required": [
"userAgent",
"paths"
],
"properties": {
"paths": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
},
"maxItems": 25,
"minItems": 1,
"description": "Path plus optional query beginning with /, or a full http(s) URL (path and query are used)."
},
"headers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"value": {
"type": "string",
"maxLength": 2000
}
},
"additionalProperties": false
},
"maxItems": 50,
"description": "Response headers of the page: X-Robots-Tag, tdm-reservation, tdm-policy."
},
"llmsTxt": {
"type": "string",
"maxLength": 200000
},
"purpose": {
"enum": [
"crawl",
"ai-training"
],
"type": "string",
"description": "ai-training also treats noai, noimageai and tdm-reservation: 1 as restrictions. Default crawl."
},
"metaTags": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"content"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"content": {
"type": "string",
"maxLength": 2000
}
},
"additionalProperties": false
},
"maxItems": 50,
"description": "HTML meta elements: robots, googlebot, tdm-reservation, tdm-policy."
},
"robotsTxt": {
"type": "string",
"maxLength": 512000,
"description": "robots.txt body, at most 512,000 UTF-8 bytes (500 KiB)."
},
"userAgent": {
"type": "string",
"pattern": "^[A-Za-z_-]+$",
"maxLength": 64,
"description": "Product token only (letters, underscore, hyphen), e.g. \"Googlebot\"; no version."
},
"fetchStatus": {
"type": "integer",
"maximum": 599,
"minimum": 100,
"description": "HTTP status the robots.txt fetch ended with (after at most 5 redirects). Omit when robotsTxt is supplied and was a 2xx."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"ir": {
"type": "object",
"description": "Formal IR, solved with zero LLM calls: {variables:[{name,type:bool|int|real,min?,max?}], constraints:[{id,expr,source?}], query:{mode:possible|always|consistency,formula?,source?}}. Expressions are JSON ASTs: {op:\"var\",name}, {op:\"num\",value:\"3/4\"}, {op:\"true\"|\"false\"}, and {op,args} for not, and, or, implies, iff, ite, =, !=, <, <=, >, >=, add, sub, neg, mul (one side constant). Numbers are exact strings."
},
"text": {
"type": "string",
"maxLength": 60000,
"minLength": 3,
"description": "Alternative to clauses: the contract, policy or rules pasted as plain text. It is split into clauses by blank lines and numbered or bulleted lines (ids C1.2 or S3). Use clauses when you need your own ids. Requires query."
},
"query": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "The question, e.g. \"Can an unauthorized user ever approve a payout over $10,000?\" or \"Are any clauses mutually contradictory?\". Required with clauses."
},
"budget": {
"type": "object",
"properties": {
"maxWork": {
"type": "integer",
"maximum": 40000000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 40000000)."
},
"maxMillis": {
"type": "integer",
"maximum": 25000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 25000)."
},
"maxPivots": {
"type": "integer",
"maximum": 2000000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 2000000)."
},
"maxSolves": {
"type": "integer",
"maximum": 2000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 2000)."
},
"maxSplits": {
"type": "integer",
"maximum": 5000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 5000)."
},
"maxConflicts": {
"type": "integer",
"maximum": 300000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 300000)."
},
"maxPropagations": {
"type": "integer",
"maximum": 60000000,
"minimum": 1,
"description": "Lower this step budget (default and hard cap 60000000)."
}
},
"description": "Optional lower step budgets.",
"additionalProperties": false
},
"clauses": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"text"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"text": {
"type": "string",
"maxLength": 4000,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1,
"description": "Natural-language contract clauses, IAM/OPA policy statements or business rules, each with a caller-chosen id. Mutually exclusive with ir."
}
},
"additionalProperties": false
}| allowLicenseRefs |
| array |
| LicenseRef-* ids the caller has reviewed; other refs yield unknown. |
| requireOsiApproved | boolean | Fail licenses without isOsiApproved in the SPDX list. |
{
"type": "object",
"required": [
"expressions"
],
"properties": {
"deny": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"description": "SPDX ids that always fail."
},
"allow": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 200,
"description": "If non-empty, only these SPDX ids pass (GPL-2.0-only and GPL-2.0 are the same entry; GPL-2.0+ means or-later and must be listed as such)."
},
"expressions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 50,
"minItems": 1,
"description": "SPDX expressions, e.g. 'MIT OR (GPL-2.0-only WITH Classpath-exception-2.0)'."
},
"denyCopyleft": {
"enum": [
"none",
"strong",
"any"
],
"type": "string",
"description": "Id-family heuristic: strong = GPL/AGPL/SSPL/EUPL/OSL/CC-BY-SA; any adds LGPL/MPL/EPL/CDDL and similar."
},
"allowDeprecated": {
"type": "boolean",
"description": "Default true: deprecated ids only add a witness. false: they fail."
},
"allowExceptions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 100,
"description": "If non-empty, only these WITH exception ids pass."
},
"requireFsfLibre": {
"type": "boolean",
"description": "Fail licenses without isFsfLibre in the SPDX list."
},
"allowLicenseRefs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"maxItems": 100,
"description": "LicenseRef-* ids the caller has reviewed; other refs yield unknown."
},
"requireOsiApproved": {
"type": "boolean",
"description": "Fail licenses without isOsiApproved in the SPDX list."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"code": {
"type": "string",
"maxLength": 200000,
"description": "Source code of a state machine, protocol, or concurrent routine; translated to a spec by an LLM, with each transition carrying its verbatim source span."
},
"spec": {
"type": "object",
"description": "Formal spec (zero LLM calls). {vars:{name:{type:'bool'|'int'|'enum'|'array',min,max,values,size|keys,of,init}}, processes:[{name,instances?,fairness?:'none'|'weak'|'strong',transitions:[{name,guard?,updates:[{var,at?,value}]}]}], initWhere?, terminal?, progress?, invariants:[{name,expr}], liveness:[{name,kind:'eventually'|'alwaysEventually'|'leadsTo',p,q?}]}. Expressions are JSON nodes ({var,at?}, {sym}, {param}, {op,args}, forall/exists) or infix strings such as \"pc[self] == wait && !flag[1 - self]\"; nothing is evaluated as code."
},
"options": {
"type": "object",
"properties": {
"explain": {
"type": "boolean",
"description": "Add a plain-language explanation of the computed result (property verdicts, counterexample steps, final state), built from the result itself with no model call. Default false."
},
"deadlock": {
"type": "boolean",
"description": "Report deadlocks (non-terminal states with no enabled transition). Default true."
},
"livelock": {
"type": "boolean",
"description": "Report fair cycles that never reach a progress or terminal state; needs a progress or terminal predicate. Default true when the spec has a progress predicate."
},
"maxMillis": {
"type": "integer",
"maximum": 20000,
"minimum": 1,
"description": "Total wall-clock budget in ms for exploration plus liveness analysis (default 8000). On description/code input the three budgets are split evenly between the two translated models."
},
"maxStates": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "State budget (default 100000)."
},
"maxTransitions": {
"type": "integer",
"maximum": 500000,
"minimum": 1,
"description": "Transition budget (default 500000)."
}
},
"additionalProperties": false
},
"properties": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 20,
"description": "Properties to check, in plain language (with description or code only)."
},
"description": {
"type": "string",
"maxLength": 30000,
"description": "Natural-language workflow or protocol; translated to a spec by an LLM, with each transition quoted from the text."
}
},
"additionalProperties": false
}| identifierPolicy |
| string |
| Default ascii-only: any non-ASCII identifier is flagged (USC019). |
| permittedScripts | array | Used with permitted-scripts. Default Latin, Common, Inherited. |
{
"type": "object",
"properties": {
"ref": {
"type": "string",
"maxLength": 200,
"description": "Branch, tag or commit for repo; defaults to the default branch."
},
"diff": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "Unified diff (git diff output). Only added lines are scanned; findings carry new-file line numbers."
},
"repo": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Alternative to files and diff: a public GitHub repository, owner/repo or https://github.com/owner/repo[/tree/ref]. Read from its source archive; files are scanned shallowest first up to the character cap and the rest are listed as skipped."
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Repository-relative path; its extension selects the language and the file risk level."
},
"content": {
"type": "string",
"maxLength": 1000000
}
},
"additionalProperties": false
},
"maxItems": 500,
"minItems": 1,
"description": "Files to scan in full. Provide exactly one of files, diff, repo or prUrl; total content is capped at 1000000 characters."
},
"prUrl": {
"type": "string",
"maxLength": 300,
"minLength": 20,
"description": "Alternative to files and diff: a public GitHub pull request, commit or compare URL. Only added lines are scanned."
},
"scanExcluded": {
"type": "boolean",
"description": "Also scan paths the upstream scanner skips (node_modules/, vendor/, dist/, build/, .lock, .min.js, images, archives). Default false."
},
"identifierPolicy": {
"enum": [
"ascii-only",
"permitted-scripts"
],
"type": "string",
"description": "Default ascii-only: any non-ASCII identifier is flagged (USC019)."
},
"permittedScripts": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 40,
"description": "Used with permitted-scripts. Default Latin, Common, Inherited."
}
},
"additionalProperties": false
}| toleranceSeconds |
| integer |
| Max allowed |now - signed timestamp|. Default 300s. |
{
"type": "object",
"required": [
"source",
"secret",
"rawBody",
"headers"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2000,
"description": "Full request URL. Required for Twilio, ignored elsewhere."
},
"nowIso": {
"type": "string",
"maxLength": 40,
"description": "Override 'now' for deterministic tests; ISO-8601 instant."
},
"secret": {
"type": "string",
"maxLength": 500,
"description": "The signing secret; for Clerk/Svix a 'whsec_<base64>' value is accepted."
},
"source": {
"enum": [
"stripe",
"github",
"shopify",
"slack",
"twilio",
"linear",
"clerk",
"sendgrid-hmac"
],
"type": "string"
},
"headers": {
"type": "object",
"description": "Request headers as sent by the provider (string values). Names are case-insensitive."
},
"rawBody": {
"type": "string",
"maxLength": 2000000,
"description": "The exact request body bytes as a string. Reparsed JSON will not match; send the raw bytes."
},
"formParams": {
"type": "object",
"description": "Form parameters parsed from a Twilio POST (string values); order does not matter."
},
"toleranceSeconds": {
"type": "integer",
"description": "Max allowed |now - signed timestamp|. Default 300s."
}
},
"additionalProperties": false
}