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
| Field | Type | Description |
|---|---|---|
type | string | Schema version identifier. For v1, use "https://ercs.ethereum.org/ERCS/erc-8257#tool-manifest-v1". |
name | string | Your tool's name, between 1 and 128 characters (NFC Unicode). |
description | string | A human-readable description of what your tool does, between 1 and 500 characters (NFC Unicode). |
endpoint | string | The HTTPS URL where your tool is hosted. |
inputs | object | A JSON Schema defining your tool's input parameters. Use {} if there are none. |
outputs | object | A JSON Schema defining your tool's output parameters. Use {} if there are none. |
creatorAddress | string | Your lowercase EVM address (0x...). This must match the creator address recorded in the onchain registry when you call registerTool. |
Optional Fields
| Field | Type | Description |
|---|---|---|
version | string | Semantic version (e.g., "1.0.0"). |
image | string | URL 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. |
featuredImage | string | URL 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. |
tags | array | Tags 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. |
pricing | array | Payment options for calling your tool. See the Tool Invocation Flow section for details on x402 payments. |
access | object | Hints that tell agents what access requirements they need before calling your tool. See Access Control for details. |
verifiability | object | Describes 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:
| Tag | Description |
|---|---|
ai | AI and machine-learning tools |
defi | Decentralized finance tools |
nft | NFT-related tools |
trading | Trading and market tools |
image | Image generation and processing tools |
security | Security 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.
