Get category section

Read one named section of a published destination category page. The bounded result includes freshness metadata from the selected GoVisit page.

Category pages can use an inherited global or ancestor configuration. A destination's custom navigation does not remove the global category URLs: those pages remain available alongside custom category pages and resolve places inside the requested destination. Country category paths, such as /en/destinations/cz/places/accommodation/, use the same category tools. Read the selected page's metadata rather than assuming its category appears in the destination navigation.

What it returns

The requested section must exist on the current category page. Treat its contents as the page’s published projection.

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

WebMCP

Input schema
{
  "type": "object",
  "properties": {
    "section": {
      "type": "string",
      "enum": [
        "overview",
        "places"
      ]
    }
  },
  "required": [
    "section"
  ],
  "additionalProperties": false
}
Output schema
{
  "type": "object",
  "description": "Successful read of the sanitized published page snapshot. Unsupported sections reject the invocation.",
  "properties": {
    "schemaVersion": {
      "const": "1"
    },
    "pageType": {
      "const": "category"
    },
    "pageId": {
      "type": "string"
    },
    "locale": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    },
    "contentVersion": {
      "type": [
        "string",
        "number",
        "null"
      ]
    },
    "updatedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "freshness": {
      "type": "object",
      "properties": {
        "contentVersion": {
          "type": [
            "string",
            "number",
            "null"
          ]
        },
        "updatedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "contentVersion",
        "updatedAt"
      ],
      "additionalProperties": false
    },
    "completeness": {
      "const": "page-published-section"
    },
    "data": {
      "description": "The requested published section. Overview is an object; lists are arrays of at most 20 items; places/experiences may wrap items in an object; missing opening-hours data is null. Strings and nested lists are bounded by the WebMCP snapshot policy.",
      "type": [
        "object",
        "array",
        "string",
        "null"
      ],
      "maxItems": 20,
      "items": {
        "description": "Published JSON value; optional field shapes depend on the page projection."
      },
      "anyOf": [
        {
          "title": "Overview (section=overview)",
          "type": "object",
          "properties": {
            "destinationCode": {
              "type": "string"
            },
            "destinationName": {
              "type": "string"
            },
            "code": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "count": {
              "type": "number"
            },
            "isOther": {
              "type": "boolean"
            },
            "parentCode": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "destinationCode",
            "destinationName",
            "code",
            "label"
          ],
          "additionalProperties": false
        },
        {
          "title": "Published list section",
          "type": "array",
          "maxItems": 20,
          "items": {
            "description": "Published section records; fields depend on the section and the page projection."
          }
        },
        {
          "title": "Published structured section",
          "type": "object",
          "description": "Named public fields or an items list, such as places.items, location coordinates, opening hours or experience groups.",
          "properties": {
            "items": {
              "type": "array",
              "maxItems": 20,
              "items": {
                "type": "object"
              }
            }
          }
        },
        {
          "title": "Published text section",
          "type": "string",
          "maxLength": 4000
        },
        {
          "title": "Unavailable published section",
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "schemaVersion",
    "pageType",
    "pageId",
    "locale",
    "canonicalUrl",
    "contentVersion",
    "updatedAt",
    "freshness",
    "completeness",
    "data"
  ],
  "additionalProperties": false
}
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 === 'get_category_section');
if (!tool) throw new Error('get_category_section is not registered for the current page.');
const result = await modelContext.executeTool(tool, {"section": "places"});
console.log(result);

Registration is page-scoped. Check getTools() before calling.

HTTP API

Request body 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."
    },
    "section": {
      "type": "string",
      "enum": [
        "overview",
        "places"
      ]
    }
  },
  "required": [
    "pagePath",
    "section"
  ],
  "additionalProperties": false
}
Successful response schema
{
  "type": "object",
  "description": "Successful read of the sanitized published page snapshot. Unsupported sections reject the invocation.",
  "properties": {
    "schemaVersion": {
      "const": "1"
    },
    "pageType": {
      "const": "category"
    },
    "pageId": {
      "type": "string"
    },
    "locale": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    },
    "contentVersion": {
      "type": [
        "string",
        "number",
        "null"
      ]
    },
    "updatedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "freshness": {
      "type": "object",
      "properties": {
        "contentVersion": {
          "type": [
            "string",
            "number",
            "null"
          ]
        },
        "updatedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "contentVersion",
        "updatedAt"
      ],
      "additionalProperties": false
    },
    "completeness": {
      "const": "page-published-section"
    },
    "data": {
      "description": "The requested published section. Overview is an object; lists are arrays of at most 20 items; places/experiences may wrap items in an object; missing opening-hours data is null. Strings and nested lists are bounded by the WebMCP snapshot policy.",
      "type": [
        "object",
        "array",
        "string",
        "null"
      ],
      "maxItems": 20,
      "items": {
        "description": "Published JSON value; optional field shapes depend on the page projection."
      },
      "anyOf": [
        {
          "title": "Overview (section=overview)",
          "type": "object",
          "properties": {
            "destinationCode": {
              "type": "string"
            },
            "destinationName": {
              "type": "string"
            },
            "code": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "count": {
              "type": "number"
            },
            "isOther": {
              "type": "boolean"
            },
            "parentCode": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "destinationCode",
            "destinationName",
            "code",
            "label"
          ],
          "additionalProperties": false
        },
        {
          "title": "Published list section",
          "type": "array",
          "maxItems": 20,
          "items": {
            "description": "Published section records; fields depend on the section and the page projection."
          }
        },
        {
          "title": "Published structured section",
          "type": "object",
          "description": "Named public fields or an items list, such as places.items, location coordinates, opening hours or experience groups.",
          "properties": {
            "items": {
              "type": "array",
              "maxItems": 20,
              "items": {
                "type": "object"
              }
            }
          }
        },
        {
          "title": "Published text section",
          "type": "string",
          "maxLength": 4000
        },
        {
          "title": "Unavailable published section",
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "schemaVersion",
    "pageType",
    "pageId",
    "locale",
    "canonicalUrl",
    "contentVersion",
    "updatedAt",
    "freshness",
    "completeness",
    "data"
  ],
  "additionalProperties": false
}
Error response schema
{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "const": "1"
    },
    "completeness": {
      "enum": [
        "invalid-input",
        "not-found",
        "unavailable"
      ]
    },
    "error": {
      "type": "string"
    }
  },
  "required": [
    "schemaVersion",
    "completeness",
    "error"
  ],
  "additionalProperties": false
}

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

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/get_category_section \
  -H 'Content-Type: application/json' \
  --data '{"pagePath": "/en/destinations/cz/prague/places/hotel/", "section": "overview"}'

JavaScript

const response = await fetch("https://govisit.ai/api/tools/v1/get_category_section", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
  "pagePath": "/en/destinations/cz/prague/places/hotel/",
  "section": "overview"
})
});
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/get_category_section",
    data=json.dumps({
  "pagePath": "/en/destinations/cz/prague/places/hotel/",
  "section": "overview"
}).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.

MCP

Tool arguments 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."
    },
    "section": {
      "type": "string",
      "enum": [
        "overview",
        "places"
      ]
    }
  },
  "required": [
    "pagePath",
    "section"
  ],
  "additionalProperties": false
}
Structured result schema
{
  "type": "object",
  "description": "Successful read of the sanitized published page snapshot. Unsupported sections reject the invocation.",
  "properties": {
    "schemaVersion": {
      "const": "1"
    },
    "pageType": {
      "const": "category"
    },
    "pageId": {
      "type": "string"
    },
    "locale": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    },
    "contentVersion": {
      "type": [
        "string",
        "number",
        "null"
      ]
    },
    "updatedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "freshness": {
      "type": "object",
      "properties": {
        "contentVersion": {
          "type": [
            "string",
            "number",
            "null"
          ]
        },
        "updatedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "contentVersion",
        "updatedAt"
      ],
      "additionalProperties": false
    },
    "completeness": {
      "const": "page-published-section"
    },
    "data": {
      "description": "The requested published section. Overview is an object; lists are arrays of at most 20 items; places/experiences may wrap items in an object; missing opening-hours data is null. Strings and nested lists are bounded by the WebMCP snapshot policy.",
      "type": [
        "object",
        "array",
        "string",
        "null"
      ],
      "maxItems": 20,
      "items": {
        "description": "Published JSON value; optional field shapes depend on the page projection."
      },
      "anyOf": [
        {
          "title": "Overview (section=overview)",
          "type": "object",
          "properties": {
            "destinationCode": {
              "type": "string"
            },
            "destinationName": {
              "type": "string"
            },
            "code": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "count": {
              "type": "number"
            },
            "isOther": {
              "type": "boolean"
            },
            "parentCode": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "destinationCode",
            "destinationName",
            "code",
            "label"
          ],
          "additionalProperties": false
        },
        {
          "title": "Published list section",
          "type": "array",
          "maxItems": 20,
          "items": {
            "description": "Published section records; fields depend on the section and the page projection."
          }
        },
        {
          "title": "Published structured section",
          "type": "object",
          "description": "Named public fields or an items list, such as places.items, location coordinates, opening hours or experience groups.",
          "properties": {
            "items": {
              "type": "array",
              "maxItems": 20,
              "items": {
                "type": "object"
              }
            }
          }
        },
        {
          "title": "Published text section",
          "type": "string",
          "maxLength": 4000
        },
        {
          "title": "Unavailable published section",
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "schemaVersion",
    "pageType",
    "pageId",
    "locale",
    "canonicalUrl",
    "contentVersion",
    "updatedAt",
    "freshness",
    "completeness",
    "data"
  ],
  "additionalProperties": false
}

Connect a Streamable HTTP MCP client to https://govisit.ai/mcp and call get_category_section. Use the HTTP API arguments shown above, including the canonical pagePath. Replace example paths with the published page you want to read.

const result = await client.callTool({
  name: "get_category_section",
  arguments: {"pagePath": "/en/destinations/cz/prague/places/hotel/", "section": "overview"},
});
if (result.isError) throw new Error(result.content[0]?.text ?? "GoVisit tool call failed");
console.log(result.structuredContent);

Agent Skills

Tool 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."
    },
    "section": {
      "type": "string",
      "enum": [
        "overview",
        "places"
      ]
    }
  },
  "required": [
    "pagePath",
    "section"
  ],
  "additionalProperties": false
}
Tool output schema
{
  "type": "object",
  "description": "Successful read of the sanitized published page snapshot. Unsupported sections reject the invocation.",
  "properties": {
    "schemaVersion": {
      "const": "1"
    },
    "pageType": {
      "const": "category"
    },
    "pageId": {
      "type": "string"
    },
    "locale": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    },
    "contentVersion": {
      "type": [
        "string",
        "number",
        "null"
      ]
    },
    "updatedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "freshness": {
      "type": "object",
      "properties": {
        "contentVersion": {
          "type": [
            "string",
            "number",
            "null"
          ]
        },
        "updatedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "contentVersion",
        "updatedAt"
      ],
      "additionalProperties": false
    },
    "completeness": {
      "const": "page-published-section"
    },
    "data": {
      "description": "The requested published section. Overview is an object; lists are arrays of at most 20 items; places/experiences may wrap items in an object; missing opening-hours data is null. Strings and nested lists are bounded by the WebMCP snapshot policy.",
      "type": [
        "object",
        "array",
        "string",
        "null"
      ],
      "maxItems": 20,
      "items": {
        "description": "Published JSON value; optional field shapes depend on the page projection."
      },
      "anyOf": [
        {
          "title": "Overview (section=overview)",
          "type": "object",
          "properties": {
            "destinationCode": {
              "type": "string"
            },
            "destinationName": {
              "type": "string"
            },
            "code": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "count": {
              "type": "number"
            },
            "isOther": {
              "type": "boolean"
            },
            "parentCode": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "destinationCode",
            "destinationName",
            "code",
            "label"
          ],
          "additionalProperties": false
        },
        {
          "title": "Published list section",
          "type": "array",
          "maxItems": 20,
          "items": {
            "description": "Published section records; fields depend on the section and the page projection."
          }
        },
        {
          "title": "Published structured section",
          "type": "object",
          "description": "Named public fields or an items list, such as places.items, location coordinates, opening hours or experience groups.",
          "properties": {
            "items": {
              "type": "array",
              "maxItems": 20,
              "items": {
                "type": "object"
              }
            }
          }
        },
        {
          "title": "Published text section",
          "type": "string",
          "maxLength": 4000
        },
        {
          "title": "Unavailable published section",
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "schemaVersion",
    "pageType",
    "pageId",
    "locale",
    "canonicalUrl",
    "contentVersion",
    "updatedAt",
    "freshness",
    "completeness",
    "data"
  ],
  "additionalProperties": false
}

After installing GoVisit skills, ask your assistant to use govisit-get-category-section. The skill calls the GoVisit HTTP API.

Copy a GoVisit destination category page link and name the section you want to read.

Use GoVisit to read the [section name] section of [category page URL]. Summarize the published information and include the source link.

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