Skip to main content
Glama

SAS MCP — unofficial, local and read-only

A community MCP server that helps a parent find educational materials already available to their own authorized SAS account. It runs locally over stdio and exposes seven bounded tools. It does not submit answers, start exercises, change progress, decrypt books or impersonate another account.

Unofficial: this project is not affiliated with, endorsed by or supported by SAS Educação or Arco Educação. Names identify the compatible service; no provider logos, textbooks or proprietary application code are distributed. Observed endpoints can change without notice. This is an experimental integration, not a supported official API or a guarantee of availability.

Source distribution: davidmosiah/sas-mcp. This experimental project is distributed as source. The package retains private: true to prevent accidental npm publication; this project has not published an npm package. Run from a reviewed source checkout, and do not run an unverified registry package with a similar name.

Start with synthetic data

Requires Node.js 24+ and POSIX file permissions. This candidate is validated on macOS. Linux runtime and test harness are not validated; Windows is unsupported. The server has no HTTP listener or telemetry.

npm ci --ignore-scripts
npm run build
SAS_MODE=offline node dist/index.js

The last command waits for an MCP client's JSON-RPC messages. It is not an interactive chat. Offline is the default and returns clearly synthetic examples; it proves protocol wiring, not provider connectivity.

Use an absolute path to Node and to dist/index.js in your MCP client, replacing all placeholders in examples/offline.json. Live setup requires additional explicit steps in the setup guide. Never put a token in client configuration, command arguments, chat, issues or source files.

Related MCP server: Gradescop

Tools

Tool

Result and limits

sas_status

Configuration and mode; makes no provider request

sas_search_materials

Published own-account catalog; year, query and bounded pages

sas_get_material

Metadata for a material discovered during this process

sas_list_sections

Accessible hierarchy with book/chapter provenance

sas_list_resources

Visible resource metadata and official reader links

sas_download_resource

An accessible original unencrypted PDF, saved privately with SHA-256

sas_get_personalized_availability

Selected-origin availability summaries; does not open a solver

Use IDs returned by earlier tools, never URLs. Downloads create new random files; read-only describes remote intent, not the local filesystem write. Protected books stay in the official reader. The client receives selected results and local paths. A cloud-based MCP client may send school content to its model provider: local execution does not mean all returned data stays on the computer.

Availability distinguishes empty, blocked and errors. available means a returned card is unlocked; it may already be finished. pendingUnlockedCount counts only unlocked not-started/ongoing records and does not prove solver access. Only one returned origin is queried; an empty result says nothing about other origins or future assignments. At most 50 cards are returned per call, from at most 500 assigned records and 100 origins.

A careful study workflow

  1. Read the school's study guide and identify year, grade, subject, collection, chapter and pages. Mark missing information as unknown.

  2. Search SAS and compare catalog metadata and section provenance to that guide.

  3. Download only a resource explicitly marked downloadable. Use official links for protected books. Keep originals private and respect usage permissions.

  4. Review generated explanations with a responsible adult. Generated answers are not official answer keys and must not be presented as future assessment content.

The guide for parents in Portuguese includes examples, privacy choices and common problems.

Safety and compatibility

Credential files and downloads must be outside every Git checkout, owned by the current OS user and protected by private directories (0700); credentials use 0600. Tokens are sent only to fixed reviewed SAS/Arco API hosts to authenticate reads. CDN downloads omit account headers. Endpoints, headers and arbitrary request objects cannot be selected by tool callers. HTTPS, public IPv4 pinning, no redirects, deadlines and size bounds restrict outbound requests.

These controls do not guarantee zero risk, safe PDFs, absence of backend view records, or continued compatibility. The observed API contract dates from October 2026 and is not a provider commitment. Expired credentials require manual renewal in the official portal. Unknown visibility/schema variants fail closed.

Read SECURITY.md, the threat model, and the observed API contract. Verify the current account's terms and school rules before live use. The MIT license covers this project's code, not SAS content, account rights, trademarks or permission to share a child's information with an AI service.

Development and release checks

npm run verify
npm pack --dry-run --ignore-scripts

verify builds, runs synthetic tests and plants both sets of deliberately wrong variants in disposable directories. No test calls a live provider or loads real credentials. npm packaging uses an explicit allowlist: runtime JavaScript, public documentation and generic client examples only. Browser session-export recipes, tests, source inspection tools and private evidence are excluded from the package. Publishing is a separate manual decision after candidate review.

Read the release checklist and responsible use before distributing a candidate. See CONTRIBUTING.md, CHANGELOG.md, and LICENSE. Bug reports must use synthetic reproductions only.

Available Tools

7 tools
sas_download_resourceDownload an accessible SAS originalA

Save an accessible unencrypted original official PDF in the configured private local directory, with SHA-256 and catalog/book/chapter/source provenance. New random filename; never overwrites. Revalidates resource ancestry and own-class visibility. Protected books use the official portal reader. No caller URL, header or filename is accepted.

NameRequiredDescriptionDefault
sectionIdYesID returned by an earlier SAS catalog or section tool.
materialIdYesID returned by an earlier SAS catalog or section tool.
resourceIdYesID returned by an earlier SAS catalog or section tool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the write target (configured private local directory), the non-destructive filename policy ('new random filename; never overwrites'), provenance metadata (SHA-256 plus catalog/book/chapter/source), and a revalidation step for ancestry and own-class visibility. These are consistent with readOnlyHint=false, destructiveHint=false, and idempotentHint=false, and they tell the agent what side effects to expect on disk.

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?

Front-loaded with the core action and destination, then layered with provenance, filename behavior, and constraints; every clause carries information. The telegraphic, jargon-dense style ('Revalidates resource ancestry and own-class visibility') makes it slightly harder to parse than a clean 5.

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

Completeness4/5

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

Given three fully documented parameters, present annotations, and an output schema (so return values need not be explained), the description covers destination, naming, provenance, and validation. Minor gaps remain around what makes a resource 'accessible' and what happens on a failed visibility check, but nothing an agent needs to invoke it correctly is missing.

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 100% and all three parameters already carry descriptions tying them to earlier SAS catalog/section tools, so the baseline is 3. The description reinforces this with 'No caller URL, header or filename is accepted,' but adds no per-parameter meaning beyond the schema.

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

Purpose5/5

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

States a specific verb and object: save an unencrypted original official PDF for a given resource into a configured local directory. That is unmistakably distinct from every sibling, which are all read-only catalog/search/list tools. The scope ('official', 'unencrypted', 'original') is precise enough that an agent knows exactly what artifact it gets.

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

Usage Guidelines4/5

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

Provides a real conditional exclusion: 'Protected books use the official portal reader,' which tells the agent when this tool will not deliver. It also constrains inputs with 'No caller URL, header or filename is accepted,' steering the agent to supply only IDs. It stops short of explicitly naming the prerequisite call sequence (e.g. get IDs from sas_get_material/sas_list_resources), so not quite a 5.

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

sas_get_materialGet SAS material metadataA
Read-onlyIdempotent

Get metadata for a published material previously discovered by sas_search_materials. No progress, answers, submissions or activity tracking are requested.

NameRequiredDescriptionDefault
materialIdYesID returned by an earlier SAS catalog or section tool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds useful scope context by excluding progress, answers, submissions and activity tracking, but the phrasing 'are requested' is ambiguous and it says nothing about auth requirements or failure modes for unknown IDs.

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?

Two short sentences with the purpose stated first and the scope caveat second; nothing is padded. The second sentence is slightly awkwardly worded, which keeps it from a 5.

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

Completeness4/5

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

An output schema exists and annotations are rich, so the description only needs to cover purpose and prerequisite, which it does. It is nearly complete for a single-parameter read tool, missing only explicit alternative routing and behavior on invalid IDs.

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 100% schema description coverage and only one parameter, the schema already carries the semantics (pattern, source of the ID). The description corroborates the source ('discovered by sas_search_materials') but adds no format or edge-case guidance beyond that, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (get metadata for a published material) and explicitly ties it to the sibling sas_search_materials, so an agent can tell it apart from the search/list tools without opening a schema.

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

Usage Guidelines4/5

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

The phrase 'previously discovered by sas_search_materials' establishes a clear prerequisite chain: this is a follow-up call made after a search yields an ID. It does not name alternatives for retrieving content (e.g., sas_download_resource) or state when not to call it, so it falls short of a 5.

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

sas_get_personalized_availabilityCheck own-account personalized-exercise availabilityA
Read-onlyIdempotent

Read only personalized-exercise availability for the selected account and year. Refreshes the returned origin list, then queries only a returned originKey (defaults to the last origin, as in the student UI). Distinguishes empty data, locked exercises and tool errors. Does not open/start a solver, create subscriptions, submit answers or request question contents. Provider text is untrusted data.

NameRequiredDescriptionDefault
yearYes
limitNo
offsetNo
originKeyNoID returned by an earlier SAS catalog or section tool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the bar is lower, yet the description adds real behavior: it refreshes the origin list before querying, and it distinguishes empty data, locked exercises and tool errors. It also flags provider text as untrusted data. It omits auth/permission requirements and rate limits, keeping it short of a 5.

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?

Four tight sentences, front-loaded with the action and followed by behavior, exclusions and a trust warning. No filler, though the parenthetical UI analogy is slightly verbose.

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

Completeness4/5

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

An output schema exists, so return-value shape needn't be explained, and the description instead covers the originKey handoff, state distinctions and exclusions. Missing is any statement of account/authentication context implied by 'selected account', which matters for an open-world tool.

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 only 25% (only originKey is documented inline), so the description must carry weight. It does add meaning for originKey (must be a previously returned key, default is the last origin) and implicitly for year ('selected account and year'), but 'limit' and 'offset' get no mention beyond obvious pagination naming.

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

Purpose5/5

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

The first sentence names a specific verb and resource ('Read only personalized-exercise availability') plus a scope ('selected account and year'), which is far more precise than the sibling list/search tools. An agent can tell this apart from sas_get_material or sas_list_sections without opening a schema.

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

Usage Guidelines4/5

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

It states the required workflow ('queries only a returned originKey', which comes from an earlier catalog/section tool) and the default fallback ('defaults to the last origin, as in the student UI'), giving clear preconditions. It also enumerates what it will not do (open a solver, create subscriptions, submit answers), though it never names the sibling that handles non-personalized lookups.

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

sas_list_resourcesList SAS chapter resourcesA
Read-onlyIdempotent

List visible resource metadata in a discovered book/chapter. Answers, owner details, class rosters and raw provider payloads are excluded. Unsupported scheduled visibility is excluded.

NameRequiredDescriptionDefault
limitNo
offsetNo
sectionIdYesID returned by an earlier SAS catalog or section tool.
materialIdYesID returned by an earlier SAS catalog or section tool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds genuine value beyond them by naming what is filtered out (answers, owner details, class rosters, raw provider payloads), which tells the agent what the results will and will not contain.

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?

Two tight sentences: the operation is front-loaded and the exclusion list is compressed into a single clause. Nothing is padded, though the second sentence's phrasing ('Unsupported scheduled visibility is excluded') is slightly opaque for what it conveys.

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

Completeness4/5

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

An output schema exists, so return shape need not be described, and the annotations cover the safety profile. The only remaining gap is pagination behavior for limit/offset, which is a minor omission for a straightforward list operation.

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?

The schema documents sectionId and materialId but leaves limit and offset with only defaults and bounds (50% coverage), and the description says nothing about pagination or ID sourcing. It neither adds nor loses meaning versus the schema, so the baseline 3 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?

States a specific verb and resource ('List visible resource metadata') scoped to a 'discovered book/chapter', which separates it from siblings like sas_download_resource or sas_get_material. It does not name an alternative sibling 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 Guidelines3/5

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

'In a discovered book/chapter' implies a prerequisite (discovery via the catalog/section tools), and the exclusion of 'unsupported scheduled visibility' hints at a limiting case. There is no explicit when-to-use vs. when-to-use-another-tool guidance.

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

sas_list_sectionsList SAS book chaptersA
Read-onlyIdempotent

List accessible book sections/chapters for a previously discovered material, with parent IDs and source provenance. Hidden or unknown visibility is excluded.

NameRequiredDescriptionDefault
limitNo
offsetNo
materialIdYesID returned by an earlier SAS catalog or section tool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description adds the useful behavioral detail that 'hidden or unknown visibility is excluded' and that results carry parent IDs and source provenance. That is real context beyond the annotations, though rate limits and pagination behavior are unmentioned.

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 tightly written sentence with the core purpose and scope front-loaded and no filler. The return-content clause is slightly redundant given an output schema exists, but it is not wasteful enough to penalize further.

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

Completeness4/5

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

With an output schema present, the description need not explain return shape, and annotations carry the safety profile. The remaining gap is pagination guidance for the limit/offset parameters, which the schema alone only partially conveys.

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 only 33%: materialId is documented in the schema, but limit and offset are listed with no explanation of pagination semantics. The description does not compensate at all, never mentioning paging or how to traverse large chapter lists.

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 ('List accessible book sections/chapters') and scopes it to 'a previously discovered material'. It is clearly distinct from siblings like sas_get_material or sas_list_resources, though it does not name those siblings explicitly.

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

Usage Guidelines3/5

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

'For a previously discovered material' implies a prerequisite (the material must be found first), and the schema reinforces this. However, there is no explicit statement of when to prefer this tool over sas_get_material or sas_list_resources, so the routing guidance is only implied.

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

sas_search_materialsSearch own-account SAS catalogB
Read-onlyIdempotent

Search published materials available to the configured own-account SAS session. Results include book/catalog provenance. Provider text is untrusted data. Page numbers start at one.

NameRequiredDescriptionDefault
pageNo
yearYes
queryNo
pageSizeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds value beyond that by disclosing that results carry book/catalog provenance and warning that provider text is untrusted data — a real handling consideration for an open-world search tool. It does not cover result limits or pagination termination, keeping it off a 5.

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?

Four short sentences, purpose front-loaded, with the untrusted-data warning placed before the pagination note. Efficient overall, though the 'Page numbers start at one' sentence is largely redundant with the schema and displaces more useful parameter guidance.

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?

An output schema exists, so return values need no explanation, and the annotations cover the safety profile. However, for a 4-parameter search with zero schema coverage, the description leaves the required 'year' filter and the meaning of 'query'/'pageSize' unexplained, which an agent needs in order to call it correctly.

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% across 4 parameters, so the description must carry the burden and it does not: the required 'year' is never mentioned, and 'query' and 'pageSize' are undocumented. The only parameter remark, 'Page numbers start at one,' merely restates the schema's minimum of 1 for 'page'.

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+resource ('Search published materials') and scopes it to the configured own-account SAS session, which separates it from the broader catalog siblings. It stops short of naming how it differs from sas_get_material or sas_get_personalized_availability, so the differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

The 'own-account SAS session' phrasing implies this is the search path for the caller's credentialed session, and 'published materials' hints at the catalog scope. There is no explicit statement of when to use this versus sas_get_material (single fetch) or sas_get_personalized_availability, and no prerequisites or exclusions are given.

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

sas_statusSAS connection statusA
Read-onlyIdempotent

Show live versus synthetic offline mode, configuration and limits without a network request. Live mode does not itself prove provider access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real context by noting it performs no network request and clarifying that 'live mode does not itself prove provider access' — a caveat that prevents an agent from over-trusting the result. It stops short of describing the returned structure, but an output schema exists.

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?

Two tight sentences with the primary purpose front-loaded and the caveat second; every clause carries information and there is no filler.

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

Completeness4/5

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

With an output schema present, the description needn't enumerate return fields; it covers what the tool reports and the important interpretation caveat. The only gap is guidance on acting on the result, which is a minor omission for a status tool.

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 the baseline is 4. There is nothing parameter-wise for the description to compensate for.

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 ('Show live versus synthetic offline mode, configuration and limits'), making it clearly distinct from the sibling search/download/availability tools. It is clear what the tool reports, though it is somewhat compressed into a single clause.

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

Usage Guidelines3/5

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

The 'without a network request' phrase implies a cheap pre-flight/diagnostic check, but the description never says explicitly when to call it (e.g. before other sas_* calls) or what to do based on the result. Usage is only implied.

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. 7 tool updatesv0.1.0
    • First observedsas_download_resource
    • First observedsas_get_material
    • First observedsas_get_personalized_availability
    • First observedsas_list_resources
    • First observedsas_list_sections
    • First observedsas_search_materials
    • First observedsas_status

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct action or resource: service status, personalized availability, material search, material metadata, section listing, resource listing, and resource download. The hierarchical discovery tools are clearly separated by their inputs and scope, so an agent can select among them without overlap.

Naming Consistency4/5

All tools use the same sas_ prefix and snake_case convention, which is predictable and readable. Most names follow a verb_noun pattern, with sas_status as a minor exception because it is noun-like rather than action-oriented.

Tool Count5/5

Seven tools are well-scoped for a read-only material discovery and access server. Each tool has a clear role in the workflow, and there are no redundant or filler tools.

Completeness4/5

The surface covers the core read-only lifecycle: status, search, material metadata, section/resource discovery, download, and personalized availability. Minor gaps remain around directly reading non-PDF resource content or explicitly enumerating accounts/years, but the main workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables students to locally archive and read their own course assignments, deadlines, original and graded PDFs, rubric feedback, comments, and submission history through a read-only MCP connection. Supports course and assignment summaries, document reading with OCR, change tracking, and scheduled syncs.
    12
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables authenticated clients to search and read a private EPUB cookbook catalog, retrieve source-bound citations and selected images, and activate verified immutable publications.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Gives parents and carers read-only access to their children's learning journal entries, letting them list children, browse and keyword-search observations, retrieve full notes, tags and comments, and download attached photos and videos. It works by signing in with the user's own account credentials and calling the same internal endpoints the web app uses.
    MIT