Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Payload Validator

REMOTE · PAYLOAD-VALIDATOR.GUMBALLTOOLS.COM · SCANNED SEP 25

Validate JSON, YAML, XML and CSV with exact line/column errors and silent-corruption warnings.

+3 this week 73 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3039 tokens (~607/item across 5 items; 5 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management63
  • Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 5 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 5 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the Payload Validator MCP server?

Payload Validator is a hosted endpoint at https://payload-validator.gumballtools.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · payload-validator.gumballtools.com

# add to Claude Code
claude mcp add --transport http com-gumballtools-payload-validator 'https://payload-validator.gumballtools.com/api/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-gumballtools-payload-validator": {
      "url": "https://payload-validator.gumballtools.com/api/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-gumballtools-payload-validator": {
      "type": "http",
      "url": "https://payload-validator.gumballtools.com/api/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-gumballtools-payload-validator]
url = "https://payload-validator.gumballtools.com/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-gumballtools-payload-validator": {
      "type": "remote",
      "url": "https://payload-validator.gumballtools.com/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-gumballtools-payload-validator --url 'https://payload-validator.gumballtools.com/api/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-gumballtools-payload-validator:
    url: "https://payload-validator.gumballtools.com/api/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-gumballtools-payload-validator": {
      "Transport": "http",
      "Url": "https://payload-validator.gumballtools.com/api/mcp"
    }
  }
}
# add to Vellum
assistant mcp add com-gumballtools-payload-validator -t streamable-http -u 'https://payload-validator.gumballtools.com/api/mcp'
// mcp.json
{
  "mcpServers": {
    "com-gumballtools-payload-validator": {
      "type": "http",
      "url": "https://payload-validator.gumballtools.com/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Sept 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 23 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 25 Sept 2026 · Probed https://payload-validator.gumballtools.com/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.gumballtools.com CN=YR2,O=Let's Encrypt,C=US 6 Sept 2026 5 Dec 2026 RSA 2048 SHA256-RSA 60927985e79d22e7a1106139f609d74b0e4
SANs: *.gumballtools.com, gumballtools.com
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of payload-validator.gumballtools.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
gumballtools.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://payload-validator.gumballtools.com/api/mcp Verified 200
http (plaintext) http://payload-validator.gumballtools.com/api/mcp HTTPS enforced 308 https://payload-validator.gumballtools.com/api/mcp
MCP tools · 5 exposed · ~3,039 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
validate_auto ~516

Detects whether a payload is JSON, YAML, XML or CSV, then validates it. Use this when you have a blob of text and do not know what it is — a file with no extension, a clipboard paste, a response body with an unhelpful content type, or a config file whose format you would otherwise have to guess. Detection is structural and the reason is always returned, so the assumption is visible rather than hidden: a leading `<` is XML, a leading `{` or `[` is JSON, a `%YAML` directive or `key: value` lines are YAML, and a consistent delimiter count across multiple lines is CSV. JSON is checked before YAML on purpose, because JSON is a strict subset of YAML 1.2 and every JSON document would otherwise be ambiguous. If the detected format does not validate but JSON or XML does, the result is corrected and `detection.corrected` is true. Only those two can win a correction, because only they have decisive grammars — CSV will read almost any text as a valid single-column file, so "it validates as CSV" is not evidence, and allowing it would silently reinterpret broken JSON as fine. Prefer the format-specific tool when you already know the format: it skips detection and cannot be corrected out from under you. Input: `input`, the raw text. Up to 1,000,000 bytes. Returns: `valid` (no errors), `parseable` (whether a conforming parser would accept it — deliberately separate, because a duplicate key parses fine and still means two different things), a `diagnostics` array where each entry has a 1-based `line` and `column`, a stable `rule` code, a `message`, an `excerpt` showing the offending line with a caret under the column, a `fixHint`, and `blocksParse`; plus `counts` and format-specific `stats`. Rule codes are stable and safe to branch on; messages are not. Additionally `detection` with the chosen `format`, the `reason` in one sentence, and `corrected`. Safety: nothing is resolved, fetched or expanded. External XML entities are reported, never retrieved; alias bombs are detected…

NameTypeReqDescription
inputstringyesThe raw document text, not a parsed object — the findings are properties of the text. Up to 1,000,000 bytes.

No output schema declared.

No examples provided.

validate_csv ~685

Validates CSV text against RFC 4180 and reports ragged rows individually, with both field counts. Use this before loading a CSV, and whenever a CSV-derived number looks wrong. Do not attempt this by reading the file, and be aware that loading it successfully proves nothing. The failure that matters is the ragged row: a file where one row has six fields and the header has five loads without complaint almost everywhere — pandas pads or throws depending on the engine, Excel shifts the columns, and `split(",")` silently mis-assigns every field after the extra one. Nobody notices until a figure is wrong in a report. This reports it as "row 4813 has 6 fields; the header has 5", per row. The other half is the delimiter. A European CSV is semicolon-separated because the comma is the decimal separator; reading it as comma-separated yields one column of nonsense and no error. The delimiter is sniffed from the header — ignoring quoted regions so their contents cannot vote — and always reported, with a warning when the guess was a close call. Pass `delimiter` to remove the guess entirely. Also reports: unterminated quotes (which swallow the rest of the file into one field, which is why one typo can make thousands of rows look ragged), text after a closing quote, stray quotes in unquoted fields, duplicate column names, unnamed columns, column names with invisible leading or trailing whitespace, mixed CRLF/LF line endings, CR-only endings, and a byte order mark — which becomes part of the first column's name, so a lookup for "id" fails against a column that prints identically. Input: `input`, the raw CSV text. Optional `delimiter` (a single character) and `hasHeader` (default true; pass false and rows are compared against the first row instead, and header checks are skipped). Up to 1,000,000 bytes. Returns: `valid` (no errors), `parseable` (whether a conforming parser would accept it — deliberately separate, because a duplicate key parses fine and still means two different…

NameTypeReqDescription
delimiterstring–Field delimiter, as a single character. Omit to sniff it from the header. Pass it when you know it — a semicolon-separated European export read as comma-separated produces one column and no error.
hasHeaderboolean–Whether the first row names the columns. Default true. Pass false and rows are compared against the first row instead, and header checks are skipped.
inputstringyesThe raw document text, not a parsed object — the findings are properties of the text. Up to 1,000,000 bytes.

No output schema declared.

No examples provided.

validate_json ~584

Validates a JSON document and reports every problem with an exact line and column. Use this whenever you need to know why a JSON payload is failing, or to check a JSON document you or a user produced before sending it somewhere that will reject it. Do not do this by reading the JSON yourself. Three of the findings are invisible to inspection and to JSON.parse alike: (1) Duplicate keys. `{"port":8080,"port":9090}` is accepted by every mainstream parser, which keeps the last value and discards the first without a word. Reading it, you cannot see which one the consumer will use, because the answer differs by language. (2) Integer precision loss. `9007199254740993` parses as `9007199254740992` — quietly, because JSON numbers are IEEE-754 doubles in nearly every parser, exact only to 2^53-1. Any 64-bit ID (Twitter, Discord, most database bigints) is in the lossy range. This tool proves the loss with exact BigInt arithmetic rather than estimating it. (3) Lone surrogates. `"\ud83d"` alone is syntactically legal and cannot be encoded as UTF-8, so the document parses here and fails somewhere else entirely. It also reports, with positions: trailing commas, comments, single-quoted strings, unquoted keys, Python literals (True/None/NaN/Infinity), leading zeros, hex numbers, unescaped control characters, raw line breaks inside strings, byte order marks, and trailing content — including recognising when the input is actually NDJSON being read as one document. Input: `input`, the raw JSON text as a string. Not a parsed object — the text, because the findings are properties of the text. Up to 1,000,000 bytes. Returns: `valid` (no errors), `parseable` (whether a conforming parser would accept it — deliberately separate, because a duplicate key parses fine and still means two different things), a `diagnostics` array where each entry has a 1-based `line` and `column`, a stable `rule` code, a `message`, an `excerpt` showing the offending line with a caret under the column, a `fix…

NameTypeReqDescription
inputstringyesThe raw document text, not a parsed object — the findings are properties of the text. Up to 1,000,000 bytes.

No output schema declared.

No examples provided.

validate_xml ~565

Validates an XML document for well-formedness, namespace correctness, and the entity-based attacks that arrive as XML. Use this before parsing XML you received, and when an XML document is being rejected by something that will not say why. Do not eyeball this. Four classes of genuinely invalid XML are accepted by ordinary well-formedness checkers, so "it validated" does not mean what it appears to: (1) Two root elements. `<a/><b/>` is not a valid XML document; XML permits exactly one outermost element. Concatenated records hit this constantly. (2) Undeclared namespace prefixes. `<x:a>` with no `xmlns:x` is well-formed as raw XML and invalid under Namespaces in XML — so it passes a syntax check and is then rejected by XPath, XSLT, SOAP and every schema validator. (3) Undeclared entities. XML predefines only five (`&lt; &gt; &amp; &apos; &quot;`). `&nbsp;` is an HTML entity and is simply undefined in XML. (4) A bare `&`, almost always arriving inside a URL. Security findings, which are the reason to run this on input you did not write: external entity declarations (XXE — reported with the URI they point at and the remediation for Python, Java and .NET), nested entity expansion (billion laughs), parameter entities (the out-of-band XXE vehicle), external DTD references (an SSRF vector and a runtime dependency on someone else's host), and any DOCTYPE at all, since hardened parsers reject them outright. Input: `input`, the raw XML text as a string. Up to 1,000,000 bytes. Returns: `valid` (no errors), `parseable` (whether a conforming parser would accept it — deliberately separate, because a duplicate key parses fine and still means two different things), a `diagnostics` array where each entry has a 1-based `line` and `column`, a stable `rule` code, a `message`, an `excerpt` showing the offending line with a caret under the column, a `fixHint`, and `blocksParse`; plus `counts` and format-specific `stats`. Rule codes are stable and safe to branch on; messages are not.…

NameTypeReqDescription
inputstringyesThe raw document text, not a parsed object — the findings are properties of the text. Up to 1,000,000 bytes.

No output schema declared.

No examples provided.

validate_yaml ~689

Validates a YAML document, including the values that mean different things to different YAML loaders. Use this for any YAML you are about to write or have just been given — CI configs, Kubernetes manifests, docker-compose files, OpenAPI specs, Ansible playbooks. Do not reason about YAML type resolution yourself. It is the single most reliable way to be confidently wrong about a config file, because YAML 1.1 and YAML 1.2 resolve the same plain scalar to different values and real loaders disagree about which to implement — PyYAML is 1.1, Go's yaml.v3 and the yaml npm package are 1.2: - `no`, `yes`, `on`, `off`, `y`, `n` are booleans in 1.1 and strings in 1.2. A country list containing `no` loses Norway. This is known as the Norway problem. - `on:` as a KEY, as in every GitHub Actions workflow, is the boolean `true` under 1.1, so the key is not "on" at all. - `0755` is 493 under 1.1 (octal) and 755 under 1.2 (decimal). Both are numbers, so nothing looks wrong; a file mode is simply the wrong number. - `1:30` is the integer 90 under 1.1, because YAML 1.1 has base-60 integers. - A bare `2026-01-01` is a timestamp under 1.1 and a string under 1.2. Divergence is found by resolving each unquoted scalar under both spec versions and comparing, so the answer is what the parsers actually do rather than a list of words someone remembered. Quoted values are never flagged, because quoting is exactly how YAML says "this is a string". Also reports: duplicate keys, tabs used as indentation (forbidden, and invisible), non-breaking spaces used as indentation (the giveaway that YAML was copied from a web page), aliases with no anchor and anchors nothing references, merge keys (`<<`, a 1.1 extension not in 1.2 core), multi-document streams, and alias bombs. Input: `input`, the raw YAML text as a string. Up to 1,000,000 bytes. Returns: `valid` (no errors), `parseable` (whether a conforming parser would accept it — deliberately separate, because a duplicate key parses fine and still…

NameTypeReqDescription
inputstringyesThe raw document text, not a parsed object — the findings are properties of the text. Up to 1,000,000 bytes.

No output schema declared.

No examples provided.

Common questions

What is the Payload Validator MCP server?

Payload Validator is an MCP server listed in the public MCP registry as com.gumballtools/payload-validator. Validate JSON, YAML, XML and CSV with exact line/column errors and silent-corruption warnings. This page covers its hosted endpoint (https://payload-validator.gumballtools.com/api/mcp).

Is the Payload Validator MCP server safe to use?

Payload Validator scores 73 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Payload Validator MCP server expose?

Payload Validator exposes 5 tools: validate_json, validate_yaml, validate_xml, validate_csv, validate_auto. Their descriptions and schemas cost roughly 3,039 tokens of context every time the server is loaded.

Does the Payload Validator MCP server require authentication?

No. We connected to Payload Validator without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Payload Validator MCP server still maintained?

Payload Validator is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.