关于 Borgo
Borgo 用开放数据比较不同城市的生活条件,并可按个人重视的指标加权。它面向选择居住地的人及其 Agent,数据注明来源和适用范围,并提供浏览器、命令行和 MCP 入口。
主要功能
- 01按权重比较城市指标
- 02估算税后收入与租金结余
- 03检查家庭成员的迁居资格
- 04查看气候、空气与安全数据
- 05追溯数据来源和适用范围
适用场景
- 01为搬迁选择候选城市
- 02比较不同城市的税后收入和租金
- 03按气候、安全等偏好筛选地点
MCP 相关
Borgo 可作为 MCP 服务运行,让 AI 助手通过工具获取城市数据并进行比较。它与浏览器应用和命令行使用同一套引擎。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
11收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 查询默认值为 10,完整列表为 100 |
| query | string | 是 | 名称、别名或 ID;留空则列出所有城市 |
| country | string | 否 | ISO alpha-2 筛选条件 |
详细介绍
Borgo
Borgo(意大利语,意为村庄)可比较任意数量城市的开放数据,并根据你的重视程度加权:税后收入和扣除房租后可支配的金额、家庭成员中哪些人无需签证即可迁往当地,以及各地在气候、空气、安全、健康和研究方面的表现。每项数据都注明来源、所描述的时间段,以及描述的是城市本身还是仅其所在国家。
它可在浏览器中运行,无需账号或服务器。同一套引擎也可作为命令行工具(borgo,也支持 where-to-live)和 MCP 服务运行,因此 AI 助手可以根据你会看到的数据回答“我该住在哪里?”
我为什么构建它: 我和一位联合创始人当时在决定住在哪里创办公司,权衡旧金山、伦敦和都柏林,以及留在这里的都灵。我整理自己的比较时发现,我查阅的每个网站都只提供一部分信息:有的提供价格水平,有的提供天气,有的提供薪资计算器,但没有一个会根据我看重的因素加权,也不会说明我们两人是否都能合法地在那里工作。曾经整合这些信息的 Teleport 已经不复存在。于是我构建了自己想要的比较工具并将其开源,让任何人(或其 Agent)都能按自己的权重使用。
**状态:**早期阶段。任何城市都可按需获取数据;已有 57 个城市的公开页面。涵盖 26 个国家(欧洲大部分国家、英国、美国的八个州税务模块和纽约市、加拿大、澳大利亚、新加坡、日本和阿联酋)的税后收入,以及适用于迁入者的 17 种税制,并说明其条件和持续时间。
快速开始
使用 Node.js 22.13 或更高版本,无需克隆,只需一条命令即可运行 Borgo:
npx -y @abcastor/borgo mcp # the MCP server, over stdio
npx -y @abcastor/borgo compare Lisbon Berlin --salary "60k EUR" # the command line
将 MCP 服务添加到你的助手。
Claude Code
claude mcp add borgo -- npx -y @abcastor/borgo mcp
Claude Desktop、Cursor 及其他使用 JSON 配置的客户端:
{
"mcpServers": {
"borgo": {
"command": "npx",
"args": ["-y", "@abcastor/borgo", "mcp"]
}
}
}
Codex
codex mcp add borgo -- npx -y @abcastor/borgo mcp
docs/agents.md 列出了所有工具、所有命令,以及各客户端保存配置的位置。
从克隆的项目运行时,需要 Node.js 26 或更高版本,可直接运行 TypeScript 源文件:
git clone https://github.com/ABCastor/borgo && cd borgo
npm install
node pipeline/build-data.ts # assemble data/ into public/data/dataset.json, refusing anything unsourced
node scripts/build.ts --serve # build dist/ and serve it at http://127.0.0.1:8794/
npm test # engine, money model and tax modules
选好你的城市,答案就一目了然:这些城市按两个指标排名——剩余资金和宜居天气天数,并用一句话说明哪个城市领先,以及哪项输入能让答案更准确(你的薪水、一个没有开源数据的租金,或一本护照)。宜居天气天数由你定义:温度范围(起步范围为体感温度 18 至 30 °C)会显示在宜居天气指标和每张信息表上。你也可以添加第三个优先事项;其他优先事项(居住权重、健康、安全、有了孩子后的需求、人际关系、工作与抱负、出行、自然环境、你当前的所在地,以及你自定的条件)都收纳在更多优先事项下,每个类别对应一个指标,类别中的细项则包含在其中。谁可以搬去那里是一项检查,而非指标:填写每个人的护照信息,每张信息表都会标明可以前往、需要签证或许可,或尚未检查;将其设为必须通过,即可排除其他选项。我们不会假设你有薪水:只有在你填写薪水后,资金才会计入(所有城市使用同一个数值,或为每个城市分别填写);养老金占比、税务设置和新移居者税制则放在每张资金信息表的高级选项中。点击任何数字即可查看其来源,也可以用自己的数字替换。设置(齿轮图标)可切换 °C 或 °F、公里或英里、资金显示所用的货币,以及数字和日期的书写格式。
你的比较数据会保存在浏览器中(本地存储),不会发送到任何地方。点击分享后,复制链接前会先显示链接将包含哪些内容:城市、权重和必须通过的条件、宜居天气范围、住房面积和设置。薪酬、支出和储蓄;搬迁人员信息(姓名、护照、年龄、子女);你自己的数字(租金和替换的数值);你自定的条件;以及你当前的所在地,默认不会包含在内,除非你勾选相应选项。链接会将这些内容放在 #share= 之后;这部分地址不会由浏览器发送到服务器,应用读取后会将其从地址中移除。页面只会加载自身文件,不会加载其他内容;添加地点时,只会向覆盖该地点的数据源发送地点名称和坐标。
探索更多地点位于你的城市列表下方(也有独立页面地图),可根据你看重的内容为全世界着色:你的自定义分数、你设定范围内的宜居天气天数、家庭成员可以居住的地点、剩余资金或其他指标;移动指标滑块时,地图也会随之更新。地图显示一年中有多少个月(0 至 12 个月)的午后最高气温落在你的宜居天气范围内;你更改范围时,地图也会随之更新。你的城市会以圆圈标出,并根据地图显示的指标排名。将鼠标指向任何城市或城镇即可查看信息;点击即可固定其信息卡片(显示范围内的月份数、填写薪水后的税后收入,以及排名所依据的数字),并可通过添加到我的城市从卡片中添加该地点。信息卡片支持键盘操作,按 Escape 即可关闭;在手机上,卡片会从屏幕底部弹出。
分数如何计算
每一行都会根据固定的最差值和最佳值,将一个数据转换为 0 到 1 的分数:PM2.5 的范围是从 35 µg/m³ 到 WHO 指南值 5,一年中最短的白昼则是从 6 小时到 11 小时。你设置的权重决定该行最多能贡献 100 分中的多少分。某个组的刻度值是其各行权重之和:调整刻度值时,新权重会按原有比例分配给这些行,因此得分与手动逐行设置时相同。缺失的数据绝不会比真实数据得分更高。若某座城市缺少某一行的数据,它在该行的得分会采用其他城市中的最低值,因此数据缺失只会让它失分,不会让它占据更好的名次;所有城市都缺少数据的行不会为任何城市计分;若某座城市缺少其他城市具备的数据,该城市会标记为“数据不完整”,并显示其得分中有多少比例基于自身数据,以及缺少哪些数据。你未提供的护照、薪水或租金不属于数据不完整:系统会直接询问这些信息。货币数据绝不会被填补:如果某座城市缺少租金,所有城市都会仅按税后收入比较,并扣除工资之外另行购买的健康保障费用(如果没有提供薪水,则仅按成本比较;或者将货币项目排除在评分之外);同时会有一行说明这一点,并指出如何补齐输入,例如“添加苏黎世的租金”。如果某座城市缺少的数据仍可能让它超过领先城市,结果会说明领先地位暂属暂定,并指出缺少哪些数据。标记为 必须通过 的行会显示通过、未通过或未知:未通过的城市会被排除;暂时无法核实的城市(缺少数据或未提供护照)会显示为未知,排名低于所有通过的城市。“任何人都能搬去那里”是通常采用的条件;如果一个人未提供护照信息,系统不会核查,而不会认定其需要签证。
每月“可留存金额”是税后收入(按所在国家的税制模型计算的税前薪水,扣除养老金缴款后)减去租金、按城市物价水平调整的个人月支出、扣除公共补贴后 6 岁以下儿童的托育费用(你提供时采用你自己的费用,不使用付费托育时则为零),以及自付健康费用和在工资之外购买的任何健康保险费。如果某项数据未计入已发生的费用(例如保费,或没有公开数据的托育费用),系统会标注“最多”,说明缺少什么并提供可补充该信息的字段;在数据完整之前,该项不会计分。税额估算会在数据旁注明;如果你计入新移居者税制但尚未确认所有条件,系统会将其标注为一种情景。生活成本会显示在旁边,只有在你为其设置权重时才会单独计分,因为可留存金额已经计入所有费用。储蓄会显示为可覆盖多少个月的支出,不计收入。你可以覆盖其中任何一项。
数据来源
项目维护的是经过整理的来源列表,而不是这些来源数据的副本。registry/ 中每个来源对应一个文件,记录其通俗易懂的测量内容、适用地点和时间、许可条款、是否允许重新分发、获取方式(端点、浏览器是否可以读取、是否需要密钥)、更新频率以及审核者。你的浏览器、CLI 或 MCP 服务会从这些来源获取你所查询地点的数据,并在你自己的设备上保存数据及其读取地址。请参阅 docs/architecture.md。
任何真实地点都可以使用:在应用中输入“巴勒莫”,运行 borgo fetch "Palermo, IT",或通过 MCP 服务向你的 Agent 提问。项目中提交了一份包含 57 个种子城市的开放许可数据小型快照,以便公开城市页面显示数据。
| 内容 | 来源 | 许可 | 级别 |
|---|---|---|---|
| 地点、坐标、人口、地区 | GeoNames(通过 Open-Meteo 的地理编码器)、Wikidata | CC BY 4.0、CC0 | 城市 |
| 气温和体感温度、逐小时气温、云量、降雨日数 | Open-Meteo(ERA5 再分析数据,最近五个完整年份) | CC BY 4.0 | 城市坐标 |
| 实测日照 | WMO 1991-2020 normals(NOAA NCEI)、Meteostat | WMO 政策、CC BY 4.0 | 最近的气象站 |
| 细颗粒物(PM2.5) | WHO Ambient Air Quality Database,若无数据则使用 CAMS 模型数据 | WHO 条款、CC BY 4.0 | 城市 |
| 租金 | ONS(英国)、CSO 和 RTB(爱尔兰) | OGL v3、CC BY 4.0 | 城市或地区 |
| 物价水平、凶杀案、预期寿命、医生、失业率 | World Bank WDI | CC BY 4.0 | 国家 |
| 腐败控制 | World Bank Worldwide Governance Indicators | CC BY 4.0 | 国家 |
| 政治立场,从左到右 | 最近一次全国选举:选举机构的官方结果,政党立场来自 ParlGov;涵盖 18 个国家、瑞士各州、加拿大各省和澳大利亚各州;若定位的选票过少,则不显示数值;参见 docs/positions.md | CC BY 4.0(此处汇编) | 国家、州、省或州 |
| 堕胎法、法律对同性伴侣的规定 | 各项法律法规,均附有引用 | 官方文本 | 国家或美国各州 |
| 生活满意度 | OECD Well-being Database | OECD 条款 | 国家 |
| 人均研究产出 | OpenAlex 机构数据 | CC0 | 城市 |
| 每 1,000 名居民中的 GitHub 开发者 | GitHub 用户搜索:仅统计按所在地筛选的个人资料总数 | 无数据许可;仅统计数量(GitHub 可接受使用政策) | 城市 |
| 到建成区城市边缘的距离 | GHSL Urban Centre Database 2025(欧盟委员会 JRC) | CC BY 4.0 | 城市 |
| 拥有学位的成年人 | Eurostat 区域劳动力调查(edat_lfse_04) | Eurostat 允许再利用,须注明出处 | 地区 |
| 适宜步行的街道、自行车网络 | 通过 Overpass API 获取的 OpenStreetMap 数据 | ODbL 1.0 | 城市 |
| 世界地图:陆地、国家、城镇 | Natural Earth 1:50m 国家数据、1:10m 居民点数据 | 公共领域 | 国家、城镇 |
| 世界地图:各月下午最高气温 | NASA POWER 气候数据(MERRA-2,2001-2025) | CC0 | 约 50 km 的网格,按地图图块取平均值 |
| 自由流动 | 欧盟指令 2004/38/EC、《欧洲经济区协定》、欧盟与瑞士协定、英国与爱尔兰共同旅行区、跨塔斯曼安排 | 官方文本 | 国家 |
Numbeo、WeatherSpark、EIU 等类似的封闭来源,在注册表中仅作为链接页面收录:其条款禁止复制和自动读取,因此应用会链接到这些来源,且不会有任何 Agent 获取其内容。你自行查阅后得出的数值,可以作为你自己的数据保存在浏览器中或自己的缓存里,绝不会复制到本项目中。 政治和法律是立场,不是分数。 你先说明自己的立场,地点会根据它与你的立场有多接近来评分;在此之前,这些线条只呈现事实,不计入分数。请参阅 docs/positions.md,以及 docs/values-research.md,了解人们选择居住地时会权衡什么,以及每个刻度背后的开放数据。
日照是实测的,不是模型推算的。 与气象站数据相比,再分析模型会将日照时数高估 30% 至 90%(ERA5 给出的伦敦年日照时数为 2,765 小时;希思罗机场实测为 1,595 小时),因此日照数据只取自气象站的气候平均值,附近没有气象站的地方则缺少数据。
真正的缺口在于租金。 没有开放数据源提供全球各城市的一居室租金:目前官方数据只覆盖英国和爱尔兰。其他地区的应用会询问你自己的估算,而不是凭空捏造。科研产出按每位居民计算来自大学、实验室、医院和公司的论文数;这是衡量“有谁参与其中”的代理指标,并非初创公司数量。凶杀案数据和其他世界银行数据均为代表该城市的国家级数据,并会在数字旁标注“国家级”。
为它添砖加瓦
所有内容都由小型、彼此独立的部分组成。
- 城市无需任何操作:任何地点都可按需解析。种子城市(即拥有公开页面的城市)只需在
data/cities.seed.json中添加一行;运行node pipeline/sources/geonames.ts,然后运行快照数据源。 - 数据源是在
registry/中的一个文件(复制一个类似文件;npm test会验证它)。若要按需获取数据,还需在src/fetch/中添加一个获取器,并将其注册到src/fetch/index.ts(浏览器和 Node)或src/fetch/node/index.ts(仅 Node)。pipeline/build-data.ts会拒绝使用注册表未批准再分发、或未声明适用于该指标的数据源生成快照数据。 - 指标是在
src/core/metrics.ts中添加一个条目。 - 评分项是在
src/core/criteria.ts中添加一个条目:说明它询问什么、最差值和最佳值是什么,以及如何读取数据。它会根据类别加入某个分组,或通过src/core/groups.ts中的名称加入分组。 - 某个国家的税务是在
src/tax/中的一个模块,包含其官方数据源和注意事项;在src/tax/index.ts中注册,并在test/中提供计算示例。
拉取请求为每个新增数字都需要提供数据源和许可协议。
欢迎大家及其 Agent 更正任何数字、规则或数据源:可在任何数字的数据源下点击 提出更正,使用提案表单,或在 MCP 服务中使用 propose_change(在命令行中运行 borgo propose)。每项提案都需引用其来源的官方文本,并会在 GitHub 上核查后进行审核;borgo stale 会列出需要审核的整理后事实。请参阅 CONTRIBUTING.md。
许可
本地图秉承 Nick Winans 的 Where to Live 地图(MIT)的理念,该地图展示了美国适宜居住的日子;本项目未复制其中的代码。
代码采用 Apache License 2.0。编译后的数据采用 CC BY 4.0,每个数据源自己的许可协议均与其数据一同保留。字体采用 SIL Open Font License,其许可文件位于 public/fonts/。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。