Thingiverse MCP Server

by gpaul-mcp
Verified
# Thingiverse MCP Server A Model Context Protocol (MCP) server that provides tools for interacting with the Thingiverse API, allowing AI assistants to search for, explore, and retrieve 3D printable models. [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)](https://nodejs.org/) ## 🌟 Overview This MCP server wraps the Thingiverse API using Puppeteer to create a reliable interface that can be used by AI assistants. It provides tools to: - Search for 3D printable models - Get random 3D models - Browse categories - Get models from specific categories ## 🚀 Features - **🔍 Model Search**: Search Thingiverse's database of 3D printable models using keywords - **🗂️ Category Browsing**: Explore models by categories - **🎲 Random Models**: Discover random 3D models from Thingiverse - **🌐 Complete API Access**: Get detailed information about models, including descriptions, files, images, and more - **🤖 AI Assistant Integration**: Designed to work with AI assistants through the Model Context Protocol ## 📋 Prerequisites - Node.js (v14 or higher) - npm or yarn - Thingiverse API token ## 🔧 Installation 1. **Clone the repository** ```bash git clone <repository-url> cd thingiverse-mcp ``` 2. **Install dependencies** ```bash npm install ``` 3. **Set up environment variables** ```bash # Create development environment file cp .env.example .env.development # Create production environment file cp .env.example .env.production ``` 4. **Configure API token** - Get a Thingiverse App Token from the [Thingiverse Developer Portal](https://www.thingiverse.com/developers) - Add your token to both `.env.development` and `.env.production` files: ``` APP_TOKEN=your_api_token_here ``` ## 🎮 Usage ### Development Mode ```bash npm run dev ``` This starts the MCP server in development mode with hot reload. ### Production Mode ```bash npm run build npm start ``` Or use the shorthand: ```bash npm run prod ``` ## 🔗 Integrating with Claude Desktop To add this MCP server to Claude Desktop and enable Thingiverse browsing capabilities: 1. **Start the MCP server** Make sure your server is running locally or on a remote host that Claude Desktop can access. 2. **Open Claude Desktop settings** - Launch Claude Desktop - Click on your profile picture or icon in the top right - Select "Settings" from the dropdown menu 3. **Navigate to Extensions settings** - In the Settings sidebar, click on "Extensions" - Select "Add Custom MCP" 4.1 **Configure the MCP connection** - Name: `Thingiverse MCP` (or any name you prefer) - URL: Enter the URL where your MCP server is running (e.g., `http://localhost:3000` for local development) - Click "Add MCP" 4.2 **Alternative Configure the MCP connection** - You first need to build the project and provide your full path C:/.../Thingiverse/dist/index.js ```json "thingiverse": { "command": "node", "args": [ "YOUR_CUSTOM_PATH/Thingiverse/dist/index.js" ] } ``` 5. **Enable the MCP** - Toggle the switch next to your newly added Thingiverse MCP to enable it - Claude Desktop will attempt to connect to your MCP server 6. **Verify connection** - Start a new conversation with Claude - Type "Can you help me find some 3D models on Thingiverse?" - Claude should now be able to use the Thingiverse tools to search and browse models 7. **Troubleshooting** - If Claude cannot connect to your MCP server, check that: - The server is running and accessible from Claude Desktop - The correct URL is configured in Claude Desktop settings - Your API token is valid and properly configured in the server ### Usage Examples with Claude Once connected, you can ask Claude to: - "Find me some 3D printable smartphone stands on Thingiverse" - "Show me some popular 3D models in the gadgets category" - "Get me a random 3D model from Thingiverse" - "What categories of 3D models are available on Thingiverse?" ## 🧠 Available Tools The server exposes several tools that can be used by AI assistants: ### `get-things` Searches for 3D models based on a search term. **Parameters:** - `term`: Search term (required) - `categoryId`: Optional category ID to narrow down search ### `get-random-thing` Retrieves random 3D models from Thingiverse. ### `get-categories` Fetches all available categories from Thingiverse. ### `get-random-thing-from-category` Gets random 3D models from a specific category. **Parameters:** - `categorySlug`: Category slug (required) ## 🔍 How It Works The server uses Puppeteer with Stealth plugin to interact with the Thingiverse API. This approach: 1. Handles authentication via API tokens 2. Makes requests to various Thingiverse endpoints 3. Parses and returns the data in a structured format 4. Exposes endpoints as MCP tools that can be called by AI assistants ## 🛠️ Project Structure ``` src/ ├── class/ │ └── thingiverser.class.ts # Main Puppeteer client for Thingiverse API ├── endpoints/ │ ├── getCategories.ts # Get all categories │ ├── getRandomThing.ts # Get random things │ ├── getThings.ts # Search for things │ └── getThingsFromCategory.ts # Get things from a category ├── types/ │ ├── category.d.ts # Type definitions for categories │ ├── files.d.ts # Type definitions for files │ └── things.d.ts # Type definitions for things └── index.ts # Entry point and MCP server setup ``` ## ⚙️ Development ### Environment Configuration The server uses different environment files for development and production: - `.env.development` - Used when running in development mode - `.env.production` - Used when running in production mode ### Testing Run the test suite with: ```bash npm test ``` ### Linting and Formatting ```bash # Run ESLint npm run lint # Fix ESLint errors npm run lint:fix # Format code with Prettier npm run format ``` ## 📝 Notes for Deployment When deploying to production: 1. Ensure your `.env.production` file contains a valid Thingiverse API token 2. The build process will embed this token in the compiled code 3. Use `npm run prod` to build and start the production server ## 📄 License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.