Provides tools for managing Italian cities data stored in Elasticsearch, including capabilities for creating, retrieving, searching, updating, and deleting city records.
Click on "Install 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., "@Italian Cities MCP Serversearch for cities named 'Milan'"
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.
Italian Cities MCP Server
A Model Context Protocol (MCP) server for managing Italian cities with CRUD operations backed by Elasticsearch.
Architecture
The project consists of three main components:
Elasticsearch Database: Stores Italian cities data with a simple schema (city name only)
CRUD API Server: Express.js REST API for managing cities
MCP Server: MCP interface that communicates with the CRUD API to provide tools for AI assistants
┌─────────────────┐
│ MCP Server │
│ (stdio mode) │
└────────┬────────┘
│ HTTP
▼
┌─────────────────┐
│ CRUD API │
│ (Express.js) │
└────────┬────────┘
│ REST
▼
┌─────────────────┐
│ Elasticsearch │
│ (Database) │
└─────────────────┘Prerequisites
Node.js 20+
Docker and Docker Compose
npm or yarn
Installation
Clone the repository and install dependencies:
npm installCreate environment file:
cp .env.example .envBuild the TypeScript code:
npm run buildRunning with Docker
Start all services (Elasticsearch + CRUD API)
npm run docker:upThis will:
Start Elasticsearch on port 9200
Start the CRUD API on port 3000
Create the index and initialize the database with 30 Italian cities
Check logs
npm run docker:logsStop services
npm run docker:downRunning Locally (Development)
Option 1: Docker for Elasticsearch only
Start only Elasticsearch:
docker-compose up -d elasticsearchRun the CRUD API in development mode:
npm run dev:apiOption 2: All local (requires local Elasticsearch)
Ensure Elasticsearch is running locally on port 9200, then:
npm run dev:apiCRUD API Endpoints
The API server runs on http://localhost:3000 by default.
Health Check
GET /healthCities Endpoints
Create a city
POST /api/cities Content-Type: application/json {"nome": "Venezia"}Get all cities
GET /api/citiesGet city by ID
GET /api/cities/:idSearch cities by name
GET /api/cities/search/:nameUpdate a city
PUT /api/cities/:id Content-Type: application/json {"nome": "Venezia Mestre"}Delete a city
DELETE /api/cities/:id
MCP Server
Running the MCP Server
For development (with auto-reload):
npm run dev:mcpFor production:
npm run start:mcpConfiguring in Claude Desktop
Add this to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"varolio-cities": {
"command": "node",
"args": [
"/absolute/path/to/varolio/dist/mcp-server/index.js"
]
}
}
}Or for development with tsx:
{
"mcpServers": {
"varolio-cities": {
"command": "npx",
"args": [
"tsx",
"/absolute/path/to/varolio/src/mcp-server/index.ts"
]
}
}
}Important: Ensure the CRUD API server is running before using the MCP server.
MCP Tools
The MCP server provides the following tools:
1. create_city
Create a new Italian city in the database.
Parameters:
nome(string, required): Name of the Italian city
Example:
Create a new city called "Siena"2. list_cities
List all Italian cities in the database.
Example:
Show me all cities in the database3. get_city
Get a specific Italian city by ID.
Parameters:
id(string, required): ID of the city
Example:
Get the city with ID "abc123"4. search_cities
Search for Italian cities by name (supports fuzzy matching).
Parameters:
name(string, required): Name or partial name to search
Example:
Search for cities named "Milan"5. update_city
Update an existing Italian city name.
Parameters:
id(string, required): ID of the city to updatenome(string, required): New name for the city
Example:
Update city with ID "abc123" to "Milano"6. delete_city
Delete an Italian city from the database.
Parameters:
id(string, required): ID of the city to delete
Example:
Delete the city with ID "abc123"Database Initialization
The database is automatically initialized with 30 major Italian cities when the CRUD API starts for the first time. Cities include: Roma, Milano, Napoli, Torino, Palermo, Genova, Bologna, Firenze, and more.
To manually reinitialize the database:
npm run init:dbProject Structure
varolio/
├── src/
│ ├── types/ # TypeScript type definitions
│ ├── elasticsearch/ # Elasticsearch client and utilities
│ ├── crud-api/ # Express.js REST API
│ └── mcp-server/ # MCP server implementation
├── data/
│ └── init-cities.json # Initial cities data
├── docker-compose.yml # Docker orchestration
├── Dockerfile # Node.js backend container
├── package.json # Dependencies and scripts
└── tsconfig.json # TypeScript configurationEnvironment Variables
ELASTICSEARCH_HOST: Elasticsearch host URL (default: http://localhost:9200)ELASTICSEARCH_INDEX: Index name for cities (default: citta_italiane)API_PORT: CRUD API port (default: 3000)API_HOST: CRUD API host (default: localhost)NODE_ENV: Node environment (default: development)
Development
Watch mode for API
npm run dev:apiWatch mode for MCP server
npm run dev:mcpBuild TypeScript
npm run buildLicense
MIT
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.