gogcli-mcp-classroom 2.23.0 → 2.23.2
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/index.js +78 -30
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
10
|
-
"version": "2.23.
|
|
10
|
+
"version": "2.23.2"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "gogcli (Classroom)",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
18
|
-
"version": "2.23.
|
|
18
|
+
"version": "2.23.2",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-classroom",
|
|
3
3
|
"displayName": "gogcli (Classroom)",
|
|
4
|
-
"version": "2.23.
|
|
4
|
+
"version": "2.23.2",
|
|
5
5
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/dist/index.js
CHANGED
|
@@ -31542,6 +31542,26 @@ function normalizeTimestamps(text, tz = displayTimeZone(), naiveTz = naiveSource
|
|
|
31542
31542
|
return JSON.stringify(parsed, null, detectIndent(text));
|
|
31543
31543
|
}
|
|
31544
31544
|
|
|
31545
|
+
// ../gogcli-mcp/src/pagination.ts
|
|
31546
|
+
function detectIndent2(text) {
|
|
31547
|
+
const match = /\n(\s+)\S/.exec(text);
|
|
31548
|
+
return match ? match[1].replace(/\t/g, " ").length : 0;
|
|
31549
|
+
}
|
|
31550
|
+
function stripConsumedPageToken(text) {
|
|
31551
|
+
const trimmed = text.trim();
|
|
31552
|
+
if (trimmed === "" || !trimmed.startsWith("{")) return text;
|
|
31553
|
+
let parsed;
|
|
31554
|
+
try {
|
|
31555
|
+
parsed = JSON.parse(trimmed);
|
|
31556
|
+
} catch {
|
|
31557
|
+
return text;
|
|
31558
|
+
}
|
|
31559
|
+
const obj = parsed;
|
|
31560
|
+
if (obj.nextPageToken !== "") return text;
|
|
31561
|
+
delete obj.nextPageToken;
|
|
31562
|
+
return JSON.stringify(obj, null, detectIndent2(text));
|
|
31563
|
+
}
|
|
31564
|
+
|
|
31545
31565
|
// ../gogcli-mcp/src/tools/utils.ts
|
|
31546
31566
|
var accountParam = external_exports.string().optional().describe(
|
|
31547
31567
|
"Google account email to use, e.g. you@gmail.com \u2014 must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account."
|
|
@@ -31570,9 +31590,19 @@ var ids = {
|
|
|
31570
31590
|
// People API uses fully-qualified resource names ("people/c123") not bare IDs.
|
|
31571
31591
|
person: external_exports.string().describe("Person resource name (people/...) or email")
|
|
31572
31592
|
};
|
|
31593
|
+
var pageTokenParam = external_exports.string().optional().describe(
|
|
31594
|
+
"Cursor for the NEXT page. Pass back the nextPageToken from a previous response verbatim, keeping the query and max identical: call once, then call again with pageToken=<that value>. A response with NO nextPageToken is the last page."
|
|
31595
|
+
);
|
|
31596
|
+
var pageAliasParam = external_exports.string().optional().describe(
|
|
31597
|
+
"Deprecated alias for pageToken, accepted so existing callers keep working. Use pageToken \u2014 it matches the nextPageToken field in the response."
|
|
31598
|
+
);
|
|
31599
|
+
function resolvePageToken(p) {
|
|
31600
|
+
return p.pageToken ?? p.page;
|
|
31601
|
+
}
|
|
31573
31602
|
var paginationParams = {
|
|
31574
31603
|
max: external_exports.number().int().optional().describe("Max results"),
|
|
31575
|
-
|
|
31604
|
+
pageToken: pageTokenParam,
|
|
31605
|
+
page: pageAliasParam,
|
|
31576
31606
|
all: external_exports.boolean().optional().describe("Fetch all pages")
|
|
31577
31607
|
};
|
|
31578
31608
|
function registerRunTool(server, options) {
|
|
@@ -31647,7 +31677,7 @@ ${accounts || "(none)"}${hint}`);
|
|
|
31647
31677
|
async function runOrDiagnose(args, options) {
|
|
31648
31678
|
try {
|
|
31649
31679
|
const raw = await run(args, options);
|
|
31650
|
-
return rawTextResult(options.lossless ? raw : normalizeTimestamps(raw));
|
|
31680
|
+
return rawTextResult(options.lossless ? raw : stripConsumedPageToken(normalizeTimestamps(raw)));
|
|
31651
31681
|
} catch (err) {
|
|
31652
31682
|
return diagnose(err);
|
|
31653
31683
|
}
|
|
@@ -31828,17 +31858,19 @@ function registerClassroomTools(server) {
|
|
|
31828
31858
|
teacher: external_exports.string().optional().describe("Filter by teacher user ID"),
|
|
31829
31859
|
student: external_exports.string().optional().describe("Filter by student user ID"),
|
|
31830
31860
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
31831
|
-
|
|
31861
|
+
pageToken: pageTokenParam,
|
|
31862
|
+
page: pageAliasParam,
|
|
31832
31863
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
31833
31864
|
account: accountParam
|
|
31834
31865
|
}
|
|
31835
|
-
}, async ({ state, teacher, student, max, page, all, account }) => {
|
|
31866
|
+
}, async ({ state, teacher, student, max, pageToken, page, all, account }) => {
|
|
31836
31867
|
const args = ["classroom", "courses", "list"];
|
|
31837
31868
|
if (state) args.push(`--state=${state}`);
|
|
31838
31869
|
if (teacher) args.push(`--teacher=${teacher}`);
|
|
31839
31870
|
if (student) args.push(`--student=${student}`);
|
|
31840
31871
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
31841
|
-
|
|
31872
|
+
const token = resolvePageToken({ pageToken, page });
|
|
31873
|
+
if (token) args.push(`--page=${token}`);
|
|
31842
31874
|
if (all) args.push("--all");
|
|
31843
31875
|
return runOrDiagnose(args, { account });
|
|
31844
31876
|
});
|
|
@@ -31858,14 +31890,16 @@ function registerClassroomTools(server) {
|
|
|
31858
31890
|
inputSchema: {
|
|
31859
31891
|
courseId: external_exports.string().describe("Course ID"),
|
|
31860
31892
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
31861
|
-
|
|
31893
|
+
pageToken: pageTokenParam,
|
|
31894
|
+
page: pageAliasParam,
|
|
31862
31895
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
31863
31896
|
account: accountParam
|
|
31864
31897
|
}
|
|
31865
|
-
}, async ({ courseId, max, page, all, account }) => {
|
|
31898
|
+
}, async ({ courseId, max, pageToken, page, all, account }) => {
|
|
31866
31899
|
const args = ["classroom", "students", "list", courseId];
|
|
31867
31900
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
31868
|
-
|
|
31901
|
+
const token = resolvePageToken({ pageToken, page });
|
|
31902
|
+
if (token) args.push(`--page=${token}`);
|
|
31869
31903
|
if (all) args.push("--all");
|
|
31870
31904
|
return runOrDiagnose(args, { account });
|
|
31871
31905
|
});
|
|
@@ -31886,14 +31920,16 @@ function registerClassroomTools(server) {
|
|
|
31886
31920
|
inputSchema: {
|
|
31887
31921
|
courseId: external_exports.string().describe("Course ID"),
|
|
31888
31922
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
31889
|
-
|
|
31923
|
+
pageToken: pageTokenParam,
|
|
31924
|
+
page: pageAliasParam,
|
|
31890
31925
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
31891
31926
|
account: accountParam
|
|
31892
31927
|
}
|
|
31893
|
-
}, async ({ courseId, max, page, all, account }) => {
|
|
31928
|
+
}, async ({ courseId, max, pageToken, page, all, account }) => {
|
|
31894
31929
|
const args = ["classroom", "teachers", "list", courseId];
|
|
31895
31930
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
31896
|
-
|
|
31931
|
+
const token = resolvePageToken({ pageToken, page });
|
|
31932
|
+
if (token) args.push(`--page=${token}`);
|
|
31897
31933
|
if (all) args.push("--all");
|
|
31898
31934
|
return runOrDiagnose(args, { account });
|
|
31899
31935
|
});
|
|
@@ -31916,16 +31952,18 @@ function registerClassroomTools(server) {
|
|
|
31916
31952
|
students: external_exports.boolean().optional().describe("Include students only"),
|
|
31917
31953
|
teachers: external_exports.boolean().optional().describe("Include teachers only"),
|
|
31918
31954
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
31919
|
-
|
|
31955
|
+
pageToken: pageTokenParam,
|
|
31956
|
+
page: pageAliasParam,
|
|
31920
31957
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
31921
31958
|
account: accountParam
|
|
31922
31959
|
}
|
|
31923
|
-
}, async ({ courseId, students, teachers, max, page, all, account }) => {
|
|
31960
|
+
}, async ({ courseId, students, teachers, max, pageToken, page, all, account }) => {
|
|
31924
31961
|
const args = ["classroom", "roster", courseId];
|
|
31925
31962
|
if (students) args.push("--students");
|
|
31926
31963
|
if (teachers) args.push("--teachers");
|
|
31927
31964
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
31928
|
-
|
|
31965
|
+
const token = resolvePageToken({ pageToken, page });
|
|
31966
|
+
if (token) args.push(`--page=${token}`);
|
|
31929
31967
|
if (all) args.push("--all");
|
|
31930
31968
|
return runOrDiagnose(args, { account });
|
|
31931
31969
|
});
|
|
@@ -31938,18 +31976,20 @@ function registerClassroomTools(server) {
|
|
|
31938
31976
|
topic: external_exports.string().optional().describe("Filter by topic ID"),
|
|
31939
31977
|
orderBy: external_exports.string().optional().describe('Sort order (e.g. "updateTime desc")'),
|
|
31940
31978
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
31941
|
-
|
|
31979
|
+
pageToken: pageTokenParam,
|
|
31980
|
+
page: pageAliasParam,
|
|
31942
31981
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
31943
31982
|
scanPages: external_exports.number().optional().describe("Max pages to scan when filtering"),
|
|
31944
31983
|
account: accountParam
|
|
31945
31984
|
}
|
|
31946
|
-
}, async ({ courseId, state, topic, orderBy, max, page, all, scanPages, account }) => {
|
|
31985
|
+
}, async ({ courseId, state, topic, orderBy, max, pageToken, page, all, scanPages, account }) => {
|
|
31947
31986
|
const args = ["classroom", "coursework", "list", courseId];
|
|
31948
31987
|
if (state) args.push(`--state=${state}`);
|
|
31949
31988
|
if (topic) args.push(`--topic=${topic}`);
|
|
31950
31989
|
if (orderBy) args.push(`--order-by=${orderBy}`);
|
|
31951
31990
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
31952
|
-
|
|
31991
|
+
const token = resolvePageToken({ pageToken, page });
|
|
31992
|
+
if (token) args.push(`--page=${token}`);
|
|
31953
31993
|
if (all) args.push("--all");
|
|
31954
31994
|
if (scanPages !== void 0) args.push(`--scan-pages=${scanPages}`);
|
|
31955
31995
|
return runOrDiagnose(args, { account });
|
|
@@ -31975,17 +32015,19 @@ function registerClassroomTools(server) {
|
|
|
31975
32015
|
late: external_exports.enum(["late", "not-late"]).optional().describe("Filter by late status"),
|
|
31976
32016
|
user: external_exports.string().optional().describe("Filter by student user ID"),
|
|
31977
32017
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
31978
|
-
|
|
32018
|
+
pageToken: pageTokenParam,
|
|
32019
|
+
page: pageAliasParam,
|
|
31979
32020
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
31980
32021
|
account: accountParam
|
|
31981
32022
|
}
|
|
31982
|
-
}, async ({ courseId, courseworkId, state, late: late2, user, max, page, all, account }) => {
|
|
32023
|
+
}, async ({ courseId, courseworkId, state, late: late2, user, max, pageToken, page, all, account }) => {
|
|
31983
32024
|
const args = ["classroom", "submissions", "list", courseId, courseworkId];
|
|
31984
32025
|
if (state) args.push(`--state=${state}`);
|
|
31985
32026
|
if (late2) args.push(`--late=${late2}`);
|
|
31986
32027
|
if (user) args.push(`--user=${user}`);
|
|
31987
32028
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
31988
|
-
|
|
32029
|
+
const token = resolvePageToken({ pageToken, page });
|
|
32030
|
+
if (token) args.push(`--page=${token}`);
|
|
31989
32031
|
if (all) args.push("--all");
|
|
31990
32032
|
return runOrDiagnose(args, { account });
|
|
31991
32033
|
});
|
|
@@ -32062,16 +32104,18 @@ function registerClassroomTools(server) {
|
|
|
32062
32104
|
state: external_exports.string().optional().describe("Filter by announcement state"),
|
|
32063
32105
|
orderBy: external_exports.string().optional().describe("Sort order"),
|
|
32064
32106
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
32065
|
-
|
|
32107
|
+
pageToken: pageTokenParam,
|
|
32108
|
+
page: pageAliasParam,
|
|
32066
32109
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
32067
32110
|
account: accountParam
|
|
32068
32111
|
}
|
|
32069
|
-
}, async ({ courseId, state, orderBy, max, page, all, account }) => {
|
|
32112
|
+
}, async ({ courseId, state, orderBy, max, pageToken, page, all, account }) => {
|
|
32070
32113
|
const args = ["classroom", "announcements", "list", courseId];
|
|
32071
32114
|
if (state) args.push(`--state=${state}`);
|
|
32072
32115
|
if (orderBy) args.push(`--order-by=${orderBy}`);
|
|
32073
32116
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
32074
|
-
|
|
32117
|
+
const token = resolvePageToken({ pageToken, page });
|
|
32118
|
+
if (token) args.push(`--page=${token}`);
|
|
32075
32119
|
if (all) args.push("--all");
|
|
32076
32120
|
return runOrDiagnose(args, { account });
|
|
32077
32121
|
});
|
|
@@ -32107,14 +32151,16 @@ function registerClassroomTools(server) {
|
|
|
32107
32151
|
inputSchema: {
|
|
32108
32152
|
courseId: external_exports.string().describe("Course ID"),
|
|
32109
32153
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
32110
|
-
|
|
32154
|
+
pageToken: pageTokenParam,
|
|
32155
|
+
page: pageAliasParam,
|
|
32111
32156
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
32112
32157
|
account: accountParam
|
|
32113
32158
|
}
|
|
32114
|
-
}, async ({ courseId, max, page, all, account }) => {
|
|
32159
|
+
}, async ({ courseId, max, pageToken, page, all, account }) => {
|
|
32115
32160
|
const args = ["classroom", "topics", "list", courseId];
|
|
32116
32161
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
32117
|
-
|
|
32162
|
+
const token = resolvePageToken({ pageToken, page });
|
|
32163
|
+
if (token) args.push(`--page=${token}`);
|
|
32118
32164
|
if (all) args.push("--all");
|
|
32119
32165
|
return runOrDiagnose(args, { account });
|
|
32120
32166
|
});
|
|
@@ -32136,16 +32182,18 @@ function registerClassroomTools(server) {
|
|
|
32136
32182
|
course: external_exports.string().optional().describe("Filter by course ID"),
|
|
32137
32183
|
user: external_exports.string().optional().describe("Filter by user ID"),
|
|
32138
32184
|
max: external_exports.number().optional().describe("Max results per page"),
|
|
32139
|
-
|
|
32185
|
+
pageToken: pageTokenParam,
|
|
32186
|
+
page: pageAliasParam,
|
|
32140
32187
|
all: external_exports.boolean().optional().describe("Fetch all pages"),
|
|
32141
32188
|
account: accountParam
|
|
32142
32189
|
}
|
|
32143
|
-
}, async ({ course, user, max, page, all, account }) => {
|
|
32190
|
+
}, async ({ course, user, max, pageToken, page, all, account }) => {
|
|
32144
32191
|
const args = ["classroom", "invitations", "list"];
|
|
32145
32192
|
if (course) args.push(`--course=${course}`);
|
|
32146
32193
|
if (user) args.push(`--user=${user}`);
|
|
32147
32194
|
if (max !== void 0) args.push(`--max=${max}`);
|
|
32148
|
-
|
|
32195
|
+
const token = resolvePageToken({ pageToken, page });
|
|
32196
|
+
if (token) args.push(`--page=${token}`);
|
|
32149
32197
|
if (all) args.push("--all");
|
|
32150
32198
|
return runOrDiagnose(args, { account });
|
|
32151
32199
|
});
|
|
@@ -32197,7 +32245,7 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
|
|
|
32197
32245
|
);
|
|
32198
32246
|
|
|
32199
32247
|
// ../gogcli-mcp/src/server.ts
|
|
32200
|
-
var VERSION = true ? "2.23.
|
|
32248
|
+
var VERSION = true ? "2.23.2" : "0.0.0";
|
|
32201
32249
|
|
|
32202
32250
|
// ../gogcli-mcp/src/auth-log.ts
|
|
32203
32251
|
var FAILURES = /* @__PURE__ */ new Set([
|
package/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"manifest_version": "0.3",
|
|
4
4
|
"name": "gogcli-mcp-classroom",
|
|
5
5
|
"display_name": "gogcli (Classroom)",
|
|
6
|
-
"version": "2.23.
|
|
6
|
+
"version": "2.23.2",
|
|
7
7
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Chris Hall",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-classroom",
|
|
3
|
-
"version": "2.23.
|
|
3
|
+
"version": "2.23.2",
|
|
4
4
|
"mcpName": "io.github.chrischall/gogcli-mcp-classroom",
|
|
5
5
|
"description": "Extended Google Classroom MCP server via gogcli — auth + full Classroom support",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"source": "github",
|
|
8
8
|
"subfolder": "packages/gogcli-mcp-classroom"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.23.
|
|
10
|
+
"version": "2.23.2",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "gogcli-mcp-classroom",
|
|
15
|
-
"version": "2.23.
|
|
15
|
+
"version": "2.23.2",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|