baselinker-mcp
baselinker-mcp
Un servidor MCP que pone toda la API de BaseLinker — pedidos, facturas, devoluciones, mensajería, CRM, almacenes, productos — delante de un cliente LLM como Claude Code, Claude Desktop o Cursor.
Completo. Los 179 métodos de API documentados, ninguno simulado.
Solo lectura hasta que se indique lo contrario. Los 92 métodos de escritura permanecen invisibles a menos que se active la opción; con la escritura desactivada, cada herramienta informa de
readOnlyHint: true.Local o remoto. stdio para un cliente en tu máquina, o Streamable HTTP con OAuth 2.1 (Keycloak) para un endpoint compartido en Internet.
"How many orders came in yesterday that aren't paid yet?"
"Which catalog products dropped below 5 in stock this week?"
"Pull the courier label for order 1234567 and tell me the tracking number."Contenidos
Related MCP server: TextQL MCP Server
Inicio rápido
Requisitos: Node.js 20 o superior, y un token de API de BaseLinker desde el panel de BaseLinker en Cuenta y otros → Mi cuenta → API.
git clone https://github.com/PiotrRaszkowski/baselinker-mcp.git
cd baselinker-mcp
npm install
npm run build
cp .env.example .env # paste your token into BASELINKER_API_TOKENEl token también puede venir directamente del entorno, que tiene prioridad sobre .env.
.env se lee desde la raíz del paquete, por lo que el servidor se inicia correctamente sin importar desde qué
directorio lo lance tu cliente MCP.
Conexión de un cliente
Claude Code
claude mcp add baselinker -e BASELINKER_API_TOKEN=your-token -- node /path/to/baselinker-mcp/dist/index.jsClaude Desktop, Cursor o cualquier configuración de mcpServers
{
"mcpServers": {
"baselinker": {
"command": "node",
"args": ["/path/to/baselinker-mcp/dist/index.js"],
"env": { "BASELINKER_API_TOKEN": "your-token" }
}
}
}Para un endpoint compartido accesible desde claude.ai, consulta Despliegue remoto.
Herramientas
179 herramientas separadas saturarían el contexto de un modelo y su capacidad para elegir entre ellas, así que
los métodos se agrupan de la misma manera que los agrupa la propia BaseLinker: diez herramientas, una por
categoría de API. Cada una acepta un nombre de method y un objeto parameters, y la descripción de cada
herramienta enumera los métodos que acepta junto con sus parámetros y sugerencias de paginación.
Los recuentos siguientes son lectura + escritura; los métodos de escritura solo aparecen cuando
BASELINKER_ALLOW_WRITES=true.
Herramienta | Alcance | Métodos |
| Pedidos, estados, pagos, diario, carritos PickPack | 15 + 22 |
| Facturas, archivos de factura, series de numeración, recibos | 6 + 6 |
| Devoluciones de pedidos, estados, motivos, pagos, diario | 8 + 13 |
| Mensajeros, paquetes, etiquetas, protocolos, documentos | 11 + 4 |
| Clientes y estados de CRM | 5 + 6 |
| Catálogos, almacenes, ubicaciones, categorías, fabricantes, proveedores, pagadores, etiquetas | 18 + 24 |
| Listas de productos, datos, existencias, precios, registros | 5 + 5 |
| Documentos de almacén, órdenes de compra, entregas de cumplimiento | 10 + 9 |
| Integraciones de Base Connect y crédito de contratistas | 3 + 2 |
| Almacenamientos externos (tiendas, mayoristas) | 6 + 1 |
87 + 92 |
Los parámetros se validan contra un esquema Zod por método antes de enviar nada, por lo que una llamada mal formada devuelve un error legible en lugar de un código de error de BaseLinker. Las claves desconocidas se reenvían sin tocar: BaseLinker añade parámetros sin previo aviso, y el servidor no se rompe cuando lo hace.
Métodos de escritura
Desactivados por defecto. Para activarlos:
BASELINKER_ALLOW_WRITES=trueMientras estén desactivados, los métodos de escritura no aparecen en la enumeración method de ninguna herramienta ni se pueden llamar.
Activarlos enciende los 92 a la vez: crear, actualizar y eliminar pedidos, productos,
existencias, precios, facturas, envíos, devoluciones y documentos de almacén. Algunos de ellos eliminan
registros; otros envían envíos reales de mensajería que cuestan dinero real. No hay control
por método, así que activa la escritura solo para un cliente en el que confíes y considera ejecutar una segunda instancia
de solo lectura para todo lo demás.
Comportamiento que conviene conocer
Límite de peticiones. BaseLinker permite 100 peticiones por minuto. Un limitador de ventana deslizante del lado del cliente lo hace cumplir: las llamadas excesivas esperan su turno en lugar de fallar.
Paginación. Las respuestas de listas están limitadas (normalmente 100 elementos para pedidos, facturas y
devoluciones; 1000 para productos de catálogo). La descripción de cada método incluye la sugerencia específica,
por ejemplo, getOrders requiere que date_confirmed_from se establezca en el date_confirmed del último pedido
devuelto más un segundo, mientras que getInventoryProductsList acepta una page basada en 1.
Descargas de archivos. getLabel, getProtocol, getCourierDocument, getInvoiceFile,
getInventoryDocumentFile y getInventoryFulfillmentDeliveryLabels devuelven el archivo como un
recurso incrustado de MCP con un tipo MIME real. Pasa el parámetro adicional save_to_path (gestionado
localmente, nunca enviado a BaseLinker) para decodificarlo en disco y obtener
{ saved_to, extension, bytes }. Esto solo tiene sentido a través de stdio, donde el servidor se ejecuta en tu
propia máquina; a través de HTTP se rechaza con un error explicativo.
Despliegue remoto (HTTP + OAuth)
Con --transport http, el servidor habla Streamable HTTP y actúa como un servidor de recursos
OAuth 2.0 (RFC 9728): publica metadatos de recursos
protegidos, responde a llamadas no autenticadas con 401 más un desafío WWW-Authenticate,
y verifica cada token de acceso como un JWT RS256 contra el JWKS de un reino de Keycloak. Los clientes
descubren el reino a partir de esos metadatos y se registran mediante el registro dinámico de clientes,
por lo que no se configura ningún ID de cliente ni secreto en ninguno de los dos lados.
node dist/index.js --transport http --host 0.0.0.0 --port 8000 --path /mcpRuta | Autenticación | Propósito |
| Bearer | MCP Streamable HTTP, sin estado: un servidor nuevo por petición |
| Bearer |
|
| público | Metadatos de recursos RFC 9728 |
| público | Sonda de actividad |
El transporte HTTP se niega a arrancar sin un reino de autenticación a menos que se desactive explícitamente
con BASELINKER_MCP_AUTH_DISABLED=true. Es deliberado: con la escritura activada, un endpoint
no autenticado entrega tu cuenta de BaseLinker a Internet.
deploy/ contiene la guía completa: configuración del reino de Keycloak, un servicio Compose endurecido
con etiquetas de Traefik, fragmentos de proxy inverso para Caddy y nginx, comandos de verificación y
un modelo de amenazas. La versión corta:
docker build -t baselinker-mcp:0.2.0 .
docker run -d --name baselinker-mcp -p 8000:8000 \
-e BASELINKER_API_TOKEN=your-token \
-e BASELINKER_MCP_AUTH_REALM_URL=https://keycloak.example.com/realms/myrealm \
-e BASELINKER_MCP_AUTH_BASE_URL=https://mcp.example.com \
baselinker-mcp:0.2.0Luego apunta un cliente a él:
claude mcp add --transport http baselinker https://mcp.example.com/mcpEn claude.ai es Configuración → Conectores → Añadir conector personalizado, URL
https://mcp.example.com/mcp, con ID de cliente y Secreto de cliente vacíos.
Una cosa que debe quedar clara antes de exponerlo: el token de BaseLinker es compartido. Todos los que puedan iniciar sesión en el reino operan en la misma cuenta de BaseLinker. Consulta SECURITY.md para el resto de los límites.
Referencia de configuración
Todo es una variable de entorno; .env en la raíz del paquete se carga automáticamente.
Siempre
Variable | Por defecto | Propósito |
| — | Obligatorio. Token de API de BaseLinker |
|
|
|
Transporte
Las banderas de línea de comandos tienen prioridad sobre estas.
Variable | Bandeja | Por defecto | Propósito |
|
|
|
|
|
|
| Dirección de enlace, solo HTTP |
|
|
| Puerto de enlace, solo HTTP |
|
|
| Ruta del endpoint, solo HTTP |
OAuth: obligatorio cuando el transporte es http
Variable | Por defecto | Propósito |
| — | Reino de Keycloak que emite tokens, p. ej. |
| — | URL pública de este servidor; con la ruta forma el identificador de recurso OAuth |
| sin definir | Audiencia(s) que debe llevar un token. Necesita un mapeador de audiencia en Keycloak; sin definir omite la comprobación |
|
| Ámbitos que debe llevar cada token. |
|
|
|
| sin definir | Protección contra rebinding de DNS: cabeceras |
| sin definir | Protección contra rebinding de DNS: cabeceras |
Las listas aceptan comas o espacios.
Solución de problemas
Síntoma | Causa |
| No hay token en el entorno ni en |
| BaseLinker rechazó el token: regenéralo en el panel |
Un método de escritura es "desconocido" |
|
Las llamadas se ralentizan bajo carga | El limitador de peticiones te ajusta a 100 peticiones/minuto. Funciona según lo previsto |
| Establece el reino y la URL base, o desactívalo con |
| El token no fue firmado por el reino configurado |
| Al token le falta |
Hay más casos específicos de OAuth en deploy/README.md.
Desarrollo
npm run dev # run from sources (tsx), stdio transport
npm run start:http # built server, HTTP transport
npm test # unit tests — fully offline, no live API calls
npm run check # format check + typecheck + tests, what CI runs
npm run smoke # manual smoke test against the live API (uses .env)
npm run inspect # MCP Inspector against the built serverCONTRIBUTING.md cubre cómo se compone el registro de herramientas y qué tener en cuenta al añadir un método.
Licencia
MIT. No está afiliado ni respaldado por BaseLinker.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with the Hostinger Ecommerce API to retrieve product information and update product descriptions through the Model Context Protocol.
- AlicenseNot gradedqualityCmaintenanceTranslates natural language to SQL/GraphQL queries and executes them, enabling AI agents to interact with databases through the Model Context Protocol.1Apache 2.0
- AlicenseBqualityDmaintenanceEnables natural language control of Teamleader Focus CRM, invoicing, and project management through the Model Context Protocol.4253MIT
- AlicenseAqualityDmaintenanceEnables interaction with FastSpring e-commerce platform for managing orders, subscriptions, and accounts through natural language using the Model Context Protocol.119MIT
Related MCP Connectors
Manage your Savanto store from your AI: catalog, content, prompts, and analytics, by chat.
Manage your Jumpseller store with AI. Products, orders, customers, and more.
Stop re-explaining yourself to Agents. Give it the right context, right when needed.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PiotrRaszkowski/baselinker-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server