basezap-mcp
by afifarioss
README.md
# basezap-mcp
An MCP (Model Context Protocol) server that exposes [BaseZap](https://basefarcaster.vercel.app)'s
tipping-agent tools to any MCP client — Claude Desktop, Cursor, Claude Code, etc.
This server is **read-only / non-custodial by design**: it never holds private
keys, never signs anything, and never broadcasts a transaction. It only fetches
platform info, computes fee quotes, and builds *unsigned* ERC-20 transfer
calldata for a separate wallet-connected client to sign and send.
## Tools
- **`get_platform_info`** — chain, USDC address, platform fee (bps), fee wallet.
- **`get_tip_quote`** — given a USDC amount, returns the exact creator/platform fee split.
- **`build_tip_calldata`** — given a recipient address + amount, returns unsigned
calldata for both legs of a tip. Never signs or sends anything.
- **`resolve_farcaster_username`** — resolves a Farcaster username to their
verified wallet address (uses BaseZap's `/api/resolve-user` endpoint directly).
## Install
```bash
npm install --ignore-scripts
npm run build
```
(`--ignore-scripts` avoids native-module build issues on some environments,
e.g. Termux/Android — harmless to use anywhere.)
## Running standalone (for testing)
```bash
npm start
```
Or test a single tool call directly over stdio without any MCP client:
```bash
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_tip_quote","arguments":{"amountUsdc":1}}}' | node build/index.js
```
## Claude Desktop config
Add this to your `claude_desktop_config.json` (Settings → Developer → Edit Config):
```json
{
"mcpServers": {
"basezap": {
"command": "node",
"args": ["/absolute/path/to/basezap-mcp/build/index.js"],
"env": {
"BASEZAP_USE_X402": "false"
}
}
}
}
```
Replace the path with the real absolute path to `build/index.js` on your
machine. Restart Claude Desktop after editing the config.
## Free vs. paid (x402) mode
By default (`BASEZAP_USE_X402=false` or unset), the server calls BaseZap's
free endpoint (`/api/agent`). Set `BASEZAP_USE_X402=true` to route calls
through the paid x402 endpoint instead ($0.001 USDC per call).
Important: setting `BASEZAP_USE_X402=true` alone does NOT make the server
pay automatically — you'll get a clear HTTP 402 Payment Required error on
every call unless you've separately set up auto-pay (see below) or are using
an MCP client/gateway that already handles x402 payment for you.
## Optional: x402 auto-pay
See `AUTOPAY.md` for a from-scratch guide to making this server pay its own
x402 fees automatically using a funded wallet. Read it carefully before
using it — it involves putting a real private key in an environment
variable, and a misconfigured auto-pay server can silently spend real money
on every tool call. It is NOT wired in by default, and you should understand
exactly what it does before enabling it.
## Verified request contract
The exact request/response shape this server relies on was confirmed live
against the real `/api/agent` endpoint (not assumed from documentation):
```json
{ "tool": "get_tip_quote", "args": { "amount_usdc": 1 } }
```
returns:
```json
{ "total_usdc": 1, "creator_receives_usdc": 0.95, "platform_fee_usdc": 0.05, "platform_fee_bps": 500 }
```
Note the API itself uses `snake_case` field names inside `args` — this server's
MCP tool inputs use friendly `camelCase` (`amountUsdc`) and translate
internally, so this is only relevant if you're modifying the server itself.
TDQS
A4.4/5.0
Scored across 4 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: platform info, tip quote, calldata building, and username resolution. There is no overlap or ambiguity.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern in snake_case: get_platform_info, get_tip_quote, build_tip_calldata, resolve_farcaster_username. No mixing of conventions.
Tool Count5/5
Four tools is well-scoped for a focused tipping service. Each tool earns its place, covering the essential operations without unnecessary bloat.
Completeness5/5
The tool surface covers the full workflow for preparing a tip: platform config, fee quote, address resolution, and calldata generation. The omission of signing and broadcasting is intentional and not a gap.
Maintenance
ActivitySlowing
ResponsivenessNo issues