_ registry / mcp streamable-http · checked 4h ago

kestrel-sentinel

https://usekestrel.vercel.app

Registry code: cd15b9f68c485ee8

api record

Kestrel reads Base (8453) and Robinhood Chain (4663) mainnet live; nothing is mocked. Before any swap or approval call scan_contract (BLOCK = do not trade; status 'degraded' = retry). check_bridge_parity verifies the $VIBES OFT 1:1 reserve and bridge lanes; simulate_exit stress-tests a pool exit; inspect_vibestarter_escrow, challenge_copilot, challenge_dry_run and ecosystem_health cover Vibestarter escrows; vibestarter_pulse composes Vibestarter's own MCP. create_watch / list_watches / delete_watch manage 24/7 Night-Shift Pager watches (keep the deskKey private). uint256 values are decimal…

endpoint
https://usekestrel.vercel.app/api/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is kestrel-sentinel live?
Yes — it answered the hub's last check (checked 4h ago). It answered 100% of checks over the last 30 days.
Is kestrel-sentinel free to use?
Yes — the hub reached it with no key and no payment.
What tools does kestrel-sentinel have?
11 tools: challenge_dry_run, scan_contract, simulate_exit, challenge_copilot, create_watch, list_watches, delete_watch, check_bridge_parity, ….
Is kestrel-sentinel safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
375ms

last good check

priced tools
0

of 11 tools

_ answered our checks, 90 days 3 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 11 tools
4 open 7 never probed 4 of 11 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • check_bridge_parity open 4h ago

    Live dual-chain check of the $VIBES LayerZero OFT. verdict: EXACT (Base adapter locked == Robinhood totalSupply - reserve adapter balance), IN_FLIGHT (difference explained by packets still crossing), OVER_BACKED, or UNBACKED (Robinhood supply exceeds locked collateral, confirmed by a second read). Also returns both bridge lanes (live LayerZero quoteSend fee, inbound credit budget limit/headroom/window, pause flags, DVN set, config match, undelivered packets), adapter governance (owner Safe, pauser, delegate), and the Base Aerodrome vs Robinhood Uniswap v3 VIBES/WETH spread: spreadBps, netEdgeBpsBeforeBridge (after pool fees) and netEdgeBps (after pool fees, LayerZero fee and gas; null when the fee could not be read). uint256 values are decimal strings.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • inspect_vibestarter_escrow open 4h ago

    Live read of one VibesTranchEscrow: campaign state, the 10% kickstart + six 15% monthly tranche schedule, 72h challenge-window countdowns (escrow's own clock), active challenge, Proof-of-Lock (permanent LP lock), Refund Radar, Origin Capsule, founder app HTTP health and GitHub velocity, plus scored findings. With no address on Base it reads the Genesis $VIBES escrow (0x0e9bf34baed84a80d7647dafe4db52169147c911).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "Escrow address (default on Base: Genesis $VIBES escrow; required on Robinhood Chain)"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "default": 8453,
          "description": "8453 = Base Mainnet, 4663 = Robinhood Chain Mainnet"
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • vibestarter_pulse open 31h ago

    Platform-wide Vibestarter figures fetched by Kestrel from Vibestarter's own MCP server (https://app.vibestarter.xyz/mcp: get_platform_stats + list_raises, with provenance), falling back to the REST /api/stats. Vibestarter's 'liquidity locked' figure is reconciled against the on-chain sum of VibesLPLockerV2.getAllLockedPositions() on Base (matches / delta in wei). Includes the next unlock and the raise list. source='unavailable' with errors when neither source answers.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • ecosystem_health open 4h ago

    Every Vibestarter launch on Base and Robinhood Chain in one board: token X-Ray score, Proof-of-Lock share, pool depth (real WETH held), escrow state and next window countdown, Refund Radar, founder app HTTP health, founder GitHub velocity and Origin Capsule status, with attention-ranked warning signals and BigInt totals. Served from a 120 s stale-while-revalidate cache (see cache.ageSec / cache.stale). Filter by chainId, or pass escrow for one row. Unreadable values are reported as 'unavailable' with a reason, never guessed.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "escrow": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "Return only the launch with this escrow (chainId defaults to 8453)"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "description": "Only launches on this chain (default: both)"
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • challenge_dry_run unknown never probed

    Runs the REAL deployed escrow bytecode through eth_simulateV1 with synthetic actors and at most five listed storage-slot overrides (each verified against its getter before and inside the simulation). Scenarios: raise (approve, raise, support, oppose, duplicate vote reverts), reject (20% of the bond burned to 0xdead), uphold (escrow ends Frozen with refund snapshot), expire (no-op at half window, full bond back after). Escrows that are not Funded run only the raise attempt and show the contract's real revert. Nothing is broadcast.

    mcp-tool

    {
      "type": "object",
      "required": [
        "escrow"
      ],
      "properties": {
        "escrow": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "VibesTranchEscrow address"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "default": 8453,
          "description": "8453 = Base Mainnet, 4663 = Robinhood Chain Mainnet"
        },
        "outcomes": {
          "type": "array",
          "items": {
            "enum": [
              "raise",
              "reject",
              "uphold",
              "expire"
            ],
            "type": "string"
          },
          "description": "Scenarios to run (default: all four)",
          "uniqueItems": true
        }
      },
      "additionalProperties": false
    }
    arguments 37 lines
  • scan_contract unknown never probed

    Free-tier pre-trade verdict for any Base (8453) or Robinhood Chain (4663) address: ALLOW | WARN | BLOCK, 0-100 risk score, threat band, top reasons, simulated 1% exit slippage and pool depth. Everything is read live over RPC (bytecode dispatcher selectors, EIP-1967/ZeppelinOS/beacon proxy slots, owner posture, pool reserves, 8h log deltas). Fails closed: status 'degraded' (never ALLOW) when an RPC read fails. intent=trade (default) BLOCKs addresses with no contract code (a token or pool must have code); intent=counterparty treats a wallet as a normal recipient. Same engine as GET /api/v1/guard?mode=preview; the paid x402 tier (mode=full) is HTTP only.

    mcp-tool

    {
      "type": "object",
      "required": [
        "address"
      ],
      "properties": {
        "intent": {
          "enum": [
            "trade",
            "counterparty"
          ],
          "type": "string",
          "default": "trade",
          "description": "trade: you are about to swap/approve this token or pool. counterparty: you are about to send to this address."
        },
        "address": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "Token, pool, wallet, contract or Vibestarter escrow address"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "default": 8453,
          "description": "8453 = Base Mainnet, 4663 = Robinhood Chain Mainnet"
        }
      },
      "additionalProperties": false
    }
    arguments 32 lines
  • simulate_exit unknown never probed

    Exact BigInt exit simulation on a live pool: Aerodrome v2 constant-product (getReserves + live factory fee) or concentrated liquidity (Uniswap v3 / Aerodrome Slipstream slot0.sqrtPriceX96 + liquidity, active range). Pass a pool, or a token (its deepest WETH pool is discovered live). Applies optional LP-removal and whale-dump shocks before your sell and returns amount out before/after, price impact and drawdown in bps, plus the block read.

    mcp-tool

    {
      "type": "object",
      "required": [
        "address"
      ],
      "properties": {
        "address": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "Pool address, or a token address (its WETH pool is discovered live)"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "default": 8453,
          "description": "8453 = Base Mainnet, 4663 = Robinhood Chain Mainnet"
        },
        "lpPullBps": {
          "type": "integer",
          "default": 0,
          "maximum": 9500,
          "minimum": 0,
          "description": "Liquidity removed before your sell, in bps (5000 = half the LP pulled)"
        },
        "sellBpsOfReserve": {
          "type": "integer",
          "default": 100,
          "maximum": 10000,
          "minimum": 1,
          "description": "Your sell size in bps of the pool's token-side reserve (100 = 1%)"
        },
        "whaleDumpBpsOfSupply": {
          "type": "integer",
          "default": 0,
          "maximum": 10000,
          "minimum": 0,
          "description": "Whale sell before yours, in bps of token total supply"
        }
      },
      "additionalProperties": false
    }
    arguments 44 lines
  • challenge_copilot unknown never probed

    Everything a backer needs before the 72h challenge window on a Vibestarter escrow closes: escrow version (v1/v2), phase (NOT_FUNDED, AWAITING_UNLOCK, AWAITING_REQUEST, WINDOW_OPEN, CHALLENGE_PENDING, AWAITING_CLAIM, COMPLETED, FROZEN, REFUNDING, FAILED), next-tranche countdowns, exact bond and 20% slash at risk, trust surface (adjudicator, platform Safe, signer, time oracle), unofficial vote tally when a challenge is pending, and a refund-if-upheld estimate computed by the contract's own upholdChallenge() inside eth_simulateV1. With `wallet`, adds that wallet's balance, allowance, contribution, credential/nonce, cooldown, vote and a readiness checklist in the contract's exact revert order. Read-only: never signs or sends.

    mcp-tool

    {
      "type": "object",
      "required": [
        "escrow"
      ],
      "properties": {
        "escrow": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "VibesTranchEscrow address"
        },
        "wallet": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "Optional backer wallet to check eligibility and readiness for"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "default": 8453,
          "description": "8453 = Base Mainnet, 4663 = Robinhood Chain Mainnet"
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • create_watch unknown never probed

    Arms a 24/7 Night-Shift Pager watch on a wallet, token, pool, contract or Vibestarter escrow. The target is classified and every baseline is seeded from live mainnet state (takes 3-20 s), so the first check never alerts on arming. Without deskKey a new anonymous desk is opened and its deskKey is returned ONCE: store it (it is the only credential; alert settings only, never funds). manageUrl opens the desk in the Kestrel UI to link Telegram or a webhook and start Sleep Mode. rules: omit for the defaults of the target kind, or pass rule type strings to enable exactly those. Rule types: lp_liquidity_drop (LP liquidity pulled); price_move (Price move); spread_bps (Base ↔ Robinhood spread); parity_drift (OFT 1:1 parity); escrow_window_opened (Challenge window opened); escrow_window_closing (Challenge window closing); escrow_unlock_soon (Tranche unlock ahead); escrow_challenge_or_state (Challenge filed / campaign state); wallet_new_approval (New token approval); wallet_activity (Outgoing wallet activity); proxy_upgrade (Upgrade Tripwire); admin_change (Admin / owner / Safe change); bridge_peer_change (OFT bridge lane guard); whale_transfer (Whale transfer); supply_change (Supply change); band_change (Threat band worsened).

    mcp-tool

    {
      "type": "object",
      "required": [
        "address"
      ],
      "properties": {
        "label": {
          "type": "string",
          "maxLength": 80,
          "description": "Watch label (plain text)"
        },
        "rules": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "enum": [
                  "lp_liquidity_drop",
                  "price_move",
                  "spread_bps",
                  "parity_drift",
                  "escrow_window_opened",
                  "escrow_window_closing",
                  "escrow_unlock_soon",
                  "escrow_challenge_or_state",
                  "wallet_new_approval",
                  "wallet_activity",
                  "proxy_upgrade",
                  "admin_change",
                  "bridge_peer_change",
                  "whale_transfer",
                  "supply_change",
                  "band_change"
                ],
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "enum": [
                      "lp_liquidity_drop",
                      "price_move",
                      "spread_bps",
                      "parity_drift",
                      "escrow_window_opened",
                      "escrow_window_closing",
                      "escrow_unlock_soon",
                      "escrow_challenge_or_state",
                      "wallet_new_approval",
                      "wallet_activity",
                      "proxy_upgrade",
                      "admin_change",
                      "bridge_peer_change",
                      "whale_transfer",
                      "supply_change",
                      "band_change"
                    ],
                    "type": "string"
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "description": "Partial rule config: {type, enabled?, ...threshold params}",
                "additionalProperties": true
              }
            ]
          },
          "maxItems": 32,
          "description": "Rule type strings (enable exactly these) or partial rule configs merged over the defaults"
        },
        "address": {
          "type": "string",
          "pattern": "^0x[0-9a-fA-F]{40}$",
          "description": "Target to watch"
        },
        "chainId": {
          "enum": [
            8453,
            4663
          ],
          "type": "integer",
          "default": 8453,
          "description": "8453 = Base Mainnet, 4663 = Robinhood Chain Mainnet"
        },
        "deskKey": {
          "type": "string",
          "pattern": "^kst_[A-Za-z0-9_-]{20,64}$",
          "description": "Desk key (kst_…) returned once by create_watch or POST /api/pager/desk. It is a bearer credential for alert settings only; it can never move funds. Omit to open a new desk."
        },
        "deskLabel": {
          "type": "string",
          "maxLength": 60,
          "description": "Label for a newly opened desk"
        },
        "extraTokens": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^0x[0-9a-fA-F]{40}$"
          },
          "maxItems": 10,
          "description": "Extra Base token addresses for wallet approval-log coverage"
        }
      },
      "additionalProperties": false
    }
    arguments 111 lines
  • list_watches unknown never probed

    Lists the watches on a desk with live status (ok / pending / alerting / errored), last checked block, last alert, armed rules and display metrics, plus the desk's delivery channels (no secrets) and watch limit.

    mcp-tool

    {
      "type": "object",
      "required": [
        "deskKey"
      ],
      "properties": {
        "deskKey": {
          "type": "string",
          "pattern": "^kst_[A-Za-z0-9_-]{20,64}$",
          "description": "Desk key (kst_…) returned once by create_watch or POST /api/pager/desk. It is a bearer credential for alert settings only; it can never move funds."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • delete_watch unknown never probed

    Removes one watch (and its stored state) from a desk. Other desks' watches are never visible or deletable. Returns deleted:true; a watch that is not on this desk is an error.

    mcp-tool

    {
      "type": "object",
      "required": [
        "deskKey",
        "watchId"
      ],
      "properties": {
        "deskKey": {
          "type": "string",
          "pattern": "^kst_[A-Za-z0-9_-]{20,64}$",
          "description": "Desk key (kst_…) returned once by create_watch or POST /api/pager/desk. It is a bearer credential for alert settings only; it can never move funds."
        },
        "watchId": {
          "type": "string",
          "pattern": "^w_[A-Za-z0-9_-]{6,20}$",
          "description": "Watch id (w_…) from create_watch or list_watches"
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id cd15b9f68c485ee8.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/cd15b9f68c485ee8/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/cd15b9f68c485ee8/badge.svg)](https://brick.blue/agent/cd15b9f68c485ee8?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.