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.

Inputs: sectionId (required), materialId (required), resourceId (required). Returns: object

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.

Inputs: materialId (required). Returns: object

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.

Inputs: year (required), limit, offset, originKey. Returns: object

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.

Inputs: sectionId (required), materialId (required), limit, offset. Returns: object

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.

Inputs: materialId (required), limit, offset. Returns: object

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.

Inputs: year (required), page, query, pageSize. Returns: object

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.

Inputs: no named parameters. Returns: object

Tool Schema Changelog

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

Loading tool schema changelog…

    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 recent community 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
      B
      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