Search places

Find place candidates by name or traveler intent, with optional country, destination, or proximity filters. Follow profile links to verify details.

What it returns

Read a returned place

Each item includes a canonical profile url and a bounded set of preview fields. Treat a search match as a candidate, then read the profile before presenting factual details in a planner. This schema-shaped response example shows the required envelope and an item; the place ID and canonical URL are placeholders, and optional release metadata or warnings may also be present:

{
  "schemaVersion": "2",
  "locale": "en",
  "completeness": "search-index-release",
  "data": {
    "scope": { "kind": "destination", "code": "cz_prague" },
    "count": 1,
    "items": [
      {
        "id": "<returned-place-id>",
        "entityType": "place",
        "name": "<returned place name>",
        "url": "<canonical profile URL returned by GoVisit>",
        "match": "intent",
        "score": null
      }
    ]
  }
}

The place overview tool reads a bounded overview of published profile facts through browser WebMCP or POST /api/tools/v1/get_place_overview. For HTTP calls, use the pathname from the returned canonical profile URL as pagePath, including its language prefix. Follow the overview's source links and scope limits when presenting factual details. The search score is a ranking signal, not a suitability probability.

Interpretation limits

Search returns candidates, not verified recommendations. Constraints intersect and never silently widen. Name-mode and geography constraints have release-specific availability; inspect completeness, warnings, counts, and truncation. Distance is straight-line meters, not travel time.

WebMCP

Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Place or destination name, or the traveler's intent."
    },
    "mode": {
      "type": "string",
      "enum": [
        "auto",
        "name",
        "intent"
      ],
      "default": "auto",
      "description": "Name lookup, intent retrieval, or name-first auto discovery."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ],
      "description": "Requested response language; defaults to the page language."
    },
    "destination": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_]*$",
      "description": "Stable destination code or all. Defaults to the current destination, otherwise all."
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "ISO country scope; intersects destination and proximity where the public geography projection is available."
    },
    "near": {
      "type": "object",
      "properties": {
        "placeId": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
          "description": "Reference GERS Place resolved from the same public release."
        },
        "coordinates": {
          "type": "object",
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          },
          "required": [
            "latitude",
            "longitude"
          ],
          "additionalProperties": false
        },
        "radiusMeters": {
          "type": "number",
          "minimum": 1,
          "maximum": 100000
        }
      },
      "required": [
        "radiusMeters"
      ],
      "additionalProperties": false,
      "oneOf": [
        {
          "required": [
            "placeId"
          ],
          "not": {
            "required": [
              "coordinates"
            ]
          }
        },
        {
          "required": [
            "coordinates"
          ],
          "not": {
            "required": [
              "placeId"
            ]
          }
        }
      ]
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "properties": {
          "mode": {
            "const": "intent"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "minLength": 3
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "mode": {
            "const": "name"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "maxLength": 120
          },
          "limit": {
            "maximum": 10
          }
        }
      }
    }
  ]
}
Output schema
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "string",
      "const": "2"
    },
    "locale": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ]
    },
    "completeness": {
      "type": "string",
      "enum": [
        "search-index-release",
        "partial-geography",
        "invalid-input",
        "unavailable"
      ]
    },
    "release": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "retryAfter": {
      "type": "number"
    },
    "data": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "all",
                "country",
                "destination"
              ]
            },
            "code": {
              "type": "string"
            },
            "country": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "near": {
              "type": "object",
              "description": "Resolved proximity constraint; never interpreted as travel time."
            }
          },
          "required": [
            "kind",
            "code"
          ],
          "additionalProperties": false
        },
        "items": {
          "type": "array",
          "maxItems": 20,
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "locality": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "address": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Street address, for example \"Pobřežní 311/1\"; null when the place has none."
              },
              "coordinates": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "The place's point (WGS 84); null when it has none.",
                "properties": {
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "latitude",
                  "longitude"
                ]
              },
              "url": {
                "type": "string",
                "description": "The place's canonical GoVisit page."
              },
              "score": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Engine-specific ranking signal; compare only within the same match method, not a suitability probability."
              },
              "entityType": {
                "type": "string",
                "const": "place"
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "Public GERS Place identity."
              },
              "match": {
                "type": "string",
                "enum": [
                  "name",
                  "intent"
                ]
              },
              "profileQuality": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Published profile completeness signal; not guest fit."
              },
              "categoryCode": {
                "type": "string",
                "description": "Published canonical category, not an amenity or suitability verdict."
              },
              "destinationCodes": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                },
                "description": "Canonical membership; null is unestablished and an empty array is known empty."
              },
              "operatingStatus": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "operational",
                  "temporarily_closed",
                  "permanently_closed",
                  null
                ],
                "description": "Published lifecycle status, not open-now or booking availability."
              },
              "distanceMeters": {
                "type": "number",
                "minimum": 0,
                "description": "Straight-line geographic distance from the explicit proximity reference, not travel time."
              }
            },
            "required": [
              "id",
              "entityType",
              "name",
              "url",
              "match",
              "score"
            ]
          }
        },
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "coverage": {
          "type": "object",
          "description": "Bounded candidate observation, not exhaustive market coverage.",
          "properties": {
            "candidatesRetrieved": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "examined": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "unestablished": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "eligible": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "returned": {
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "candidateBudget": {
              "const": 200
            },
            "indexRowsScanned": {
              "type": "integer",
              "minimum": 0
            },
            "truncated": {
              "type": "boolean"
            }
          },
          "required": [
            "candidatesRetrieved",
            "examined",
            "unestablished",
            "eligible",
            "returned",
            "candidateBudget",
            "indexRowsScanned",
            "truncated"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "scope",
        "items",
        "count"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "schemaVersion",
    "locale",
    "completeness",
    "data"
  ]
}

On a GoVisit page in a compatible browser, use the registered WebMCP tool. Pass a destination code returned by search_destinations when the traveler has selected a destination.

const context = document.modelContext;
if (!context) throw new Error('This browser does not expose WebMCP on this page.');
const tool = (await context.getTools()).find((item) => item.name === 'search_places');
if (!tool) throw new Error('search_places is not registered on this page.');
const raw = await context.executeTool(tool, {
  query: 'Cafe Slavia', mode: 'name', destination: 'cz_prague', language: 'en', limit: 5
});
const result = typeof raw === "string" ? JSON.parse(raw) : raw.structuredContent ?? raw;
console.log(result.data.items);

HTTP API

Search defaults to English (en) and has no destination filter unless you supply one. Page defaults mentioned in the schema apply to WebMCP.

Request body schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Place or destination name, or the traveler's intent."
    },
    "mode": {
      "type": "string",
      "enum": [
        "auto",
        "name",
        "intent"
      ],
      "default": "auto",
      "description": "Name lookup, intent retrieval, or name-first auto discovery."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ],
      "description": "Requested response language; defaults to the page language."
    },
    "destination": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_]*$",
      "description": "Stable destination code or all. Defaults to the current destination, otherwise all."
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "ISO country scope; intersects destination and proximity where the public geography projection is available."
    },
    "near": {
      "type": "object",
      "properties": {
        "placeId": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
          "description": "Reference GERS Place resolved from the same public release."
        },
        "coordinates": {
          "type": "object",
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          },
          "required": [
            "latitude",
            "longitude"
          ],
          "additionalProperties": false
        },
        "radiusMeters": {
          "type": "number",
          "minimum": 1,
          "maximum": 100000
        }
      },
      "required": [
        "radiusMeters"
      ],
      "additionalProperties": false,
      "oneOf": [
        {
          "required": [
            "placeId"
          ],
          "not": {
            "required": [
              "coordinates"
            ]
          }
        },
        {
          "required": [
            "coordinates"
          ],
          "not": {
            "required": [
              "placeId"
            ]
          }
        }
      ]
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "properties": {
          "mode": {
            "const": "intent"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "minLength": 3
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "mode": {
            "const": "name"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "maxLength": 120
          },
          "limit": {
            "maximum": 10
          }
        }
      }
    }
  ]
}
Successful response schema
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "string",
      "const": "2"
    },
    "locale": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ]
    },
    "completeness": {
      "type": "string",
      "enum": [
        "search-index-release",
        "partial-geography",
        "invalid-input",
        "unavailable"
      ]
    },
    "release": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "retryAfter": {
      "type": "number"
    },
    "data": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "all",
                "country",
                "destination"
              ]
            },
            "code": {
              "type": "string"
            },
            "country": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "near": {
              "type": "object",
              "description": "Resolved proximity constraint; never interpreted as travel time."
            }
          },
          "required": [
            "kind",
            "code"
          ],
          "additionalProperties": false
        },
        "items": {
          "type": "array",
          "maxItems": 20,
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "locality": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "address": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Street address, for example \"Pobřežní 311/1\"; null when the place has none."
              },
              "coordinates": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "The place's point (WGS 84); null when it has none.",
                "properties": {
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "latitude",
                  "longitude"
                ]
              },
              "url": {
                "type": "string",
                "description": "The place's canonical GoVisit page."
              },
              "score": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Engine-specific ranking signal; compare only within the same match method, not a suitability probability."
              },
              "entityType": {
                "type": "string",
                "const": "place"
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "Public GERS Place identity."
              },
              "match": {
                "type": "string",
                "enum": [
                  "name",
                  "intent"
                ]
              },
              "profileQuality": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Published profile completeness signal; not guest fit."
              },
              "categoryCode": {
                "type": "string",
                "description": "Published canonical category, not an amenity or suitability verdict."
              },
              "destinationCodes": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                },
                "description": "Canonical membership; null is unestablished and an empty array is known empty."
              },
              "operatingStatus": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "operational",
                  "temporarily_closed",
                  "permanently_closed",
                  null
                ],
                "description": "Published lifecycle status, not open-now or booking availability."
              },
              "distanceMeters": {
                "type": "number",
                "minimum": 0,
                "description": "Straight-line geographic distance from the explicit proximity reference, not travel time."
              }
            },
            "required": [
              "id",
              "entityType",
              "name",
              "url",
              "match",
              "score"
            ]
          }
        },
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "coverage": {
          "type": "object",
          "description": "Bounded candidate observation, not exhaustive market coverage.",
          "properties": {
            "candidatesRetrieved": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "examined": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "unestablished": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "eligible": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "returned": {
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "candidateBudget": {
              "const": 200
            },
            "indexRowsScanned": {
              "type": "integer",
              "minimum": 0
            },
            "truncated": {
              "type": "boolean"
            }
          },
          "required": [
            "candidatesRetrieved",
            "examined",
            "unestablished",
            "eligible",
            "returned",
            "candidateBudget",
            "indexRowsScanned",
            "truncated"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "scope",
        "items",
        "count"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "schemaVersion",
    "locale",
    "completeness",
    "data"
  ]
}

Send a JSON POST to https://govisit.ai/api/tools/v1/search_places. See the HTTP API guide for shared conventions.

Supply the traveler-established scope and language. HTTP API requests use explicit inputs and require no authentication, browser cookies, or persistent session.

curl

curl --fail-with-body --silent --show-error https://govisit.ai/api/tools/v1/search_places \
  -H 'Content-Type: application/json' \
  --data '{"query":"Cafe Slavia","mode":"name","destination":"cz_prague","language":"en","limit":5}'

JavaScript

const response = await fetch('https://govisit.ai/api/tools/v1/search_places', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"query": "Cafe Slavia", "mode": "name", "destination": "cz_prague", "language": "en", "limit": 5}),
});
let result;
try {
  result = await response.json();
} catch {
  throw new Error(`GoVisit returned a non-JSON response (HTTP ${response.status})`);
}
if (!response.ok) {
  const retryAfter = response.headers.get('Retry-After');
  throw new Error(`GoVisit returned HTTP ${response.status}${retryAfter ? `; retry after ${retryAfter}s` : ''}: ${JSON.stringify(result)}`);
}
if (result.completeness !== 'search-index-release') {
  throw new Error(`Search did not complete: ${result.error ?? result.warnings?.join('; ') ?? result.completeness}`);
}
console.log(result.data.items);

Python

import json
from urllib.error import HTTPError
from urllib.request import Request, urlopen

url = 'https://govisit.ai/api/tools/v1/search_places'
payload = {'query': 'Cafe Slavia', 'mode': 'name', 'destination': 'cz_prague', 'language': 'en', 'limit': 5}
request = Request(url, data=json.dumps(payload).encode(), headers={'Content-Type': 'application/json'}, method='POST')
try:
    with urlopen(request) as response:
        result = json.load(response)
except HTTPError as error:
    body = error.read().decode('utf-8', 'replace')
    retry_after = error.headers.get('Retry-After')
    raise RuntimeError(f'GoVisit returned HTTP {error.code}; Retry-After={retry_after}: {body}') from error
if result.get('completeness') != 'search-index-release':
    raise RuntimeError(result.get('error') or result.get('warnings') or result.get('completeness'))
for item in result.get('data', {}).get('items', []):
    print(item.get('name'), item.get('url'))

The response is the same result object exposed by WebMCP. Inspect data.items, data.scope, and data.count; preserve any release, completeness, warnings, and truncated fields returned.

MCP

Search defaults to English (en) and has no destination filter unless you supply one. Page defaults mentioned in the schema apply to WebMCP.

Tool arguments schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Place or destination name, or the traveler's intent."
    },
    "mode": {
      "type": "string",
      "enum": [
        "auto",
        "name",
        "intent"
      ],
      "default": "auto",
      "description": "Name lookup, intent retrieval, or name-first auto discovery."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ],
      "description": "Requested response language; defaults to the page language."
    },
    "destination": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_]*$",
      "description": "Stable destination code or all. Defaults to the current destination, otherwise all."
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "ISO country scope; intersects destination and proximity where the public geography projection is available."
    },
    "near": {
      "type": "object",
      "properties": {
        "placeId": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
          "description": "Reference GERS Place resolved from the same public release."
        },
        "coordinates": {
          "type": "object",
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          },
          "required": [
            "latitude",
            "longitude"
          ],
          "additionalProperties": false
        },
        "radiusMeters": {
          "type": "number",
          "minimum": 1,
          "maximum": 100000
        }
      },
      "required": [
        "radiusMeters"
      ],
      "additionalProperties": false,
      "oneOf": [
        {
          "required": [
            "placeId"
          ],
          "not": {
            "required": [
              "coordinates"
            ]
          }
        },
        {
          "required": [
            "coordinates"
          ],
          "not": {
            "required": [
              "placeId"
            ]
          }
        }
      ]
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "properties": {
          "mode": {
            "const": "intent"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "minLength": 3
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "mode": {
            "const": "name"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "maxLength": 120
          },
          "limit": {
            "maximum": 10
          }
        }
      }
    }
  ]
}
Structured result schema
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "string",
      "const": "2"
    },
    "locale": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ]
    },
    "completeness": {
      "type": "string",
      "enum": [
        "search-index-release",
        "partial-geography",
        "invalid-input",
        "unavailable"
      ]
    },
    "release": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "retryAfter": {
      "type": "number"
    },
    "data": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "all",
                "country",
                "destination"
              ]
            },
            "code": {
              "type": "string"
            },
            "country": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "near": {
              "type": "object",
              "description": "Resolved proximity constraint; never interpreted as travel time."
            }
          },
          "required": [
            "kind",
            "code"
          ],
          "additionalProperties": false
        },
        "items": {
          "type": "array",
          "maxItems": 20,
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "locality": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "address": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Street address, for example \"Pobřežní 311/1\"; null when the place has none."
              },
              "coordinates": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "The place's point (WGS 84); null when it has none.",
                "properties": {
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "latitude",
                  "longitude"
                ]
              },
              "url": {
                "type": "string",
                "description": "The place's canonical GoVisit page."
              },
              "score": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Engine-specific ranking signal; compare only within the same match method, not a suitability probability."
              },
              "entityType": {
                "type": "string",
                "const": "place"
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "Public GERS Place identity."
              },
              "match": {
                "type": "string",
                "enum": [
                  "name",
                  "intent"
                ]
              },
              "profileQuality": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Published profile completeness signal; not guest fit."
              },
              "categoryCode": {
                "type": "string",
                "description": "Published canonical category, not an amenity or suitability verdict."
              },
              "destinationCodes": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                },
                "description": "Canonical membership; null is unestablished and an empty array is known empty."
              },
              "operatingStatus": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "operational",
                  "temporarily_closed",
                  "permanently_closed",
                  null
                ],
                "description": "Published lifecycle status, not open-now or booking availability."
              },
              "distanceMeters": {
                "type": "number",
                "minimum": 0,
                "description": "Straight-line geographic distance from the explicit proximity reference, not travel time."
              }
            },
            "required": [
              "id",
              "entityType",
              "name",
              "url",
              "match",
              "score"
            ]
          }
        },
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "coverage": {
          "type": "object",
          "description": "Bounded candidate observation, not exhaustive market coverage.",
          "properties": {
            "candidatesRetrieved": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "examined": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "unestablished": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "eligible": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "returned": {
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "candidateBudget": {
              "const": 200
            },
            "indexRowsScanned": {
              "type": "integer",
              "minimum": 0
            },
            "truncated": {
              "type": "boolean"
            }
          },
          "required": [
            "candidatesRetrieved",
            "examined",
            "unestablished",
            "eligible",
            "returned",
            "candidateBudget",
            "indexRowsScanned",
            "truncated"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "scope",
        "items",
        "count"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "schemaVersion",
    "locale",
    "completeness",
    "data"
  ]
}

Connect a Streamable HTTP MCP client to https://govisit.ai/mcp and call search_places. Pass the query, language and any traveler-selected geography explicitly, using the HTTP API input schema. A remote MCP client has no GoVisit page context.

const result = await client.callTool({
  name: "search_places",
  arguments: { query: "Cafe Slavia", mode: "name", destination: "cz_prague", language: "en", limit: 5 },
});
if (result.isError) throw new Error(result.content[0]?.text ?? "GoVisit tool call failed");
console.log(result.structuredContent);

Agent Skills

Search defaults to English (en) and has no destination filter unless you supply one. Page defaults mentioned in the schema apply to WebMCP.

Tool input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 200,
      "description": "Place or destination name, or the traveler's intent."
    },
    "mode": {
      "type": "string",
      "enum": [
        "auto",
        "name",
        "intent"
      ],
      "default": "auto",
      "description": "Name lookup, intent retrieval, or name-first auto discovery."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ],
      "description": "Requested response language; defaults to the page language."
    },
    "destination": {
      "type": "string",
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9][A-Za-z0-9_]*$",
      "description": "Stable destination code or all. Defaults to the current destination, otherwise all."
    },
    "country": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "ISO country scope; intersects destination and proximity where the public geography projection is available."
    },
    "near": {
      "type": "object",
      "properties": {
        "placeId": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
          "description": "Reference GERS Place resolved from the same public release."
        },
        "coordinates": {
          "type": "object",
          "properties": {
            "latitude": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "longitude": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          },
          "required": [
            "latitude",
            "longitude"
          ],
          "additionalProperties": false
        },
        "radiusMeters": {
          "type": "number",
          "minimum": 1,
          "maximum": 100000
        }
      },
      "required": [
        "radiusMeters"
      ],
      "additionalProperties": false,
      "oneOf": [
        {
          "required": [
            "placeId"
          ],
          "not": {
            "required": [
              "coordinates"
            ]
          }
        },
        {
          "required": [
            "coordinates"
          ],
          "not": {
            "required": [
              "placeId"
            ]
          }
        }
      ]
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "properties": {
          "mode": {
            "const": "intent"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "minLength": 3
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "mode": {
            "const": "name"
          }
        },
        "required": [
          "mode"
        ]
      },
      "then": {
        "properties": {
          "query": {
            "maxLength": 120
          },
          "limit": {
            "maximum": 10
          }
        }
      }
    }
  ]
}
Tool output schema
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "string",
      "const": "2"
    },
    "locale": {
      "type": "string",
      "enum": [
        "en",
        "cs"
      ]
    },
    "completeness": {
      "type": "string",
      "enum": [
        "search-index-release",
        "partial-geography",
        "invalid-input",
        "unavailable"
      ]
    },
    "release": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "retryAfter": {
      "type": "number"
    },
    "data": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "enum": [
                "all",
                "country",
                "destination"
              ]
            },
            "code": {
              "type": "string"
            },
            "country": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            },
            "near": {
              "type": "object",
              "description": "Resolved proximity constraint; never interpreted as travel time."
            }
          },
          "required": [
            "kind",
            "code"
          ],
          "additionalProperties": false
        },
        "items": {
          "type": "array",
          "maxItems": 20,
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "locality": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "address": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Street address, for example \"Pobřežní 311/1\"; null when the place has none."
              },
              "coordinates": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "The place's point (WGS 84); null when it has none.",
                "properties": {
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "latitude",
                  "longitude"
                ]
              },
              "url": {
                "type": "string",
                "description": "The place's canonical GoVisit page."
              },
              "score": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Engine-specific ranking signal; compare only within the same match method, not a suitability probability."
              },
              "entityType": {
                "type": "string",
                "const": "place"
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "Public GERS Place identity."
              },
              "match": {
                "type": "string",
                "enum": [
                  "name",
                  "intent"
                ]
              },
              "profileQuality": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Published profile completeness signal; not guest fit."
              },
              "categoryCode": {
                "type": "string",
                "description": "Published canonical category, not an amenity or suitability verdict."
              },
              "destinationCodes": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                },
                "description": "Canonical membership; null is unestablished and an empty array is known empty."
              },
              "operatingStatus": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "operational",
                  "temporarily_closed",
                  "permanently_closed",
                  null
                ],
                "description": "Published lifecycle status, not open-now or booking availability."
              },
              "distanceMeters": {
                "type": "number",
                "minimum": 0,
                "description": "Straight-line geographic distance from the explicit proximity reference, not travel time."
              }
            },
            "required": [
              "id",
              "entityType",
              "name",
              "url",
              "match",
              "score"
            ]
          }
        },
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "coverage": {
          "type": "object",
          "description": "Bounded candidate observation, not exhaustive market coverage.",
          "properties": {
            "candidatesRetrieved": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "examined": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "unestablished": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "eligible": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            },
            "returned": {
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "candidateBudget": {
              "const": 200
            },
            "indexRowsScanned": {
              "type": "integer",
              "minimum": 0
            },
            "truncated": {
              "type": "boolean"
            }
          },
          "required": [
            "candidatesRetrieved",
            "examined",
            "unestablished",
            "eligible",
            "returned",
            "candidateBudget",
            "indexRowsScanned",
            "truncated"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "scope",
        "items",
        "count"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "schemaVersion",
    "locale",
    "completeness",
    "data"
  ]
}

After installing GoVisit skills, ask your assistant to use govisit-search-places. The skill calls the GoVisit HTTP API.

Use GoVisit to find [business name or description] in [my chosen area]. Show matching places with their GoVisit profile links, and explain uncertain matches.

Skill package and contract

Skill source · Complete package · HTTP contract

The complete package includes its MIT license and versioned contract. GoVisit data remains subject to the GoVisit Data Use License.

Last updated: November 7, 2026