Skip to main content
Glama

FCPS School MCP

Schoology, StudentVUE, and TJHSST Ion, directly inside your AI assistant.

MIT License Node 22+ MCP

Local or self-hosted · No developer keys · No shared database · No developer-operated backend

An unofficial, open-source Model Context Protocol server for Fairfax County Public Schools students. It gives ChatGPT, desktop AI apps, and other MCP-compatible assistants live, read-only access to Schoology courses and materials plus official grades from SIS StudentVUE. TJHSST students can also connect Ion, the TJ intranet, for the bell schedule, announcements, and eighth period signups.

One command for local and remote apps

One-command setup

You need Node.js 22 or newer, an FCPS student account, and a free Vercel account. Run this in PowerShell, Command Prompt, Terminal, or any Linux shell:

npx --yes --allow-remote=all --ignore-scripts --package=https://github.com/jibberswrld/fcps-school-mcp/archive/refs/tags/v1.2.0.tar.gz fcps-school-mcp deploy

The command downloads the Vercel CLI, opens Vercel sign-in, and privately asks for your FCPS credentials once. It saves them only on your computer, configures any detected copy of Claude Desktop, Cursor, or Windsurf, creates a deployment in your Vercel account, and prints your private remote MCP URL.

Paste the printed URL into any AI app that supports adding a custom remote MCP server. Choose Streamable HTTP and No authentication if the app asks. The secret key is already part of the URL, so keep it private.

For ChatGPT, you need a plan that supports Developer mode. Enable Settings → Security → Developer mode, create a new app, choose No authentication, and paste the URL.

Your FCPS username, password, and URL key are sent directly to your Vercel project as Secret environment variables. They are not saved in this repository or sent to the project author. The deployment is dedicated to your account; there is no shared student database.

Related MCP server: Canvas LMS MCP

Local-only setup

You need Node.js 22 or newer and an existing FCPS student account. Then run this in PowerShell, Command Prompt, Terminal, or any Linux shell:

npx --yes --allow-remote=all --ignore-scripts --package=https://github.com/jibberswrld/fcps-school-mcp/archive/refs/tags/v1.2.0.tar.gz fcps-school-mcp setup

Enter your FCPS username and password when prompted. Setup then asks whether you are a TJHSST student; answer yes to add your Ion username and password, or no to skip Ion entirely. The setup command saves credentials only on your computer and automatically configures any detected copy of Claude Desktop, Cursor, or Windsurf. Restart your AI app, and fcps-school will appear as an MCP server.

That is the entire local setup. You do not need a Schoology developer key, Supabase, Vercel, Docker, or a browser session.

What it can do

  • Show current StudentVUE grades, percentages, categories, and assignment scores.

  • Report whether each Schoology assignment has been submitted, when, and whether it was late.

  • Merge official StudentVUE scores into Schoology course and assignment results.

  • List Schoology courses, assignments, due dates, calendar events, and announcements.

  • Browse nested course-material folders, pages, documents, and assignment attachments.

  • Extract readable text from Schoology PDF, DOCX, and PPTX attachments after Schoology converts them to PDF.

  • For TJHSST students with Ion connected: read the bell schedule, school announcements, eighth period blocks and activities, your own signups, and sign you up for an eighth period activity.

Available tools

Tool

Purpose

schoology_get_profile

Signed-in Schoology profile

schoology_list_sections

Courses with official StudentVUE grades

schoology_get_assignments

Assignments, submission status, attachments, and matched scores

schoology_get_materials

Course folders, pages, files, and assignments

schoology_read_document

Text from documents and assignment attachments

schoology_get_upcoming_events

Upcoming deadlines and events

schoology_get_calendar

Calendar events between two dates

schoology_get_recent_activity

Account-wide announcements and updates

schoology_get_section_updates

Updates for one course

studentvue_get_grades

Official current course marks and percentages

studentvue_get_assignments

Official assignment grades and category weights

school_check_login

Tests every login and reports exactly why one fails

TJHSST students who answered yes to the Ion question also get these tools:

Tool

Purpose

ion_get_profile

Signed-in Ion profile

ion_get_schedule

Bell schedule for a date or the next few days

ion_get_announcements

School announcements, newest first, searchable

ion_get_announcement

One announcement in full

ion_list_blocks

Eighth period blocks from a date

ion_get_block_activities

Activities offered in one block with capacity and restrictions

ion_get_my_signups

Your eighth period signups

ion_signup_eighth_period

Sign up for (or switch to) an eighth period activity. Changes real Ion state.

Submission status

Every assignment from schoology_get_assignments carries a submission object:

  • platform: "schoology" — a normal Schoology dropbox assignment. status is submitted (with submittedAt, late, revisions, and the submitted file names) or not_submitted.

  • platform: "external_tool" — the work is turned in inside an embedded tool such as Google Assignments. Schoology never records that turn-in, so status stays unknown until a grade appears.

  • platform: "assessment_v2" — a Schoology assessment. Its attempt state is not exposed by the API, so status is unknown.

Manual setup for another local MCP client

The setup command stores credentials even when it does not recognize your client. Add this stdio server entry to any client that accepts standard mcpServers configuration:

{
  "mcpServers": {
    "fcps-school": {
      "command": "npx",
      "args": [
        "--yes",
        "--allow-remote=all",
        "--ignore-scripts",
        "--package=https://github.com/jibberswrld/fcps-school-mcp/archive/refs/tags/v1.2.0.tar.gz",
        "fcps-school-mcp"
      ]
    }
  }
}

On Windows, use "command": "cmd" and put "/c", "npx" before the other arguments.

You can also skip stored credentials and provide SCHOOLOGY_USERNAME and SCHOOLOGY_PASSWORD as environment variables in your MCP client configuration.

Privacy and security

  • Local access runs only over stdio. The deploy command also creates an HTTPS remote MCP inside your own Vercel account.

  • During use, sends your FCPS credentials only to the official FCPS ForgeRock login service at aic.fcps.edu, and Ion credentials only to ion.tjhsst.edu; remote setup first stores them in your Vercel project as described above.

  • Makes read-only requests to official FCPS Schoology and StudentVUE services, plus Schoology's signed file CDN for requested attachments. The only write is ion_signup_eighth_period, which changes your own Ion eighth period signup when you ask for it.

  • Local setup stores credentials in your operating system's user configuration directory. On macOS and Linux, the file is created with 0600 permissions. A session.json cookie cache is kept next to it (also 0600) so restarting your AI client reuses the FCPS session instead of logging in again.

  • Remote setup stores credentials and the URL key as Vercel Secret environment variables and never writes them into the temporary deployment files.

  • Includes no telemetry, analytics, shared database, bundled student data, or developer-controlled backend.

  • Pauses logins for 15 minutes only when FCPS or Ion explicitly rejects the username or password (an hour when FCPS warns about a lockout). Network errors and expired sessions are retried immediately from a clean session, so a passing blip no longer blocks you.

Treat your local credential file and private MCP URL like passwords. Do not commit or share them. School data returned by the MCP is provided to the AI client you connect, so review that client's privacy terms and follow your school's technology policies.

Troubleshooting

The MCP does not appear after setup

Fully quit and reopen the MCP client. If your client was not detected, use the manual configuration above.

A tool says a login failed or is paused

Ask your assistant to run school_check_login. It tries Schoology, StudentVUE, and Ion and returns the exact reason for each failure, for example the message FCPS returned. A pause means FCPS or Ion rejected the password; re-run the setup command with the correct one. The pause is intentional because repeated FCPS login failures can lock an account.

A document has no extractable text

The file is probably a scan or image-only PDF. OCR is not included.

Remove saved credentials

Delete credentials.json and session.json from the path printed by the setup command, then remove fcps-school from your MCP client config.

Remove a remote deployment

Delete the generated fcps-school-mcp-* project from your Vercel dashboard and remove its URL from every AI app where you added it.

Development

git clone https://github.com/jibberswrld/fcps-school-mcp.git
cd fcps-school-mcp
npm install
npm test

Run npm run setup for local-only configuration, npm run deploy for local configuration plus a private remote Vercel deployment, or npm start to start the stdio server.

Scope and disclaimer

This release is intentionally FCPS-specific. Other districts use different Schoology tenants, identity providers, and StudentVUE deployments, so they are not supported by this package.

This project is unofficial and is not affiliated with or endorsed by Fairfax County Public Schools, PowerSchool/Schoology, or Edupoint/StudentVUE. Use it only with your own account and follow your school's technology policies.

License

MIT © 2026 Jabir O. Mohamed

Available Tools

11 tools
schoology_get_assignmentsC

List Schoology assignments with attachments and matched StudentVUE scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionIdNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that results are enriched with attachments and cross-matched StudentVUE scores (a real behavioral trait), but says nothing about permissions, pagination, or failure modes when no StudentVUE match exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is terse rather than structured, but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description is the only source of behavioral detail; it covers purpose and return content but omits parameter semantics and the mechanics of the Schoology/StudentVUE match. Inadequate for an integration tool with an undocumented identifier parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions sectionId. It does not explain what a section ID is, where to get one, or what happens when the parameter is omitted (it is not required), leaving a real ambiguity about whether the call is global or scoped.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) plus resource (Schoology assignments) and it hints at enrichment (attachments, matched StudentVUE scores). It does not, however, distinguish itself from the sibling studentvue_get_assignments, which an agent must choose between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this tool versus the very similar sibling studentvue_get_assignments, no prerequisites, and no exclusion conditions. The agent must infer scope from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_get_calendarC

Get Schoology calendar events between two ISO dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet it says nothing about authentication, pagination, result ordering, or what happens when start/end are omitted (0 required parameters). For a read tool with zero structured hints, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and constraints come first. It is efficient, though the brevity is partly a result of missing information rather than disciplined trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no annotations, no output schema, and no schema descriptions, the description is too thin. It leaves return shape, date-boundary semantics, default behavior for omitted parameters, and sibling differentiation entirely unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are two parameters, so the description must compensate. It does clarify the ISO date format and that the two values form a range boundary, which adds real meaning over the bare format: date fields, but it never states whether the bounds are inclusive or how optionality/defaults behave.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get'), a specific resource ('Schoology calendar events'), and a scope ('between two ISO dates'), so an agent knows exactly what it returns. It stops short of a 5 because it does not differentiate itself from the sibling schoology_get_upcoming_events, which sounds like the same capability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this over schoology_get_upcoming_events, nor any prerequisite context (e.g. authentication or section scoping). The only usage signal is the implicit date-range constraint, which is left for the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_get_materialsC

List a course's nested folders, documents, pages, and assignments.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionIdYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read, but it discloses nothing about permissions, pagination, rate limits, or whether the folders are returned recursively. The word 'nested' hints at a hierarchical structure but is not developed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the resource listed up front and no filler. It is appropriately sized, though arguably too terse given the zero documentation elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter list tool the description conveys what is returned, which is the core need. However, with no output schema, no annotations, and an undocumented parameter, it leaves the identifier meaning and any pagination/tree behavior unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single required parameter (sectionId, a numeric course-section id) is never explained in the description. The phrase 'a course's' gestures at the resource but does not clarify that the parameter is a section identifier or its expected format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb ('List') and enumerates the specific resources returned: nested folders, documents, pages, and assignments. This distinguishes it well from a bare 'get materials', but it never names a sibling like schoology_get_assignments, so an agent has to infer the boundary on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of the closely related siblings (schoology_get_assignments, schoology_read_document, schoology_list_sections). The agent must guess whether to call this or the narrower assignment/document tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_get_profileB

Get the signed-in student's Schoology profile.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure, and it discloses almost nothing: it does not state that it is read-only, that it requires an authenticated session, or what the profile payload contains. For a simple read tool this is a minor gap, but the description still adds no behavioral context beyond the verb.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource and scope front-loaded and no filler. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no annotations, and no output schema, the description is technically sufficient for an agent to invoke the tool, but it leaves the return shape and auth assumptions entirely unexplained. For a profile-read tool an extra clause about what fields are returned would complete the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case: there are no parameter semantics to document, and the description correctly implies no inputs are needed by scoping to the 'signed-in' user.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and resource ('Schoology profile') scoped to the signed-in student, so the agent knows exactly what is fetched. It does not explicitly distinguish itself from siblings like schoology_get_recent_activity or schoology_list_sections, but 'profile' is a distinct resource, so confusion is unlikely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites (e.g., being authenticated), and no reference to any alternative sibling tool. The agent must infer usage purely from the tool name and one-line purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_get_recent_activityB

Get account-wide Schoology announcements and course updates.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does not meet it. 'Get' implies a read, but the description never defines what 'recent' means (no time window), whether results are paginated or capped, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The scope qualifier and the returned content are stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter read tool with no output schema and no annotations, the description is minimally viable but leaves key ambiguities: the undefined 'recent' time window and the unspecified shape/volume of 'course updates'. No output schema exists to compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. The schema is empty and fully self-describing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb ('Get') and a specific scope ('account-wide Schoology announcements and course updates'). The word 'account-wide' implicitly distinguishes it from the sibling schoology_get_section_updates, but no sibling is named explicitly, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus schoology_get_section_updates, schoology_get_upcoming_events, or schoology_get_calendar. Scope ('account-wide') is implied but no conditions or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_get_section_updatesC

Get recent posts for one Schoology section.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionIdYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and largely fails it. 'Get' implies a read, but nothing is said about what 'recent' means (a time window? a fixed count?), pagination, ordering, or any auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. It is efficient, though the terseness contributes to the missing behavioral and usage detail rather than being a virtue on its own.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, no defined recency window, and an undocumented parameter, the definition is not complete enough for an agent to invoke it confidently. The undefined term 'recent' is the most consequential gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema supplies only the type and a numeric pattern for sectionId. The phrase 'one Schoology section' does implicitly tie the call to a single section identifier, which is marginal added meaning, but the required-ID semantics and format are not explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get recent posts' scoped to 'one Schoology section.' That is clear enough to distinguish it from list/read siblings, but it never names or contrasts a sibling such as schoology_get_recent_activity or schoology_get_materials, so differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no conditions, and no mention of alternatives. A caller cannot tell from this text whether it should use this tool or schoology_get_recent_activity for section-level posts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_get_upcoming_eventsC

Get upcoming Schoology events within 1 to 180 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses almost nothing: no read-only confirmation, no auth requirements, no note on whether events are user-scoped, section-scoped, or paginated. 'Get' weakly implies a read, but nothing beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource and constraint front-loaded and zero filler. It is efficient, though its brevity is partly the reason other dimensions are thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, one-parameter read tool with no annotations and no output schema, the description is minimally adequate but leaves open what an 'event' contains and what happens with the optional days parameter. Not misleading, but not complete enough to be confident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 0% schema description coverage, the description must compensate. 'Within 1 to 180 days' clarifies that the days parameter is a forward-looking horizon, but this value is largely mirrored by the schema's minimum/maximum, and the default behavior when days is omitted (it is optional) is left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get upcoming Schoology events') plus a temporal scope, so an agent can tell it apart from generic activity tools like get_recent_activity. However it does not differentiate itself from the sibling schoology_get_calendar, whose scope is ambiguous relative to 'upcoming events'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no indication of when this beats schoology_get_calendar, and no exclusions or prerequisites. The only guidance is the implicit 1-180 day window, which is restated from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_list_sectionsB

List enrolled Schoology sections with official StudentVUE course grades.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only listing and signals a data merge with StudentVUE grades, but it does not disclose authentication requirements, pagination behavior, rate limits, or return format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and wastes no words. It is appropriately sized for a zero-parameter listing tool, though it is terse enough that important usage context is absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives the core purpose and a hint about returned data ('sections with official StudentVUE course grades'), which is useful because no output schema exists. However, it omits usage context, authentication expectations, and any detail about the shape or volume of returned sections and grades.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the rule baseline for zero parameters is 4. The description adds no parameter information, which is acceptable because there is no input schema to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('enrolled Schoology sections') and adds that results include official StudentVUE course grades. It is clear, but it does not explicitly differentiate itself from sibling tools like studentvue_get_grades or schoology_get_section_updates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no conditions for choosing this tool over alternatives, and no mention of prerequisites. The only implied guidance is the bare 'List' operation itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schoology_read_documentC

Read text from a Schoology document or assignment attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionIdYes
documentIdYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only operation but says nothing about permission requirements, supported document formats, behavior on unsupported files, or whether it follows redirects/external links. For a content-extraction tool this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is appropriately sized, though the brevity comes at the cost of the missing detail noted in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no annotations, no output schema, and 0% parameter coverage, the description is too thin. It should at minimum clarify what 'text' is returned, what happens for unsupported formats, and how it relates to the sibling retrieval tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds nothing about the two parameters. It does not explain that sectionId scopes the document to a course section or that documentId identifies a specific attachment, nor does it clarify the numeric-string pattern constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Read text from') and resource ('Schoology document or assignment attachment'), which is clear enough for an agent to understand the operation. It does not, however, distinguish this tool from siblings like schoology_get_materials or schoology_get_assignments, which also surface document-like content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the many sibling retrieval tools (get_materials, get_assignments, get_section_updates). The agent must infer that this is for extracting text content specifically, with no stated conditions, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

studentvue_get_assignmentsC

Get official assignment grades from FCPS StudentVUE, optionally filtered by class or title.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
classIdNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It adds only that results are 'official' grades; it says nothing about authentication requirements (StudentVUE login), rate limits, or what a result contains. For a zero-annotation read tool this is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the optional filtering clause is attached directly to the main verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, no annotations, and 0% parameter description coverage, yet the description is one sentence. It omits return shape (grades, points, due dates), auth prerequisites, and query semantics — significant gaps for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. 'Filtered by class or title' loosely maps to classId and query, giving an agent a usable mental model, but it doesn't clarify that query is a title/text search nor explain the classId numeric format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Get) plus resource (assignment grades) and source system (FCPS StudentVUE), which implicitly distinguishes it from the sibling schoology_get_assignments and studentvue_get_grades. The contrast is implied via 'official FCPS StudentVUE' rather than stated explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this over schoology_get_assignments (the near-identical sibling) or over studentvue_get_grades. The 'optionally filtered' phrasing describes behavior, not context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

studentvue_get_gradesB

Get official current course marks and percentages from FCPS StudentVUE.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a safe read ('Get') and notes the source is 'official', but says nothing about authentication requirements, freshness or caching of marks, rate limits, or error behavior when the portal is unreachable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and data source come first and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It conveys the shape of the return (course marks and percentages) which partially compensates for the absent output schema, but with no annotations and no parameters, more behavioral detail about reliability or scope would be needed to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb ('Get') and resource ('current course marks and percentages') and identifies the data source (FCPS StudentVUE). It is distinguishable from the schoology_* siblings, though it does not explicitly contrast with studentvue_get_assignments, which is the closest neighbor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, prerequisites, or alternatives are stated. The agent must infer that this is the tool for marks rather than assignments purely from the resource noun.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.0.1
    • First observedschoology_get_assignments
    • First observedschoology_get_calendar
    • First observedschoology_get_materials
    • First observedschoology_get_profile
    • First observedschoology_get_recent_activity
    • First observedschoology_get_section_updates
    • First observedschoology_get_upcoming_events
    • First observedschoology_list_sections
    • First observedschoology_read_document
    • First observedstudentvue_get_assignments
    • First observedstudentvue_get_grades

TDQS

B3.4/5.0

Scored across 11 tools

Disambiguation4/5

Most tools are clearly separated by source (Schoology vs StudentVUE) and action, but schoology_get_calendar and schoology_get_upcoming_events overlap around events, and schoology_get_assignments versus schoology_get_materials can both expose assignments. The descriptions help clarify intent, but some boundary cases remain.

Naming Consistency5/5

All tool names use a consistent snake_case source_action_object pattern, with verbs like get, list, and read used predictably. The schoology_ and studentvue_ prefixes further reinforce consistency.

Tool Count5/5

Eleven tools is well within a reasonable range for a multi-source school information server. Each tool appears to cover a distinct read-oriented capability, so no obvious bloat or thinness.

Completeness4/5

The surface covers core read-only student workflows: grades, assignments, sections, materials, calendar, events, profile, and document reading. Minor gaps may exist around course-level metadata or messaging, but core needs are well represented.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers