AI agents that need Celo cannot be handed a pile of ABIs. Reads, unsigned prepares, and executes have to share one catalog so MCP, A2A, REST, and browser apps stay in sync.
← All work
Problem What I built Technical notes

- A TypeScript SDK (`@andrewkimjoseph/celina-sdk`) whose Zod-typed tool catalog powers every surface.
- Local stdio MCP (`celina-mcp`, 116 tools) for Cursor, Claude Desktop, and LM Studio — writes stay on the machine with env keys.
- Hosted MCP at mcp.usecelina.xyz/mcp (50 read/prepare tools, no server keys) and A2A at mcp.usecelina.xyz/a2a (same 50-tool profile, 14 skills).
- Public REST at api.usecelina.xyz, a Telegram bot, a stats/telemetry Worker at api.stats.usecelina.xyz, docs, and Celeste as the wallet-signed reference app with ERC-8021 attribution.
- One catalog across stdio MCP, hosted MCP, A2A, REST, the Telegram bot, and the browser SDK. `filterToolDefinitions({ surface: "mcp" | "browser" })` keeps schemas in sync.
- Serialized prepared flows with sign-time simulation so agents dry-run before broadcast; hosted endpoints never hold keys. ERC-4337 `createAAClient` sponsors UserOps in the app.
- Celo-native depth: Mento FX and Uniswap v4 pair lists and quotes, GoodDollar reserve (G$ ↔ USDm), Aave V3, governance, staking, Self Agent ID, AgentKarma.
- MIT-licensed meta-repo of eight packages, published on npm, with GitBook docs, OASF / EIP-8004 discovery, and a listing in the official Celo MCP docs. Hosted MCP, the marketing site, and Celeste run on Cloudflare Workers.


