---
name: iblai-connect-skyward
description: "Read and write Skyward data through the Skyward OneRoster API; LMS API (SMS 2.0); Qmlativ APIs via the Partner Portal and expose it to an ibl.ai agent as an MCP tool. Use when the user asks an agent to work with Skyward data, or to set up a Skyward MCP connection on ibl.ai."
metadata:
  kind: guide
---

# Skyward connector for AI agents

> A starting point maintained on ibl.ai at https://ibl.ai/developer/connectors/skyward — not part of the iblai/vibe repository. Checked against Skyward's documentation on October 20, 2026; test it against your own Skyward setup before you rely on it.

Skyward sells two K-12 student information systems, SMS 2.0 and Qmlativ, holding student and staff records, scheduling and class rosters, gradebook data and state-reporting information.

## Auth & conventions

- **API:** Skyward OneRoster API; LMS API (SMS 2.0); Qmlativ APIs via the Partner Portal (Mixed). A OneRoster API for SMS 2.0 and Qmlativ, an LMS API for SMS 2.0 grade sync, and Qmlativ data available by both API and file import/export. Also supports Ed-Fi.
- **Access:** Partner or license program. Districts contact their Skyward representative to obtain API access. Vendors not yet registered start in the Skyward Partner Portal (partners.skyward.com), which has how-to docs and a downloadable SDK.
- **Auth:** not published by Skyward. Skyward does not publish its auth scheme. Its OneRoster API is certified at 1.1, and 1EdTech notes OneRoster 1.2 replaced 1.1's OAuth 1.0a with OAuth 2.0, so expect OAuth 1.0a; confirm with Skyward.
- Keep Skyward credentials in environment variables or the ibl.ai credential store. Never print a token in chat and never commit one to a file.
- Destructive or outward-facing calls are marked **Confirm with the user first** — do.

## Reads

- **Class rosters** — Orgs, users, classes and enrollments via the OneRoster 1.1 REST provider (certified for SMS 2.0 and Qmlativ).
- **Gradebook data** — OneRoster 1.1 Gradebook Pull (certified REST Data Provider role).
- **Qmlativ records** — Skyward states all Qmlativ data is available by API and by file import/export; details are in the Partner Portal.
- **Scheduled file exports** — Scheduled import/export exchanges, e.g. exporting grades to an LMS at set times.

## Writes

- **Grade passback** — OneRoster 1.1 Gradebook Push (certified): third-party apps sync assignments and scores into the Skyward gradebook. **Confirm with the user first.**
- **LMS grade sync (SMS 2.0)** — The LMS API lets platforms such as Canvas and Schoology sync grades and assignment details into SMS 2.0. **Confirm with the user first.**

## Expose it to an ibl.ai agent (MCP)

Skyward did not publish an MCP server of its own when this skill was checked. Host a small MCP server that wraps the calls above, then register it below.

First install the ibl.ai platform skills and connect your organization (writes `IBLAI_ORG`, `IBLAI_USERNAME` and `IBLAI_API_KEY` to `.env`):

```bash
npx skills add iblai/vibe --all
# then, in your coding agent:
/iblai-api-login
```

Every call below sends `Authorization: Api-Token $IBLAI_API_KEY`.

1. **Register the server** — `POST https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME/mcp-servers/` with `name`, `url`, `transport` (`sse` | `websocket` | `streamable_http`) and `auth_type` (`none` | `token` | `oauth2`). Capture the returned `id`.
   - For an API key or service credential use `auth_type=token` with `auth_scope=platform` for one key across the organization, or scope it to a single agent for one key per agent.
2. **Create the connection** — `POST https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME/mcp-server-connections/` with `server`, `scope` (`platform` | `mentor` | `user`), `auth_type`, and either `credentials` + `authorization_scheme` or a `connected_service` id for OAuth. Credentials are masked on read; never send a masked value back.
3. **Enable it on the agent** — `GET https://api.iblai.app/dm/api/ai-mentor/orgs/$IBLAI_ORG/users/$IBLAI_USERNAME/mentors/{agent_id}/settings/`, add `mcp-tool` to `tool_slugs` and the server id to `mcp_servers`, then `PATCH` the full lists back. They are replaced, not merged.

Full reference: https://ibl.ai/developer/platform/mcp/mcp-connections and the `/iblai-api-agent-mcp` skill.

## Example prompts

- "Pull the class rosters for every 5th-grade section from Skyward"
- "Sync this week's assignment scores from our LMS into the Skyward gradebook"
- "List students added to Period 2 Biology since Monday"
- "Export the course list for next term so we can build sections in our LMS"

## Guardrails

- Student education records protected by FERPA: demographics, schedules, enrollments and grades, plus state-reporting data.
- Request the narrowest Skyward scopes or role the task needs, and prefer a read-only credential for agents that only answer questions.
- Return the fields the user asked for, not whole records; do not paste personal data into chat that the user did not request.
- Before any write, show the user exactly what will change and wait for a yes.
- Page through large result sets and back off on rate-limit responses instead of retrying in a loop.

## References

- Skyward Interoperability Integrations: https://skyward.com/products/k-12-services/integrations
- Creating Interoperable Systems in Qmlativ: https://www.skyward.com/blogs/skyward-insider/2023/february/banish-dual-data-entry-with-interoperability-in-qmlativ
- Skyward OneRoster and LMS APIs: https://www.skyward.com/blogs/skyward-insider/2021/june/reduce-data-entry-with-interoperability
- This connector on ibl.ai: https://ibl.ai/developer/connectors/skyward
- ibl.ai MCP server connections: https://ibl.ai/developer/platform/mcp/mcp-connections
