1ly MCP
Permite que los agentes de IA descubran, lancen tokens, paguen y vendan APIs y recursos usando x402.
Documentación
@1ly/mcp-server
Servidor MCP para 1ly.store — Permite que los agentes de IA descubran, paguen y vendan APIs usando criptomonedas.
Descripción general
Este servidor MCP brinda a los agentes de IA la capacidad de:
- Comprar — Buscar, descubrir y pagar por APIs/recursos con pagos criptográficos automáticos (protocolo x402)
- Vender — Crear una tienda, publicar endpoints de API o recursos de pago, y aceptar pagos
- Lanzar Tokens — Crear y comerciar tokens en Bags.fm, y reclamar participaciones de comisiones
Redes compatibles: Solana (mainnet), Base (mainnet) Moneda de pago: USDC y $1LY (solo Solana)
¿Qué es esto?
Este servidor MCP permite que los agentes de IA (Claude, GPT, Cursor y otros) puedan:
- Crear una tienda en 1ly.store
- Aceptar pagos para tus APIs/recursos usando 1ly como capa de pago
- Crear enlaces de pago que cualquier agente compatible con x402 pueda llamar y pagar automáticamente
- Publicar enlaces de pago en el marketplace de 1ly para descubrimiento instantáneo por parte de agentes
- Buscar APIs y servicios en 1ly.store
- Obtener detalles sobre precios, reseñas y uso
- Llamar APIs de pago con pagos criptográficos automáticos (protocolo x402) de forma segura
- Dejar reseñas después de las compras (opcional pero recomendado)
- Lanzar tokens en Bags.fm, comerciar tokens de Solana y reclamar comisiones
Inicio rápido
Regla de ubicación de wallets: los archivos de wallet deben estar en tu directorio de inicio (recomendado) o en /tmp. Las rutas fuera de esas ubicaciones se rechazan por seguridad. ~/ es compatible y se expande a tu directorio de inicio cuando se ejecuta directamente desde la terminal.
Importante: Claude Desktop y Cursor no expanden ~ en el JSON de configuración. Usa siempre rutas absolutas en los archivos JSON de configuración (p. ej., /Users/yourname/.1ly/wallets/solana.json).
1. Instalar y ejecutar
Opción A: Wallet sin procesar (predeterminada)
# 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
Opción B: Coinbase Agentic Wallet (solo Base)
ONELY_WALLET_PROVIDER="coinbase" npx @1ly/mcp-server
Al usar Agentic Wallet, no debes pasar claves privadas sin procesar.
Asegúrate de que la aplicación Coinbase Agentic Wallet esté ejecutándose y autenticada.
Si aún no has instalado Agentic Wallet:
- Consulta la documentación de Coinbase Agentic Wallet: docs.cdp.coinbase.com/agentic-wallet/welcome
- Instalación rápida:
npx skills add coinbase/agentic-wallet-skills
npx awal show
Opción C: DCP Local (recomendado para firma segura)
# Start DCP locally
dcp init
npx @dcprotocol/server
# Run MCP (auto-detects DCP at localhost:8420)
npx @1ly/mcp-server
Opción D: DCP Remoto (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. Verificar la configuración
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" npx @1ly/mcp-server --self-test
Configuración
Modo HTTP (MCP en la nube)
Ejecuta MCP sobre HTTP (para alojamiento en la nube o 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
Variables de entorno
| Variable | Requerida | Descripción |
|---|---|---|
ONELY_WALLET_SOLANA_KEY | No | Ruta al archivo JSON de keypair de Solana, o array JSON en línea |
ONELY_WALLET_EVM_KEY | No | Ruta al archivo de clave privada EVM, o clave hex en línea (con o sin 0x) |
ONELY_API_KEY | No | Clave API para herramientas de vendedor. Se carga automáticamente después de 1ly_create_store |
ONELY_BUDGET_PER_CALL | No | Máximo USD por llamada de API (predeterminado: 1.00) |
ONELY_BUDGET_DAILY | No | Límite diario de gasto en USD (predeterminado: 50.00) |
ONELY_BUDGET_STATE_FILE | No | Ruta al archivo local de estado de presupuesto (predeterminado: ~/.1ly-mcp-budget.json) |
ONELY_NETWORK | No | Red preferida: solana o base (predeterminado: solana) |
ONELY_SOLANA_RPC_URL | No | URL RPC de Solana (predeterminado: https://api.mainnet-beta.solana.com) |
ONELY_API_BASE | No | URL base de la API (predeterminado: https://1ly.store) |
ONELY_WALLET_PROVIDER | No | raw (predeterminado) o coinbase (Agentic Wallet, solo Base) |
ONELY_SOLANA_DRY_RUN | No | Establécelo en 1 para simular transacciones de Solana sin transmitirlas. Sin pagos reales. Solo para pruebas. |
MCP_TRANSPORT | No | http para ejecutar el servidor MCP HTTP (predeterminado: stdio) |
MCP_HTTP_HOST | No | Host para el servidor MCP HTTP (predeterminado: 0.0.0.0) |
MCP_HTTP_PORT | No | Puerto para el servidor MCP HTTP (predeterminado: 3000) |
DCP_VAULT_ID | No | ID de vault para relay DCP (modo remoto) |
DCP_RELAY_URL | No | URL del relay (p. ej., wss://relay.dcp.1ly.store) |
DCP_RELAY_TOKEN | No | Token de emparejamiento para el relay (si se requiere) |
DCP_VAULT_HPKE_PUBLIC_KEY | No | Clave pública HPKE en Base64 para el vault (modo remoto) |
DCP_RELAY_PLAINTEXT | No | Establécelo en 1 para deshabilitar HPKE (solo desarrollo) |
Se requiere una wallet solo para llamadas de pago. Para búsquedas/detalles gratuitos puedes ejecutarlo sin wallet.
Usa una de: ONELY_WALLET_SOLANA_KEY, ONELY_WALLET_EVM_KEY o ONELY_WALLET_PROVIDER=coinbase.
Configuración de Claude Desktop
Agrega a 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"
}
}
}
}
Nota: Reemplaza
/Users/yournamecon tu directorio de inicio real. En Linux usa/home/yourname.~no funciona en la configuración de Claude Desktop.
Configuración de wallet Base/EVM
{
"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"
}
}
}
}
Instalación con un clic en Cursor
Cursor usa .cursor/mcp.json. Si prefieres la configuración manual, usa:
{
"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"
}
}
}
}
Wallets de Solana + Base
{
"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"
}
}
}
}
Referencia de herramientas
Herramientas de comprador
Se requiere wallet solo para llamadas de pago (1ly_call). La búsqueda y los detalles funcionan sin wallet.
1ly_search
Busca APIs en el marketplace de 1ly.store.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
query | string | Sí | Término de búsqueda (p. ej., "weather api") |
type | string | No | Filtro: "api" o "standard" |
maxPrice | number | No | Precio máximo en USD |
minPrice | number | No | Precio mínimo en USD |
limit | number | No | Resultados a devolver (predeterminado: 10, máximo: 50) |
{
"query": "weather api",
"type": "api",
"maxPrice": 0.10
}
Devuelve:
{
"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
Obtén información detallada sobre una API específica.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
endpoint | string | Sí | Endpoint de la API (p. ej., "joe/weather") |
{
"endpoint": "joe/weather"
}
Devuelve (ejemplo):
{
"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
Llama a una API de pago con pago criptográfico automático.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
endpoint | string | Sí | Endpoint de la API (p. ej., "joe/weather") |
method | string | No | Método HTTP: GET, POST, PUT, DELETE, PATCH (predeterminado: GET) |
body | object | No | Cuerpo de la solicitud para POST/PUT/PATCH |
headers | object | No | Encabezados adicionales |
{
"endpoint": "joe/weather",
"method": "POST",
"body": { "city": "NYC" }
}
Devuelve (ejemplo):
{
"ok": true,
"data": {
"data": {
"temp": 72,
"conditions": "sunny"
},
"_1ly": {
"purchaseId": "abc123",
"txHash": "tx_hash_here",
"reviewUrl": "https://1ly.store/api/review/abc123",
"reviewToken": "xyz789"
}
}
}
Nota: El objeto
_1lycontiene los tokens necesarios para1ly_review. Guárdalos si deseas dejar una reseña.
Para APIs gratuitas,_1lypuede ser{ "note": "No payment required (free API)" }.
Agentic Wallet (solo Base):
- Establece
ONELY_WALLET_PROVIDER=coinbase. - Asegúrate de que Coinbase Agentic Wallet esté instalado, ejecutándose y autenticado.
- No se requieren claves privadas locales.
1ly_review
Deja una reseña después de una compra exitosa.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
purchaseId | string | Sí | De _1ly.purchaseId en la respuesta de 1ly_call |
reviewToken | string | Sí | De _1ly.reviewToken en la respuesta de 1ly_call |
positive | boolean | Sí | true para positiva, false para negativa |
comment | string | No | Comentario de la reseña (máx. 500 caracteres) |
{
"purchaseId": "abc123",
"reviewToken": "xyz789",
"positive": true,
"comment": "Fast and accurate!"
}
Devuelve:
{
"ok": true,
"data": {
"success": true,
"reviewId": "rev_456",
"message": "Positive review submitted!"
}
}
Herramientas de vendedor (aceptar pagos)
Estas herramientas requieren una clave API. Hay dos formas de obtener una:
Opción A — Mediante la herramienta MCP (el agente lo hace por ti):
Ejecuta 1ly_create_store y la clave se guarda automáticamente de forma local.
Opción B — Mediante la interfaz de usuario (sin necesidad de wallet):
- Ve a 1ly.store e inicia sesión
- Abre Configuración → activa el Modo Desarrollador
- Crea una clave API desde el panel
- Establécelo como
ONELY_API_KEYen tu configuración de MCP
1ly_create_store
Crea una nueva tienda y obtén una clave API. Ejecuta esto una sola vez. La clave API se guarda automáticamente de forma local.
Nota: Crear una tienda requiere una clave de wallet sin procesar (Solana o EVM). Agentic Wallet aún no admite la creación de tiendas.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | No | Nombre de usuario de la tienda (3-20 caracteres, se genera automáticamente si se omite) |
displayName | string | No | Nombre para mostrar (máx. 50 caracteres) |
avatarUrl | string | No | URL del avatar |
{
"username": "myagent",
"displayName": "My Agent Store"
}
Devuelve (ejemplo):
{
"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"
}
}
}
Almacenamiento de la clave API:
- 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
Crea un nuevo enlace de API (de pago o gratuito).
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
title | string | Sí | Título del enlace (máx. 200 caracteres) |
url | string | Sí | URL de destino (tu endpoint de API) |
price | string | No | Precio en USD (p. ej., "0.10"). Omítelo para enlaces gratuitos |
description | string | No | Descripción (máx. 500 caracteres) |
slug | string | No | Slug personalizado (3-64 caracteres, minúsculas, se permiten guiones) |
currency | string | No | Siempre "USDC" |
isPublic | boolean | No | Publicar públicamente (predeterminado: true) |
isStealth | boolean | No | Ocultar de la búsqueda (predeterminado: false) |
webhookUrl | string | No | URL de webhook opcional para eventos de compra |
{
"title": "Premium Weather API",
"url": "https://api.example.com/weather",
"price": "0.05",
"description": "Real-time weather data",
"webhookUrl": "https://example.com/webhooks/1ly"
}
Devuelve (ejemplo):
{
"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
Lista todos tus enlaces de API.
Sin parámetros.
{}
Devuelve (ejemplo):
{
"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
Actualiza un enlace de API existente.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string (UUID) | Sí | ID del enlace |
title | string | No | Nuevo título |
url | string | No | Nueva URL de destino |
price | string | No | Nuevo precio |
description | string | No | Nueva descripción |
slug | string | No | Nuevo slug |
isPublic | boolean | No | Actualizar visibilidad |
isStealth | boolean | No | Actualizar modo sigiloso |
webhookUrl | string | No | Actualizar URL de webhook (establécelo en null para borrarlo) |
{
"id": "uuid-here",
"price": "0.10"
}
Devuelve (ejemplo):
{
"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",
"currency": "USDC",
"isPaid": true,
"isPublic": true,
"isActive": true,
"linkType": "api",
"isStealth": false,
"displayOrder": 1,
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
}
}
1ly_delete_link
Elimina un enlace de API.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string (UUID) | Sí | ID del enlace a eliminar |
{
"id": "uuid-here"
}
Devuelve (ejemplo):
{
"ok": true,
"data": {
"success": true
}
}
1ly_get_stats
Obtén estadísticas de la tienda o del enlace.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
period | string | No | Período de tiempo: "7d", "30d", "90d", "all" |
linkId | string (UUID) | No | ID de enlace específico (omítelo para estadísticas de toda la tienda) |
{
"period": "30d"
}
Devuelve (ejemplo):
{
"ok": true,
"data": {
"success": true,
"data": {
"period": "30d",
"views": 0,
"buyers": 9,
"revenue": "0.081000000000000009"
}
}
}
1ly_list_keys
Lista todas las claves API de tu tienda.
Sin parámetros.
Devuelve (ejemplo):
{
"ok": true,
"data": {
"success": true,
"data": {
"keys": [
{
"id": "uuid-here",
"name": "Agent Key",
"keyPrefix": "1ly_live_...",
"isActive": true,
"lastUsedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z"
}
]
}
}
}
1ly_create_key
Crea una nueva clave API.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | No | Nombre de la clave (máx. 64 caracteres) |
{
"name": "production-key"
}
Devuelve (ejemplo cuando se alcanza el límite de claves):
{
"ok": false,
"error": {
"message": "Create key failed | status=400 | ... | body={\"success\":false,\"error\":{\"code\":\"LIMIT_REACHED\",\"message\":\"Maximum number of API keys reached\"}}"
}
}
1ly_revoke_key
Revoca una clave API.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string (UUID) | Sí | ID de la clave a revocar |
{
"id": "uuid-here"
}
Devuelve (ejemplo):
{
"ok": true,
"data": {
"success": true,
"data": {
"id": "uuid-here",
"revoked": true
}
}
}
1ly_update_profile
Actualiza los campos básicos del perfil.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | No | Nuevo nombre de usuario (minúsculas + guiones bajos) |
displayName | string | No | Nombre público para mostrar |
bio | string | No | Biografía corta (máx. 160 caracteres) |
{
"displayName": "My Store",
"bio": "We build paid APIs for agents."
}
1ly_update_socials
Reemplaza la lista de redes sociales (hasta 10).
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
socials | array | Sí | Enlaces de redes sociales |
{
"socials": [
{ "type": "x", "url": "https://x.com/1ly_store", "displayOrder": 0, "isVisible": true },
{ "type": "website", "url": "https://1ly.store", "displayOrder": 1 }
]
}
1ly_update_avatar
Actualiza el avatar de la tienda usando una URL pública o una imagen en base64.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
avatarUrl | string | No | URL pública de la imagen |
imageBase64 | string | No | Imagen codificada en base64 (máx. 5MB decodificada) |
mimeType | string | No | image/png, image/jpeg, image/webp, image/gif |
filename | string | No | Nombre de archivo opcional |
{
"avatarUrl": "https://example.com/avatar.png"
}
1ly_withdraw
Solicita un retiro (solo Solana).
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | string | Sí | Cantidad en USDC (mín. 0.1) |
walletAddress | string | Sí | Dirección de billetera Solana |
{
"amount": "1.25",
"walletAddress": "7GmjjDitbCwW77dZmJko3pBDWhEh12soGNLR7zwAkf6M"
}
1ly_list_withdrawals
Lista los retiros recientes.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
limit | number | No | Máx. de elementos (por defecto 25, máx. 100) |
cursor | string | No | Cursor de paginación |
{
"limit": 10
}
Herramientas de Token (Bags.fm)
Estas herramientas requieren una billetera Solana (ONELY_WALLET_SOLANA_KEY)
1ly_launch_token
Lanza un token en Bags.fm (flujo v2).
Campos clave:
name,symbol(requeridos)description(opcional; por defectoToken launched via 1ly.store)imageUrloimageBase64(requerido; al menos uno)twitter,website,telegram(URLs opcionales)initialBuySol(opcional; por defecto0)feeClaimers(array opcional de{ provider, username, bps })share_fee(opcional, bps). Añade un reclamador de tarifa de marketplace 1ly en el backend. Si se establece, la participación del creador se reduce automáticamente.
Validación (compatible con Bags.fm):
namemáx. 32 caracteressymbolmáx. 10 caracteresdescriptionmáx. 1000 caracteresimageBase64debe ser base64 crudo (sin prefijo de URL de datos) y <= 15MB decodificado
La lista de proveedores feeClaimers es estricta: twitter, github, kick, tiktok. El resto después de los reclamadores de tarifa (y share_fee, si se establece) se asigna a la billetera del creador.
bps = puntos base: 10000 = 100%, 1000 = 10%, 100 = 1%.
Ejemplo: 90% a un reclamador de GitHub + 1% share_fee:
{
"feeClaimers": [{ "provider": "github", "username": "abc", "bps": 9000 }],
"share_fee": 100
}
1ly_list_tokens
Lista los tokens lanzados por una billetera (listado público por dirección de billetera, límite por defecto 10).
Si se omite creatorWallet, la herramienta usa la billetera Solana configurada.
Parámetros:
creatorWallet(opcional) — dirección de billetera para listar tokenslimit(opcional) — máx. de resultados (por defecto 10, máx. 200)
1ly_claim_fees
Reclama la participación de tarifa de Bags para un token. Si no hay nada reclamable, el backend devuelve un error como Nothing to claim.
Parámetros:
tokenMint(requerido) — dirección de mint del tokenwallet(opcional) — dirección de billetera para reclamar (por defecto la billetera configurada)
1ly_trade_token
Intercambia tokens en Bags usando el flujo de cotización + swap de Bags.
Parámetros:
inputMint(requerido) — mint del token de entrada (ej., SOL =So11111111111111111111111111111111111111112)outputMint(requerido) — mint del token de salidaamount(requerido) — cantidad en unidades más pequeñas (cadena de entero positivo)slippageMode(opcional) —autoomanual(por defectoauto)slippageBps(opcional) — requerido sislippageMode=manual, rango 0-10000
1ly_trade_quote
Obtén una cotización de intercambio de Bags sin ejecutar un swap.
Parámetros:
inputMint(requerido) — mint del token de entradaoutputMint(requerido) — mint del token de salidaamount(requerido) — cantidad en unidades más pequeñas (cadena de entero positivo)slippageMode(opcional) —autoomanual(por defectoauto)slippageBps(opcional) — requerido sislippageMode=manual, rango 0-10000
Flujos Comunes
Flujo 1: Pagar por una API
1. 1ly_search({ "query": "weather api" })
2. 1ly_get_details({ "endpoint": "joe/weather" })
3. 1ly_call({ "endpoint": "joe/weather", "body": { "city": "NYC" } })
4. 1ly_review({ "purchaseId": "...", "reviewToken": "...", "positive": true })
Flujo 2: Crear una Tienda y Vender APIs. Usa 1ly como capa de pago predeterminada para agentes
1. 1ly_create_store({ "username": "mystore", "displayName": "My Store" })
2. 1ly_create_link({ "title": "My API", "url": "https://api.example.com", "price": "0.10", "webhookUrl": "https://example.com/webhooks/1ly" })
3. 1ly_get_stats({ "period": "7d" })
Flujo 3: Gestionar Enlaces Existentes
1. 1ly_list_links({})
2. 1ly_update_link({ "id": "...", "price": "0.20" })
3. 1ly_delete_link({ "id": "..." })
Flujo 4: Actualizar Perfil + Redes Sociales
1. 1ly_update_profile({ "displayName": "My Store", "bio": "We build paid APIs." })
2. 1ly_update_socials({ "socials": [{ "type": "x", "url": "https://x.com/1ly_store" }] })
3. 1ly_update_avatar({ "avatarUrl": "https://example.com/avatar.png" })
Flujo 5: Retirar Fondos
1. 1ly_withdraw({ "amount": "1.25", "walletAddress": "7GmjjDitbCwW77dZmJko3pBDWhEh12soGNLR7zwAkf6M" })
2. 1ly_list_withdrawals({ "limit": 10 })
Flujo 6: Lanzar + Intercambiar + Reclamar (Bags)
1. 1ly_launch_token({ "name": "BLANK", "symbol": "BLANK", "share_fee": 100, "feeClaimers": [{ "provider": "twitter", "username": "x_username", "bps": 9000 }] })
2. 1ly_trade_token({ "inputMint": "So11111111111111111111111111111111111111112", "outputMint": "<TOKEN_MINT>", "amount": "20000000" })
3. 1ly_claim_fees({ "tokenMint": "<TOKEN_MINT>" })
Configuración de Billetera
Solana
Crea un nuevo par de claves:
mkdir -p ~/.1ly/wallets
solana-keygen new -o ~/.1ly/wallets/solana.json
Fondéalo con USDC en la red principal de Solana.
EVM (Base)
Exporta tu clave privada o crea un nuevo par de claves:
mkdir -p ~/.1ly/wallets
echo "0xYOUR_PRIVATE_KEY" > ~/.1ly/wallets/evm.key
Fondéalo con USDC en la red principal de Base.
Manejo de Errores
Todas las respuestas siguen esta estructura:
Éxito:
{
"ok": true,
"data": { ... }
}
Error:
{
"ok": false,
"error": {
"message": "Error description",
"code": "MACHINE_READABLE_CODE",
"action": "recommended_next_step"
}
}
Errores Comunes
| Error | Código | Causa | Solución |
|---|---|---|---|
Missing wallet config | MISSING_WALLET_CONFIG | No se ha establecido la variable de entorno de billetera | Establece ONELY_WALLET_SOLANA_KEY, ONELY_WALLET_EVM_KEY o ONELY_WALLET_PROVIDER=coinbase |
Agentic Wallet not running | AGENTIC_WALLET_NOT_RUNNING | La aplicación de billetera no está en ejecución o no está autenticada | Abre la aplicación Agentic Wallet e inicia sesión (npx awal show) |
Agentic Wallet Base-only | AGENTIC_WALLET_BASE_ONLY | La API requiere pago en Solana | Usa una billetera Solana cruda o un endpoint compatible con Base |
Agentic Wallet store creation | AGENTIC_WALLET_STORE_CREATION | 1ly_create_store requiere firma de billetera cruda | Usa claves de billetera Solana/EVM crudas para la creación de tiendas |
Missing ONELY_API_KEY | MISSING_API_KEY | Se llamó a una herramienta de vendedor sin clave de API | Ejecuta 1ly_create_store primero |
Price exceeds per-call budget | PRICE_EXCEEDS_PER_CALL_BUDGET | La API cuesta más que el límite | Aumenta ONELY_BUDGET_PER_CALL |
Daily budget exceeded | DAILY_BUDGET_EXCEEDED | Se gastó más que el límite diario | Espera hasta mañana o aumenta ONELY_BUDGET_DAILY |
Insufficient funds | INSUFFICIENT_FUNDS | El saldo de la billetera es demasiado bajo | Añade USDC a tu billetera |
Seguridad
- Las claves de billetera permanecen locales — Nunca se envían a los servidores de 1ly
- Límites de presupuesto — Evitan gastos descontrolados
- Código abierto — Audita el código: github.com/1lystore/1ly-mcp-server
Enlaces
- 1ly.store — Marketplace
- Documentación
- Protocolo x402
Licencia
MIT