---
name: iblai-connect-blackboard-learn
description: "Read and write Blackboard Learn data through the Blackboard Learn REST APIs and expose it to an ibl.ai agent as an MCP tool. Use when the user asks an agent to work with Blackboard Learn data, or to set up a Blackboard Learn MCP connection on ibl.ai."
metadata:
  kind: guide
---

# Blackboard Learn connector for AI agents

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

Blackboard Learn is Blackboard's learning management system (Original and Ultra course views). It holds courses, users, course memberships, content, assignments, gradebook columns, grades and attempts.

## Auth & conventions

- **API:** Blackboard Learn REST APIs (REST). Versioned resources under /learn/api/public/v1, v2 and v3 cover users, courses, memberships, contents, assignments, gradebook columns, grades, attempts, course copy and data sources. Most calls accept fields and expand.
- **Access:** Issued by your administrator. A developer registers an app at developer.blackboard.com for an Application ID, key and secret. Each institution's Learn admin then enables it in the REST API Integrations tool and assigns the Learn user it runs as.
- **Auth:** OAuth 2.0 client credentials; OAuth 2.0 authorization code (3LO). Two-legged: POST /learn/api/public/v1/oauth2/token with grant_type=client_credentials. Three-legged: GET /learn/api/public/v1/oauth2/authorizationcode, scopes read, write, delete, offline (offline returns a refresh token).
- **Limits:** Default developer group: 10,000 calls per 24 hours and 6 registered sites; production groups can request more. Token-bucket model returns 429 when empty; read X-Rate-Limit-Limit, X-Rate-Limit-Remaining and Retry-After.
- Keep Blackboard Learn 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

- **Courses** — GET /learn/api/public/v3/courses lists courses.
- **Course memberships** — GET /learn/api/public/v1/courses/{courseId}/users lists enrolled users and roles.
- **Gradebook columns** — GET /learn/api/public/v2/courses/{courseId}/gradebook/columns lists grade columns, including assignments.
- **Grades** — GET /learn/api/public/v2/courses/{courseId}/gradebook/columns/{columnId}/users returns each user's grade in a column.
- **Course content** — GET /learn/api/public/v1/courses/{courseId}/contents lists content items; .../contents/root returns the course root.
- **Users** — GET /learn/api/public/v1/users/{id or externalId:...} returns a user record.

## Writes

- **Grades** — PATCH /learn/api/public/v1/courses/{courseId}/gradebook/columns/{columnId}/users/{userId} sets or updates a grade. **Confirm with the user first.**
- **Assignments** — POST /learn/api/public/v1/courses/{courseId}/contents/createAssignment creates an assignment and its grade column.
- **Users** — POST /learn/api/public/v1/users creates; PATCH updates; DELETE /learn/api/public/v1/users/{id} deletes. **Confirm with the user first.**
- **Course copy** — POST /learn/api/public/v1/courses/{courseId}/copy copies a course.

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

Blackboard 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`.
   - Blackboard Learn supports per-user OAuth: `auth_type=oauth2` with `auth_scope=user` and a linked `oauth_service` makes each person connect their own account in the chat. It needs an `auth_{provider}` credential in the organization's credential store first.
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

- "List students in ENG 210 with no attempt on the midterm essay."
- "Pull every grade column for my Chemistry course into a table."
- "Create a reflection assignment worth 20 points due next Friday."
- "Show which courses I teach this term and how many students are in each."

## Guardrails

- Grades, attempts, memberships and student records held by a school are FERPA-protected education records.
- Request the narrowest Blackboard Learn 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.
- Respect the documented limits above: page through results and back off on rate-limit responses instead of retrying in a loop.

## References

- Blackboard Developer Documentation: Learn REST framework: https://docs.blackboard.com/docs/blackboard/rest-apis/getting-started/framework
- Learn REST three-legged OAuth (3LO): https://docs.blackboard.com/docs/blackboard/rest-apis/getting-started/3lo
- Developer Portal: rate and site registration limits: https://docs.blackboard.com/docs/developer-portal/production-groups-rest-api-and-site-registration-limits
- This connector on ibl.ai: https://ibl.ai/developer/connectors/blackboard-learn
- ibl.ai MCP server connections: https://ibl.ai/developer/platform/mcp/mcp-connections
