Turns room sizes into a floor plan drawn to scale, with the area of each room and the total area.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user wants to check a room layout before drawing it, or asks why a floor plan was refused, for example "do these rooms overlap?" or "what is the total area of these rooms?". Takes the same rooms, doors and windows as make_floor_plan. Returns the area table, the sum of room areas, the floor area actually covered, and a list of problems: overlapping rooms with the overlap area, doors or windows that run past a wall end, L-shaped parts that overlap or do not touch, and rooms that do not touch the rest. Does not draw the plan and does not check building codes.
Rooms as rectangles, up to 40. A room with no position goes to the right of the previous room. Example: [{"name":"Living","width":5,"length":4},{"name":"Kitchen","width":3,"length":4,"right_of":"Living"}].
Doors, up to 60, e.g. [{"room":"Living","wall":"south","offset":1,"width":0.9}]. Drawn as a gap with a swing arc.
Plan title, e.g. "Ground floor". Up to 80 characters.
Unit for plain numbers. m (default), cm or mm: a metric plan, sizes like 3.5, "350 cm" or "3500 mm"; ft or in: a feet-and-inches plan, sizes like 12'6", "12 ft 6 in", "12.5 ft" or "150 in". With cm, a plain 90 is 90 cm; with in, a plain 30 is 30 inches.
Windows, up to 60, e.g. [{"room":"Kitchen","wall":"east","offset":1,"width":1.2}].
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http floor-plan https://floor-plan.zovo.one/mcp
Use this when the user wants to check a room layout before drawing it, or asks why a floor plan was refused, for example "do these rooms overlap?" or "what is the total area of these rooms?". Takes the same rooms, doors and windows as make_floor_plan. Returns the area table, the sum of room areas, the floor area actually covered, and a list of problems: overlapping rooms with the overlap area, doors or windows that run past a wall end, L-shaped parts that overlap or do not touch, and rooms that do not touch the rest. Does not draw the plan and does not check building codes.
| Argument | Type | Description |
|---|---|---|
| doors | array | Doors, up to 60, e.g. [{"room":"Living","wall":"south","offset":1,"width":0.9}]. Drawn as a gap with a swing arc. |
| rooms* | array | Rooms as rectangles, up to 40. A room with no position goes to the right of the previous room. Example: [{"name":"Living","width":5,"length":4},{"name":"Kitchen","width":3,"length":4,"right_of":"Living"}]. |
| title | string | Plan title, e.g. "Ground floor". Up to 80 characters. |
| units | string | Unit for plain numbers. m (default), cm or mm: a metric plan, sizes like 3.5, "350 cm" or "3500 mm"; ft or in: a feet-and-inches plan, sizes like 12'6", "12 ft 6 in", "12.5 ft" or "150 in". With cm, a plain 90 is 90 cm; with in, a plain 30 is 30 inches. |
| windows | array | Windows, up to 60, e.g. [{"room":"Kitchen","wall":"east","offset":1,"width":1.2}]. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"rooms"
],
"properties": {
"doors": {
"type": "array",
"items": {
"type": "object",
"required": [
"room",
"wall"
],
"properties": {
"part": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "For an L-shaped room: 1 or 2, the part whose wall it is. Default 1."
},
"room": {
"type": "string",
"maxLength": 200,
"description": "Room name, e.g. \"Kitchen\"."
},
"wall": {
"type": "string",
"maxLength": 20,
"description": "north, south, east or west (or top, bottom, right, left)."
},
"width": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Opening width, e.g. \"0.9 m\" or 3 (feet). Default: door 0.9 m / 3 ft, window 1.2 m / 4 ft."
},
"offset": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Distance from the west end (north/south walls) or the north end (east/west walls) to the opening, e.g. 0.5. Default 0."
}
}
},
"maxItems": 60,
"description": "Doors, up to 60, e.g. [{\"room\":\"Living\",\"wall\":\"south\",\"offset\":1,\"width\":0.9}]. Drawn as a gap with a swing arc."
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"width",
"length"
],
"properties": {
"x": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Left edge from the plan origin, e.g. 0. Give x and y together, or one of right_of, below, left_of, above."
},
"y": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Top edge from the plan origin (y grows to the south), e.g. 0."
},
"name": {
"type": "string",
"maxLength": 200,
"description": "Room name, up to 40 characters, e.g. \"Kitchen\". Two entries with the same name make one L-shaped room."
},
"above": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the north wall of the named room, e.g. \"Garage\"."
},
"below": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the south wall of the named room, left edges aligned, e.g. \"Kitchen\"."
},
"width": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "East-west size (left to right), e.g. 4.2 or \"4.2 m\" for metres, or 12'6\" / \"12 ft 6 in\" / \"12.5 ft\" for feet."
},
"length": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "North-south size (top to bottom), e.g. 3.5 or \"3.5 m\", or \"11 ft 3 in\"."
},
"offset": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "With right_of or left_of: shift down (negative = up); with below or above: shift right (negative = left), e.g. \"1 m\"."
},
"left_of": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the west wall of the named room, e.g. \"Hall\"."
},
"right_of": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the east wall of the named room, tops aligned, e.g. \"Living room\". For an L-shaped room this is its first part."
}
}
},
"maxItems": 40,
"description": "Rooms as rectangles, up to 40. A room with no position goes to the right of the previous room. Example: [{\"name\":\"Living\",\"width\":5,\"length\":4},{\"name\":\"Kitchen\",\"width\":3,\"length\":4,\"right_of\":\"Living\"}]."
},
"title": {
"type": "string",
"maxLength": 400,
"description": "Plan title, e.g. \"Ground floor\". Up to 80 characters."
},
"units": {
"enum": [
"m",
"cm",
"mm",
"ft",
"in"
],
"type": "string",
"description": "Unit for plain numbers. m (default), cm or mm: a metric plan, sizes like 3.5, \"350 cm\" or \"3500 mm\"; ft or in: a feet-and-inches plan, sizes like 12'6\", \"12 ft 6 in\", \"12.5 ft\" or \"150 in\". With cm, a plain 90 is 90 cm; with in, a plain 30 is 30 inches."
},
"windows": {
"type": "array",
"items": {
"type": "object",
"required": [
"room",
"wall"
],
"properties": {
"part": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "For an L-shaped room: 1 or 2, the part whose wall it is. Default 1."
},
"room": {
"type": "string",
"maxLength": 200,
"description": "Room name, e.g. \"Kitchen\"."
},
"wall": {
"type": "string",
"maxLength": 20,
"description": "north, south, east or west (or top, bottom, right, left)."
},
"width": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Opening width, e.g. \"0.9 m\" or 3 (feet). Default: door 0.9 m / 3 ft, window 1.2 m / 4 ft."
},
"offset": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Distance from the west end (north/south walls) or the north end (east/west walls) to the opening, e.g. 0.5. Default 0."
}
}
},
"maxItems": 60,
"description": "Windows, up to 60, e.g. [{\"room\":\"Kitchen\",\"wall\":\"east\",\"offset\":1,\"width\":1.2}]."
}
}
}Use this when the user wants a floor plan, room layout or apartment plan drawn to scale from room sizes, for example "draw a floor plan: living 5x4 m, kitchen 3x4 m next to it" or "plan of my house in feet". Takes rooms as rectangles (width east-west, length north-south) in metres or feet and inches, placed by x/y or right_of/below/left_of/above another room, plus optional doors and windows by wall and offset, a scale (auto, 1:50, 1:100, 1/4in=1ft) and a page size. Returns each room area, the total area, an interactive plan, and SVG, PDF and CSV downloads. Refuses overlapping rooms and openings past a wall end, naming them. Does not draw curved walls, stairs, furniture or wall thickness, and does not read images or files.
| Argument | Type | Description |
|---|---|---|
| doors | array | Doors, up to 60, e.g. [{"room":"Living","wall":"south","offset":1,"width":0.9}]. Drawn as a gap with a swing arc. |
| rooms* | array | Rooms as rectangles, up to 40. A room with no position goes to the right of the previous room. Example: [{"name":"Living","width":5,"length":4},{"name":"Kitchen","width":3,"length":4,"right_of":"Living"}]. |
| scale | string | auto (default: the largest standard scale that fits one page), a ratio like "1:50" or "1:100", or an architect scale like "1/4in=1ft" or "1/8in=1ft". |
| title | string | Plan title, e.g. "Ground floor". Up to 80 characters. |
| units | string | Unit for plain numbers. m (default), cm or mm: a metric plan, sizes like 3.5, "350 cm" or "3500 mm"; ft or in: a feet-and-inches plan, sizes like 12'6", "12 ft 6 in", "12.5 ft" or "150 in". With cm, a plain 90 is 90 cm; with in, a plain 30 is 30 inches. |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
| windows | array | Windows, up to 60, e.g. [{"room":"Kitchen","wall":"east","offset":1,"width":1.2}]. |
| page_size | string | PDF and SVG paper: auto (default: A4 for metres, Letter for feet), a4, a3, letter or tabloid. Orientation is chosen to fit. |
| north_arrow | boolean | Draw a north arrow pointing up (default true). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"rooms"
],
"properties": {
"doors": {
"type": "array",
"items": {
"type": "object",
"required": [
"room",
"wall"
],
"properties": {
"part": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "For an L-shaped room: 1 or 2, the part whose wall it is. Default 1."
},
"room": {
"type": "string",
"maxLength": 200,
"description": "Room name, e.g. \"Kitchen\"."
},
"wall": {
"type": "string",
"maxLength": 20,
"description": "north, south, east or west (or top, bottom, right, left)."
},
"width": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Opening width, e.g. \"0.9 m\" or 3 (feet). Default: door 0.9 m / 3 ft, window 1.2 m / 4 ft."
},
"offset": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Distance from the west end (north/south walls) or the north end (east/west walls) to the opening, e.g. 0.5. Default 0."
}
}
},
"maxItems": 60,
"description": "Doors, up to 60, e.g. [{\"room\":\"Living\",\"wall\":\"south\",\"offset\":1,\"width\":0.9}]. Drawn as a gap with a swing arc."
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"width",
"length"
],
"properties": {
"x": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Left edge from the plan origin, e.g. 0. Give x and y together, or one of right_of, below, left_of, above."
},
"y": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Top edge from the plan origin (y grows to the south), e.g. 0."
},
"name": {
"type": "string",
"maxLength": 200,
"description": "Room name, up to 40 characters, e.g. \"Kitchen\". Two entries with the same name make one L-shaped room."
},
"above": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the north wall of the named room, e.g. \"Garage\"."
},
"below": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the south wall of the named room, left edges aligned, e.g. \"Kitchen\"."
},
"width": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "East-west size (left to right), e.g. 4.2 or \"4.2 m\" for metres, or 12'6\" / \"12 ft 6 in\" / \"12.5 ft\" for feet."
},
"length": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "North-south size (top to bottom), e.g. 3.5 or \"3.5 m\", or \"11 ft 3 in\"."
},
"offset": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "With right_of or left_of: shift down (negative = up); with below or above: shift right (negative = left), e.g. \"1 m\"."
},
"left_of": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the west wall of the named room, e.g. \"Hall\"."
},
"right_of": {
"type": "string",
"maxLength": 200,
"description": "Place this room against the east wall of the named room, tops aligned, e.g. \"Living room\". For an L-shaped room this is its first part."
}
}
},
"maxItems": 40,
"description": "Rooms as rectangles, up to 40. A room with no position goes to the right of the previous room. Example: [{\"name\":\"Living\",\"width\":5,\"length\":4},{\"name\":\"Kitchen\",\"width\":3,\"length\":4,\"right_of\":\"Living\"}]."
},
"scale": {
"type": "string",
"maxLength": 30,
"description": "auto (default: the largest standard scale that fits one page), a ratio like \"1:50\" or \"1:100\", or an architect scale like \"1/4in=1ft\" or \"1/8in=1ft\"."
},
"title": {
"type": "string",
"maxLength": 400,
"description": "Plan title, e.g. \"Ground floor\". Up to 80 characters."
},
"units": {
"enum": [
"m",
"cm",
"mm",
"ft",
"in"
],
"type": "string",
"description": "Unit for plain numbers. m (default), cm or mm: a metric plan, sizes like 3.5, \"350 cm\" or \"3500 mm\"; ft or in: a feet-and-inches plan, sizes like 12'6\", \"12 ft 6 in\", \"12.5 ft\" or \"150 in\". With cm, a plain 90 is 90 cm; with in, a plain 30 is 30 inches."
},
"windows": {
"type": "array",
"items": {
"type": "object",
"required": [
"room",
"wall"
],
"properties": {
"part": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "For an L-shaped room: 1 or 2, the part whose wall it is. Default 1."
},
"room": {
"type": "string",
"maxLength": 200,
"description": "Room name, e.g. \"Kitchen\"."
},
"wall": {
"type": "string",
"maxLength": 20,
"description": "north, south, east or west (or top, bottom, right, left)."
},
"width": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Opening width, e.g. \"0.9 m\" or 3 (feet). Default: door 0.9 m / 3 ft, window 1.2 m / 4 ft."
},
"offset": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "number"
}
],
"description": "Distance from the west end (north/south walls) or the north end (east/west walls) to the opening, e.g. 0.5. Default 0."
}
}
},
"maxItems": 60,
"description": "Windows, up to 60, e.g. [{\"room\":\"Kitchen\",\"wall\":\"east\",\"offset\":1,\"width\":1.2}]."
},
"page_size": {
"enum": [
"auto",
"a4",
"a3",
"letter",
"tabloid"
],
"type": "string",
"description": "PDF and SVG paper: auto (default: A4 for metres, Letter for feet), a4, a3, letter or tabloid. Orientation is chosen to fit."
},
"north_arrow": {
"type": "boolean",
"description": "Draw a north arrow pointing up (default true)."
}
}
}