jiangshan-map
Chronicles of the Realm · 江山时序
An Interactive Historical Atlas of China from the Warring States (403 BCE) to the Present — Scrub Through Time, Trace Ancient Cities, and Walk in the Footsteps of History
Play Live Demo (English UI) → https://deanchen.me/jiangshan-map/?lang=en
The story behind it (in Chinese): From textbook maps to 1k GitHub stars
Why It's Fun to Explore
Have you ever wondered while reading Chinese history or classical poetry:
"Where exactly on today's map are Jiankang (the Six Dynasties capital), Huangzhou (where Su Dongpo composed the Red Cliffs Rhapsody in exile), Languan Pass in the Qinling Mountains (where Han Yu halted his horse in the snow), or Zhuxianzhen (Yue Fei's northern campaign frontier)?"
"How many names did Chang'an hold across two millennia, and what pivotal events unfolded on that soil?"
"How did the realm evolve step by step—from the Partition of Jin and the Seven Warring States at the opening of Sima Guang's Zizhi Tongjian (403 BCE), Qin's unification campaigns, Emperor Wu of Han opening the Hexi Corridor, High Tang's Four Garrisons of Anxi, and Yuan's Xuanzhengyuan jurisdiction over Tibet, to Zeng Jize's recovery of Ili (1881 CE) and the 20th-century shift from the 'Begonia Leaf' (秋海棠) map to the 'Rooster' (雄鸡) map?"
Chronicles of the Realm (jiangshan-map) brings together 2,400+ years of Chinese history across 18 historical periods into a single interactive parchment atlas—featuring multi-stage territorial and prefecture snapshots, ancient cities, strategic mountain passes, poetic and battlefield landmarks, chronological milestones, and reigning monarchs & imperial eras. No heavy print atlases required—just drag the timeline and click any city to travel through space and time.
Feature 1: Scrub the Timeline to Watch Realms Rise & Fall, Track Monarchs, and Compare Ancient & Modern Borders
Multi-Polity Confrontations on a Single Canvas: From the Seven Warring States (Qin, Chu, Qi, Yan, Zhao, Wei, Han) alongside Zhou, Yue, Ba-Shu, Zhongshan, and Yiqu, to the Three Kingdoms warlords (Yuan Shao, Cao Cao, Liu Bei, Sun Quan, Gongsun's Liaodong), Northern & Southern Dynasties, Five Dynasties & Ten Kingdoms, and Song, Liao, Western Xia, Dali, Jin, and the Mongols—all rendered side-by-side in high-contrast traditional parchment hues. Hover over any polity in the bottom-left legend to highlight its territory, or click to zoom straight to it.
Multi-Stage Territorial Evolution & Dashed "Ghost Boundary Diffs": At every major territorial milestone—such as Qin's conquest of Ba-Shu (316 BCE), Yan General Qin Kai's expansion into Liaodong (300 BCE), Ma Yuan's bronze pillars in Jiaozhi (43 CE), Sima Yi's campaign in Liaodong (238 CE), Li Jing's conquest of Tuyuhun (635 CE), the Four Garrisons of Anxi & Wang Xuance's campaign in Central India (648 CE), Yuan's Xuanzhengyuan rule over Tibet (1288 CE), Ming's Hami & Seven Guards West of Jiayuguan (1404 CE), the 1881 Treaty of Saint Petersburg recovering Ili, the 1898 foreign leased territories, the 1945 retrocession of Taiwan, and the 1946 transition from the "Begonia Leaf" (秋海棠) map to the "Rooster" (雄鸡) map—click any milestone or phase dot to switch maps and reveal the previous phase's dashed vermilion Ghost Boundary Diff so territorial gains and losses are immediately visible.
Inline Reigning Monarch & Imperial Era Display: The timeline dynamically displays the reigning monarch (temple/posthumous title + personal name + reign span, e.g.,
Emperor Wu of Han · Liu Che,Emperor Taizong of Tang · Li Shimin,Emperor Shengzu of Qing · Xuanye) alongside the exact imperial era year.Ancient Prefecture Hover Inspection & Modern X-Ray Lens: First-level administrative divisions (Commanderies, Circuits, Routes, and Provinces) are rendered with deduplicated Parchment Casing borders. Zoom in and hover over any prefecture (e.g., Ming
Yingtian Prefectureor Three KingdomsJingzhou) to inspect its jurisdiction and modern provincial equivalents, or toggle the X-Ray Lens to project modern provincial boundaries directly over the historical map.Dynamic River Courses, Ancient Lakes & Grand Engineering Works: As you scrub through time, historical shifts of the Yellow River, expanding and shrinking ancient lakes (Yunmeng Marsh, Lop Nur / Puchanghai), Warring States/Qin/Han/Ming Great Walls, Sui-Tang & Grand Canals, the Silk Road, and Zheng He's maritime routes evolve in lockstep with each era.

Feature 2: Click Any Ancient City or Strategic Pass to Uncover 2,400 Years of History (Trace Place)
Click any ancient city or mountain pass on the map (or double-click anywhere on the canvas) to open its Trace Place genealogy card:
Bilingual City Lore Banner & 2,400-Year Administrative Genealogy: At the top of the card, read a curated poetic epigraph and historical biography for the city; below, trace how its name and administrative jurisdiction evolved across all 18 historical eras—from Warring States and Qin commanderies, Han regional inspectorates, Tang circuits, and Song routes to Yuan/Ming/Qing provinces and modern municipalities—complete with
Imperial Capitalbadges and dynastic seat remarks.Site-Specific Landmark Events: Beneath each dynasty row, inspect major historical events that took place right on that spot (e.g., Shang Yang's Reforms and Qin's Unification at Xianyang, Guan Yu Flooding the Seven Armies at Fancheng, the Xuanwu Gate Incident at Chang'an, or Yue Fei's Martyrdom at Lin'an). Click the
Key Eventspill in the top-right of the card to filter for dynasties with major events, and click any event to time-travel straight to that year!Strategic Mountain Passes & Poetic / Battlefield Landmarks: Explore famous mountain passes—including Hangu Pass, Tongguan, Jianmen Pass, Yanmen Pass, Yumen Pass, Yangguan, and Shanhai Pass—rendered with traditional Hanque gatehouse icons and strategic terrain notes, alongside famous battlefields and literary landmarks such as Red Cliffs (Chibi), Gaixia, Wuzhang Plains, Orchid Pavilion (Lanting), Yueyang Tower, Pavilion of Prince Teng, Languan Pass, Loulan, Lop Nur, and Issyk-Kul.
Try It Live: High Tang Kaiyuan 29 (741 CE) · Open Chang'an's 2,400-Year Genealogy Card →

Feature 3: Person Chronicles — Trace Any Historical Figure Across Time & Space
Click the top-left Universal Search Box (with a rotatable e.g. figure preview and quick-search chips, or type any monarch, general, statesman, monk, or poet such as Cao Cao, Huo Qubing, Sima Qian, Yue Fei, or Zheng He) to open Person Chronicle (点人溯事), plotting every milestone of their life with delicate cartographic hairline arcs and directional ticks across changing dynastic borders:
Qin Shi Huang's Unification Campaigns (238–221 BCE): From suppressing the rebellion at Xianyang and Wang Jian's attack on Ye, to the fall of Han, Zhao, Yan, Wei, Chu, and Dai, culminating in the surrender of Qi at Linzi—as you advance stop by stop, watch the six rival kingdoms merge into the Qin Empire right on the map!
Zhang Qian's Mission to the Western Regions (138–126 BCE): Depart Chang'an, endure over a decade of Xiongnu captivity without surrendering the Han imperial staff, and blaze the trail to Dayuan (Fergana), Kangju, and the Greater Yuezhi.
Zhuge Liang's Emergence & Northern Expeditions (207–234 CE): From the Three Visits at Longzhong and the alliance at Chaisang before Red Cliffs, to entering Shu, the White Emperor City entrustment, the Southern Campaign across the Lu River, Hanzhong's Memorial on Deploying the Troops, Mount Qi, and the autumn winds of Wuzhang Plains.
Xuanzang's Pilgrimage to India (627–645 CE): Slip past Yumen Pass alone across the Moheyan Desert, scale the icy Bedel Pass, cross the Indus, study at Nalanda Monastery, and debate at Kanyakubja (Kanauj) before returning to Chang'an.
Li Bai's Grand Travels Across Tang China (701–762 CE): From Suyab and boyhood in Shu, sailing out through the Three Gorges at twenty-four, scattering gold in Yangzhou, serving in the Hanlin Academy at Chang'an, meeting Du Fu in Luoyang, receiving amnesty at White Emperor City, to his final years at Dangtu.
Su Shi's Literary Exile Across Song China (1056–1101 CE): From leaving Meishan for the capital Kaifeng and gazing at the moon in Mizhou, to composing the Red Cliffs Rhapsody in Huangzhou exile, Huizhou, and crossing the sea to Danzhou on Hainan Island.
Wang Yangming's Unity of Knowledge & Action (1472–1529 CE): From birth in Yuyao and imprisonment in Beijing, to his enlightenment at Longchang in Guizhou, pacifying bandits in Southern Ganzhou, capturing the rebel Prince of Ning in 35 days, teaching at the Tianquan Bridge in Shaoxing, and his final words "This mind is bright and clear; what more is there to say?" at Nan'an.
Each time you step to the next event (‹ / ›, ← / →, or Space to auto-play), the timeline year, reigning monarch, imperial era, and dynastic territories evolve in sync with their footsteps, highlighting the active transition arc alongside bilingual primary-source excerpts and poems written at that exact site.
Try It Live: Follow Su Dongpo's Exile to Mizhou & Huangzhou (1075–1082 CE) →

Feature 4: Easter Egg · Map Pinpoint Challenge — What Imperial Court Rank Would You Earn?
Think you know Chinese historical geography? Click Quiz › in the corner of the Universal Search Box guide bar (or type quiz for Map Pinpoint · Ancient Place Quiz):
Dynastic Historical Clues + Blind Map Pinpointing: City labels are hidden while the prompt asks you to locate an ancient city across a 10-round progressive difficulty deck—accompanied by dynastic historical clues (without spoiling the modern city name). Drop your pin to preview and adjust, click the on-pin
✓ Confirmbutton to lock in your answer with concentric distance score rings, and earn points based on great-circle distance to the true coordinates!Complete 10 rounds to receive a traditional imperial cartographic title such as Grand Historian & Master Cartographer (太史令 · 舆图大家), Director of the Bureau of Operations (职方郎中), or Prefectural Retainer (州郡从事).
Try It Live: Western Han Emperor Wu, Yuanshou 2 (121 BCE) · Start the Map Pinpoint Challenge →

Related MCP server: Timepoint MCP
Keyboard Shortcuts & Shareable Deep Links
Keyboard Shortcuts
Key / Action | Effect |
| Focus the Universal Search Box: search historical figures ( |
| Jump to the previous / next historical phase, milestone event, or person event stop (hold |
| Auto-play / pause timeline evolution (or auto-advance stops in Person Chronicle mode) |
| Close active popups/cards, clear search highlights, or exit custom multi-stop routes |
| Open the 18-era Trace Place & Key Events genealogy card for that location |
| Hover to isolate & highlight that polity's territory; click to auto-zoom to its bounding box |
Shareable Deep Links
Append query parameters to share any historical moment, battle, city genealogy, or multi-stop route:
Jump to a specific year or territorial shift:
?year=-403&lang=en(403 BCE · Partition of Jin) /?year=-121&lang=en(121 BCE · Huo Qubing opens the Hexi Corridor) /?year=648&lang=en(648 CE · Four Garrisons of Anxi & Wang Xuance in India) /?year=1288&lang=en(1288 CE · Yuan Xuanzhengyuan over Tibet) /?year=1881&lang=en(1881 CE · Zeng Jize recovers Ili) /?year=1945&lang=en(1945 CE · Retrocession of Taiwan)Pinpoint a famous battle:
?year=-260&place=长平&lang=en(Battle of Changping) /?year=208&place=赤壁&lang=en(Battle of Red Cliffs) /?year=383&place=淝水&lang=en(Battle of Fei River)Inspect a city's 2,400-year genealogy:
?year=741&place=长安&lang=en(Chang'an / Xi'an) /?year=1415&place=应天府&lang=en(Jiankang / Yingtian / Nanjing) /?year=819&place=蓝关&lang=en(Han Yu at Languan Pass)Plot a custom poetic or campaign route:
?year=763&place=剑外,巴峡,巫峡,襄阳,洛阳&lang=en(Du Fu's 763 CE homeward route) /?year=1079,1080,1094,1097&place=湖州,黄州,惠州,儋州&lang=en(Su Shi's multi-year exile route across Huzhou, Huangzhou, Huizhou, and Danzhou)Open a person's spatio-temporal chronicle:
?person=qinshihuang&lang=en(Qin Shi Huang) /?person=zhangqian&lang=en(Zhang Qian) /?person=zhugeliang&lang=en(Zhuge Liang) /?person=xuanzang&lang=en(Xuanzang) /?person=libai&lang=en(Li Bai) /?person=sushi&lang=en(Su Shi) /?person=wangyangming&lang=en(Wang Yangming)Start a quiz round:
?year=-121&quiz=locate&lang=en(Map Pinpoint Challenge)Switch UI language:
?lang=en(English) /?lang=zh-tw(Traditional Chinese) //(Simplified Chinese)
AI Agent, MCP & LLM Integration
Chronicles of the Realm works out of the box as a historical-geography visualization engine for LLMs, MCP Clients, and AI Agents. Models never need to guess latitude/longitude coordinates—simply extract two semantic parameters from a poem or historical text, year and place, and the atlas automatically resolves ancient/modern place names, centers the camera, renders dynastic borders and multi-stop trajectories, and opens the Trace Place genealogy card:
Machine-Readable Specification:
llms.txtZero-Dependency Local MCP Server (
stdio):scripts/mcp_server.js— add to Claude Desktop, Cursor, Windsurf, or Gemini CLImcpServers:{ "mcpServers": { "jiangshan-atlas": { "command": "node", "args": ["/absolute/path/to/jiangshan-map/scripts/mcp_server.js"] } } }Exposes 3 native MCP tools (
<5msoffline response, zero npm dependencies):inspect_place({ year, place, lang? }): Returns reigning monarch/era, controlling regime (polity), macro-region (dao/lu/province), prefecture (jun/zhou/fu), modern province/city, 2,400-yearlore, and shareable deep-link URL.inspect_person({ person, stop?, lang? }): Returns a historical figure or monarch's biography, chronological geocoded stops across dynasties, and shareable deep-link URL.search_atlas({ query, limit?, lang? }): Searches across all ancient cities, poetic & battlefield landmarks, mountain passes, historical figures, imperial eras, and chronological milestones.
Ready-to-Use Agent Skill:
skills/jiangshan-atlas/SKILL.md(includes the zero-dependency CLI rendererskills/jiangshan-atlas/scripts/jiangshan.py)# Install into Claude Code / Gemini / Jetski global skills directory: mkdir -p ~/.claude/skills ~/.gemini/config/skills && cp -r skills/jiangshan-atlas ~/.claude/skills/ && cp -r skills/jiangshan-atlas ~/.gemini/config/skills/
1. Zero-Coordinate Dual-Parameter URL Protocol (0D Pinpoint / 1D Same-Year Route / 4D Multi-Year Route)
Mode | Example URL | Automatic Rendering Behavior |
Single-Point Pinpoint (0D) |
| Jumps to Tang Yuanhe 14 (819 CE), drops a pin on Languan Pass in the Qinling Mountains, and opens its 2,400-year administrative genealogy card |
Same-Year Multi-Stop Route (1D) |
| Plots numbered vermilion arcs |
Multi-Year Space-Time Route (4D) |
| Pairs |
2. CLI One-Command Screenshot & JSON Lookup (for Agent Tool Calls)
# Single-point poetic landmark screenshot
python3 skills/jiangshan-atlas/scripts/jiangshan.py --year 819 --place 蓝关 --out /tmp/languan_819.png
# Same-year multi-stop trajectory screenshot
python3 skills/jiangshan-atlas/scripts/jiangshan.py --year 763 --place 剑外,巴峡,巫峡,襄阳,洛阳 --out /tmp/dufu_763.png
# Multi-year space-time trajectory screenshot
python3 skills/jiangshan-atlas/scripts/jiangshan.py --year 1079,1080,1094,1097 --place 湖州,黄州,惠州,儋州 --out /tmp/sushi_exile.png3. Browser JavaScript API (window.atlasAPI) & In-Browser WebMCP (navigator.modelContext)
In browser automation environments (Playwright) or WebMCP-enabled AI browsers (navigator.modelContext), the page automatically registers jiangshan_locate, jiangshan_inspect, and jiangshan_open_person, and exposes window.atlasAPI:
window.atlasAPI.locate({ year, place, zoom? }): Drives the map to a single location or multi-stop trajectory and returns structured historical-geographic metadata.window.atlasAPI.inspect({ year, place, person?, stop? }): Read-only query returning the controlling polity, ancient prefecture, modern province/city, leg distances, person events, and canonical shareable URL.window.atlasAPI.resolvePlace(place, year?): Resolves ancient and modern names for cities, strategic passes, poetic landmarks, and battlefields.window.atlasAPI.openPerson(person, stop?)&window.atlasAPI.search(query): Opens a person chronicle on the map or searches across the entire atlas.
Run Locally
No dependencies or build steps required. Clone and serve with any static HTTP server:
git clone https://github.com/DeanChensj/jiangshan-map.git
cd jiangshan-map
python3 -m http.server 8000Then open http://localhost:8000 in your browser.
GeoJSON Export (for Leaflet / MapLibre / QGIS)
The app ships its geometry as compact topology-deduplicated VLQ bundles. To use the vector layers in other projects, generate standard RFC 7946 GeoJSON (EPSG:4326, lon/lat) locally; the output goes to geojson/ and is not committed. The export covers 403 BCE to 1948; later years and the modern province layer are not included.
node scripts/export_geojson.js # or: node scripts/export_geojson.js <outDir>snapshots/<id>.geojson— one file per territorial phase; each feature has abboxandlayer(polity/region/prefecture),title,title_en,category,tint,anchor.index.json— every dynasty's phases withfrom/toyears (negative = BCE, no year 0) and the matching snapshot file.corridors.geojson(walls, canals, roads, sea routes),settlements.geojson,milestones.geojson,neighbors.geojson, andmodern/(rivers, lakes, hydro labels;appear/vanishgive the years historical river courses and lakes are shown).
To look up a point without loading every phase, use geojson/jiangshan-locate.js: it loads index.json plus only the snapshot covering the year, then runs a bbox-filtered point-in-polygon test.
const atlas = JiangshanLocate.create(); // or create({ base: '<url of geojson/>' })
const hit = await atlas.locate(118.78, 32.06, 1415); // lon, lat, year
hit.polity.properties.title; // 明
hit.region.properties.title; // 南直隶
hit.prefecture.properties.title; // 应天府 (a GeoJSON Feature: L.geoJSON(hit.prefecture))After exporting, serve the repository (python3 -m http.server 8000) and open http://localhost:8000/geojson/demo.html for a Leaflet example: drag the year slider, click the map, or open demo.html?year=1415&lon=118.78&lat=32.06 to load, highlight and zoom automatically. The data is GPL-3.0, and historical borders are schematic approximations.
Credits & License
Historical GIS References: Tan Qixiang's The Historical Atlas of China (谭其骧主编《中国历史地图集》), CHGIS (Harvard-Yenching Institute & Fudan University), Robert M. Hartwell historical GIS datasets, and aourednik/historical-basemaps (GPL-3.0).
Modern Provincial Reference: DataV GeoAtlas open administrative boundary data.
Classical Guqin Audio: Wikimedia Commons public-domain recordings (Liu Shui, Pingsha Luoyan, Yangguan Sandie, Zuiyu Changwan, Jiu Kuang).
Note: Historical territorial contours and prefecture boundaries in this atlas are schematic approximations intended to illustrate broad historical jurisdictions rather than modern surveyed borders.
Contributing: See CONTRIBUTING.md (中文贡献指南) for repository structure, data conventions, and validation checks.
License: Released under GPL-3.0 (see LICENSE). Copyright © 2026 DeanChensj.
Exception: Prefecture-level boundaries and Warring States territories derived from CHGIS V6 and the Hartwell China Historical GIS remain subject to their original terms (academic, non-commercial use only) and are not relicensed under GPL-3.0.
Available Tools
3 toolsinspect_personA
Query the spatio-temporal life & poetry chronicle (点人溯事) of a single Chinese historical figure/monarch, or compare 2–4 figures for shared encounters & parallel lives (同途相逢 / 时空平行对照) on the Jiangshan Historical Atlas. Returns biographical summary, chronological geocoded stops, shared encounter events, and a shareable deep-link URL.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response and deep-link UI language (default: "zh"). | |
| stop | No | Optional 0-based stop index to focus on a specific life event. | |
| person | Yes | Single figure or comma-separated figures (2–4) in Chinese, English, or Pinyin (e.g. "sushi", "苏轼", "libai,dufu", "李白,杜甫", "zhugeliang,simayi"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose the return payload (biographical summary, geocoded stops, shared encounters, deep-link URL), which implies a read-only operation, but says nothing about permissions, rate limits, or what happens with unknown/ambiguous figure names.
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 the core action and scope, followed by the return contents. The bilingual parentheticals add token weight but help match Chinese-language queries, so they largely earn their place.
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?
There is no output schema, and the description compensates by enumerating the returned artifacts, including the deep-link URL. Combined with full schema coverage for three simple parameters, an agent has enough to call it correctly; only edge-case behavior 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?
Schema coverage is 100%, so the schema already documents lang, stop, and the comma-separated multi-person format with examples. The description reinforces the 2–4 figure comparison constraint but adds no syntax or format detail beyond the schema; baseline 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 (Query) and a precisely scoped resource: the life/poetry chronicle of a single Chinese historical figure or a 2–4 figure comparison. The person-centric scope implicitly separates it from inspect_place and search_atlas, but no sibling is named explicitly.
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 two modes (single figure vs. comparative 2–4 figures) imply when to use it, but there is no explicit when-not guidance, no mention of when to prefer inspect_place or search_atlas, and no prerequisites or ambiguity-resolution notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_placeA
Query the historical and administrative context of a Chinese city, poem landmark, strategic pass, battlefield, or multi-stop route on the Jiangshan Historical Atlas (403 BCE – 2026 CE). Returns the reigning monarch/era, controlling regime (polity), macro-region (dao/lu/province), prefecture (jun/zhou/fu), modern province/city, 2,400-year city/pass lore, and a shareable deep-link URL.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response and deep-link UI language (default: "zh"). | |
| year | Yes | Historical year (-403 to 2026, negative for BCE, no year 0) or comma-separated years for multi-year trajectories (e.g. "1079,1080,1094,1097"). | |
| place | Yes | Canonical ancient/modern place name in Chinese, English, or Pinyin (e.g. "长安", "蓝关", "浔阳", "Chang'an"), or comma-separated route stops (e.g. "剑外,巴峡,巫峡,襄阳,洛阳"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses the rich return fields (monarch/era, regime, macro-region, prefecture, modern location, lore, deep link) and the expansive temporal scope. It omits operational details like read-only status (implied by 'Query') and rate limits, but the return value transparency is strong.
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 tightly written sentences: the first establishes the purpose and scope, the second enumerates the return fields. The return list is dense but every item earns its place by conveying what the agent will receive.
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 parameterized query tool with no output schema and no annotations, the description provides a good picture of inputs (entity types, temporal range) and outputs (specific returned fields plus deep-link URL). It leaves minor gaps like error behavior and explicit read-only confirmation, but nothing critical for correct invocation.
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 description coverage is 100%, so the schema already fully documents the year format, place format (including comma-separated routes), and language enum. The description adds no parameter-level meaning beyond confirming that multi-stop routes and historical entities are supported.
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 ('Query') and resource ('historical and administrative context of a Chinese city, poem landmark, strategic pass, battlefield, or multi-stop route') with a clear temporal scope. The entity type and atlas name distinguish it from inspect_person and search_atlas, though siblings are not explicitly named.
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?
Usage is implied by the query intent, but there is no explicit guidance on when to use this vs search_atlas or inspect_person, nor any when-not conditions. An agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_atlasC
Search the Jiangshan Historical Atlas across 1,753 ancient cities, 185 poetic/battlefield landmarks, 20 strategic mountain passes, 113+ historical figures, 351 imperial eras, and 471 chronological milestones.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response language (default: "zh"). | |
| limit | No | Maximum number of results to return (default: 8, max: 20). | |
| query | Yes | Search keyword in Chinese, English, or Pinyin (e.g. "长安", "安史之乱", "赤壁", "贞观", "苏轼"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only lists corpus statistics. It does not disclose result structure, ranking behavior, matching semantics, or expected output beyond the schema's limit field.
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 a single front-loaded sentence with the core action stated first. It is somewhat stats-heavy but remains compact and readable.
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 search tool with no annotations and no output schema, the description is too thin. It explains what corpus is searched but not what a search returns, how results should be interpreted, or how the three siblings should be combined.
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 description coverage is 100%, so the schema already explains query, lang, and limit. The description adds corpus context but no additional parameter meaning or examples beyond what the schema provides.
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 uses a clear verb+resource ("Search the Jiangshan Historical Atlas") and enumerates the entity types covered, which helps an agent understand scope. It does not explicitly distinguish itself from inspect_place and inspect_person, but the search-vs-inspect distinction is reasonably implied.
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?
No guidance is given on when to use search_atlas versus inspect_place or inspect_person. It also does not describe whether search is exploratory, exact-match, or how to proceed after getting results.
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.
3 tool updates
v0.1.0- First observed
inspect_person - First observed
inspect_place - First observed
search_atlas
TDQS
Scored across 3 tools
The three tools have clearly distinct roles: inspect_place retrieves place context, inspect_person retrieves person/compare context, and search_atlas performs cross-entity discovery. While search can surface cities or figures also handled by the inspect tools, the search-vs-inspect boundary is explicit and easy for an agent to apply.
All names follow a consistent verb_noun pattern: inspect_place, inspect_person, search_atlas. The convention is predictable and readable, with no mixing of camelCase, vague verbs, or inconsistent action styles.
Three tools is minimal but reasonable for a focused read-only historical atlas: one discovery tool and two entity-specific inspectors. It sits at the low end of the appropriate range, so it is slightly thin but not mismatched to the purpose.
The surface covers the core read-only workflows: search across the atlas, inspect a place or route, and inspect/compare people. Minor gaps remain, such as no dedicated timeline/era browse or explicit list operation, but search_atlas mitigates these enough that agents can work around them.
Maintenance
Related MCP Connectors
Historical borders and dated map events with source attribution and coverage limits.
Structured Chinese official data for AI agents: 426 entries, JSON-LD, read-only. find/get/list
Bazi (Four Pillars) and Qimen Dunjia charts with true solar time and historical time zones.
Chinese dictionary (124k entries), HSK levels, text segmentation and 195 grammar points.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables querying of China Historical Geographic Information System (CHGIS) database for historical place names, administrative divisions, and geographical data from 222 BCE to 1911 CE. Supports searching by place ID, name, year, administrative type, and retrieving historical context and hierarchical relationships.33MIT

Timepoint MCPofficial
FlicenseNot gradedqualityBmaintenanceProvides structured access to a temporal knowledge platform for searching historical events and browsing a causal graph of over 2,000 years of history. It enables users to generate rich historical scenes, interact with period-appropriate characters, and run complex temporal simulations.-- FlicenseNot gradedqualityDmaintenanceEnables querying 10,000 years of historical social-complexity data from the Seshat Global History Databank through 9 tools, allowing counterfactual analysis and comparison of polities in natural language.1-
- AlicenseAqualityCmaintenanceA traceable Chinese-history MCP server that enables querying of nine classical Chinese texts (e.g., 史记, 汉书) with citations and honest status labels. It provides four tools to search events, persons, places, and qualities, all with provenance.430 PyPI3MIT