SAS MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SAS MCPsearch my SAS account for 7th grade math materials"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.jsThe 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 |
| Configuration and mode; makes no provider request |
| Published own-account catalog; year, query and bounded pages |
| Metadata for a material discovered during this process |
| Accessible hierarchy with book/chapter provenance |
| Visible resource metadata and official reader links |
| An accessible original unencrypted PDF, saved privately with SHA-256 |
| 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
Read the school's study guide and identify year, grade, subject, collection, chapter and pages. Mark missing information as unknown.
Search SAS and compare catalog metadata and section provenance to that guide.
Download only a resource explicitly marked downloadable. Use official links for protected books. Keep originals private and respect usage permissions.
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-scriptsverify 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 toolssas_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.
| Name | Required | Description | Default |
|---|---|---|---|
| sectionId | Yes | ID returned by an earlier SAS catalog or section tool. | |
| materialId | Yes | ID returned by an earlier SAS catalog or section tool. | |
| resourceId | Yes | ID returned by an earlier SAS catalog or section tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 metadataARead-onlyIdempotent
Get metadata for a published material previously discovered by sas_search_materials. No progress, answers, submissions or activity tracking are requested.
| Name | Required | Description | Default |
|---|---|---|---|
| materialId | Yes | ID returned by an earlier SAS catalog or section tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 availabilityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| limit | No | ||
| offset | No | ||
| originKey | No | ID returned by an earlier SAS catalog or section tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 resourcesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| sectionId | Yes | ID returned by an earlier SAS catalog or section tool. | |
| materialId | Yes | ID returned by an earlier SAS catalog or section tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 chaptersARead-onlyIdempotent
List accessible book sections/chapters for a previously discovered material, with parent IDs and source provenance. Hidden or unknown visibility is excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| materialId | Yes | ID returned by an earlier SAS catalog or section tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 catalogBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| year | Yes | ||
| query | No | ||
| pageSize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 statusARead-onlyIdempotent
Show live versus synthetic offline mode, configuration and limits without a network request. Live mode does not itself prove provider access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v0.1.0- First observed
sas_download_resource - First observed
sas_get_material - First observed
sas_get_personalized_availability - First observed
sas_list_resources - First observed
sas_list_sections - First observed
sas_search_materials - First observed
sas_status
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
Read-only search and retrieval of published books, articles and authors, with public catalog links.
1Read-only access to The Family Almanac's parenting-focused book library, grounded guide metadata...
Search, read, upload and organize your private documents: receipts, contracts, tax records.
1Read-only search over Tesoro High School's public documents. Unofficial, unaffiliated.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables parents to view and manage their child's school arrival and dismissal details, including calendar, pickup changes, drivers, and school information, using the SchoolPass REST API.11193 npmMIT
- AlicenseAqualityCmaintenanceEnables 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.12MIT
- FlicenseNot gradedqualityBmaintenanceEnables authenticated clients to search and read a private EPUB cookbook catalog, retrieve source-bound citations and selected images, and activate verified immutable publications.-
- AlicenseNot gradedqualityAmaintenanceGives 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