Server definition
- Hash
- sha256:73be25721e6bb7f75fdf511e5a3d0cda7b2c1f1724bdbdd251109ba6fdb1b693
- What it is
- What a remote MCP server returned when asked what it offers: 15 tools
The blob, as servednamed by its sha256
{
"instructions": "Pay-per-use data and tools for AI agents: crypto token safety, prices and wallets, an LLM gateway, web search and documents to Markdown, library docs, package safety and AI model prices for coding agents, company research, news, UK/EU open data and an x402 market guide. Pay per call in USDC with x402 (Base and other networks), or with prepaid credits; try it free over MCP. No account needed. Contact: https://aayatai.com/contact (form). Free: tools marked \"In the free trial\" give 20 free calls a day (per free key when the server URL has ?key=; get one at https://aayatai.com/mcp/setup). When the free calls or the credit run out, the tool answer says how to top up; the \"topup\" tool gives the exact USDC amount and address, and the \"balance\" tool shows free calls and credit left. Failed tool runs are never charged. This endpoint lists 13 tools; every tool (160) can be called here by name, and find-best-tool finds the right one. Themed tool lists: https://aayatai.com/mcp/crypto, https://aayatai.com/mcp/dev, https://aayatai.com/mcp/research, https://aayatai.com/mcp/everyday, https://aayatai.com/mcp/ai, https://aayatai.com/mcp/uk, https://aayatai.com/mcp/perps, https://aayatai.com/mcp/github, https://aayatai.com/mcp/web3, https://aayatai.com/mcp/all; or add ?tools=name,name to the URL. x402 clients: an unpaid call returns isError with the x402 PaymentRequired JSON in a text content block (first, unless the URL carries a key); retry with the signed payment in params._meta[\"x402/payment\"].",
"tools": [
{
"description": "Shows how many free calls are left today and the prepaid credit balance (with roughly how many paid calls it covers), plus any top-up still waiting for payment. Use when the user asks what's left, or after `topup` to see whether a payment has arrived; to add credit, use `topup` instead. Reads the key in the server URL if there is one, otherwise the free calls for this connection. Free to call. Pass `code` to redeem a credit code (ac_…) we gave back for an empty result: it's added to the key's balance (a new key is made if there isn't one).",
"inputSchema": {
"additionalProperties": false,
"examples": [
{}
],
"properties": {
"code": {
"description": "Optional: a credit code to redeem, e.g. ac_0123456789abcdef01234567.",
"pattern": "^ac_[0-9a-f]{24}$",
"type": "string"
}
},
"type": "object"
},
"name": "balance",
"outputSchema": {
"properties": {
"apiKey": {
"description": "A new API key, when a code was redeemed without one (shown once).",
"type": "string"
},
"approxPaidCalls": {
"description": "Roughly how many $0.01 calls the balance covers.",
"type": "integer"
},
"balanceUsd": {
"description": "Prepaid credit left, in US dollars (only with a key).",
"type": "number"
},
"calls": {
"description": "Paid calls made with this key so far.",
"type": "integer"
},
"credits": {
"description": "Null when the server URL has no API key.",
"type": "null"
},
"freeTrial": {
"description": "Free calls left today (null if the free trial couldn't be checked or is off).",
"properties": {
"perDay": {
"description": "Free calls allowed per day.",
"type": "integer"
},
"perKey": {
"description": "True when counted for the API key in the server URL.",
"type": "boolean"
},
"remaining": {
"description": "Free calls left today.",
"type": "integer"
},
"resets": {
"description": "When the free calls reset (00:00 UTC).",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"lowBalance": {
"description": "True when the balance is running low.",
"type": "boolean"
},
"recentCalls": {
"description": "The latest paid calls with their cost.",
"items": {
"type": "object"
},
"type": "array"
},
"redeemedUsd": {
"description": "Credit added from a redeemed code.",
"type": "number"
},
"serverUrl": {
"description": "The server URL with the new key.",
"type": "string"
},
"topups": {
"description": "Recent top-ups (open, paid or expired), newest first.",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "An answer written only from a library's current docs, with a code example and sources. ★ One of our best tools. Reads the project's current docs (llms.txt, docs pages or latest README) for any npm, PyPI, crates or Go library and answers from them alone, with a code example, the version it applies to and cited sources; says so when the docs don't cover it. library is the package name, question your question; ecosystem defaults to npm. Use for a direct answer to one how-to question about a library, from its current docs. Instead, use `docs-lib` ($0.005) for the docs to read yourself. Answers may be cached for up to 6 hours. Price: $0.02 USDC per call (x402 or prepaid credits); failed calls are free. Paid only (not in the free trial). Try docs-lib free first.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"ecosystem": "npm",
"library": "hono",
"question": "How do I enable CORS for only the /api routes?"
}
],
"properties": {
"ecosystem": {
"default": "npm",
"description": "Package ecosystem: npm, pypi, crates (Rust) or go (Go modules).",
"enum": [
"npm",
"pypi",
"crates",
"go"
],
"type": "string"
},
"library": {
"description": "Library/package name as published, e.g. hono, fastapi, serde, github.com/gin-gonic/gin.",
"maxLength": 214,
"minLength": 1,
"type": "string"
},
"question": {
"description": "Your question, e.g. How do I enable CORS for one route?",
"maxLength": 1000,
"minLength": 5,
"type": "string"
}
},
"required": [
"library",
"question"
],
"type": "object"
},
"name": "docs-answer",
"outputSchema": {
"properties": {
"answer": {
"description": "Markdown answer; [n] cites sources[n-1].",
"type": "string"
},
"docsTokens": {
"type": "integer"
},
"ecosystem": {
"description": "The package ecosystem (npm, pypi, crates or go).",
"type": "string"
},
"fetchedAt": {
"description": "When the data was fetched from its source (ISO 8601 time).",
"type": "string"
},
"library": {
"type": "string"
},
"question": {
"type": "string"
},
"schemaVersion": {
"const": "docs-answer@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"sources": {
"description": "Where the data came from.",
"items": {
"properties": {
"kind": {
"enum": [
"llms.txt",
"llms-full.txt",
"docs-page",
"readme"
],
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"version": {
"type": [
"string",
"null"
]
}
},
"required": [
"library",
"version",
"question",
"answer",
"sources"
],
"type": "object"
}
},
{
"description": "Find the AI-ready docs for any library or API: checks the project's docs site (from its npm, PyPI, crates or Go metadata) or any company domain (docs., developers., /docs) for llms.txt and llms-full.txt files, with titles, sizes and page counts, plus homepage and repository. Use to locate where a project's AI-ready docs (llms.txt) live. Instead, use `docs-lib` ($0.005) for the docs content itself. Answers may be cached for up to 24 hours. Price: $0.003 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"ecosystem": "npm",
"library": "hono"
}
],
"properties": {
"ecosystem": {
"default": "npm",
"description": "Package ecosystem: npm, pypi, crates (Rust) or go (Go modules).",
"enum": [
"npm",
"pypi",
"crates",
"go"
],
"type": "string"
},
"library": {
"description": "Package name (with ecosystem), e.g. hono, fastapi.",
"maxLength": 214,
"type": "string"
},
"site": {
"description": "Or: a company/API domain, e.g. stripe.com or https://docs.stripe.com.",
"maxLength": 253,
"type": "string"
}
},
"type": "object"
},
"name": "docs-find",
"outputSchema": {
"properties": {
"checked": {
"description": "Every address tried.",
"items": {
"type": "string"
},
"type": "array"
},
"checkedAt": {
"description": "When the check ran (ISO 8601 time).",
"type": "string"
},
"found": {
"items": {
"properties": {
"bytes": {
"type": [
"integer",
"null"
]
},
"kind": {
"type": "string"
},
"links": {
"type": [
"integer",
"null"
]
},
"summary": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"homepage": {
"type": [
"string",
"null"
]
},
"query": {
"type": "object"
},
"repository": {
"type": [
"string",
"null"
]
},
"schemaVersion": {
"const": "docs-find@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"tip": {
"type": "string"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"version": {
"type": [
"string",
"null"
]
}
},
"required": [
"query",
"found",
"checked"
],
"type": "object"
}
},
{
"description": "Stop your assistant using stale APIs: the latest docs for any npm, PyPI, crates or Go library, trimmed to your topic. ★ One of our best tools. Up-to-date docs for any npm, PyPI, crates or Go library: finds the project's own llms.txt and docs pages (or the latest release's README), keeps only the sections relevant to topic within a tokens budget, and returns them with sources and the current version. library is the package name; ecosystem defaults to npm. Use before writing code against a library, to read its current docs on a topic. Instead, use `docs-answer` ($0.02) for a direct answer to one question; `docs-find` ($0.003) for docs locations only. Answers may be cached for up to 6 hours. Price: $0.005 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"ecosystem": "npm",
"library": "hono",
"tokens": 3000,
"topic": "cors middleware"
}
],
"properties": {
"ecosystem": {
"default": "npm",
"description": "Package ecosystem: npm, pypi, crates (Rust) or go (Go modules).",
"enum": [
"npm",
"pypi",
"crates",
"go"
],
"type": "string"
},
"library": {
"description": "Library/package name as published, e.g. hono, fastapi, serde, github.com/gin-gonic/gin.",
"maxLength": 214,
"minLength": 1,
"type": "string"
},
"tokens": {
"default": 4000,
"description": "Most tokens of documentation to return.",
"maximum": 12000,
"minimum": 500,
"type": "integer"
},
"topic": {
"description": "What you need, e.g. routing, authentication, streaming responses (default: overview).",
"maxLength": 200,
"type": "string"
}
},
"required": [
"library"
],
"type": "object"
},
"name": "docs-lib",
"outputSchema": {
"properties": {
"content": {
"description": "Markdown documentation, each part headed by an HTML comment naming its source.",
"type": "string"
},
"ecosystem": {
"description": "The package ecosystem (npm, pypi, crates or go).",
"type": "string"
},
"fetchedAt": {
"description": "When the data was fetched from its source (ISO 8601 time).",
"type": "string"
},
"homepage": {
"type": [
"string",
"null"
]
},
"library": {
"type": "string"
},
"schemaVersion": {
"const": "docs-lib@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"sources": {
"description": "Where the data came from.",
"items": {
"properties": {
"kind": {
"enum": [
"llms.txt",
"llms-full.txt",
"docs-page",
"readme"
],
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"tokens": {
"description": "Estimated tokens in content.",
"type": "integer"
},
"topic": {
"type": [
"string",
"null"
]
},
"truncated": {
"description": "True if relevant material was left out to fit the budget.",
"type": "boolean"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"version": {
"description": "Latest published version the docs were matched to.",
"type": [
"string",
"null"
]
}
},
"required": [
"library",
"ecosystem",
"version",
"content",
"tokens",
"sources"
],
"type": "object"
}
},
{
"description": "Web page extractor for AI agents: fetch any public URL and get clean Markdown, the page title and all links as JSON, with scripts, styles and menus removed. url is the page address (https://...). Private or internal addresses are blocked; pages over 2 MB or slower than 10 seconds are rejected and you are not charged. Use to read one HTML web page as Markdown together with all its links. Instead, use `markdown` ($0.002) for PDFs and Office documents too. Answers may be cached for up to 10 minutes. Price: $0.005 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"url": "https://example.com"
}
],
"properties": {
"url": {
"description": "Full http(s) address of a public web page.",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "extract",
"outputSchema": {
"properties": {
"links": {
"items": {
"properties": {
"href": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"text",
"href"
],
"type": "object"
},
"type": "array"
},
"markdown": {
"description": "Main page content as Markdown.",
"type": "string"
},
"schemaVersion": {
"const": "extract@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"title": {
"type": "string"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"url": {
"description": "Final address after redirects.",
"type": "string"
}
},
"required": [
"url",
"title",
"markdown",
"links"
],
"type": "object"
}
},
{
"description": "Describe a task and get the best pay-per-call APIs and MCP tools for it, ranked with prices and reliability. Find the best tool for a job. Describe the task in plain English (e.g. 'check if a token is a rug pull', 'scrape a page to markdown', 'cheap LLM chat') and get a short ranked list of pay-per-call x402 APIs and MCP servers side by side: what each does, exactly how to use it, price, reliability from our own checks, and why it fits. Neutral: ranking is never paid, and you call and pay each tool directly. Use to find pay-per-call APIs and MCP tools from any provider for a task. Answers may be cached for up to 10 minutes. Price: $0.002 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"job": "check if a token is a rug pull",
"kind": "any",
"limit": 5
}
],
"properties": {
"job": {
"description": "The job, in plain English.",
"maxLength": 300,
"minLength": 3,
"type": "string"
},
"kind": {
"default": "any",
"description": "any, api (x402 pay-per-call APIs only) or mcp (MCP servers only).",
"enum": [
"any",
"api",
"mcp"
],
"type": "string"
},
"limit": {
"default": 5,
"description": "How many options to return.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"maxPrice": {
"description": "Highest price per call in USD, for pay-per-call APIs.",
"maximum": 100,
"minimum": 0,
"type": "number"
}
},
"required": [
"job"
],
"type": "object"
},
"name": "find-best-tool",
"outputSchema": {
"properties": {
"answer": {
"description": "One-paragraph recommendation an assistant can act on.",
"type": "string"
},
"job": {
"type": "string"
},
"note": {
"description": "Extra context about this answer.",
"type": "string"
},
"results": {
"description": "Best first. kind, name, does, howToUse (one line), price, reliability, why, link.",
"items": {
"properties": {
"does": {
"type": "string"
},
"howToUse": {
"type": "string"
},
"kind": {
"enum": [
"x402 API",
"MCP server"
],
"type": "string"
},
"link": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"price": {
"type": "string"
},
"rank": {
"type": "integer"
},
"reliability": {
"type": "string"
},
"usageTerms": {
"description": "The seller's declared usage terms (resale, caching, attribution...) for tools on our marketplace; null = not declared.",
"type": [
"object",
"null"
]
},
"why": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"schemaVersion": {
"const": "find-best-tool@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"searched": {
"description": "How many x402 APIs and MCP servers were considered, and what we understood: understoodAs (the kind of job), action (send, receive, validate, assess or read) and channel (sms, whatsapp, email...), or null.",
"type": "object"
},
"sponsored": {
"description": "At most one paid placement matching the job, clearly labelled; never part of the ranked results.",
"type": "object"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
}
},
"required": [
"job",
"answer",
"results"
],
"type": "object"
}
},
{
"description": "What a send, token transfer or swap costs right now on each major chain, and which chain is cheapest. Live network fees on Ethereum, Base, Arbitrum, Optimism, Polygon, BNB, Avalanche, Solana and Bitcoin: slow/standard/fast fee rates, congestion and trend, and the USD cost of a send, token transfer and swap on each, plus the cheapest chain now. Pick chains with chains (e.g. base,solana); all by default. Use to pick the cheapest chain, or a good moment, to send or swap. Answers may be cached for up to 15 seconds. Price: $0.002 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"chains": "base,ethereum,solana"
}
],
"properties": {
"chains": {
"description": "Comma-separated chains (default all): ethereum, base, arbitrum, optimism, polygon, bsc, avalanche, solana, bitcoin.",
"maxLength": 120,
"type": "string"
}
},
"type": "object"
},
"name": "gas",
"outputSchema": {
"properties": {
"chains": {
"items": {
"properties": {
"baseFee": {
"type": [
"number",
"null"
]
},
"chain": {
"type": "string"
},
"congestion": {
"enum": [
"low",
"normal",
"high"
],
"type": "string"
},
"costs": {
"description": "Cost of common actions at standard speed: {native, usd}.",
"type": "object"
},
"nativeUsd": {
"type": [
"number",
"null"
]
},
"speeds": {
"description": "slow, standard, fast fee rates in `unit`.",
"type": "object"
},
"symbol": {
"type": "string"
},
"trend": {
"enum": [
"rising",
"falling",
"steady"
],
"type": "string"
},
"unit": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"cheapest": {
"description": "Cheapest chain now for a transfer and a swap (USD).",
"type": "object"
},
"checkedAt": {
"description": "When the check ran (ISO 8601 time).",
"type": "string"
},
"schemaVersion": {
"const": "gas@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"source": {
"type": "string"
},
"unavailable": {
"description": "Chains whose fee source did not answer.",
"type": "array"
}
},
"required": [
"chains",
"cheapest"
],
"type": "object"
}
},
{
"description": "Convert any web page, PDF, Word (.docx), Excel (.xlsx/.xls), OpenDocument, CSV or XML URL to clean, LLM-ready Markdown, up to 10 MB: returns title, Markdown, links (web pages) and character count. url is the document address (https://...). Private addresses are blocked; failures are not charged. Use to read one web page or document (PDF, Word, Excel) as Markdown. Answers may be cached for up to 10 minutes. Price: $0.002 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"url": "https://example.com"
}
],
"properties": {
"url": {
"description": "Address of a public web page or document.",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "markdown",
"outputSchema": {
"properties": {
"chars": {
"type": "integer"
},
"contentType": {
"type": "string"
},
"converter": {
"enum": [
"html",
"text",
"document",
"browser"
],
"type": "string"
},
"links": {
"items": {
"properties": {
"href": {
"type": "string"
},
"text": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"markdown": {
"type": "string"
},
"schemaVersion": {
"const": "markdown@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"title": {
"type": "string"
},
"truncated": {
"description": "True if the Markdown was cut at 500,000 characters.",
"type": "boolean"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"url": {
"description": "Final address after redirects.",
"type": "string"
}
},
"required": [
"url",
"contentType",
"title",
"markdown",
"chars",
"truncated",
"converter"
],
"type": "object"
}
},
{
"description": "Ask anything: it searches, reads the best pages and writes a short answer with citations. ★ One of our best tools. Web search with a cited answer for AI agents (RAG), open-sources tier: finds pages via Wikipedia, Hacker News, DuckDuckGo and Stack Overflow, reads the top ones (robots.txt respected) and writes a concise cited answer, plus the pages read. q is your question; pages (1-5, default 3) is how many pages to read. Moves to full-web search (and price) when a premium index is connected. Use when you want a written answer with sources, not a list of links. Instead, use `search-open` ($0.002) for links only. Answers may be cached for up to 30 minutes. Price: $0.015 USDC per call (x402 or prepaid credits); failed calls are free. Paid only (not in the free trial). Try search-open free first.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"pages": 3,
"q": "What is the HTTP 402 status code used for?"
}
],
"properties": {
"detail": {
"default": "full",
"description": "brief = key fields only (same price)",
"enum": [
"full",
"brief"
],
"type": "string"
},
"pages": {
"default": 3,
"description": "How many top result pages to read (1-5).",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Question or topic to research.",
"maxLength": 300,
"minLength": 3,
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search-answer",
"outputSchema": {
"properties": {
"answer": {
"description": "Markdown answer; [n] cites pagesRead with that n.",
"type": "string"
},
"answeredAt": {
"type": "string"
},
"pagesRead": {
"items": {
"properties": {
"n": {
"type": "integer"
},
"note": {
"type": "string"
},
"read": {
"type": "boolean"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"provider": {
"description": "Which index found the pages: brave, serper, exa, tavily or open.",
"type": "string"
},
"query": {
"type": "string"
},
"results": {
"items": {
"properties": {
"publishedAt": {
"type": [
"string",
"null"
]
},
"snippet": {
"type": "string"
},
"source": {
"description": "Which index found it.",
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"schemaVersion": {
"const": "search-answer@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"sources": {
"description": "Where the data came from.",
"items": {
"type": "object"
},
"type": "array"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
}
},
"required": [
"query",
"answer",
"pagesRead",
"results",
"provider"
],
"type": "object"
}
},
{
"description": "Fast, cheap search across Wikipedia, Hacker News, DuckDuckGo and Stack Overflow. ★ One of our best tools. Web search API for AI agents, lowest-cost tier: Wikipedia articles, Hacker News stories, DuckDuckGo instant answers and Stack Overflow questions (quota permitting) in one call, merged, de-duplicated and ranked, with titles, links, snippets and dates. Good for facts and for tech news and discussion (Hacker News). q is the search words; limit caps results; detail=brief trims fields. Use for quick facts, tech and programming lookups where results up to an hour old are fine. Instead, use `search-answer` ($0.015) for a written answer with citations. Answers may be cached for up to 1 hour. Price: $0.002 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"limit": 10,
"q": "HTTP 402 payment required"
}
],
"properties": {
"detail": {
"default": "full",
"description": "brief = key fields only (same price)",
"enum": [
"full",
"brief"
],
"type": "string"
},
"limit": {
"default": 10,
"description": "Most results to return.",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "What to search for.",
"maxLength": 300,
"minLength": 2,
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search-open",
"outputSchema": {
"properties": {
"count": {
"description": "Number of items returned.",
"type": "integer"
},
"provider": {
"description": "brave, serper or exa (premium index) or open (free sources).",
"type": "string"
},
"query": {
"type": "string"
},
"results": {
"items": {
"properties": {
"publishedAt": {
"type": [
"string",
"null"
]
},
"snippet": {
"type": "string"
},
"source": {
"description": "Which index found it.",
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"schemaVersion": {
"const": "search-open@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"searchedAt": {
"type": "string"
},
"sources": {
"description": "Which sources answered.",
"items": {
"type": "object"
},
"type": "array"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
}
},
"required": [
"query",
"provider",
"results",
"count",
"sources"
],
"type": "object"
}
},
{
"description": "Live price of any token on Base, Solana, Ethereum, BNB, Arbitrum, Polygon, Optimism or Avalanche from DEX data: USD price, total liquidity, 24h volume, buys/sells, price change (5m/1h/6h/24h), market cap, FDV, pair count and pool age. For a full rug-pull check use token-safety. Use when you only need a token's current price, liquidity and volume. Instead, use `token-safety` ($0.02) to check it is safe. Answers may be cached for up to 30 seconds. Price: $0.005 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed",
"chain": "base"
}
],
"properties": {
"address": {
"description": "Token contract address (0x...) or Solana mint address. Give this or symbol.",
"maxLength": 64,
"type": "string"
},
"chain": {
"description": "Chain of the token (base when an address is given without one).",
"enum": [
"base",
"solana",
"ethereum",
"bsc",
"arbitrum",
"polygon",
"optimism",
"avalanche"
],
"type": "string"
},
"symbol": {
"description": "Or a symbol (ETH, BTC, SOL, PEPE). If several tokens share it, the answer lists the top matches and asks for chain or address (not charged).",
"maxLength": 20,
"minLength": 2,
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "token-price",
"outputSchema": {
"properties": {
"address": {
"type": "string"
},
"chain": {
"description": "The blockchain network queried.",
"type": "string"
},
"fdvUsd": {
"type": [
"number",
"null"
]
},
"fetchedAt": {
"description": "When the price was fetched from its source (older than servedAt when served from our shared cache).",
"type": "string"
},
"found": {
"description": "False if no source has a market or price for the token.",
"type": "boolean"
},
"links": {
"type": "object"
},
"liquidityKnown": {
"description": "False when only a price was available.",
"type": "boolean"
},
"liquidityNote": {
"description": "Present when liquidity is unknown, saying why.",
"type": "string"
},
"liquidityUsd": {
"description": "Total USD liquidity across pools; null when unknown (only a price was available), never a false $0.",
"type": [
"number",
"null"
]
},
"marketCapUsd": {
"type": [
"number",
"null"
]
},
"marketNote": {
"description": "Plain sentence when pools are last-known data: their age and where the price came from.",
"type": "string"
},
"marketSource": {
"description": "DexScreener, GeckoTerminal or DefiLlama (price only).",
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"oldestPairCreatedAt": {
"type": [
"string",
"null"
]
},
"pairs": {
"description": "Number of pools; null when unknown.",
"type": [
"integer",
"null"
]
},
"poolsAsOf": {
"description": "Present when pool data is the last known (DEX sources busy): when it was fetched.",
"type": "string"
},
"priceChange": {
"description": "Percent change over 5m, 1h, 6h, 24h.",
"type": "object"
},
"priceNative": {
"description": "Price in the pair's quote token.",
"type": [
"number",
"null"
]
},
"priceSource": {
"description": "Where the price came from, when not the pools' own source.",
"type": "string"
},
"priceUsd": {
"type": [
"number",
"null"
]
},
"resolvedFrom": {
"description": "When a symbol was given: the symbol, the chosen chain and address, its name and status (verified, likely-real, unverified), a note, and up to 3 alternatives with the same symbol.",
"type": "object"
},
"schemaVersion": {
"const": "token-price@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"servedAt": {
"description": "When this answer was served.",
"type": "string"
},
"source": {
"type": "string"
},
"symbol": {
"type": [
"string",
"null"
]
},
"topPair": {
"type": [
"object",
"null"
]
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"txns24h": {
"description": "24h buys and sells; null when unknown.",
"type": [
"object",
"null"
]
},
"volume24hUsd": {
"description": "24h volume in USD; null when unknown.",
"type": [
"number",
"null"
]
}
},
"required": [
"address",
"chain",
"found",
"priceUsd",
"liquidityUsd",
"volume24hUsd",
"pairs"
],
"type": "object"
}
},
{
"description": "Everything about a token in one answer: safety, who holds it, liquidity, price action, whales and smart money, and news buzz, with an overall rating. ★ One of our best tools. Full token report, live: safety (honeypot, taxes, owner powers), holders (concentration, exchange/fund/locked share), liquidity (depth, locks, pools), price action, social/news buzz and smart-money signals (trade sizes, buy pressure, exchange and fund flows, whale transfers), with an overall rating and headline, in one call. 8 chains incl. Base, Solana, Ethereum. Use for a complete, live picture of one token before a decision. Instead, use `token-safety` ($0.02) for the scam check only. Answers may be cached for up to 20 seconds. Price: $0.10 USDC per call (x402 or prepaid credits); failed calls are free. Paid only (not in the free trial). Try token-safety free first.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed",
"chain": "base"
}
],
"properties": {
"address": {
"description": "Token contract address (0x...) or Solana mint address.",
"maxLength": 64,
"type": "string"
},
"chain": {
"default": "base",
"description": "Blockchain: base, solana, ethereum, bsc, arbitrum, polygon, optimism, avalanche.",
"enum": [
"base",
"solana",
"ethereum",
"bsc",
"arbitrum",
"polygon",
"optimism",
"avalanche"
],
"type": "string"
},
"detail": {
"default": "full",
"description": "brief = key fields only (same price)",
"enum": [
"full",
"brief"
],
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"name": "token-report",
"outputSchema": {
"properties": {
"address": {
"type": "string"
},
"buzz": {
"description": "0-100 buzz score, website and socials, paid DexScreener promotion and boosts, Hacker News mentions in 30 days.",
"type": "object"
},
"chain": {
"description": "The blockchain network queried.",
"type": "string"
},
"disclaimer": {
"description": "Limits of this answer; not financial, legal or security advice.",
"type": "string"
},
"generatedAt": {
"description": "When this answer was produced (ISO 8601 time).",
"type": "string"
},
"holders": {
"description": "Holder count, top-1/top-10 concentration, sellable top-10, supply by kind (exchange, fund/market maker, pool, locked, contract, wallet), labelled top holders.",
"type": [
"object",
"null"
]
},
"liquidity": {
"description": "Total USD, depth rating, locked %, liquidity/market cap, top pools.",
"type": "object"
},
"market": {
"properties": {
"fdvUsd": {
"type": [
"number",
"null"
]
},
"links": {
"type": "object"
},
"liquidityKnown": {
"description": "False when only a price was available.",
"type": "boolean"
},
"liquidityUsd": {
"description": "Total DEX liquidity across all pairs; null when unknown (only a price was available), never a false $0.",
"type": [
"number",
"null"
]
},
"marketCapUsd": {
"type": [
"number",
"null"
]
},
"marketNote": {
"description": "Plain sentence when pools are last-known data: their age and where the price came from.",
"type": "string"
},
"marketSource": {
"description": "DexScreener, GeckoTerminal or DefiLlama (price only).",
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"oldestPairCreatedAt": {
"type": [
"string",
"null"
]
},
"pairs": {
"description": "Number of DEX trading pairs; null when unknown.",
"type": [
"integer",
"null"
]
},
"poolsAsOf": {
"description": "Present when pool data is the last known (DEX sources busy): when it was fetched.",
"type": "string"
},
"priceChange": {
"description": "Percent change over 5m, 1h, 6h, 24h.",
"type": "object"
},
"priceNative": {
"description": "Price in the pair's quote token.",
"type": [
"number",
"null"
]
},
"priceSource": {
"description": "Where the price came from, when not the pools' own source.",
"type": "string"
},
"priceUsd": {
"type": [
"number",
"null"
]
},
"symbol": {
"type": [
"string",
"null"
]
},
"topPair": {
"type": [
"object",
"null"
]
},
"txns24h": {
"properties": {
"buys": {
"type": "integer"
},
"sells": {
"type": "integer"
}
},
"type": [
"object",
"null"
]
},
"volume24hUsd": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"name": {
"type": [
"string",
"null"
]
},
"priceAction": {
"description": "Price, % change 5m/1h/6h/24h, trend, volume and buys/sells per window, buy/sell ratio, volume/liquidity.",
"type": "object"
},
"safety": {
"properties": {
"checksNotRun": {
"items": {
"type": "string"
},
"type": "array"
},
"contract": {
"type": "object"
},
"flags": {
"items": {
"properties": {
"code": {
"type": "string"
},
"level": {
"type": "string"
},
"message": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"score": {
"description": "null when the contract scan or liquidity data was unavailable",
"type": [
"integer",
"null"
]
},
"verdict": {
"type": "string"
},
"verdictReason": {
"type": "string"
}
},
"type": "object"
},
"schemaVersion": {
"const": "token-report@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"smartMoney": {
"description": "Bias (bullish/bearish/neutral), signals, exchange, DEX and fund/market-maker flows, large transfers, top traders (when available).",
"type": "object"
},
"sources": {
"description": "Where the data came from.",
"items": {
"type": "string"
},
"type": "array"
},
"summary": {
"description": "Overall rating (avoid, caution, ok, unknown), one-line headline, highlights and risks.",
"properties": {
"headline": {
"type": "string"
},
"highlights": {
"items": {
"type": "string"
},
"type": "array"
},
"rating": {
"enum": [
"avoid",
"caution",
"ok",
"unknown"
],
"type": "string"
},
"risks": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"symbol": {
"type": [
"string",
"null"
]
},
"tier": {
"enum": [
"cached",
"live",
"deep"
],
"type": "string"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
}
},
"required": [
"address",
"chain",
"tier",
"summary",
"safety",
"liquidity",
"priceAction",
"buzz",
"smartMoney",
"market"
],
"type": "object"
}
},
{
"description": "Is this token safe to buy? Honeypot and sell-tax test, holder concentration, liquidity and locks, mint/freeze powers, proxy/upgradeable contract, with a 0-100 safety score and plain-English flags. ★ One of our best tools. Rug-pull and scam check for any token on Base, Solana, Ethereum, BNB, Arbitrum, Polygon, Optimism or Avalanche. Checks honeypot, buy/sell tax, mint/freeze authority, hidden owner, proxy, blacklist, holder concentration, locked liquidity, pool age and market data, then gives flags, a 0-100 safety score and a verdict. Use first for a quick verdict on whether one token (by contract address) is a scam or rug pull. Instead, use `token-report` ($0.10) for holders, whales, liquidity and news too. Answers may be cached for up to 10 minutes. Price: $0.02 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed",
"chain": "base"
}
],
"properties": {
"address": {
"description": "Token contract address (0x...) or Solana mint address.",
"maxLength": 64,
"type": "string"
},
"chain": {
"default": "base",
"description": "Blockchain: base, solana, ethereum, bsc, arbitrum, polygon, optimism, avalanche.",
"enum": [
"base",
"solana",
"ethereum",
"bsc",
"arbitrum",
"polygon",
"optimism",
"avalanche"
],
"type": "string"
},
"detail": {
"default": "full",
"description": "brief = key fields only (same price)",
"enum": [
"full",
"brief"
],
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"name": "token-safety",
"outputSchema": {
"properties": {
"address": {
"type": "string"
},
"chain": {
"description": "The blockchain network queried.",
"type": "string"
},
"checkedAt": {
"description": "When the check ran (ISO 8601 time).",
"type": "string"
},
"checksNotRun": {
"description": "Checks that couldn't run (data source blocked, empty or not covered).",
"items": {
"type": "string"
},
"type": "array"
},
"contract": {
"description": "Raw contract findings from the scanner.",
"type": "object"
},
"dataComplete": {
"description": "false when some checks couldn't run; see checksNotRun.",
"type": "boolean"
},
"disclaimer": {
"description": "Limits of this answer; not financial, legal or security advice.",
"type": "string"
},
"flags": {
"items": {
"properties": {
"code": {
"type": "string"
},
"level": {
"enum": [
"danger",
"warning",
"info"
],
"type": "string"
},
"message": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"freshness": {
"description": "When each part was checked: security (the scanner; a saved answer is at most 10 minutes old, and slow-changing findings such as owner, mint, holders and LP lock up to 24 hours, with their age in sources) and market.",
"properties": {
"checkedAt": {
"type": "string"
},
"market": {
"description": "asOf/ageSeconds: the price; poolsAsOf/poolsAgeSeconds: liquidity, volume and pools (can be older when only the price could be refreshed).",
"properties": {
"ageSeconds": {
"type": "integer"
},
"asOf": {
"type": "string"
},
"poolsAgeSeconds": {
"type": "integer"
},
"poolsAsOf": {
"type": "string"
},
"source": {
"type": "string"
}
},
"type": "object"
},
"security": {
"properties": {
"ageSeconds": {
"type": "integer"
},
"asOf": {
"type": "string"
},
"source": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"holders": {
"properties": {
"count": {
"type": [
"number",
"null"
]
},
"top": {
"type": "array"
},
"top10Percent": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"liquidity": {
"properties": {
"lockedPercent": {
"type": [
"number",
"null"
]
},
"lpHolders": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"market": {
"properties": {
"fdvUsd": {
"type": [
"number",
"null"
]
},
"links": {
"type": "object"
},
"liquidityKnown": {
"description": "False when only a price was available.",
"type": "boolean"
},
"liquidityUsd": {
"description": "Total DEX liquidity across all pairs; null when unknown (only a price was available), never a false $0.",
"type": [
"number",
"null"
]
},
"marketCapUsd": {
"type": [
"number",
"null"
]
},
"marketNote": {
"description": "Plain sentence when pools are last-known data: their age and where the price came from.",
"type": "string"
},
"marketSource": {
"description": "DexScreener, GeckoTerminal or DefiLlama (price only).",
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"oldestPairCreatedAt": {
"type": [
"string",
"null"
]
},
"pairs": {
"description": "Number of DEX trading pairs; null when unknown.",
"type": [
"integer",
"null"
]
},
"poolsAsOf": {
"description": "Present when pool data is the last known (DEX sources busy): when it was fetched.",
"type": "string"
},
"priceChange": {
"description": "Percent change over 5m, 1h, 6h, 24h.",
"type": "object"
},
"priceNative": {
"description": "Price in the pair's quote token.",
"type": [
"number",
"null"
]
},
"priceSource": {
"description": "Where the price came from, when not the pools' own source.",
"type": "string"
},
"priceUsd": {
"type": [
"number",
"null"
]
},
"symbol": {
"type": [
"string",
"null"
]
},
"topPair": {
"type": [
"object",
"null"
]
},
"txns24h": {
"properties": {
"buys": {
"type": "integer"
},
"sells": {
"type": "integer"
}
},
"type": [
"object",
"null"
]
},
"volume24hUsd": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"noVerdict": {
"description": "True when the verdict is 'unknown' (not enough data to judge).",
"type": "boolean"
},
"schemaVersion": {
"const": "token-safety@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"score": {
"description": "100 = no issues found. null when any check couldn't run (see checksNotRun): then read the verdict and summary.",
"maximum": 100,
"minimum": 0,
"type": [
"integer",
"null"
]
},
"sources": {
"description": "Every source used, with saved answers marked and dated.",
"items": {
"type": "string"
},
"type": "array"
},
"summary": {
"description": "One plain line to show a person: verdict, what's fine, main risks, what couldn't be checked.",
"type": "string"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"verdict": {
"enum": [
"high-risk",
"caution",
"low-risk",
"unknown"
],
"type": "string"
},
"verdictReason": {
"description": "Why: red flags found, which checks couldn't run, or insufficient data.",
"type": "string"
}
},
"required": [
"address",
"chain",
"verdict",
"score",
"flags",
"holders",
"liquidity",
"market",
"sources",
"freshness"
],
"type": "object"
}
},
{
"description": "Start a prepaid-credits top-up so every tool keeps working after the free trial (20 free calls a day). Use when a tool says the free calls or credit have run out, or the user asks to buy credit; to see what's left, use `balance` instead. Creates a payment request only: it returns the exact USDC amount and address to send (Base or Solana) and a QR-code page, and nothing is charged unless the user sends that payment, which is credited about 15 minutes after it confirms. Without a key in the server URL it also creates an API key (shown once) and the new server URL to use; with one (e.g. a free key), it tops up that same key, so your connector URL stays the same, and reuses a top-up still waiting for payment. Free to call.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"amountUsd": 2,
"network": "base"
}
],
"properties": {
"amountUsd": {
"description": "Dollars of credit to buy: suggest $2, $5, $10 ($10+ gets +10% bonus credit). Minimum $1. Default $2.",
"maximum": 500,
"minimum": 1,
"type": "number"
},
"method": {
"description": "How to pay: \"usdc\" (default) or \"card\" (a card checkout link, when card payments are available; the same credits).",
"enum": [
"usdc",
"card"
],
"type": "string"
},
"network": {
"description": "Where you'll send USDC from. Default base.",
"enum": [
"base",
"solana"
],
"type": "string"
},
"pack": {
"description": "For method \"card\": the credit pack ($5, $10 or $25; $10+ gets +10% credit). Default credits-5.",
"enum": [
"credits-5",
"credits-10",
"credits-25"
],
"type": "string"
}
},
"type": "object"
},
"name": "topup",
"outputSchema": {
"properties": {
"apiKey": {
"description": "New API key (only when the server URL had none). Shown once; keep it secret.",
"type": "string"
},
"checkoutUrl": {
"description": "For method \"card\": the secure card checkout page (hosted by the payment provider).",
"type": "string"
},
"expires": {
"description": "When this payment request expires (ISO 8601 time).",
"type": "string"
},
"orderId": {
"description": "For method \"card\": the order id; credit arrives on the key as soon as the payment completes.",
"type": "string"
},
"payPage": {
"description": "Web page with a QR code and live payment status.",
"type": "string"
},
"paymentUri": {
"description": "Wallet payment link with the amount and address filled in.",
"type": "string"
},
"send": {
"description": "Exactly what to send.",
"properties": {
"amount": {
"description": "USDC amount to send, all six decimals (it identifies the payment).",
"type": "string"
},
"network": {
"description": "Network to send on (Base or Solana).",
"type": "string"
},
"to": {
"description": "Our wallet address to send to.",
"type": "string"
},
"token": {
"description": "Always USDC.",
"type": "string"
}
},
"type": "object"
},
"serverUrl": {
"description": "MCP server URL carrying the new key, to use from now on.",
"type": "string"
},
"topupId": {
"description": "Id of this top-up; its QR-code page is payPage.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Before you pay, trade with or accept funds from an address: sanctions, hacks, phishing, mixers and scam links, with a clear verdict. Screens a wallet or contract address before you pay, trade with or accept funds from it: sanctions (OFAC), theft/hacks, phishing, money laundering, mixers, scams, fake tokens and malicious contracts, with a verdict (high-risk, suspicious, clean). Base, Ethereum, Solana, BNB, Arbitrum, Polygon, Optimism, Avalanche. Use before sending funds to, or accepting funds from, an address. Answers may be cached for up to 10 minutes. Price: $0.005 USDC per call (x402 or prepaid credits); failed calls are free. In the free trial.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"address": "0x098B716B8Aaf21512996dC57EB0615e2383E2f96",
"chain": "ethereum"
}
],
"properties": {
"address": {
"description": "Wallet or contract address.",
"maxLength": 64,
"type": "string"
},
"chain": {
"default": "base",
"description": "Blockchain: base, solana, ethereum, bsc, arbitrum, polygon, optimism, avalanche.",
"enum": [
"base",
"solana",
"ethereum",
"bsc",
"arbitrum",
"polygon",
"optimism",
"avalanche"
],
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"name": "wallet-risk",
"outputSchema": {
"properties": {
"address": {
"type": "string"
},
"chain": {
"description": "The blockchain network queried.",
"type": "string"
},
"checkedAt": {
"description": "When the check ran (ISO 8601 time).",
"type": "string"
},
"dataSources": {
"items": {
"type": "string"
},
"type": "array"
},
"flags": {
"items": {
"properties": {
"code": {
"type": "string"
},
"level": {
"type": "string"
},
"message": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"maliciousContractsCreated": {
"type": "integer"
},
"schemaVersion": {
"const": "wallet-risk@1",
"description": "Output version (\"<tool>@<n>\"): additive changes only within a version; a new number for anything breaking, the old one kept 90 days.",
"type": "string"
},
"source": {
"type": "string"
},
"trust": {
"description": "Third-party text, cleaned: read trust.notice; removed = what we stripped.",
"type": "object"
},
"verdict": {
"enum": [
"high-risk",
"suspicious",
"clean",
"unknown"
],
"type": "string"
}
},
"required": [
"address",
"chain",
"verdict",
"flags"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:73be25721e6bb7f75fdf511e5a3d0cda7b2c1f1724bdbdd251109ba6fdb1b693 | sha256sum