List category places

Filter the published place cards shown on the current destination category page.

Availability

This tool is available through browser WebMCP on a matching GoVisit page and through POST /api/tools/v1/list_category_places. Its Agent Skill uses the HTTP adapter. Browser calls read the loaded page; HTTP calls supply its canonical pagePath explicitly.

Call in a compatible browser

const modelContext = document.modelContext;
if (!modelContext) throw new Error("This browser does not expose WebMCP on this page.");
const tool = (await modelContext.getTools()).find((entry) => entry.name === 'list_category_places');
if (!tool) throw new Error('list_category_places is not registered for the current page.');
const result = await modelContext.executeTool(tool, {"limit": 5});
console.log(result);

Registration is page-scoped; the exact URL patterns below the contract are generated from the catalog. Check getTools() before calling.

Call through HTTP

Use the pathname from an actual canonical GoVisit link, including its language prefix. The sample page path illustrates the shape; replace it with your selected published page. HTTP inputs add pagePath to the browser arguments. No cookies, browser session or inferred location are required. Queries, fragments, origins and cache-refresh flags are rejected. Language comes from the page path.

curl

curl --silent --show-error https://govisit.ai/api/tools/v1/list_category_places \
  -H 'Content-Type: application/json' \
  --data '{"pagePath": "/en/destinations/cz/prague/places/hotel/", "limit": 5}'

JavaScript

const response = await fetch("https://govisit.ai/api/tools/v1/list_category_places", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
  "pagePath": "/en/destinations/cz/prague/places/hotel/",
  "limit": 5
})
});
const result = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${result.error || "unavailable"}`);
console.log(result);

Python

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

request = Request(
    "https://govisit.ai/api/tools/v1/list_category_places",
    data=json.dumps({
  "pagePath": "/en/destinations/cz/prague/places/hotel/",
  "limit": 5
}).encode(),
    headers={"Content-Type": "application/json"},
    method="POST",
)
try:
    with urlopen(request) as response:
        result = json.load(response)
except HTTPError as error:
    result = json.load(error)
    raise RuntimeError(f"{error.code}: {result.get('error', 'unavailable')}") from error
print(result)

Successful results match the browser tool's published page projection, including its freshness and scope limits. The adapter uses GoVisit's existing page caches; it does not provide a fresh live availability check. An absent page returns 404; an unsupported section returns 400; unavailable or malformed page context returns 503. See Reliability for errors and shared request limits.

Input and output contract

Input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Optional published place name or partial name."
    },
    "category": {
      "type": "string",
      "description": "Optional published category code."
    },
    "audience": {
      "type": "string",
      "description": "Optional published audience label or code."
    },
    "accessibility": {
      "type": "string",
      "description": "Optional published accessibility label or code."
    },
    "neighborhood": {
      "type": "string",
      "description": "Optional published neighborhood."
    },
    "administrativeArea": {
      "type": "string",
      "description": "Optional published administrative area."
    },
    "activityType": {
      "type": "string",
      "description": "Optional published activity type."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "additionalProperties": false
}
Output schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array"
        },
        "count": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "items",
        "count"
      ]
    }
  },
  "required": [
    "data"
  ]
}
HTTP input schema
{
  "type": "object",
  "properties": {
    "pagePath": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "description": "Canonical GoVisit page path supplying this tool's published context; no origin, query or fragment."
    },
    "name": {
      "type": "string",
      "description": "Optional published place name or partial name."
    },
    "category": {
      "type": "string",
      "description": "Optional published category code."
    },
    "audience": {
      "type": "string",
      "description": "Optional published audience label or code."
    },
    "accessibility": {
      "type": "string",
      "description": "Optional published accessibility label or code."
    },
    "neighborhood": {
      "type": "string",
      "description": "Optional published neighborhood."
    },
    "administrativeArea": {
      "type": "string",
      "description": "Optional published administrative area."
    },
    "activityType": {
      "type": "string",
      "description": "Optional published activity type."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "additionalProperties": false,
  "required": [
    "pagePath"
  ]
}
HTTP error schema
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "const": "1"
    },
    "completeness": {
      "enum": [
        "invalid-input",
        "not-found",
        "unavailable"
      ]
    },
    "error": {
      "type": "string"
    }
  },
  "required": [
    "schemaVersion",
    "completeness",
    "error"
  ],
  "additionalProperties": false
}

The schemas above are rendered server-side from config/webmcp-tools.json, the canonical reviewed tool catalog. The WebMCP manifest also publishes the machine-readable contract; native RegisteredTool entries advertise an output-contract URL because that interface does not provide an inline outputSchema field.

Interpretation limits

This lists a bounded set of cards from the current category page. Filters apply to published card fields and do not make it a global search.

For the full current contract and linked context, see the WebMCP manifest and the WebMCP overview.

Last updated: October 10, 2026