Koskamo

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.

Zovo Floor Plan MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
MCP endpoint (Streamable HTTP)
https://floor-plan.zovo.one/mcp
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

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

Community listingRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Zovo Floor Plan draws a to-scale floor plan from rooms given as rectangles with sizes, in metres or feet and inches. make_floor_plan returns room areas, the total area, an interactive plan, and SVG, PDF and CSV downloads at a standard scale. check_floor_plan lists overlaps, doors or windows past a wall end and rooms that do not touch the rest, with the area table. It does not draw curved or angled walls, furniture, stairs or wall thickness, and it is not a survey or a permit drawing.

Tools

2 advertised

make_floor_plan — Make floor plan
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

make_floor_plan input schema
{
  "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)."
    }
  }
}
make_floor_plan output schema
{
  "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
}
make_floor_plan annotations
{
  "title": "Make floor plan",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_floor_plan — Check floor plan
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

check_floor_plan input schema
{
  "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}]."
    }
  }
}
check_floor_plan output schema
{
  "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
}
check_floor_plan annotations
{
  "title": "Check floor plan",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

floor-plan-widget — Zovo Floor Plan view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Floor Plan.

floor-plan-widget URI
ui://widget/floor-plan-v1-1.0.0-96368eca2c339efd6e572446f7358cd4b5b8d9f46f738ac40ebe9a1f3aefa449.html

MIME type: text/html;profile=mcp-app

floor-plan-widget-legacy — Zovo Floor Plan view (previous versions)

Advertised by the server during the last successful anonymous check.

floor-plan-widget-legacy URI template
ui://widget/floor-plan-{version}.html

MIME type: text/html;profile=mcp-app

30-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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-floor-plan-mcp https://floor-plan.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-floor-plan-mcp --url https://floor-plan.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-floor-plan-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-floor-plan-mcp": {
      "url": "https://floor-plan.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-floor-plan-mcp": {
      "type": "streamableHttp",
      "url": "https://floor-plan.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-floor-plan-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-floor-plan-mcp": {
      "type": "http",
      "url": "https://floor-plan.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-floor-plan-mcp https://floor-plan.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://floor-plan.zovo.one/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.