AGENTS.md + @dappql/mcp give them live, typed access.createSdk factory with events included.@dappql/mcp auto-discovers its contracts.DappQL lived inside Ripe Finance for three years. 200+ contracts on testnet, a Base mainnet launch, and a viral day that didn't melt the RPC bill. Read how it got there.
Point DappQL at your contracts, get a fully typed SDK. When an ABI changes, TypeScript tells you exactly what broke.
Every project ships with a generated AGENTS.md. Plug in @dappql/mcp and Claude Code, Cursor, or any MCP client gets live, typed contract access: reads, simulated writes, events, gated execution.
Flip isSdk: true, run dappql pack, publish to npm. Your package ships typed contracts + ABIs + a manifest that @dappql/mcp auto-discovers. Consumers, humans and AI agents, import and get full context.
Reads from across your entire component tree fuse into one RPC. useContextQuery handles the batching; you write ergonomic code.
Opt in with watchBlocks and every query stays in sync with chain state. No hand-rolled subscriptions.
Paginate on-chain arrays with a single hook. Deterministic batching, bigint-safe indexing.
One npm install. Claude Code, Codex, or Cursor instantly gains typed access to Underscore Finance's 76 contracts on Base — live reads, event queries, simulated writes. No codegen, no custom wiring. Just the plugin-discovery flow DappQL unlocks, wrapped in a curated agent persona.
import { Token } from './src/contracts'
import { useContextQuery } from '@dappql/react'
import { formatUnits } from 'viem'
export function TokenStats({ account }) {
const { data, isLoading } = useContextQuery({
balance: Token.call.balanceOf(account),
symbol: Token.call.symbol(),
decimals: Token.call.decimals(),
supply: Token.call.totalSupply(),
})
if (isLoading) return <Spinner />
return (
<p>
{formatUnits(data.balance, data.decimals)} / {' '}
{formatUnits(data.supply, data.decimals)} {data.symbol}
</p>
)
}In production at
Questions, feedback, or want to ship something with DappQL? contact@dappql.com · @DappQL