Zovo Floor Plan MCP
Generates to-scale floor plans from room dimensions, supporting placement, area calculation, and export to SVG, PDF, and CSV formats.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://floor-plan.zovo.one/mcpWhat its tools do
2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Generate floor plans from room sizes
- Calculate total and individual room areas
- Export plans to SVG and PDF
- Check for overlapping rooms or walls
Source and maintenance
Protocol and capabilities
- Server
- floor-plan 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
2 advertised
make_floor_plan — Make floor plan
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.
{
"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)."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"units",
"area_unit",
"room_count",
"rooms",
"total_area",
"total_area_text",
"plan_size",
"scale",
"page",
"doors",
"windows",
"checks",
"scale_check",
"label_check",
"warnings",
"downloads"
],
"properties": {
"page": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"doors": {
"type": "number"
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"parts",
"size",
"area",
"area_text"
],
"properties": {
"area": {
"type": "number"
},
"name": {
"type": "string"
},
"size": {
"type": "string"
},
"parts": {
"type": "number"
},
"area_text": {
"type": "string"
}
},
"additionalProperties": false
}
},
"scale": {
"type": "string"
},
"title": {
"type": "string"
},
"units": {
"type": "string"
},
"checks": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"windows": {
"type": "number"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"area_unit": {
"type": "string"
},
"downloads": {
"type": "object",
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
},
"svg": {
"type": "string"
}
},
"additionalProperties": false
},
"plan_size": {
"type": "object",
"required": [
"width",
"length"
],
"properties": {
"width": {
"type": "string"
},
"length": {
"type": "string"
}
},
"additionalProperties": false
},
"room_count": {
"type": "number"
},
"total_area": {
"type": "number"
},
"label_check": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"scale_check": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"preview_count": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"total_area_text": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Make floor plan",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_floor_plan — Check floor plan
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.
{
"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}]."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"units",
"area_unit",
"room_count",
"rooms",
"sum_of_room_areas",
"covered_area",
"counted_twice",
"plan_size",
"problems",
"problem_count",
"checks_run",
"warnings"
],
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"parts",
"size",
"area",
"area_text"
],
"properties": {
"area": {
"type": "number"
},
"name": {
"type": "string"
},
"size": {
"type": "string"
},
"parts": {
"type": "number"
},
"area_text": {
"type": "string"
}
},
"additionalProperties": false
}
},
"title": {
"type": "string"
},
"units": {
"type": "string"
},
"problems": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"message"
],
"properties": {
"kind": {
"type": "string"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"area_unit": {
"type": "string"
},
"plan_size": {
"type": "object",
"required": [
"width",
"length"
],
"properties": {
"width": {
"type": "string"
},
"length": {
"type": "string"
}
},
"additionalProperties": false
},
"checks_run": {
"type": "array",
"items": {
"type": "string"
}
},
"room_count": {
"type": "number"
},
"covered_area": {
"type": "number"
},
"counted_twice": {
"type": "number"
},
"preview_count": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"problem_count": {
"type": "number"
},
"sum_of_room_areas": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Check floor plan",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
floor-plan-widget — Zovo Floor Plan view
Interactive view for Zovo Floor Plan.
ui://widget/floor-plan-v1-1.0.0-96368eca2c339efd6e572446f7358cd4b5b8d9f46f738ac40ebe9a1f3aefa449.htmlfloor-plan-widget-legacy — Zovo Floor Plan view (previous versions)
ui://widget/floor-plan-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1138 ms
- 95th percentile latency
- 1138 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1138 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-floor-plan-mcp https://floor-plan.zovo.one/mcpCodex
codex mcp add zovo-floor-plan-mcp --url https://floor-plan.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-floor-plan-mcp": {
"url": "https://floor-plan.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-floor-plan-mcp": {
"type": "streamableHttp",
"url": "https://floor-plan.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-floor-plan-mcp": {
"type": "http",
"url": "https://floor-plan.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-floor-plan-mcp https://floor-plan.zovo.one/mcpClaude Desktop
https://floor-plan.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-floor-plan-mcp": {
"serverUrl": "https://floor-plan.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Floor Plan MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.