TravelType
Search and explore a global travel points-of-interest catalog (cities, countries, POIs).
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"travel-poi": {
"url": "https://mcp.traveltype.app"
}
}
}Remote endpoints
https://mcp.traveltype.appstreamable-httpWhat it can do
Tool inventory
Tools (7)
🟢list_cities(country, limit, offset)
List active cities ordered by POI count, with coordinates and Wikidata QID. Paginate with limit/offset; filter by ISO 3166-1 alpha-2 country code.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code filter, e.g. 'DE'."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum number of cities to return (1-100)."
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Number of cities to skip, for pagination."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"name_en": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": "string"
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"poi_count": {
"type": "integer"
},
"wikidata_qid": {
"type": [
"string",
"null"
]
}
},
"required": [
"slug",
"name",
"country_iso2",
"lat",
"lng",
"poi_count"
]
}
},
"total": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
}
},
"required": [
"cities",
"total",
"limit",
"offset"
]
}🟢get_city(slug, lang)
Get one city by slug, including POI count, top distinctive tags, top categories, and a sample of its top POIs.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "City slug, e.g. 'berlin'."
},
"lang": {
"type": "string",
"enum": [
"en",
"de"
],
"default": "en",
"description": "Language for human-readable name/description fields. EN is canonical."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"name_en": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": "string"
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"poi_count": {
"type": "integer"
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"top_tags": {
"type": "array",
"items": {
"type": "string"
}
},
"top_categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"slug",
"label"
]
}
},
"sample_pois": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"city_slug": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": [
"string",
"null"
]
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"slug",
"label"
]
}
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"osm_id": {
"type": [
"string",
"null"
]
},
"google_place_id": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"image_source": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"lat",
"lng",
"tags",
"url"
]
}
}
},
"required": [
"slug",
"name",
"country_iso2",
"lat",
"lng",
"poi_count"
]
}🟢list_countries
List every country that has at least one active city, with city and POI counts.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"countries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"iso2": {
"type": "string"
},
"name_de": {
"type": "string"
},
"name_en": {
"type": "string"
},
"name_local": {
"type": [
"string",
"null"
]
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"city_count": {
"type": "integer"
},
"poi_count": {
"type": "integer"
}
},
"required": [
"iso2",
"name_de",
"name_en",
"city_count",
"poi_count"
]
}
}
},
"required": [
"countries"
]
}🟢get_country(iso2)
Get one country by ISO 3166-1 alpha-2 code, including its active cities (top 100 by POI count).
Input Schema
{
"type": "object",
"properties": {
"iso2": {
"type": "string",
"description": "ISO 3166-1 alpha-2 code, e.g. 'DE'."
}
},
"required": [
"iso2"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"iso2": {
"type": "string"
},
"name_de": {
"type": "string"
},
"name_en": {
"type": "string"
},
"name_local": {
"type": [
"string",
"null"
]
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"city_count": {
"type": "integer"
},
"poi_count": {
"type": "integer"
},
"cities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"name_en": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": "string"
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"poi_count": {
"type": "integer"
},
"wikidata_qid": {
"type": [
"string",
"null"
]
}
},
"required": [
"slug",
"name",
"country_iso2",
"lat",
"lng",
"poi_count"
]
}
}
},
"required": [
"iso2",
"name_de",
"name_en",
"city_count",
"poi_count"
]
}🟢search_pois(q, city, tags, limit, lang)
Free-text POI search with prefix/tag/fuzzy ranking plus popularity and geo boosts. Provide `q` (free text, min 2 chars) and/or `city` (slug); with both, the search is scoped to that city. Optionally narrow with `tags` (a POI must carry all of them). At least one of `q` or `city` is required.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free-text query (min 2 chars)."
},
"city": {
"type": "string",
"description": "Restrict to a city slug."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; a POI must carry all of them."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Maximum number of POIs to return (1-50)."
},
"lang": {
"type": "string",
"enum": [
"en",
"de"
],
"default": "en",
"description": "Language for human-readable name/description fields. EN is canonical."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"pois": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"city_slug": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": [
"string",
"null"
]
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"slug",
"label"
]
}
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"osm_id": {
"type": [
"string",
"null"
]
},
"google_place_id": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"image_source": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"lat",
"lng",
"tags",
"url"
]
}
},
"count": {
"type": "integer"
}
},
"required": [
"pois",
"count"
]
}🟢get_poi_details(id, lang)
Get one POI by UUID or slug, with full enrichment: coordinates, approved tags, categories, Wikidata/OSM/Google identifiers, and hero image.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "POI UUID or slug."
},
"lang": {
"type": "string",
"enum": [
"en",
"de"
],
"default": "en",
"description": "Language for human-readable name/description fields. EN is canonical."
}
},
"required": [
"id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"city_slug": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": [
"string",
"null"
]
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"slug",
"label"
]
}
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"osm_id": {
"type": [
"string",
"null"
]
},
"google_place_id": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"image_source": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"lat",
"lng",
"tags",
"url"
]
}🟢find_similar_pois(id, limit, lang)
Find the nearest POIs to the given one by tag-cosine similarity (shared distinctive tags) — 'more like this'. Empty when the POI has only generic tags.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "POI UUID or slug."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"default": 10,
"description": "Maximum number of similar POIs to return (1-30)."
},
"lang": {
"type": "string",
"enum": [
"en",
"de"
],
"default": "en",
"description": "Language for human-readable name/description fields. EN is canonical."
}
},
"required": [
"id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"pois": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"city_slug": {
"type": [
"string",
"null"
]
},
"country_iso2": {
"type": [
"string",
"null"
]
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"slug",
"label"
]
}
},
"wikidata_qid": {
"type": [
"string",
"null"
]
},
"osm_id": {
"type": [
"string",
"null"
]
},
"google_place_id": {
"type": [
"string",
"null"
]
},
"image_url": {
"type": [
"string",
"null"
]
},
"image_source": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"slug",
"name",
"lat",
"lng",
"tags",
"url"
]
}
},
"count": {
"type": "integer"
}
},
"required": [
"pois",
"count"
]
}Community
Evidence