tsp-mcp-server

omeletJK/tsp-mcp-server

3.2

If you are the rightful owner of tsp-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

A Model Context Protocol (MCP) server designed to solve the Traveling Salesman Problem (TSP) using optimized algorithms, enabling natural language interactions with Claude Desktop.

Tools
  1. solve_tsp

    Solves TSP for cities with x,y coordinates.

  2. solve_tsp_with_names

    Solves TSP for named cities with coordinates.

  3. calculate_route_distance

    Calculates the total distance for a specific route.

  4. visualize_tsp_route

    Generates a high-quality PNG image visualization of a TSP route.

  5. solve_and_visualize_tsp

    Solves TSP and generates a beautiful image visualization in one step.

TSP MCP Server

A Model Context Protocol (MCP) server for solving the Traveling Salesman Problem (TSP). This server provides optimized algorithms to find the shortest route through a set of cities, making it easy to solve TSP problems through natural language interactions with Claude Desktop.

Features

  • πŸš€ Multiple Algorithms: Dynamic Programming for small instances (≀10 cities), Nearest Neighbor + 2-opt heuristic for larger instances
  • 🎯 Optimal Solutions: Guarantees optimal solutions for small problems, high-quality solutions for larger ones
  • πŸ™οΈ Named Cities: Support for both coordinate-only and named city inputs
  • πŸ“ Distance Calculation: Calculate distances for custom routes
  • πŸ”„ Multiple Starting Points: Tests multiple starting points to find better solutions
  • πŸ“Š Visual Representations: Generate beautiful SVG visualizations of TSP routes and solutions
  • 🎨 Customizable Visualizations: Adjustable canvas size, colors, labels, and styling options

Installation

Prerequisites

  • Node.js (version 18 or higher)
  • npm or yarn
  • Claude Desktop application

Method 1: Install from npm (Coming Soon)

npm install -g tsp-mcp-server

Method 2: Install from GitHub

  1. Clone this repository:
git clone https://github.com/yourusername/tsp-mcp-server.git
cd tsp-mcp-server
  1. Install dependencies:
npm install
  1. Build the project:
npm run build
  1. Link globally (optional):
npm link

Claude Desktop Integration

To use this MCP server with Claude Desktop, add the following configuration to your Claude Desktop settings:

On macOS

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "tsp-mcp-server": {
      "command": "/usr/local/bin/node",
      "args": ["/absolute/path/to/tsp-mcp-server/dist/index.js"],
      "cwd": "/absolute/path/to/tsp-mcp-server",
      "env": {
        "PATH": "/Users/yourusername/Library/Python/3.8/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
      }
    }
  }
}

Important: Replace /absolute/path/to/tsp-mcp-server with the actual path where you cloned the repository (e.g., /Users/yourusername/Cursor/tsp-mcp-server).

On Windows

Edit %APPDATA%/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "tsp-mcp-server": {
      "command": "node",
      "args": ["C:\\absolute\\path\\to\\tsp-mcp-server\\dist\\index.js"],
      "cwd": "C:\\absolute\\path\\to\\tsp-mcp-server"
    }
  }
}

Testing the Connection

After updating the configuration:

  1. Restart Claude Desktop completely (quit and reopen)
  2. Test the connection in a new conversation:
    Can you solve this TSP problem: cities at (0,0), (1,1), (2,0)?
    
  3. Check for errors in Claude Desktop's developer console if the server doesn't respond

Troubleshooting

  • Server not found: Verify the absolute paths in your configuration
  • Node.js not found: Use the full path to node (/usr/local/bin/node on macOS)
  • Permission issues: Make sure the dist/index.js file is executable
  • Build not updated: Run npm run build after making changes to the source code

Usage Examples

Once integrated with Claude Desktop, you can use natural language to solve TSP problems:

Basic TSP Problem

"I have 5 cities at these coordinates: (0,0), (1,2), (3,1), (2,4), (4,3). 
What's the shortest route to visit all cities and return to the starting point?"

Named Cities

"Find the optimal delivery route for these locations:
- Seoul: (37.5665, 126.9780)
- Busan: (35.1796, 129.0756)  
- Incheon: (37.4563, 126.7052)
- Daegu: (35.8714, 128.6014)
- Daejeon: (36.3504, 127.3845)"

Route Distance Calculation

"Calculate the total distance if I visit cities in this order: 0 β†’ 2 β†’ 1 β†’ 3 β†’ 4
Cities are at: (0,0), (1,2), (3,1), (2,4), (4,3)"

🎨 Visual TSP Solutions

"Solve the TSP for these 4 cities and create an image visualization: 
(0,0), (5,3), (2,7), (8,1)"
"Create a dark-themed visualization of this route through Seoul, Busan, and Incheon"
"Show me a 1000x800 pixel colorful visualization of the optimal route through these delivery points"

Available Tools

The server provides five powerful tools:

1. solve_tsp

Solves TSP for cities with x,y coordinates.

Input:

{
  "cities": [
    {"x": 0, "y": 0},
    {"x": 1, "y": 2},
    {"x": 3, "y": 1}
  ]
}

2. solve_tsp_with_names

Solves TSP for named cities with coordinates.

Input:

{
  "cities": [
    {"name": "Seoul", "x": 37.5665, "y": 126.9780},
    {"name": "Busan", "x": 35.1796, "y": 129.0756},
    {"name": "Incheon", "x": 37.4563, "y": 126.7052}
  ]
}

3. calculate_route_distance

Calculates the total distance for a specific route.

Input:

{
  "cities": [
    {"x": 0, "y": 0},
    {"x": 1, "y": 2},
    {"x": 3, "y": 1}
  ],
  "route": [0, 2, 1]
}

4. πŸ–ΌοΈ visualize_tsp_route

Generates a high-quality PNG image visualization of a TSP route.

Features:

  • πŸ”΄ Red circles for cities with index numbers
  • πŸ”΅ Blue lines for route connections
  • πŸ“ City labels with visit order
  • πŸ“ Total distance display
  • 🎨 Multiple style themes
  • ⚑ Instant image file generation

Input:

{
  "cities": [
    {"x": 0, "y": 0, "name": "Start"},
    {"x": 5, "y": 3, "name": "Middle"},
    {"x": 2, "y": 7, "name": "End"}
  ],
  "route": [0, 1, 2],
  "options": {
    "width": 1000,
    "height": 800,
    "showLabels": true,
    "showDistance": true,
    "style": "dark"
  }
}

5. πŸš€ solve_and_visualize_tsp

Solves TSP and generates a beautiful image visualization in one step - the ultimate TSP tool!

Features:

  • ⚑ One-step solution and visualization
  • 🧠 Automatic algorithm selection (DP vs heuristic)
  • πŸ“Š Detailed solution breakdown
  • πŸ–ΌοΈ Professional PNG image generation
  • πŸ“‹ Comprehensive route information
  • 🎨 Customizable styling themes

Input:

{
  "cities": [
    {"x": 0, "y": 0, "name": "Warehouse"},
    {"x": 5, "y": 3, "name": "Store A"},
    {"x": 2, "y": 7, "name": "Store B"},
    {"x": 8, "y": 1, "name": "Store C"}
  ],
  "options": {
    "width": 800,
    "height": 600,
    "showLabels": true,
    "showDistance": true,
    "style": "modern"
  }
}

Algorithms

Dynamic Programming (Held-Karp)

  • Used for: Problems with ≀10 cities
  • Time Complexity: O(nΒ²2ⁿ)
  • Space Complexity: O(n2ⁿ)
  • Guarantees: Optimal solution

Nearest Neighbor + 2-opt

  • Used for: Problems with >10 cities
  • Time Complexity: O(nΒ³) for 2-opt improvement
  • Approach:
    1. Try multiple starting points with Nearest Neighbor
    2. Improve each solution with 2-opt local search
    3. Return the best solution found

Development

Running in Development Mode

npm run dev

Testing the Server

You can test the server directly:

echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node dist/index.js

Building

npm run build

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the file for details.

Acknowledgments

  • Built with the Model Context Protocol SDK
  • Implements classic TSP algorithms adapted for practical use
  • Inspired by the need for accessible optimization tools

🎨 TSP MCP μ„œλ²„μ˜ μ‹œκ°ν™”

TSP MCP μ„œλ²„λŠ” κ³ ν’ˆμ§ˆ PNG 이미지 μ‹œκ°ν™”λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€:

πŸ–ΌοΈ 이미지 기반 μ‹œκ°ν™”

  • 기술: HTML5 Canvas + Node.js Canvas 라이브러리
  • κ΅¬ν˜„: ImageTSPVisualizer 클래슀 (src/image-visualizer.ts)
  • 좜λ ₯: PNG 이미지 파일둜 μ €μž₯ ν›„ μžλ™ μ—΄κΈ°
  • μž₯점:
    • κ³ ν’ˆμ§ˆ λž˜μŠ€ν„° 이미지
    • λ‹€μ–‘ν•œ μŠ€νƒ€μΌ ν…Œλ§ˆ 지원
    • κΈ€λ‘œμš° 효과 λ“± κ³ κΈ‰ κ·Έλž˜ν”½ 효과
    • μ™ΈλΆ€ μ˜μ‘΄μ„± 없이 독립 μ‹€ν–‰
    • Claude artifacts 없이 μ¦‰μ‹œ μ‹œμŠ€ν…œ 파일 생성

μ§€μ›ν•˜λŠ” μŠ€νƒ€μΌ ν…Œλ§ˆ:

'modern'   // κΈ°λ³Έ - 흰 λ°°κ²½, λΉ¨κ°„ λ„μ‹œ, νŒŒλž€ 경둜
'dark'     // μ–΄λ‘μš΄ ν…Œλ§ˆ - 검은 λ°°κ²½, 밝은 색상
'minimal'  // λ―Έλ‹ˆλ©€ - νšŒμƒ‰ν†€ λ‹¨μˆœν•œ λ””μžμΈ
'colorful' // μ»¬λŸ¬ν’€ - λ‹€μ±„λ‘œμš΄ 색상 μ‘°ν•©

🎯 μ‹œκ°ν™” μ‚¬μš© 방법

TSP ν•΄κ²° + μ‹œκ°ν™” (ꢌμž₯)

{
  "name": "solve_and_visualize_tsp",
  "arguments": {
    "cities": [{"x": 0, "y": 0}, {"x": 5, "y": 3}],
    "options": {
      "style": "dark",
      "width": 1200,
      "height": 800
    }
  }
}

κΈ°μ‘΄ 경둜 μ‹œκ°ν™”

{
  "name": "visualize_tsp_route", 
  "arguments": {
    "cities": [{"x": 0, "y": 0}, {"x": 5, "y": 3}],
    "route": [0, 1],
    "options": {
      "style": "minimal"
    }
  }
}