zola-mcp 0.3.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.
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "chrischall",
4
+ "owner": {
5
+ "name": "Chris Chall",
6
+ "email": "chris.c.hall@gmail.com"
7
+ },
8
+ "metadata": {
9
+ "description": "Zola wedding planning tools for Claude Code",
10
+ "version": "0.2.0"
11
+ },
12
+ "plugins": [
13
+ {
14
+ "name": "zola",
15
+ "displayName": "Zola",
16
+ "source": "./",
17
+ "description": "Zola wedding planning tools for Claude — vendors, budget, guests, seating, events, registry, inquiries, and more via MCP",
18
+ "version": "0.2.0",
19
+ "author": {
20
+ "name": "Chris Chall"
21
+ },
22
+ "homepage": "https://github.com/chrischall/zola-mcp",
23
+ "repository": "https://github.com/chrischall/zola-mcp",
24
+ "license": "MIT",
25
+ "keywords": ["zola", "wedding", "vendors", "guests", "budget", "seating", "registry", "mcp"],
26
+ "category": "productivity"
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "zola",
3
+ "displayName": "Zola",
4
+ "version": "0.2.0",
5
+ "description": "Zola wedding planning tools for Claude — vendors, budget, guests, seating, events, registry, inquiries, and more via MCP",
6
+ "author": {
7
+ "name": "Chris Chall",
8
+ "email": "chris.c.hall@gmail.com"
9
+ },
10
+ "homepage": "https://github.com/chrischall/zola-mcp",
11
+ "repository": "https://github.com/chrischall/zola-mcp",
12
+ "license": "MIT",
13
+ "keywords": ["zola", "wedding", "vendors", "guests", "budget", "seating", "registry", "mcp"],
14
+ "skills": "./skills/",
15
+ "mcp": "./.mcp.json"
16
+ }
package/.mcp.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "zola": {
4
+ "command": "node",
5
+ "args": ["${CLAUDE_PLUGIN_ROOT}/dist/bundle.js"],
6
+ "env": {
7
+ "ZOLA_REFRESH_TOKEN": "${ZOLA_REFRESH_TOKEN}"
8
+ }
9
+ }
10
+ }
11
+ }
package/README.md ADDED
@@ -0,0 +1,221 @@
1
+ # Zola MCP
2
+
3
+ A [Model Context Protocol](https://modelcontextprotocol.io) server that connects Claude to [Zola](https://www.zola.com), giving you natural-language access to your wedding vendors, budget, guest list, seating chart, events, registry, inquiries, and more.
4
+
5
+ > [!WARNING]
6
+ > **AI-developed project.** This codebase was entirely built and is actively maintained by [Claude Sonnet 4.6](https://www.anthropic.com/claude). No human has audited the implementation. Review all code and tool permissions before use.
7
+
8
+ ## What you can do
9
+
10
+ Ask Claude things like:
11
+
12
+ - *"How's wedding planning going?"*
13
+ - *"Find a photographer in Charlotte, NC"*
14
+ - *"Update the venue cost to $25,000"*
15
+ - *"Who hasn't RSVP'd yet?"*
16
+ - *"Seat Jennifer at Table 1"*
17
+ - *"Any new vendor messages?"*
18
+ - *"Add my cousin Mike to the guest list"*
19
+ - *"Show me the gift tracker"*
20
+
21
+ ## Requirements
22
+
23
+ - [Claude Desktop](https://claude.ai/download) or [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
24
+ - [Node.js](https://nodejs.org) 20.6 or later
25
+ - A [Zola](https://www.zola.com) account with the Zola iOS app installed (for initial auth setup)
26
+ - [mitmproxy](https://mitmproxy.org) (`brew install mitmproxy`) — used once for auth token capture
27
+
28
+ ## Installation
29
+
30
+ ### 1. Clone and build
31
+
32
+ ```bash
33
+ git clone https://github.com/chrischall/zola-mcp.git
34
+ cd zola-mcp
35
+ npm install
36
+ npm run build
37
+ ```
38
+
39
+ ### 2. Capture your auth token
40
+
41
+ Run the setup script (one-time, token lasts ~1 year):
42
+
43
+ ```bash
44
+ ./scripts/setup-auth.sh
45
+ ```
46
+
47
+ This starts mitmproxy, opens the Zola iOS app, captures the mobile API refresh token, and saves it to `.env`.
48
+
49
+ ### 3. Add to Claude Desktop
50
+
51
+ Edit your Claude Desktop config file:
52
+
53
+ - **Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
54
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
55
+
56
+ Add the `zola` entry inside `"mcpServers"`:
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "zola": {
62
+ "command": "node",
63
+ "args": ["/absolute/path/to/zola-mcp/dist/bundle.js"],
64
+ "env": {
65
+ "ZOLA_REFRESH_TOKEN": "your-refresh-token-jwt"
66
+ }
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ ### 4. Restart Claude Desktop
73
+
74
+ Quit completely (Cmd+Q on Mac) and relaunch.
75
+
76
+ ### 5. Verify
77
+
78
+ Ask Claude: *"How's wedding planning going?"* — it should show your wedding dashboard.
79
+
80
+ ## Credentials
81
+
82
+ Only one credential is required:
83
+
84
+ | Env var | Required | Notes |
85
+ |---------|----------|-------|
86
+ | `ZOLA_REFRESH_TOKEN` | Yes | Mobile API JWT (~1 year lifetime). Run `./scripts/setup-auth.sh` to capture. |
87
+ | `ZOLA_ACCOUNT_ID` | No | Auto-resolved from API on first use |
88
+ | `ZOLA_REGISTRY_ID` | No | Auto-resolved from API on first use |
89
+
90
+ ## Available tools
91
+
92
+ 27 tools across 8 domains. Read-only tools run automatically. Write tools ask for confirmation.
93
+
94
+ ### Vendors
95
+
96
+ | Tool | What it does | Permission |
97
+ |------|-------------|------------|
98
+ | `list_vendors` | List all booked vendors | Auto |
99
+ | `search_vendors` | Search vendors by name/category | Auto |
100
+ | `add_vendor` | Book a new vendor | Confirm |
101
+ | `update_vendor` | Update vendor details | Confirm |
102
+ | `remove_vendor` | Unbook a vendor | Confirm |
103
+
104
+ ### Budget
105
+
106
+ | Tool | What it does | Permission |
107
+ |------|-------------|------------|
108
+ | `get_budget` | Budget summary with all items | Auto |
109
+ | `update_budget_item` | Update cost or note | Confirm |
110
+
111
+ ### Guests
112
+
113
+ | Tool | What it does | Permission |
114
+ |------|-------------|------------|
115
+ | `list_guests` | List all guest groups with stats | Auto |
116
+ | `add_guest` | Add a guest group | Confirm |
117
+ | `update_guest_address` | Update mailing address | Confirm |
118
+ | `remove_guest` | Remove a guest group | Confirm |
119
+
120
+ ### Seating
121
+
122
+ | Tool | What it does | Permission |
123
+ |------|-------------|------------|
124
+ | `list_seating_charts` | List seating charts | Auto |
125
+ | `get_seating_chart` | Chart with tables/seats/occupants | Auto |
126
+ | `list_unseated_guests` | Guests not yet seated | Auto |
127
+ | `assign_seat` | Assign guest to a seat | Confirm |
128
+
129
+ ### Inquiries
130
+
131
+ | Tool | What it does | Permission |
132
+ |------|-------------|------------|
133
+ | `list_inquiries` | All vendor inquiries with status | Auto |
134
+ | `get_inquiry_conversation` | Full conversation messages | Auto |
135
+ | `mark_inquiry_read` | Mark as read | Confirm |
136
+
137
+ ### Events & RSVPs
138
+
139
+ | Tool | What it does | Permission |
140
+ |------|-------------|------------|
141
+ | `list_events` | All events with RSVP counts | Auto |
142
+ | `track_rsvps` | RSVP tracking per event | Auto |
143
+ | `update_event` | Update event details | Confirm |
144
+
145
+ ### Registry & Gifts
146
+
147
+ | Tool | What it does | Permission |
148
+ |------|-------------|------------|
149
+ | `get_registry` | Registry categories and items | Auto |
150
+ | `get_gift_tracker` | Gifts received, thank-you status | Auto |
151
+
152
+ ### Discovery
153
+
154
+ | Tool | What it does | Permission |
155
+ |------|-------------|------------|
156
+ | `get_wedding_dashboard` | Planning dashboard overview | Auto |
157
+ | `search_storefronts` | Search marketplace by category/location | Auto |
158
+ | `get_storefront` | Full vendor storefront details | Auto |
159
+ | `list_favorites` | Favorited vendors | Auto |
160
+
161
+ ## Troubleshooting
162
+
163
+ **"ZOLA_REFRESH_TOKEN must be set"** — run `./scripts/setup-auth.sh` to capture your token.
164
+
165
+ **"Zola session refresh failed"** — your refresh token has expired (~1 year). Re-run `./scripts/setup-auth.sh`.
166
+
167
+ **403 from mobile API** — the `x-zola-session-id` header may be missing. Update to the latest version.
168
+
169
+ **Tools not appearing in Claude** — go to **Claude Desktop → Settings → Developer** to see connected servers. Make sure you fully quit and relaunched after editing the config.
170
+
171
+ ## Security
172
+
173
+ - The refresh token lives only in your local `.env` or config file
174
+ - It is passed as an environment variable and never logged
175
+ - The server authenticates with Zola's mobile API using the same flow as the iOS app
176
+ - Account and registry IDs are auto-resolved from the API (no manual configuration needed)
177
+
178
+ ## Development
179
+
180
+ ```bash
181
+ npm test # run the test suite (vitest)
182
+ npm run build # compile TypeScript → dist/
183
+ ```
184
+
185
+ ### Project structure
186
+
187
+ ```
188
+ src/
189
+ client.ts Zola mobile API client (auth, token refresh, context)
190
+ index.ts MCP server entry point
191
+ tools/
192
+ vendors.ts list, search, add, update, remove vendors
193
+ budget.ts get budget, update budget items
194
+ guests.ts list, add, update, remove guests
195
+ seating.ts seating charts, seat assignment
196
+ inquiries.ts vendor inquiry conversations
197
+ events.ts events, RSVPs, gift tracker, registry
198
+ discover.ts dashboard, storefront search, favorites
199
+ tests/
200
+ client.test.ts
201
+ vendors.test.ts
202
+ budget.test.ts
203
+ guests.test.ts
204
+ seating.test.ts
205
+ inquiries.test.ts
206
+ events.test.ts
207
+ discover.test.ts
208
+ ```
209
+
210
+ ### Auth flow
211
+
212
+ All tools use the Zola mobile API (`mobile-api.zola.com`) with Bearer JWT auth:
213
+
214
+ 1. `POST /v3/sessions/refresh` with refresh token JWT → returns 30-min session token
215
+ 2. All API calls use `Authorization: Bearer <session_token>` + `x-zola-session-id` header
216
+ 3. On 401, auto-refreshes and retries once
217
+ 4. Session tokens are cached for their lifetime (30 min)
218
+
219
+ ## License
220
+
221
+ MIT