# ILP Drone Delivery MCP Server
Model Context Protocol server enabling Large Language Models to interact with the ILP Drone Delivery System through natural language
## Overview
This MCP server allows AI assistants like Claude to plan drone deliveries, check availability, and visualize routes using natural language queries instead of manual API calls.
**Example usage:**
```
User: "Can you plan a delivery to Edinburgh Castle with 5kg capacity?"
Claude: [Uses MCP tools] "I can send Drone 3, estimated cost $12.50, 45 moves..."
```
## Features
### Available Tools
1. **list_available_drones** - Get all drones with capabilities
2. **get_drone_details** - Get specific drone information
3. **plan_delivery** - Plan a single delivery with cost/time estimates
4. **check_drone_availability** - Check which drones can handle requirements
5. **get_delivery_geojson** - Generate GeoJSON for map visualization
6. **plan_multiple_deliveries** - Plan multi-drone delivery routes
## Prerequisites
- **Node.js** 18+ installed
- **ILP CW2 Service** running on http://localhost:8080
- **Claude Desktop** (for LLM integration) OR manual testing
## π§ Installation
### Step 1: Set Up Project
```bash
cd ilp-mcp-server
# Install dependencies
npm install
# Make server executable
chmod +x server.js
# Link globally (for Claude Desktop)
npm link
```
### Step 2: Start Your ILP Service
```bash
cd ILPCW2
java -jar target/*.jar app.jar
```
Verify it's running: `curl http://localhost:8080/api/v1/dronesWithCooling/false`
### Step 3: Test the MCP Server
```bash
cd ilp-mcp-server
npm test
```
**Expected output:**
```
π§ͺ Testing ILP MCP Server
1οΈβ£ Testing API connection...
β
Connected! Found 8 drones
2οΈβ£ Testing list_available_drones...
β
Success! Retrieved 8 drones
3οΈβ£ Testing plan_delivery...
β
Success! Planned delivery
Cost: $11.06
Moves: 26
Drone: 1
4οΈβ£ Testing get_delivery_geojson...
β
Success! Generated GeoJSON
Type: FeatureCollection
Features: 2
β
All tests passed! (4/4)
```
## π€ Claude Desktop Integration
### Configuration
Edit your Claude Desktop config file:
**Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
Add this configuration:
```json
{
"mcpServers": {
"ilp-drone": {
"command": "node",
"args": ["/Users/rheabose/ilp-mcp-server/server.js"]
}
}
}
```
## π¬ Example Queries
Try these in Claude Desktop:
### Basic Queries
```
"What drones are available?"
"Show me drones with cooling capability"
"Get details for drone 3"
```
### Planning Deliveries
```
"Plan a delivery to coordinates (-3.188, 55.945) with 4kg capacity"
"I need to deliver 5kg with heating to Edinburgh Castle"
"Can you plan a delivery to (lng: -3.19, lat: 55.94) requiring cooling?"
```
### Checking Availability
```
"Which drones can handle a 6kg delivery with heating?"
"Check if any drones are available for a 3kg cooled delivery"
```
### Visualization
```
"Generate a GeoJSON path for a delivery to (-3.188, 55.945) with 4kg capacity"
"Show me the route visualization for a delivery to Edinburgh"
```
### Multi-Delivery
```
"Plan deliveries to these locations:
1. (-3.188, 55.945) - 4kg
2. (-3.192, 55.943) - 3kg
3. (-3.185, 55.946) - 5kg"
```
## π§ͺ Manual Testing (Without Claude Desktop)
You can test the MCP server manually using the test script:
```bash
npm test
```
Or test individual API calls:
```bash
# Test list drones
curl http://localhost:8080/api/v1/dronesWithCooling/false
# Test plan delivery
curl -X POST http://localhost:8080/api/v1/calcDeliveryPath \
-H "Content-Type: application/json" \
-d '[{"id":999,"requirements":{"capacity":4.0},"delivery":{"lng":-3.188,"lat":55.945}}]'
```
## ποΈ Architecture
```
βββββββββββββββββββ
β Claude Desktop β
β (LLM Client) β
ββββββββββ¬βββββββββ
β MCP Protocol (stdio)
β
ββββββββββΌβββββββββ
β MCP Server β
β (server.js) β
ββββββββββ¬βββββββββ
β HTTP REST API
β
ββββββββββΌβββββββββ
β ILP CW2 API β
β (Spring Boot) β
βββββββββββββββββββ
```
## π Tool Descriptions
### list_available_drones
- **Purpose:** Get all drones with capabilities
- **Parameters:**
- `hasCooling` (optional): Filter by cooling capability
- **Returns:** List of drones with capacity, features, costs
### plan_delivery
- **Purpose:** Plan a complete delivery route
- **Parameters:**
- `deliveryLng`, `deliveryLat`: Delivery location
- `capacity`: Required capacity in kg
- `heating`, `cooling` (optional): Temperature requirements
- `date` (optional): Delivery date
- **Returns:** Cost, moves, drone assignment, route summary
### check_drone_availability
- **Purpose:** Find drones matching specific requirements
- **Parameters:**
- `capacity`: Required capacity
- `heating`, `cooling` (optional): Temperature needs
- `date` (optional): Date to check
- **Returns:** List of available drone IDs
### get_delivery_geojson
- **Purpose:** Generate map visualization data
- **Parameters:** Delivery location and requirements
- **Returns:** GeoJSON with flight paths
## π€ Author
RheaBose
University of Edinburgh - Informatics Large Practical