Koskamo

RoomSplit MCP

RoomSplit provides MCP tools for AI assistants to split rent and utilities among housemates, settle up shared costs, and draft plain-language roommate agreements. It performs pure arithmetic calculations without processing payments or storing user data.

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.

RoomSplit MCP logo, by MagicTeamsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by MagicTeams
MCP endpoint (Streamable HTTP)
https://room-split.magicteams.ai/mcp
Vendor documentation

What its tools do

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

4 of 4 have a description · 4 of 4 declare behavior hints · 4 of 4 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

  • Split fixed monthly rent across rooms equally or weighted by room size
  • Split utility bills equally, by occupants, or by usage weight
  • Compute balances and fewest payments to settle shared costs
  • Draft a plain-language shared-living agreement with house rules

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
room-split 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

RoomSplit handles the maths for house shares: split rent between rooms, split utility bills equally, by occupants or by usage, settle up shared costs between housemates, and draft a plain-language roommate agreement. All maths only; nothing stored.

Tools

4 advertised

split_rent — Split rent
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

split_rent input schema
{
  "type": "object",
  "required": [
    "total_rent",
    "rooms"
  ],
  "properties": {
    "rooms": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "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"
          }
        }
      },
      "minItems": 1,
      "description": "Every room that pays rent (room names must be unique), e.g. [{\"name\":\"Master\",\"size\":20,\"occupants\":[\"Asha\",\"Dev\"]}]"
    },
    "method": {
      "enum": [
        "equal",
        "by_size"
      ],
      "type": "string",
      "description": "'equal' (same rent per room) or 'by_size' (proportional to size). Default: by_size when every room has a size, else equal"
    },
    "total_rent": {
      "type": "number",
      "description": "Monthly rent for the whole home, positive number in any currency, e.g. 2400"
    }
  }
}
split_rent output schema
{
  "type": "object",
  "required": [
    "method",
    "total_rent",
    "rooms",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Plain-language explanation of how the rent was split"
    },
    "rooms": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "weight",
          "rent"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Room label"
          },
          "rent": {
            "type": "number",
            "description": "Monthly rent for this room"
          },
          "weight": {
            "type": "number",
            "description": "Weight used: room size for by_size, 1 for equal"
          },
          "per_occupant": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "amount"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Person's name"
                },
                "amount": {
                  "type": "number",
                  "description": "Amount, rounded to cents"
                }
              }
            },
            "description": "Equal split of this room's rent between its occupants (only when occupants were given)"
          }
        }
      },
      "description": "Per-room rent shares, in input order; they sum to total_rent"
    },
    "method": {
      "enum": [
        "equal",
        "by_size"
      ],
      "type": "string",
      "description": "Split method actually applied"
    },
    "total_rent": {
      "type": "number",
      "description": "Total monthly rent that was split, rounded to cents"
    }
  }
}
split_rent annotations
{
  "title": "Split rent",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
split_utilities — Split utilities
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

split_utilities input schema
{
  "type": "object",
  "required": [
    "bills",
    "people"
  ],
  "properties": {
    "bills": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "amount",
          "split"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique bill label, e.g. 'Electricity'"
          },
          "split": {
            "enum": [
              "equal",
              "by_occupants",
              "by_usage"
            ],
            "type": "string",
            "description": "'equal' per person, 'by_occupants' weighted by each person's occupants, or 'by_usage' weighted by usage_weight (required on everyone)"
          },
          "amount": {
            "type": "number",
            "description": "Bill total, positive number, e.g. 120"
          }
        }
      },
      "minItems": 1,
      "description": "Bills to split (names must be unique), e.g. [{\"name\":\"Electricity\",\"amount\":120,\"split\":\"by_usage\"}]"
    },
    "people": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "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"
          }
        }
      },
      "minItems": 1,
      "description": "Housemates sharing the bills (names must be unique), e.g. [{\"name\":\"Asha\",\"usage_weight\":2},{\"name\":\"Dev\",\"usage_weight\":1}]"
    }
  }
}
split_utilities output schema
{
  "type": "object",
  "required": [
    "bills",
    "totals",
    "grand_total",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Plain-language explanation of the totals"
    },
    "bills": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "amount",
          "split",
          "shares"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Bill label"
          },
          "split": {
            "enum": [
              "equal",
              "by_occupants",
              "by_usage"
            ],
            "type": "string",
            "description": "Split rule applied"
          },
          "amount": {
            "type": "number",
            "description": "Bill total, rounded to cents"
          },
          "shares": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "amount"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Person's name"
                },
                "amount": {
                  "type": "number",
                  "description": "Amount, rounded to cents"
                }
              }
            },
            "description": "Each person's share of this bill"
          }
        }
      },
      "description": "Each bill with its per-person shares (shares sum to the bill amount)"
    },
    "totals": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "amount"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Person's name"
          },
          "amount": {
            "type": "number",
            "description": "Amount, rounded to cents"
          }
        }
      },
      "description": "Total each person owes across all bills"
    },
    "grand_total": {
      "type": "number",
      "description": "Sum of all bill amounts"
    }
  }
}
split_utilities annotations
{
  "title": "Split utilities",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
settle_up — Settle up
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

settle_up input schema
{
  "type": "object",
  "required": [
    "costs",
    "payments"
  ],
  "properties": {
    "costs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "amount"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique cost label, e.g. 'Weekly shop'"
          },
          "amount": {
            "type": "number",
            "description": "Cost amount, positive number"
          }
        }
      },
      "minItems": 1,
      "description": "Shared costs, split equally between everyone in payments (names must be unique), e.g. [{\"name\":\"Groceries\",\"amount\":140}]"
    },
    "payments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "paid"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Unique housemate name"
          },
          "paid": {
            "type": "number",
            "description": "Amount this housemate already paid towards the costs, 0 or more"
          }
        }
      },
      "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}]"
    }
  }
}
settle_up output schema
{
  "type": "object",
  "required": [
    "total_costs",
    "people",
    "transfers",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Summary of how many payments settle the group"
    },
    "people": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "paid",
          "owed",
          "balance"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Housemate name"
          },
          "owed": {
            "type": "number",
            "description": "Equal share of the total costs"
          },
          "paid": {
            "type": "number",
            "description": "Amount already paid"
          },
          "balance": {
            "type": "number",
            "description": "paid minus owed; positive = should receive money, negative = owes money"
          }
        }
      },
      "description": "Per-housemate paid, owed and balance"
    },
    "transfers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "from",
          "to",
          "amount"
        ],
        "properties": {
          "to": {
            "type": "string",
            "description": "Housemate who receives"
          },
          "from": {
            "type": "string",
            "description": "Housemate who pays"
          },
          "amount": {
            "type": "number",
            "description": "Amount to transfer"
          }
        }
      },
      "description": "Fewest payments that settle all balances (empty when settled)"
    },
    "total_costs": {
      "type": "number",
      "description": "Sum of all shared costs"
    }
  }
}
settle_up annotations
{
  "title": "Settle up",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
roommate_agreement — Roommate agreement
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

roommate_agreement input schema
{
  "type": "object",
  "required": [
    "property_address",
    "tenants",
    "move_in_date",
    "monthly_rent",
    "deposit"
  ],
  "properties": {
    "deposit": {
      "type": "number",
      "description": "Total deposit amount, 0 or more (0 = no deposit)"
    },
    "tenants": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "description": "Unique names of all tenants (at least 2), e.g. [\"Asha\",\"Dev\"]"
    },
    "house_rules": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Custom house rules, one sentence each; default covers quiet hours, guests, cleaning rota and shared supplies"
    },
    "monthly_rent": {
      "type": "number",
      "description": "Total monthly rent for the home, positive; split equally between tenants in the text"
    },
    "move_in_date": {
      "type": "string",
      "description": "Move-in date YYYY-MM-DD, e.g. 2026-11-01"
    },
    "property_address": {
      "type": "string",
      "description": "Street address of the shared home, e.g. '12 Elm Street, Flat 3'"
    },
    "room_assignments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "room"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Tenant name (must be in tenants)"
          },
          "room": {
            "type": "string",
            "description": "Room label, e.g. 'Box room'"
          }
        }
      },
      "description": "Optional: who sleeps in which room, one room per tenant; names must match tenants"
    },
    "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"
    }
  }
}
roommate_agreement output schema
{
  "type": "object",
  "required": [
    "agreement",
    "checklist",
    "disclaimer"
  ],
  "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"
    }
  }
}
roommate_agreement annotations
{
  "title": "Roommate agreement",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
222 ms
95th percentile latency
222 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 222 ms · metadata changed · 4 tool(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 roomsplit-mcp https://room-split.magicteams.ai/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 roomsplit-mcp --url https://room-split.magicteams.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable roomsplit-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "roomsplit-mcp": {
      "url": "https://room-split.magicteams.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "roomsplit-mcp": {
      "type": "streamableHttp",
      "url": "https://room-split.magicteams.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start roomsplit-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "roomsplit-mcp": {
      "type": "http",
      "url": "https://room-split.magicteams.ai/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 roomsplit-mcp https://room-split.magicteams.ai/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://room-split.magicteams.ai/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": {
    "roomsplit-mcp": {
      "serverUrl": "https://room-split.magicteams.ai/mcp"
    }
  }
}

Let your agent find its tools

Find servers like RoomSplit MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.