Skip to main content
Glama
spoolman-mcp

spoolman-mcp

🧡 Spoolman MCP Server

Version License: MIT TypeScript MCP Spoolman

A Model Context Protocol server for Spoolman β€” manage your entire 3D printer filament inventory through natural language with Claude and other AI assistants! πŸŽ‰


πŸš€ What is this?

This MCP server bridges the gap between AI assistants (like Claude) and your self-hosted Spoolman instance. Instead of clicking through the Spoolman UI, you can simply ask your AI assistant:

"How much PLA do I have left?" "Add a new Bambu Lab PETG spool, 1kg, red." "Mark spool #12 as used by 50g."

The server exposes the full Spoolman REST API v1 as MCP tools β€” every vendor, filament, spool, setting, custom field, lookup, and export endpoint is covered.


Related MCP server: StashDog MCP Server

✨ Features

  • 🏭 Vendor Management β€” Create, read, update, delete vendors

  • 🎨 Filament Management β€” Full CRUD with color, temperature settings, article numbers

  • 🧡 Spool Management β€” Track spools, log usage (by weight or length), weight measurement, archiving

  • βš™οΈ Settings β€” Read and write Spoolman configuration

  • 🏷️ Custom Fields β€” Manage extra fields for vendors, filaments, and spools

  • πŸ” Lookups β€” Browse all materials, locations, lot numbers, article numbers

  • πŸ“¦ Export β€” Export data as JSON or CSV

  • πŸ’“ System β€” Health check, info, and backup trigger

NOTE

This server communicates with yourlocal/self-hosted Spoolman instance. You need a running Spoolman before using this MCP server.


πŸ“‹ Requirements

Requirement

Version

Node.js

β‰₯ 18

npm

β‰₯ 9

Spoolman

Any recent version

Claude Desktop / Claude Code

Any


⚑ Quick Start

1. Clone & Install

git clone https://github.com/Disane87/spoolman-mcp.git
cd spoolman-mcp
npm install
npm run build

2. Configure Claude Desktop

Add the following to your claude_desktop_config.json:

macOS / Linux: ~/.config/claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "spoolman": {
      "command": "node",
      "args": ["/absolute/path/to/spoolman-mcp/dist/index.js"],
      "env": {
        "SPOOLMAN_URL": "http://localhost:7912"
      }
    }
  }
}
IMPORTANT

Replace/absolute/path/to/spoolman-mcp with the actual path where you cloned the repository, and http://localhost:7912 with the URL of your Spoolman instance.

3. Restart Claude Desktop & Start Chatting! πŸŽ‰


πŸ”§ Configuration

The server is configured via environment variables:

Variable

Required

Description

Example

SPOOLMAN_URL

βœ… Yes

Base URL of your Spoolman instance

http://localhost:7912

SPOOLMAN_API_KEY

❌ No

Bearer token (if behind a proxy with auth)

my-secret-key


πŸ› οΈ Available MCP Tools

🏭 Vendors

Tool

Description

spoolman_list_vendors

Search and list all vendors

spoolman_get_vendor

Get a single vendor by ID

spoolman_create_vendor

Create a new vendor

spoolman_update_vendor

Update an existing vendor

spoolman_delete_vendor

Delete a vendor (cascades to filaments!)

🎨 Filaments

Tool

Description

spoolman_list_filaments

Search filaments by name, material, color, vendor...

spoolman_get_filament

Get a single filament by ID

spoolman_create_filament

Create a new filament definition

spoolman_update_filament

Update an existing filament

spoolman_delete_filament

Delete a filament

🧡 Spools

Tool

Description

spoolman_list_spools

Search spools with extensive filters

spoolman_get_spool

Get a single spool by ID

spoolman_create_spool

Register a new spool

spoolman_update_spool

Update spool metadata

spoolman_delete_spool

Delete a spool

spoolman_use_spool

Log filament consumption (g or mm)

spoolman_measure_spool

Update remaining weight via scale measurement

βš™οΈ Settings

Tool

Description

spoolman_get_all_settings

Get all Spoolman settings

spoolman_get_setting

Get a specific setting by key

spoolman_set_setting

Change a setting value

🏷️ Custom Fields

Tool

Description

spoolman_list_fields

List custom fields for an entity type

spoolman_upsert_field

Add or update a custom field

spoolman_delete_field

Remove a custom field

πŸ” Lookups

Tool

Description

spoolman_list_materials

List all known material types

spoolman_list_locations

List all storage locations

spoolman_list_lot_numbers

List all lot/batch numbers

spoolman_list_article_numbers

List all article numbers

spoolman_rename_location

Rename a storage location

πŸ“¦ Export

Tool

Description

spoolman_export_spools

Export all spools as JSON or CSV

spoolman_export_filaments

Export all filaments as JSON or CSV

spoolman_export_vendors

Export all vendors as JSON or CSV

πŸ’“ System

Tool

Description

spoolman_get_info

Get Spoolman version and config info

spoolman_health_check

Check if Spoolman is reachable

spoolman_trigger_backup

Trigger a database backup (SQLite only)


πŸ’¬ Example Conversations

Once connected, you can have natural conversations like:

You: How many spools do I currently have?

Claude: You have 14 spools in Spoolman. 3 of them are archived.
        The active spools include 5x PLA, 4x PETG, and 2x ABS.
You: Add a new Bambu Lab PLA Basic spool. It's red, 1kg, 1.75mm.

Claude: I'll create that for you right away!
        βœ… Spool created: Bambu Lab PLA Basic (Red) β€” 1000g remaining.
You: I just printed something and used about 45g from spool #7.

Claude: Done! Spool #7 now has 623g remaining (was 668g).
You: I just weighed spool #3 on my kitchen scale β€” it's 312g total.

Claude: Got it! Based on the empty spool weight of 190g, spool #3
        now shows 122g of filament remaining.

πŸ—οΈ Project Structure

spoolman-mcp/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.ts          # MCP server entry point & transport
β”‚   β”œβ”€β”€ client.ts         # Typed Spoolman REST API client
β”‚   └── tools/
β”‚       β”œβ”€β”€ system.ts     # System tools (health, info, backup)
β”‚       β”œβ”€β”€ vendors.ts    # Vendor CRUD tools
β”‚       β”œβ”€β”€ filaments.ts  # Filament CRUD tools
β”‚       β”œβ”€β”€ spools.ts     # Spool management tools
β”‚       β”œβ”€β”€ settings.ts   # Settings tools
β”‚       β”œβ”€β”€ fields.ts     # Custom field tools
β”‚       β”œβ”€β”€ lookup.ts     # Lookup / discovery tools
β”‚       └── export.ts     # Data export tools
β”œβ”€β”€ dist/                 # Compiled JavaScript (after npm run build)
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
└── README.md

πŸ”¨ Development

# Install dependencies
npm install

# Build TypeScript
npm run build

# Watch mode (auto-rebuild on changes)
npm run watch

# Run directly with ts-node (no build step)
SPOOLMAN_URL=http://localhost:7912 npm run dev

🀝 Contributing

Contributions are welcome! Feel free to open an issue or pull request if you find a bug, have a feature idea, or want to improve the documentation.

  1. Fork the repository

  2. Create a feature branch (git checkout -b feat/my-feature)

  3. Commit your changes (git commit -m 'feat: add my feature')

  4. Push to the branch (git push origin feat/my-feature)

  5. Open a Pull Request


πŸ“„ License

MIT License β€” see LICENSE for details.


Check out these other projects from the Spoolman ecosystem:

Project

Description

🏠 Spoolman Home Assistant

Integrate Spoolman with Home Assistant β€” track spools, get notifications, automate your printing workflow

🎨 Spoolman Filament Swatch

Beautiful, interactive filament color browser for Spoolman. Live Demo

πŸ“¦ Spoolman Filament Extractor

Extract your filaments from Spoolman to SpoolmanDB format

πŸ—„οΈ SpoolmanDB

Centralized community filament database used by Spoolman

πŸ–¨οΈ Spoolman

The awesome filament manager that powers everything


πŸ™ Credits


Available Tools

34 tools
spoolman_create_filamentB

Create a new filament definition in Spoolman. Density and diameter are required.

Inputs: density (required), diameter (required), name, price, +11 more.

spoolman_create_spoolA

Create a new spool in Spoolman. A filament_id is required. Specify either remaining_weight or used_weight (not both).

Inputs: filament_id (required), lot_nr, comment, archived, +7 more.

spoolman_create_vendorB

Create a new vendor in Spoolman.

Inputs: name (required), comment.

spoolman_delete_fieldB

Remove a custom extra field from an entity type.

Inputs: key (required), entity_type (required).

spoolman_delete_filamentA

Delete a filament by ID.

Inputs: id (required).

spoolman_delete_spoolB

Delete a spool by ID.

Inputs: id (required).

spoolman_delete_vendorA

Delete a vendor by ID. This will cascade to associated filaments.

Inputs: id (required).

spoolman_export_filamentsA

Export all filaments from Spoolman as JSON or CSV.

Inputs: format.

spoolman_export_spoolsA

Export all spools from Spoolman as JSON or CSV.

Inputs: format.

spoolman_export_vendorsA

Export all vendors from Spoolman as JSON or CSV.

Inputs: format.

spoolman_get_all_settingsA

Retrieve all Spoolman configuration settings.

Inputs: no named parameters.

spoolman_get_filamentA

Get a single filament by its ID.

Inputs: id (required).

spoolman_get_infoA

Get general Spoolman API information (version, database type, debug mode, paths).

Inputs: no named parameters.

spoolman_get_settingB

Retrieve a single Spoolman configuration setting by key.

Inputs: key (required).

spoolman_get_spoolA

Get a single spool by its ID, including remaining weight and usage stats.

Inputs: id (required).

spoolman_get_vendorA

Get a single vendor by its ID.

Inputs: id (required).

spoolman_health_checkA

Check whether the Spoolman instance is healthy and reachable.

Inputs: no named parameters.

spoolman_list_article_numbersA

List all article numbers of filaments currently tracked in Spoolman.

Inputs: no named parameters.

spoolman_list_fieldsA

List all custom extra fields defined for a given entity type (vendor, filament, or spool).

Inputs: entity_type (required).

spoolman_list_filamentsA

List and search filaments in Spoolman. Supports filtering by vendor, material, color, article number and more.

Inputs: name, sort, limit, offset, +6 more.

spoolman_list_locationsA

List all spool storage locations defined in Spoolman.

Inputs: no named parameters.

spoolman_list_lot_numbersA

List all lot/batch numbers of spools currently tracked in Spoolman.

Inputs: no named parameters.

spoolman_list_materialsA

List all filament material types that exist in Spoolman (e.g. PLA, PETG, ABS).

Inputs: no named parameters.

spoolman_list_spoolsA

List and search spools in Spoolman. Filter by filament, vendor, material, location, lot number and more.

Inputs: sort, limit, lot_nr, offset, +7 more.

spoolman_list_vendorsA

List and search vendors in Spoolman. Supports filtering by name and pagination.

Inputs: name, sort, limit, offset.

spoolman_measure_spoolA

Update a spool's remaining filament by providing a current weight measurement (spool + filament together in grams).

Inputs: id (required), weight (required).

spoolman_rename_locationA

Rename an existing spool storage location. All spools at the old location will be updated to the new name.

Inputs: location (required), new_name (required).

spoolman_set_settingB

Set a Spoolman configuration value by key.

Inputs: key (required), value.

spoolman_trigger_backupA

Trigger a database backup on the Spoolman instance (SQLite only). Returns the backup file path.

Inputs: no named parameters.

spoolman_update_filamentA

Update an existing filament by ID. Only provide the fields you want to change.

Inputs: id (required), name, price, weight, +10 more.

spoolman_update_spoolB

Update an existing spool by ID. Only provide the fields you want to change. remaining_weight and used_weight are mutually exclusive.

Inputs: id (required), lot_nr, comment, archived, +6 more.

spoolman_update_vendorA

Update an existing vendor by ID. Only provide the fields you want to change.

Inputs: id (required), name, comment.

spoolman_upsert_fieldB

Add or update a custom extra field for a given entity type.

Inputs: key (required), order (required), field_type (required), entity_type (required), +4 more.

spoolman_use_spoolA

Log filament consumption for a spool. Provide either use_length (mm) or use_weight (g), not both.

Inputs: id (required), use_length, use_weight.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 34 tools

    Disambiguation4/5

    Most tools have clear, distinct purposes (e.g., list_filaments vs list_materials vs list_article_numbers). Some potential confusion exists between use_spool and measure_spool, or get_info and health_check, but descriptions clarify these differences.

    Naming Consistency4/5

    Tools generally follow the spoolman_<verb>_<noun> pattern (e.g., list_vendors, create_filament). Minor deviations like health_check (object before verb) and trigger_backup are present but not disruptive.

    Tool Count2/5

    With 34 tools, the server is well above the typical 3-15 range for coherence. While the breadth covers many Spoolman features, the large number makes it heavy and more complex for agents to navigate.

    Completeness3/5

    Full CRUD exists for vendors, filaments, and spools, plus exports and settings. However, locations only have list and renameβ€”missing create, delete, and get-by-idβ€”which is a notable gap for that entity.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to manage Snipe-IT inventory systems through comprehensive asset and consumable operations. Supports creating, updating, tracking, and managing IT assets, consumables, maintenance records, file attachments, and generating labels.
      1
      -
    • A
      license
      B
      quality
      F
      maintenance
      Enables AI assistants to manage StashDog inventory through natural language commands, supporting item management, collections, tags, smart search, and URL imports with secure authentication.
      11
      MIT
    • A
      license
      A
      quality
      F
      maintenance
      Enables AI assistants to manage 3D printing inventory, filament spools, printers, projects, and print trackers through a self-hosted Print Vault instance.
      40
      AGPL 3.0