splitwise-mcp 3.5.1 → 3.7.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "splitwise-mcp",
3
- "version": "3.5.1",
3
+ "version": "3.7.0",
4
4
  "mcpName": "io.github.chrischall/splitwise-mcp",
5
5
  "description": "Splitwise MCP server for Claude — developed and maintained by AI (Claude Code)",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -45,10 +45,10 @@
45
45
  "typecheck": "tsc -p tsconfig.json --noEmit"
46
46
  },
47
47
  "dependencies": {
48
- "@chrischall/mcp-utils": "^3.3.0",
48
+ "@chrischall/mcp-utils": "^3.6.0",
49
49
  "@modelcontextprotocol/server": "^2.3.0",
50
50
  "dotenv": "^18.0.2",
51
- "unpdf": "^1.8.1",
51
+ "unpdf": "^2.0.0",
52
52
  "zod": "^4.6.5"
53
53
  },
54
54
  "devDependencies": {
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/chrischall/splitwise-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "3.5.1",
9
+ "version": "3.7.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "splitwise-mcp",
14
- "version": "3.5.1",
14
+ "version": "3.7.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -111,9 +111,31 @@ API key auth — no login flow or token rotation. The key is attached to every r
111
111
  | `sw_get_categories` | Hierarchical list of expense categories (use `id` as `category_id`) |
112
112
  | `sw_get_currencies` | List of supported currency codes |
113
113
 
114
+ ## In context groups
115
+
116
+ On an mcp-host gateway, splitwise joins the **money** group (`_meta.mint` on every
117
+ tool but `sw_healthcheck`). Its canonical reads, each answering one line per item
118
+ with `view: "brief"` inside the untrusted-data envelope (`data: string[]`):
119
+
120
+ - **what's due** — `sw_list_friends`: one line per friend with an outstanding
121
+ balance, `name — no date — owes you USD 12.50` / `you owe EUR 3.00`, then a
122
+ `-- N settled up` note; `-- none` when nothing is owed either way.
123
+ - **what's new** — `sw_get_notifications`: recent activity, `text — <ISO date> —
124
+ <kind>` (expense added, comment added, …), at most 50 lines with a
125
+ `-- 50 of M shown` note past that; `-- none` for no activity.
126
+
127
+ Neither names a subject (one API key is one account; friends and groups are who
128
+ you split with, not whose question it is) and neither takes a date range. Nothing
129
+ here answers what's on. Every other read is a `lookup`; the writes are `change`
130
+ (`sw_create_comment` is `send`). A compound ask looks like "what do I owe on
131
+ Splitwise, and is anything due at school?" — the money group reads the balances
132
+ while the school group answers the rest. Splitwise is a direct API with a key,
133
+ not a browser bridge, so it never answers "needs your browser open".
134
+
114
135
  ## Response shape (`view`)
115
136
 
116
- Nine read tools take `view: "compact" | "full"`, and **`compact` is the
137
+ Nine read tools take `view: "compact" | "full"` (`sw_list_friends` and
138
+ `sw_get_notifications` also take `"brief"`, above), and **`compact` is the
117
139
  default** — you get the slim rung without asking. Two of them are not in the
118
140
  table above: `sw_get_user(id, view?)` and `sw_get_comments(expense_id, view?)`.
119
141
 
@@ -215,7 +237,7 @@ sw_create_expense(group_id, "Band camp water jug", "54.11", split_equally: true,
215
237
  sw_attach_receipt(expense_id, receipt: { base64: "<png/jpeg/gif/pdf bytes>", filename: "order.pdf" })
216
238
  ```
217
239
 
218
- `receipt` takes `filename` plus exactly one of `upload_id` (hosted server: from `sw_get_upload_url`, after `curl -X PUT` of the file — keeps the bytes out of the conversation and out of the second, confirming call), `path` (only on a local server with `SPLITWISE_INPUT_DIR` set, and only inside that directory) or `base64` (fallback when you have no shell that can reach the upload URL). PNG, JPEG, GIF or PDF, ≤ 10 MiB, type detected from the bytes. It replaces any existing receipt. Use `sw_attach_receipt` to add a file to an existing expense — it sends nothing but the file. If Splitwise saves the expense but drops the file, the tool returns an error naming the expense: do not re-create it, retry with `sw_attach_receipt`.
240
+ `receipt` takes `filename` plus exactly one of `upload_id` (hosted server: from `sw_get_upload_url`, after `curl -X PUT` of the file — keeps the bytes out of the conversation and out of the second, confirming call), `path` (only on a local server with `SPLITWISE_INPUT_DIR` set, and only inside that directory) or `base64` (fallback when you have no shell that can reach the upload URL). PNG, JPEG, GIF or PDF, ≤ 10 MiB, type detected from the bytes. It replaces any existing receipt. Use `sw_attach_receipt` to add a file to an existing expense — it sends nothing but the file. If Splitwise saves the expense but drops the file, the tool returns an error naming the expense: do not re-create it, retry with `sw_attach_receipt`. An `upload_id` is single use: once the receipt is stored the upload is deleted (`upload_deleted: true`), so attaching the same file again needs a fresh `sw_get_upload_url`. A declined preview or a failed write keeps it — retry with the same `upload_id`. `upload_deleted: false` (with `upload_delete_error`) is not a failure: the receipt is attached; the copy just waits for the server's retention cleanup.
219
241
 
220
242
  **Log a 50/50 expense the other person paid:**
221
243
  ```