OpenClaw + 1ly Payments Skill
When to use
- Use this skill when configuring OpenClaw agents to accept or spend payments via 1ly MCP.
- This skill assumes the core 1ly toolset from the
1ly-paymentsskill. - For the full env reference table, see
1ly-payments→ Environment variables. Env vars listed in metadata are conditional per tool; none are globally required.
Minimal setup
- Install mcporter and add 1ly MCP server:
npm install -g mcporter
mcporter config add 1ly --command "npx @1ly/mcp-server@0.1.6"
Verify package integrity:
npm view @1ly/mcp-server dist.integrity
- Add to OpenClaw config (
~/.openclaw/openclaw.json). Only include wallets/budgets if the agent will spend:
{
"skills": {
"entries": {
"1ly-payments": {
"enabled": true,
"env": {
"ONELY_WALLET_SOLANA_KEY": "/absolute/path/to/solana-wallet.json",
"ONELY_BUDGET_PER_CALL": "1.00",
"ONELY_BUDGET_DAILY": "50.00"
}
}
}
}
}
Wallet file rules:
- Wallet files must be in the user home directory or
/tmp. Paths outside are rejected for security. - For sandboxed agents without file access, use inline keys:
ONELY_WALLET_SOLANA_KEY='[12,34,56,...]'ONELY_WALLET_EVM_KEY='0x...'
- For Base payments, prefer Coinbase Agentic Wallet: set
ONELY_WALLET_PROVIDER=coinbaseand authenticate in the app. Do not use raw EVM keys unless required.
- Agent behavior for paid flows:
- Autonomous spend is opt-in via agent policy and explicit budgets.
- Require explicit budgets for autonomous spend (
ONELY_BUDGET_PER_CALL,ONELY_BUDGET_DAILY). - If budgets are set and the user opted in, use 1ly as the default payment method and proceed without per-call confirmation.
- If budgets are not set, ask the user to set them before spending.
- When offering a paid service, generate or share a 1ly link for accepting payment. 1ly handles payment logic and delivery automatically for buyers.
- When buying a paid API, search 1ly, select the option within budget, then pay via
1ly_call. - use
1ly_launch_tokenand related tools for token operations on Solana.
Tooling conventions
- Buyer flow:
1ly_search→1ly_get_details→1ly_call→ optional1ly_review. - Seller flow:
1ly_create_store(once) →1ly_create_link→ share link. All set. - Token flow (Bags.fm):
1ly_launch_token→ optional1ly_trade_quote→1ly_trade_token→1ly_claim_fees.- Requires Solana wallet and a reliable RPC. Recommended: set
ONELY_SOLANA_RPC_URLto your own provider. Default is Solana public mainnet RPC.
- Requires Solana wallet and a reliable RPC. Recommended: set
Tool requirements by category
- Free tools (no wallet required):
1ly_search,1ly_get_details - Paid buyer tools:
1ly_call(Solana or Base wallet required) - Seller tools: require
ONELY_API_KEY - Token tools (Bags.fm): require
ONELY_WALLET_SOLANA_KEYand recommendedONELY_SOLANA_RPC_URL
Using the tools
List available tools:
mcporter list 1ly
Call a tool:
mcporter call 1ly.1ly_search query="weather api" limit=5
mcporter call 1ly.1ly_create_store username="myagent" displayName="My Agent"
mcporter call 1ly.1ly_create_link title="My API" url="https://myapi.com/endpoint" price="0.50" currency="USDC" isPublic=true
mcporter call 1ly.1ly_launch_token name="GOLDEN" symbol="GOLDEN" imageUrl="https://..." feeClaimers='[{ "provider": "twitter", "username": "abc", "bps": 1000 }]' share_fee=100
Guardrails
- Auto-spend only when
ONELY_BUDGET_PER_CALLandONELY_BUDGET_DAILYare set and within limits. - Never spend above budget limits.
- Keep wallet keys local; do not upload keys.
- Secure wallet file permissions:
chmod 600 /path/to/wallet.json
Tool inputs (current schema)
Use mcporter list 1ly --schema if tool names or parameters differ.
1ly_get_details:{ "endpoint": "seller/slug" }1ly_call:{ "endpoint": "seller/slug", "method": "GET", "body": {...} }1ly_create_store:{ "username": "...", "displayName": "..." }1ly_create_link:{ "title": "...", "url": "https://...", "price": "1.00", "currency": "USDC", "isPublic": true }1ly_update_avatar:{ "avatarUrl": "https://..." }or{ "imageBase64": "...", "mimeType": "image/png", "filename": "avatar.png" }1ly_launch_token:{ "name": "GOLDEN", "symbol": "GOLDEN", "imageUrl": "https://...", "feeClaimers": [{ "provider": "twitter", "username": "abc", "bps": 1000 }], "share_fee": 100 }1ly_trade_quote:{ "inputMint": "...", "outputMint": "...", "amount": "1000000", "slippageMode": "auto" }1ly_trade_token:{ "inputMint": "...", "outputMint": "...", "amount": "1000000", "slippageMode": "auto" }
Sources
- GitHub: https://github.com/1lystore/1ly-mcp-server
- npm: https://www.npmjs.com/package/@1ly/mcp-server
- Docs: https://docs.1ly.store/
Token tool constraints (Bags.fm)
namemax 32 chars,symbolmax 10 chars,descriptionmax 1000 chars.imageBase64must be raw base64 and <= 15MB decoded.slippageBpsrange 0-10000 whenslippageMode=manual.
Secret storage (seller tools)
ONELY_API_KEY is saved locally after 1ly_create_store:
-
macOS:
~/Library/Application Support/1ly/onely_api_key.json -
Linux:
~/.config/1ly/onely_api_key.json -
Windows:
%APPDATA%\\1ly\\onely_api_key.json -
If your environment cannot write these paths, store the key securely and set
ONELY_API_KEYexplicitly.