infinitecampus-mcp 2.8.0 → 2.8.1
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 +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/skills/ic/SKILL.md +61 -18
|
@@ -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.8.
|
|
10
|
+
"version": "2.8.1"
|
|
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.8.
|
|
18
|
+
"version": "2.8.1",
|
|
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.8.
|
|
4
|
+
"version": "2.8.1",
|
|
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
|
@@ -39560,7 +39560,7 @@ function loadAccount(env = process.env) {
|
|
|
39560
39560
|
// package.json
|
|
39561
39561
|
var package_default = {
|
|
39562
39562
|
name: "infinitecampus-mcp",
|
|
39563
|
-
version: "2.8.
|
|
39563
|
+
version: "2.8.1",
|
|
39564
39564
|
mcpName: "io.github.chrischall/infinitecampus-mcp",
|
|
39565
39565
|
description: "Infinite Campus (Campus Parent) MCP server \u2014 multi-district read + message/document write",
|
|
39566
39566
|
author: "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -41578,7 +41578,7 @@ try {
|
|
|
41578
41578
|
}
|
|
41579
41579
|
var COMMON = {
|
|
41580
41580
|
name: "infinitecampus",
|
|
41581
|
-
version: "2.8.
|
|
41581
|
+
version: "2.8.1"
|
|
41582
41582
|
// x-release-please-version
|
|
41583
41583
|
};
|
|
41584
41584
|
var healthState = { account, source, configError, client: null };
|
package/dist/index.js
CHANGED
|
@@ -58,7 +58,7 @@ catch (e) {
|
|
|
58
58
|
// actionable stderr message (banner) instead of a crash loop.
|
|
59
59
|
const COMMON = {
|
|
60
60
|
name: 'infinitecampus',
|
|
61
|
-
version: '2.8.
|
|
61
|
+
version: '2.8.1', // x-release-please-version
|
|
62
62
|
};
|
|
63
63
|
// Shared with the healthcheck so it can report the SAME state the tools see,
|
|
64
64
|
// 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": "2.8.
|
|
3
|
+
"version": "2.8.1",
|
|
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>",
|
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.8.
|
|
9
|
+
"version": "2.8.1",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "infinitecampus-mcp",
|
|
14
|
-
"version": "2.8.
|
|
14
|
+
"version": "2.8.1",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|
package/skills/ic/SKILL.md
CHANGED
|
@@ -103,45 +103,88 @@ inexplicably. Most student-scoped tools also take `studentId` (the personID from
|
|
|
103
103
|
### Districts & Students
|
|
104
104
|
| Tool | Notes |
|
|
105
105
|
|------|-------|
|
|
106
|
-
| `ic_list_districts` | Lists configured districts (primary + any CUPS-linked). Call this first — other tools need the `district` name. |
|
|
107
|
-
| `ic_list_students(district)` | Lists students (kids) attached to the portal account for a district. Use the `personID` for `studentId` on other tools. |
|
|
106
|
+
| `ic_list_districts(view?)` | Lists configured districts (primary + any CUPS-linked). Call this first — other tools need the `district` name. |
|
|
107
|
+
| `ic_list_students(district, view?)` | Lists students (kids) attached to the portal account for a district. Use the `personID` for `studentId` on other tools. |
|
|
108
108
|
|
|
109
109
|
### Academics
|
|
110
110
|
| Tool | Notes |
|
|
111
111
|
|------|-------|
|
|
112
|
-
| `ic_get_schedule(district, studentId)` | Today's class schedule by default, with section placements. |
|
|
113
|
-
| `ic_list_assignments(district, studentId, courseId?, since?, until?, missingOnly?)` | `sectionID` is the only server-side filter; `since`/`until`/`missingOnly` are applied client-side. Pass `missingOnly=true` to see only missing/late work across all courses. |
|
|
114
|
-
| `ic_list_grades(district, studentId, termId?)` | Term + in-progress grade summary. Omit `termId` for all terms. |
|
|
115
|
-
| `ic_list_recent_grades(district, studentId, since?)` | Recently-scored assignments. Defaults to a 14-day window; pass `since` (YYYY-MM-DD) to widen. |
|
|
116
|
-
| `ic_list_assessments(district, studentId)` | Standardized test scores (state/national/district tests). FeatureDisabled-aware. |
|
|
117
|
-
| `ic_list_teachers(district, studentId)` | Teachers per enrolled section + assigned counselor(s). |
|
|
112
|
+
| `ic_get_schedule(district, studentId, view?)` | Today's class schedule by default, with section placements. |
|
|
113
|
+
| `ic_list_assignments(district, studentId, courseId?, since?, until?, missingOnly?, view?)` | `sectionID` is the only server-side filter; `since`/`until`/`missingOnly` are applied client-side. Pass `missingOnly=true` to see only missing/late work across all courses. |
|
|
114
|
+
| `ic_list_grades(district, studentId, termId?, view?)` | Term + in-progress grade summary. Omit `termId` for all terms. |
|
|
115
|
+
| `ic_list_recent_grades(district, studentId, since?, view?)` | Recently-scored assignments. Defaults to a 14-day window; pass `since` (YYYY-MM-DD) to widen. |
|
|
116
|
+
| `ic_list_assessments(district, studentId, view?)` | Standardized test scores (state/national/district tests). FeatureDisabled-aware. |
|
|
117
|
+
| `ic_list_teachers(district, studentId, view?)` | Teachers per enrolled section + assigned counselor(s). |
|
|
118
118
|
|
|
119
119
|
### Daily life
|
|
120
120
|
| Tool | Notes |
|
|
121
121
|
|------|-------|
|
|
122
|
-
| `ic_list_school_days(district, studentId)` | Instructional calendar with term boundaries. |
|
|
123
|
-
| `ic_list_attendance(district, studentId, since?, until?)` | Per-course attendance summary grouped by term. |
|
|
124
|
-
| `ic_list_attendance_events(district, studentId, since?, until?, excusedOnly?)` | Individual absence/tardy events with codes and human comments. |
|
|
125
|
-
| `ic_list_behavior(district, studentId, since?, until?)` | Returns a `FeatureDisabled` warning if the district has no behavior module enabled — this is not an error. |
|
|
126
|
-
| `ic_list_food_service(district, studentId, since?, until?)` | Lunch balance and transactions. Same `FeatureDisabled` fallback as behavior. |
|
|
127
|
-
| `ic_list_fees(district, studentId)` | Fee assignments + surplus/balance. Returns `PartialSuccess` if only one endpoint works, `FeatureDisabled` if both 404. |
|
|
122
|
+
| `ic_list_school_days(district, studentId, view?)` | Instructional calendar with term boundaries. |
|
|
123
|
+
| `ic_list_attendance(district, studentId, since?, until?, view?)` | Per-course attendance summary grouped by term. |
|
|
124
|
+
| `ic_list_attendance_events(district, studentId, since?, until?, excusedOnly?, view?)` | Individual absence/tardy events with codes and human comments. |
|
|
125
|
+
| `ic_list_behavior(district, studentId, since?, until?, view?)` | Returns a `FeatureDisabled` warning if the district has no behavior module enabled — this is not an error. |
|
|
126
|
+
| `ic_list_food_service(district, studentId, since?, until?, view?)` | Lunch balance and transactions. Same `FeatureDisabled` fallback as behavior. |
|
|
127
|
+
| `ic_list_fees(district, studentId, view?)` | Fee assignments + surplus/balance. Returns `PartialSuccess` if only one endpoint works, `FeatureDisabled` if both 404. |
|
|
128
128
|
|
|
129
129
|
### Documents
|
|
130
130
|
| Tool | Notes |
|
|
131
131
|
|------|-------|
|
|
132
|
-
| `ic_list_documents(district, studentId)` | Metadata only (report cards, schedules, transcripts). Each item has a `url` to pass to `ic_download_document`. Returns `FeatureDisabled` if the documents module is off. |
|
|
132
|
+
| `ic_list_documents(district, studentId, view?)` | Metadata only (report cards, schedules, transcripts). Each item has a `url` to pass to `ic_download_document`. Returns `FeatureDisabled` if the documents module is off. |
|
|
133
133
|
| `ic_download_document(district, url, destinationPath)` | Writes the document to `destinationPath` on disk. **`destinationPath` is required** — confirm the path with the user before calling. |
|
|
134
134
|
|
|
135
135
|
### Messaging
|
|
136
136
|
| Tool | Notes |
|
|
137
137
|
|------|-------|
|
|
138
|
-
| `ic_list_messages(district, limit?)` | Combines three sources: **prism notifications** (grade/attendance/assignment alerts), **Messenger 2.0 inbox** (teacher messages, priority announcements like closures), and **portal userNotice** (district banners). `limit` caps prism only. Per-source `error` field if one fails. |
|
|
139
|
-
| `ic_get_message(district, url)` | Fetches and parses the HTML body of an inbox message. Returns `{ subject, date, body, url }`. |
|
|
138
|
+
| `ic_list_messages(district, limit?, view?)` | Combines three sources: **prism notifications** (grade/attendance/assignment alerts), **Messenger 2.0 inbox** (teacher messages, priority announcements like closures), and **portal userNotice** (district banners). `limit` caps prism only. Per-source `error` field if one fails. |
|
|
139
|
+
| `ic_get_message(district, url, view?)` | Fetches and parses the HTML body of an inbox message. Returns `{ subject, date, body, url }`. |
|
|
140
140
|
|
|
141
141
|
### Features
|
|
142
142
|
| Tool | Notes |
|
|
143
143
|
|------|-------|
|
|
144
|
-
| `ic_get_features(district, studentId)` | Raw per-enrollment `displayOptions` flags (attendance/behavior/assessment/documents/…). Useful for diagnosing why another tool returned `FeatureDisabled`. |
|
|
144
|
+
| `ic_get_features(district, studentId, view?)` | Raw per-enrollment `displayOptions` flags (attendance/behavior/assessment/documents/…). Useful for diagnosing why another tool returned `FeatureDisabled`. |
|
|
145
|
+
|
|
146
|
+
## Response shape (`view`)
|
|
147
|
+
|
|
148
|
+
Every read tool here — 18 of the server's 20 — takes `view: "compact" | "full"`,
|
|
149
|
+
and **`compact` is the default**. You get the slim shape without asking for it;
|
|
150
|
+
the efficiency is not something a caller has to know to request.
|
|
151
|
+
|
|
152
|
+
**What compact does here is remove pictures, and nothing else.** It drops keys
|
|
153
|
+
named for an image — a student's `photo` and `thumbnailUrl`, a counselor's
|
|
154
|
+
`avatar` — and any string whose value is a bare image URL even under a key the
|
|
155
|
+
pattern has never heard of — a student record's `schoolLogo: ".../assets/logo.png"` goes for
|
|
156
|
+
that second reason. Everything else comes back verbatim, fields nobody
|
|
157
|
+
anticipated included.
|
|
158
|
+
|
|
159
|
+
**It is deliberately NOT a field projection, and that is the thing to know
|
|
160
|
+
before you reach for `full`.** In sibling servers compact means "the fields a
|
|
161
|
+
caller acts on", so `full` buys back real content. Here it does not. This server
|
|
162
|
+
hands Infinite Campus's payloads back close to verbatim and holds no verified
|
|
163
|
+
record of what those payloads contain — no captured fixture, no documented field
|
|
164
|
+
list — so nothing could honestly say which IC fields matter and which are noise.
|
|
165
|
+
Stripping media needs no such knowledge and is purely subtractive, so it cannot
|
|
166
|
+
punch a hole in a record by failing to know about a field. The consequence for
|
|
167
|
+
you: `view: "full"` returns the same record with the image URLs put back, and
|
|
168
|
+
nothing else. **If a field is missing from a compact response, `full` will not
|
|
169
|
+
produce it** — that field was not in what Infinite Campus sent.
|
|
170
|
+
|
|
171
|
+
One trim is the TOOL's, not the rung's: `ic_list_documents` reduces each
|
|
172
|
+
document to `name`, `type`, `url`, `moduleLabel` and `endYear` in its handler,
|
|
173
|
+
before any view is applied. `full` does not restore the rest of IC's document
|
|
174
|
+
record.
|
|
175
|
+
|
|
176
|
+
There is deliberately **no `raw` rung**. `full` already IS Infinite Campus's
|
|
177
|
+
payload untouched, so a third value could only silently alias it. `view: "raw"`
|
|
178
|
+
is rejected by the schema with an error rather than quietly answered in some
|
|
179
|
+
other shape.
|
|
180
|
+
|
|
181
|
+
Two tools take no `view`, both because there is nothing to project:
|
|
182
|
+
|
|
183
|
+
- **`ic_download_document`** writes a PDF to disk and returns a receipt. Its
|
|
184
|
+
product IS the document — media-stripping a tool that exists to hand you a
|
|
185
|
+
file would not shrink the answer, it would empty it.
|
|
186
|
+
- **`ic_healthcheck`** takes no arguments at all. Its answer is a fixed
|
|
187
|
+
credential-and-district verdict, already narrower than any projection.
|
|
145
188
|
|
|
146
189
|
## Workflows
|
|
147
190
|
|