zola-mcp 1.0.6 → 1.0.7
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/.claude-plugin/marketplace.json +12 -3
- package/.claude-plugin/plugin.json +11 -2
- package/dist/bundle.js +15 -6
- package/dist/client.js +23 -5
- package/dist/index.js +1 -1
- package/package.json +4 -2
- package/server.json +29 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "Zola wedding planning tools for Claude Code",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "1.0.7"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,14 +15,23 @@
|
|
|
15
15
|
"displayName": "Zola",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "Zola wedding planning tools for Claude — vendors, budget, guests, seating, events, registry, inquiries, and more via MCP",
|
|
18
|
-
"version": "0.
|
|
18
|
+
"version": "1.0.7",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Chall"
|
|
21
21
|
},
|
|
22
22
|
"homepage": "https://github.com/chrischall/zola-mcp",
|
|
23
23
|
"repository": "https://github.com/chrischall/zola-mcp",
|
|
24
24
|
"license": "MIT",
|
|
25
|
-
"keywords": [
|
|
25
|
+
"keywords": [
|
|
26
|
+
"zola",
|
|
27
|
+
"wedding",
|
|
28
|
+
"vendors",
|
|
29
|
+
"guests",
|
|
30
|
+
"budget",
|
|
31
|
+
"seating",
|
|
32
|
+
"registry",
|
|
33
|
+
"mcp"
|
|
34
|
+
],
|
|
26
35
|
"category": "productivity"
|
|
27
36
|
}
|
|
28
37
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zola",
|
|
3
3
|
"displayName": "Zola",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.7",
|
|
5
5
|
"description": "Zola wedding planning tools for Claude — vendors, budget, guests, seating, events, registry, inquiries, and more via MCP",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Chall",
|
|
@@ -10,7 +10,16 @@
|
|
|
10
10
|
"homepage": "https://github.com/chrischall/zola-mcp",
|
|
11
11
|
"repository": "https://github.com/chrischall/zola-mcp",
|
|
12
12
|
"license": "MIT",
|
|
13
|
-
"keywords": [
|
|
13
|
+
"keywords": [
|
|
14
|
+
"zola",
|
|
15
|
+
"wedding",
|
|
16
|
+
"vendors",
|
|
17
|
+
"guests",
|
|
18
|
+
"budget",
|
|
19
|
+
"seating",
|
|
20
|
+
"registry",
|
|
21
|
+
"mcp"
|
|
22
|
+
],
|
|
14
23
|
"skills": "./skills/",
|
|
15
24
|
"mcp": "./.mcp.json"
|
|
16
25
|
}
|
package/dist/bundle.js
CHANGED
|
@@ -30118,9 +30118,18 @@ import { fileURLToPath } from "url";
|
|
|
30118
30118
|
try {
|
|
30119
30119
|
const { config: config2 } = await import("dotenv");
|
|
30120
30120
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
30121
|
-
config2({ path: join(__dirname, "..", ".env"), override: false });
|
|
30121
|
+
config2({ path: join(__dirname, "..", ".env"), override: false, quiet: true });
|
|
30122
30122
|
} catch {
|
|
30123
30123
|
}
|
|
30124
|
+
function readVar(key) {
|
|
30125
|
+
const raw = process.env[key];
|
|
30126
|
+
if (typeof raw !== "string") return void 0;
|
|
30127
|
+
const trimmed = raw.trim();
|
|
30128
|
+
if (trimmed.length === 0) return void 0;
|
|
30129
|
+
if (trimmed === "undefined" || trimmed === "null") return void 0;
|
|
30130
|
+
if (/^\$\{[^}]*\}$/.test(trimmed)) return void 0;
|
|
30131
|
+
return trimmed;
|
|
30132
|
+
}
|
|
30124
30133
|
var MOBILE_BASE_URL = "https://mobile-api.zola.com";
|
|
30125
30134
|
function decodeJwtExp(token) {
|
|
30126
30135
|
const parts = token.split(".");
|
|
@@ -30164,8 +30173,8 @@ var ZolaClient = class {
|
|
|
30164
30173
|
*/
|
|
30165
30174
|
async getContext() {
|
|
30166
30175
|
if (this.cachedContext) return this.cachedContext;
|
|
30167
|
-
const envAccountId =
|
|
30168
|
-
const envRegistryId =
|
|
30176
|
+
const envAccountId = readVar("ZOLA_ACCOUNT_ID");
|
|
30177
|
+
const envRegistryId = readVar("ZOLA_REGISTRY_ID");
|
|
30169
30178
|
if (envAccountId && envRegistryId) {
|
|
30170
30179
|
this.cachedContext = {
|
|
30171
30180
|
weddingAccountId: Number(envAccountId),
|
|
@@ -30227,7 +30236,7 @@ var ZolaClient = class {
|
|
|
30227
30236
|
if (this.sessionExpiry.getTime() - Date.now() > 5 * 60 * 1e3) return;
|
|
30228
30237
|
}
|
|
30229
30238
|
if (this.sessionToken === null) {
|
|
30230
|
-
const envSession =
|
|
30239
|
+
const envSession = readVar("ZOLA_SESSION_TOKEN");
|
|
30231
30240
|
if (envSession) {
|
|
30232
30241
|
try {
|
|
30233
30242
|
const exp = decodeJwtExp(envSession);
|
|
@@ -30248,7 +30257,7 @@ var ZolaClient = class {
|
|
|
30248
30257
|
* Returns a new session_token (30-min) and optionally a new refresh_token.
|
|
30249
30258
|
*/
|
|
30250
30259
|
async refresh() {
|
|
30251
|
-
const refreshToken =
|
|
30260
|
+
const refreshToken = readVar("ZOLA_REFRESH_TOKEN");
|
|
30252
30261
|
if (!refreshToken) throw new Error("ZOLA_REFRESH_TOKEN must be set");
|
|
30253
30262
|
const response = await fetch(`${MOBILE_BASE_URL}/v3/sessions/refresh`, {
|
|
30254
30263
|
method: "POST",
|
|
@@ -30986,7 +30995,7 @@ function registerDiscoverTools(server2) {
|
|
|
30986
30995
|
// src/index.ts
|
|
30987
30996
|
var server = new McpServer({
|
|
30988
30997
|
name: "zola-mcp",
|
|
30989
|
-
version: "1.0.
|
|
30998
|
+
version: "1.0.7"
|
|
30990
30999
|
});
|
|
30991
31000
|
registerVendorTools(server);
|
|
30992
31001
|
registerBudgetTools(server);
|
package/dist/client.js
CHANGED
|
@@ -3,11 +3,29 @@ import { fileURLToPath } from 'url';
|
|
|
3
3
|
try {
|
|
4
4
|
const { config } = await import('dotenv');
|
|
5
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
config({ path: join(__dirname, '..', '.env'), override: false });
|
|
6
|
+
config({ path: join(__dirname, '..', '.env'), override: false, quiet: true });
|
|
7
7
|
}
|
|
8
8
|
catch {
|
|
9
9
|
// bundled mode — rely on process.env
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Read an env var, trim whitespace, and treat as unset if blank or if the value
|
|
13
|
+
* looks like an unsubstituted shell placeholder (e.g. `${FOO}`) — defends
|
|
14
|
+
* against MCP hosts that pass .mcp.json env blocks through unexpanded.
|
|
15
|
+
*/
|
|
16
|
+
function readVar(key) {
|
|
17
|
+
const raw = process.env[key];
|
|
18
|
+
if (typeof raw !== 'string')
|
|
19
|
+
return undefined;
|
|
20
|
+
const trimmed = raw.trim();
|
|
21
|
+
if (trimmed.length === 0)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (trimmed === 'undefined' || trimmed === 'null')
|
|
24
|
+
return undefined;
|
|
25
|
+
if (/^\$\{[^}]*\}$/.test(trimmed))
|
|
26
|
+
return undefined;
|
|
27
|
+
return trimmed;
|
|
28
|
+
}
|
|
11
29
|
const MOBILE_BASE_URL = 'https://mobile-api.zola.com';
|
|
12
30
|
function decodeJwtExp(token) {
|
|
13
31
|
const parts = token.split('.');
|
|
@@ -54,8 +72,8 @@ export class ZolaClient {
|
|
|
54
72
|
async getContext() {
|
|
55
73
|
if (this.cachedContext)
|
|
56
74
|
return this.cachedContext;
|
|
57
|
-
const envAccountId =
|
|
58
|
-
const envRegistryId =
|
|
75
|
+
const envAccountId = readVar('ZOLA_ACCOUNT_ID');
|
|
76
|
+
const envRegistryId = readVar('ZOLA_REGISTRY_ID');
|
|
59
77
|
// If both env vars are set, skip the API call
|
|
60
78
|
if (envAccountId && envRegistryId) {
|
|
61
79
|
this.cachedContext = {
|
|
@@ -123,7 +141,7 @@ export class ZolaClient {
|
|
|
123
141
|
}
|
|
124
142
|
// Check for session token in env (first load only)
|
|
125
143
|
if (this.sessionToken === null) {
|
|
126
|
-
const envSession =
|
|
144
|
+
const envSession = readVar('ZOLA_SESSION_TOKEN');
|
|
127
145
|
if (envSession) {
|
|
128
146
|
try {
|
|
129
147
|
const exp = decodeJwtExp(envSession);
|
|
@@ -146,7 +164,7 @@ export class ZolaClient {
|
|
|
146
164
|
* Returns a new session_token (30-min) and optionally a new refresh_token.
|
|
147
165
|
*/
|
|
148
166
|
async refresh() {
|
|
149
|
-
const refreshToken =
|
|
167
|
+
const refreshToken = readVar('ZOLA_REFRESH_TOKEN');
|
|
150
168
|
if (!refreshToken)
|
|
151
169
|
throw new Error('ZOLA_REFRESH_TOKEN must be set');
|
|
152
170
|
const response = await fetch(`${MOBILE_BASE_URL}/v3/sessions/refresh`, {
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { registerEventTools } from './tools/events.js';
|
|
|
9
9
|
import { registerDiscoverTools } from './tools/discover.js';
|
|
10
10
|
const server = new McpServer({
|
|
11
11
|
name: 'zola-mcp',
|
|
12
|
-
version: '1.0.
|
|
12
|
+
version: '1.0.7',
|
|
13
13
|
});
|
|
14
14
|
registerVendorTools(server);
|
|
15
15
|
registerBudgetTools(server);
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zola-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
|
+
"mcpName": "io.github.chrischall/zola-mcp",
|
|
4
5
|
"description": "Zola wedding MCP server for Claude",
|
|
5
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
6
7
|
"repository": {
|
|
@@ -27,7 +28,8 @@
|
|
|
27
28
|
"dist",
|
|
28
29
|
".claude-plugin",
|
|
29
30
|
"skills",
|
|
30
|
-
".mcp.json"
|
|
31
|
+
".mcp.json",
|
|
32
|
+
"server.json"
|
|
31
33
|
],
|
|
32
34
|
"engines": {
|
|
33
35
|
"node": ">=20.6.0"
|
package/server.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.chrischall/zola-mcp",
|
|
4
|
+
"description": "Zola wedding planning for Claude — vendors, budget, guests, seating, registry, and RSVPs",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/chrischall/zola-mcp",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "1.0.7",
|
|
10
|
+
"packages": [
|
|
11
|
+
{
|
|
12
|
+
"registryType": "npm",
|
|
13
|
+
"identifier": "zola-mcp",
|
|
14
|
+
"version": "1.0.7",
|
|
15
|
+
"transport": {
|
|
16
|
+
"type": "stdio"
|
|
17
|
+
},
|
|
18
|
+
"environmentVariables": [
|
|
19
|
+
{
|
|
20
|
+
"name": "ZOLA_REFRESH_TOKEN",
|
|
21
|
+
"description": "Zola refresh token JWT (~1 year lifetime). Run npm run auth to capture via browser login.",
|
|
22
|
+
"isRequired": true,
|
|
23
|
+
"format": "string",
|
|
24
|
+
"isSecret": true
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|