polygraph/SKILL.md
Behavioral trust grades (A–F) for MCP servers. Use when an agent needs to check whether an MCP server is safe before using it, verify an onchain attestation before trusting or paying a server, look up a server's published grade, get a project graded, or understand why a server received a grade. Polygraph connects to an MCP server the way an agent would, fingerprints its exact tool surface, and runs behavioral probes — prompt-injection (C-01), permission/egress overreach (C-02), sensitive-data leak (C-03), and adversarial-input handling (C-04) — then publishes a reproducible grade as an onchain EAS attestation on Base. Triggers on mentions of MCP server safety, is this MCP server safe, tool poisoning, prompt injection, data leak, permission overreach, unexpected egress, trust grade, attestation, verify before paying, polygraph, litmus, grade my MCP server, adversarial input, robustness, crash, jailbreak, CI gate, fail the build, GitHub Action, gate my skill.
npx skillsauth add bankrbot/openclaw-skills polygraphInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Agents wire up third-party MCP servers and then trust whatever those servers' tools return. Polygraph tests an MCP server's behavior before your agent does, and assigns a letter grade A–F backed by reproducible evidence.
A passing grade is a measurement, not a guarantee — it says "this exact tool surface did not misbehave under these probes," and because the harness is open and deterministic, anyone can re-run it and disprove a bad grade. That falsifiability is the whole point.
polygraphso@polygraphso/litmus (open source)Polygraph connects to a server the way an agent would — stdio for local packages,
Streamable HTTP for remote URLs — fingerprints its exact tool surface
(tools/list → canonical JSON → sha256 → bytes32), then runs four probe categories:
readOnlyHint: true but carry destructive verbs, and runs the server in
a hardened default-deny Docker sandbox where any outbound network attempt is a finding.| Grade | Meaning | |-------|---------| | A | Passed all four categories. No injection, no unexpected egress, no data leak, no adversarial-input failure. | | B | Injection and data-leak checks passed; egress was not verified. The ceiling for any run without a local Docker sandbox — including every remote (HTTP) server, which can't be sandboxed. | | D | Unexpected egress / permission overreach (C-02) or an adversarial-input robustness failure (C-04: crash, internals-leak, or amplification). No injection or leak → capped at D. | | F | Disqualifying: active tool-output injection (C-01) or a sensitive-data leak (C-03) — a server that would harm an agent that trusts it. |
Reading a B. Under the current methodology, egress can only be observed by running the server in a local default-deny sandbox — so a remote MCP server caps at B no matter how clean it is. A remote B is a limit of the measurement, not a mark against the server; don't read it as "worse than" a local A, because the two aren't directly comparable. (Grades C and E are not assigned today; C is reserved.)
Every grade ships with a plain-English rationale — never a bare letter. See
references/methodology.md for the full decision logic and each
probe in depth.
A sub-second lookup against published grades. This runs the polygraphso lookup CLI: it
reads a published grade and does not install or execute the target server. npx does fetch
and run our CLI, though — so it's a lookup, not a "no-install" check; pin the version in any
automated or trust context (e.g. before Bankr installs a server):
$ npx polygraphso@<version> check npm/@modelcontextprotocol/server-filesystem
→ polygraph: A · litmus-v10 · 2026-06-26
→ details → polygraph.so/#checks
Grades are live and span the full range. Browse the current graded set with
polygraphso list, or at polygraph.so. A grade is point-in-time
evidence — treat your own run, or the live attestation, as the source of truth rather than
any letter copied into a doc.
Refs are registry-prefixed — the prefix disambiguates (redis exists on npm, PyPI, and
GitHub with different content): npm/…, pypi/…, github/…. A tracked-but-ungraded server
reports not available yet with a notify link. Full CLI reference:
references/cli.md.
The highest-value use at runtime: gate an MCP server through its grade before your agent uses it, pays it, or routes a transaction through it. Polygraph is the verify step; Bankr is the execute step. Two checks, both required:
DEFAULT_PASSING): accept A/B, refuse D/F. For a signed
action or a payment, raise the bar to a local A (PAYMENT_PASSING, or gateDecision(…, { requireEgressVerified: true })): a remote server caps at B because its egress was never
observed — so a B is exactly the case where network exfiltration wasn't tested. Don't auto-route
a Bankr transaction through a remote B; require a local A or a manual review.readAttestation binds to our EAS schema
(fail-closed) and a fixed Base RPC, and gateDecision checks revocation, expiry, and the
server-ref binding. A self-minted grade is still forgeable, so before Bankr routes value also
require an attester allowlist (gateDecision(…, { allowedAttesters })) and an accepted
methodology version — or, strongest, re-run the open harness (run_litmus) and compare.
Reproducibility, not the signature, is what makes a grade trustworthy.Drop the verify_attestation MCP tool in front of execution, or use the gateDecision helper.
Carry this into the decision: a grade is a measurement, not a guarantee. A server that detects the test context could behave during grading and misbehave in production — evasion is the disclosed residual limit. Keep Bankr's own transaction-verification guards on, even for an A.
Full patterns, the MCP server config, and a worked "verify-then-execute" example:
references/bankr-integration.md.
Run the open harness on your own MCP server, get an A–F grade plus a reproducible evidence bundle, and publish it onchain so agents can verify it:
# Grade your server end-to-end (npm ref, https URL, or local path)
npx -y -p @polygraphso/litmus polygraphso-litmus litmus npm/@your-scope/your-mcp-server
You get the grade, the per-category verdicts, your tool-surface fingerprint, and a
content-addressed evidence bundle. Publishing that grade as an onchain EAS attestation on
Base (so other agents can look it up and verify it) is a one-step hand-off — see
references/methodology.md.
Prefer not to run it yourself? Request a grade or get notified when yours publishes at polygraph.so.
One line for builders: check any MCP server before your agent uses it with
npx polygraphso check <server>, and get your own server graded at polygraph.so.
The harness is the same open, deterministic engine that produces published grades:
npm i -g @polygraphso/litmus # or use npx, above
polygraphso-litmus litmus npm/@modelcontextprotocol/server-filesystem
polygraphso-litmus litmus https://example.com/mcp --bearer "$TOKEN"
polygraphso-litmus litmus ./path/to/local-mcp-server --json
--bearer is sent as an Authorization header to the target. Pass it only to a remote you
explicitly trust and have pinned; use a scoped, short-lived token — never on an auto-discovered
or untrusted target.Flags, env vars, --json output, and the check / list subcommands are all in
references/cli.md.
Turn the grade into a build check: the polygraph CI gate fails a build when an MCP server or an
Agent Skill grades D/F. Add the GitHub Action to a repo — pin it to a commit SHA (not the mutable
@v1 tag) and trigger on pull_request, never pull_request_target:
on: [pull_request] # not pull_request_target
# …
- uses: polygraphso/litmus@<commit-sha> # pin a SHA for a security gate
with:
servers: | # name targets explicitly (recommended)
npm/@modelcontextprotocol/server-filesystem
skills: |
./my-skill
— or run it anywhere with npx @polygraphso/litmus@<version> ci (pin the version). Grading a
server runs its code (egress is Docker-sandboxed, but it still executes), so on a public repo
keep auto-discovery off (the default) and name targets explicitly rather than grading
PR-controlled .mcp.json / .vscode / .cursor config. Un-gradeable targets warn unless strict.
A skill grade is a static scan, not behavioral proof — treat a skill that runs install-time
code or carries transaction instructions as needing manual review regardless of its letter. Full
setup, inputs, and the security notes: references/ci-gate.md.
Every run prints the methodology, the per-category verdict, the tool-surface fingerprint, and the grade with a one-paragraph rationale:
→ litmus · npm/@modelcontextprotocol/server-filesystem
→ version 0.1.0
→ C-01 pass · C-02 pass · C-03 pass · C-04 pass
→ fingerprint 0x1a2b3c4d…5e6f7890
→ grade: A
All four categories passed. No injection, no unexpected egress, no data leak.
On a failure the report surfaces the top HIGH-severity findings (tool name, finding kind, the
offending snippet). references/methodology.md maps every grade
and finding kind to its cause.
npx polygraphso check <registry>/<owner>/<name> · https://www.npmjs.com/package/polygraphso@polygraphso/litmus (open source — see polygraph.so for the repo)methodology.md · cli.md · bankr-integration.md · ci-gate.mddata-ai
Claim and withdraw payments from Metr (metrpay.com) merchant account.
development
AI-powered crypto trading agent, wallet API, and LLM gateway via natural language. Use when the user wants to trade crypto, trade tokenized stocks and ETFs (spot or leveraged), check portfolio balances (with PnL and NFTs), view token prices, search tokens, transfer crypto, manage NFTs, use leverage (Hyperliquid or Avantis), bet on Polymarket, deploy tokens, set up automated trading, sign and submit raw transactions, call or deploy x402 paid API endpoints, browse the web, or access LLM models through the Bankr LLM gateway funded by your Bankr wallet. Supports Base, Ethereum, Polygon, Solana, Unichain, World Chain, Arbitrum, BNB Chain, and Robinhood Chain.
testing
Urizen — an AI equity-research desk + the first autonomous fund on Robinhood Chain (4663), as an agent skill. Real charts & technicals for any tokenized US stock, SEC fundamentals + filings + insider activity, Wall Street analyst consensus, financial news, the macro calendar (Fed/CPI/jobs), live prediction-market odds, and on-chain price — plus the fund's live strategies, book, execution tape, and one-token exposure via $URI. Public, key-less, CORS-open REST on chain 4663. Triggers on: "urizen", "research a stock", "tokenized stock", "SEC fundamentals", "analyst rating", "economic calendar", "prediction market odds", "copy trade the fund", "urizen book", "buy $URI".
development
List tokens on CoinHero via consignment deals on Base — deposit ERC-20 inventory, earn USDC when the protocol buys your token for CoinHero card games. Use when a wallet-enabled agent wants to consign a Base ERC-20 token, check deal performance, or withdraw earnings. Requires a CoinHero dashboard API key and a wallet (EOA) on Base mainnet with at least $50 USD worth of the token to deposit.