infinitecampus-mcp 3.1.7 → 3.1.8
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 +75 -8
- package/dist/index.js +1 -1
- package/package.json +4 -4
- package/server.json +2 -2
|
@@ -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": "3.1.
|
|
10
|
+
"version": "3.1.8"
|
|
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": "3.1.
|
|
18
|
+
"version": "3.1.8",
|
|
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": "3.1.
|
|
4
|
+
"version": "3.1.8",
|
|
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
|
@@ -25604,11 +25604,23 @@ var require_websocket = __commonJS({
|
|
|
25604
25604
|
this._isServer = false;
|
|
25605
25605
|
this._redirects = 0;
|
|
25606
25606
|
if (protocols === void 0) {
|
|
25607
|
-
protocols
|
|
25607
|
+
if (!options || options.protocols === void 0) {
|
|
25608
|
+
protocols = [];
|
|
25609
|
+
} else if (Array.isArray(options.protocols)) {
|
|
25610
|
+
protocols = options.protocols;
|
|
25611
|
+
} else {
|
|
25612
|
+
protocols = [options.protocols];
|
|
25613
|
+
}
|
|
25608
25614
|
} else if (!Array.isArray(protocols)) {
|
|
25609
25615
|
if (typeof protocols === "object" && protocols !== null) {
|
|
25610
25616
|
options = protocols;
|
|
25611
|
-
protocols
|
|
25617
|
+
if (options.protocols === void 0) {
|
|
25618
|
+
protocols = [];
|
|
25619
|
+
} else if (Array.isArray(options.protocols)) {
|
|
25620
|
+
protocols = options.protocols;
|
|
25621
|
+
} else {
|
|
25622
|
+
protocols = [options.protocols];
|
|
25623
|
+
}
|
|
25612
25624
|
} else {
|
|
25613
25625
|
protocols = [protocols];
|
|
25614
25626
|
}
|
|
@@ -25805,7 +25817,6 @@ var require_websocket = __commonJS({
|
|
|
25805
25817
|
}
|
|
25806
25818
|
return;
|
|
25807
25819
|
}
|
|
25808
|
-
this._readyState = _WebSocket.CLOSING;
|
|
25809
25820
|
this._sender.close(code, data, !this._isServer, (err) => {
|
|
25810
25821
|
if (err) return;
|
|
25811
25822
|
this._closeFrameSent = true;
|
|
@@ -25813,6 +25824,7 @@ var require_websocket = __commonJS({
|
|
|
25813
25824
|
this._socket.end();
|
|
25814
25825
|
}
|
|
25815
25826
|
});
|
|
25827
|
+
this._readyState = _WebSocket.CLOSING;
|
|
25816
25828
|
setCloseTimer(this);
|
|
25817
25829
|
}
|
|
25818
25830
|
/**
|
|
@@ -26037,6 +26049,7 @@ var require_websocket = __commonJS({
|
|
|
26037
26049
|
socketPath: void 0,
|
|
26038
26050
|
hostname: void 0,
|
|
26039
26051
|
protocol: void 0,
|
|
26052
|
+
protocols: void 0,
|
|
26040
26053
|
timeout: void 0,
|
|
26041
26054
|
method: "GET",
|
|
26042
26055
|
host: void 0,
|
|
@@ -62362,6 +62375,17 @@ var KNOWN_CAPABILITIES = /* @__PURE__ */ new Set([
|
|
|
62362
62375
|
]);
|
|
62363
62376
|
var ACCOUNT_KEY_FRAME = "account-key";
|
|
62364
62377
|
var ACCOUNT_ATTEST_FRAME = "account-attest";
|
|
62378
|
+
var BRIDGE_ROLE_FRAME = "bridge-role";
|
|
62379
|
+
var BRIDGE_SERVE_FRAME = "bridge-serve";
|
|
62380
|
+
var ROOM_PING_FRAME = "room-ping";
|
|
62381
|
+
var ROOM_PONG_FRAME = "room-pong";
|
|
62382
|
+
var BRIDGE_ROLE_LABEL_MAX = 64;
|
|
62383
|
+
var ROOM_FRAME_ACCEPTS = Object.freeze({
|
|
62384
|
+
[BRIDGE_ROLE_FRAME]: BRIDGE_ROLE_FRAME,
|
|
62385
|
+
[BRIDGE_SERVE_FRAME]: BRIDGE_SERVE_FRAME,
|
|
62386
|
+
[ROOM_PING_FRAME]: ROOM_PING_FRAME,
|
|
62387
|
+
[ROOM_PONG_FRAME]: ROOM_PING_FRAME
|
|
62388
|
+
});
|
|
62365
62389
|
|
|
62366
62390
|
// node_modules/@fetchproxy/protocol/dist/mcp-id.js
|
|
62367
62391
|
var ID_RE = /^([^:]+):([^:]+):([0-9a-f]{16})$/;
|
|
@@ -63027,6 +63051,12 @@ function validateFrame(raw) {
|
|
|
63027
63051
|
return validateAccountKey(raw);
|
|
63028
63052
|
if (t === ACCOUNT_ATTEST_FRAME)
|
|
63029
63053
|
return validateAccountAttest(raw);
|
|
63054
|
+
if (t === BRIDGE_ROLE_FRAME)
|
|
63055
|
+
return validateBridgeRole(raw);
|
|
63056
|
+
if (t === BRIDGE_SERVE_FRAME || t === ROOM_PING_FRAME || t === ROOM_PONG_FRAME) {
|
|
63057
|
+
assertExactFields(raw, TYPE_ONLY_FIELDS, t);
|
|
63058
|
+
return { type: t };
|
|
63059
|
+
}
|
|
63030
63060
|
throw new ProtocolError3(`unknown frame type: ${String(t)}`);
|
|
63031
63061
|
}
|
|
63032
63062
|
function validateHello(raw) {
|
|
@@ -63352,6 +63382,43 @@ function validateAccountAttest(raw) {
|
|
|
63352
63382
|
sig: raw.sig
|
|
63353
63383
|
};
|
|
63354
63384
|
}
|
|
63385
|
+
var TYPE_ONLY_FIELDS = ["type"];
|
|
63386
|
+
var BRIDGE_ROLE_FIELDS = ["type", "role", "canServe", "serving"];
|
|
63387
|
+
var BRIDGE_ROLE_SERVING_FIELDS = ["label", "since"];
|
|
63388
|
+
function validateBridgeRole(raw) {
|
|
63389
|
+
const L = BRIDGE_ROLE_FRAME;
|
|
63390
|
+
const role = raw.role;
|
|
63391
|
+
if (role !== "serving" && role !== "standby") {
|
|
63392
|
+
throw new ProtocolError3(`${L}.role: must be one of serving, standby`);
|
|
63393
|
+
}
|
|
63394
|
+
const canServe = raw.canServe;
|
|
63395
|
+
assertBoolean(canServe, `${L}.canServe`);
|
|
63396
|
+
assertExactFields(raw, BRIDGE_ROLE_FIELDS, L);
|
|
63397
|
+
const serving = raw.serving;
|
|
63398
|
+
if (role === "serving") {
|
|
63399
|
+
if (serving !== void 0) {
|
|
63400
|
+
throw new ProtocolError3(`${L}.serving: must be absent when role is serving`);
|
|
63401
|
+
}
|
|
63402
|
+
return { type: BRIDGE_ROLE_FRAME, role, canServe };
|
|
63403
|
+
}
|
|
63404
|
+
if (serving === void 0) {
|
|
63405
|
+
throw new ProtocolError3(`${L}.serving: required when role is standby`);
|
|
63406
|
+
}
|
|
63407
|
+
assertObject(serving, `${L}.serving`);
|
|
63408
|
+
const label = serving.label;
|
|
63409
|
+
assertDisplayString(label, `${L}.serving.label`, 1, BRIDGE_ROLE_LABEL_MAX);
|
|
63410
|
+
const since = serving.since;
|
|
63411
|
+
if (typeof since !== "number" || !Number.isSafeInteger(since) || since < 0) {
|
|
63412
|
+
throw new ProtocolError3(`${L}.serving.since: expected non-negative safe integer (Unix ms)`);
|
|
63413
|
+
}
|
|
63414
|
+
assertExactFields(serving, BRIDGE_ROLE_SERVING_FIELDS, `${L}.serving`);
|
|
63415
|
+
return {
|
|
63416
|
+
type: BRIDGE_ROLE_FRAME,
|
|
63417
|
+
role,
|
|
63418
|
+
canServe,
|
|
63419
|
+
serving: { label, since }
|
|
63420
|
+
};
|
|
63421
|
+
}
|
|
63355
63422
|
function validateInnerFrame(raw) {
|
|
63356
63423
|
assertObject(raw, "inner");
|
|
63357
63424
|
const t = raw.type;
|
|
@@ -68555,7 +68622,7 @@ function resolveDownloadDir(env = process.env) {
|
|
|
68555
68622
|
// package.json
|
|
68556
68623
|
var package_default = {
|
|
68557
68624
|
name: "infinitecampus-mcp",
|
|
68558
|
-
version: "3.1.
|
|
68625
|
+
version: "3.1.8",
|
|
68559
68626
|
mcpName: "io.github.chrischall/infinitecampus-mcp",
|
|
68560
68627
|
description: "Infinite Campus (Campus Parent) MCP server \u2014 multi-district read + message/document write",
|
|
68561
68628
|
author: "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -68600,9 +68667,9 @@ var package_default = {
|
|
|
68600
68667
|
typecheck: "tsc -p tsconfig.json --noEmit"
|
|
68601
68668
|
},
|
|
68602
68669
|
dependencies: {
|
|
68603
|
-
"@chrischall/mcp-utils": "^2.
|
|
68604
|
-
"@fetchproxy/bootstrap": "^3.
|
|
68605
|
-
"@fetchproxy/server": "^3.
|
|
68670
|
+
"@chrischall/mcp-utils": "^2.15.0",
|
|
68671
|
+
"@fetchproxy/bootstrap": "^3.6.0",
|
|
68672
|
+
"@fetchproxy/server": "^3.6.0",
|
|
68606
68673
|
"@modelcontextprotocol/server": "^2.3.0",
|
|
68607
68674
|
dotenv: "^18.0.2",
|
|
68608
68675
|
"node-html-parser": "^9.0.0",
|
|
@@ -70841,7 +70908,7 @@ try {
|
|
|
70841
70908
|
}
|
|
70842
70909
|
var COMMON = {
|
|
70843
70910
|
name: "infinitecampus",
|
|
70844
|
-
version: "3.1.
|
|
70911
|
+
version: "3.1.8"
|
|
70845
70912
|
// x-release-please-version
|
|
70846
70913
|
};
|
|
70847
70914
|
var healthState = { account, source, configError, client: null };
|
package/dist/index.js
CHANGED
|
@@ -56,7 +56,7 @@ catch (e) {
|
|
|
56
56
|
// avoids — see `unconfiguredClient`.
|
|
57
57
|
const COMMON = {
|
|
58
58
|
name: 'infinitecampus',
|
|
59
|
-
version: '3.1.
|
|
59
|
+
version: '3.1.8', // x-release-please-version
|
|
60
60
|
};
|
|
61
61
|
// Shared with the healthcheck so it can report the SAME state the tools see,
|
|
62
62
|
// including on the unconfigured path where there are no tools at all.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "infinitecampus-mcp",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.8",
|
|
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>",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@chrischall/mcp-utils": "^2.
|
|
49
|
-
"@fetchproxy/bootstrap": "^3.
|
|
50
|
-
"@fetchproxy/server": "^3.
|
|
48
|
+
"@chrischall/mcp-utils": "^2.15.0",
|
|
49
|
+
"@fetchproxy/bootstrap": "^3.6.0",
|
|
50
|
+
"@fetchproxy/server": "^3.6.0",
|
|
51
51
|
"@modelcontextprotocol/server": "^2.3.0",
|
|
52
52
|
"dotenv": "^18.0.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": "3.1.
|
|
9
|
+
"version": "3.1.8",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "infinitecampus-mcp",
|
|
14
|
-
"version": "3.1.
|
|
14
|
+
"version": "3.1.8",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|