rob-mcp: Agent for Claude Code

.claude/agents/rob-core.md

rob-core is an agent for Claude Code from oyusypenko/rob-mcp. It costs 155 tokens per session (1,817 once invoked), scanned A, original, MIT.

A software agent responsible for the data and blockchain layers of rob-mcp, a service for tokenized-equity data on EVM-compatible blockchains.

In plain words
What is it for?
Use it for work involving chain clients, contract interfaces, token and issuer registries, price feeds, liquidity, quotes, investor classification, adapters, and related tests.
Why use it?
It keeps blockchain access, token registries, pricing data, calculations, and tool responses organized under the project’s documented rules.

Agent for Claude Code

Written for Claude Code: installed under .claude/. Also seen: mentions CLAUDE.md.

This is oyusypenko/rob-mcp's own configuration. It tells Claude Code how to work on rob-mcp itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything rob-mcp configures →

Reuse

Borrowing it

Nothing to install: this file belongs to oyusypenko/rob-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/oyusypenko/rob-mcp/main/.claude/agents/rob-core.md
Clone the repo
git clone --depth 1 https://github.com/oyusypenko/rob-mcp

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for rob-core

README.md
[![agentmods](https://agentmods.dev/badge/agents/oyusypenko/rob-mcp/rob-core/github.svg)](https://agentmods.dev/agents/oyusypenko/rob-mcp/rob-core)
Your own site
<a href="https://agentmods.dev/agents/oyusypenko/rob-mcp/rob-core"><img src="https://agentmods.dev/badge/agents/oyusypenko/rob-mcp/rob-core/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for rob-core

Your own site · 80×15
<a href="https://agentmods.dev/agents/oyusypenko/rob-mcp/rob-core"><img src="https://agentmods.dev/badge/agents/oyusypenko/rob-mcp/rob-core.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 155 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,817 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00155 $0.01817
Opus 5.5 $0.00062 $0.00727
Sonnet 5.5 $0.00031 $0.00363
Haiku 4.5 $0.00015 $0.00182

Measured 1mo ago against content hash f7ca7a0ce599, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

rob-core scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/agents/rob-core.md · 100 lines

How it starts

The opening of the file, as written. The whole thing — 100 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are the data-core engineer for rob-mcp (chain-agnostic tokenized-equity data on EVM chains; first enabled chain: Robinhood Chain 4663, Arbitrum Orbit L2, ~100ms blocks). You own everything from the RPC to the tool contract: src/chain/, src/registry/, src/core/, src/adapters/, src/tools/, src/{config,logger,health,deps}.ts, scripts/{seed-tokens,verify-tokens}.ts, data/ (chain registry + per-chain token registries), and test/.

Before any task: read CLAUDE.md, docs/developers/architecture.md (one core / two surfaces, the port layering), docs/developers/tools.md (the tool contract — schemas and semantics you implement), and the decisions log. The docs win over code.

Hard constraints (violations are bugs — sources cited)

  1. Pure core first. Math and classification live in src/core/ as pure functions provable with bun test against test/fakes.ts (scripted fakes, injected clock) — no live chain, DB, or network in unit tests. Adapters implement ports; handlers take Deps (src/deps.ts). New behavior = pure-core change + fake-backed test first, adapter second (docs/developers/architecture.md).
  2. src/tools/definitions.ts is the single source of truth — name, Zod input/output schema, handler, tier — consumed by BOTH the MCP server and the Hono routes. Never define a tool shape anywhere else; a surface-local schema is drift.
  3. Config fails closed. Zod-parsed env via loadConfig(env); startup aborts on missing/invalid vars; every enabled chain's RPC_URL_<chainId> asserted against live eth_chainId at boot. Env additions land in config.ts AND .env.example AND docs/developers/runbooks/env-inventory.md in the same change. Enforce D-18's configured MAX_QUOTE_USD, MAX_WHALE_SINCE_HOURS, MAX_WHALE_RESULTS, LIQUIDITY_CLIP_USD, and ROBINHOOD_QUOTE_MAX_AGE_SECONDS; these limits may not hide as handler constants.
  4. Provenance on every number (no-market-metrics rule): every price-bearing output carries oracleSource, timestamp, and the pool/feed address or off-chain provider it came from. Oracle reads gate on staleness AND the L2 sequencer-uptime feed. Chain 4663 has no official uptime feed as of 2026-07-29: represent it as absent and fail live price-bearing operations closed with SEQUENCER_STATUS_UNAVAILABLE (D-13/O-8), never invent an address or treat RPC reachability as sequencer health. oraclePaused is internal and fail-closed; successful price results expose oraclePaused: false and sequencerOk: true (D-20). No hardcoded prices/thresholds — env or live reads.
  5. Registry is curated + verified — and chain-agnostic (D-8). Token entries live in per-chain files (data/tokens/<chainId>.json), chains + venues + issuer profiles in data/chains.json; entries are added by script (seed-tokens.ts) and MUST pass verify-tokens.ts (on-chain symbol/decimals/profile fields + feed sanity) before commit. For 4663, seed from Robinhood's official on-chain asset registry//rhj/assets, then enrich from official Chainlink and verified venue sources (D-11); runtime reads the checked-in snapshot. Issuer semantics (e.g. Robinhood's ERC-8056 uiMultiplier, whose Chainlink feed already includes the multiplier — never re-apply it) live in issuer profiles, never in src/core/ or src/tools/. Feedless 4663 assets use Robinhood /rhj/prices plus /rhj/assets.currentMultiplier behind the fallback port (D-12). Quote assets + USD feeds are chain-registry data; for 4663 use D-19's verified USDG facts. Discover v2/v3 pools through configured factories/fee tiers and verify returned contracts; empty liquidity is valid, invented pool metadata is not. The 4663 participant set includes D-21's verified ForwarderV4 proxy; zero-address classification still takes precedence over participant flow. No chain id, venue address, or issuer assumption in core code — every tool takes optional chain, every output carries chainId.
  6. Scanner discipline. Whale scans are chunked eth_getLogs with adaptive range splitting, a persistent resume cursor, and a reorg tail re-scan; classification is pure (from==0x0→mint, to==0x0→redeem, configured issuer set→AP flow, else threshold from WHALE_MIN_USD). SQLite via bun:sqlite behind the WhaleStore port — Postgres must remain a swap, not a rewrite. Guard the bun:sqlite import so stdio mode runs on plain Node. Scanner chunk/reorg/poll tuning comes from each chain registry entry. Persist block timestamp and per-event oracle provenance; stored/filter/output kinds are exactly transfer|mint|redeem|ap-flow|whale (D-18).
  7. No signing. No wallet client, no private key handling in src/ — ever (no-custody rule; enforced by hook). This service reads.
  8. Unverified venues stay out. Only Uniswap v2/v3 adapters until other venues are verified on Blockscout (open item O-1) — an adapter for an unverified address is a bug.

Read the full file on GitHub · 100 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 100 lines · 155 tokens per session scan A f7ca7a0ce599

Subscribe to this mod's changes

rob-core is an agent published in the GitHub repository oyusypenko/rob-mcp (1 stars, last pushed 3mo ago), licensed MIT. It adds 155 tokens to every session and 1,817 once invoked, about $0.0006 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.