French rental law for tenants and landlords: rent caps, rental zones and unfurnished lease drafts.
Real Estate & PropertyData access / search
- Passed: Handshake
- Passed: Tools listed
- Passed: Updated recently
Median latency 151 ms · Last checked
Explore
Evidence for your next connection.
Independent measurements of remote MCP servers. Every observation has a timestamp.
Read-only probesMCP server · Data access / search
Zoning, parcel, and development feasibility for a street address in Canada and the US.
1 failed · 7 not measured
Median of successful probes over 7 days
Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.
Tool definitions returned by this server
Independent monitoring
Responded
The server completed its last measured handshake. This is an observation, not a guarantee.
Last checked| Test area | Passed | Failed | Unmeasured |
|---|---|---|---|
ConnectionCan a client connect and discover tools? | 5 | 0 | 0 |
Reliability & speedDoes it respond consistently and quickly? | 1 | 0 | 3 |
Access & authenticationWhat is required to use this server? | 1 | 0 | 2 |
Tool qualityAre the tool definitions usable by an agent? | 3 | 1 | 0 |
Publisher identityCan the publisher be traced to its source? | 4 | 0 | 2 |
Unmeasured means there is not enough evidence to decide. How these checks work
Start using Bucky
Choose your client, copy the configuration, then enable the server in your client’s MCP settings.
Run this command in your terminal, then restart Claude Code.
Claude Code
claude mcp add --transport http bucky https://buckybuild.com/api/mcpCapabilities
Look up lot, zone, and building envelope for one street address in Canada or the US. Pass `address`. One address per call; cannot search or compare. Read exception before searching: its parcel zone label identifies the site-specific exception, chain contains the cited text and required references. Use that text first. text_missing means incomplete evidence, never no exception. Prevailing by-laws can be address-specific; do not apply every listed address provision to this lot. A live answer uses one site check from the monthly plan allowance; `usage` says if it was charged and how many are left. getBuckyMcpGuide reports the allowance for free. CMHC rental survey figures describe purpose-built rentals; the new-build proxy is the 2000 or later band. Missing facts are not surveyed or unavailable, never zero. Cite RMS figures as Source: CMHC, Rental Market Survey, October YYYY using referencePeriod. Cite starts and completions with their own source and period. Every envelope value carries a `status`. Never report `not_extracted` or `site_specific_schedule` as no limit or as zero — call `explainFeasibilityStatus` first. Envelope numbers are extracted ceilings. Call `getBylawSection` with a citation `knowledgeSectionId`, or with `coverage.geoDivisionId`, `zone.code`, and the section number, before treating a number as available on this lot. Do not fetch `zone.bylawSourceUrl`. `lot.minLotFrontageM` is the zone minimum. `lot.lotConformity` compares lot width, lot area, and floor area per unit to those minima. A missing input is `unknown`, never a pass. State every fail before quoting a unit count.
DiscoveredPublic city catalogue inventory. Pass exactly one of: cityName, lat and lng together, or geoDivisionId. A city name with multiple matches returns choices; after the user chooses, call again with that candidate geoDivisionId. Never pass a slug. Shows datasets grouped by topic as on file, not loaded yet, unavailable, or not confirmed. This is city coverage, not lot feasibility or operator health. CMHC rental survey figures describe purpose-built rentals; the new-build proxy is the 2000 or later band. Missing facts are not surveyed or unavailable, never zero. Cite RMS figures as Source: CMHC, Rental Market Survey, October YYYY using referencePeriod. Cite starts and completions with their own source and period. If Bucky has not mapped the place, the result points to recording demand. It does not record demand by itself.
DiscoveredExplain one Bucky coverage or per-fact provenance status and the safe next action. This is a pure static lookup: it does not inspect an address, retrieve property data, or call a database, geocoder, AI model, or third-party API. Accepts exactly one of: live, live_unavailable, published, planned_not_live, geo_division_uncatalogued, unseeded_place, geocode_failed, cited, cited_conditional, conditional_unresolved, no_limit_in_bylaw, not_extracted, site_specific_schedule, unverified_default, derived_from_cited, defaulted, missing. Copy the status verbatim from a feasibility result. An unknown status returns this list instead of failing.
DiscoveredFind which places to look at by their rental market: filter and rank every structured-live place on market facts and signals. Signed-in only; read scope. Pass `country` (CA or US; places rank only within one country) and a `preset` (CA: tight-rental, fast-rent-growth, undersupplied, mli-select-headroom; US: low-rental-vacancy, car-light), `filters` ({ key, min, max }, inclusive), or both; optional `region` (province or state, as a code or name), `sort`, `limit` (default 20, max 50) and `offset`. An unknown key returns the filterable keys. Returns counts { places, matched, inPlan, excluded, unknown }, matched places with their values and `access`, and the unknown places with their missing keys. Report the unknown count: a place missing a filtered value is not a match and not a fail. Places are compared on one survey period. `truncation` says what was left out: `places` pages with `truncation.places.nextOffset` as the next `offset`; `unknown` lists at most 50 places by name, `counts.unknown` is the total. To run a saved filter set, pass `setId` (from listPlaceMarketSets) with `limit` and `offset` only. The result adds `set` and `unavailableFilters`: stored filters whose key Bucky no longer filters on. Those are left out and the rest run; tell the user which filters were skipped. Cite every figure with the `sources` lines (CMHC licence for CA, ACS for US). Market data filters places, not lots: use screenLots for lots inside a place. Every structured-live place is searched, not only the user's. Each matched place has `access`: `in_plan` (the user can screen its lots), `available` (Bucky sells it; the user can upgrade to add it) or `not_sold` (Bucky does not sell it yet; the user can request it). `counts.inPlan` is how many matches are in the user's plan. Say how many matches are in the plan, and offer Upgrade or Request for the others; never offer to screen lots in a place that is not `in_plan`. To find lots in the matched places, this is two steps: this call ranks places by market, then call screenLots once per matched place with `access: in_plan`, passing its `geoDivisionId`, at most 10 places in rank order. Never screen unknown places or places that are not `in_plan`; say how many were left out and why. Tell the user it was two steps, and credit the market `sources` for the first. Turning a question into filters: pick the country from the place named (Ontario, Texas). Put a province or state in `region`. Map each condition to the closest key below. "Tight" or "low vacancy" is a max on a vacancy key; "growing" or "rising" is a min on a change key; "above" is min, "below" is max. Percent bounds are numbers: 5 means 5%. Money bounds are in the country's own dollars. A relative question ("top quarter for rent growth", "lowest 10% vacancy in the province") is a percentile filter: `top` keeps the highest-valued share of places, `bottom` the lowest, as a percent (25 = 25%), instead of min and max. It ranks within the request's places, so give a region for "in the province". Each result filter states the cut value it resolved to in `text`. Never invent a key. If no key below measures what was asked (for example a comparison to a provincial median), say so, name the nearest key, and use a numeric bound you state. Tell the user every filter you used, in plain words with units, before or with the result: each result filter has a `text` field for this. On an UNKNOWN_KEY or CROSS_SCOPE error, read `errorDetails` and call again in the same turn with a key or region from it. CA keys: population_density_per_sq_km: Density (people per km²). median_age: Median age (years). median_household_income: Median household income (CAD dollars). Nominal dollars of the income year, not adjusted for inflation. owner_occupied_pct: Owner-occupied (%). renter_occupied_pct: Renter-occupied (%). median_home_value: Median home value (CAD dollars). Nominal dollars of the data year (for the ACS, the 5-year release’s end year), not adjusted for inflation. median_gross_rent: Median gross rent (CAD dollars). cmhc_rental_vacancy_rate: Purpose-built rental vacancy (%). cmhc_rental_availability_rate: Purpose-built rental availability (%). cmhc_avg_rent_studio: Avg rent, studio (purpose-built) (CAD dollars). cmhc_avg_rent_1br: Avg rent, 1BR (purpose-built) (CAD dollars). cmhc_avg_rent_2br: Avg rent, 2BR (purpose-built) (CAD dollars). cmhc_avg_rent_3br_plus: Avg rent, 3BR+ (purpose-built) (CAD dollars). cmhc_avg_rent_total: Avg rent, all units (purpose-built) (CAD dollars). cmhc_median_rent_total: Median rent, all units (purpose-built) (CAD dollars). cmhc_avg_rent_built_2000_plus: Avg rent, built 2000 or later (purpose-built) (CAD dollars). cmhc_avg_rent_change_pct: Avg rent change, same units (purpose-built) (%). signal_rent_cagr_5y_pct: Rent change, annualized over 5 years (%). Annualized change between two published rent levels, in nominal dollars. signal_rental_vacancy_trend_3y_pp: Purpose-built rental vacancy change over 3 years (percentage points). signal_new_build_rent_premium_pct: Newer-building rent difference (built 2000 or later vs all units) (%). Compares average rent in buildings constructed in 2000 or later with average rent across all surveyed units. signal_rental_pipeline_pct: Rental units under construction as a share of purpose-built rental units (%). signal_rental_starts_momentum_pct: Rental starts, last 12 months vs the 12 months before (%). signal_mli_affordability_gap_pct: MLI Select rent difference as a share of average rent (%). Average rent minus the MLI Select reference rent ceiling, divided by average rent. signal_population_cagr_census_5y_pct: Population change per year, Census 2016 to 2021 (%). Annualized change in the Census of Population count between 2016 and 2021. signal_household_income_cagr_census_5y_pct: Median household income change per year, Census 2016 to 2021 (2015 to 2020 incomes, nominal) (%). Annualized change in median total household income, not adjusted for inflation. US keys: population_density_per_sq_km: Density (people per km²). median_age: Median age (years). acs_households_no_vehicle_pct: Households with no vehicle (%). Share of occupied households by vehicles available, ACS 5-year estimate. acs_households_one_vehicle_pct: Households with one vehicle (%). acs_households_two_plus_vehicles_pct: Households with two or more vehicles (%). acs_vehicles_per_household: Vehicles per household (vehicles per household). Aggregate vehicles available divided by occupied households, ACS 5-year estimate. acs_commute_drove_alone_pct: Commute: drove alone (%). Share of workers age 16 and over by means of transportation to work, including those who worked from home; ACS 5-year estimate. acs_commute_carpool_pct: Commute: carpool (%). acs_commute_transit_pct: Commute: public transit (%). acs_commute_walk_pct: Commute: walked (%). acs_commute_work_from_home_pct: Worked from home (%). median_household_income: Median household income (USD dollars). Nominal dollars of the income year, not adjusted for inflation. hud_ami_median_family_income: HUD area median family income (USD dollars). owner_occupied_pct: Owner-occupied (%). renter_occupied_pct: Renter-occupied (%). vacancy_rate: Vacancy rate (%). median_home_value: Median home value (USD dollars). Nominal dollars of the data year (for the ACS, the 5-year release’s end year), not adjusted for inflation. median_gross_rent: Median gross rent (USD dollars). acs_rental_vacancy_rate: ACS rental vacancy rate (all rental units) (%). ACS 5-year rental vacancy rate, including all rental units, not only purpose-built rentals. acs_median_gross_rent_built_2020_plus: ACS median gross rent, built 2020 or later (all rental units) (USD dollars). ACS 5-year median gross rent for renter-occupied units paying cash rent in structures built 2020 or later; nominal dollars for the release. hud_fmr_efficiency: HUD FMR — efficiency (USD dollars). hud_fmr_one_bedroom: HUD FMR — 1BR (USD dollars). hud_fmr_two_bedroom: HUD FMR — 2BR (USD dollars). hud_fmr_three_bedroom: HUD FMR — 3BR (USD dollars). hud_fmr_four_bedroom: HUD FMR — 4BR (USD dollars). signal_rent_cagr_5y_pct: Rent change, annualized over 5 years (%). Annualized change between two published rent levels, in nominal dollars. signal_rental_vacancy_trend_5y_pp: Rental vacancy change over 5 years (all rental units) (percentage points). ACS rental vacancy rate in the 2020–2024 release minus the 2015–2019 release, in points. signal_rent_premium_built_2020_plus_pct: Newer-building rent difference (built 2020 or later vs all units) (%). ACS median gross rent in structures built 2020 or later, compared with median gross rent across all renter-occupied units, from the same release. signal_multifamily_permits_pct: Units permitted in 5+ unit buildings, 12 months, as a share of renter-occupied units (%). Census Building Permits Survey units authorized in buildings of 5 or more units over the latest 12 months, divided by ACS renter-occupied units. signal_multifamily_permits_momentum_pct: Units permitted in 5+ unit buildings, last 12 months vs the 12 months before (%). Permits, not construction. signal_lihtc_rent_gap_pct: LIHTC 2-bedroom rent limit difference as a share of median gross rent (%). ACS median gross rent minus the LIHTC 60% AMI rent limit for a 2-bedroom unit (30% of the HUD 3-person 60% income limit, per month), divided by median gross rent. signal_population_cagr_acs_5y_pct: Population change per year, ACS 2015–2019 to 2020–2024 (%). Annualized change in total population between the 2015–2019 and 2020–2024 ACS 5-year releases. signal_household_income_cagr_acs_5y_pct: Median household income change per year, ACS 2015–2019 to 2020–2024 (nominal) (%). Annualized change in median household income between the 2015–2019 and 2020–2024 ACS 5-year releases, in each release’s own dollars, not adjusted for inflation. signal_home_value_cagr_acs_5y_pct: Median home value change per year, ACS 2015–2019 to 2020–2024 (nominal) (%). Annualized change in the median value owners report for owner-occupied homes, between the 2015–2019 and 2020–2024 ACS 5-year releases, not adjusted for inflation.
DiscoveredCall with no arguments on first contact. Optional `role`, `market`, and `scale` answer the first-call questions on a second call. Returns what this session should do next. Signed in, it also returns `profile`: the standing answers Bucky has for this user and the questions still open; save answers with updateMyProfile.
DiscoveredReturn the stored bylaw section text behind a snapshot citation. Pass `sectionIds` copied from `citations.*.knowledgeSectionId` on checkSite. Or pass `geoDivisionId` from `coverage.geoDivisionId`, `zoneCode` from `zone.code`, and `sectionNumbers` such as 3.1 or 3.2. The markdown is the schedule text. A number in the snapshot can still be conditional on frontage, tenure, or adjoining district. Each section returns at most 12,000 characters. A cut section has `truncated: true`, `totalChars` and `nextOffset`: call again with that section id and `textOffset: nextOffset` for the rest. Ids or section numbers with no active chunk come back in `missing`.
DiscoveredLoad one project with analysis envelope, compact agentStatus, document summaries, evidence summaries, the project memory digest, and external_ref when the project was imported from another system. Pass `include` for optional sections: tasks, members, insights, capital, visualEvidence. Default is none, so the payload stays the same as a call without include. Documents and evidence return up to `documentsLimit` / `evidenceLimit` (default 20, max 50); each include list returns up to 20. `truncation` gives `total`, `returned` and `truncated` for every list that can be cut. Writes to those sections stay on the Bucky CLI. You do not need a UUID: pass `project` with the name the user said, or call with neither and the result lists their projects to choose from. Use before composing reports or after scheduling analysis.
DiscoveredFree preview, no sign-in needed. For one street address in Canada or the US, it says whether Bucky covers the place and which zoning facts it holds for the lot (lot boundary, zone, height, density, setbacks, permitted uses, overlays, parking): found, partly on file, or not on file. It returns no values: no zone code, heights, setbacks or areas. The lot outline is a shape with no scale. Use it when the user is not signed in and asks what they can build at an address. For the numbers, call checkSite. That call asks the user to sign in.
DiscoveredCompose a project report PDF. Pass `projectId` or `project`; with neither, the result lists projects and no meter is spent. preview=true composes without spending and returns `previewId`. confirm=true with that `previewId` exports exactly the text that was previewed; without it, confirm composes again. Export spends records.exports and is irreversible. Returns a signed download URL, never PDF bytes.
DiscoveredEnqueue a fresh deterministic analysis run for a saved project. Pass `projectId`, or `project` with the name the user said; with neither, the result lists their projects and nothing is queued. Returns immediately with `agentStatus` (`queued`, `running`, `current`, `failed`, or `none`) and a receipt id; does not block on completion. Irreversible: a queued run cannot be un-queued from MCP. Re-check with `getProjectContext`, but no more than once every 15 seconds — it is a multi-query bundle, not a status endpoint.
DiscoveredCreate a project (`create`), attach lots (`attach_parcels`), or attach a knowledge reference (`attach_reference`). Pass `projectId` or `project`; with neither, the result lists projects and writes nothing. For attach_parcels, pass a WGS84 GeoJSON polygon (up to 500 selected parcels), or copy `lot.parcelExternalId` from checkSite. Polygon cannot be combined with parcelExternalIds or radiusM. Results report source truncation and attached count. preview=true returns the diff and writes nothing. A write returns a receipt. Not reversible on this surface.
DiscoveredFind the lots in one live Bucky city that match a list. Pass `city` or `geoDivisionId` with `thesis` (plain words), `criteria` (square feet, dollars), or both; or pass a saved `profileId`. Returns countOutcome (exact, partial, at_least, estimate, or unavailable), screeningRunId, and selected lots ranked largest first with a pass, fail, or not_available verdict per filter. totalMatches is a compatibility value and can be returned-page size when the total is unavailable. Report a not_available filter; never present the count as filtered by it. The execution preserves selection for optional candidate assessment; assessment candidate counts are separate from search totals. Returns candidates, counted suggestions and savedMatches. Candidate/suggestion criteria use the same square-foot boundary as the input, including canonical registry values and strategies. Present these alternatives before asking to save. Pass the selected criteria with save=true only after explicit approval, without re-reading the thesis. For a height the user wants to build ("10 to 14 storeys"), use criteria.permitted_stories or permitted_height_m: the maximum the lot's zone allows. criteria.stories is the building standing on the lot. Each lot has `lotId` for updateSaved (action save), `address` for checkSite and `parcelExternalId` for saveToProject. Assembly lots carry the same ids. At most 25 lots per call (`limit`, default 10). `page` says which matches these are (offset, returned, total, truncated); when truncated, call screenLots with `page.next` for the next lots. Paging reads only: it saves nothing and uses no list quota. save=true saves the list (write scope, counts against the plan list limit) and returns a CSV link of every match; the CSV needs a saved list, so links.csv is null without one.
DiscoveredPut a project on the public Bucky map, or take it off. Pass `projectId`, or `project` with the name the user said; with neither, the result lists their projects and nothing is published. Listing publishes the build-lot centroid, the project name, its zone category, typology and lifecycle status to anyone — signed in or not. Nothing else about the project is published. The project must have a build lot with a centroid; a project that has only an address and no attached build parcel cannot be pinned. Ask the human before listing a site that is not already public knowledge. A client, a friend, or a private residence is theirs to publish, not yours. preview=true returns the current state, the exact pin that would be published, and any privacy warning, and writes nothing. Unlisting removes the pin but does not un-share anything already collected while it was public. To undo, call again with `listed` set to the opposite value (`listed: false` after listing); the result repeats this as `undo`.
DiscoveredOpen a human-reviewed feedback form and submit it to the Bucky product team. Call only when the user explicitly asks to send feedback, report a problem, suggest an improvement, or praise something. The server asks the MCP client to show the form; nothing is saved unless the human accepts it. Do not use for silent agent self-reporting.
DiscoveredReturn only the analysis `agentStatus` for a project. Cheap enough to poll. Used by the Bucky app view; the model should call getProjectContext instead.
DiscoveredReturn `signedIn: true` for a signed-in caller. An anonymous call gets the sign-in challenge. Used by the Bucky app view; the model should call the tool it needs instead.
DiscoveredPatch project metadata (name, lifecycle status, externalRef). Pass `projectId`, or `project` with the name the user said; with neither, the result lists their projects and nothing is written. preview=true returns the field-level diff and writes nothing. A write returns a receipt; undoOperationId restores the captured prior fields. Does not archive or delete.
DiscoveredRecent measurements
| Checked | Result | Response | Tools |
|---|---|---|---|
| Connected | 955 ms | 17 | |
| Connected | 798 ms | 17 |