untappd-mcp 1.8.1 → 1.8.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 Untappd — beers, breweries, venues, check-ins, wishlists, and your friend feed",
10
- "version": "1.8.1"
10
+ "version": "1.8.3"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Untappd",
16
16
  "source": "./",
17
17
  "description": "MCP server for Untappd — search beers/breweries/venues, read profiles/check-ins/wishlists, and post check-ins, toasts, and comments",
18
- "version": "1.8.1",
18
+ "version": "1.8.3",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "untappd-mcp",
3
3
  "displayName": "Untappd",
4
- "version": "1.8.1",
4
+ "version": "1.8.3",
5
5
  "description": "MCP server for Untappd — search beers/breweries/venues, read check-ins and wishlists, and post check-ins, toasts, and comments",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/bundle.js CHANGED
@@ -3644,7 +3644,12 @@ var require_fast_uri = __commonJS({
3644
3644
  }
3645
3645
  function resolve(baseURI, relativeURI, options) {
3646
3646
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
3647
- const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
3647
+ const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions);
3648
+ const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions);
3649
+ if (baseMalformed || relativeMalformed) {
3650
+ throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
3651
+ }
3652
+ const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
3648
3653
  schemelessOptions.skipEscape = true;
3649
3654
  return serialize(resolved, schemelessOptions);
3650
3655
  }
@@ -3770,6 +3775,7 @@ var require_fast_uri = __commonJS({
3770
3775
  }
3771
3776
  var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
3772
3777
  var AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\/\/([^/?#]*)/;
3778
+ var AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;
3773
3779
  function getParseError(parsed, matches) {
3774
3780
  if (matches[2] !== void 0 && parsed.path && parsed.path[0] !== "/") {
3775
3781
  return 'URI path must start with "/" when authority is present.';
@@ -3804,6 +3810,20 @@ var require_fast_uri = __commonJS({
3804
3810
  parsed.error = "URI authority must not contain a literal backslash.";
3805
3811
  malformedAuthorityOrPort = true;
3806
3812
  }
3813
+ const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION);
3814
+ if (introducerMatch !== null) {
3815
+ const region = introducerMatch[1];
3816
+ const normalizedRegion = region.replace(/[\t\n\r]/g, "");
3817
+ if (normalizedRegion.length >= 2) {
3818
+ if (normalizedRegion.slice(0, 2) !== "//") {
3819
+ parsed.error = parsed.error || "URI authority must not contain a literal backslash.";
3820
+ malformedAuthorityOrPort = true;
3821
+ } else if (region.length !== normalizedRegion.length) {
3822
+ parsed.error = parsed.error || "URI authority introducer must not contain whitespace.";
3823
+ malformedAuthorityOrPort = true;
3824
+ }
3825
+ }
3826
+ }
3807
3827
  const matches = uri.match(URI_PARSE);
3808
3828
  if (matches) {
3809
3829
  parsed.scheme = matches[1];
@@ -23048,17 +23068,33 @@ function normalizeObjectSchema(schema) {
23048
23068
  }
23049
23069
  return void 0;
23050
23070
  }
23071
+ function getDotPath(path) {
23072
+ if (path.length === 0) {
23073
+ return "object root";
23074
+ }
23075
+ return path.reduce((acc, seg, index) => {
23076
+ if (index === 0) {
23077
+ return String(seg);
23078
+ }
23079
+ if (typeof seg === "number") {
23080
+ return `${acc}[${seg}]`;
23081
+ }
23082
+ return `${acc}.${seg}`;
23083
+ }, "");
23084
+ }
23051
23085
  function getParseErrorMessage(error51) {
23052
23086
  if (error51 && typeof error51 === "object") {
23087
+ if ("issues" in error51 && Array.isArray(error51.issues) && error51.issues.length > 0) {
23088
+ return error51.issues.map((i) => {
23089
+ if (!i.path?.length) {
23090
+ return i.message;
23091
+ }
23092
+ return `${i.message} at ${getDotPath(i.path)}`;
23093
+ }).join("\n");
23094
+ }
23053
23095
  if ("message" in error51 && typeof error51.message === "string") {
23054
23096
  return error51.message;
23055
23097
  }
23056
- if ("issues" in error51 && Array.isArray(error51.issues) && error51.issues.length > 0) {
23057
- const firstIssue = error51.issues[0];
23058
- if (firstIssue && typeof firstIssue === "object" && "message" in firstIssue) {
23059
- return String(firstIssue.message);
23060
- }
23061
- }
23062
23098
  try {
23063
23099
  return JSON.stringify(error51);
23064
23100
  } catch {
@@ -29673,16 +29709,7 @@ var Server = class extends Protocol {
29673
29709
  if (!methodSchema) {
29674
29710
  throw new Error("Schema is missing a method literal");
29675
29711
  }
29676
- let methodValue;
29677
- if (isZ4Schema(methodSchema)) {
29678
- const v4Schema = methodSchema;
29679
- const v4Def = v4Schema._zod?.def;
29680
- methodValue = v4Def?.value ?? v4Schema.value;
29681
- } else {
29682
- const v3Schema = methodSchema;
29683
- const legacyDef = v3Schema._def;
29684
- methodValue = legacyDef?.value ?? v3Schema.value;
29685
- }
29712
+ const methodValue = getLiteralValue(methodSchema);
29686
29713
  if (typeof methodValue !== "string") {
29687
29714
  throw new Error("Schema method literal must be a string");
29688
29715
  }
@@ -30870,8 +30897,17 @@ var EMPTY_COMPLETION_RESULT = {
30870
30897
  import process3 from "node:process";
30871
30898
 
30872
30899
  // node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
30900
+ var STDIO_DEFAULT_MAX_BUFFER_SIZE = 10 * 1024 * 1024;
30873
30901
  var ReadBuffer = class {
30902
+ constructor(options) {
30903
+ this._maxBufferSize = options?.maxBufferSize ?? STDIO_DEFAULT_MAX_BUFFER_SIZE;
30904
+ }
30874
30905
  append(chunk) {
30906
+ const newSize = (this._buffer?.length ?? 0) + chunk.length;
30907
+ if (newSize > this._maxBufferSize) {
30908
+ this.clear();
30909
+ throw new Error(`ReadBuffer exceeded maximum size of ${this._maxBufferSize} bytes`);
30910
+ }
30875
30911
  this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
30876
30912
  }
30877
30913
  readMessage() {
@@ -30899,18 +30935,24 @@ function serializeMessage(message) {
30899
30935
 
30900
30936
  // node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
30901
30937
  var StdioServerTransport = class {
30902
- constructor(_stdin = process3.stdin, _stdout = process3.stdout) {
30938
+ constructor(_stdin = process3.stdin, _stdout = process3.stdout, options) {
30903
30939
  this._stdin = _stdin;
30904
30940
  this._stdout = _stdout;
30905
- this._readBuffer = new ReadBuffer();
30906
30941
  this._started = false;
30907
30942
  this._ondata = (chunk) => {
30908
- this._readBuffer.append(chunk);
30909
- this.processReadBuffer();
30943
+ try {
30944
+ this._readBuffer.append(chunk);
30945
+ this.processReadBuffer();
30946
+ } catch (error51) {
30947
+ this.onerror?.(error51);
30948
+ this.close().catch(() => {
30949
+ });
30950
+ }
30910
30951
  };
30911
30952
  this._onerror = (error51) => {
30912
30953
  this.onerror?.(error51);
30913
30954
  };
30955
+ this._readBuffer = new ReadBuffer({ maxBufferSize: options?.maxBufferSize });
30914
30956
  }
30915
30957
  /**
30916
30958
  * Starts listening for messages on stdin.
@@ -31190,7 +31232,7 @@ function toolAnnotations(opts = {}) {
31190
31232
  }
31191
31233
 
31192
31234
  // src/version.ts
31193
- var VERSION = "1.8.1";
31235
+ var VERSION = "1.8.3";
31194
31236
 
31195
31237
  // src/client.ts
31196
31238
  import { dirname, join } from "path";
package/dist/version.js CHANGED
@@ -3,4 +3,4 @@
3
3
  // json's `extra-files`), and `versionSyncTest` guards that it stays equal to
4
4
  // package.json. Import VERSION wherever the version is needed rather than
5
5
  // re-declaring it.
6
- export const VERSION = '1.8.1'; // x-release-please-version
6
+ export const VERSION = '1.8.3'; // x-release-please-version
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "untappd-mcp",
3
- "version": "1.8.1",
3
+ "version": "1.8.3",
4
4
  "mcpName": "io.github.chrischall/untappd-mcp",
5
5
  "description": "Untappd MCP server for Claude — developed and maintained by AI (Claude Code)",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "devDependencies": {
53
53
  "@chrischall/mcp-connector": "^1.1.1",
54
- "@cloudflare/vitest-pool-workers": "^0.18.4",
54
+ "@cloudflare/vitest-pool-workers": "^0.19.0",
55
55
  "@cloudflare/workers-oauth-provider": "^0.8.1",
56
56
  "@cloudflare/workers-types": "^5.20260708.1",
57
57
  "@types/node": "^26.1.1",
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/chrischall/untappd-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "1.8.1",
9
+ "version": "1.8.3",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "untappd-mcp",
14
- "version": "1.8.1",
14
+ "version": "1.8.3",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },