Pay-per-call AI query and versioned task memory for agents. No account, no API key, via x402.
Runs on your machine from its package; the steps are below.
Not assessed yet.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx a2apay-io
MCP client config
{
"mcpServers": {
"a2apay": {
"command": "uvx",
"args": [
"a2apay-io"
]
}
}
}Python client for a2apay.io — pay-per-call AI answers and persistent memory for autonomous agents. No account, no API key.
pip install a2apay-io # free-tier only
pip install "a2apay-io[paid]" # adds real payment support (eth-account)
(The PyPI distribution is named a2apay-io — an unrelated package already
holds the bare a2apay name. The importable module is still a2apay.)
Every call tries the free tier first automatically — 5 requests/day per caller, no wallet needed:
from a2apay import Agent
agent = Agent()
answer = agent.ask("What's 7 times 8?")
print(answer)
agent.remember("last_task", "processed invoice #4471", tags=["billing"])
from a2apay import Agent
agent = Agent(private_key="0x...") # or set A2APAY_PRIVATE_KEY
answer = agent.ask("What's 7 times 8?")
The wallet needs a small USDC balance on Base mainnet ($0.028/call). The private key is used only to sign a payment authorization locally — it is never sent anywhere.
Write versioned, task-scoped state and read it back later — even from a
different process. Each checkpoint() to the same key adds a new version
rather than overwriting, and resume() always returns the latest.
from a2apay import Agent
agent = Agent(private_key="0x...")
agent.checkpoint("invoice-batch-7", key="status", value="processed rows 1-400")
# ...process dies, or a second process picks up later...
agent2 = Agent(private_key="0x...") # same wallet
records = agent2.resume("invoice-batch-7")
print(records[0]["value"]) # "processed rows 1-400"
resume() always requires payment ($0.014/call) — there's no free tier
for reads yet, so it needs a configured wallet even for your first call.
checkpoint() follows the same free-tier-then-paid behavior as
remember().
ask() returns a real AI-generated answer.remember() stores a flat key/value record with optional tags — this is
simple text storage, not a document database. Values are stored as text.402;
if no private_key is configured at that point, it raises a clear
A2ApayError rather than failing silently.eth-account (maintained by the Ethereum
Foundation ecosystem), implementing the real x402 "exact" EVM scheme
per the x402 protocol spec.An MCP server (mcp_server.py) exposes ask and remember as MCP tools
for any MCP-aware agent or framework (Claude Desktop, etc.):
pip install "a2apay-io[mcp]"
python mcp_server.py
Add to an MCP client config:
{
"mcpServers": {
"a2apay": {
"command": "python",
"args": ["/absolute/path/to/mcp_server.py"],
"env": {"A2APAY_PRIVATE_KEY": "0x..."}
}
}
}
Honest scope note: remember is write-only — there's no memory read-back
tool because the live API doesn't have a read-back route yet.
See a2apay.io/openapi.yaml for the underlying HTTP API this wraps.