PrintSmith MCP Server
An MCP (Model Context Protocol) server that connects Claude to PrintSmith Vision, enabling AI-assisted print shop management.
All operations are READ-ONLY - this server only queries data, never modifies it.
Features
| Tool | Description |
|---|---|
lookup_customer | Search customers by name, ID, or account number |
get_job_status | Get production status of a specific job |
list_jobs | List jobs filtered by status (in production, ready for pickup, etc.) |
get_customer_jobs | Get all jobs for a specific customer |
get_ar_summary | Accounts receivable summary |
get_estimate | Get details of a specific estimate |
list_pending_estimates | List estimates awaiting conversion |
health_check | Verify PrintSmith connection |
Quick Start (Mock Data)
Test the server without a PrintSmith connection:
cd printsmith-mcp
pip install -r requirements.txt
USE_MOCK_DATA=true python src/server.py
Deployment on Proxmox LXC
Step 1: Create the LXC Container
On your Proxmox host:
# Download the setup script
scp scripts/setup-lxc.sh root@proxmox:/tmp/
# SSH to Proxmox and run
ssh root@proxmox
cd /tmp
# Edit variables at top of script, then run:
bash setup-lxc.sh
This creates an Ubuntu 24.04 LXC container with Python installed.
Step 2: Deploy Application Files
From your local machine (where you downloaded this repo):
# Set your container ID
CTID=200
# Copy files to container
pct push $CTID src/server.py /opt/printsmith-mcp/src/server.py
pct push $CTID src/printsmith_client.py /opt/printsmith-mcp/src/printsmith_client.py
pct push $CTID requirements.txt /opt/printsmith-mcp/requirements.txt
pct push $CTID scripts/install.sh /opt/printsmith-mcp/scripts/install.sh
Or use the deploy script:
bash scripts/deploy-to-lxc.sh 200
Step 3: Install Inside Container
pct enter 200
cd /opt/printsmith-mcp
bash scripts/install.sh
Step 4: Configure PrintSmith Connection
nano /opt/printsmith-mcp/.env
Edit these values:
PRINTSMITH_BASE_URL=https://your-printsmith-server.com
PRINTSMITH_API_TOKEN=your-api-token-here
USE_MOCK_DATA=false
Step 5: Start the Service
systemctl start printsmith-mcp
systemctl status printsmith-mcp
# View logs
journalctl -u printsmith-mcp -f
Step 6: Test
# From inside container
curl http://localhost:8080/health
# From Proxmox host (replace IP)
curl http://10.0.0.50:8080/health
Connecting to Claude
Option A: Claude Desktop (if LXC has STDIO access)
Not recommended for LXC. Use Option B.
Option B: Remote MCP Connection (Recommended)
The server runs in HTTP/SSE mode, accessible at:
http://<container-ip>:8080/sse
To use with Claude, you'll need an MCP client that supports remote servers. Check Anthropic's documentation for current options.
Option C: For Development/Testing
You can also run the server locally in STDIO mode for Claude Desktop:
MCP_TRANSPORT=stdio python src/server.py
PrintSmith API Reference
Getting Your API Token
- Log into PrintSmith Vision as administrator
- Go to Setup → Preferences → API Settings
- Generate or copy your API token
API Endpoints Used (Read-Only)
| Endpoint | Method | Description |
|---|---|---|
/AccountAPI/{token} | GET | Customer/account data |
/InvoiceAPI/{token} | GET | Invoice data |
/EstimateAPI/{token} | GET | Estimate data |
/JobAPI/{token} | GET | Job/production data |
/ContactAPI/{token} | GET | Contact data |
Authentication
PrintSmith uses token-in-URL authentication:
GET https://your-server.com/AccountAPI/YOUR_API_TOKEN?account_id=1234
Common Query Parameters
| Parameter | Description |
|---|---|
account_id | Primary key ID |
account_account_id | Display account number |
contact_id | Contact primary key |
start_date | Range filter start (YYYY-MM-DD) |
end_date | Range filter end (YYYY-MM-DD) |
status | Status filter |
Response Format
All responses are JSON:
{
"id": "1234",
"name": "Acme Corporation",
"balance": 2450.00,
"credit_status": "good"
}
Error Responses
{
"status": "Failure",
"message": "Account with number(account_account_id): 9999 was not found."
}
Environment Variables
| Variable | Default | Description |
|---|---|---|
PRINTSMITH_BASE_URL | (required) | PrintSmith server URL |
PRINTSMITH_API_TOKEN | (required) | API authentication token |
PRINTSMITH_VERIFY_SSL | true | Verify SSL certificates |
PRINTSMITH_TIMEOUT | 30 | Request timeout in seconds |
MCP_TRANSPORT | stdio | Transport: stdio or http |
MCP_HTTP_PORT | 8080 | HTTP server port |
MCP_HTTP_HOST | 0.0.0.0 | HTTP server bind address |
USE_MOCK_DATA | false | Use mock data (no PrintSmith needed) |
Project Structure
printsmith-mcp/
├── src/
│ ├── server.py # MCP server (main entry point)
│ └── printsmith_client.py # PrintSmith API client (read-only)
├── scripts/
│ ├── setup-lxc.sh # Create LXC container on Proxmox
│ ├── deploy-to-lxc.sh # Copy files to container
│ └── install.sh # Install inside container
├── requirements.txt
└── README.md
Security Considerations
- API Token: Stored in
.envfile with restricted permissions (600) - Read-Only: All operations are GET requests only
- Network: Consider firewall rules to restrict access to MCP port
- SSL: Enable
PRINTSMITH_VERIFY_SSLin production
For a multi-tenant SaaS, you'll need additional:
- Per-customer credential storage (encrypted)
- Authentication for the MCP endpoint
- Rate limiting
- Audit logging
Troubleshooting
Container won't start
pct status 200
pct config 200
journalctl -u pve-container@200
Service fails to start
pct enter 200
journalctl -u printsmith-mcp -n 50
Can't connect to PrintSmith
# Test from inside container
curl -v "https://your-printsmith-server.com/AccountAPI/YOUR_TOKEN?limit=1"
SSL certificate errors
# Temporarily disable SSL verification
echo "PRINTSMITH_VERIFY_SSL=false" >> /opt/printsmith-mcp/.env
systemctl restart printsmith-mcp
Next Steps
- Test with mock data - Verify everything works
- Connect to real PrintSmith - Add your credentials
- Identify high-value features - What do users need most?
- Add authentication - Secure the MCP endpoint
- Build multi-tenant - Credential management for multiple customers
Resources
- MCP Documentation
- MCP Python SDK
- PrintSmith Vision - Contact EFI/ePS for API documentation