infinitecampus-mcp 2.5.1 → 2.6.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.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "MCP server for Infinite Campus (Campus Parent) — grades, attendance, assignments, messages, documents",
10
- "version": "2.5.1"
10
+ "version": "2.6.0"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Infinite Campus",
16
16
  "source": "./",
17
17
  "description": "Infinite Campus (Campus Parent) MCP server for Claude — grades, attendance, assignments, messages, and documents via natural language",
18
- "version": "2.5.1",
18
+ "version": "2.6.0",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "infinitecampus-mcp",
3
3
  "displayName": "Infinite Campus",
4
- "version": "2.5.1",
4
+ "version": "2.6.0",
5
5
  "description": "Infinite Campus (Campus Parent) MCP server for Claude — grades, attendance, assignments, messages, and documents",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/bundle.js CHANGED
@@ -3314,8 +3314,8 @@ var require_utils = __commonJS({
3314
3314
  var HOST_DELIMS = { "@": "%40", "/": "%2F", "?": "%3F", "#": "%23", ":": "%3A" };
3315
3315
  var HOST_DELIM_RE = /[@/?#:]/g;
3316
3316
  var HOST_DELIM_NO_COLON_RE = /[@/?#]/g;
3317
- function reescapeHostDelimiters(host, isIP) {
3318
- const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
3317
+ function reescapeHostDelimiters(host, isIP2) {
3318
+ const re = isIP2 ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
3319
3319
  re.lastIndex = 0;
3320
3320
  return host.replace(re, (ch) => HOST_DELIMS[ch]);
3321
3321
  }
@@ -3804,7 +3804,7 @@ var require_fast_uri = __commonJS({
3804
3804
  fragment: void 0
3805
3805
  };
3806
3806
  let malformedAuthorityOrPort = false;
3807
- let isIP = false;
3807
+ let isIP2 = false;
3808
3808
  if (options.reference === "suffix") {
3809
3809
  if (options.scheme) {
3810
3810
  uri = options.scheme + ":" + uri;
@@ -3853,9 +3853,9 @@ var require_fast_uri = __commonJS({
3853
3853
  if (ipv4result === false) {
3854
3854
  const ipv6result = normalizeIPv6(parsed.host);
3855
3855
  parsed.host = ipv6result.host.toLowerCase();
3856
- isIP = ipv6result.isIPV6;
3856
+ isIP2 = ipv6result.isIPV6;
3857
3857
  } else {
3858
- isIP = true;
3858
+ isIP2 = true;
3859
3859
  }
3860
3860
  }
3861
3861
  if (parsed.scheme === void 0 && parsed.userinfo === void 0 && parsed.host === void 0 && parsed.port === void 0 && parsed.query === void 0 && !parsed.path) {
@@ -3872,7 +3872,7 @@ var require_fast_uri = __commonJS({
3872
3872
  }
3873
3873
  const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
3874
3874
  if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
3875
- if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
3875
+ if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP2 === false && nonSimpleDomain(parsed.host)) {
3876
3876
  try {
3877
3877
  parsed.host = new URL("http://" + parsed.host).hostname;
3878
3878
  } catch (e) {
@@ -3886,7 +3886,7 @@ var require_fast_uri = __commonJS({
3886
3886
  parsed.scheme = unescape(parsed.scheme);
3887
3887
  }
3888
3888
  if (parsed.host !== void 0) {
3889
- parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP);
3889
+ parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP2);
3890
3890
  }
3891
3891
  }
3892
3892
  if (parsed.path) {
@@ -7199,7 +7199,7 @@ var require_permessage_deflate = __commonJS({
7199
7199
  acceptAsServer(offers) {
7200
7200
  const opts = this._options;
7201
7201
  const accepted = offers.find((params) => {
7202
- 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) {
7202
+ 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)) {
7203
7203
  return false;
7204
7204
  }
7205
7205
  return true;
@@ -36959,6 +36959,7 @@ function classifyBridgeError(err) {
36959
36959
  }
36960
36960
 
36961
36961
  // node_modules/@fetchproxy/server/dist/ws-server.js
36962
+ import { isIP } from "node:net";
36962
36963
  function envWsPort() {
36963
36964
  const raw = process.env.FETCHPROXY_WS_PORT;
36964
36965
  if (raw === void 0 || raw.trim() === "")
@@ -36970,6 +36971,15 @@ function envWsPort() {
36970
36971
  return void 0;
36971
36972
  return port;
36972
36973
  }
36974
+ function envWsHost() {
36975
+ const raw = process.env.FETCHPROXY_WS_HOST;
36976
+ if (raw === void 0)
36977
+ return void 0;
36978
+ const host = raw.trim();
36979
+ if (host === "" || isIP(host) === 0)
36980
+ return void 0;
36981
+ return host;
36982
+ }
36973
36983
  var FetchproxyProtocolError = class extends Error {
36974
36984
  constructor(message) {
36975
36985
  super(message);
@@ -37218,7 +37228,7 @@ var FetchproxyServer = class {
37218
37228
  }
37219
37229
  this.opts = {
37220
37230
  port: opts.port ?? envWsPort() ?? 37149,
37221
- host: opts.host ?? "127.0.0.1",
37231
+ host: opts.host ?? envWsHost() ?? "127.0.0.1",
37222
37232
  serverName: opts.serverName,
37223
37233
  version: opts.version,
37224
37234
  domains: [...opts.domains],
@@ -37504,6 +37514,7 @@ var FetchproxyServer = class {
37504
37514
  return {
37505
37515
  role: this.role,
37506
37516
  port: this.opts.port,
37517
+ host: this.opts.host,
37507
37518
  serverVersion: this.opts.version,
37508
37519
  fetchTimeoutMs: this.opts.fetchTimeoutMs ?? 0,
37509
37520
  bridgeReviveDelayMs: this.opts.bridgeReviveDelayMs ?? 0,
@@ -39045,7 +39056,7 @@ function loadAccount(env = process.env) {
39045
39056
  // package.json
39046
39057
  var package_default = {
39047
39058
  name: "infinitecampus-mcp",
39048
- version: "2.5.1",
39059
+ version: "2.6.0",
39049
39060
  mcpName: "io.github.chrischall/infinitecampus-mcp",
39050
39061
  description: "Infinite Campus (Campus Parent) MCP server \u2014 multi-district read + message/document write",
39051
39062
  author: "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -39091,8 +39102,8 @@ var package_default = {
39091
39102
  },
39092
39103
  dependencies: {
39093
39104
  "@chrischall/mcp-utils": "^0.18.0",
39094
- "@fetchproxy/bootstrap": "^2.0.0",
39095
- "@fetchproxy/server": "^2.0.0",
39105
+ "@fetchproxy/bootstrap": "^2.2.0",
39106
+ "@fetchproxy/server": "^2.2.0",
39096
39107
  "@modelcontextprotocol/sdk": "^1.29.0",
39097
39108
  dotenv: "^17.4.2",
39098
39109
  "node-html-parser": "^9.0.0",
@@ -41007,7 +41018,7 @@ try {
41007
41018
  }
41008
41019
  var COMMON = {
41009
41020
  name: "infinitecampus",
41010
- version: "2.5.1"
41021
+ version: "2.6.0"
41011
41022
  // x-release-please-version
41012
41023
  };
41013
41024
  if (account) {
package/dist/index.js CHANGED
@@ -57,7 +57,7 @@ catch (e) {
57
57
  // actionable stderr message (banner) instead of a crash loop.
58
58
  const COMMON = {
59
59
  name: 'infinitecampus',
60
- version: '2.5.1', // x-release-please-version
60
+ version: '2.6.0', // x-release-please-version
61
61
  };
62
62
  if (account) {
63
63
  const client = new ICClient(account, { refreshSession });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "infinitecampus-mcp",
3
- "version": "2.5.1",
3
+ "version": "2.6.0",
4
4
  "mcpName": "io.github.chrischall/infinitecampus-mcp",
5
5
  "description": "Infinite Campus (Campus Parent) MCP server — multi-district read + message/document write",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -46,8 +46,8 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@chrischall/mcp-utils": "^0.18.0",
49
- "@fetchproxy/bootstrap": "^2.0.0",
50
- "@fetchproxy/server": "^2.0.0",
49
+ "@fetchproxy/bootstrap": "^2.2.0",
50
+ "@fetchproxy/server": "^2.2.0",
51
51
  "@modelcontextprotocol/sdk": "^1.29.0",
52
52
  "dotenv": "^17.4.2",
53
53
  "node-html-parser": "^9.0.0",
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/chrischall/infinitecampus-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "2.5.1",
9
+ "version": "2.6.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "infinitecampus-mcp",
14
- "version": "2.5.1",
14
+ "version": "2.6.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },