RoomSplit

Split rent and utilities by room, settle up and generate roommate agreements. Free.

Should I use this

Quality & Safety

A
Description quality
95%
Schema completeness
100%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,390Tokens (tool definitions)
~6.2 KBTypical response size
Moderate attention impact (1.87% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "room-split": {
      "url": "https://room-split.magicteams.ai/mcp"
    }
  }
}

Remote endpoints

https://room-split.magicteams.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢split_rent(total_rent, rooms, method)

Split a fixed monthly rent across rooms, equally or weighted by room size, and divide a shared room's rent equally between its occupants. Use when deciding who pays how much rent. Do NOT use for utility bills (use split_utilities) or to settle who already paid what (use settle_up).

Input Schema

{
  "type": "object",
  "properties": {
    "total_rent": {
      "type": "number",
      "description": "Monthly rent for the whole home, positive number in any currency, e.g. 2400"
    },
    "rooms": {
      "type": "array",
      "minItems": 1,
      "description": "Every room that pays rent (room names must be unique), e.g. [{\"name\":\"Master\",\"size\":20,\"occupants\":[\"Asha\",\"Dev\"]}]",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique room label, e.g. 'Master bedroom'"
          },
          "size": {
            "type": "number",
            "description": "Room area (m2 or ft2, any consistent unit), positive; needed on every room for by_size"
          },
          "occupants": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of the people in this room; when given, the room's rent is split equally between them"
          }
        },
        "required": [
          "name"
        ]
      }
    },
    "method": {
      "type": "string",
      "enum": [
        "equal",
        "by_size"
      ],
      "description": "'equal' (same rent per room) or 'by_size' (proportional to size). Default: by_size when every room has a size, else equal"
    }
  },
  "required": [
    "total_rent",
    "rooms"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "method": {
      "type": "string",
      "enum": [
        "equal",
        "by_size"
      ],
      "description": "Split method actually applied"
    },
    "total_rent": {
      "type": "number",
      "description": "Total monthly rent that was split, rounded to cents"
    },
    "rooms": {
      "type": "array",
      "description": "Per-room rent shares, in input order; they sum to total_rent",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Room label"
          },
          "weight": {
            "type": "number",
            "description": "Weight used: room size for by_size, 1 for equal"
          },
          "rent": {
            "type": "number",
            "description": "Monthly rent for this room"
          },
          "per_occupant": {
            "type": "array",
            "description": "Equal split of this room's rent between its occupants (only when occupants were given)",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Person's name"
                },
                "amount": {
                  "type": "number",
                  "description": "Amount, rounded to cents"
                }
              },
              "required": [
                "name",
                "amount"
              ]
            }
          }
        },
        "required": [
          "name",
          "weight",
          "rent"
        ]
      }
    },
    "note": {
      "type": "string",
      "description": "Plain-language explanation of how the rent was split"
    }
  },
  "required": [
    "method",
    "total_rent",
    "rooms",
    "note"
  ]
}
🟢split_utilities(bills, people)

Split utility and household bills across housemates, each bill equally, by occupants, or by usage weight, and total what each person owes. Use for recurring shared bills such as electricity, gas or internet. Do NOT use for rent (use split_rent) or to settle who already paid (use settle_up).

Input Schema

{
  "type": "object",
  "properties": {
    "bills": {
      "type": "array",
      "minItems": 1,
      "description": "Bills to split (names must be unique), e.g. [{\"name\":\"Electricity\",\"amount\":120,\"split\":\"by_usage\"}]",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique bill label, e.g. 'Electricity'"
          },
          "amount": {
            "type": "number",
            "description": "Bill total, positive number, e.g. 120"
          },
          "split": {
            "type": "string",
            "enum": [
              "equal",
              "by_occupants",
              "by_usage"
            ],
            "description": "'equal' per person, 'by_occupants' weighted by each person's occupants, or 'by_usage' weighted by usage_weight (required on everyone)"
          }
        },
        "required": [
          "name",
          "amount",
          "split"
        ]
      }
    },
    "people": {
      "type": "array",
      "minItems": 1,
      "description": "Housemates sharing the bills (names must be unique), e.g. [{\"name\":\"Asha\",\"usage_weight\":2},{\"name\":\"Dev\",\"usage_weight\":1}]",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique housemate name"
          },
          "occupants": {
            "type": "number",
            "description": "How many people this housemate pays for (by_occupants bills), positive, default 1"
          },
          "usage_weight": {
            "type": "number",
            "description": "Relative usage for by_usage bills, positive, e.g. 2 for double use, 0.5 for a light user"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  },
  "required": [
    "bills",
    "people"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "bills": {
      "type": "array",
      "description": "Each bill with its per-person shares (shares sum to the bill amount)",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Bill label"
          },
          "amount": {
            "type": "number",
            "description": "Bill total, rounded to cents"
          },
          "split": {
            "type": "string",
            "enum": [
              "equal",
              "by_occupants",
              "by_usage"
            ],
            "description": "Split rule applied"
          },
          "shares": {
            "type": "array",
            "description": "Each person's share of this bill",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Person's name"
                },
                "amount": {
                  "type": "number",
                  "description": "Amount, rounded to cents"
                }
              },
              "required": [
                "name",
                "amount"
              ]
            }
          }
        },
        "required": [
          "name",
          "amount",
          "split",
          "shares"
        ]
      }
    },
    "totals": {
      "type": "array",
      "description": "Total each person owes across all bills",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Person's name"
          },
          "amount": {
            "type": "number",
            "description": "Amount, rounded to cents"
          }
        },
        "required": [
          "name",
          "amount"
        ]
      }
    },
    "grand_total": {
      "type": "number",
      "description": "Sum of all bill amounts"
    },
    "note": {
      "type": "string",
      "description": "Plain-language explanation of the totals"
    }
  },
  "required": [
    "bills",
    "totals",
    "grand_total",
    "note"
  ]
}
🟢settle_up(costs, payments)

Split shared costs equally between housemates, compare with what each already paid, and compute balances plus the fewest payments that settle everyone. Use after people fronted money for the group. Computes only; moves no money. Do NOT use for usage-weighted bills (use split_utilities).

Input Schema

{
  "type": "object",
  "properties": {
    "costs": {
      "type": "array",
      "minItems": 1,
      "description": "Shared costs, split equally between everyone in payments (names must be unique), e.g. [{\"name\":\"Groceries\",\"amount\":140}]",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique cost label, e.g. 'Weekly shop'"
          },
          "amount": {
            "type": "number",
            "description": "Cost amount, positive number"
          }
        },
        "required": [
          "name",
          "amount"
        ]
      }
    },
    "payments": {
      "type": "array",
      "minItems": 1,
      "description": "Every housemate sharing the costs and what they already paid (include people who paid 0), e.g. [{\"name\":\"Asha\",\"paid\":150},{\"name\":\"Mira\",\"paid\":0}]",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique housemate name"
          },
          "paid": {
            "type": "number",
            "description": "Amount this housemate already paid towards the costs, 0 or more"
          }
        },
        "required": [
          "name",
          "paid"
        ]
      }
    }
  },
  "required": [
    "costs",
    "payments"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "total_costs": {
      "type": "number",
      "description": "Sum of all shared costs"
    },
    "people": {
      "type": "array",
      "description": "Per-housemate paid, owed and balance",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Housemate name"
          },
          "paid": {
            "type": "number",
            "description": "Amount already paid"
          },
          "owed": {
            "type": "number",
            "description": "Equal share of the total costs"
          },
          "balance": {
            "type": "number",
            "description": "paid minus owed; positive = should receive money, negative = owes money"
          }
        },
        "required": [
          "name",
          "paid",
          "owed",
          "balance"
        ]
      }
    },
    "transfers": {
      "type": "array",
      "description": "Fewest payments that settle all balances (empty when settled)",
      "items": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "description": "Housemate who pays"
          },
          "to": {
            "type": "string",
            "description": "Housemate who receives"
          },
          "amount": {
            "type": "number",
            "description": "Amount to transfer"
          }
        },
        "required": [
          "from",
          "to",
          "amount"
        ]
      }
    },
    "note": {
      "type": "string",
      "description": "Summary of how many payments settle the group"
    }
  },
  "required": [
    "total_costs",
    "people",
    "transfers",
    "note"
  ]
}
🟢roommate_agreement(property_address, tenants, move_in_date, monthly_rent, deposit, ...)

Draft a plain-language shared-living agreement (parties, term, equal rent shares, deposit, utilities, house rules, notice, signature lines) plus a pre-signing checklist. Use when housemates want house terms in writing. Not legal advice. Do NOT use to compute unequal rent (use split_rent) or bill shares (use split_utilities).

Input Schema

{
  "type": "object",
  "properties": {
    "property_address": {
      "type": "string",
      "description": "Street address of the shared home, e.g. '12 Elm Street, Flat 3'"
    },
    "tenants": {
      "type": "array",
      "minItems": 2,
      "items": {
        "type": "string"
      },
      "description": "Unique names of all tenants (at least 2), e.g. [\"Asha\",\"Dev\"]"
    },
    "move_in_date": {
      "type": "string",
      "description": "Move-in date YYYY-MM-DD, e.g. 2026-11-01"
    },
    "monthly_rent": {
      "type": "number",
      "description": "Total monthly rent for the home, positive; split equally between tenants in the text"
    },
    "deposit": {
      "type": "number",
      "description": "Total deposit amount, 0 or more (0 = no deposit)"
    },
    "room_assignments": {
      "type": "array",
      "description": "Optional: who sleeps in which room, one room per tenant; names must match tenants",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Tenant name (must be in tenants)"
          },
          "room": {
            "type": "string",
            "description": "Room label, e.g. 'Box room'"
          }
        },
        "required": [
          "name",
          "room"
        ]
      }
    },
    "utilities_policy": {
      "type": "string",
      "description": "One sentence on how utilities are shared; default: split equally between tenants unless agreed otherwise"
    },
    "notice_period_months": {
      "type": "integer",
      "minimum": 1,
      "description": "Notice period in whole months, default 1"
    },
    "house_rules": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Custom house rules, one sentence each; default covers quiet hours, guests, cleaning rota and shared supplies"
    }
  },
  "required": [
    "property_address",
    "tenants",
    "move_in_date",
    "monthly_rent",
    "deposit"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "agreement": {
      "type": "string",
      "description": "Full agreement text, numbered sections and signature lines"
    },
    "checklist": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Practical steps to complete before signing"
    },
    "disclaimer": {
      "type": "string",
      "description": "Not-legal-advice disclaimer for the template"
    }
  },
  "required": [
    "agreement",
    "checklist",
    "disclaimer"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools