PrintVaultMCP
Allows crawling GitHub repositories for printable 3D printing files to create print trackers.
Click on "Deploy 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., "@PrintVaultMCP Show me the current low stock alerts"
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.
Print Vault MCP Server
An MCP server that gives AI assistants full access to a self-hosted Print Vault instance — the 3D printing inventory, filament, printer, project, and print-tracker management app.
Built for Claude Desktop, Claude Code, and any MCP-compatible client.
Quick Start
Prerequisites
uv (Python package manager)
A running Print Vault instance (v1.1.0+)
Install & Run
# Clone the repo
git clone https://github.com/your-org/PrintVaultMCP.git
cd PrintVaultMCP
# Copy and configure environment
cp .env.example .env
# Edit .env and set PRINT_VAULT_URL to your instance
# Run the server
uv run print-vault-mcpAdd to Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"print-vault": {
"command": "uv",
"args": ["--directory", "/path/to/PrintVaultMCP", "run", "print-vault-mcp"],
"env": {
"PRINT_VAULT_URL": "http://192.168.1.100:8000"
}
}
}
}Add to Claude Code
claude mcp add print-vault \
--command "uv --directory /path/to/PrintVaultMCP run print-vault-mcp" \
--env PRINT_VAULT_URL=http://192.168.1.100:8000Related MCP server: Homebox MCP Server
Configuration
Variable | Required | Default | Description |
| Yes | — | Base URL of your Print Vault instance |
| No |
| HTTP request timeout in seconds |
Tools
40 tools organized across 7 groups:
Dashboard & System
Tool | Description |
| Full status overview — alerts, stats, featured trackers, active projects |
| Current Print Vault version |
| Dismiss a specific dashboard alert |
Inventory Management
Tool | Description |
| Search items by keyword, brand, part type, or location |
| Full detail on a specific item |
| Add a new item (auto-creates brands, locations, etc.) |
| Update any field on an existing item |
| List all consumables at or below threshold |
| See which projects are using an item |
Filament Management
Tool | Description |
| Browse material blueprints and generic types |
| Create a generic material type or specific blueprint |
| List physical spools for a material blueprint |
| Browse spools with status/printer/color filters |
| Add new spool(s) linked to a material blueprint |
| Quick-add a spool without a blueprint (standalone fields) |
| Update current weight (auto-updates status) |
| Mark a spool as empty |
| Open a spool from an unopened batch |
| Bulk archive empty spools |
| Toggle favorite on a material (max 5) |
Printer Management
Tool | Description |
| List printers with search and status filter |
| Full detail including mods and filament |
| Update status, notes, etc. |
| Add a mod/upgrade to a printer |
| Update mod status |
Project Management
Tool | Description |
| List projects with search and status filter |
| Full detail with BOM, inventory, printers, trackers |
| Create a new project |
| Update project fields |
| Add a BOM line item (auto-reserves linked inventory) |
| Consolidated buy list across all active projects |
| Associate a printer with a project |
Print Tracker
Tool | Description |
| List all print trackers |
| Full tracker detail with file list and progress |
| Crawl a GitHub repo for printable files |
| Update print status of a tracker file |
Reference Data
Tool | Description |
| All brands/manufacturers |
| All storage locations |
| All part type categories |
| All vendors/suppliers |
Project Structure
PrintVaultMCP/
├── src/print_vault_mcp/
│ ├── __init__.py # Package entry point
│ ├── __main__.py # python -m support
│ ├── client.py # Async HTTP client for Print Vault API
│ ├── formatters.py # AI-friendly response formatters
│ └── server.py # MCP server & tool definitions
├── docs/
│ ├── design.md # Architecture & design document
│ └── reference/ # API contract references (links to upstream source)
├── .env.example # Environment variable template
├── .gitignore
├── pyproject.toml # uv/pip package configuration
└── README.mdDevelopment
# Install dependencies
uv sync
# Run the server locally (stdio mode)
PRINT_VAULT_URL=http://localhost:8000 uv run print-vault-mcp
# Run with the MCP inspector for debugging
npx @modelcontextprotocol/inspector uv run print-vault-mcpHow It Works
The server is a stateless protocol translation layer. It receives structured tool calls from AI clients via MCP (stdio transport), translates them into HTTP requests against the Print Vault REST API, and returns formatted text responses the AI can reason about.
AI Client ──MCP (stdio)──> PrintVaultMCP ──HTTP/JSON──> Print VaultPrint Vault uses AllowAny permissions on every endpoint (single-user self-hosted app), so the MCP server only needs the base URL — no tokens or credentials required.
License
AGPL-3.0 — same license family as Print Vault itself.
Available Tools
40 toolsadd_bom_itemA
Add a Bill of Materials line item to a project. If linked to an inventory item, it reserves stock.
Args: project: The ID of the project. description: Description of the BOM item (e.g. "M3x8 SHCS"). quantity_needed: Quantity needed. inventory_item: Optional ID of an existing inventory item to link (reserves stock). status: BOM status — 'linked' (auto-reserves), 'unlinked', or 'needs_purchase'. notes: Free-text notes.
Inputs: project (required), description (required), notes, status, +2 more. Returns: result
add_filament_spoolA
Add new filament spool(s) linked to an existing material blueprint.
Args: filament_type_id: ID of the material blueprint this spool uses. quantity: Number of identical spools to add (default 1). initial_weight: Net filament weight in grams (default 1000g / 1kg). location: Storage location name (will be created if new). notes: Free-text notes. price_paid: Price paid for this spool.
Inputs: filament_type_id (required), notes, location, quantity, +2 more. Returns: result
add_inventory_itemA
Add a new inventory item. Brand, part type, location, and vendor are created automatically if they don't exist.
Args: title: Name/title of the inventory item. quantity: Quantity on hand. brand: Brand name (will be created if new). part_type: Part type name (will be created if new). location: Storage location name (will be created if new). cost: Unit cost. is_consumable: Whether this is a consumable item (enables low stock tracking). low_stock_threshold: Quantity threshold for low stock alerts (consumables only). notes: Free-text notes. vendor: Vendor name (will be created if new). vendor_link: URL to vendor product page. model: Model/part number.
Inputs: title (required), cost, brand, model, +8 more. Returns: result
add_modA
Add a mod/upgrade to a printer.
Args: printer: The ID of the printer to add the mod to. name: Name of the mod. link: URL to the mod (Printables, GitHub, etc.). status: Mod status — 'Planned', 'In Progress', 'Completed'.
Inputs: name (required), printer (required), link, status. Returns: result
archive_spoolsA
Bulk archive empty spools.
Args: spool_ids: List of spool IDs to archive (must have 'empty' status).
Inputs: spool_ids (required). Returns: result
create_materialA
Create a new material — either a generic type (e.g. 'PLA') or a specific blueprint (e.g. 'Sunlu PLA+ Black').
A generic material is a base type that blueprints reference. A blueprint is a specific brand/color combination that spools are linked to. Create a generic first, then blueprints that reference it via base_material_id.
Args: name: Material name (e.g. 'PLA' for generic, 'Sunlu PLA+ Black' for blueprint). is_generic: True for a generic base material, False for a specific blueprint. brand: Brand name for blueprints (will be created if new). Ignored for generics. base_material_id: ID of a generic material this blueprint is based on. colors: List of color names (e.g. ['Black'] or ['Black', 'Red'] for multicolor). color_family: Color family for grouping (e.g. 'Black', 'Red', 'Neutral'). diameter: Filament diameter in mm (default 1.75). spool_weight: Net filament weight per spool in grams (default 1000). empty_spool_weight: Empty spool weight in grams. nozzle_temp_min: Minimum nozzle temperature in Celsius. nozzle_temp_max: Maximum nozzle temperature in Celsius. bed_temp_min: Minimum bed temperature in Celsius. bed_temp_max: Maximum bed temperature in Celsius. density: Filament density in g/cm3 (e.g. 1.24 for PLA). price_per_spool: Price per spool. vendor: Vendor name (will be created if new). vendor_link: URL to vendor product page. notes: Free-text notes. features: List of feature names (e.g. ['Matte', 'High Speed']). Created if new.
Inputs: name (required), brand, notes, colors, +15 more. Returns: result
create_projectA
Create a new project.
Args: project_name: Name of the project. description: Project description. status: Initial status — 'Planning', 'In Progress', 'On Hold'. start_date: Start date in YYYY-MM-DD format. due_date: Due date in YYYY-MM-DD format. notes: Free-text notes.
Inputs: project_name (required), notes, status, due_date, +2 more. Returns: result
create_tracker_from_githubA
Crawl a GitHub repository for printable files and return the results. Use this to preview files before creating a tracker.
Args: github_url: Full GitHub URL to a repository or subdirectory (e.g. https://github.com/VoronDesign/Voron-0/tree/main/STLs).
Inputs: github_url (required). Returns: result
dismiss_alertA
Dismiss a specific dashboard alert.
Args: alert_type: The type of alert (e.g. 'printer_repair', 'low_stock', 'maintenance_overdue'). alert_id: The ID of the specific alert to dismiss.
Inputs: alert_id (required), alert_type (required). Returns: result
get_dashboardA
Get a full status overview of your Print Vault: alerts, stats, featured trackers, and active projects.
Inputs: no named parameters. Returns: result
get_inventory_itemB
Get full details on a specific inventory item.
Args: item_id: The ID of the inventory item.
Inputs: item_id (required). Returns: result
get_item_allocationA
Get the allocation summary for an inventory item — how much is on hand, needed, and which projects are using it.
Args: item_id: The ID of the inventory item.
Inputs: item_id (required). Returns: result
get_low_stockA
List all consumable inventory items that are at or below their low stock threshold.
Inputs: no named parameters. Returns: result
get_material_spoolsA
List all physical spools for a given material blueprint.
Args: material_id: The ID of the material blueprint.
Inputs: material_id (required). Returns: result
get_printerA
Get full details on a specific printer including mods and assigned filament.
Args: printer_id: The ID of the printer.
Inputs: printer_id (required). Returns: result
get_projectA
Get full project details including BOM, linked inventory, printers, trackers, and files.
Args: project_id: The ID of the project.
Inputs: project_id (required). Returns: result
get_shopping_listA
Get the consolidated shopping list — items that need to be purchased across all active projects.
Inputs: no named parameters. Returns: result
get_trackerA
Get full tracker details including file list and progress.
Args: tracker_id: The ID of the tracker.
Inputs: tracker_id (required). Returns: result
get_versionA
Get the current Print Vault version.
Inputs: no named parameters. Returns: result
link_printer_to_projectB
Associate a printer with a project.
Args: project: The project ID. printer: The printer ID.
Inputs: printer (required), project (required). Returns: result
list_brandsA
List all brands/manufacturers in the system.
Inputs: no named parameters. Returns: result
list_locationsA
List all storage locations in the system.
Inputs: no named parameters. Returns: result
list_materialsA
List filament material blueprints and generic material types.
Args: search: Search by material or brand name. material_type: Filter by 'generic' or 'blueprint'. favorites: If true, show only favorited materials.
Inputs: search, favorites, material_type. Returns: result
list_part_typesB
List all part types/categories in the system.
Inputs: no named parameters. Returns: result
list_printersA
List all printers with optional search and status filter.
Args: search: Search by title, manufacturer, serial number, or notes. status: Filter by status (e.g. 'Active', 'Under Repair', 'Retired').
Inputs: search, status. Returns: result
list_projectsA
List projects with optional search and status filter.
Args: search: Search by project name, description, status, or notes. status: Filter by status — 'Planning', 'In Progress', 'On Hold', 'Completed', 'Canceled'.
Inputs: search, status. Returns: result
list_spoolsA
List filament spools with optional filtering.
Args: status: Filter by status — 'new', 'opened', 'active', 'in_use', 'low', 'empty', 'archived'. printer: Filter by assigned printer ID. color: Filter by color name (fuzzy match). is_archived: If true, show only archived spools. If false, exclude archived.
Inputs: color, status, printer, is_archived. Returns: result
list_trackersA
List all print trackers with optional search.
Args: search: Search by tracker name or GitHub URL.
Inputs: search. Returns: result
list_vendorsA
List all vendors/suppliers in the system.
Inputs: no named parameters. Returns: result
mark_spool_emptyA
Mark a filament spool as empty and clear its printer assignment.
Args: spool_id: The ID of the spool to mark as empty.
Inputs: spool_id (required). Returns: result
open_spoolA
Open a spool from an unopened batch. Creates a new individual spool record.
Args: spool_id: The ID of the unopened spool batch to open from. status: Status for the opened spool — 'opened' or 'in_use'. location_id: Optional location ID to assign the opened spool. printer_id: Optional printer ID to assign the opened spool.
Inputs: spool_id (required), status, printer_id, location_id. Returns: result
quick_add_spoolA
Quick-add a filament spool without a material blueprint. Use this when you just want to track a spool without setting up a full material blueprint first.
Args: standalone_name: Name for this spool (e.g. 'eSun PLA+ Black'). quantity: Number of identical spools to add (default 1). initial_weight: Net filament weight in grams (default 1000g / 1kg). standalone_brand: Brand name (will be created if new). standalone_material_type_id: ID of a generic material type (e.g. PLA, PETG). Use list_materials with material_type='generic' to find IDs. standalone_colors: List of color names (e.g. ['Black']). standalone_color_family: Color family for grouping (e.g. 'Black', 'Red'). location: Storage location name (will be created if new). notes: Free-text notes. price_paid: Price paid for this spool. standalone_nozzle_temp_min: Min nozzle temp in Celsius. standalone_nozzle_temp_max: Max nozzle temp in Celsius. standalone_bed_temp_min: Min bed temp in Celsius. standalone_bed_temp_max: Max bed temp in Celsius. standalone_density: Filament density in g/cm3.
Inputs: standalone_name (required), notes, location, quantity, +11 more. Returns: result
search_inventoryA
Search inventory items by keyword, brand, part type, or location.
Args: query: Free-text search across title, brand, part type, location, and notes. brand: Filter by brand name (exact match on brand__name). part_type: Filter by part type name (exact match on part_type__name). location: Filter by location name (exact match on location__name).
Inputs: brand, query, location, part_type. Returns: result
toggle_material_favoriteA
Toggle the favorite status of a material blueprint (max 5 favorites).
Args: material_id: The ID of the material blueprint.
Inputs: material_id (required). Returns: result
update_file_statusB
Update the print status or printed quantity of a tracker file.
Args: file_id: The ID of the tracker file. status: New status for the file. printed_quantity: Number of copies printed so far.
Inputs: file_id (required), status, printed_quantity. Returns: result
update_inventory_itemA
Update an existing inventory item. Only the fields you provide will be changed.
Args: item_id: The ID of the inventory item to update. title: New title. quantity: New quantity on hand. brand: Brand name (will be created if new). part_type: Part type name (will be created if new). location: Location name (will be created if new). cost: Unit cost. is_consumable: Whether this is a consumable item. low_stock_threshold: Low stock alert threshold. notes: Free-text notes. vendor: Vendor name (will be created if new). vendor_link: URL to vendor product page. model: Model/part number.
Inputs: item_id (required), cost, brand, model, +9 more. Returns: result
update_modA
Update a printer mod. Only the fields you provide will be changed.
Args: mod_id: The ID of the mod to update. name: New name for the mod. link: URL to the mod. status: New status — 'Planned', 'In Progress', 'Completed'.
Inputs: mod_id (required), link, name, status. Returns: result
update_printerA
Update a printer record. Only the fields you provide will be changed.
Args: printer_id: The ID of the printer to update. title: New title. status: New status (e.g. 'Active', 'Under Repair', 'Retired'). serial_number: Serial number. notes: Free-text notes. purchase_price: Purchase price. maintenance_notes: Maintenance notes. manufacturer: Manufacturer/brand name (will be created if new).
Inputs: printer_id (required), notes, title, status, +4 more. Returns: result
update_projectA
Update a project. Only the fields you provide will be changed.
Args: project_id: The ID of the project to update. project_name: New project name. description: New description. status: New status — 'Planning', 'In Progress', 'On Hold', 'Completed', 'Canceled'. start_date: Start date in YYYY-MM-DD format. due_date: Due date in YYYY-MM-DD format. notes: Free-text notes.
Inputs: project_id (required), notes, status, due_date, +3 more. Returns: result
update_spool_weightA
Update the current weight of an opened filament spool. Auto-updates status based on remaining weight.
Args: spool_id: The ID of the spool to update. current_weight: The current net filament weight in grams.
Inputs: spool_id (required), current_weight (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 40 tools
Most tools have clearly distinct purposes, with only a few close pairs like add_filament_spool vs quick_add_spool and list_spools vs get_material_spools. Descriptions sufficiently clarify these boundaries, so an agent can usually select the right tool.
All 40 tools follow a consistent verb_noun pattern in snake_case: list_* for collections, get_* for single items, and create_*/add_*/update_* for mutations. Even longer names like create_tracker_from_github maintain this convention throughout.
With 40 tools, this server far exceeds the 25-tool threshold for being too heavy. While the multiple domains (materials, inventory, printers, projects, trackers) justify some breadth, the sheer volume makes the surface unwieldy and harder for agents to navigate.
The surface has significant gaps: there are no delete operations for any entity, no get for materials or spools, no general update for spools beyond weight/status, and no way to unlink a printer from a project or remove a BOM item. These missing operations will cause agent dead ends in common workflows.
Related MCP Connectors
3D print farm management for AI. Monitor, queue, and control prints on your SimplyPrint account.
Log and query 3D prints, printers, filament, and projects on 3dprintlog.com, and search its docs.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Connect your AI to your own devices, 3D printers, factory tools and a shared agent task pool.
Related MCP Servers
- 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.9,494 npmGPL 2.0
- AlicenseAqualityDmaintenanceEnables AI assistants to manage inventory items, locations, and labels in a self-hosted Homebox instance using natural language, with support for flexible URL configurations.213MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to operate a 3D print farm via O.D.I.N. backend, including job queuing, printer control, inventory management, and standalone cost calculators.14 npmApache 2.0
- AlicenseBqualityDmaintenanceEnables AI assistants to manage 3D printer filament inventory through Spoolman's API, allowing natural language queries and commands for CRUD operations on vendors, filaments, spools, settings, and more.3423 npm19MIT