gogcli-mcp-classroom 2.23.2 → 2.24.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": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
10
- "version": "2.23.2"
10
+ "version": "2.24.0"
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.2",
18
+ "version": "2.24.0",
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.2",
4
+ "version": "2.24.0",
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
@@ -31727,6 +31727,7 @@ function formatAuthHealth(raw, now) {
31727
31727
  // ../gogcli-mcp/src/tools/auth.ts
31728
31728
  function registerAuthToolsWith(server, defaultServices) {
31729
31729
  const servicesDescribe = `Services to authorize: "all" or comma-separated list (e.g. "sheets,gmail,calendar"). Default: "${defaultServices}". Prefer the narrowest set you need \u2014 requesting a service whose Google API is not enabled on the OAuth client's project makes Google reject the WHOLE request with invalid_scope.`;
31730
+ const extraScopesDescribe = "Additional raw OAuth scope URIs to request, comma-separated, on top of the ones `services` implies. Use for scopes no service covers \u2014 e.g. https://www.googleapis.com/auth/bigquery.readonly, required before gog_sheets_datasource_* can read BigQuery-backed Connected Sheets. Leave unset otherwise: an extra scope whose API is not enabled on the OAuth client project makes Google reject the WHOLE authorization with invalid_scope.";
31730
31731
  server.registerTool("gog_auth_list", {
31731
31732
  description: "List the Google accounts stored in gogcli, with their scopes. This reads local configuration only \u2014 it does not contact Google and does NOT tell you whether an account still works: a signed-out account whose refresh token expired or was revoked is listed here exactly like a healthy one, scopes and all. Use gog_auth_health to check whether an account can actually authenticate.",
31732
31733
  annotations: { readOnlyHint: true },
@@ -31776,11 +31777,14 @@ function registerAuthToolsWith(server, defaultServices) {
31776
31777
  annotations: { destructiveHint: true },
31777
31778
  inputSchema: {
31778
31779
  email: external_exports.string().describe("Google account email to authorize"),
31779
- services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe)
31780
+ services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe),
31781
+ extraScopes: external_exports.string().optional().describe(extraScopesDescribe)
31780
31782
  }
31781
- }, async ({ email: email3, services = defaultServices }) => {
31783
+ }, async ({ email: email3, services = defaultServices, extraScopes }) => {
31782
31784
  try {
31783
- return rawTextResult(await run(["auth", "add", email3, "--services", services], {
31785
+ const args = ["auth", "add", email3, "--services", services];
31786
+ if (extraScopes) args.push(`--extra-scopes=${extraScopes}`, "--force-consent");
31787
+ return rawTextResult(await run(args, {
31784
31788
  interactive: true,
31785
31789
  timeout: 3e5
31786
31790
  }));
@@ -31792,14 +31796,14 @@ function registerAuthToolsWith(server, defaultServices) {
31792
31796
  description: "Begin REMOTE/headless Google authorization (step 1 of 2). Returns a sign-in URL to open in any browser \u2014 no local server or terminal on the gogcli host is needed, so this works over the hosted connector where the interactive gog_auth_add cannot. Hand the URL to the user; after they sign in, the browser is redirected to a localhost URL that fails to load \u2014 that is expected. They copy that full redirected URL (from the address bar) and you pass it to gog_auth_add_complete. The link is valid for 10 minutes. If you pass a custom `services` here, pass the SAME value to gog_auth_add_complete or the second step will not match this one.",
31793
31797
  inputSchema: {
31794
31798
  email: external_exports.string().describe("Google account email to authorize"),
31795
- services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe)
31799
+ services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe),
31800
+ extraScopes: external_exports.string().optional().describe(`${extraScopesDescribe} Pass the SAME value to gog_auth_add_complete.`)
31796
31801
  }
31797
- }, async ({ email: email3, services = defaultServices }) => {
31802
+ }, async ({ email: email3, services = defaultServices, extraScopes }) => {
31798
31803
  try {
31799
- return rawTextResult(await run(
31800
- ["auth", "add", email3, "--remote", "--step", "1", "--services", services, "--force-consent"],
31801
- { redactMode: "tokens" }
31802
- ));
31804
+ const args = ["auth", "add", email3, "--remote", "--step", "1", "--services", services, "--force-consent"];
31805
+ if (extraScopes) args.push(`--extra-scopes=${extraScopes}`);
31806
+ return rawTextResult(await run(args, { redactMode: "tokens" }));
31803
31807
  } catch (err) {
31804
31808
  return errorResult(errorText(err));
31805
31809
  }
@@ -31814,25 +31818,28 @@ function registerAuthToolsWith(server, defaultServices) {
31814
31818
  ),
31815
31819
  services: external_exports.string().optional().default(defaultServices).describe(
31816
31820
  `Services authorized \u2014 MUST match the value passed to gog_auth_add_url. Default: "${defaultServices}".`
31821
+ ),
31822
+ extraScopes: external_exports.string().optional().describe(
31823
+ "Extra OAuth scope URIs \u2014 MUST match the value passed to gog_auth_add_url, for the same reason `services` must: the two steps have to describe the same grant."
31817
31824
  )
31818
31825
  }
31819
- }, async ({ email: email3, redirectUrl, services = defaultServices }) => {
31826
+ }, async ({ email: email3, redirectUrl, services = defaultServices, extraScopes }) => {
31820
31827
  try {
31821
- return rawTextResult(await run(
31822
- [
31823
- "auth",
31824
- "add",
31825
- email3,
31826
- "--remote",
31827
- "--step",
31828
- "2",
31829
- "--auth-url",
31830
- redirectUrl,
31831
- "--services",
31832
- services,
31833
- "--force-consent"
31834
- ]
31835
- ));
31828
+ const args = [
31829
+ "auth",
31830
+ "add",
31831
+ email3,
31832
+ "--remote",
31833
+ "--step",
31834
+ "2",
31835
+ "--auth-url",
31836
+ redirectUrl,
31837
+ "--services",
31838
+ services,
31839
+ "--force-consent"
31840
+ ];
31841
+ if (extraScopes) args.push(`--extra-scopes=${extraScopes}`);
31842
+ return rawTextResult(await run(args));
31836
31843
  } catch (err) {
31837
31844
  return errorResult(errorText(err));
31838
31845
  }
@@ -32245,7 +32252,7 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
32245
32252
  );
32246
32253
 
32247
32254
  // ../gogcli-mcp/src/server.ts
32248
- var VERSION = true ? "2.23.2" : "0.0.0";
32255
+ var VERSION = true ? "2.24.0" : "0.0.0";
32249
32256
 
32250
32257
  // ../gogcli-mcp/src/auth-log.ts
32251
32258
  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.2",
6
+ "version": "2.24.0",
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.2",
3
+ "version": "2.24.0",
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.2",
10
+ "version": "2.24.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp-classroom",
15
- "version": "2.23.2",
15
+ "version": "2.24.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },