protogrid

Search / xyz.proofofstock/proof-of-stock

Proof of Stock

R0· no sign-in

Is this stock token the real one? Checks Base and Robinhood Chain tokens against the issuers' lists.

v0.5.1 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality85new
Trust98of 100
Uptime, 30 days83%
Latency p50943 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "proof-of-stock": {
      "type": "http",
      "url": "https://proofofstock.xyz/mcp"
    }
  }
}
claude mcp add --transport http proof-of-stock https://proofofstock.xyz/mcp
[mcp_servers.proof-of-stock]
url = "https://proofofstock.xyz/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "proof-of-stock": {
      "type": "remote",
      "url": "https://proofofstock.xyz/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "proof-of-stock": {
      "type": "http",
      "url": "https://proofofstock.xyz/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=proof-of-stock&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vcHJvb2ZvZnN0b2NrLnh5ei9tY3AifQ%3D%3D"
}
{
  "servers": {
    "proof-of-stock": {
      "type": "http",
      "url": "https://proofofstock.xyz/mcp"
    }
  }
}
{
  "mcpServers": {
    "proof-of-stock": {
      "httpUrl": "https://proofofstock.xyz/mcp"
    }
  }
}
extensions:
  "proof-of-stock":
    enabled: true
    name: "proof-of-stock"
    type: streamable_http
    uri: "https://proofofstock.xyz/mcp"
    timeout: 300

Quality 85 / 100new

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene94 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations7 of 7 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 2,219 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pull, stability.new_linkstool history recorded for 1 of the 7 days needed
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

7 tools, about 2,219 tokens to load them all · tool set 7d9658aebba7 · tools last changed 2026-11-14 · checked 2026-11-14 06:30 UTC

Tool changes

  • verify_anchoradded

    Proof that our record of one day has not been changed since: the SHA-256 of that day's manifest of data files, the state of its OpenTimestamps proof (pending, or the Bitcoin block it is in), and the transaction carrying the same hash on Base and on Robinhood Chain. Bitcoin is the root, because Base is sequenced by Coinbase and Robinhood Chain by Robinhood, the two issuers we check; the other two are mirrors, for reach. The answer gives the manifest URL, the proof files and each transaction hash, which is everything needed to check it WITHOUT us. Omit day for the newest anchored day.

  • recent_impostorschangeddescription
    before

    Tokens on a chain whose symbol or name copies an issuer-listed stock token while their contract is not in that registry, newest first (at most 50), optionally since an ISO time. Each names what it imitates and the listed address. A claim with evidence, not a verdict.

    after · 72% of words in common

    Tokens on a chain FIRST FLAGGED IN THE LAST 7 DAYS whose symbol or name copies an issuer-listed stock token while their contract is not in that registry, newest first (at most 50), optionally since an ISO time within that window. This is a window, not the whole list: the answer carries `window_days`, `count` for the window and `listed_total` for every look-alike on the list. Each names what it imitates and the listed address. A claim with evidence, not a verdict.

  • stock_passportchangedinput schema
  • find_stock_tokenchangedinput schema
  • compare_venueschangedinput schema
  • recent_impostorschangedinput schema
  • verify_stock_tokenschangedinput schema
  • stock_passportchangedinput schema
  • list_stock_tokenschangedinput schema
  • find_stock_tokenchangedinput schema

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 98 / 100

provenance100
liveness93
freshness100
hygiene100

+repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-83% +updated-1d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://proofofstock.xyz/mcp streamable-httpnoneyes83%943 ms2025-06-182026-11-14

Tools (7)

compare_venuesread-onlyFor shares listed on BOTH Base (Coinbase) and Robinhood Chain (Robinhood), matched by ISIN: per venue the on-chain price's premium over that venue's own issuer reference, the reference kind and age, the deepest pool's liquidity and the multiplier, and the gap (Robinhood premium minus Base premium) when both are current. Raw prices are never compared: multipliers and references differ (Coinbase NAV vs Robinhood bid/ask), so a gap is not a price difference or an arbitrage. Name a share by isin or by ticker (NVDA, or NVDAc); with neither, the 20 rows with the largest gap. A missing premium carries its reason; a reading older than 30 min is flagged stale and gets no gap. Facts, not advice.
find_stock_tokenread-onlyFind issuer-listed tokenized stocks on a chain by ticker, company name or ISIN. Returns the official contract addresses. An empty result says only that the issuer lists no such token, nothing about impostors. Two chains: base (Coinbase's tokens, symbols end in "c", e.g. NVDAc) and robinhood (Robinhood's, e.g. NVDA). When the user names no chain, call it for both. Facts with their time and source, not advice: https://proofofstock.xyz/docs/legal.md
list_stock_tokensread-onlyList every token in a chain's issuer registry: symbol, name, contract address, ISIN, multiplier, whether it is minted on the chain and whether the issuer publishes a reference price. The answer opens with the exact count (also the `count` field); quote that number, do not estimate it from the list. On Base many listed tokens are not minted yet and do not trade (`minted`). Two chains: base (Coinbase's tokens, symbols end in "c", e.g. NVDAc) and robinhood (Robinhood's, e.g. NVDA). When the user names no chain, call it for both. Facts with their time and source, not advice: https://proofofstock.xyz/docs/legal.md
recent_impostorsread-onlyTokens on a chain FIRST FLAGGED IN THE LAST 7 DAYS whose symbol or name copies an issuer-listed stock token while their contract is not in that registry, newest first (at most 50), optionally since an ISO time within that window. This is a window, not the whole list: the answer carries `window_days`, `count` for the window and `listed_total` for every look-alike on the list. Each names what it imitates and the listed address. A claim with evidence, not a verdict.
stock_passportread-onlyPassport of one token address: whether it is in the issuer registry (and, if not, which listed stock its name imitates); the issuer reference price and its age; the latest DEX price and its premium over the reference; the premium series split by US market session; and every gap named. Readings are recorded every 15 minutes (latest.cadence_s), so "latest" is a recorded reading, not a live quote: see latest.age_s. premium compares the latest on-chain price with the issuer reference, whose own age is reference.age_s; when the two are far apart in time, latest.premium_at_reference_time gives the premium of one moment. sources names every source and the pool rule. Every answer opens with one plain sentence; quote it. In the JSON, premium and spread are FRACTIONS (0.01 = 1%; premium > 0 means the on-chain price is above the issuer's), *_age_s and age_s are seconds before generated_at, prices are USD per token. A token is worth `multiplier` shares, and the issuer's reference is already per token. reference.kind: nav_total_return = Coinbase's NAV, token_bid_ask_mid = the mid of Robinhood's token bid/ask. notes are codes for every gap (e.g. reading_stale = our last reading is over 30 min old, pools_capped = the pool count is a minimum). Two chains: base (Coinbase's tokens, symbols end in "c", e.g. NVDAc) and robinhood (Robinhood's, e.g. NVDA). When the user names no chain, call it for both. Facts with their time and source, not advice: https://proofofstock.xyz/docs/legal.md
verify_anchorread-onlyProof that our record of one day has not been changed since: the SHA-256 of that day's manifest of data files, the state of its OpenTimestamps proof (pending, or the Bitcoin block it is in), and the transaction carrying the same hash on Base and on Robinhood Chain. Bitcoin is the root, because Base is sequenced by Coinbase and Robinhood Chain by Robinhood, the two issuers we check; the other two are mirrors, for reach. The answer gives the manifest URL, the proof files and each transaction hash, which is everything needed to check it WITHOUT us. Omit day for the newest anchored day.
verify_stock_tokensread-onlyBefore buying a token that claims to be a stock, check its contract address: is it on the issuer's own registry for this chain (Base: Coinbase; robinhood: Robinhood)? Up to 50 addresses per call. listed=true is decided by the exact address alone. listed=false means "not in this issuer's registry", not "fake" (it may be another issuer's token); impostor is set only when the token copies a listed symbol or the issuer's naming, and then listed_address is the real one. If the registry cannot be read the call fails rather than answering false. Facts, not advice.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "xyz.proofofstock/proof-of-stock",
  "icons": [
    {
      "src": "https://proofofstock.xyz/logo.png",
      "sizes": [
        "512x512"
      ],
      "mimeType": "image/png"
    }
  ],
  "title": "Proof of Stock",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://proofofstock.xyz/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.5.1",
  "repository": {
    "url": "https://github.com/proofofstock/proof-of-stock",
    "source": "github"
  },
  "websiteUrl": "https://proofofstock.xyz",
  "description": "Is this stock token the real one? Checks Base and Robinhood Chain tokens against the issuers' lists."
}