China Footnotes
Server Details
China travel facts and local tips, sourced and dated: hours, tickets, booking and pre-trip setup.
- Status
- Healthy
- Uptime
- 100.0% over 20 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- China Footnotes
- Claude
- –
TDQS
Scored across 5 tools
The five tools have mostly distinct purposes: search places, read a place, list/read pretrip topics, and list current notices. There is some overlap because notices appear both in get_current_notices and inside get_place, and search_places can also list places when called without arguments, but the descriptions make the intended boundaries clear.
All names use snake_case with recognizable verb_noun patterns such as get_place, get_pretrip_topic, list_pretrip_topics, and search_places. The minor inconsistency is get_current_notices, which returns a list but uses get rather than list, unlike list_pretrip_topics.
Five tools are well-scoped for a travel-reference server: one search tool, one place reader, one notice lister, and a list/read pair for pretrip topics. Each tool has a clear role, and the set avoids unnecessary duplication.
The surface covers the main travel workflows: finding places, reading detailed place information, checking dated notices, and preparing via pretrip topics. Minor gaps remain, such as no dedicated city-overview tool or event-specific search, though these are partially handled through search_places and get_place.
Available Tools
5 toolsget_current_noticesGet current noticesARead-onlyIdempotentInspect
List dated notices in effect on a date (today in Asia/Shanghai unless date is given) for places in China Footnotes, such as holiday traffic controls, temporary closures and special opening hours, each with its sources. Filter by city or place. Only notices the editors have entered are included; this is not a live news feed, and an empty list does not mean nothing has changed.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Lowercase city id, as listed in cities when search_places is called with no arguments. Omit for all cities. | |
| date | No | Date in Asia/Shanghai, YYYY-MM-DD; default today. Stored notices only; not a live feed. | |
| placeId | No | Only notices for this place id (from search_places). |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| notices | Yes | |
| sources | No | Source id index. Dates are stored evidence dates, not rendering dates; null means unavailable. |
| timezone | No | |
| dataVersion | No | |
| renderedFor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the bar is lower, yet the description adds substantive context: results are editor-curated rather than live, each notice carries its sources, and an empty list is not evidence of no change. These are exactly the interpretation caveats an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then the filtering and the caveats. Slightly dense in the first sentence but every clause (scope, examples, sources) earns its place; the empty-list caveat is well placed at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully documented, output-schema-backed list tool, the description covers action, scope, defaults, filtering, and the key interpretive limitation. Nothing an agent needs to call it correctly or to interpret an empty result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully documented in the schema (100% coverage), including the lowercase city id convention, the YYYY-MM-DD Asia/Shanghai date default, and place id provenance from search_places. The description only restates the city/place filtering and timezone default, adding little beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List dated notices in effect on a date') with the geographic scope (places in China Footnotes) and concrete examples (holiday traffic controls, temporary closures, special opening hours). This is clearly distinct from the place-lookup siblings like get_place and search_places.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit defaults ('today in Asia/Shanghai unless date is given') and filter guidance ('Filter by city or place', or omit for all). It also sets expectations about when the result is authoritative: 'Only notices the editors have entered are included; this is not a live news feed, and an empty list does not mean nothing has changed.' No sibling alternative is named, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_placeGet place detailsARead-onlyIdempotentInspect
Read one China Footnotes place by id (from search_places). For a practical question, pass sections:["practical","notices"] and only the fields needed; fields apply when sections includes "practical" or is omitted. Use sections:["intro"] for an overview; omit both for the full entry. Available content: why go, what to do, opening hours with weekday and seasonal rules, ticket prices, booking channels and whether passports work, last entry, metro and taxi directions, notices in effect, current and upcoming events (temporary festivals, exhibitions and shows), what was searched but not found, traveler tips, many of them firsthand reports from Chinese travelers and locals (routes, timing and crowds, entrances, food nearby, scams, what to expect), photos, and every source with its link. Optional fields/sections select complete facts with sources. Tips default to 3 eligible entries after the shared quality ordering; tipLimit (0–50) and tipOffset page through them, with totals, per-topic counts of all eligible tips before pagination, and nextOffset. includeTravelerTips:false excludes community tips. Practical rules are not truncated by tipLimit. Returns the canonical page link, field sources and the page interactions available (pageFeatures). visitDate adds a conservative stored-rule check in Asia/Shanghai. Each practical field carries its status and actual check date; this is not live confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Place id from search_places, e.g. "yuyuan-garden". | |
| fields | No | Practical fields to return; omit for all. Applies when sections includes "practical" or is omitted. | |
| sections | No | Parts of the entry to return; omit for the full entry. intro: overview; practical: the fields with sources; gaps: what was searched but not found. | |
| tipLimit | No | Traveler tips to return (0–50, default 3). | |
| tipOffset | No | Traveler tips to skip; pass nextOffset from the previous call. | |
| visitDate | No | Date in Asia/Shanghai, YYYY-MM-DD. Stored rules only; not live availability. | |
| includeTravelerTips | No | false leaves community traveler tips out. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| city | No | |
| name | Yes | |
| tips | No | |
| type | No | |
| events | No | |
| fields | Yes | |
| photos | No | |
| notices | No | |
| sources | No | Source id index. Dates are stored evidence dates, not rendering dates; null means unavailable. |
| tagline | No | |
| district | No | |
| timezone | No | |
| freshness | No | |
| localName | No | |
| reviewDue | No | |
| visitCheck | No | |
| dataVersion | No | |
| renderedFor | No | |
| pageFeatures | No | |
| researchedAt | No | |
| visitDuration | No | |
| isReviewOverdue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only profile, yet the description still adds real behavior: tips default to 3 after a shared quality ordering, tipLimit does not truncate practical rules, includeTravelerTips:false drops community tips, visitDate triggers only a conservative stored-rule check in Asia/Shanghai, and 'this is not live confirmation'. Those are exactly the caveats an agent needs to set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening instruction is well front-loaded, but the long run-on 'Available content: why go, what to do, ...' enumeration sprawls across one sentence and largely re-lists what the sections enum already implies. It also mixes pagination, return values and caveats into a single dense block with no separation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter docs and strong annotations, the description covers the remaining burden well: what each section yields, tip pagination, link and pageFeatures returns, and the stored-rule caveat. Minor gap: no error behavior for an invalid id and no explicit pointer to get_current_notices for time-sensitive notices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: fields only apply when sections includes 'practical' or is omitted, tipLimit/tipOffset produce totals, per-topic counts and nextOffset, and 'Practical rules are not truncated by tipLimit'. That is genuine semantic value on top of an already documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one China Footnotes place by id') and names the sibling that produces the id ('from search_places'). An agent can immediately tell this is the detail-fetch counterpart to the search sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete mode selection: 'For a practical question, pass sections:["practical","notices"]', 'Use sections:["intro"] for an overview; omit both for the full entry'. That is strong when-to-use guidance for parameters, but it never routes the agent away from or toward siblings like get_current_notices or get_pretrip_topic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pretrip_topicGet pre-trip topicARead-onlyIdempotentInspect
Get one China Footnotes "Before you go" topic by id: the essentials, a checklist, dated items such as holiday crowd calendars or rule changes, traveler tips and sources. Topic ids come from list_pretrip_topics. Optional sections return selected structured content with sources; without sections the full article is returned. Rules such as visa policy change, so each item carries the date it was checked.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Topic id from list_pretrip_topics, e.g. "visa" or "payments". | |
| sections | No | Parts of the topic to return; omit for the full article. items: dated items such as rule changes; calendar: holiday crowd calendar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| stage | No | |
| title | Yes | |
| keyFact | No | |
| sources | No | Source id index. Dates are stored evidence dates, not rendering dates; null means unavailable. |
| sections | No | |
| timezone | No | |
| checkedAt | No | |
| dataVersion | No | |
| renderedFor | No | |
| evidenceScope | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds genuine context beyond them: sections return selected structured content with sources, omitting sections returns the full article, and items carry a checked date. The penultimate sentence ('Rules such as visa policy change, so each item carries the date...') is grammatically broken, slightly muddying the freshness guarantee.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and content scope, then the id source, then the section behavior. Nearly every sentence earns its place, though the garbled 'Rules such as visa policy change, so each item...' sentence costs clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, 100% schema coverage and an output schema present, the description needn't explain returns; it still covers content scope, id provenance, and section behavior. Only the when-to-use-versus-siblings angle is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns more by explaining the semantic difference between passing sections (selective structured content with sources) and omitting them (full article), which the schema only states tersely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one China Footnotes "Before you go" topic by id') and enumerates the content types returned (essentials, checklist, dated items, tips, sources). It also names list_pretrip_topics as the id source, which separates it from siblings like get_current_notices or search_places.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear entry path by pointing to list_pretrip_topics for ids, and explains the sections-vs-full-article choice. It does not say when to prefer this over get_current_notices, but the usage context is otherwise explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pretrip_topicsList pre-trip topicsARead-onlyIdempotentInspect
List the China Footnotes "Before you go" topics for foreign visitors preparing a trip to China: when to go, visa and entry, arrival card, paying, internet and SIM, apps, booking ahead, getting around, safety. Returns each topic's id, title, one key fact, check date and page link; the full topic comes from get_pretrip_topic.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| topics | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds useful behavioral context beyond that: exactly which fields each item returns and that content is deliberately summarized rather than complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and ending with the return shape and the escalation path. The nine-item topic enumeration is long but earns its place by letting an agent match a user question to this list without a follow-up call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with an output schema and full annotations, nothing needed to call it correctly is missing. The description even states the returned fields and that detail lives in a sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It correctly does not invent parameter discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('List') plus a precisely scoped resource ('China Footnotes "Before you go" topics for foreign visitors preparing a trip to China'), with the covered subject areas enumerated. It is clearly distinguishable from get_pretrip_topic, which the description itself positions as the detail counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing clause routes the agent to get_pretrip_topic for the full topic, which is a clear alternative and condition. It stops short of an explicit 'use this first when you don't know the topic id' instruction, so it is strong but not a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_placesSearch placesARead-onlyIdempotentInspect
Search China Footnotes for sights and neighbourhoods in the Chinese cities it covers. Matches English or Chinese names, aliases, district, type and tags. Suited to questions about what to see or do in a city, and to finding a place's id from its name. With no arguments it lists places and the city ids covered; asked about a city it does not cover, it says so rather than returning unrelated places. Returns short summaries with ids and page links, best match first; matchedAll is false when no place matched the whole query and the results only share some words with it. Opening hours, tickets, booking and traveler tips come from get_place.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag, e.g. free, paid, rainy-day, indoor, night-view, family, history, art, booking-required, closed-mon, day-trip. | |
| city | No | Lowercase city id, as listed in cities when search_places is called with no arguments. Omit for all cities. | |
| type | No | Place type. | |
| limit | No | Maximum places to return (1–50, default 10). | |
| query | No | Words to match in English or Chinese (translate names from other languages first), e.g. "Yu Garden", "豫园", "art museum", "night view". Leave empty to list places. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| cities | No | |
| places | Yes | |
| matchedAll | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, the description discloses important behavior: no-argument calls list places and covered city ids; uncovered cities produce an explicit message; results are short summaries with ids and page links; and matchedAll is false for partial-word fallback matches. These details materially help an agent interpret results and avoid misusing the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, starting with the primary search purpose and then covering special cases, result shape, and sibling routing. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not exhaustively document return fields, yet it still explains summaries, ordering, and matchedAll. Combined with complete schema coverage and annotations, it gives an agent everything needed to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description still adds useful semantics by explaining query matching across names, aliases, district, type, and tags, and by clarifying that no arguments lists places and city ids, which helps interpret the city parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search China Footnotes for sights and neighbourhoods in covered Chinese cities. It also clarifies the matching scope (English or Chinese names, aliases, district, type, tags) and distinguishes itself from get_place for opening hours, tickets, and traveler tips.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the tool is suited to questions about what to see or do in a city and to finding a place's id from its name. It also names get_place as the alternative for operational details and explains no-argument and uncovered-city behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
get_current_notices3 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City id. Covered: shanghai, beijing, xian, chengdu, chongqing, hangzhou."New value: +"Lowercase city id, as listed in cities when search_places is called with no arguments. Omit for all cities." - changed
Input schema / properties / date / descriptionPrevious value: -"Date in Asia/Shanghai, YYYY-MM-DD. Stored rules only; not live availability."New value: +"Date in Asia/Shanghai, YYYY-MM-DD; default today. Stored notices only; not a live feed." - changed
Input schema / properties / placeId / descriptionPrevious value: -"Only notices for this place id."New value: +"Only notices for this place id (from search_places)."
- Changed
get_place6 fields changed- added
Input schema / properties / fields / descriptionAdded value: +"Practical fields to return; omit for all. Applies when sections includes \"practical\" or is omitted." - changed
Input schema / properties / id / descriptionPrevious value: -"Place id, e.g. \"yuyuan-garden\"."New value: +"Place id from search_places, e.g. \"yuyuan-garden\"." - added
Input schema / properties / includeTravelerTips / descriptionAdded value: +"false leaves community traveler tips out." - added
Input schema / properties / sections / descriptionAdded value: +"Parts of the entry to return; omit for the full entry. intro: overview; practical: the fields with sources; gaps: what was searched but not found." - added
Input schema / properties / tipLimit / descriptionAdded value: +"Traveler tips to return (0–50, default 3)." - added
Input schema / properties / tipOffset / descriptionAdded value: +"Traveler tips to skip; pass nextOffset from the previous call."
- Changed
get_pretrip_topic2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Topic id, e.g. \"visa\" or \"payments\"."New value: +"Topic id from list_pretrip_topics, e.g. \"visa\" or \"payments\"." - added
Input schema / properties / sections / descriptionAdded value: +"Parts of the topic to return; omit for the full article. items: dated items such as rule changes; calendar: holiday crowd calendar."
- Changed
search_places3 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City id. Covered: shanghai, beijing, xian, chengdu, chongqing, hangzhou."New value: +"Lowercase city id, as listed in cities when search_places is called with no arguments. Omit for all cities." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum places to return (default 10)."New value: +"Maximum places to return (1–50, default 10)." - changed
Input schema / properties / query / descriptionPrevious value: -"Words to match, e.g. \"Yu Garden\", \"豫园\", \"art museum\", \"night view\". Leave empty to list places."New value: +"Words to match in English or Chinese (translate names from other languages first), e.g. \"Yu Garden\", \"豫园\", \"art museum\", \"night view\". Leave empty to list places."
1 tool update
- Changed
get_place8 fields changed- added
Output schema / properties / fields / properties / admission / properties / freshnessAdded value: +{ + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / booking / properties / freshnessAdded value: +{ + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / freshnessAdded value: +{ + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / hours / properties / freshnessAdded value: +{ + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / lastAdmission / properties / freshnessAdded value: +{ + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / transport / properties / freshnessAdded value: +{ + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / freshnessAdded value: +{ + "properties": { + "checked": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "additionalProperties": { + "properties": { + "by": { + "enum": [ + "daily", + "experience", + "review" + ] + }, + "checked": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "checked", + "by" + ], + "type": [ + "object", + "null" + ] + }, + "type": "object" + }, + "scope": { + "const": "latest_across_practical_fields" + } + }, + "required": [ + "checked", + "scope", + "fields" + ], + "type": "object" +} - changed
Output schema / properties / visitCheck / properties / status / enumPrevious value: -[ - "uncertain", - "dated_exception" -]New value: +[ + "uncertain", + "dated_exception", + "closed", + "open" +]
4 tool updates
- Changed
get_current_notices11 fields changed- added
Input schema / properties / city / maxLengthAdded value: +200 - added
Input schema / properties / dateAdded value: +{ + "description": "Date in Asia/Shanghai, YYYY-MM-DD. Stored rules only; not live availability.", + "maxLength": 10, + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / placeId / maxLengthAdded value: +100 - added
Output schema / properties / dataVersionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / notices / items / properties / sources / items / properties / accessedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / notices / items / properties / sources / items / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / notices / items / properties / sources / items / properties / idAdded value: +{ + "type": "string" +} - added
Output schema / properties / notices / items / properties / sources / items / properties / verificationMethodAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / renderedForAdded value: +{ + "type": "string" +} - added
Output schema / properties / sourcesAdded value: +{ + "additionalProperties": { + "properties": { + "accessedAt": { + "type": [ + "string", + "null" + ] + }, + "checkedAt": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "type": [ + "string", + "null" + ] + }, + "label": { + "type": [ + "string", + "null" + ] + }, + "publishedAt": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": [ + "string", + "null" + ] + }, + "verificationMethod": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "description": "Source id index. Dates are stored evidence dates, not rendering dates; null means unavailable.", + "type": "object" +} - added
Output schema / properties / timezoneAdded value: +{ + "const": "Asia/Shanghai" +}
- Changed
get_place80 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "items": { + "enum": [ + "hours", + "admission", + "booking", + "lastAdmission", + "foreignVisitors", + "transport" + ], + "type": "string" + }, + "maxItems": 6, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / id / maxLengthAdded value: +100 - added
Input schema / properties / includeTravelerTipsAdded value: +{ + "default": true, + "type": "boolean" +} - added
Input schema / properties / sectionsAdded value: +{ + "items": { + "enum": [ + "intro", + "practical", + "notices", + "events", + "tips", + "gaps", + "photos" + ], + "type": "string" + }, + "maxItems": 7, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / tipLimitAdded value: +{ + "default": 3, + "maximum": 50, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / tipOffsetAdded value: +{ + "default": 0, + "maximum": 1000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / visitDateAdded value: +{ + "description": "Date in Asia/Shanghai, YYYY-MM-DD. Stored rules only; not live availability.", + "maxLength": 10, + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Output schema / properties / dataVersionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / admission / properties / basisNotesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / channelsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / admission / properties / conflictAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / admission / properties / exceptionsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / notesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / passportAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / admission / properties / pricesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / rulesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / seasonsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / admission / properties / sourceIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / basisNotesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / channelsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / booking / properties / conflictAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / booking / properties / exceptionsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / notesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / passportAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / booking / properties / pricesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / rulesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / seasonsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / booking / properties / sourceIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / basisNotesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / channelsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / conflictAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / exceptionsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / notesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / passportAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / pricesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / rulesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / seasonsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / foreignVisitors / properties / sourceIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / basisNotesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / channelsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / hours / properties / conflictAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / hours / properties / exceptionsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / notesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / passportAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / hours / properties / pricesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / rulesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / seasonsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / hours / properties / sourceIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / basisNotesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / channelsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / lastAdmission / properties / conflictAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / lastAdmission / properties / exceptionsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / notesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / passportAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / lastAdmission / properties / pricesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / rulesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / seasonsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / lastAdmission / properties / sourceIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / basisNotesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / channelsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / checkedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / fields / properties / transport / properties / conflictAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / transport / properties / exceptionsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / notesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / passportAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / fields / properties / transport / properties / pricesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / rulesAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / seasonsAdded value: +{ + "type": "array" +} - added
Output schema / properties / fields / properties / transport / properties / sourceIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / pageFeaturesAdded value: +{ + "items": { + "properties": { + "additionalTravelerTips": { + "type": "integer" + }, + "availableTravelerTips": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "enum": [ + "taxi_display", + "traveler_tips", + "entrance_photos" + ] + }, + "onPageOnly": { + "type": "string" + }, + "relevantFor": { + "items": { + "type": "string" + }, + "type": "array" + }, + "returnedTravelerTips": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "url", + "description", + "relevantFor", + "onPageOnly" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / renderedForAdded value: +{ + "type": "string" +} - added
Output schema / properties / sourcesAdded value: +{ + "additionalProperties": { + "properties": { + "accessedAt": { + "type": [ + "string", + "null" + ] + }, + "checkedAt": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "type": [ + "string", + "null" + ] + }, + "label": { + "type": [ + "string", + "null" + ] + }, + "publishedAt": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": [ + "string", + "null" + ] + }, + "verificationMethod": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "description": "Source id index. Dates are stored evidence dates, not rendering dates; null means unavailable.", + "type": "object" +} - added
Output schema / properties / timezoneAdded value: +{ + "const": "Asia/Shanghai" +} - added
Output schema / properties / tipsAdded value: +{ + "properties": { + "eligibleTotal": { + "type": "integer" + }, + "hasMore": { + "type": "boolean" + }, + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "nextOffset": { + "type": [ + "integer", + "null" + ] + }, + "offset": { + "type": "integer" + }, + "order": { + "type": "string" + }, + "returned": { + "type": "integer" + }, + "topicCounts": { + "description": "Counts across eligible tips before pagination; sum equals eligibleTotal.", + "items": { + "properties": { + "count": { + "minimum": 1, + "type": "integer" + }, + "topic": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "topic", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "total", + "eligibleTotal", + "topicCounts", + "returned", + "offset", + "hasMore", + "nextOffset", + "items" + ], + "type": "object" +} - added
Output schema / properties / visitCheckAdded value: +{ + "properties": { + "exceptions": { + "type": "array" + }, + "fields": { + "type": "object" + }, + "notices": { + "type": "array" + }, + "regular": { + "type": "object" + }, + "status": { + "enum": [ + "uncertain", + "dated_exception" + ] + }, + "timezone": { + "const": "Asia/Shanghai" + }, + "uncertainty": { + "items": { + "type": "string" + }, + "type": "array" + }, + "visitDate": { + "type": "string" + }, + "weekday": { + "type": "string" + } + }, + "required": [ + "visitDate", + "timezone", + "status", + "regular", + "exceptions", + "notices", + "fields", + "uncertainty" + ], + "type": "object" +}
- Changed
get_pretrip_topic8 fields changed- added
Input schema / properties / id / maxLengthAdded value: +100 - added
Input schema / properties / sectionsAdded value: +{ + "items": { + "enum": [ + "overview", + "essentials", + "checklist", + "items", + "calendar" + ], + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Output schema / properties / dataVersionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / evidenceScopeAdded value: +{ + "enum": [ + "source_ids", + "topic_catalogue_not_fact_mapping" + ] +} - added
Output schema / properties / renderedForAdded value: +{ + "type": "string" +} - added
Output schema / properties / sectionsAdded value: +{ + "type": "object" +} - added
Output schema / properties / sourcesAdded value: +{ + "additionalProperties": { + "properties": { + "accessedAt": { + "type": [ + "string", + "null" + ] + }, + "checkedAt": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "type": [ + "string", + "null" + ] + }, + "label": { + "type": [ + "string", + "null" + ] + }, + "publishedAt": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": [ + "string", + "null" + ] + }, + "verificationMethod": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "description": "Source id index. Dates are stored evidence dates, not rendering dates; null means unavailable.", + "type": "object" +} - added
Output schema / properties / timezoneAdded value: +{ + "const": "Asia/Shanghai" +}
- Changed
search_places4 fields changed- added
Input schema / properties / city / maxLengthAdded value: +200 - added
Input schema / properties / query / maxLengthAdded value: +200 - added
Input schema / properties / tag / maxLengthAdded value: +60 - added
Input schema / properties / type / maxLengthAdded value: +200
1 tool update
- Changed
get_place3 fields changed- added
Output schema / properties / events / items / properties / endsAt / descriptionAdded value: +"Exact end date; null when only an approximate end is known." - changed
Output schema / properties / events / items / properties / endsAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / events / items / properties / endsAtLabelAdded value: +{ + "description": "Source-stated end period when the exact day is unknown.", + "type": [ + "string", + "null" + ] +}
2 tool updates
- Changed
get_current_notices1 field changed- changed
Output schema / properties / notices / items / properties / sources / items / properties / url / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
search_places1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "museum", - "open_district", - "park", - "water_town", - "temple", - "observation_deck", - "classical_garden", - "ticketed_attraction" -]New value: +[ + "open_district", + "water_town", + "museum", + "observation_deck", + "ticketed_attraction", + "classical_garden", + "park", + "temple" +]
5 tool updates
- First observed
get_current_notices - First observed
get_place - First observed
get_pretrip_topic - First observed
list_pretrip_topics - First observed
search_places
Related MCP Connectors
Field-verified China travel facts for foreign visitors: booking walls, hotel registration, transit.
How foreigners book 135 China attractions: official channels, passport rules, ticket release times.
Sourced facts on treatment in China: hospitals, dated price ranges and process guides. Read-only.
Plan and manage trips in China, read saved itineraries, and make Chinese directions and taxi cards.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with comprehensive China inbound travel capabilities, including hotel and flight search, attraction discovery, itinerary planning, and travel tips.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query China's statutory public holidays and makeup-workday schedules, and convert solar dates to lunar dates with zodiac and ganzhi details.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI clients to search for domestic low-cost flight routes in China and verify flight options before purchase.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search mainland China's national laws, administrative and local regulations, judicial interpretations, and Supreme People's Court guiding cases, and to retrieve metadata plus the original Chinese text of individual articles or full regulations and case narratives. Results carry issuing body, promulgation and effective dates, and in-force status, with keyless access and no fabricated snippets when a document can't be read.472 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.