Steward MCP
# Steward MCP Server
Steward's x402 pay-per-call rail as [MCP](https://modelcontextprotocol.io/) tools.
Any MCP-compatible agent (Claude, Cursor, Windsurf, MCP-aware frameworks) gets
Steward's catalog natively in its tool list — each paid call settles **$0.01–$0.02 USDC
on Base**, signed by your own wallet.
**Current release: v0.3.1** — run it with `npx -y @brianbooms/steward-mcp` (25 tools: 14 paid + 11 free).
Steward is the machine Brian Booms named: it quotes fair prices, verifies payment
cryptographically, delivers goods, and accounts for every cent.
- Rail: https://pay.brianbooms.com · Build V3.9.203-STANDARD
- Fair Dealing (the terms): https://brianbooms.com/fair-dealing/
- Brian Booms is an AI-assisted artist and content creator.
## Tools (25 total — one canonical server)
### Paid calls — USDC on Base each, settled from your wallet
| Tool | What it does | Price |
|---|---|---|
| `steward_weather` | Current weather + 7-day forecast for lat/lon | $0.01 |
| `steward_joke` | One clean original joke | $0.01 |
| `steward_fortune` | One warm original fortune + lucky number | $0.01 |
| `steward_fx` | Fiat currency conversion at reference rates | $0.01 |
| `steward_time` | Current local time in any IANA time zone | $0.01 |
| `steward_wiki` | Concise Wikipedia summary for a topic | $0.01 |
| `steward_iss_pass` | Upcoming visible ISS flyovers for lat/lon | $0.01 |
| `steward_audio_match` | Match an emotion/moment to a Brian Booms track | $0.01 |
| `steward_audio_rest` | Wind-down audio lane | $0.01 |
| `steward_audio_focus` | Focus audio lane | $0.01 |
| `steward_sleep_tip` | One genuine sleep-hygiene tip (no medical claims) | $0.01 |
| `trust_verify_status` | Is a domain Steward Verified? Status + method + expiry | $0.01 |
| `trust_agent_attestation` | Attestation signals for an agent wallet/identifier | $0.02 |
| `trust_screen` | Pre-payment counterparty screen (approve/review/decline, advisory) | $0.02 |
> The three `steward_audio_*` lanes are live rail-side since worker V3.9.195-AUDIO.
> The three `trust_*` tools are live rail-side since worker V3.9.203-STANDARD.
> All trust tools are read-only and advisory — verification can never be purchased.
### Read-only discovery — free, never signs or spends
| Tool | What it does | Source |
|---|---|---|
| `steward_catalog` | Live purchase catalog: sku, name, USD price (32 catalog SKUs) | brianbooms-mcp |
| `steward_product` | Full details for one SKU: description, price, delivery, buy URL | brianbooms-mcp |
| `steward_purchase_instructions` | Exact x402 payment requirements parsed live from the product's 402 | brianbooms-mcp |
| `steward_rewards` | How Booms Rewards works (buyers + merchants + agent enrollment) | brianbooms-mcp |
| `steward_payment_format` | Byte-exact X-PAYMENT header construction guide | brianbooms-mcp |
| `steward_cheapest_route` | Cheapest of 6 crypto transfer routes for an amount (live fees) | boomie-fee-oracle |
| `steward_route_fees` | Full ranked fee table for all 6 routes | boomie-fee-oracle |
| `steward_receipts` | Public per-wallet receipts — every cent, in the open | base build |
| `steward_verifier_pubkey` | Steward Verified issuer Ed25519 public key — verify record signatures offline | V3.9.203-STANDARD |
| `steward_directory` | Steward Standard 57-merchant directory, merit-ranked (ranking never for sale) | V3.9.203-STANDARD |
| `steward_spend_today` | This server's local spend meter (free, local) | base build |
## Superseded servers
This is the one canonical MCP server. The directories below are left in place
for history but are superseded — do not build on them:
| Directory | What it was | Why superseded |
|---|---|---|
| `ops/mcp/brianbooms-mcp/` (+ `-py`, `-github`, `-py-1.0.4-staged`, `-py-1.0.5-build` variants; npm `brianbooms-mcp` v1.0.7) | 5 read-only discovery tools | Ported here as `steward_catalog`, `steward_product`, `steward_purchase_instructions`, `steward_rewards`, `steward_payment_format` |
| `ops/x402/mcp-fee-oracle/` | 2 fee-oracle tools (`cheapest_route`, `route_fees`) | Ported here as `steward_cheapest_route`, `steward_route_fees` |
| `ops/mcp/synthetic-universe/` | Stage-only server; tools duplicate the paid set | Duplicates — the base tools here are the payment-capable versions |
| `ops/su-store/mcp/` | Frozen 3-product Stripe catalog + Stripe checkout/order tools | Catalog deduped by the live `steward_catalog`; Stripe checkout tools superseded by the x402 buy flow |
## Install
Requires Node 20+. No install step — run the published package (v0.3.1):
```bash
npx -y @brianbooms/steward-mcp
```
From source (this repo):
```bash
cd steward-mcp
npm install
npm run build
```
## Configure
```bash
cp .env.example .env
# edit .env:
```
| Variable | Required | Default | What it is |
|---|---|---|---|
| `STEWARD_PAYER_KEY` | **yes** | — | Your Base wallet private key (`0x...`). Funds the $0.01/call payments. |
| `STEWARD_MAX_SPEND_USDC` | no | `0.05` | Hard ceiling per single call. The server refuses to sign above this. |
| `STEWARD_MAX_SPEND_DAY_USDC` | no | `5.00` | Hard ceiling per rolling 24h. |
| `STEWARD_RAIL_URL` | no | `https://pay.brianbooms.com` | Rail base URL. |
**Your key never leaves your machine.** The server uses it only to sign a
per-call EIP-3009 authorization ($0.01 USDC on Base, payee verified as Steward's
wallet `0xa98e8c6cbc64b7bb30fd0d2015ab24814c661839`). It is never logged, stored,
or transmitted anywhere else. Fund the wallet with a few USDC on Base and each
tool call spends exactly what the rail quotes — nothing more.
## Add to Claude Code / Cursor / Windsurf
**Claude Code** (`~/.claude.json` or project `.mcp.json`):
```json
{
"mcpServers": {
"steward": {
"command": "npx",
"args": ["-y", "@brianbooms/steward-mcp"],
"env": {
"STEWARD_PAYER_KEY": "0x...",
"STEWARD_MAX_SPEND_USDC": "0.05",
"STEWARD_MAX_SPEND_DAY_USDC": "5.00"
}
}
}
}
```
**Cursor** (`.cursor/mcp.json`): same shape under `"mcpServers"`.
Restart the host, and the `steward_*` tools appear in the agent's tool list.
Ready-to-paste configs for Claude Desktop, Cursor, Windsurf, Cline, and Codex: https://github.com/brianbooms/steward-examples
## Framework integrations
Steward works natively with every major agent framework via MCP. No wrappers
needed — point the framework's MCP client at Steward and the tools appear.
Worked examples: [steward-examples](https://github.com/brianbooms/steward-examples) (index + client configs) ·
[LlamaIndex](https://github.com/brianbooms/steward-llamaindex-example) ·
[CrewAI](https://github.com/brianbooms/steward-crewai) ·
[ElizaOS plugin](https://github.com/brianbooms/plugin-steward) ·
[eval kit](https://github.com/brianbooms/steward-eval-kit)
### LangChain
```python
from langchain_mcp_adapters import MultiServerMCPClient
client = MultiServerMCPClient({
"steward": {
"command": "npx",
"args": ["-y", "@brianbooms/steward-mcp"],
"env": {"STEWARD_PAYER_KEY": "0x..."},
"transport": "stdio",
}
})
tools = await client.get_tools() # steward_* tools as LangChain StructuredTools
```
### LlamaIndex
```python
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec
mcp_client = BasicMCPClient(
command_or_url="npx",
args=["-y", "@brianbooms/steward-mcp"],
env={"STEWARD_PAYER_KEY": "0x..."},
)
tool_spec = McpToolSpec(client=mcp_client)
tools = tool_spec.to_tool_list()
```
### CrewAI
```python
from crewai_tools import MCPServerAdapter
with MCPServerAdapter(
command="npx",
args=["-y", "@brianbooms/steward-mcp"],
env={"STEWARD_PAYER_KEY": "0x..."},
) as tools:
# tools = CrewAI-compatible steward_* tools
agent = Agent(tools=tools, ...)
```
### AutoGen / AG2
```python
from autogen_ext.tools.mcp import StdioServerParams, mcp_server_tools
server_params = StdioServerParams(
command="npx",
args=["-y", "@brianbooms/steward-mcp"],
env={"STEWARD_PAYER_KEY": "0x..."},
)
tools = await mcp_server_tools(server_params)
```
### Vercel AI SDK
```typescript
import { createMCPClient } from "@ai-sdk/mcp";
const mcpClient = await createMCPClient({
transport: {
type: "stdio",
command: "npx",
args: ["-y", "@brianbooms/steward-mcp"],
env: { STEWARD_PAYER_KEY: "0x..." },
},
});
const tools = await mcpClient.tools();
// use with generateText({ model, tools, prompt })
```
## How payment works
1. Tool calls the rail endpoint with no payment.
2. Rail answers HTTP 402 with an x402 quote (price, payee, asset, timeout).
3. The server verifies: scheme `exact`, network `base`, payee is Steward's
wallet, asset is USDC on Base, price sane and within your caps.
4. It signs an EIP-3009 `transferWithAuthorization` with your key and resubmits
with the `X-PAYMENT` header.
5. Rail verifies via its facilitator and returns the result as the tool output.
Anything unexpected — wrong payee, wrong asset, price over your cap — and the
server refuses to sign. No silent spending, ever.
## Verify without paying
```bash
npx tsx test/quotes.test.ts # probes all 25 tools' live quotes, signs nothing
npx tsx test/smoke.test.ts # boots the MCP server, lists tools over stdio
```
## Trust
- Prices are quoted by the rail per call; the server never invents a price.
- Every settled call appears on `steward_receipts` — public, per wallet.
- The terms: https://brianbooms.com/fair-dealing/ (the Fair Dealing page controls).
- Machine-readable catalog: https://brianbooms.com/.well-known/purchase-catalog.json
## License
MIT — Synthetic Universe LLC.
TDQS
Scored across 25 tools
Most tools target clearly distinct resources or actions, and descriptions explicitly differentiate overlapping pairs like audio lanes, route tools, and trust tools. However, several closely related tools (e.g., steward_audio_match vs audio_rest/focus, steward_cheapest_route vs route_fees) still require careful reading to avoid misselection.
Names consistently use snake_case with domain prefixes (steward_ or trust_), which is predictable. The main deviation is that they do not follow a uniform verb_noun pattern, and the steward_/trust_ prefix split is a minor inconsistency.
25 tools is at the heavy end of the range, and the server bundles many unrelated utility services (weather, ISS, audio, jokes, crypto routes, trust) under one MCP. Each tool covers a distinct service, but the overall count feels borderline heavy for the apparent scope.
The surface covers the main domains: catalog/purchase flow, trust verification, payment receipts, and a broad set of utility APIs. Minor gaps exist (e.g., no explicit post-payment download tool and limited audio discovery beyond mood match), but agents can work around them.