changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "description": "MCP structuredContent for supported 2025 revisions, also serialized in content[0].text. Protocol-envelope and unknown-tool failures are separate JSON-RPC errors, not analysis objects.",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "description": "Successful analysis; MCP isError is false.",
+ "properties": {
+ "caveat": {
+ "description": "Uncalibrated, caller-supplied-evidence and attribution limits.",
+ "type": "string"
+ },
+ "clusterIdVersion": {
+ "const": "CL2-SHA256",
+ "type": "string"
+ },
+ "clusters": {
+ "description": "Groups ordered by descending score; inspect components and label coverage before interpreting the band.",
+ "items": {
+ "additionalProperties": false,
+ "description": "Scored funding-association group. Structural signals can be nonzero without labels.",
+ "properties": {
+ "band": {
+ "description": "high requires score >=0.50 and at least one supplied rug label; otherwise >=0.28 is elevated, else low. Policy thresholds, not calibrated risk.",
+ "enum": [
+ "low",
+ "elevated",
+ "high"
+ ],
+ "type": "string"
+ },
+ "cluster_id": {
+ "description": "SHA-256 of sorted role-prefixed deployer/funder membership, not operator identity. Mint/label-only changes keep the ID; membership changes can change it.",
+ "pattern": "^CL2-[0-9a-f]{64}(?![\\s\\S])",
+ "type": "string"
+ },
+ "components": {
+ "additionalProperties": false,
+ "description": "Unweighted component values, rounded to four decimals.",
+ "properties": {
+ "cadence": {
+ "description": "Saturating launch-count excess above one, not elapsed time; weight 0.16.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "cex": {
+ "description": "One if any funder is batch-wide exchange-flagged, otherwise zero; weight 0.08. Not evidence of misconduct.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "fanout": {
+ "description": "Saturating launch-count proxy for breadth; weight 0.12.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "rugs": {
+ "description": "Wilson lower bound from supplied labels, or zero if none are labeled; weight 0.30. Zero is not evidence of safety.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "serial": {
+ "description": "Saturating excess of deployers per funder above one; weight 0.34.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "serial",
+ "cadence",
+ "fanout",
+ "cex",
+ "rugs"
+ ],
+ "type": "object"
+ },
+ "deployers": {
+ "description": "Sorted unique supplied deployers in this group.",
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[^\\u0000-\\u0020\\u007f-\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000\\ud800-\\udfff]+(?![\\s\\S])",
+ "type": "string"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ },
+ "evidence": {
+ "additionalProperties": false,
+ "description": "Evidence only from this submitted snapshot; nothing fetched or verified.",
+ "properties": {
+ "any_cex": {
+ "description": "Any funder is exchange-flagged anywhere in this batch; caller supplied, not verified.",
+ "type": "boolean"
+ },
+ "deployers_per_funder": {
+ "description": "n_deployers / n_funders, rounded to three decimals.",
+ "maximum": 1000,
+ "minimum": 0.001,
+ "type": "number"
+ },
+ "labelCoverage": {
+ "description": "labeled_launches / n_launches, rounded to four decimals.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "labeled_launches": {
+ "description": "Launches labeled rug, rugged, alive or graduated; excludes unknown.",
+ "maximum": 1000,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "n_deployers": {
+ "description": "Distinct deployers in this group.",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "n_funders": {
+ "description": "Distinct funders, including flagged exchange funders.",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "n_launches": {
+ "description": "Distinct supplied launches in this group.",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "notes": {
+ "description": "Caveats about supplied labels, missing or incomplete outcomes, and low not meaning safe.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "observed_rug_rate": {
+ "description": "rug_launches / labeled_launches, rounded to four decimals; null without labels. Not a population estimate.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "rug_evidence": {
+ "description": "labeled when any labels are supplied; otherwise an UNLABELED structural-only warning.",
+ "type": "string"
+ },
+ "rug_launches": {
+ "description": "Launches labeled rug or rugged.",
+ "maximum": 1000,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "rug_rate_wilson_lb": {
+ "description": "Wilson lower bound using z=1.96 on supplied labeled launches, rounded to four decimals; null without labels. Does not validate label quality or sampling.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "n_deployers",
+ "n_funders",
+ "n_launches",
+ "deployers_per_funder",
+ "any_cex",
+ "labeled_launches",
+ "rug_launches",
+ "labelCoverage",
+ "notes",
+ "observed_rug_rate",
+ "rug_rate_wilson_lb",
+ "rug_evidence"
+ ],
+ "type": "object"
+ },
+ "funders": {
+ "description": "Sorted unique supplied funders in this group.",
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[^\\u0000-\\u0020\\u007f-\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000\\ud800-\\udfff]+(?![\\s\\S])",
+ "type": "string"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ },
+ "mints": {
+ "description": "Sorted unique supplied mints in this group.",
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[^\\u0000-\\u0020\\u007f-\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000\\ud800-\\udfff]+(?![\\s\\S])",
+ "type": "string"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ },
+ "n_launches": {
+ "description": "Distinct supplied mints in this group.",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "score": {
+ "description": "Weighted heuristic sum rounded to four decimals, not a probability, prediction or safety verdict.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "cluster_id",
+ "n_launches",
+ "deployers",
+ "funders",
+ "mints",
+ "score",
+ "band",
+ "components",
+ "evidence"
+ ],
+ "type": "object"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array"
+ },
+ "model": {
+ "const": "ff.cluster supplied-edge heuristic",
+ "type": "string"
+ },
+ "n_clusters": {
+ "description": "Number of returned groups.",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "n_edges": {
+ "description": "Number of validated supplied launches.",
+ "maximum": 1000,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "scorerVersion": {
+ "const": "2.0.0",
+ "description": "Scoring policy version, independent of the MCP server release.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "clusters",
+ "n_clusters",
+ "n_edges",
+ "model",
+ "scorerVersion",
+ "clusterIdVersion",
+ "caveat"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "Rejected input; MCP isError is true. No partial analysis returned.",
+ "properties": {
+ "error": {
+ "description": "Input rejection reason; correct the batch and retry.",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "error"
+ ],
+ "type": "object"
+ }
+ ],
+ "type": "object"
+}