@chrischall/eventbrite-mcp 0.1.2 → 0.1.3

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 Eventbrite — your tickets and orders, organizer data, and public event discovery",
10
- "version": "0.1.2"
10
+ "version": "0.1.3"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Eventbrite",
16
16
  "source": "./",
17
17
  "description": "MCP server for Eventbrite — tickets, orders, organizer data, and public event search. Account tools use a personal API token; discovery search routes through the user's signed-in eventbrite.com tab via the fetchproxy bridge, reusing their authenticated session.",
18
- "version": "0.1.2",
18
+ "version": "0.1.3",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eventbrite-mcp",
3
3
  "displayName": "Eventbrite",
4
- "version": "0.1.2",
4
+ "version": "0.1.3",
5
5
  "description": "MCP server for Eventbrite — your tickets and orders, organizer data, and public event discovery",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/bundle.js CHANGED
@@ -12836,6 +12836,17 @@ var init_classify_bridge_error = __esm({
12836
12836
  });
12837
12837
 
12838
12838
  // node_modules/@fetchproxy/server/dist/ws-server.js
12839
+ function envWsPort() {
12840
+ const raw = process.env.FETCHPROXY_WS_PORT;
12841
+ if (raw === void 0 || raw.trim() === "")
12842
+ return void 0;
12843
+ if (!/^\d+$/.test(raw.trim()))
12844
+ return void 0;
12845
+ const port = Number(raw.trim());
12846
+ if (!Number.isInteger(port) || port < 1 || port > 65535)
12847
+ return void 0;
12848
+ return port;
12849
+ }
12839
12850
  function protocolErrorFrom(error51) {
12840
12851
  if (SCOPE_REJECTION.test(error51))
12841
12852
  return new FetchproxyScopeError(error51);
@@ -13094,7 +13105,7 @@ var init_ws_server = __esm({
13094
13105
  }
13095
13106
  }
13096
13107
  this.opts = {
13097
- port: opts.port ?? 37149,
13108
+ port: opts.port ?? envWsPort() ?? 37149,
13098
13109
  host: opts.host ?? "127.0.0.1",
13099
13110
  serverName: opts.serverName,
13100
13111
  version: opts.version,
@@ -39396,8 +39407,47 @@ var StdioServerTransport = class {
39396
39407
  };
39397
39408
 
39398
39409
  // node_modules/@chrischall/mcp-utils/dist/server/index.js
39410
+ init_errors();
39411
+
39412
+ // node_modules/@chrischall/mcp-utils/dist/response/index.js
39413
+ init_errors();
39414
+ function textResult(data) {
39415
+ return {
39416
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
39417
+ };
39418
+ }
39419
+ function errorResult(message) {
39420
+ return {
39421
+ content: [{ type: "text", text: redactSecrets(message) }],
39422
+ isError: true
39423
+ };
39424
+ }
39425
+
39426
+ // node_modules/@chrischall/mcp-utils/dist/server/index.js
39427
+ function hintResultOrRethrow(err) {
39428
+ if (err instanceof McpToolError && err.hint) {
39429
+ return errorResult(`${err.message}
39430
+
39431
+ Hint: ${err.hint}`);
39432
+ }
39433
+ throw err;
39434
+ }
39435
+ function surfaceToolHints(server) {
39436
+ const register = server.registerTool.bind(server);
39437
+ server.registerTool = (name, config2, cb) => register(name, config2, (...args) => {
39438
+ let result;
39439
+ try {
39440
+ result = cb(...args);
39441
+ } catch (err) {
39442
+ return hintResultOrRethrow(err);
39443
+ }
39444
+ return result instanceof Promise ? result.catch(hintResultOrRethrow) : result;
39445
+ });
39446
+ }
39399
39447
  async function createMcpServer(opts) {
39400
39448
  const server = new McpServer({ name: opts.name, version: opts.version });
39449
+ if (opts.surfaceHints !== false)
39450
+ surfaceToolHints(server);
39401
39451
  if (opts.banner !== void 0) {
39402
39452
  console.error(opts.banner);
39403
39453
  }
@@ -39442,14 +39492,6 @@ async function runMcp(opts) {
39442
39492
  return server;
39443
39493
  }
39444
39494
 
39445
- // node_modules/@chrischall/mcp-utils/dist/response/index.js
39446
- init_errors();
39447
- function textResult(data) {
39448
- return {
39449
- content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
39450
- };
39451
- }
39452
-
39453
39495
  // node_modules/@chrischall/mcp-utils/dist/index.js
39454
39496
  init_errors();
39455
39497
 
@@ -39725,7 +39767,7 @@ var pageSchema = {
39725
39767
  init_errors();
39726
39768
 
39727
39769
  // src/version.ts
39728
- var VERSION = "0.1.2";
39770
+ var VERSION = "0.1.3";
39729
39771
 
39730
39772
  // src/client.ts
39731
39773
  import { dirname, join } from "path";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.1.2'; // x-release-please-version
1
+ export const VERSION = '0.1.3'; // x-release-please-version
package/mint.yaml ADDED
@@ -0,0 +1,47 @@
1
+ version: 1
2
+ name: Eventbrite
3
+ slug: eventbrite
4
+ summary: >-
5
+ Eventbrite for Claude — your tickets and orders, organizer data, and
6
+ public event discovery BROWSER-BRIDGE MCP: it reaches its site through the
7
+ user's signed-in tab via the fetchproxy bridge, so a registration also
8
+ needs runtime fly-shared, bridge: true and a bridgePortEnv — registration
9
+ fields this manifest has no schema for. state.dataDir below is required
10
+ for bridge and is why it is declared.
11
+ env:
12
+ - name: EVENTBRITE_TOKEN
13
+ secret: true
14
+ required: false
15
+ help: >-
16
+ Personal OAuth token (eventbrite.com/platform/api-keys); needed for
17
+ account tools
18
+ - name: EVENTBRITE_WS_PORT
19
+ required: false
20
+ help: >-
21
+ Concentrator port for the fetchproxy browser bridge (defaults to the
22
+ fleet-shared 37149). The runner injects a per-registration port for a
23
+ hosted bridged child, so this is the name to give bridgePortEnv at
24
+ registration.
25
+ state:
26
+ dataDir: true
27
+ reason: >-
28
+ The fetchproxy identity lives at $HOME/.fetchproxy/identity/<name>.json
29
+ and the pair code derives from it. Without a persistent $HOME every cold
30
+ start mints a fresh identity and re-prompts pairing in the browser; the
31
+ API refuses bridge without it.
32
+ egress:
33
+ allow:
34
+ # Only hosts the SERVER process actually fetches; hosts that appear
35
+ # solely in a URL this server builds and returns are excluded. Matching
36
+ # is exact (an apex entry does not cover subdomains), and the proxy
37
+ # follows no redirects — neither host below redirects (checked 2026-08-28).
38
+ # Token API (src/client.ts): every account/organizer/lookup tool is a
39
+ # direct server-side fetch of the documented API.
40
+ - www.eventbriteapi.com
41
+ # SSR browse pages (src/discovery.ts fetchBrowsePage): resolvePlace GETs
42
+ # `/d/<slug>/events/` directly first and only falls back to the bridge
43
+ # when the WAF blocks. The destination-search API on the same host is
44
+ # bridge-only — dialled by the user's tab, not by this process — so it
45
+ # adds no host; the bare apex `eventbrite.com` is the bridge's declared
46
+ # domain / cookie scope, never a dial, and is deliberately absent.
47
+ - www.eventbrite.com
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chrischall/eventbrite-mcp",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "mcpName": "io.github.chrischall/eventbrite-mcp",
5
5
  "description": "Eventbrite MCP server for Claude — developed and maintained by AI (Claude Code)",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -32,18 +32,20 @@
32
32
  ".claude-plugin",
33
33
  "skills/",
34
34
  ".mcp.json",
35
- "server.json"
35
+ "server.json",
36
+ "mint.yaml"
36
37
  ],
37
38
  "scripts": {
38
39
  "build": "tsc && npm run bundle",
39
40
  "bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --external:dotenv --banner:js='import { createRequire as __createRequire } from \"module\"; const require = __createRequire(import.meta.url);' --outfile=dist/bundle.js",
40
41
  "dev": "node dist/index.js",
41
- "test": "vitest run",
42
+ "test": "npm run typecheck && vitest run",
42
43
  "test:watch": "vitest",
43
- "test:coverage": "vitest run --coverage"
44
+ "test:coverage": "npm run typecheck && vitest run --coverage",
45
+ "typecheck": "tsc -p tsconfig.json --noEmit"
44
46
  },
45
47
  "dependencies": {
46
- "@chrischall/mcp-utils": "^0.14.0",
48
+ "@chrischall/mcp-utils": "^0.15.0",
47
49
  "@fetchproxy/server": "^2.0.0",
48
50
  "@modelcontextprotocol/sdk": "^1.29.0",
49
51
  "dotenv": "^17.4.0",
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/chrischall/eventbrite-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.2",
9
+ "version": "0.1.3",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@chrischall/eventbrite-mcp",
14
- "version": "0.1.2",
14
+ "version": "0.1.3",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },