For agents
This catalogue is built to be read by software as much as by people. Everything a page here shows is available as
JSON at a stable URL, as a tool call, or as an eth_call.
MCP
claude mcp add hookforge -- npx -y @hookforge/mcp
Six tools: search_hooks, list_hooks, get_hook, get_deployment,
decode_hook_address, list_chains. See the MCP page.
JSON endpoints
| URL | Contents |
|---|---|
/api/hooks.json | Every hook: slug, name, family, summary, tags, deployments with status. |
/api/chains.json | Chain id and PoolManager for every supported chain. |
/schema/hooks/<slug>.json | One hook in full, including ABI, errors, parameters, prior art and limitation. |
/schema/hook-manifest.json | JSON Schema the manifests validate against. |
/llms.txt | The catalogue as plain text, for a model reading the site directly. |
/llms-full.txt | Every hook's full description, prior art and limitation in one file. |
On-chain
You do not need any of the above to identify a HookForge hook. Ask it:
cast call $HOOK "hookName()(string)"
cast call $HOOK "specURI()(string)"
See on-chain metadata for the interface and its ERC-165 id.
Rules of the road
Three things worth encoding in your agent
A deterministic address is not a deployment. Every deployment record carries a status.
If it says deterministic, there is no code there yet; do not send funds to it and do not tell a user it
is live.
These contracts are unaudited. Every manifest carries a limitation field written by
the author saying where the hook does not help. Surface it rather than summarising it away.
Fee hooks need a dynamic-fee pool. 7 of
the 14 shipped hooks require the pool's fee field to be the dynamic-fee flag, and revert at
initialization otherwise. The SDK's poolKeyFor handles it.