odh-mcp-server
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., "@odh-mcp-serverFind accommodations near Bolzano center with pool"
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.
odh-mcp-server
A FastMCP server that exposes hospitality data — accommodations, events, and gastronomy — through a unified MCP interface. Part of the GaiaWM ecosystem, it is open source, self-hostable, and designed to work both locally (stdio) and remotely (SSE / streamable-http).
The server maintains a "current world" in session context. A set_world tool switches the active world. All other tools query the current world transparently. The same find_accommodations call returns real hotel data from South Tyrol or fictional inn listings from a Spelljammer asteroid city.
Quickstart
# Install with uv (recommended)
pip install uv
# Run locally via stdio (Claude Desktop, etc.)
uvx odh-mcp-server --stdio
# Or clone and run directly
git clone https://github.com/openfantasymap/odh-mcp-server
cd odh-mcp-server
uv run server.py --stdioRelated MCP server: Basic MCP
Available worlds
World ID | Name | Data source | Notes |
| South Tyrol | Open Data Hub ( | Real hotels, events, restaurants. WGS84 coordinates. |
| The Rock of Bral | JSON fixtures | Spelljammer city-asteroid. Mock data for demo/roleplay. |
Tools
Tool | Description |
| Switch the active world. Returns world description on success. |
| Describe the current world and how to query it. |
| Search for hotels / inns with optional geo, feature, and date filters. |
| Search for events with optional geo, date, and topic filters. |
| Search for restaurants and food places with geo and cuisine filters. |
Example session
# 1. Start in South Tyrol
set_world("earth-313")
→ World set to: South Tyrol (earth-313)
Real hospitality data from the Open Data Hub...
# 2. Find hotels near Bolzano with a pool
find_accommodations(near="Bolzano centro", features=["pool"], max_results=3)
→ Found 2 accommodations in South Tyrol (earth-313), near Bolzano centro...
# 3. Switch to the Rock of Bral
set_world("bral")
→ World set to: The Rock of Bral
A city-asteroid drifting through Wildspace...
# 4. Find an inn near the Great Market
find_accommodations(near="great market", radius_m=800)
→ Found 1 inn in the Rock of Bral, near great market...
1. The Raised Cup [inn] (budget) — A lively taproom in the lower city...Claude Desktop config
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"odh-world": {
"command": "uv",
"args": ["run", "/path/to/odh-mcp-server/server.py", "--stdio"]
}
}
}Or, once published to PyPI:
{
"mcpServers": {
"odh-world": {
"command": "uvx",
"args": ["odh-mcp-server", "--stdio"]
}
}
}Session context notes
The server uses contextvars.ContextVar to track the current world per session.
SSE / streamable-http transport: each client connection gets its own context — multiple users can be in different worlds simultaneously.
stdio transport: single process, single context — fine for local single-user use (Claude Desktop, CLI).
Adding a new world
Create
worlds/myworld.pyand implement theWorldAdapterabstract base class:
from worlds.base import WorldAdapter, Accommodation, Event, GastronomyPlace, WorldInfo
class MyWorldAdapter(WorldAdapter):
async def find_accommodations(self, ...) -> list[Accommodation]: ...
async def find_events(self, ...) -> list[Event]: ...
async def find_gastronomy(self, ...) -> list[GastronomyPlace]: ...
async def describe(self) -> WorldInfo: ...Register it in
worlds/__init__.py:
from .myworld import MyWorldAdapter
WORLD_REGISTRY = {
"earth-313": Earth313Adapter(),
"bral": BralAdapter(),
"myworld": MyWorldAdapter(), # add this line
}That's it. All tools will automatically support your new world once it's in the registry.
Configuration
Copy .env.example to .env and adjust as needed:
DEFAULT_WORLD=earth-313
ODH_BASE_URL=https://tourism.api.opendatahub.com/v1
ODH_TIMEOUT=10
NOMINATIM_URL=https://nominatim.openstreetmap.org
NOMINATIM_USER_AGENT=odh-mcp-server/0.1 (opensource hospitality MCP)License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceFastMCP is a comprehensive MCP server allowing secure and standardized data and functionality exposure to LLM applications, offering resources, tools, and prompt management for efficient LLM interactions.3MIT
- Alicense-qualityDmaintenanceA simple MCP server built with FastMCP for experimentation and learning purposes. Includes basic web tools like article fetching and serves as a human-readable template for building custom MCP servers.AGPL 3.0
- Alicense-qualityCmaintenanceA universal MCP server that acts as a unified gateway for dynamically connecting and managing multiple MCP servers via a single HTTP endpoint.106MIT
- AlicenseAqualityCmaintenanceMCP server providing cosiness scores for about 6,300 independent hotels, with tools to find hotels by city/country and retrieve detailed feeling data.2MIT
Related MCP Connectors
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
Unofficial read-only MCP server for VeryChic hotel offers
Hosted MCP server to manage a restaurant menu from AI agents - 39 tools over the DuckHub API.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/openfantasymap/odh-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server