Install
$ agentstack add mcp-1lystore-1ly-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.7 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.7. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
@1ly/mcp-server
MCP server for 1ly.store — Enable AI agents to discover, pay for, and sell APIs using crypto.
Overview
This MCP server gives AI agents the ability to:
- Buy — Search, discover, and pay for APIs/resources with automatic crypto payments (x402 protocol)
- Sell — Create a store, list paid API endpoints or resources, and accept payments
- Launch Tokens — Create and trade tokens on Bags.fm, and claim fee shares
Supported Networks: Solana (mainnet), Base (mainnet) Payment Currency: USDC and $1LY (Solana only)
What is this?
This MCP server enables AI agents (Claude, GPT, Cursor, and more) to:
- Create a store on 1ly.store
- Accept payments for your APIs/resources using 1ly as the payment layer
- Create paid links that any x402‑compatible agent can call and pay automatically
- List paid links on the 1ly marketplace for instant agent discovery
- Search for APIs and services on 1ly.store
- Get details about pricing, reviews, and usage
- Call paid APIs with automatic crypto payments (x402 protocol) securely
- Leave reviews after purchases (optional but recommended)
- Launch tokens on Bags.fm, trade solana tokens, and claim fees
Quick Start
Wallet path rule: wallet files must be located in your home directory (recommended) or /tmp. Paths outside those locations are rejected for security. ~/ is supported and expands to your home directory when running directly from the terminal. Important: Claude Desktop and Cursor config JSON do not expand ~. Always use absolute paths in JSON config files (e.g. /Users/yourname/.1ly/wallets/solana.json).
1. Install and Run
Option A: Raw Wallet (default)
# Solana wallet
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" npx @1ly/mcp-server
# OR Base/EVM wallet
ONELY_WALLET_EVM_KEY="~/.1ly/wallets/evm.key" npx @1ly/mcp-server
# OR both wallets
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" \
ONELY_WALLET_EVM_KEY="~/.1ly/wallets/evm.key" \
npx @1ly/mcp-server
Option B: Coinbase Agentic Wallet (Base only)
ONELY_WALLET_PROVIDER="coinbase" npx @1ly/mcp-server
> When using Agentic Wallet, you do not pass raw private keys. > Make sure the Coinbase Agentic Wallet app is running and authenticated.
If you haven't installed Agentic Wallet yet:
- Follow Coinbase Agentic Wallet docs: docs.cdp.coinbase.com/agentic-wallet/welcome
- Quick install:
npx skills add coinbase/agentic-wallet-skills
npx awal show
Option C: DCP Local (recommended for secure signing)
# Start DCP locally
dcp init
npx @dcprotocol/server
# Run MCP (auto-detects DCP at localhost:8420)
npx @1ly/mcp-server
Option D: DCP Remote (relay)
# Pairing outputs these values
DCP_VAULT_ID="vault_..." \
DCP_RELAY_URL="wss://relay.dcp.1ly.store" \
DCP_VAULT_HPKE_PUBLIC_KEY="base64..." \
npx @1ly/mcp-server
2. Verify Setup
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" npx @1ly/mcp-server --self-test
Configuration
HTTP Mode (Cloud MCP)
Run MCP over HTTP (for cloud hosting or mcp.1ly.store):
# HTTP transport
MCP_TRANSPORT=http npx @1ly/mcp-server
# Custom host/port
MCP_TRANSPORT=http MCP_HTTP_HOST=0.0.0.0 MCP_HTTP_PORT=3000 npx @1ly/mcp-server
Environment Variables
| Variable | Required | Description | |----------|----------|-------------| | ONELY_WALLET_SOLANA_KEY | No | Path to Solana keypair JSON file, or inline JSON array | | ONELY_WALLET_EVM_KEY | No | Path to EVM private key file, or inline hex key (with or without 0x) | | ONELY_API_KEY | No | API key for seller tools. Auto-loaded after 1ly_create_store | | ONELY_BUDGET_PER_CALL | No | Max USD per API call (default: 1.00) | | ONELY_BUDGET_DAILY | No | Daily USD spending limit (default: 50.00) | | ONELY_BUDGET_STATE_FILE | No | Path to local budget state file (default: ~/.1ly-mcp-budget.json) | | ONELY_NETWORK | No | Preferred network: solana or base (default: solana) | | ONELY_SOLANA_RPC_URL | No | Solana RPC URL (default: https://api.mainnet-beta.solana.com) | | ONELY_API_BASE | No | API base URL (default: https://1ly.store) | | ONELY_WALLET_PROVIDER | No | raw (default) or coinbase (Agentic Wallet, Base-only) | | ONELY_SOLANA_DRY_RUN | No | Set to 1 to simulate Solana transactions without broadcasting. No real payments. For testing only. | | MCP_TRANSPORT | No | http to run HTTP MCP server (default: stdio) | | MCP_HTTP_HOST | No | Host for HTTP MCP server (default: 0.0.0.0) | | MCP_HTTP_PORT | No | Port for HTTP MCP server (default: 3000) | | DCP_VAULT_ID | No | Vault ID for DCP relay (remote mode) | | DCP_RELAY_URL | No | Relay URL (e.g., wss://relay.dcp.1ly.store) | | DCP_RELAY_TOKEN | No | Pairing token for relay (if required) | | DCP_VAULT_HPKE_PUBLIC_KEY | No | Base64 HPKE public key for the vault (remote mode) | | DCP_RELAY_PLAINTEXT | No | Set to 1 to disable HPKE (dev only) |
A wallet is required only for paid calls. For free search/details you can run without a wallet. Use one of: ONELY_WALLET_SOLANA_KEY, ONELY_WALLET_EVM_KEY, or ONELY_WALLET_PROVIDER=coinbase.
Claude Desktop Configuration
Add to claude_desktop_config.json:
{
"mcpServers": {
"1ly": {
"command": "npx",
"args": ["@1ly/mcp-server"],
"env": {
"ONELY_WALLET_SOLANA_KEY": "/Users/yourname/.1ly/wallets/solana.json",
"ONELY_BUDGET_PER_CALL": "1.00",
"ONELY_BUDGET_DAILY": "50.00"
}
}
}
}
> Note: Replace /Users/yourname with your actual home directory. On Linux use /home/yourname. ~ does not work in Claude Desktop config.
Base/EVM wallet configuration
{
"mcpServers": {
"1ly": {
"command": "npx",
"args": ["@1ly/mcp-server"],
"env": {
"ONELY_WALLET_EVM_KEY": "/Users/yourname/.1ly/wallets/evm.key",
"ONELY_BUDGET_PER_CALL": "1.00",
"ONELY_BUDGET_DAILY": "50.00"
}
}
}
}
Cursor One-Click Install
[](https://cursor.com/en-US/install-mcp?name=1ly&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyJAMWx5L21jcC1zZXJ2ZXIiXSwiZW52Ijp7Ik9ORUxZX1dBTExFVF9TT0xBTkFfS0VZIjoiL2Fic29sdXRlL3BhdGgvdG8vc29sYW5hLmpzb24iLCJPTkVMWV9CVURHRVRfUEVSX0NBTEwiOiIxLjAwIiwiT05FTFlfQlVER0VUX0RBSUxZIjoiNTAuMDAifX0%3D)
Cursor uses .cursor/mcp.json. If you prefer manual setup, use:
{
"mcpServers": {
"1ly": {
"command": "npx",
"args": ["@1ly/mcp-server"],
"env": {
"ONELY_WALLET_SOLANA_KEY": "/absolute/path/to/solana.json",
"ONELY_BUDGET_PER_CALL": "1.00",
"ONELY_BUDGET_DAILY": "50.00"
}
}
}
}
Both Solana + Base wallets
{
"mcpServers": {
"1ly": {
"command": "npx",
"args": ["@1ly/mcp-server"],
"env": {
"ONELY_WALLET_SOLANA_KEY": "~/.1ly/wallets/solana.json",
"ONELY_WALLET_EVM_KEY": "~/.1ly/wallets/evm.key",
"ONELY_BUDGET_PER_CALL": "1.00",
"ONELY_BUDGET_DAILY": "50.00"
}
}
}
}
Tools Reference
Buyer Tools
Wallet required only for paid calls (1ly_call). Search/details work without a wallet.
1ly_search
Search for APIs on 1ly.store marketplace.
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | query | string | Yes | Search term (e.g., "weather api") | | type | string | No | Filter: "api" or "standard" | | maxPrice | number | No | Maximum price in USD | | minPrice | number | No | Minimum price in USD | | limit | number | No | Results to return (default: 10, max: 50) |
{
"query": "weather api",
"type": "api",
"maxPrice": 0.10
}
Returns:
{
"ok": true,
"data": {
"results": [
{
"title": "Real-time Weather",
"endpoint": "/api/link/joe/weather",
"price": "$0.010000000000000000 USDC",
"type": "api",
"seller": "Joe's APIs",
"stats": { "buyers": 150, "rating": "95%" }
}
],
"total": 42,
"showing": 10
}
}
1ly_get_details
Get detailed information about a specific API.
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | endpoint | string | Yes | API endpoint (e.g., "joe/weather") |
{
"endpoint": "joe/weather"
}
Returns (example):
{
"ok": true,
"data": {
"endpoint": "/api/link/joe/weather",
"fullUrl": "https://1ly.store/api/link/joe/weather",
"link": {
"title": "Real-time Weather",
"description": "Global weather data",
"slug": "weather",
"price": "0.010000000000000000",
"currency": "USDC"
},
"paymentInfo": { "networks": ["solana", "base"] },
"reviews": {
"stats": { "total": 50, "positive": 48 },
"recent": [{ "positive": true, "comment": "Fast!" }]
}
}
}
1ly_call
Call a paid API with automatic crypto payment.
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | endpoint | string | Yes | API endpoint (e.g., "joe/weather") | | method | string | No | HTTP method: GET, POST, PUT, DELETE, PATCH (default: GET) | | body | object | No | Request body for POST/PUT/PATCH | | headers | object | No | Additional headers |
{
"endpoint": "joe/weather",
"method": "POST",
"body": { "city": "NYC" }
}
Returns (example):
{
"ok": true,
"data": {
"data": {
"temp": 72,
"conditions": "sunny"
},
"_1ly": {
"purchaseId": "abc123",
"txHash": "tx_hash_here",
"reviewUrl": "https://1ly.store/api/review/abc123",
"reviewToken": "xyz789"
}
}
}
> Note: The _1ly object contains tokens needed for 1ly_review. Save these if you want to leave a review. > For free APIs, _1ly may be { "note": "No payment required (free API)" }.
Agentic Wallet (Base only):
- Set
ONELY_WALLET_PROVIDER=coinbase. - Ensure Coinbase Agentic Wallet is installed, running, and authenticated.
- Local private keys are not required.
1ly_review
Leave a review after a successful purchase.
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | purchaseId | string | Yes | From _1ly.purchaseId in 1ly_call response | | reviewToken | string | Yes | From _1ly.reviewToken in 1ly_call response | | positive | boolean | Yes | true for positive, false for negative | | comment | string | No | Review comment (max 500 chars) |
{
"purchaseId": "abc123",
"reviewToken": "xyz789",
"positive": true,
"comment": "Fast and accurate!"
}
Returns:
{
"ok": true,
"data": {
"success": true,
"reviewId": "rev_456",
"message": "Positive review submitted!"
}
}
Seller Tools (Accept Payments)
These tools require an API key. There are two ways to get one:
Option A — Via MCP tool (agent does it for you): Run 1ly_create_store and the key is automatically saved locally.
Option B — Via UI (no wallet needed):
- Go to 1ly.store and sign in
- Open Settings → enable Developer Mode
- Create an API key from the dashboard
- Set it as
ONELY_API_KEYin your MCP config
1ly_create_store
Create a new store and get an API key. Run this once. The API key is automatically saved locally.
> Note: Creating a store requires a raw wallet key (Solana or EVM). Agentic Wallet does not support store creation yet.
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | username | string | No | Store username (3-20 chars, auto-generated if omitted) | | displayName | string | No | Display name (max 50 chars) | | avatarUrl | string | No | Avatar URL |
{
"username": "myagent",
"displayName": "My Agent Store"
}
Returns (example):
{
"ok": true,
"data": {
"success": true,
"data": {
"store": {
"username": "myagent",
"displayName": "My Agent Store",
"storeUrl": "https://1ly.store/myagent",
"createdBy": "agent",
"avatarUrl": null
},
"apiKey": "1ly_live_...",
"apiKeyPrefix": "1ly_live_..."
},
"meta": {
"savedKeyPath": "~/Library/Application Support/1ly/onely_api_key.json"
}
}
}
> API Key Storage: > - macOS: ~/Library/Application Support/1ly/onely_api_key.json > - Linux: ~/.config/1ly/onely_api_key.json > - Windows: %APPDATA%\1ly\onely_api_key.json
1ly_create_link
Create a new API link (paid or free).
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | title | string | Yes | Link title (max 200 chars) | | url | string | Yes | Target URL (your API endpoint) | | price | string | No | Price in USD (e.g., "0.10"). Omit for free | | description | string | No | Description (max 500 chars) | | slug | string | No | Custom slug (3-64 chars, lowercase, hyphens allowed) | | currency | string | No | Always "USDC" | | isPublic | boolean | No | List publicly (default: true) | | isStealth | boolean | No | Hide from search (default: false) | | webhookUrl | string | No | Optional webhook URL for purchase events |
{
"title": "Premium Weather API",
"url": "https://api.example.com/weather",
"price": "0.05",
"description": "Real-time weather data",
"webhookUrl": "https://example.com/webhooks/1ly"
}
Returns (example):
{
"ok": true,
"data": {
"success": true,
"data": {
"id": "uuid-here",
"slug": "premium-weather-api",
"fullUrl": "https://1ly.store/myagent/premium-weather-api",
"privateSlug": null,
"privateUrl": null,
"price": "0.050000000000000000",
"currency": "USDC",
"linkType": "api",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
}
1ly_list_links
List all your API links.
No parameters.
{}
Returns (example):
{
"ok": true,
"data": {
"success": true,
"data": {
"links": [
{
"id": "uuid-here",
"url": "https://api.example.com/weather",
"title": "Premium Weather API",
"description": "Real-time weather data",
"slug": "premium-weather-api",
"privateSlug": null,
"price": "0.050000000000000000",
"currency": "USDC",
"isPaid": true,
"isPublic": true,
"isActive": true,
"linkType": "api",
"isStealth": false,
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
]
}
}
}
1ly_update_link
Update an existing API link.
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | id | string (UUID) | Yes | Link ID | | title | string | No | New title | | url | string | No | New target URL | | price | string | No | New price | | description | string | No | New description | | slug | string | No | New slug | | isPublic | boolean | No | Update visibility | | isStealth | boolean | No | Update stealth mode | | webhookUrl | string | No | Update webhook URL (set to null to clear) |
{
"id": "uuid-here",
"price": "0.10"
}
Returns (example):
{
"ok": true,
"data": {
"success": true,
"data": {
"id": "uuid-here",
"profileId": "profile-id",
"url": "https://api.example.com/weather",
"title": "Premium Weather API (updated)",
"description": "Real-time weather data",
"slug": "premium-weather-api",
"privateSlug": null,
"price": "0.100000000000000000",
"currenc
…
## Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [1lystore](https://github.com/1lystore)
- **Source:** [1lystore/1ly-mcp-server](https://github.com/1lystore/1ly-mcp-server)
- **License:** MIT
- **Homepage:** https://docs.1ly.store
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.7 Imported from the upstream source.