Lulu Print MCP Server
Servidor MCP de impresión Lulu
Un servidor de Protocolo de contexto de modelo (MCP) que proporciona integración con Lulu Print API para servicios de impresión a pedido a través de Claude Desktop y otros clientes MCP.
Características
📚 Gestión de trabajos de impresión
Crear y administrar trabajos de impresión para libros y otros materiales impresos
Seguimiento del estado del pedido desde su creación hasta la entrega
Calcular los costes antes de realizar pedidos
Admite múltiples líneas de artículos por pedido
📄 Validación de archivos
Validar los archivos PDF interiores antes de imprimir
Validar archivos PDF de portada con verificación de dimensiones
Calcular las dimensiones de la cubierta requeridas según el número de páginas
Obtenga el estado de validación detallado y los informes de errores
💰 Cálculo de costos
Calcular los costos del producto según las especificaciones
Incluir cálculos de envío e impuestos
Soporte para diferentes niveles de envío (CORREO a EXPRESS)
Obtenga desgloses detallados de costos
🚚 Gestión de envíos
Recuperar opciones de envío disponibles por destino
Soporte para envíos internacionales
Diferentes niveles de servicio desde correo estándar hasta entrega exprés
🔔 Webhooks
Suscribirse a los cambios de estado del trabajo de impresión
Administrar puntos finales de webhook
Prueba de entrega de webhook
Ver el historial de envío de webhooks
Related MCP server: OpenPrints MCP
Instalación
Instalación global
# Install the package globally
npm install -g @devlimelabs/lulu-print-mcp
# Start the server
lulu-print-mcpDesarrollo local
# Clone the repository
git clone https://github.com/devlimelabs/lulu-print-mcp.git
cd lulu-print-mcp
# Install dependencies
npm install
# Set up development environment
npm run setup:dev
# Start the development server
npm run devInstalación de Docker
# Build and run with Docker Compose
docker-compose up -d
# Or build and run the Docker image directly
docker build -t lulu-print-mcp .
docker run -p 3000:3000 lulu-print-mcpConfiguración
1. Obtenga las credenciales de la API de Lulu
Regístrese para obtener una cuenta de desarrollador de Lulu en https://developers.lulu.com/
Para realizar pruebas, cree una cuenta sandbox en https://developers.sandbox.lulu.com/
Vaya a su página de claves API
Copia tu clave de cliente y tu secreto de cliente
2. Configurar variables de entorno
# Create a configuration file
cp .env.example .envEdite el archivo .env con sus credenciales de API de Lulu:
# Required: Your Lulu API credentials
LULU_CLIENT_KEY=your_client_key_here
LULU_CLIENT_SECRET=your_client_secret_here
# Optional: API endpoints (defaults are provided)
LULU_API_URL=https://api.lulu.com
LULU_SANDBOX_API_URL=https://api.sandbox.lulu.com
LULU_AUTH_URL=https://api.lulu.com/auth/realms/glasstree/protocol/openid-connect/token
LULU_SANDBOX_AUTH_URL=https://api.sandbox.lulu.com/auth/realms/glasstree/protocol/openid-connect/token
# Use sandbox environment for testing (default: false)
LULU_USE_SANDBOX=false
# Enable debug logging (default: false)
DEBUG=falseUso con Claude Desktop
Agregue este servidor MCP a su archivo de configuración de Claude Desktop:
# Run the Claude Desktop setup script
npm run setup:claudeSigue las instrucciones para actualizar el archivo de configuración de Claude Desktop. El script generará una configuración similar a la siguiente:
{
"mcpServers": {
"lulu-print": {
"command": "lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}Uso con cursor
Agregue este servidor MCP a su archivo de configuración de Cursor:
Abra la configuración del cursor (
Cursor → SettingsoCmd+,en Mac)Vaya a la sección Características
Busque la configuración del "Protocolo de contexto del modelo"
Agregue la siguiente configuración:
{
"mcpServers": {
"lulu-print": {
"command": "node",
"args": ["/path/to/global/lulu-print-mcp/dist/index.js"],
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}O si se instala globalmente:
{
"mcpServers": {
"lulu-print": {
"command": "lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}Uso con Windsurf
Añade este servidor MCP a tu configuración de Windsurf:
Cree o edite el archivo
.windsurf/config.jsonen el directorio de su proyectoAgregue la siguiente configuración:
{
"mcpServers": {
"lulu-print": {
"command": "lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}Para la configuración de desarrollo con Windsurf:
{
"mcpServers": {
"lulu-print": {
"command": "tsx",
"args": ["src/index.ts"],
"cwd": "/path/to/lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}Herramientas disponibles
Cálculo de costos
calcular el coste del trabajo de impresión
Calcular el coste de un trabajo de impresión sin crearlo:
calculate-print-job-cost
line_items: Array of items to price
- pod_package_id: Product SKU (e.g., "0600X0900BWSTDPB060UW444MXX")
- page_count: Number of pages
- quantity: Number of copies
shipping_address: Delivery address
- street1: Street address
- city: City name
- country_code: 2-letter ISO country code
- postcode: Postal code
- phone_number: Contact phone
shipping_option: MAIL | PRIORITY_MAIL | GROUND | EXPEDITED | EXPRESSGestión de trabajos de impresión
crear-trabajo-de-impresión
Crear una nueva orden de trabajo de impresión:
create-print-job
line_items: Array of books to print
- title: Book title
- cover_url: URL to cover PDF
- interior_url: URL to interior PDF
- pod_package_id: Product SKU
- quantity: Number of copies
shipping_address: Delivery address
- name: Recipient name
- street1: Street address
- city: City
- country_code: 2-letter ISO code
- postcode: Postal code
- phone_number: Phone
contact_email: Email for order communication
shipping_level: MAIL | PRIORITY_MAIL | GROUND | EXPEDITED | EXPRESS
external_id: Your order reference (optional)lista-impresión-trabajos
Lista de trabajos de impresión con filtros opcionales:
list-print-jobs
page: Page number (optional)
page_size: Results per page (optional)
status: Filter by status (optional)
created_after: Filter by creation date (optional)
created_before: Filter by creation date (optional)obtener-trabajo-de-impresión
Obtener detalles de un trabajo de impresión específico:
get-print-job
id: Print job IDactualizar-trabajo-de-impresión
Actualizar un trabajo de impresión (solo antes del pago):
update-print-job
id: Print job ID
external_id: New reference (optional)
contact_email: New email (optional)cancelar trabajo de impresión
Cancelar un trabajo de impresión (solo si no se ha pagado):
cancel-print-job
id: Print job IDobtener el estado del trabajo de impresión
Obtener el estado actual de un trabajo de impresión:
get-print-job-status
id: Print job IDcostos de obtener trabajos de impresión
Obtenga los costos detallados de un trabajo de impresión:
get-print-job-costs
id: Print job IDobtener estadísticas del trabajo de impresión
Obtener estadísticas de trabajos de impresión durante un período de tiempo:
get-print-job-statistics
start_date: Start date (YYYY-MM-DD) (optional)
end_date: End date (YYYY-MM-DD) (optional)
group_by: DAY | WEEK | MONTH (optional)Validación de archivos
validar archivo interior
Validar un archivo PDF interior:
validate-interior-file
file_url: URL to interior PDF
pod_package_id: Product SKU (optional, for normalization)obtener validación interior
Comprobar el estado de la validación:
get-interior-validation
validation_id: ID from validate-interior-filecalcular-dimensiones-de-cobertura
Calcular las dimensiones de la cubierta requerida:
calculate-cover-dimensions
pod_package_id: Product SKU
page_count: Number of interior pages
unit: IN | MM | PT (optional, default: PT)validar archivo de portada
Validar un archivo PDF de portada:
validate-cover-file
file_url: URL to cover PDF
pod_package_id: Product SKU
page_count: Number of interior pagesvalidación de obtención de cobertura
Comprobar el estado de validación de la portada:
get-cover-validation
validation_id: ID from validate-cover-fileEnvío
obtener opciones de envío
Obtenga las opciones de envío disponibles:
get-shipping-options
country_code: 2-letter ISO country code
state_code: State/province code (optional)
quantity: Number of items (optional)
pod_package_id: Product SKU (optional)
page_count: Number of pages (optional)
level: Filter by specific level (optional)Webhooks
crear-webhook
Crear una suscripción de webhook:
create-webhook
url: Webhook endpoint URL
topics: Array of events (currently supports ["PRINT_JOB_STATUS_CHANGED"])lista-webhooks
Listar todas las suscripciones de webhook:
list-webhooksobtener-webhook
Obtener detalles del webhook:
get-webhook
id: Webhook IDactualización-webhook
Actualizar un webhook:
update-webhook
id: Webhook ID
url: New URL (optional)
topics: New topics (optional)
is_active: Enable/disable (optional)eliminar-webhook
Eliminar un webhook:
delete-webhook
id: Webhook IDprueba-webhook
Enviar un webhook de prueba:
test-webhook
id: Webhook ID
topic: PRINT_JOB_STATUS_CHANGEDenvíos de lista de webhooks
Lista de intentos de entrega de webhook:
list-webhook-submissions
webhook_id: Filter by webhook (optional)
page: Page number (optional)
page_size: Results per page (optional)SKU de productos Lulu
Lulu utiliza un sistema SKU de 27 caracteres para identificar los productos:
Formato : Trim Size + Color + Print Quality + Bind + Paper + PPI + Finish + Linen + Foil
Ejemplos comunes
Código SKU | Descripción |
| Envoltura de lino estándar en blanco y negro de 8,5" x 11" con lino azul marino y lámina dorada |
| Libro de bolsillo estándar a todo color de 6" x 9" con cubierta brillante |
| Encuadernación en espiral premium a todo color de 7" x 10" con cubierta mate |
| Libro de bolsillo estándar en blanco y negro de 6" x 9" con cubierta mate |
Utilice la calculadora de precios de Lulu para generar SKU para sus necesidades específicas.
Pruebas con Sandbox
Para utilizar el entorno sandbox de Lulu para realizar pruebas:
Crea una cuenta sandbox en https://developers.sandbox.lulu.com/
Obtenga sus credenciales de API de sandbox
Establezca
LULU_USE_SANDBOX=trueen su archivo.envO utilice el indicador
--sandboxal ejecutar la CLI:lulu-print-mcp --sandbox
En modo sandbox:
Utilice números de tarjetas de crédito de prueba para los pagos
Los pedidos no se enviarán a producción real.
Perfecto para desarrollo y pruebas.
Opciones de línea de comandos
lulu-print-mcp [options]
Options:
-s, --sandbox Use Lulu sandbox environment instead of production
-d, --debug Enable debug logging
-h, --help Display help
-V, --version Display versionSolución de problemas
Problemas de autenticación
Verifique que su clave de cliente y su secreto sean correctos
Comprueba si estás utilizando el entorno adecuado (producción vs. sandbox)
Asegúrese de que sus credenciales de API tengan los permisos necesarios
Errores de validación de archivos
Asegúrese de que los archivos PDF sean accesibles públicamente a través de URL
Consulte los requisitos de formato de archivo en la documentación de Lulu
Verifique que el número de páginas y las dimensiones coincidan con las especificaciones del producto
Problemas de red
Comprueba tu conexión a Internet
Verifique que la configuración del firewall permita conexiones HTTPS a api.lulu.com
Habilite el modo de depuración para ver registros detallados de solicitudes y respuestas
Contribuyendo
¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.
Licencia
Instituto Tecnológico de Massachusetts (MIT)
Available Tools
2 toolscalculate-print-job-costA
Calculate the cost of a print job without creating it
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Lulu product ID | |
| quantity | Yes | Number of copies |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It clearly indicates this is a read-only calculation tool (not creating anything), which is helpful. However, it doesn't mention potential limitations like rate limits, authentication requirements, or what specific cost components are included in the calculation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the essential purpose without any wasted words. It's appropriately sized for a simple calculation tool and front-loads the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter calculation tool with no annotations and no output schema, the description provides adequate but minimal context. It clearly states the purpose but doesn't explain what the output looks like (cost format, currency, breakdown) or any prerequisites for successful calculation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any additional meaning or context about the parameters beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('calculate the cost') and resource ('print job'), and explicitly distinguishes it from the alternative action of creating a print job. This provides excellent clarity about what the tool does and what it doesn't do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool ('without creating it'), which implicitly suggests it's for cost estimation before actual creation. However, it doesn't explicitly mention when NOT to use it or provide specific alternatives beyond the implied contrast with creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-product-detailsB
Get specifications and details for a Lulu product
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Lulu product ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description states it 'gets' details, implying a read-only operation, but doesn't clarify permissions, rate limits, error conditions, or what 'specifications and details' includes. For a tool with zero annotation coverage, this is insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place, achieving optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose but lacks details on behavior, usage context, and output format. Without annotations or output schema, the agent must rely heavily on the description, which is incomplete for informed tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'product_id' documented as 'Lulu product ID'. The description doesn't add any parameter-specific information beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('specifications and details for a Lulu product'), making the purpose understandable. However, it doesn't differentiate from the sibling tool 'calculate-print-job-cost', which appears unrelated but could potentially overlap in product context. The description is specific but lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, context, or exclusions. With only one sibling tool that seems unrelated (cost calculation), the lack of explicit usage guidelines leaves the agent to infer based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- First observed
calculate-print-job-cost - First observed
get-product-details
TDQS
Scored across 2 tools
The two tools have completely distinct purposes: one calculates costs for print jobs, while the other retrieves product specifications. There is no overlap in functionality, making it impossible for an agent to confuse them.
Both tools use a verb-object naming pattern, but they mix conventions: 'calculate-print-job-cost' uses kebab-case, while 'get-product-details' uses hyphenation inconsistently with the first. The verbs 'calculate' and 'get' are clear but not perfectly aligned in style.
With only two tools, the server feels thin for a print service domain. It lacks essential operations like creating print jobs, managing orders, or handling payments, which are core to such a service. The count is too low for the apparent scope.
The tool surface is severely incomplete for a print service. It covers cost calculation and product details but misses critical operations such as job creation, order submission, status tracking, and payment processing, leaving significant gaps that will cause agent failures.
Maintenance
Related MCP Connectors
Furgonetka MCP Server is an extension for LLMs (such as Claude) that integrates AI assistants with Poland's most popular courier brokerage platform. The server enables models to interact directly with services from various couriers (including InPost, DPD, DHL, UPS, and Poczta Polska) through a single, unified interface. With this integration, your AI stops just "writing about logistics" and starts actually managing it.
Publish and schedule videos to TikTok, YouTube Shorts, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads and X from Claude, Cursor or any MCP client. Upload once, post everywhere, track views in unified analytics, and retry failed posts. Official platform APIs only, free plan available. Docs: https://docs.multi-upload-tool.com/mcp
Connect Amazon Seller Central to Claude or ChatGPT via MCP. Orders, inventory, pricing, fees, FBA.
Create projects, nodes, and tasks in UluP Spaces by conversation with Claude.
Related MCP Servers
- AlicenseAqualityDmaintenanceConnects Printful's print-on-demand API to AI assistants like Claude and Cursor to automate business operations. It enables users to browse catalogs, manage orders, generate mockups, and calculate shipping rates through natural language.1930MIT

OpenPrints MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to browse products, upload designs, place print orders, track shipments, and manage account balance via natural language.14 npmMIT- AlicenseNot gradedqualityDmaintenanceEnables users to connect Claude with various 3D printer management systems, allowing tasks like printer status monitoring, file management, print job control, and STL file manipulation.186 npmGPL 2.0
- FlicenseNot gradedqualityCmaintenanceEnables Claude to create, update, and publish print-on-demand products on Printify directly from chat, including managing shops, products, and orders.-