Mark O'Travel MCP服务器
一个MCP(模型上下文协议)服务器,从KML文件中公开旅行数据,以及一个生成交互式合唱可视化的构建时图生成器。
住在 明宇网
系统架构
┌─────────────────────────────────────────────────────────────┐
│ doc.kml │
│ (Mark O'Travel export file) │
│ Places, UNESCO WHC sites, visit statuses │
└──────────────┬──────────────────────┬───────────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌───────────────────────────────────┐
│ kml-parser.ts │ │ kml-parser.ts │
│ (shared module) │ │ (shared module) │
└──────────┬───────────┘ └──────────┬────────────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌───────────────────────────────────┐
│ index.ts │ │ generate-map.ts │
│ MCP Server │ │ Build Script │
│ │ │ │
│ ┌──────────────────┐ │ │ 1. Parse KML │
│ │ get_visited_ │ │ │ 2. Filter to 195 UN countries │
│ │ places │ │ │ 3. Normalize statuses │
│ ├──────────────────┤ │ │ 4. Group sub-regions by country │
│ │ get_places_ │ │ │ 5. Generate self-contained HTML │
│ │ by_status │ │ │ │
│ ├──────────────────┤ │ └──────────┬────────────────────────┘
│ │ search_places │ │ │
│ ├──────────────────┤ │ ▼
│ │ get_travel_stats │ │ ┌───────────────────────────────────┐
│ └──────────────────┘ │ │ map.html (generated) │
│ │ │ │
│ stdio transport │ │ ┌─────────────────────────────┐ │
│ ▲ │ │ │ Leaflet + CARTO tiles │ │
└─────────┼────────────┘ │ │ GeoJSON country polygons │ │
│ │ │ Color-coded by status │ │
▼ │ │ Click → sub-region panel │ │
┌──────────────────────┐ │ │ Stats bar + legend │ │
│ Claude / MCP │ │ └─────────────────────────────┘ │
│ Client │ └──────────┬────────────────────────┘
└──────────────────────┘ │
▼
┌───────────────────────────────────┐
│ index.html (landing page) │
│ mingyu.org │
│ │
│ Embeds map.html via │
│ GitHub Pages deployment │
└───────────────────────────────────┘数据流
- 来源:
doc.kml--从Mark O'Travel应用程序导出。包含具有访问状态的地点(国家和次地区)和联合国教科文组织世界遗产。
- 解析器:
kml-parser.ts--将KML/XML解析为类型化的共享模块Place[]和WorldHeritageSite[]阵列。MCP服务器和地图生成器都使用。
- MCP服务器 (
index.ts)--将旅行数据作为工具通过stdio公开:
- get_visited_places --所有参观过的地方 - get_places_by_status --按状态ID筛选 - search_places --跨地点和联合国教科文组织网站的子字符串搜索 - get_travel_stats --汇总统计
- 地图生成器 (
generate-map.ts)--构建时脚本,该脚本:
- 过滤195个联合国成员国(2个字母的ISO代码) - 对损坏的状态ID进行标准化(例如。, 916343000 → 传输) - 母国下的2600多个子地区 - 输出一个自包含的 map.html 所有数据都内联
- 可视化 (
map.html)--从CDN加载交互式传单地图(运行时无npm依赖):
- 按状态着色的国家多边形:绿色(已访问)、红色(已居住)、橙色(过境)、灰色(未访问) - 单击任何国家,在侧面板中查看子区域细分 - 统计栏和图例
- 着陆页 (
index.html)--通过iframe将地图嵌入到 明宇网,与GitHub Pages一起部署。
项目结构
mingyu.org/
├── index.html # Landing page (GitHub Pages root)
└── mcp-servers/
├── doc.kml # Travel data (Mark O'Travel export)
├── map.html # Generated interactive map
├── package.json
├── tsconfig.json
└── src/
├── types.ts # StatusId enum, Place/WHC interfaces
├── kml-parser.ts # KML → typed data parser
├── index.ts # MCP server (stdio transport)
└── generate-map.ts # Build script → map.html用法
# Install dependencies
npm install
# Build TypeScript
npm run build
# Generate the interactive map
npm run generate-map # → produces map.html
# Start MCP server (for Claude / MCP clients)
npm run start状态图例
| 状态 | 颜色 | ID |
|---|---|---|
| 已访问 | 绿色 | 4 |
| 住在红色 | 1 | |
| 过渡 | 橙色 | 5 |
技术栈
- 运行时:Node.js、TypeScript(ES2022模块)
- 主控程序:
@modelcontextprotocol/sdk--stdio服务器传输 - KML解析:
fast-xml-parser - 地图:传单(CDN)、CARTO磁贴服务器、GeoJSON国家边界
- 托管:GitHub页面
