Skip to main content
Glama
ijgc1020

deployer-reputation-mcp

deployer_reputation

Read-onlyIdempotent

Score Solana launch records by grouping deployers and funders, then rank clusters with explainable 0-1 heuristic components and label-coverage evidence to assess deployer reputation.

Instructions

Score funding-association groups in supplied Solana launch records with explainable 0-1 heuristic components and label-coverage evidence. Use after your pipeline resolves deployer, pre-launch funder and mint; choose cluster_launches for membership only. Not for wallet/token lookup, prediction, ownership attribution or safety decisions; scores are not probabilities and low does not mean safe. Supply 1-1000 distinct-mint edges. Keep connected groups together: splitting batches changes results. A funder_is_cex flag anywhere prevents that funder joining distinct deployers; it does not separate the same deployer's launches. lamports and block_time are validated but do not affect scores; cadence measures launch count, not time. Stateless local computation: no network/RPC, label verification, storage writes, credentials or external side effects. Each full stdio request line is limited to 512000 bytes. Returns score-sorted clusters, membership, components, evidence, counts and versions. Check labelCoverage and notes: rug-rate evidence is null without labels, not zero. Invalid input rejects the whole batch with isError=true; correct it and retry.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
edgesYes1-1000 launches with distinct mints; required per edge: deployer, funder, mint. Resolve multiple funding observations upstream into one edge per launch. Keep connected groups together: arbitrary batch splits change results. Invalid rows reject the whole batch.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changedv1.1.0
    • addedInput schema / description
      Added value: +"Caller-enriched snapshot; no datasetId, operation or payload. Each complete stdio request line, including JSON-RPC envelope and newline, must fit 512000 bytes. Examples use fictional identifiers."
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "edges": [
      +      {
      +        "deployer": "DemoDeployerA",
      +        "funder": "DemoSharedFunder",
      +        "mint": "DemoMintA"
      +      }
      +    ]
      +  }
      +]
    • changedInput schema / properties / edges / description
      Previous value: -"1-1000 caller-enriched launches with distinct mints. Required per edge: deployer, funder, mint. No RPC, wallet lookup or label verification; token-only rows are insufficient. Calls are stateless."New value: +"1-1000 launches with distinct mints; required per edge: deployer, funder, mint. Resolve multiple funding observations upstream into one edge per launch. Keep connected groups together: arbitrary batch splits change results. Invalid rows reject the whole batch."
    • addedInput schema / properties / edges / items / properties / block_time / default
      Added value: +null
    • changedInput schema / properties / edges / items / properties / block_time / description
      Previous value: -"Nonnegative Unix timestamp in seconds or null, not ISO text or milliseconds. Currently does not affect scoring."New value: +"Integer Unix timestamp in seconds or null, not ISO text, milliseconds or boolean. Validated but not used in grouping or scoring."
    • addedInput schema / properties / edges / items / properties / block_time / examples
      Added value: +[
      +  1700000000,
      +  null
      +]
    • changedInput schema / properties / edges / items / properties / deployer / description
      Previous value: -"Required caller-resolved launch deployer. Opaque identifier, not a verified address or token holder."New value: +"Caller-resolved launch deployer. Opaque, case-sensitive identifier; not address-validated. No whitespace, control characters or Unicode surrogates."
    • addedInput schema / properties / edges / items / properties / deployer / examples
      Added value: +[
      +  "DemoDeployerA"
      +]
    • changedInput schema / properties / edges / items / properties / deployer / pattern
      Previous value: -"^[^\\s\\u0000-\\u001f\\u007f-\\u009f\\ud800-\\udfff]+$"New value: +"^[^\\u0000-\\u0020\\u007f-\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000\\ud800-\\udfff]+(?![\\s\\S])"
    • changedInput schema / properties / edges / items / properties / funder / description
      Previous value: -"Required caller-resolved wallet that seeded this deployer before the launch. Never substitute a pool or unknown placeholder."New value: +"Caller-resolved wallet that seeded this deployer before launch. Same identifier rules as deployer. Never substitute a pool or shared unknown placeholder."
    • addedInput schema / properties / edges / items / properties / funder / examples
      Added value: +[
      +  "DemoSharedFunder"
      +]
    • changedInput schema / properties / edges / items / properties / funder / pattern
      Previous value: -"^[^\\s\\u0000-\\u001f\\u007f-\\u009f\\ud800-\\udfff]+$"New value: +"^[^\\u0000-\\u0020\\u007f-\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000\\ud800-\\udfff]+(?![\\s\\S])"
    • addedInput schema / properties / edges / items / properties / funder_is_cex / default
      Added value: +false
    • changedInput schema / properties / edges / items / properties / funder_is_cex / description
      Previous value: -"Strict boolean, default false. Mark known exchange/infrastructure funders; any true flag prevents that funder joining distinct deployers across this batch."New value: +"Strict boolean. Any true flag excludes this funder from joining distinct deployers across the entire batch; same-deployer launches still group. false is not verified non-exchange status."
    • addedInput schema / properties / edges / items / properties / funder_is_cex / examples
      Added value: +[
      +  false,
      +  true
      +]
    • addedInput schema / properties / edges / items / properties / lamports / default
      Added value: +0
    • changedInput schema / properties / edges / items / properties / lamports / description
      Previous value: -"Nonnegative integer funding amount in lamports, not SOL or a string; defaults to 0. Currently does not affect scoring."New value: +"Integer funding amount in lamports, not SOL, a numeric string or boolean. Validated but not used in grouping or scoring."
    • addedInput schema / properties / edges / items / properties / lamports / examples
      Added value: +[
      +  1000000000
      +]
    • changedInput schema / properties / edges / items / properties / mint / description
      Previous value: -"Required launched token identifier, unique within this batch. One edge per mint; not a trading-pair address."New value: +"Launched token identifier, not its trading-pair address. Same identifier rules as deployer. Must be unique across the batch, even when other fields differ."
    • addedInput schema / properties / edges / items / properties / mint / examples
      Added value: +[
      +  "DemoMintA"
      +]
    • changedInput schema / properties / edges / items / properties / mint / pattern
      Previous value: -"^[^\\s\\u0000-\\u001f\\u007f-\\u009f\\ud800-\\udfff]+$"New value: +"^[^\\u0000-\\u0020\\u007f-\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u2029\\u202f\\u205f\\u3000\\ud800-\\udfff]+(?![\\s\\S])"
    • addedInput schema / properties / edges / items / properties / outcome / default
      Added value: +"unknown"
    • changedInput schema / properties / edges / items / properties / outcome / description
      Previous value: -"Caller-supplied label; defaults to unknown. rugged maps to rug. Unknown is missing evidence, not safe; labels are not verified."New value: +"Caller-supplied label; rugged maps to rug. unknown is excluded from labeled-launch counts and rug-rate denominators. Labels are not verified."
    • addedInput schema / properties / edges / items / properties / outcome / examples
      Added value: +[
      +  "unknown",
      +  "rugged"
      +]
    • 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"
      +}
  2. First observedv1.0.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate readOnly, idempotent, and non-destructive behavior, and the description goes well beyond them by disclosing stateless local computation, absence of network/RPC or storage writes, and the fact that invalid input rejects the whole batch. It also warns that scores are not probabilities and that low scores do not mean safe, which is crucial behavioral context for an AI agent. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than typical but every sentence earns its place: purpose, exclusions, input constraints, grouping semantics, statelessness, output contents, and error behavior are all covered. It is packed but not rambling; a bulleted structure would improve scannability, but the front-loaded purpose and tight prose keep it well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex scoring tool with an output schema, the description covers all critical invocation context: input shape and limits, grouping sensitivity, validation semantics, stateless behavior, batch size limit, return contents, and retry behavior on invalid input. The presence of an output schema means return-value details need not be repeated, and the description still summarizes what the output contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% coverage, so the baseline is 3, but the description adds meaningful operational nuance: edge count limits, the requirement to keep connected groups together, the cross-batch effect of funder_is_cex, and the fact that lamports/block_time are validated but do not affect scoring. This goes beyond schema documentation, though the schema still carries most of the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Score funding-association groups in supplied Solana launch records') and clearly names the deliverable ('explainable 0-1 heuristic components and label-coverage evidence'). It also distinguishes itself from sibling cluster_launches by noting that membership-only grouping belongs to that sibling. This gives an agent a precise mental model of the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is explicit about when to use the tool ('Use after your pipeline resolves deployer, pre-launch funder and mint') and when not to use it ('Not for wallet/token lookup, prediction, ownership attribution or safety decisions'). It even names the sibling alternative for membership-only needs. This is strong routing guidance with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools