vetagent

Pre-trade safety check for AI agents: honeypot, tax, liquidity and rug risk before you buy.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
93%
Qualität der Benennung
100%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~2,073Tokens (Tool-Definitionen)
~5.3 KBTypische Antwortgröße
Mittlere Auswirkung auf die Aufmerksamkeit (1.62% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "vetagent": {
      "url": "https://vetagent.dev/mcp"
    }
  }
}

Remote-Endpunkte

https://vetagent.dev/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (3)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢assess_token_risk(address, chain_hint, verbose)

Safety check to run BEFORE buying, holding, or recommending a token. Returns an actionable verdict (low / medium / high / unknown), a 0-100 risk score, and the individual signals behind it. Covers on every chain: liquidity depth, trading-pair age, cross-chain presence, same-ticker impersonation. Covers on Ethereum, BSC and Base only: sell simulation (honeypot detection, buy/sell/transfer taxes), whether the contract is open source, and the aggregate verdicts of upstream security scanners. Covers on Solana: the mint/freeze authority, the RugCheck score, and the SPL Token-2022 extension block -- non-transferable, frozen-by-default, transfer fee (with its cap), permanent delegate, transfer hook, pausable, close authority, scaled balances and interest-bearing balances. Every other extension the report carries is named in the answer with the reason it is not scored, so silence about one means it was considered, not that it went unread. No sell simulation runs on Solana, nor on the four other EVM chains accepted as a chain_hint (polygon, arbitrum, optimism, avalanche): nothing there tests whether a holder can sell, so the answer comes back 'unknown' rather than 'low'. No holder concentration on any chain -- on EVM it needs an oracle the benchmark holds out, and on Solana the upstream omits holders. IMPORTANT: risk_level 'unknown' means a critical check could not be completed. It is NOT a low-risk result and must not be used to justify a trade; evidence.data_gaps lists exactly what was missing, and unknown_kind says whose gap it is: 'infrastructure' and 'mixed' mean an upstream of ours failed and come with next_action 'retry' and retry_after_seconds (in a 'mixed' answer the rest was worked out without that upstream, so the retry can change any of it); 'coverage' comes with 'abstain'. 'confidence' measures how complete the input data was, not how safe the token is. Reports observable on-chain risk only. Not financial advice, does not size positions, and cannot see off-chain risk such as team behaviour, social engineering, or a rug executed through governance. Treat 'low' as 'no fatal signal found in the checks that ran', never as 'safe to buy'.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Token contract address: ERC-20 (0x + 40 hex) or Solana (base58)"
    },
    "chain_hint": {
      "type": "string",
      "description": "Optional chain name (ethereum / bsc / base / polygon / arbitrum / solana). Strongly recommended: Ethereum forks such as PulseChain inherit contract addresses, so the same address exists on several chains at wildly different prices. Without it, an answer covers one chain -- the one holding the most depth -- and names it."
    },
    "verbose": {
      "type": "boolean",
      "default": false,
      "description": "Return full upstream evidence. Off by default to save tokens."
    }
  },
  "required": [
    "address"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string"
    },
    "risk_level": {
      "type": "string",
      "enum": [
        "low",
        "medium",
        "high",
        "unknown"
      ],
      "description": "'unknown' means a critical check could not be completed. It is NOT a low-risk result and must not justify a trade."
    },
    "risk_score": {
      "type": "integer",
      "description": "0-100; higher is more dangerous"
    },
    "confidence": {
      "type": "string",
      "enum": [
        "low",
        "medium",
        "high"
      ],
      "description": "How complete the input data was — not how safe the token is."
    },
    "signals": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string",
            "enum": [
              "ok",
              "info",
              "warn",
              "critical",
              "fatal"
            ]
          },
          "name": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "category": {
            "type": "string"
          }
        }
      }
    },
    "recommendation": {
      "type": "string"
    },
    "evidence": {
      "type": "object"
    },
    "driver": {
      "type": [
        "object",
        "null"
      ],
      "description": "The signal that decided the verdict: {name, category}. null when nothing above ok fired."
    },
    "checked_at": {
      "type": "string",
      "description": "When this answer was made, ISO-8601 UTC."
    },
    "evidence_max_age_seconds": {
      "type": "integer",
      "description": "Age of the oldest evidence used; 0 when every source answered live."
    },
    "unknown_kind": {
      "type": "string",
      "enum": [
        "infrastructure",
        "coverage",
        "mixed"
      ],
      "description": "Present only when risk_level is unknown."
    },
    "next_action": {
      "type": "string",
      "enum": [
        "retry",
        "abstain"
      ]
    },
    "retry_after_seconds": {
      "type": "integer"
    }
  },
  "required": [
    "address",
    "risk_level",
    "risk_score",
    "confidence",
    "signals"
  ]
}
🟢get_token_liquidity(address, chain_hint)

Liquidity snapshot for a token's primary trading pair: price, 24h volume, pair count and the chains it trades on. Check 'status' before using the numbers. 'ok' means real data. 'unavailable' means the upstream request failed, which does NOT mean the token has no liquidity. 'not_found' means no trading pair exists for this address at all. 'unpriced' means pairs exist but no source has costed them, so liquidity_usd is null and the depth is unknown -- this is NOT a report of zero liquidity. 'drained' means every pool on the token's own chain reports its depth and every one is empty: there is nothing to sell into.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Token contract address"
    },
    "chain_hint": {
      "type": "string",
      "description": "Optional chain name; disambiguates forks that share addresses"
    }
  },
  "required": [
    "address"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "ok",
        "not_found",
        "unpriced",
        "drained",
        "unavailable"
      ]
    },
    "price_usd": {
      "type": "number"
    },
    "liquidity_usd": {
      "type": [
        "number",
        "null"
      ]
    },
    "volume_24h_usd": {
      "type": "number"
    },
    "pairs_total": {
      "type": "integer"
    },
    "checked_at": {
      "type": "string",
      "description": "When this answer was made, ISO-8601 UTC."
    },
    "served_stale": {
      "type": "array",
      "description": "Present only when an upstream was unreachable and this answer used cached data. Each entry names the source and how many seconds old it was.",
      "items": {
        "type": "object"
      }
    },
    "chains": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "address",
    "status"
  ]
}
🟢find_new_hot_pools(chain, limit)

Scan a chain for the newest and most active trading pools, returning name, token_address, price, liquidity, 24h volume and pool age. Discovery only. New pools carry inherently high risk and appearing here is NOT a safety endorsement — pass token_address straight to assess_token_risk for anything you intend to act on.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "default": "solana",
      "description": "Chain name, e.g. solana / ethereum / base / bsc"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "minimum": 1,
      "maximum": 50
    }
  }
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string"
    },
    "network": {
      "type": "string",
      "description": "The upstream's own name for the chain, which differs from `chain` (eth vs ethereum)."
    },
    "count": {
      "type": "integer",
      "description": "How many pools are in `pools`. NOT how many were examined -- that is `scanned`. This field reported the fetched total beside a shorter list until 2026-09-08, so a caller reading it believed it had seen twenty pools when it had three."
    },
    "scanned": {
      "type": "integer",
      "description": "How many distinct pools were examined before the limit was applied. Always >= count."
    },
    "sources_ok": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "new",
          "trending"
        ]
      },
      "description": "Which of the two upstream listings answered. Both means a full scan."
    },
    "sources_failed": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "new",
          "trending"
        ]
      },
      "description": "Which listings did NOT answer. A non-empty array means this is a PARTIAL scan: a smaller `scanned` here is a coverage gap, not a quiet market. Treat it as missing information, not as absence."
    },
    "checked_at": {
      "type": "string",
      "description": "When this answer was made, ISO-8601 UTC."
    },
    "served_stale": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Present only when an upstream was unreachable and cached data was used. Each entry names the source and its age in seconds."
    },
    "pools": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "pool_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "token_address": {
            "type": "string",
            "description": "The base token. This is the field to hand to assess_token_risk -- pool_id is not an address, and passing it produced six empty answers before the discovery-to-vetting seam was fixed."
          },
          "kind": {
            "type": "string",
            "enum": [
              "new",
              "trending"
            ]
          },
          "price_usd": {
            "type": [
              "number",
              "null"
            ]
          },
          "liquidity_usd": {
            "type": [
              "number",
              "null"
            ]
          },
          "volume_24h_usd": {
            "type": [
              "number",
              "null"
            ]
          },
          "pool_age_days": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "pool_id",
          "name",
          "token_address",
          "kind"
        ]
      }
    }
  },
  "required": [
    "chain",
    "network",
    "count",
    "scanned",
    "sources_ok",
    "sources_failed",
    "pools"
  ],
  "description": "Discovery only, never an endorsement. Call assess_token_risk on token_address before saying anything about a pool's risk."
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet3 Tools
verifiziertVersion nicht aufgezeichnet3 Tools