Simple House Planner
com.simplehouseplanner/floor-planssimplehouseplanner.comstreamable-httpv2.0.0Scanned
Design and change floor plans to scale in 2D and 3D: walls, rooms, roofs, furniture and gardens.
12 tools: 1 can delete or cancel things, 8 change things and 3 only read.
- Reads private data · 1
- Reads text others write · 1
- Can send data out · 0
- 3 findings
Anlyon alternative
9 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
12 tools
Deletes or cancels 1Claude Code: deny
delete_projectPermanently deletes one plan from the person's account.No findings
Why it is in this group
- The name "delete_project" says "delete": a word for removing or ending something.
- The description says "Permanently deletes".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Permanently deletes one plan from the person's account. It cannot be restored. Call this only for a plan that the person named in words. When they name none, as in "delete my plans", do not call this: call list_projects, show the titles and ask which ones to delete.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Changes things 8Claude Code: ask
account_profileThe stable identifier of the linked Simple House Planner account.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it The stable identifier of the linked Simple House Planner account.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
create_projectUse this when someone asks to design, draw or plan a house, apartment, office, room or floor plan, and no plan of theirs fits.No findings
Why it is in this group
- The name "create_project" says "create": a word for a change.
Description, as the server wrote it Use this when someone asks to design, draw or plan a house, apartment, office, room or floor plan, and no plan of theirs fits. Starts a new empty plan to scale in their account and returns its ID. Build it with edit_project and show it with open_editor; do not describe a design in words or generate a picture of it instead.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
edit_projectChanges a plan with a short script of plan operations, which the person's open editors show at once.1 finding
Why it is in this group
- The name "edit_project" says "edit": a word for a change.
- The input takes a statement or command to run (input.script), which can change anything it can reach.
Findings
- Info
The description is 27,638 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...s, kelvin, on}) sets a lamp's output, its color temperature and whether it is on."
Description, as the server wrote it Changes a plan with a short script of plan operations, which the person's open editors show at once. Returns the IDs that changed, the warnings and a description of every floor. A change is never final: undo_change takes it back and restores what it removed, for the last 50 changes. JavaScript that changes the plan through the global object plan, run as one transaction: when any call fails, nothing changes and the error names the line. return a value to see it in the result. There is no network, clock or randomness. plan.brief() → the answers the person gave when starting the project, or null: {floors, bedrooms, bathrooms, area (living area in m²), kitchen (open or separate), office, roof, plot ([width along the street, depth] in mm), street (the compass side the street runs along), site (flat, slope or water), slope (percent), downhill (the compass side the ground falls toward, where water lies), patio, pool, beds, fence, parking (garage or carport, when they want one), basement, roofTerrace, notes (wishes in their own words)} plan.floors() → [{floor, name, height}] plan.elements(floor) → elements in the file shape plan.get(id) → the element in the file shape, with its floor plan.describe(floor) → rooms with areas and sizes, what each door connects, window directions, routes and warnings plan.warnings() → warnings on every floor plan.check(rules) → [{floor, ids, message}]: the plan checked against a rule set beyond the layout warnings, each warning naming its part of the rules: "din18040-2" (DIN 18040-2, barrier-free dwellings without the wheelchair requirements: door widths and heights without thresholds, bathroom doors that open outward, hallways 1200 wide, 1200 × 1200 free in every room and in front of toilets, basins and showers, 1200 in front of kitchen fittings and 900 in front of cupboards, 1200 along one long side of a bed and 900 along the other, level showers 1200 × 1200, a window sill of 600 or lower in living rooms and bedrooms, straight stairs with handrails on both sides) or "irc2021" (IRC 2021 in part: room areas, widths and ceiling heights, glazing, emergency escape openings from sleeping rooms, the egress door, hallway widths, stair widths, risers, treads, headroom and handrails, spiral stairs, and guards). Rooms are known by their names, such as bedroom, bathroom, kitchen and hall plan.search(words) → catalog items {item, name, category, width, length, height} plan.addFloor(name, height?) → the new top floor's index plan.setFloor(floor, {name?, height?}) plan.wall(floor, from, to, {thickness?, height?, material?, curve?}) → wall id; curve bends the wall into an arc whose middle lies that far from the straight line, to the left of from → to (negative bends it right), at most the wall's length. material Glass makes a wall of glass in a slim metal frame with a mullion at least every 3000, for meeting rooms and offices or a glazed facade plan.walls(floor, points, {closed?, thickness?, height?, material?, curve?}) → wall ids, joined at every corner; curve bends every wall alike plan.circle(floor, center, radius, {thickness?, height?, material?}) → wall ids: four curved walls that close a round room or tower, radius to their centerline; doors and windows fit on them like on straight walls plan.room(floor, name, min, max, {thickness?, floorFinish?, floorColor?, wallFinish?, wallColor?, storeys?}) → {room, walls}: a room of its own with four walls around the inside corners min and max plan.marker(floor, name, at, {floorFinish?, floorColor?, wallFinish?, wallColor?, storeys?}) → room id: names the walled area around at. storeys (1) makes a room two or more storeys high, such as a great room or an entrance hall open to the floor above: the floors above leave its area open as a void, so give the floor above walls or a railing along the void's edge plan.door(wall, offset, {kind?, width?, height?, elevation?, hingeAtEnd?, opensOutward?, head?, open?}) → door id; offset is from the wall's from point to the door's center. kind is standard, glass (a glass leaf in a metal frame, as for a meeting room in a glass partition, where a standard door also has a glass leaf), sliding, pocket, barn, bifold, garage (a sectional garage door, 2500 wide) or open. open is how far a standard or glass door's leaf stands open, up to 180 degrees, or a bifold door's panels fold, up to 90, and how far a sliding, pocket or barn door slides open or a garage door rolls up, in percent of its travel up to 100, as the 3D view and renders show it. head is flat (the default), round, segment or pointed for an arched top, whose crown is at the height; on a curved wall the door follows the curve. plan.set(id, {frameColor}) colors its frame, lining and casings in a #rrggbb color, as for black steel doors plan.window(wall, offset, {kind?, width?, height?, elevation?, hingeAtEnd?, opensOutward?, head?, open?}) → window id; elevation is the sill height, head an arched top as for a door, and open how far its sashes stand open, up to 90 degrees. plan.set(id, {frameColor}) colors its frame and sashes in a #rrggbb color, as for black steel windows plan.furniture(floor, item, at, rotation?) → id; rotation in degrees counterclockwise, and at 0 the item's back, or a bed's head, faces +y. An item that hangs under the ceiling, such as a ceiling lamp or an AC cassette, starts there, and one that hangs on a wall at its usual height; plan.set(id, {elevation}) moves it up or down. A car shows a detailed 3D model in its paint, and plan.set(id, {paint}) repaints it in a #rrggbb color. plan.set(id, {finishes}) dresses the stuffs of a catalog item's model: wood, fabric (upholstery), linen (bedding and cushions), ceramic, metal and rug, each as {finish?, color?}: a finish, which color tints when it is tinted, or a plain #rrggbb color, such as {wood: {finish: 'black-marble'}, fabric: {finish: 'leather', color: '#5b3a29'}}. Lamps light the 3D view at sunset and at night: downlights, spotlights, track lights, LED panels, cove and under-cab… [21638 more characters not shown]
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
open_editorShows a plan in the Simple House Planner editor, where the person can change it by hand in 2D and 3D and sees your changes as you make them.1 finding
Why it is in this group
- The name "open_editor" says "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "open_editor" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "open_editor" says "open": a word for a change.
Description, as the server wrote it Shows a plan in the Simple House Planner editor, where the person can change it by hand in 2D and 3D and sees your changes as you make them. Without a project ID it shows their plans to choose from.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
query_projectRuns a read-only script for questions that describe_plan does not answer, and returns what it returns.1 finding
Why it is in this group
- The name "query_project" says "query": a word for reading.
- The description's first verb is "run": a word for a change.
- The input takes a statement or command to run (input.script), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "query_project" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "query_project" says "query": a word for reading.
Description, as the server wrote it Runs a read-only script for questions that describe_plan does not answer, and returns what it returns. Scripts work as in edit_project, but only plan.floors, plan.elements, plan.get, plan.describe, plan.warnings, plan.check and plan.search are available; plan.check("din18040-2") or plan.check("irc2021") checks the plan against DIN 18040-2 for barrier-free dwellings or the 2021 IRC.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
redo_changeMakes again your own last change to a plan.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Makes again your own last change to a plan. The person's own edits stay as they are.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
rename_projectChanges the name of a plan in the person's account.No findings
Why it is in this group
- The name "rename_project" says "rename": a word for a change.
Description, as the server wrote it Changes the name of a plan in the person's account.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
undo_changeTakes back your own last change to a plan.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Takes back your own last change to a plan. The person's own edits stay as they are.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 3Show 3 read-only tools
describe_planFacts that the planner computes for the site and for a floor or every floor: the site's location, time zone and north, rooms with areas and sizes, what each door connects, window d…No findings
Why it is in this group
- The name "describe_plan" says "describe": a word for reading.
Description, as the server wrote it Facts that the planner computes for the site and for a floor or every floor: the site's location, time zone and north, rooms with areas and sizes, what each door connects, window directions, routes from the entrance, and warnings.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_projectsUse this when someone mentions one of their plans or asks what plans they have.Reads text others writeNo findings
Why it is in this group
- The name "list_projects" says "list": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "mention": it reads comments, which other people can write.
Description, as the server wrote it Use this when someone mentions one of their plans or asks what plans they have. Lists the plans in their account with titles, floors and last changes, newest first.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
search_furnitureFinds furniture in the catalog by words such as bed, sofa or table, and by size such as w:1200.Reads private dataNo findings
Why it is in this group
- The name "search_furniture" says "search": a word for reading.
What it can reach
- private-dataThe description's first sentence says "find" and "table": it reads databases.
Description, as the server wrote it Finds furniture in the catalog by words such as bed, sofa or table, and by size such as w:1200. Use the item keys with plan.furniture and plan.against.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
- Warnquery_project
The server marks "query_project" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "query_project" says "query": a word for reading.
- Warnopen_editor
The server marks "open_editor" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "open_editor" says "open": a word for a change.
- Infoedit_project
The description is 27,638 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...s, kelvin, on}) sets a lamp's output, its color temperature and whether it is on."
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 2.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http floor-plans https://simplehouseplanner.com/mcpclaude mcp add --transport http floor-plans https://simplehouseplanner.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__floor-plans__search_furniture",
"mcp__floor-plans__list_projects",
"mcp__floor-plans__describe_plan"
],
"ask": [
"mcp__floor-plans__create_project",
"mcp__floor-plans__rename_project",
"mcp__floor-plans__query_project",
"mcp__floor-plans__edit_project",
"mcp__floor-plans__undo_change",
"mcp__floor-plans__redo_change",
"mcp__floor-plans__open_editor",
"mcp__floor-plans__account_profile"
],
"deny": [
"mcp__floor-plans__delete_project"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as floor-plans. Review it before you use it.
Capability tags behind 2 rules
- mcp__floor-plans__search_furniture private-data
- mcp__floor-plans__list_projects untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.simplehouseplanner/floor-plans/verify?hash=4cca3ed895db6fdf4b4db91f61a6fca1610a74f440e1200948ae2b2cc7668072" | jq -e '.changed == false'Pinned hash 4cca3ed895db, from Nov 5, 2026, 14:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.simplehouseplanner/floor-plans/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.simplehouseplanner/floor-plans)Source: MCP Registry. Synced Nov 5, 2026, 14:17 UTC.