# Spendify > Spendify is a way to share and split expenses with friends using a link. No account is required. Use it for trips, a shared home, or a night out. Add the people, record who paid, and see who owes whom. ## Start here - [Home](https://spendify.link/): Open Spendify and create a shared expense link - [Create a link](https://spendify.link/crear-link): Start a new group - [Your links](https://spendify.link/ver-links): Open links already saved on this device ## For agents The web app needs JavaScript, so fetching spendify.link pages as text only returns the landing copy. Don't scrape it. Use the MCP server. Yes, Spendify has an MCP server. It is advertised in these places: - [MCP guide](https://spendify.link/mcp): this guide as an HTML page - [MCP server card](https://spendify.link/.well-known/mcp.json): endpoint, transport and tool names as JSON - [MCP endpoint](https://sobrecodigo-api.azurewebsites.net/mcp): `GET` returns a short description, `POST` takes JSON-RPC - Every page's HTML has `` ### Connection - Endpoint: `https://sobrecodigo-api.azurewebsites.net/mcp` - Transport: HTTP POST, JSON-RPC 2.0, one request per call (batches are rejected). Responses are plain `application/json`, never a stream. - No authentication and no session. Each request stands alone. - Protocol version: `2024-11-05`. Supported methods: `initialize`, `ping`, `tools/list`, `tools/call`. - `GET /mcp` returns a one-line text description. Add it to Claude Code: ``` claude mcp add --transport http spendify https://sobrecodigo-api.azurewebsites.net/mcp ``` Or call it without an MCP client: ``` curl -X POST https://sobrecodigo-api.azurewebsites.net/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_expenses","arguments":{"hash":""}}}' ``` ### Links and the group hash A group is identified by its hash, a UUID. Spendify links carry it in the `hash` query parameter, in any of these forms: - `https://spendify.link/gastos?hash=` - `https://spendify.link/expenses?hash=` - `https://www.spendify.link/expenses?hash=` When a user pastes a Spendify link, take the `hash` value and pass it to the tools. Anyone with the hash can read and edit the group, so treat it as a secret and don't post it publicly. ### Tools All tool names and argument names are exact. Field names are in Spanish. `create_expense_link`: Create a new group. - `nombre` (string, optional): group name. - `tipoHash` (integer, optional): 1 = monthly household expenses, 2 = trip (default), 3 = event. - Returns `hash`, `nombre` and `link`. Give the `link` to the user. `rename_expense_link`: Rename a group. - `hash` (string, required), `nombre` (string, required). `add_person`: Add a person to the group. - `hash` (string, required), `nombre` (string, required). - Returns the updated list of people. `list_people`: List the people in the group. - `hash` (string, required). - Returns `data`: an array of `{ id, nombre, cvu }`. `list_expense_types`: List the group's expense categories. - `hash` (string, required). - Returns an array of `{ id, descripcion }`. New groups have: Vivienda, Transporte, Alimentación, Salud, Inversión, Educación, Deudas y Finanzas, Entretenimiento, Vestimenta y Cuidado Personal, Familia y Mascotas, Emergencias e Imprevistos, Donaciones y Regalos, Otros, Ahorros. `create_expense`: Add an expense, with who paid and who shares it. - `hash` (string, required). - `descripcion` (string, required): what the expense was. - `gasto` (number, required): total amount. - `pagadores` (array, required, at least 1): who paid. Each item is `{ "id": , "monto": }` or `{ "nombre": "", "monto": }`. If `monto` is omitted, it defaults to the full `gasto`. - `participantes` (array, required, at least 1): who shares the expense. Person IDs (`[4084, 4085]`) or names (`["Ana", "Beto"]`). Payers are added to the split automatically if they aren't listed. - `tipoPago` (string): payment method, one of `Efectivo` (cash), `Tarjeta` (card), `Mercado Pago`. - `tipoGastoDescripcion` (string): category, exactly as returned by `list_expense_types`, accents included. - `fileBase64` (string) and `fileName` (string): optional receipt image. - People must already exist in the group. Get IDs and names from `list_people`, and add anyone missing with `add_person` first. - If `pagadores` or `participantes` is missing, or a name or ID isn't in the group, the call fails with HTTP 400 and nothing is saved. Example message: `No existe el pagador 'Zoe' en este grupo` ("payer 'Zoe' doesn't exist in this group"). - Returns `ok`, `descripcion`, `gasto`, and `pagadores` and `participantes` resolved to person IDs. Payers added to the split automatically appear in `participantes`. Example arguments: ``` { "hash": "", "descripcion": "Cena", "gasto": 15000, "tipoPago": "Efectivo", "tipoGastoDescripcion": "Alimentación", "pagadores": [{"id": 4084, "monto": 15000}], "participantes": [4084, 4085] } ``` `list_expenses`: List the group's expenses. - `hash` (string, required). - Returns `data`: an array of expenses with `id`, `gasto`, `descripcion`, `created`, `tipoGasto` and `tipoPago`. ### Results and errors - A successful `tools/call` returns `result.content[0].text`, a JSON string. Parse it to read the data. - A missing required field or an unknown tool name returns HTTP 400 with a JSON-RPC `error`, for example `{"code": -32602, "message": "Falta el campo hash"}` ("missing field: hash"). - Other failures return HTTP 500 with a JSON-RPC `error`. ### Things to watch for - An unknown hash is not an error: list tools return an empty `data` array. If a pasted link shows no people and no expenses, check the hash before assuming the group is empty. - If `tipoGastoDescripcion` is missing or doesn't match a category exactly, the expense is filed under "Vivienda" without warning. Call `list_expense_types` first and use one of the names it returns. - There's no currency field. Amounts are stored as plain numbers. - Lists return everything in one page. ### Typical flow for a pasted link 1. Take `hash` from the link. 2. Call `list_people`, `list_expenses` and `list_expense_types` to see the group as it is now. 3. Add missing people with `add_person`. 4. Add each expense with `create_expense`, with `pagadores` and `participantes` from `list_people` and a category name from step 2. If the user doesn't say who paid or who shares it, ask before creating the expense. 5. Call `list_expenses` to confirm, then send the user the link to review in the app. ### Using the web app instead 1. Open https://spendify.link/crear-link and click "Start Now!" ("¡Empezar ahora!" in Spanish). A new group is created immediately. 2. The browser lands on `https://spendify.link/gastos?hash=` (or `/expenses?hash=`). 3. Add people and expenses from that page. Balances show who owes whom. Links created in a browser are remembered in that browser's local storage and listed at /ver-links. - [Resource catalog](https://spendify.link/.well-known/ard.json): Machine-readable description of this site, including the MCP server - [MCP server card](https://spendify.link/.well-known/mcp.json): Endpoint and tools as JSON