@chrischall/eventbrite-mcp 0.1.2 → 0.2.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/bundle.js +72 -19
- package/dist/version.js +1 -1
- package/mint.yaml +47 -0
- package/package.json +8 -6
- package/server.json +2 -2
|
@@ -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.
|
|
10
|
+
"version": "0.2.0"
|
|
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.
|
|
18
|
+
"version": "0.2.0",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
package/dist/bundle.js
CHANGED
|
@@ -3322,8 +3322,8 @@ var require_utils = __commonJS({
|
|
|
3322
3322
|
var HOST_DELIMS = { "@": "%40", "/": "%2F", "?": "%3F", "#": "%23", ":": "%3A" };
|
|
3323
3323
|
var HOST_DELIM_RE = /[@/?#:]/g;
|
|
3324
3324
|
var HOST_DELIM_NO_COLON_RE = /[@/?#]/g;
|
|
3325
|
-
function reescapeHostDelimiters(host,
|
|
3326
|
-
const re =
|
|
3325
|
+
function reescapeHostDelimiters(host, isIP2) {
|
|
3326
|
+
const re = isIP2 ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
|
|
3327
3327
|
re.lastIndex = 0;
|
|
3328
3328
|
return host.replace(re, (ch) => HOST_DELIMS[ch]);
|
|
3329
3329
|
}
|
|
@@ -3812,7 +3812,7 @@ var require_fast_uri = __commonJS({
|
|
|
3812
3812
|
fragment: void 0
|
|
3813
3813
|
};
|
|
3814
3814
|
let malformedAuthorityOrPort = false;
|
|
3815
|
-
let
|
|
3815
|
+
let isIP2 = false;
|
|
3816
3816
|
if (options.reference === "suffix") {
|
|
3817
3817
|
if (options.scheme) {
|
|
3818
3818
|
uri = options.scheme + ":" + uri;
|
|
@@ -3861,9 +3861,9 @@ var require_fast_uri = __commonJS({
|
|
|
3861
3861
|
if (ipv4result === false) {
|
|
3862
3862
|
const ipv6result = normalizeIPv6(parsed.host);
|
|
3863
3863
|
parsed.host = ipv6result.host.toLowerCase();
|
|
3864
|
-
|
|
3864
|
+
isIP2 = ipv6result.isIPV6;
|
|
3865
3865
|
} else {
|
|
3866
|
-
|
|
3866
|
+
isIP2 = true;
|
|
3867
3867
|
}
|
|
3868
3868
|
}
|
|
3869
3869
|
if (parsed.scheme === void 0 && parsed.userinfo === void 0 && parsed.host === void 0 && parsed.port === void 0 && parsed.query === void 0 && !parsed.path) {
|
|
@@ -3880,7 +3880,7 @@ var require_fast_uri = __commonJS({
|
|
|
3880
3880
|
}
|
|
3881
3881
|
const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
|
|
3882
3882
|
if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
|
|
3883
|
-
if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) &&
|
|
3883
|
+
if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP2 === false && nonSimpleDomain(parsed.host)) {
|
|
3884
3884
|
try {
|
|
3885
3885
|
parsed.host = new URL("http://" + parsed.host).hostname;
|
|
3886
3886
|
} catch (e) {
|
|
@@ -3894,7 +3894,7 @@ var require_fast_uri = __commonJS({
|
|
|
3894
3894
|
parsed.scheme = unescape(parsed.scheme);
|
|
3895
3895
|
}
|
|
3896
3896
|
if (parsed.host !== void 0) {
|
|
3897
|
-
parsed.host = reescapeHostDelimiters(unescape(parsed.host),
|
|
3897
|
+
parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP2);
|
|
3898
3898
|
}
|
|
3899
3899
|
}
|
|
3900
3900
|
if (parsed.path) {
|
|
@@ -8564,7 +8564,7 @@ var require_permessage_deflate = __commonJS({
|
|
|
8564
8564
|
acceptAsServer(offers) {
|
|
8565
8565
|
const opts = this._options;
|
|
8566
8566
|
const accepted = offers.find((params) => {
|
|
8567
|
-
if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && !params.client_max_window_bits) {
|
|
8567
|
+
if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && (typeof params.client_max_window_bits === "number" ? opts.clientMaxWindowBits > params.client_max_window_bits : !params.client_max_window_bits)) {
|
|
8568
8568
|
return false;
|
|
8569
8569
|
}
|
|
8570
8570
|
return true;
|
|
@@ -12836,6 +12836,27 @@ var init_classify_bridge_error = __esm({
|
|
|
12836
12836
|
});
|
|
12837
12837
|
|
|
12838
12838
|
// node_modules/@fetchproxy/server/dist/ws-server.js
|
|
12839
|
+
import { isIP } from "node:net";
|
|
12840
|
+
function envWsPort() {
|
|
12841
|
+
const raw = process.env.FETCHPROXY_WS_PORT;
|
|
12842
|
+
if (raw === void 0 || raw.trim() === "")
|
|
12843
|
+
return void 0;
|
|
12844
|
+
if (!/^\d+$/.test(raw.trim()))
|
|
12845
|
+
return void 0;
|
|
12846
|
+
const port = Number(raw.trim());
|
|
12847
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
12848
|
+
return void 0;
|
|
12849
|
+
return port;
|
|
12850
|
+
}
|
|
12851
|
+
function envWsHost() {
|
|
12852
|
+
const raw = process.env.FETCHPROXY_WS_HOST;
|
|
12853
|
+
if (raw === void 0)
|
|
12854
|
+
return void 0;
|
|
12855
|
+
const host = raw.trim();
|
|
12856
|
+
if (host === "" || isIP(host) === 0)
|
|
12857
|
+
return void 0;
|
|
12858
|
+
return host;
|
|
12859
|
+
}
|
|
12839
12860
|
function protocolErrorFrom(error51) {
|
|
12840
12861
|
if (SCOPE_REJECTION.test(error51))
|
|
12841
12862
|
return new FetchproxyScopeError(error51);
|
|
@@ -13094,8 +13115,8 @@ var init_ws_server = __esm({
|
|
|
13094
13115
|
}
|
|
13095
13116
|
}
|
|
13096
13117
|
this.opts = {
|
|
13097
|
-
port: opts.port ?? 37149,
|
|
13098
|
-
host: opts.host ?? "127.0.0.1",
|
|
13118
|
+
port: opts.port ?? envWsPort() ?? 37149,
|
|
13119
|
+
host: opts.host ?? envWsHost() ?? "127.0.0.1",
|
|
13099
13120
|
serverName: opts.serverName,
|
|
13100
13121
|
version: opts.version,
|
|
13101
13122
|
domains: [...opts.domains],
|
|
@@ -13381,6 +13402,7 @@ var init_ws_server = __esm({
|
|
|
13381
13402
|
return {
|
|
13382
13403
|
role: this.role,
|
|
13383
13404
|
port: this.opts.port,
|
|
13405
|
+
host: this.opts.host,
|
|
13384
13406
|
serverVersion: this.opts.version,
|
|
13385
13407
|
fetchTimeoutMs: this.opts.fetchTimeoutMs ?? 0,
|
|
13386
13408
|
bridgeReviveDelayMs: this.opts.bridgeReviveDelayMs ?? 0,
|
|
@@ -39396,8 +39418,47 @@ var StdioServerTransport = class {
|
|
|
39396
39418
|
};
|
|
39397
39419
|
|
|
39398
39420
|
// node_modules/@chrischall/mcp-utils/dist/server/index.js
|
|
39421
|
+
init_errors();
|
|
39422
|
+
|
|
39423
|
+
// node_modules/@chrischall/mcp-utils/dist/response/index.js
|
|
39424
|
+
init_errors();
|
|
39425
|
+
function textResult(data) {
|
|
39426
|
+
return {
|
|
39427
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
39428
|
+
};
|
|
39429
|
+
}
|
|
39430
|
+
function errorResult(message) {
|
|
39431
|
+
return {
|
|
39432
|
+
content: [{ type: "text", text: redactSecrets(message) }],
|
|
39433
|
+
isError: true
|
|
39434
|
+
};
|
|
39435
|
+
}
|
|
39436
|
+
|
|
39437
|
+
// node_modules/@chrischall/mcp-utils/dist/server/index.js
|
|
39438
|
+
function hintResultOrRethrow(err) {
|
|
39439
|
+
if (err instanceof McpToolError && err.hint) {
|
|
39440
|
+
return errorResult(`${err.message}
|
|
39441
|
+
|
|
39442
|
+
Hint: ${err.hint}`);
|
|
39443
|
+
}
|
|
39444
|
+
throw err;
|
|
39445
|
+
}
|
|
39446
|
+
function surfaceToolHints(server) {
|
|
39447
|
+
const register = server.registerTool.bind(server);
|
|
39448
|
+
server.registerTool = (name, config2, cb) => register(name, config2, (...args) => {
|
|
39449
|
+
let result;
|
|
39450
|
+
try {
|
|
39451
|
+
result = cb(...args);
|
|
39452
|
+
} catch (err) {
|
|
39453
|
+
return hintResultOrRethrow(err);
|
|
39454
|
+
}
|
|
39455
|
+
return result instanceof Promise ? result.catch(hintResultOrRethrow) : result;
|
|
39456
|
+
});
|
|
39457
|
+
}
|
|
39399
39458
|
async function createMcpServer(opts) {
|
|
39400
39459
|
const server = new McpServer({ name: opts.name, version: opts.version });
|
|
39460
|
+
if (opts.surfaceHints !== false)
|
|
39461
|
+
surfaceToolHints(server);
|
|
39401
39462
|
if (opts.banner !== void 0) {
|
|
39402
39463
|
console.error(opts.banner);
|
|
39403
39464
|
}
|
|
@@ -39442,14 +39503,6 @@ async function runMcp(opts) {
|
|
|
39442
39503
|
return server;
|
|
39443
39504
|
}
|
|
39444
39505
|
|
|
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
39506
|
// node_modules/@chrischall/mcp-utils/dist/index.js
|
|
39454
39507
|
init_errors();
|
|
39455
39508
|
|
|
@@ -39725,7 +39778,7 @@ var pageSchema = {
|
|
|
39725
39778
|
init_errors();
|
|
39726
39779
|
|
|
39727
39780
|
// src/version.ts
|
|
39728
|
-
var VERSION = "0.
|
|
39781
|
+
var VERSION = "0.2.0";
|
|
39729
39782
|
|
|
39730
39783
|
// src/client.ts
|
|
39731
39784
|
import { dirname, join } from "path";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '0.2.0'; // 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.
|
|
3
|
+
"version": "0.2.0",
|
|
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,19 +32,21 @@
|
|
|
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.
|
|
47
|
-
"@fetchproxy/server": "^2.
|
|
48
|
+
"@chrischall/mcp-utils": "^0.15.0",
|
|
49
|
+
"@fetchproxy/server": "^2.2.0",
|
|
48
50
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
49
51
|
"dotenv": "^17.4.0",
|
|
50
52
|
"zod": "^4.4.2"
|
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.
|
|
9
|
+
"version": "0.2.0",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@chrischall/eventbrite-mcp",
|
|
14
|
-
"version": "0.
|
|
14
|
+
"version": "0.2.0",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|