splitwise-mcp 3.3.1 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "MCP server for Splitwise — natural-language expense and group management via the Splitwise API",
10
- "version": "3.3.1"
10
+ "version": "3.4.1"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Splitwise",
16
16
  "source": "./",
17
17
  "description": "MCP server for Splitwise — manage expenses, groups, and friends via natural language",
18
- "version": "3.3.1",
18
+ "version": "3.4.1",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "splitwise-mcp",
3
3
  "displayName": "Splitwise",
4
- "version": "3.3.1",
4
+ "version": "3.4.1",
5
5
  "description": "MCP server for Splitwise — natural-language expense and group management via the Splitwise API",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/.mcp.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "mcpServers": {
3
3
  "splitwise": {
4
- "command": "node",
4
+ "command": "npx",
5
5
  "args": [
6
- "${CLAUDE_PLUGIN_ROOT}/dist/index.js"
6
+ "-y",
7
+ "splitwise-mcp"
7
8
  ],
8
9
  "env": {
9
10
  "SPLITWISE_API_KEY": "${SPLITWISE_API_KEY}",
10
- "SPLITWISE_OUTPUT_DIR": "${SPLITWISE_OUTPUT_DIR}"
11
+ "SPLITWISE_OUTPUT_DIR": "${SPLITWISE_OUTPUT_DIR}",
12
+ "SPLITWISE_INPUT_DIR": "${SPLITWISE_INPUT_DIR}"
11
13
  }
12
14
  }
13
15
  }
package/README.md CHANGED
@@ -21,6 +21,7 @@ Ask Claude things like:
21
21
  - *"Show me recent expenses"*
22
22
  - *"Delete that duplicate expense"*
23
23
  - *"Download the receipt from that hotel expense"*
24
+ - *"Add that Amazon order screenshot as the receipt on the water-jug expense"*
24
25
 
25
26
  ## Requirements
26
27
 
@@ -114,6 +115,7 @@ Add to Claude Desktop config:
114
115
  |---------|----------|-------|
115
116
  | `SPLITWISE_API_KEY` | Yes | API key from [splitwise.com/apps/register](https://secure.splitwise.com/apps/register) |
116
117
  | `SPLITWISE_OUTPUT_DIR` | No | Where `sw_get_receipt` writes downloaded receipts (owner-only, mode 0600). Defaults to `~/Downloads/splitwise-mcp`, never the working directory. When set, a per-call `output_dir` must be inside it. |
118
+ | `SPLITWISE_INPUT_DIR` | No | The only directory `receipt.path` may read from (`..` and symlinks out of it are refused). Unset — always the case on a hosted server — means receipts are accepted as `base64` only. |
117
119
 
118
120
  ## Confirmations
119
121
 
@@ -165,10 +167,11 @@ Every Splitwise write (creating, editing or deleting expenses, groups, friends,
165
167
  |------|-------------|
166
168
  | `sw_list_expenses` | List or search expenses with filters |
167
169
  | `sw_get_expense` | Full details of a single expense |
168
- | `sw_create_expense` | Create an expense (equal or custom split) |
169
- | `sw_update_expense` | Edit an existing expense |
170
+ | `sw_create_expense` | Create an expense (equal or custom split), optionally with a receipt image/PDF |
171
+ | `sw_update_expense` | Edit an existing expense, or attach/replace its receipt |
170
172
  | `sw_delete_expense` | Soft-delete an expense |
171
173
  | `sw_undelete_expense` | Restore a deleted expense |
174
+ | `sw_attach_receipt` | Attach or replace the receipt on an existing expense, changing nothing else |
172
175
  | `sw_get_comments` | Get comments on an expense |
173
176
  | `sw_create_comment` | Add a comment to an expense |
174
177
  | `sw_delete_comment` | Delete a comment |
@@ -191,6 +194,8 @@ Every Splitwise write (creating, editing or deleting expenses, groups, friends,
191
194
 
192
195
  **"SPLITWISE_API_KEY is required"** -- set the environment variable in your MCP config or a `.env` file.
193
196
 
197
+ **Attaching a receipt** -- `sw_create_expense`, `sw_update_expense` and `sw_attach_receipt` take `receipt: { base64, filename, mime_type? }` (works everywhere, including a hosted server) or, on a local server with `SPLITWISE_INPUT_DIR` set, `receipt: { path, filename }` for a file inside that directory. PNG, JPEG, GIF or PDF up to 10 MiB (Splitwise documents no limit); the type is detected from the bytes, and a `mime_type` that disagrees is refused. The confirmation preview shows the file's name, type, size and SHA-256 instead of its contents, and the token is bound to those bytes. After the write the tool checks Splitwise actually stored the file (`receipt.original`) and returns an error naming the expense if it did not. A receipt replaces any receipt already on the expense.
198
+
194
199
  **401 when opening a receipt URL** -- the `receipt.original` / `receipt.large` URLs on an expense are not public; they need the API key. Use `sw_get_receipt` instead of fetching them directly.
195
200
 
196
201
  **Receipt lands somewhere you can't read it** -- `sw_get_receipt` writes to the *server's* filesystem, which is not the caller's when the server is hosted or containerised. Pass `inline: true` for the bytes (an image block for images, an embedded resource for PDFs) or `extract_text: true` for a PDF's text. With `inline` or `extract_text` and no `output_dir`, nothing is written unless you also pass `write: true`. Pass `write: false` to skip the write in any case; if it fails on its own (read-only filesystem), the call still succeeds and reports `write_error` as long as you asked for content.