mcpField
B
Borgo

Borgo

本地服务
borgo.abcastor.com地图与出行01 天前更新

关于 Borgo

Borgo 用开放数据比较不同城市的生活条件,并可按个人重视的指标加权。它面向选择居住地的人及其 Agent,数据注明来源和适用范围,并提供浏览器、命令行和 MCP 入口。

主要功能

  1. 01按权重比较城市指标
  2. 02估算税后收入与租金结余
  3. 03检查家庭成员的迁居资格
  4. 04查看气候、空气与安全数据
  5. 05追溯数据来源和适用范围

适用场景

  1. 01为搬迁选择候选城市
  2. 02比较不同城市的税后收入和租金
  3. 03按气候、安全等偏好筛选地点

MCP 相关

Borgo 可作为 MCP 服务运行,让 AI 助手通过工具获取城市数据并进行比较。它与浏览器应用和命令行使用同一套引擎。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"abcastor-borgo": {
"command": "npx",
"args": [
"-y",
"@abcastor/borgo"
]
}
}
}
启动命令npx -y @abcastor/borgo

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@abcastor/borgo0.1.0

工具

11

收录的工具列表 · 更新于 4 天前

参数类型必填说明
limitinteger否查询默认值为 10,完整列表为 100
querystring是名称、别名或 ID;留空则列出所有城市
countrystring否ISO alpha-2 筛选条件

详细介绍

Borgo

checks

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 的地理编码器)、WikidataCC BY 4.0、CC0城市
气温和体感温度、逐小时气温、云量、降雨日数Open-Meteo(ERA5 再分析数据,最近五个完整年份)CC BY 4.0城市坐标
实测日照WMO 1991-2020 normals(NOAA NCEI)、MeteostatWMO 政策、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 WDICC BY 4.0国家
腐败控制World Bank Worldwide Governance IndicatorsCC BY 4.0国家
政治立场,从左到右最近一次全国选举:选举机构的官方结果,政党立场来自 ParlGov;涵盖 18 个国家、瑞士各州、加拿大各省和澳大利亚各州;若定位的选票过少,则不显示数值;参见 docs/positions.mdCC BY 4.0(此处汇编)国家、州、省或州
堕胎法、法律对同性伴侣的规定各项法律法规,均附有引用官方文本国家或美国各州
生活满意度OECD Well-being DatabaseOECD 条款国家
人均研究产出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/。

Chip,Castor 的海狸;Castor,我们会筑坝

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。