Provides containerized deployment of the Lulu Print MCP server through Docker and Docker Compose
Used for environment variable configuration to store Lulu API credentials and other settings
Repository hosting for the Lulu Print MCP code, allowing cloning for local development
Used for package installation and management of the Lulu Print MCP server
Used for authentication with Lulu's API through OpenID Connect protocol
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lulu Print MCP Servercalculate shipping costs for 100 books to London"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Lulu Print MCP Server
A Model Context Protocol (MCP) server that provides integration with Lulu Print API for print-on-demand services through Claude Desktop and other MCP clients.
Features
π Print Job Management
Create and manage print jobs for books and other printed materials
Track order status from creation to delivery
Calculate costs before placing orders
Support for multiple line items per order
π File Validation
Validate interior PDF files before printing
Validate cover PDF files with dimension checking
Calculate required cover dimensions based on page count
Get detailed validation status and error reporting
π° Cost Calculation
Calculate product costs based on specifications
Include shipping and tax calculations
Support for different shipping levels (MAIL to EXPRESS)
Get detailed cost breakdowns
π Shipping Management
Retrieve available shipping options by destination
Support for international shipping
Different service levels from standard mail to express delivery
π Webhooks
Subscribe to print job status changes
Manage webhook endpoints
Test webhook delivery
View webhook submission history
Related MCP server: Fused MCP Agents
Installation
Global Installation
# Install the package globally
npm install -g @devlimelabs/lulu-print-mcp
# Start the server
lulu-print-mcpLocal Development
# 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 devDocker Installation
# 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-mcpConfiguration
1. Get Lulu API Credentials
Sign up for a Lulu developer account at https://developers.lulu.com/
For testing, create a sandbox account at https://developers.sandbox.lulu.com/
Navigate to your API Keys page
Copy your client key and client secret
2. Configure Environment Variables
# Create a configuration file
cp .env.example .envEdit the .env file with your Lulu API credentials:
# 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=falseUsage with Claude Desktop
Add this MCP server to your Claude Desktop configuration file:
# Run the Claude Desktop setup script
npm run setup:claudeFollow the instructions to update your Claude Desktop configuration file. The script will generate a configuration similar to:
{
"mcpServers": {
"lulu-print": {
"command": "lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}Usage with Cursor
Add this MCP server to your Cursor configuration file:
Open Cursor Settings (
Cursor β SettingsorCmd+,on Mac)Navigate to the Features section
Find the "Model Context Protocol" settings
Add the following configuration:
{
"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"
}
}
}
}Or if installed globally:
{
"mcpServers": {
"lulu-print": {
"command": "lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}Usage with Windsurf
Add this MCP server to your Windsurf configuration:
Create or edit the
.windsurf/config.jsonfile in your project directoryAdd the following configuration:
{
"mcpServers": {
"lulu-print": {
"command": "lulu-print-mcp",
"env": {
"LULU_CLIENT_KEY": "your_client_key",
"LULU_CLIENT_SECRET": "your_client_secret"
}
}
}
}For development setup with 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"
}
}
}
}Available Tools
Cost Calculation
calculate-print-job-cost
Calculate the cost of a print job without creating it:
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 | EXPRESSPrint Job Management
create-print-job
Create a new print job order:
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)list-print-jobs
List print jobs with optional filters:
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)get-print-job
Get details of a specific print job:
get-print-job
id: Print job IDupdate-print-job
Update a print job (only before payment):
update-print-job
id: Print job ID
external_id: New reference (optional)
contact_email: New email (optional)cancel-print-job
Cancel a print job (only if unpaid):
cancel-print-job
id: Print job IDget-print-job-status
Get the current status of a print job:
get-print-job-status
id: Print job IDget-print-job-costs
Get detailed costs for a print job:
get-print-job-costs
id: Print job IDget-print-job-statistics
Get statistics for print jobs over a time period:
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)File Validation
validate-interior-file
Validate an interior PDF file:
validate-interior-file
file_url: URL to interior PDF
pod_package_id: Product SKU (optional, for normalization)get-interior-validation
Check validation status:
get-interior-validation
validation_id: ID from validate-interior-filecalculate-cover-dimensions
Calculate required cover dimensions:
calculate-cover-dimensions
pod_package_id: Product SKU
page_count: Number of interior pages
unit: IN | MM | PT (optional, default: PT)validate-cover-file
Validate a cover PDF file:
validate-cover-file
file_url: URL to cover PDF
pod_package_id: Product SKU
page_count: Number of interior pagesget-cover-validation
Check cover validation status:
get-cover-validation
validation_id: ID from validate-cover-fileShipping
get-shipping-options
Get available shipping options:
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
create-webhook
Create a webhook subscription:
create-webhook
url: Webhook endpoint URL
topics: Array of events (currently supports ["PRINT_JOB_STATUS_CHANGED"])list-webhooks
List all webhook subscriptions:
list-webhooksget-webhook
Get webhook details:
get-webhook
id: Webhook IDupdate-webhook
Update a webhook:
update-webhook
id: Webhook ID
url: New URL (optional)
topics: New topics (optional)
is_active: Enable/disable (optional)delete-webhook
Delete a webhook:
delete-webhook
id: Webhook IDtest-webhook
Send a test webhook:
test-webhook
id: Webhook ID
topic: PRINT_JOB_STATUS_CHANGEDlist-webhook-submissions
List webhook delivery attempts:
list-webhook-submissions
webhook_id: Filter by webhook (optional)
page: Page number (optional)
page_size: Results per page (optional)Lulu Product SKUs
Lulu uses a 27-character SKU system to identify products:
Format: Trim Size + Color + Print Quality + Bind + Paper + PPI + Finish + Linen + Foil
Common Examples
SKU | Description |
| 8.5" x 11" black-and-white standard linen wrap with navy linen and gold foil |
| 6" x 9" full color standard paperback with glossy cover |
| 7" x 10" full color premium coil-bound with matte cover |
| 6" x 9" black-and-white standard paperback with matte cover |
Use the Lulu Pricing Calculator to generate SKUs for your specific needs.
Testing with Sandbox
To use the Lulu sandbox environment for testing:
Create a sandbox account at https://developers.sandbox.lulu.com/
Get your sandbox API credentials
Set
LULU_USE_SANDBOX=truein your.envfileOr use the
--sandboxflag when running the CLI:lulu-print-mcp --sandbox
In sandbox mode:
Use test credit card numbers for payments
Orders won't be sent to real production
Perfect for development and testing
Command Line Options
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 versionTroubleshooting
Authentication Issues
Verify your client key and secret are correct
Check if you're using the right environment (production vs sandbox)
Ensure your API credentials have the necessary permissions
File Validation Errors
Ensure PDF files are publicly accessible via URL
Check file format requirements in Lulu's documentation
Verify page count and dimensions match the product specifications
Network Issues
Check your internet connection
Verify firewall settings allow HTTPS connections to api.lulu.com
Enable debug mode to see detailed request/response logs
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT