infinitecampus-mcp 3.2.1 → 3.2.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.
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.2.1', // x-release-please-version
59
+ version: '3.2.3', // 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.
@@ -11,7 +11,7 @@ const argsSchema = z.object({
11
11
  });
12
12
  export function registerAssignmentTools(server, client) {
13
13
  server.registerTool('ic_list_assignments', {
14
- description: "List a student's assignments. The IC endpoint returns the full term history (~hundreds of items); date and missing filters are applied client-side. For a single course, pass courseId (the sectionID from ic_get_schedule).",
14
+ description: "List a student's assignments (homework, tests and projects, with due dates and missing flags). The IC endpoint returns the full term history (~hundreds of items); date and missing filters are applied client-side. For a single course, pass courseId (the sectionID from ic_get_schedule).",
15
15
  annotations: { readOnlyHint: true, openWorldHint: true },
16
16
  inputSchema: z.object({ ...argsSchema.shape, view: viewArg() }),
17
17
  }, async (rawArgs) => {
@@ -103,9 +103,9 @@ export function registerMessageTools(server, client) {
103
103
  return viewResponse(rawArgs.view, untrustedEnvelope({ notifications, inbox, announcements }));
104
104
  });
105
105
  server.registerTool('ic_get_message', {
106
- description: "Fetch the HTML body of an inbox message and return it parsed into { subject, date, body, url }. Takes a `messageUrl` which is the `url` field from an item returned by ic_list_messages' inbox section (e.g. 'portal/messageView.xsl?x=messenger.MessengerEngine-getMessageRecipientView&messageID=...'). Relative and /campus/-prefixed URLs are both accepted. Note: fetching the HTML body may mark the message as read on some district configurations; probe against an empty inbox could not confirm the side effect. " +
106
+ description: "Fetch the HTML body of an inbox message and return it parsed into { subject, date, body, url }. Takes a `messageUrl` which is the `url` field from an item returned by ic_list_messages' inbox section (e.g. 'portal/messageView.xsl?x=messenger.MessengerEngine-getMessageRecipientView&messageID=...'). Relative and /campus/-prefixed URLs are both accepted. Fetching the body may mark the message as read in the portal (as opening it there does), so this is not a pure read. " +
107
107
  UNTRUSTED_DESCRIPTION_SUFFIX,
108
- annotations: { readOnlyHint: true, openWorldHint: true },
108
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
109
109
  inputSchema: z.object({ ...getArgs.shape, view: viewArg() }),
110
110
  }, async (rawArgs) => {
111
111
  const args = getArgs.parse(rawArgs);
package/mint.yaml CHANGED
@@ -5,6 +5,12 @@ summary: >-
5
5
  Infinite Campus (Campus Parent) MCP — single-account with CUPS
6
6
  auto-discovery. Two auth paths: IC_USERNAME/IC_PASSWORD, or sign in via
7
7
  the ContextMint Bridge browser extension.
8
+ examples:
9
+ - prompt: Does my kid have any missing assignments right now? List them by class.
10
+ note: Reads the assignment list with the missing filter.
11
+ - prompt: What grades has my student gotten back in the last two weeks?
12
+ - prompt: How many absences and tardies does my child have this term?
13
+ note: Per-course attendance summary, grouped by term.
8
14
  #
9
15
  # Hosting note (a comment, not user-facing summary text): this is a
10
16
  # BROWSER-BRIDGE MCP — it reaches its site through the user's signed-in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "infinitecampus-mcp",
3
- "version": "3.2.1",
3
+ "version": "3.2.3",
4
4
  "mcpName": "io.github.chrischall/infinitecampus-mcp",
5
5
  "description": "Infinite Campus (Campus Parent) MCP server — multi-district, read-only (plus local document download)",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -60,5 +60,9 @@
60
60
  "esbuild": "^0.28.0",
61
61
  "typescript": "^7.0.2",
62
62
  "vitest": "^5.0.0"
63
+ },
64
+ "allowScripts": {
65
+ "esbuild": false,
66
+ "fsevents": false
63
67
  }
64
68
  }
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.2.1",
9
+ "version": "3.2.3",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "infinitecampus-mcp",
14
- "version": "3.2.1",
14
+ "version": "3.2.3",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
@@ -224,5 +224,5 @@ Two tools take no `view`, both because there is nothing to project:
224
224
  ## Caution
225
225
 
226
226
  - `ic_download_document` writes to disk at `destinationPath`, only inside the download directory, and refuses to replace an existing file unless `overwrite: true` — confirm the path with the user.
227
- - `ic_list_messages` / `ic_get_message` are nominally read-only, but on some district configurations fetching an inbox message or enumerating the list may mark entries as read. Behavior was not confirmable against an empty test inbox.
227
+ - `ic_get_message` is not annotated read-only: fetching a message's body may mark it as read in the portal, as opening it there does (not yet confirmed against a live unread message). Use it only when the user asks to open a message; summarize the inbox from `ic_list_messages`.
228
228
  - Endpoint behavior varies by district. If `ic_list_behavior`, `ic_list_food_service`, `ic_list_documents`, `ic_list_assessments`, or `ic_list_fees` returns a `FeatureDisabled` warning, that module is simply turned off for the district — it's not an error. `ic_list_fees` may also return `PartialSuccess` when only one of its two sub-endpoints works.