Tool Manifest

Full field reference for ERC-8257 tool manifests, including required and optional fields, display images, discovery tags, and examples.

The metadataURI stored onchain resolves to a JSON manifest that describes your tool. You serve it at /.well-known/ai-tool/<slug>.json on your tool's endpoint origin. Its keccak256 hash (computed over the JCS-canonicalized form) is committed onchain so consumers can verify the manifest hasn't been tampered with.

See the ERC-8257 §2 Tool Manifest for the full normative specification.

Required Fields

FieldTypeDescription
typestringSchema version identifier. For v1, use "https://ercs.ethereum.org/ERCS/erc-8257#tool-manifest-v1".
namestringYour tool's name, between 1 and 128 characters (NFC Unicode).
descriptionstringA human-readable description of what your tool does, between 1 and 500 characters (NFC Unicode).
endpointstringThe HTTPS URL where your tool is hosted.
inputsobjectA JSON Schema defining your tool's input parameters. Use {} if there are none.
outputsobjectA JSON Schema defining your tool's output parameters. Use {} if there are none.
creatorAddressstringYour lowercase EVM address (0x...). This must match the creator address recorded in the onchain registry when you call registerTool.

Optional Fields

FieldTypeDescription
versionstringSemantic version (e.g., "1.0.0").
imagestringURL for your tool's icon. Use a 1:1 (square) aspect ratio since it's rendered as an avatar or thumbnail in search results and tool cards. Max 2,048 bytes after URL normalization.
featuredImagestringURL for a banner image in 16:9 aspect ratio. To be potentially featured on the featured section of the Tools homepage, you need to include a featuredImage in 16:9. Max 2,048 bytes after URL normalization.
tagsarrayTags that help users find your tool through search and filtering. Each tag must be lowercase alphanumeric (hyphens allowed), 1 to 32 characters, with a max of 16 tags and no duplicates. See Category Tags below.
pricingarrayPayment options for calling your tool. See the Tool Invocation Flow section for details on x402 payments.
accessobjectHints that tell agents what access requirements they need before calling your tool. See Access Control for details.
verifiabilityobjectDescribes your tool's execution environment and data-handling guarantees. See ERC-8257 §5 for the full specification.

Unknown top-level fields are preserved and not stripped. The manifest hash is computed over the full JCS-canonicalized document as served, so any extra fields you add will be included. If you add custom extension fields, namespace them with a reverse-DNS prefix (e.g., "io.example.myField").

Category Tags

The Tools homepage supports filtering by the following category tags. Use these where applicable so your tool appears in category filters:

TagDescription
aiAI and machine-learning tools
defiDecentralized finance tools
nftNFT-related tools
tradingTrading and market tools
imageImage generation and processing tools
securitySecurity and auditing tools

You can also include custom tags beyond these categories. They will still show up on your tool's detail page and are searchable.

Example: Free Tool

{
  "type": "https://ercs.ethereum.org/ERCS/erc-8257#tool-manifest-v1",
  "name": "nft-price-oracle",
  "description": "Returns estimated floor price for any NFT collection.",
  "endpoint": "https://tools.example.com/nft-price-oracle",
  "inputs": {
    "type": "object",
    "properties": {
      "collection": { "type": "string", "description": "Contract address" },
      "chainId": { "type": "integer" }
    },
    "required": ["collection", "chainId"]
  },
  "outputs": {
    "type": "object",
    "properties": {
      "floorPriceEth": { "type": "string" },
      "updatedAt": { "type": "string", "format": "date-time" }
    }
  },
  "version": "1.0.0",
  "image": "https://tools.example.com/nft-price-oracle/icon.png",
  "featuredImage": "https://tools.example.com/nft-price-oracle/featured.png",
  "tags": ["nft", "defi", "oracle"],
  "creatorAddress": "0xabcdefabcdef1234567890abcdefabcdef123456"
}

Example: Paid Tool

{
  "type": "https://ercs.ethereum.org/ERCS/erc-8257#tool-manifest-v1",
  "name": "premium-analytics",
  "description": "Advanced portfolio analytics for NFT holders.",
  "endpoint": "https://tools.example.com/premium-analytics",
  "inputs": {
    "type": "object",
    "properties": {
      "wallet": { "type": "string", "description": "Wallet address to analyze" }
    },
    "required": ["wallet"]
  },
  "outputs": {
    "type": "object",
    "properties": {
      "totalValue": { "type": "string" },
      "breakdown": { "type": "array" }
    }
  },
  "version": "1.0.0",
  "image": "https://tools.example.com/premium-analytics/icon.png",
  "featuredImage": "https://tools.example.com/premium-analytics/featured-16x9.png",
  "tags": ["nft", "trading", "analytics"],
  "pricing": [
    {
      "amount": "20000",
      "asset": "eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
      "recipient": "eip155:8453:0xabcdef0123456789abcdef0123456789abcdef01",
      "protocol": "x402"
    }
  ],
  "creatorAddress": "0xabcdef0123456789abcdef0123456789abcdef01"
}

The pricing array uses CAIP-19 asset identifiers and CAIP-10 recipient addresses. See ERC-8257 §3 for the full pricing specification.