Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
Borgo is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Compare cities to live in on open, sourced data: take-home pay, rent, visas, climate, safety.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user borgo-mcp '--' npx -y @abcastor/borgo mcp
# 2 — ask your agent for something these tools do
# search_cities, get_city, compare_cities and 8 more
Borgo costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Borgo as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user borgo-mcp '--' npx -y @abcastor/borgo mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
11 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Find cities already in the dataset (the snapshot and places fetched before) by name, alias or id, optionally within one country. Returns ids for the other tools, how many match and whether more do. A place not found here can still be fetched: call fetch_city.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Name, alias or id; empty lists every city |
| country | string | no | ISO alpha-2 filter |
| limit | integer | no | Default 10 for a query, 100 for the full list |
One city's figures, each with source, period, geographic level and licence; daylight; the take-home pay model; whether each person in a household may live and work there, with the rules checked; and links to sources we may not copy. Compact by default (figures with a value, long series counted);…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| city | string | yes | City id or name |
| passports | array | no | Optional: each person's passports, e.g. [['US']] or [['IT'],['US','IE']]: who may live and work there |
| metrics | array | no | Only these metric ids, e.g. ['rent_1bed','pm25']; list_metrics_and_sources kind "metrics" lists them |
| detail | string | no | "summary" (default) or "full" |
Rank any number of cities for a person or household: a verdict, the score out of 100 from their weights with points and reasons per line, must-pass lines as pass, fail or unknown, each earner's take-home pay and what is left after rent and spending, who can move there, how the set was scored, and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cities | array | yes | City ids (e.g. turin-it) or names in any common spelling (Turin, Torino, 'Paris, FR'); a name two places share needs its country |
| preset | string | no | Starting weights |
| weights | object | no | Weight 0-100 per criterion, on top of the preset. Criteria: … |
| only | array | no | Score only these criteria; every other line gets weight 0 (each listed one keeps its weights value, else 100). For a one-line question: only ["nice_days"] with comfort {min:20,max:28} |
| detail | string | no | "summary" (default): verdict, ranking, weighted lines with citations, money in brief, who can move there, notes, required unknowns and next inputs. "full": every line, tax line and source, for program |
| limit | integer | no | How many ranked cities to describe in the summary (default 10); the ranking counts the rest |
| household | array | no | Everyone moving, you first. Anyone after you can bring their own pay; a spouse counts for joint filing even with none |
| salary | object | no | Your gross yearly salary, the same everywhere |
| pension | number | no | Share of your gross paid into a pension, 0.05 = 5%: it leaves take-home pay and is shown as saving, not cost. Tax relief is modelled for …; elsewhere it is not modelled and the share is counted as sav |
| children | array | no | Children's ages: childcare after public support for under-6s (OECD), child credits and allowances where the tax uses them, health for each person |
| paidChildcare | boolean | no | Whether the household pays for childcare for its children under 6 (default true). false: no childcare cost is counted. Ask when it matters: the default prices full-time care for an OECD reference hous |
| childcareCost | object | no | What the household actually pays for childcare in a city, after support, keyed by city id or name, in the city's currency, with per "month" or "year": replaces the OECD reference figure |
| healthPremium | object | no | The household's health insurance premium bought outside pay (US, CH, NL), keyed by city id or name, in the city's currency, with per "month" or "year" (a year is counted as a twelfth a month) |
| regimes | object | no | Newcomer tax regime per country, ISO alpha-2 -> regime id from list_metrics_and_sources. None counts unless named here; a named one is a scenario until the person's facts and confirmations meet every |
| salaryByCity | object | no | Gross yearly salary per city (offers or estimates), keyed by city id or name |
| displayCurrency | string | no | Currency to show amounts in (default: the salary's, else EUR) |
| housing | string | no | — |
| spending | object | no | Monthly spending on everything except housing, childcare and health, which are counted separately |
| savings | number | no | Savings in the display currency, for runway |
| comfort | object | no | Comfortable daytime temperature for the Nice days line, °C: a dry, mostly clear day whose average from 8 am to 8 pm is inside it counts. Default 18-30 on the feels-like temperature; basis "air" uses t |
Take-home pay for a gross yearly salary in a country (and region or city, for regional and municipal taxes), with every tax line, the model's caveats and its official sources. Takes age, children, a pension share, a newcomer regime, and a partner (joint filing for a married couple where the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| country | string | no | ISO alpha-2 or name; optional when city is given |
| city | string | no | City id or name; sets country, region and municipal taxes |
| region | string | no | ISO 3166-2 subdivision, e.g. US-CA, GB-SCT, IT-21 |
| gross | number | yes | Gross yearly salary |
| currency | string | no | Currency of gross; default the country's |
| tweak | object | no | — |
| displayCurrency | string | no | — |
| age | integer | no | Age in years, where the tax uses it |
| children | array | no | Children's ages, for child credits and allowances |
| pension | number | no | Pension share of gross, 0.05 = 5% |
| regime | string | no | A newcomer regime id for this country (list_metrics_and_sources kind "regimes") |
| partner | object | no | A second earner in the same household |
What the dataset holds: scoring lines with their scales and default weights, metrics with coverage, sources with licences, take-home pay models, newcomer regimes with each condition's id, presets, and the link-only sources. Pass kind for one part (kind "regimes", country "NL" lists the Dutch…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | no | One part only; leave out for everything |
| country | string | no | ISO alpha-2, with kind taxModels or regimes |
How scores, weights, must-pass lines, missing data, the money model, the right to live and the open-data rule work, with every scale.
No parameter schema on file.
The curated list of sources: what each measures (with a plain definition), coverage, licence, whether it may be redistributed, how it is fetched (endpoint, CORS, key) and who vetted it, plus link-only pages such as Numbeo and WeatherSpark. Filter by metric or country; pass a place to get the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| metric | string | no | Metric id, e.g. pm25, rent_1bed, sunshine_hours |
| country | string | no | ISO alpha-2: only sources covering this country |
| access | string | no | — |
| city | string | no | A city id or name in the dataset, to fill in each publisher's page for it |
Resolve any real place ("Palermo, IT", "Sligo", "Bangalore", or geonames:<id>; an island or a country, "Tenerife" or "Malta", is read as its main town or capital, and the answer says so) and fetch its figures from every registry source that covers it: climate (air and feels-like temperature with…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| place | string | yes | Place name, optionally with country: "Palermo, IT"; or geonames:<id> |
| sources | array | no | Only these registry source ids |
| refresh | boolean | no | Fetch again even if cached |
| detail | string | no | "summary" (default): the id, what each source gave, what the place lacks, figures with long series counted. "full": every value and URL |
Keep a figure in this person's cache, with its source id from list_sources, the page URL and the period: one you read in an open source (a city statistics office table), or one the person read on a link-only page (Numbeo) and gave you. Never fetch link-only pages yourself. The figure counts like…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| city | string | yes | City id or name (fetch_city first for a new place) |
| metric | string | yes | Metric id, e.g. rent_1bed |
| value | yes | A number, or 12 monthly numbers for a monthly metric. Money in the city's local currency. | |
| unit | string | no | The unit the figure is in, as list_metrics_and_sources gives it (e.g. EUR/month for rent in Lisbon). Checked against the metric's unit; leave it out only when you are sure |
| source | string | yes | Registry source id, e.g. numbeo |
| url | string | yes | The page the figure was read on |
| period | string | yes | What time it describes, e.g. 2026 or 2026-09 |
| level | string | no | — |
| note | string | no | — |
The facts Borgo encodes by hand (tax models, abortion and same-sex couples law, paid leave, election results, residence rules, corrected figures), each with the day it is due to be compared with its official source again, the most overdue first. Each row says why it is due, links its current…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| within | integer | no | Also list facts due within this many days (default 0: only those already due) |
| kind | string | no | Only one kind of fact |
| country | string | no | ISO alpha-2: only this country's facts |
| asOf | string | no | The day to compare against, YYYY-MM-DD (default today) |
| limit | integer | no | Default 50 |
Turn a correction to a Borgo figure, rule or source into a proposal the maintainers review, checked the way the project's GitHub workflow checks it: the target exists, the value has the metric's shape and unit, the citation is an official text (statute, gazette, official table or page, or a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | yes | correction (a figure shown is wrong), figure (a figure Borgo lacks), rule-change (a tax, leave, residence or law rule), source (a registry entry), link (a broken or missing address) |
| city | string | no | For a figure: the city id (search_cities) |
| metric | string | no | For a figure: the metric id |
| source | string | no | For a figure: the registry source id it comes from (get_city shows it) |
| file | string | no | For a rule, source or link: the file, e.g. src/tax/it.ts or registry/ons-pipr.json (list_stale gives it) |
| path | string | no | For a rule, source or link: what inside the file changes, e.g. ABORTION.US-NY or homepage |
| current | string | no | The value shown now |
| proposed | yes | A figure in the metric's unit (12 numbers for a monthly one), or the new rule in a sentence | |
| unit | string | no | The figure's unit, e.g. GBP/month |
| period | string | no | The time the value describes, e.g. 2026-09 |
| level | string | no | The area the value describes |
| citation | object | yes | The primary citation: the official text itself |
| leads | array | no | News or other pages that pointed to the change: leads, never citations |
| agent | string | yes | Your name and version, name@1.0 |
| operator | string | yes | The person or project that runs you and answers for the proposal |
| note | string | no | For the reviewer; public, so no personal details |
| offline | boolean | no | Skip opening the cited pages |
| post | object | no | Only after the person agreed to post this exact proposal: the confirm token from the previous call |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under Apache-2.0
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Borgo or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Borgo can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.