# baseray MCP server

> Ask an AI assistant about buildings in Romania and Czechia and it answers from baseray: the building at an address, the largest roofs in a town, the businesses registered at an address. It can save what it finds to your lead lists, and every answer links back to the building in the app.

Server URL: https://api.baseray.ai/mcp · Streamable HTTP · OAuth 2.1 · Docs: https://baseray.ai/docs/mcp

Ask it things like:

- “Which industrial buildings over 2,000 m² in Ilfov have a business registered at the address?”
- “Find apartment blocks in Brno with no solar panels on the roof and rank them by height.”
- “What building is Strada Memorandumului 28, Cluj-Napoca? Who is registered there?”
- “Save the ten largest commercial roofs in Timișoara to a new lead list called ‘Timișoara solar’.”

## Connect an assistant

The server runs at one URL over Streamable HTTP. Add it to your assistant, sign in to baseray when it asks and approve the access.

### Claude

1. In Claude (web or desktop), open **Settings → Connectors** and choose **Add custom connector**.
2. Name it baseray, paste the server URL and choose **Connect**.
3. Sign in to baseray and approve the access.

### ChatGPT

1. In ChatGPT, turn on developer mode under **Settings → Apps → Advanced settings**.
2. Create an app, name it baseray and paste the server URL. Authentication is OAuth.
3. Sign in to baseray and approve the access.

### Claude Code

```sh
claude mcp add --transport http baseray https://api.baseray.ai/mcp
```

1. Run the command, then type `/mcp` in Claude Code and choose baseray to sign in.

### Cursor

```json
{
  "mcpServers": {
    "baseray": {
      "url": "https://api.baseray.ai/mcp"
    }
  }
}
```

1. Add the server to `~/.cursor/mcp.json` (or `.cursor/mcp.json` in a project). Cursor asks you to sign in to baseray.

### VS Code

```json
{
  "servers": {
    "baseray": {
      "type": "http",
      "url": "https://api.baseray.ai/mcp"
    }
  }
}
```

1. Add the server to `.vscode/mcp.json` and start it from the editor. VS Code opens the baseray sign-in.

Any other client that supports remote MCP servers with OAuth connects the same way: give it the URL and it finds the sign-in by itself.

## Sign-in and permissions

The assistant signs in as you, with OAuth 2.1 and PKCE. There is no key to copy: the first time the assistant uses baseray, a baseray page opens where you sign in, pick the workspace and approve what the assistant may do.

The consent page lists what the assistant asks for: `buildings:read` to search and read buildings and see your lead lists, and `lead_lists:write` to create lead lists and add buildings to them.

The assistant acts in one workspace with your rights there. If you leave the workspace, it stops working at once. Disconnect it any time under **Settings → Connected apps** in the app.

## Tools

### `find_buildings` (read)

Find the building at an address. The building at one address, point or company registration number, with its address, use, footprint, height, floors, dwellings, solar potential, existing solar panels and the businesses registered at the address. Nearest first.

- `address` (string): A street address with the town, e.g. “Bulevardul Eroilor 10, Brașov”.
- `latitude, longitude` (number): A point, WGS84, instead of an address.
- `companyRegistrationNumber` (string): A Romanian CUI or a Czech IČO, with `country` (`RO` or `CZ`): the building the business is registered at.
- `radiusMeters` (integer): How far to look, 5 to 200 m. Default 40.
- `limit` (integer): Buildings to return, 1 to 10. Default 3.

### `search_buildings` (read)

Search buildings in an area. Find, count and rank buildings across an area, up to about a county. Returns the total that match and one ranked page; page further with `offset`.

- `place` (string): The area as a place name: a county, city, town or district, e.g. “Ilfov”, “Praha 5”.
- `boundingBox` (object): The area as `west`, `south`, `east`, `north`, instead of a place.
- `categories` (string[]): Keep only these categories: `residential_house`, `apartment_block`, `commercial`, `industrial`, `agricultural`, `public`, `ancillary`.
- `minFootprintAreaSquareMeters, minHeightMeters, minFloors, minDwellings` (number): Minimum size. Floors and dwellings filter where they are known.
- `onlyMeasuredHeights` (boolean): Keep only buildings whose height is measured, not estimated.
- `hasRegisteredBusiness, registeredBusinessNameContains, minRegisteredBusinessEmployees` (mixed): Filter on the businesses registered at the address.
- `existingSolarPanels` (string[]): `detected`, `not_detected` or `unclear`, from dated roof photos. Roofs never checked are left out.
- `minSolarCapacityKwp` (number): Minimum rooftop solar capacity in kWp.
- `sortBy` (string): `volume` (default), `footprint_area`, `height` or `business_employees`, largest first.
- `limit, offset` (integer): 1 to 25 buildings a page (default 10); offset up to 500.

### `get_building` (read)

Get building details. Every fact on one building returned by another tool, with the businesses whose registered office is at its address: name, registration number and stated employees.

- `buildingId` (uuid, required): The id from `find_buildings` or `search_buildings`.
- `includeRegisteredBusinesses` (boolean): List the businesses registered at the address. Default true.

### `search_places` (read)

Find a place. Coordinates and, for areas, a bounding box for a city, district, street or address in Romania or Czechia. Up to six matches, best first.

- `query` (string, required): The place as a person would write it, e.g. “Cluj-Napoca” or “Brno-střed”.

### `list_lead_lists` (read)

List lead lists. The workspace’s lead lists, most recently changed first, with how many buildings each holds and a link to it.

- `nameContains` (string): Keep lists whose name contains this text.
- `limit` (integer): 1 to 50. Default 20.

### `save_buildings_to_lead_list` (writes)

Save buildings to a lead list. Add buildings to an existing lead list or create a new one with them. Saving a building already on the list changes nothing. The assistant is told to save only when you ask.

- `buildingIds` (uuid[], required): 1 to 100 building ids.
- `leadListId` (uuid): An existing list, from `list_lead_lists`.
- `newListName` (string): Or a name for a new list.

## What the answers hold

- Every building comes with a link that opens it in the baseray app.
- Unknown facts are `null`, never zero. Estimated heights, volumes and solar figures say so in a `basis` field, and the assistant is told to present them as estimates.
- A business registered at an address is shown as a registered office, never as the owner or occupant of the building.

## Limits

Each connection can make 60 tool calls a minute and 2,000 a day. Over a limit the tool answers with how long to wait, and the assistant tells you.

One search covers at most 3 degrees of latitude and longitude, about the size of a county, and pages up to 500 buildings deep. For whole-country lists, use the [REST API](https://baseray.ai/docs/api) or CSV export.
