An MCP (Model Context Protocol) server for interacting with the ShipStation API v2. This server provides tools for AI assistants to interact with ShipStation functionality including shipments, labels, rates, carriers, inventory, warehouses, batches, and manifests.
- Shipments: Create, list, get, cancel shipments and retrieve rates
- Labels: Create, list, get, void labels and track packages
- Rates: Calculate and estimate shipping rates
- Carriers: List carriers, services, and package types
- Inventory: Get inventory levels and update stock
- Warehouses: List and get warehouse information
- Batches: Create and manage batches for bulk label processing
- Manifests: Create and manage manifests for end-of-day processing
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env # Edit .env and add your ShipStation API key # NEVER commit .env to git - it contains sensitive API keys
-
Start the MCP server:
npm start # or for development with auto-reload: npm run dev
To use this server with an MCP-compatible AI assistant (like Claude Desktop), add one of the following configurations:
{
"mcpServers": {
"shipstation": {
"command": "node",
"args": ["/path/to/shipstation-api-mcp/src/mcp-server.js"],
"env": {
"SHIPSTATION_API_KEY": "your_api_key_here",
"SHIPSTATION_API_URL": "https://custom-api.example.com"
}
}
}
}Note: The SHIPSTATION_API_URL environment variable is optional. If not provided, it defaults to the standard ShipStation API URL.
{
"mcpServers": {
"shipstation": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--env",
"SHIPSTATION_API_KEY=your_api_key_here",
"--env",
"SHIPSTATION_API_URL=https://custom-api.example.com",
"shipstation-api-mcp"
]
}
}
}{
"mcpServers": {
"shipstation": {
"command": "docker-compose",
"args": [
"run",
"--rm",
"shipstation-mcp"
],
"cwd": "/path/to/shipstation-api-mcp"
}
}
}Docker Setup:
- Build the image first:
cd /path/to/shipstation-api-mcp docker build -t shipstation-api-mcp .
- Set your API key in
.envfile or pass via--envflag - For Docker Compose:
docker-compose up shipstation-mcp
Note: The Docker image must be built with the tag shipstation-api-mcp to match the MCP configuration above.
SHIPSTATION_API_KEY- Your ShipStation API key (required)SHIPSTATION_API_URL- Custom ShipStation API base URL (optional, defaults tohttps://api.shipstation.com)
.env file to git. The .env file contains sensitive API keys and should only exist locally or in secure deployment environments.
The MCP server provides the following tools for AI assistants:
get_shipments- List shipments with optional filteringcreate_shipment- Create a new shipment (use warehouse_id OR ship_from, not both)create_shipments_bulk- Create multiple shipments in a single API call for bulk processingget_shipment_by_id- Get shipment details by IDget_shipment_by_external_id- Get shipment by external IDupdate_shipment- Update a shipment by its ID (requires complete shipment data)cancel_shipment- Cancel a shipmentget_shipment_rates- Get rates for an existing shipmenttag_shipment- Add a tag to a shipmentuntag_shipment- Remove a tag from a shipment
get_labels- List shipping labelscreate_label- Create a new shipping labelcreate_label_from_rate- Create a label from an existing ratecreate_label_from_shipment- Create a label from an existing shipmentcreate_return_label- Create a return label for an existing labelget_label_by_id- Get label details by IDvoid_label- Void a shipping labeltrack_package- Track a package using label ID
calculate_rates- Calculate shipping rates for a shipmentestimate_rates- Estimate shipping rates with minimal address informationget_rate_by_id- Get rate details by ID
get_carriers- List available carriersget_carrier_by_id- Get carrier details by IDget_carrier_services- Get services for a specific carrierget_carrier_options- Get carrier-specific optionsget_carrier_package_types- Get package types for a specific carrier
get_warehouses- List warehousesget_warehouse_by_id- Get warehouse details by IDget_inventory- Get inventory levelsupdate_inventory- Update SKU stock levelsget_inventory_warehouses- Get inventory warehousescreate_inventory_warehouse- Create a new inventory warehouseget_inventory_warehouse_by_id- Get inventory warehouse by IDupdate_inventory_warehouse- Update inventory warehousedelete_inventory_warehouse- Delete inventory warehouseget_inventory_locations- Get inventory locationscreate_inventory_location- Create a new inventory locationget_inventory_location_by_id- Get inventory location by IDupdate_inventory_location- Update inventory locationdelete_inventory_location- Delete inventory location
get_batches- List batches with filtering parameterscreate_batch- Create a new batch for bulk label processingget_batch_by_id- Get batch details by IDget_batch_by_external_id- Get batch by external batch IDupdate_batch- Update batch informationdelete_batch- Delete a batchadd_to_batch- Add shipments to an existing batch (all shipments must have same warehouse_id)remove_from_batch- Remove items from a batchget_batch_errors- Get validation errors for a batchprocess_batch- Process a batch to create labels (BEST METHOD for bulk label creation)
💡 Best Practice: Use batches for creating multiple labels efficiently. The
process_batchtool is the most efficient method for bulk label creation - it avoids rate limits and creates all labels in one operation instead of individual API calls.
get_manifests- List manifests with filtering parameterscreate_manifest- Create a new manifest for end-of-day processingget_manifest_by_id- Get manifest details by ID
The project includes comprehensive tests organized by category:
# Run all tests
npm test
# Run specific test types
npm run test:unit # Unit tests (fast, no API key needed)
npm run test:integration # Integration tests (requires API key)
npm run test:e2e # End-to-end Docker tests
# Watch mode for development
npm run test:watchNote: Integration and E2E tests require SHIPSTATION_API_KEY environment variable.
🔒 API Key Protection:
- The
.envfile is automatically ignored by git (see.gitignore) - Never commit API keys to version control
- Use environment variables in production deployments
- Rotate API keys if accidentally exposed
🐳 Docker Security:
- Containers run as non-root user (
mcp) - API keys passed via environment variables only
- No secrets baked into images
- Node.js 16+
- ShipStation API key (Scale-Gold plan or higher)
- Docker (optional, for containerized deployment)
- This is an MVP implementation covering core ShipStation API functionality
- Error handling includes proper HTTP status codes and descriptive messages
- All endpoints proxy to the official ShipStation API v2
- File downloads are supported for labels, manifests, and other documents
- CORS is enabled for cross-origin requests
- Comprehensive test suite with unit, integration, and E2E tests