{
  "name": "saferico",
  "title": "SaferICO",
  "description": "Read live contract, token and wallet facts across 25 EVM networks. The full 201-detector Solidity audit runs locally via `npx saferico mcp`, not here.",
  "generated": "by scripts/agent.mjs from src/tools/registry.js — do not edit by hand",
  "remote": {
    "url": "https://saferico.com/mcp",
    "transport": "streamable-http",
    "protocolVersions": [
      "2026-07-28",
      "2025-11-25",
      "2025-06-18",
      "2025-03-26"
    ],
    "preferredProtocolVersion": "2026-07-28",
    "methods": [
      "initialize",
      "tools/list",
      "tools/call",
      "ping"
    ],
    "maxRequestBytes": 65536,
    "rateLimit": {
      "requestsPerMinutePerAddress": 240,
      "requestsPerDayPerKey": 10000,
      "error": "rate-limited",
      "retryAfterHeader": true,
      "note": "These bound requests, not spend. Listing tools and refused calls cost no credits but do count here."
    },
    "authentication": {
      "type": "bearer",
      "instructions": "Create a key on the API keys tab of your SaferICO account, then send it as `Authorization: Bearer sfi_live_…`.",
      "plan": {
        "key": "business",
        "label": "Business",
        "usd": 29.9
      }
    },
    "clientConfigExample": {
      "mcpServers": {
        "saferico": {
          "url": "https://saferico.com/mcp",
          "headers": {
            "Authorization": "Bearer sfi_live_…"
          }
        }
      }
    }
  },
  "local": {
    "command": "npx",
    "args": [
      "saferico",
      "mcp"
    ],
    "description": "Runs the 201 detectors on this machine. No API key required; nothing is uploaded.",
    "tools": [
      "scan_path",
      "scan_source",
      "engine_info"
    ],
    "clientConfigExample": {
      "mcpServers": {
        "saferico-local": {
          "command": "npx",
          "args": [
            "-y",
            "saferico",
            "mcp"
          ]
        }
      }
    }
  },
  "tools": [
    {
      "name": "market_info",
      "description": "Live native-coin prices and gas across the supported chains, and which chain is cheapest to deploy on right now.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Live native-coin prices and gas across the supported chains, and which chain is cheapest to deploy on right now."
      }
    },
    {
      "name": "token_info",
      "description": "Read a token's on-chain facts: name, symbol, decimals, total supply and owner.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token contract address",
            "maxLength": 4096
          },
          "network": {
            "type": "string",
            "description": "Chain name or id",
            "maxLength": 4096
          }
        },
        "required": [
          "token"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Read a token's on-chain facts: name, symbol, decimals, total supply and owner."
      }
    },
    {
      "name": "check_honeypot",
      "description": "Simulate a buy and a sell against a token to detect honeypots and hidden transfer taxes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token address",
            "maxLength": 4096
          },
          "network": {
            "type": "string",
            "description": "Chain name or id",
            "maxLength": 4096
          }
        },
        "required": [
          "token"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Simulate a buy and a sell against a token to detect honeypots and hidden transfer taxes."
      }
    },
    {
      "name": "portfolio_scan",
      "description": "Read the wallet's native-coin balance and its USD value across the supported chains.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Wallet address (defaults to the connected wallet)",
            "maxLength": 4096
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Read the wallet's native-coin balance and its USD value across the supported chains."
      }
    },
    {
      "name": "contract_source",
      "description": "Fetch a contract's verification status, compiler, proxy status and source metadata from the explorer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Contract address",
            "maxLength": 4096
          },
          "network": {
            "type": "string",
            "description": "Chain name or id",
            "maxLength": 4096
          }
        },
        "required": [
          "address"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Fetch a contract's verification status, compiler, proxy status and source metadata from the explorer."
      }
    },
    {
      "name": "bytecode_scan",
      "description": "Analyse an UNVERIFIED contract straight from its deployed bytecode: which functions it exposes (mint, blacklist, pause, fee and withdrawal entry points), which opcodes it contains (SELFDESTRUCT, DELEGATECALL, tx.origin), whether it is an upgradeable proxy, and which compiler built it. Use this whenever contract_source reports the source is not verified.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Contract address",
            "maxLength": 4096
          },
          "network": {
            "type": "string",
            "description": "Chain name or id",
            "maxLength": 4096
          }
        },
        "required": [
          "address"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Analyse an UNVERIFIED contract straight from its deployed bytecode: which functions it exposes (mint, blacklist, pause, fee and withdrawal entry points), which opcodes it contains (SELFDESTRUCT, DELEGATECALL, tx.origin), whether it is an upgradeable proxy, and which compiler built it. Use this whenever contract_source reports the source is not verified."
      }
    },
    {
      "name": "explain_transaction",
      "description": "Explain what one transaction actually did: status, decoded function call, ERC-20 and NFT movements, approvals granted (flagging unlimited ones), every contract touched, and security-relevant signals such as proxy upgrades, ownership transfers and role grants. Reads the receipt and its logs — it does NOT trace internal calls, because public RPC endpoints do not expose tracing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "description": "Transaction hash (0x + 64 hex)",
            "maxLength": 4096
          },
          "network": {
            "type": "string",
            "description": "Chain name or id",
            "maxLength": 4096
          }
        },
        "required": [
          "hash"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Explain what one transaction actually did: status, decoded function call, ERC-20 and NFT movements, approvals granted (flagging unlimited ones), every contract touched, and security-relevant signals such as proxy upgrades, ownership transfers and role grants. Reads the receipt and its logs — it does NOT trace internal calls, because public RPC endpoints do not expose tracing."
      }
    },
    {
      "name": "scan_agent_config",
      "description": "Security-review the text of an AI agent skill, instruction file or MCP server configuration for patterns that are dangerous by construction: shell commands in server definitions, disabled sandboxes, wildcard command permissions, hardcoded credentials and private keys, instructions to read credential stores, outbound calls to data-collection endpoints, prompt-injection and instruction-override text, hidden HTML-comment instructions, invisible or bidirectional-override characters, and unpinned packages. This is pattern matching over text, NOT smart-contract analysis, and a clean result means no known pattern matched — not that the file is safe to run. Reads up to 4 KB here; use `npx saferico skill <path>` for a whole directory, locally, with nothing uploaded.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "The file's text",
            "maxLength": 4096
          },
          "filename": {
            "type": "string",
            "description": "Its name, e.g. mcp.json or SKILL.md — decides which rules apply",
            "maxLength": 4096
          }
        },
        "required": [
          "content"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "type": "object",
        "required": [
          "ok"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "description": "true when the tool answered; false when it refused."
          },
          "error": {
            "type": "string",
            "description": "Stable machine-readable reason, present only when ok is false."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation, present only when ok is false."
          }
        },
        "additionalProperties": true,
        "description": "Security-review the text of an AI agent skill, instruction file or MCP server configuration for patterns that are dangerous by construction: shell commands in server definitions, disabled sandboxes, wildcard command permissions, hardcoded credentials and private keys, instructions to read credential stores, outbound calls to data-collection endpoints, prompt-injection and instruction-override text, hidden HTML-comment instructions, invisible or bidirectional-override characters, and unpinned packages. This is pattern matching over text, NOT smart-contract analysis, and a clean result means no known pattern matched — not that the file is safe to run. Reads up to 4 KB here; use `npx saferico skill <path>` for a whole directory, locally, with nothing uploaded."
      }
    }
  ]
}
