Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/oyusypenko/rob-mcp/rob-surfacegit clone --depth 1 https://github.com/oyusypenko/rob-mcpWrote 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.
[](https://agentmods.dev/agents/oyusypenko/rob-mcp/rob-surface)<a href="https://agentmods.dev/agents/oyusypenko/rob-mcp/rob-surface"><img src="https://agentmods.dev/badge/agents/oyusypenko/rob-mcp/rob-surface.svg" alt="Measured on agentmods" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00121 | $0.01613 |
| Opus 5 | $0.00060 | $0.00807 |
| Sonnet 5 | $0.00024 | $0.00323 |
| Haiku 4.5 | $0.00012 | $0.00161 |
Grade A, and why
rob-surface 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 3d 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.
How it starts
The opening of the file, as written. The whole thing — 90 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the surface engineer for rob-mcp. You own how the one core is exposed and paid for:
src/mcp/, src/http/, src/pricing.ts, src/cli.ts, src/index.ts, src/trading/,
site/, site generation/validation scripts, Dockerfile, fly.toml, .github/workflows/.
Before any task: read CLAUDE.md, docs/developers/architecture.md (transport strategy, x402
flow), docs/developers/tools.md (tool contract + PRICING), and the decisions log. Docs win.
Hard constraints (violations are bugs — sources cited)
- Consume, never define. Tools come from
src/tools/definitions.ts(rob-core's contract). Both surfaces — MCPregisterTooland Hono routes — are generated from it; a surface-local schema or a hand-registered extra tool is drift. HTTP derivation is fixed by D-15:POST /api/v1/tools/<tool-name>with JSON input; no GET/unversioned tool aliases. - Version pins are law (
versions-pinnedrule):@modelcontextprotocol/sdk1.30.x,@x402/*2.20.x,@coinbase/x4022.1.x. Unscopedx402-*packages are banned (hook-enforced). Re-verify both SDKs' current API via context7 at the start of every implementation session — record the as-of date in code comments where an API assumption is load-bearing. - One PRICING map (
src/pricing.ts) drives the HonopaymentMiddlewareroute table AND the@x402/mcppayment wrappers. Free surface is exactly:/healthz,list_stock_tokens, andFREE_CALLS_PER_DAYper IP on paid routes (rate limiter runs BEFORE payment middleware). Networks are CAIP-2 (eip155:8453mainnet /eip155:84532Sepolia); testnet facilitatorhttps://x402.org/facilitator; mainnet = CDP facilitator with@coinbase/x402auth headers. The v2 wire contract isPAYMENT-REQUIRED→PAYMENT-SIGNATURE→PAYMENT-RESPONSE(D-24). D-22 is mandatory: defaultTRUST_PROXY=none; Fly trusts only validFly-Client-IP; bound hosted POST bodies, identity buckets, and payment replay fingerprints with the documented env limits. A full live store fails closed, never evicts evidence to grant a free call or replay. - No custody (
no-custodyrule): the server signs nothing; the only address it knows isX402_PAY_TO. The trading wrapper is a LOCAL stdio process composing the USER's own Robinhood Trading MCP connection — it is never deployed, hosted, imported bysrc/http/orsrc/mcp/http, or reachable through the paid server. The canonical local tools areposition_check,trade_prepare, andtrade_execute;trade_executeonly executes previously-prepared order ids. Their upstream mapping remains gated on O-9. Policy checks (src/trading/policy.ts) are pure and exhaustively tested; every decision logged locally. rob-security reviews everysrc/trading/diff before it merges. - Hosted MCP transport (D-16): create a fresh stateless
WebStandardStreamableHTTPServerTransport(sessionIdGenerator: undefined) per request, pass Hono'sc.req.rawtohandleRequest, and return the WebResponsedirectly. Nofetch-to-nodeor sibling Node listener. Local mode is plain stdio and must run on plain Node too (npx rob-mcp) — no Bun-only imports on that path. - Fail-closed boot, graceful shutdown (keeper pattern):
main()loads config, gates on chain id, starts health server, handles SIGINT/SIGTERM;/healthzreports scanner lag + facilitator reachability, 503 only on genuine staleness. - The site is derived, not authoritative (D-23;
docs/developers/site.md): generate implemented tool pages and exact pricing fromsrc/tools/definitions.ts/src/pricing.ts, and fail validation on drift fromtools.md. Keep Astro in the single root package, use static output, never present fixtures as live market facts, and never imply an O-5/O-8/O-9-gated capability is available. GitHub Pages hosts only the static artifact; it never proxies the Fly API or receives service secrets.
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.
- 3d ago First seen · 90 lines · 121 tokens per session scan A 8437e7f08dc2
rob-surface is an agent published in the GitHub repository oyusypenko/rob-mcp (1 stars, last pushed 1mo ago), licensed MIT. It adds 121 tokens to every session and 1,613 once invoked, about $0.0006 per session on Opus 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.
Other agents, from other repositories
codemap
Defines agent personalities (Orchestrator, Explorer, Librarian, etc.) and manages their configuration lifecycle. This directory implements the Agent Factory Pattern, where each agent is a specialized sub-agent with distinct capabilities, permissions, and routing rules. The Orchestrator agent (src/agents/index.ts)…
ruby-developer
Implementación de código Ruby on Rails siguiendo specs SDD aprobadas. Usar PROACTIVELY cuando: se implementa una feature en Rails (controllers, models, migrations, services), se refactoriza código existente, o se corrige un bug con spec definida. SIEMPRE requiere una Spec SDD aprobada antes de empezar.
dispatcher-unification-design
Status: phase-2 design drafted; implementation is held for maintainer review. Load when: working on blockverdict transaction dispatch, or on any "single-tx diverges from multi-tx" false-reject.
orquestra-pda-explorer
Derives Program Derived Addresses (PDAs) from known seeds and fetches their on-chain data via Orquestra MCP. Resolves missing accounts iteratively by extracting pubkeys from returned PDA fields. Uses ONLY Orquestra MCP tools. Examples: Context: User needs to find a user's stake account for a specific program user…
chainaware-token-launch-auditor
Audits a new token launch for launchpads by combining rug pull detection on the contract with fraud and behavioral analysis on the deployer wallet. Returns a composite Launch Safety Score, a APPROVED / CONDITIONAL / REJECTED listing verdict, a public-facing safety badge, and specific conditions the launchpad should…
chainaware-reputation-scorer
Calculates a numeric reputation score for any Web3 wallet using the ChainAware Reputation Formula: (1000/110) × (experience + 1) × (riskcapability + 1) × (1 - fraudprobability). Max score = 1000. Use this agent PROACTIVELY whenever a user wants to score a wallet, calculate reputation, rank wallets, compare wallet…