{"_id":"base-token-safety-mcp","name":"base-token-safety-mcp","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"base-token-safety-mcp","version":"0.1.0","description":"Keyless MCP server + CLI for token safety on Base: eth_getCode ground truth (explicit NOT_A_CONTRACT), honeypot.is + GoPlus cross-check, structured pass/caution/fail verdicts. Signals, not guarantees.","type":"module","license":"MIT","bin":{"base-token-safety-mcp":"dist/cli.js"},"main":"dist/core.js","types":"dist/core.d.ts","exports":{".":"./dist/core.js","./server":"./dist/server.js"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","start":"node dist/cli.js"},"engines":{"node":">=18"},"repository":{"type":"git","url":"git+https://github.com/lordbasilaiassistant-sudo/base-token-safety-mcp.git"},"homepage":"https://github.com/lordbasilaiassistant-sudo/base-token-safety-mcp#readme","bugs":{"url":"https://github.com/lordbasilaiassistant-sudo/base-token-safety-mcp/issues"},"keywords":["mcp","mcp-server","modelcontextprotocol","base","base-chain","token-safety","token-security","honeypot","honeypot-detector","rug-check","rug-pull","crypto-security","agent-tools","goplus","defi","erc20"],"mcpName":"io.github.lordbasilaiassistant-sudo/base-token-safety","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","zod":"^4.4.3"},"devDependencies":{"@types/node":"^24.0.0","typescript":"^5.7.0"},"_id":"base-token-safety-mcp@0.1.0","gitHead":"17e400529c00860dac55c8e506ff03f93d9049b7","_nodeVersion":"24.14.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-LSyBHcXz4pnA4wjvuVeZt2n4orwvPSwM+beNEcsVgtXW9nERIuASEP/QxqA+f5LR04m/q1Fi/pCSK2HPhEQhiQ==","shasum":"f2b6737237ce5afe0601d029c98e2befc2605ebd","tarball":"https://registry.npmjs.org/base-token-safety-mcp/-/base-token-safety-mcp-0.1.0.tgz","fileCount":10,"unpackedSize":37933,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGOIjv3kVGIaxLXEUVqLYNZW3jN9mk05obBHCli1Pn1sAiEA0Y6wqf3saZ+DzpM4CpIV2QKkEV9LY+zqEVcO3G7Rq6M="}]},"_npmUser":{"name":"anthonysnider","email":"drlordbasil@gmail.com"},"directories":{},"maintainers":[{"name":"anthonysnider","email":"drlordbasil@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/base-token-safety-mcp_0.1.0_1783110619314_0.42277201563822175"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T20:30:19.198Z","0.1.0":"2026-07-03T20:30:19.466Z","modified":"2026-07-03T20:30:19.706Z"},"maintainers":[{"name":"anthonysnider","email":"drlordbasil@gmail.com"}],"description":"Keyless MCP server + CLI for token safety on Base: eth_getCode ground truth (explicit NOT_A_CONTRACT), honeypot.is + GoPlus cross-check, structured pass/caution/fail verdicts. Signals, not guarantees.","homepage":"https://github.com/lordbasilaiassistant-sudo/base-token-safety-mcp#readme","keywords":["mcp","mcp-server","modelcontextprotocol","base","base-chain","token-safety","token-security","honeypot","honeypot-detector","rug-check","rug-pull","crypto-security","agent-tools","goplus","defi","erc20"],"repository":{"type":"git","url":"git+https://github.com/lordbasilaiassistant-sudo/base-token-safety-mcp.git"},"bugs":{"url":"https://github.com/lordbasilaiassistant-sudo/base-token-safety-mcp/issues"},"license":"MIT","readme":"# base-token-safety-mcp\r\n\r\n```json\r\n{\r\n  \"state\": \"OK\",\r\n  \"verdict\": \"pass\",\r\n  \"address\": \"0x4200000000000000000000000000000000000006\",\r\n  \"chain\": \"base\",\r\n  \"chainId\": 8453,\r\n  \"checks\": {\r\n    \"isContract\": true,\r\n    \"honeypotIs\": {\r\n      \"reachable\": true,\r\n      \"hasData\": true,\r\n      \"isHoneypot\": false,\r\n      \"honeypotReason\": null,\r\n      \"buyTaxPct\": 0,\r\n      \"sellTaxPct\": 0,\r\n      \"simulationSuccess\": true,\r\n      \"risk\": \"low\",\r\n      \"openSource\": true,\r\n      \"apiFlags\": []\r\n    },\r\n    \"goPlus\": {\r\n      \"reachable\": true,\r\n      \"indexed\": true,\r\n      \"isHoneypot\": false,\r\n      \"buyTaxPct\": null,\r\n      \"sellTaxPct\": null,\r\n      \"sourceVerified\": true,\r\n      \"holderCount\": 5188511,\r\n      \"signals\": []\r\n    },\r\n    \"sourceVerified\": true,\r\n    \"topHolderConcentration\": {\r\n      \"topHolderPct\": 26.93,\r\n      \"top10Pct\": 53.07,\r\n      \"basis\": \"goplus_holders (burn addresses excluded)\"\r\n    }\r\n  },\r\n  \"flags\": [],\r\n  \"explain\": [\r\n    \"contract: 2041 bytes of deployed bytecode at 0x4200000000000000000000000000000000000006 on base (chainId 8453) via eth_getCode — confirmed on-chain contract.\",\r\n    \"honeypot.is: simulation succeeded — not flagged as honeypot (buy tax 0%, sell tax 0%), risk rating \\\"low\\\".\",\r\n    \"goplus: indexed — source verified, 5188511 holders; no risk fields raised.\",\r\n    \"source: contract source code is verified.\",\r\n    \"holders: top non-burn holder 26.93%, top 10 hold 53.07%.\",\r\n    \"verdict: pass — deployed contract, no honeypot signals from the consulted sources. Signals, not a guarantee.\"\r\n  ],\r\n  \"checkedAt\": \"2026-07-03T19:10:09.751Z\",\r\n  \"elapsedMs\": 370\r\n}\r\n```\r\n\r\nThat is one real `check_token` call on WETH (Base) — no API key, no signup, 370 ms. A keyless MCP server (and plain CLI) that gives agents a structured pre-buy safety verdict for any token address on **Base** (plus Ethereum and BSC).\r\n\r\n## Why it's different\r\n\r\n- **Chain-truth first, explicit states always.** Security APIs answer \"no flags found\" even for addresses that aren't contracts at all. This server asks the chain first — raw `eth_getCode` against a public RPC — so a wallet address, a wrong-chain paste, or a fake listing comes back as an explicit **`NOT_A_CONTRACT`**, never an ambiguous empty result. It even distinguishes EIP-7702 delegated EOAs from real contracts.\r\n- **Cross-checked signals.** [honeypot.is](https://honeypot.is) and [GoPlus](https://gopluslabs.io) free APIs queried in parallel: honeypot flags, buy/sell tax (worst of both sources), source verification, top-holder concentration.\r\n- **Never a silent OK.** A dead upstream degrades the verdict to **`UPSTREAM_DEGRADED`** with the partial checks attached — it does not crash, and it does not pretend the check passed.\r\n- **Zero keys, zero signup, `npx -y` runnable.** Typical check completes in well under 5 seconds (all upstream calls run in parallel with timeouts).\r\n\r\n## Install\r\n\r\n**Claude Code**\r\n\r\n```sh\r\nclaude mcp add base-token-safety -- npx -y base-token-safety-mcp\r\n```\r\n\r\n**Cursor** (`~/.cursor/mcp.json`)\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"base-token-safety\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"base-token-safety-mcp\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n**VS Code** (`.vscode/mcp.json`)\r\n\r\n```json\r\n{\r\n  \"servers\": {\r\n    \"base-token-safety\": {\r\n      \"type\": \"stdio\",\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"base-token-safety-mcp\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n**Plain CLI — no MCP client needed**\r\n\r\n```sh\r\nnpx -y base-token-safety-mcp check 0x4200000000000000000000000000000000000006\r\nnpx -y base-token-safety-mcp check 0x... --chain ethereum\r\n```\r\n\r\nExit codes: `0` = check completed (read `verdict` in the JSON), `2` = invalid input.\r\n\r\n## Tool: `check_token`\r\n\r\n| Argument  | Type   | Notes                                              |\r\n| --------- | ------ | -------------------------------------------------- |\r\n| `address` | string | required — `0x` + 40 hex chars                     |\r\n| `chain`   | string | optional — `base` (default), `ethereum`, or `bsc` |\r\n\r\n### States\r\n\r\n| `state`             | Meaning                                                                                          | Typical `verdict` |\r\n| ------------------- | ------------------------------------------------------------------------------------------------ | ----------------- |\r\n| `OK`                | Deployed contract, security sources responded; `pass` if no flags, `caution` if soft flags raised | `pass` / `caution` |\r\n| `NOT_A_CONTRACT`    | No deployed code at the address (wallet/EOA, empty address, or wrong chain) — nothing to buy      | `fail`            |\r\n| `HONEYPOT_SIGNALS`  | Honeypot-grade signal from any source (honeypot flag, cannot-sell, extreme tax)                   | `fail`            |\r\n| `UNVERIFIED_RISK`   | Contract exists but source is unverified, or no security source knows it — unknown ≠ safe          | `caution`         |\r\n| `UPSTREAM_DEGRADED` | One or more upstreams unreachable — partial check only, never a silent OK                          | `caution`         |\r\n\r\nEvery result carries machine-readable `flags` (e.g. `sell_tax_extreme`, `top_holder_gt_50pct`, `eip7702_delegated_eoa`, `upstream_unreachable:goplus`) and plain-English `explain` lines saying exactly what was observed and why the verdict is what it is.\r\n\r\n## Data sources & configuration\r\n\r\nAll keyless and free: public RPC `eth_getCode` (Base default `https://mainnet.base.org` with automatic fallback), honeypot.is v2 API, GoPlus token_security v1 API.\r\n\r\n| Env var        | Purpose                              |\r\n| -------------- | ------------------------------------ |\r\n| `BASE_RPC_URL` | Override the Base RPC endpoint       |\r\n| `ETH_RPC_URL`  | Override the Ethereum RPC endpoint   |\r\n| `BSC_RPC_URL`  | Override the BSC RPC endpoint        |\r\n\r\n## Honest limits\r\n\r\nThese are **signals, not guarantees, and not financial advice**. A `pass` means the consulted free sources raised no red flags *at check time* — not that the token is safe. Upgradeable contracts can turn hostile after you check; brand-new tokens are often unindexed (`UNVERIFIED_RISK`); holder data can lag; simulations can miss trap logic that activates later or under different conditions. Use this to reject obvious garbage cheaply, not to bless anything. Never risk money you can't afford to lose.\r\n\r\n---\r\n\r\nBuilt by the [Broke to Built](https://broke2builtai.com) machine. MIT.\r\n","readmeFilename":"README.md","_rev":"1-043de4bbab15a087ac512b3e78505fdb"}