Skip to content

Inicio rápido del servidor MCP

El servidor MCP (Model Context Protocol) de Owning permite a cualquier cliente de IA compatible con MCP — Claude Desktop, GPT, Cursor, o cualquier agente personalizado — buscar, navegar, crear y gestionar anuncios en Owning.pro sin escribir código HTTP. Envuelve la API REST en 10 herramientas simples expuestas sobre JSON-RPC 2.0.

¿Qué es el servidor MCP?

El servidor MCP es una capa fina que traduce las peticiones del protocolo MCP en llamadas HTTP a la API REST de Owning. En lugar de construir peticiones HTTP con cabeceras, URLs y cuerpos JSON, un agente de IA simplemente llama a una herramienta como search_listings o create_listing con argumentos estructurados.

¿Por qué usar el servidor MCP?

Más simple para agenteslas herramientas tienen parámetros tipados y descripciones, por lo que el LLM sabe exactamente qué pasar.
Sin boilerplate HTTPel servidor gestiona las cabeceras de autenticación, la construcción de URLs y el análisis de respuestas.
Resultados estructuradoslos resultados se devuelven como contenido de texto (JSON o Markdown) listo para que el LLM los procese.

Arquitectura

MCP Client (Claude Desktop, GPT, Cursor, custom agent)
  |  MCP protocol (JSON-RPC 2.0 over HTTP)
  v
MCP Server (https://mcp.owning.pro)
  |  HTTP calls to api.owning.pro
  v
Owning API (https://api.owning.pro)

Conexión al servidor MCP

URL del servidor

EndpointMétodoPropósito
https://mcp.owning.pro/mcpPOSTPetición-respuesta JSON-RPC 2.0
https://mcp.owning.pro/mcp/sseGETKeepalive SSE (para clientes que esperan SSE)
https://mcp.owning.pro/healthGETHealth check + lista de herramientas

Protocolo

El servidor implementa el transporte Streamable HTTP de MCP (spec 2025-03-26). Cada petición POST /mcp es un ciclo completo de petición-respuesta JSON-RPC 2.0. No se necesita conexión persistente.

Autenticación

Pasa tu API key de Owning como un Bearer token en la cabecera Authorization:

Authorization: Bearer own_aBcD123eFgH456iJkL789mNoP012qRsT345uVwX678yZ
  • Herramientas de lectura (search, get, categories, asset types) — API key opcional. Sin key, las peticiones son anónimas (sujetas a límites públicos: 100 req/min por IP).
  • Herramientas de escritura (create, upload, publish, manage) — API key requerida con permiso write.
  • contact_seller — API key opcional (endpoint público, limitado por IP).

Paso 1: Inicializar

curl -X POST https://mcp.owning.pro/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {}
  }'

# Response:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2024-11-05",
    "capabilities": { "tools": {} },
    "serverInfo": { "name": "owning-mcp", "version": "0.2.0" }
  }
}

Paso 2: Listar herramientas disponibles

curl -X POST https://mcp.owning.pro/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
  }'

# Response: array of 10 tool definitions with name, description, and inputSchema

Paso 3: Llamar a una herramienta

curl -X POST https://mcp.owning.pro/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer own_aBcD123eFgH..." \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search_listings",
      "arguments": {
        "query": "bavaria",
        "category": "boats",
        "limit": 5
      }
    }
  }'

# Response:
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [{ "type": "text", "text": "{ \"results\": [...], \"pagination\": {...} }" }]
  }
}

Herramientas de lectura (5)

Herramientas de solo lectura para buscar y navegar anuncios. La API key es opcional — sin ella, las peticiones son anónimas.

1. search_listings

Busca anuncios con filtros. Devuelve anuncios coincidentes con título, precio, ubicación, imágenes y atributos clave.

Parámetros

ParámetroTipoRequeridoPor defectoDescripción
querystringNoFull-text search across title, description, tags, and attributes
categorystringNoCategory slug (e.g. boats, cars)
brandstringNoFilter by brand (passed as attr[brand])
min_pricenumberNoMinimum price filter
max_pricenumberNoMaximum price filter
locationstringNoFilter by location (country or city)
limitintegerNo20Results per page (max 100)
offsetintegerNo0Pagination offset
# Example: search for Bavaria boats under 150k
{
  "name": "search_listings",
  "arguments": {
    "query": "bavaria",
    "category": "boats",
    "max_price": 150000,
    "limit": 10
  }
}

2. get_listing

Obtiene los detalles completos de un anuncio específico por ID o slug. Devuelve toda la información disponible incluyendo descripción, especificaciones, todas las imágenes, precio, ubicación y atributos.

Parámetros

ParámetroTipoRequeridoDescripción
id_or_slugstringYesListing ID (ULID) or slug (e.g. azimut-95-magellano-2024)

3. get_listing_markdown

Obtiene un anuncio en formato Markdown — optimizado para agentes y consumo de IA. Incluye todos los datos del anuncio (título, precio, descripción, especificaciones, imágenes, atributos) en un documento Markdown estructurado y legible con frontmatter YAML.

Parámetros

ParámetroTipoRequeridoDescripción
id_or_slugstringYesListing ID (ULID) or slug
# Example response content:
---
title: "Lagoon 400 S2"
price: 295000
currency: "EUR"
condition: "good"
---

## Description
Gebrauchtboot; Baujahr 2016

## Specifications
- **Brand**: lagoon
- **Year**: 2016
- **Length**: 11.97 m

4. list_categories

Lista todas las categorías disponibles en Owning.pro con sus conteos de anuncios. Devuelve un árbol jerárquico de categorías (padres y subcategorías) con nombres slug y conteos. Sin parámetros requeridos.

5. get_asset_type

Obtiene la plantilla de atributos para una categoría específica. Muestra qué campos/atributos están disponibles para los anuncios en esa categoría (ej. brand, model, year, length para barcos).

Parámetros

ParámetroTipoRequeridoDescripción
categorystringYesCategory slug / asset type ID (e.g. boats, cars)

Herramientas de escritura (5)

Herramientas de escritura para crear, publicar y gestionar anuncios. Todas requieren API key con permiso write, excepto contact_seller que es pública.

6. create_listing

Crea un nuevo anuncio en Owning.pro. El anuncio se crea en estado draft — usa publish_listing para hacerlo visible públicamente. Límite: 10 anuncios por día por usuario.

Parámetros

ParámetroTipoRequeridoDescripción
titlestringYes5–120 characters
descriptionstringYes20–5000 characters
category_idstringYesCategory ID (use list_categories to find available)
conditionenumYesnew, like_new, good, fair, poor, refurbished
typeenumNosale (default) or wanted
priceobjectYes{ amount, currency?, negotiable? } — currency defaults to EUR
locationobjectYes{ country, city, postal_code?, lat?, lng?, shipping? }
imagesarrayNoUp to 10: [{ url, alt? }]}. Use upload_image first.
attributesobjectNoCategory-specific attributes (use get_asset_type to discover)
tagsarrayNoUp to 10 tags, each 1–50 characters
{
  "name": "create_listing",
  "arguments": {
    "title": "Apple iPhone 13 128GB Blue",
    "description": "Apple iPhone 13 in blue, 128GB. Good condition, battery health 89%.",
    "category_id": "electronics",
    "condition": "good",
    "price": { "amount": 399, "currency": "EUR", "negotiable": true },
    "location": { "country": "ES", "city": "Madrid", "shipping": true },
    "tags": ["iphone", "apple", "smartphone"]
  }
}

7. upload_image

Sube una imagen a Owning.pro. Pasa la imagen como datos base64. Si se proporciona listing_id, la imagen se adjunta a ese anuncio (requiere propiedad). Si se omite, una subida independiente devuelve una URL para usar en create_listing. Límite: 50 imágenes por día. Formatos soportados: jpg, png, webp, heic, heif, avif. Tamaño máximo: 10 MB.

Parámetros

ParámetroTipoRequeridoDescripción
image_datastringYesBase64-encoded image data (without data: prefix)
filenamestringYesOriginal filename including extension (e.g. photo.jpg)
listing_idstringNoListing ID or slug. If provided, attaches to that listing.

8. publish_listing

Publica un anuncio borrador, haciéndolo visible públicamente en Owning.pro. Mueve el anuncio de draft a active. Solo el propietario del anuncio puede publicarlo.

Parámetros

ParámetroTipoRequeridoDescripción
id_or_slugstringYesListing ID or slug of the draft listing to publish

9. contact_seller

Contacta al vendedor de un anuncio enviando un mensaje. El email del vendedor nunca se expone — la API retransmite el mensaje por email y el vendedor puede responder a tu email. No requiere API key (endpoint público). Límite: 5 contactos por hora por IP.

Parámetros

ParámetroTipoRequeridoDescripción
id_or_slugstringYesListing ID or slug
namestringYesYour name (shown to the seller, 1–100 chars)
emailstringYesYour email (the seller can reply to this)
messagestringYesYour message (1–2000 characters)

10. manage_listing

Gestiona un anuncio existente — actualiza sus campos, cambia su estado, o elimínalo. Solo el propietario del anuncio puede realizar estas acciones. Soporta tres acciones:

Parámetros

ParámetroTipoRequeridoDescripción
id_or_slugstringYesListing ID or slug to manage
actionenumYesupdate, change_status, or delete
statusenumFor change_statusactive, paused, or sold
title, description, price, etc.variousFor updateAny listing field to update (see create_listing for the full list)
# Example: pause a listing
{
  "name": "manage_listing",
  "arguments": {
    "id_or_slug": "apple-iphone-13-128gb-blue",
    "action": "change_status",
    "status": "paused"
  }
}

# Example: update the price
{
  "name": "manage_listing",
  "arguments": {
    "id_or_slug": "apple-iphone-13-128gb-blue",
    "action": "update",
    "price": { "amount": 350, "currency": "EUR", "negotiable": false }
  }
}

# Example: delete a listing
{
  "name": "manage_listing",
  "arguments": {
    "id_or_slug": "apple-iphone-13-128gb-blue",
    "action": "delete"
  }
}

Límites de uso

El servidor MCP reenvía todas las peticiones a la API REST de Owning, por lo que aplican los límites de la API:

HerramientaLímiteÁmbito
Read tools (no API key)100 req/minper IP
Read tools (with API key)300 req/minper key
create_listing10 req/dayper user
upload_image50 req/dayper user
contact_seller5 req/hourper IP

Gestión de errores

Los errores de herramientas se devuelven como resultados MCP con isError: true y un mensaje de error en el contenido:

{
  "jsonrpc": "2.0",
  "id": 4,
  "result": {
    "content": [{ "type": "text", "text": "Search failed: Rate limit exceeded (status 429)" }],
    "isError": true
  }
}

Los argumentos inválidos (fallos de validación de esquema) también se devuelven como resultados isError con una descripción de qué campos fallaron.

Health check

curl https://mcp.owning.pro/health

# Response:
{
  "status": "ok",
  "service": "owning-mcp",
  "version": "0.2.0",
  "timestamp": "2026-07-11T16:17:44.333Z",
  "apiBaseUrl": "https://api.owning.pro",
  "tools": [
    "search_listings", "get_listing", "get_listing_markdown",
    "list_categories", "get_asset_type",
    "create_listing", "upload_image", "publish_listing",
    "contact_seller", "manage_listing"
  ]
}
¿Listo para construir?

Consulta el ejemplo de integración del servidor MCP para un recorrido completo end-to-end en Python y JavaScript.

Servidor MCP — Owning.pro | Owning Docs