---
name: iblai-connect-slate
description: "Read and write Slate data through the Slate web services (Query-based exports, Upload Dataset imports, Configurable API) and expose it to an ibl.ai agent as an MCP tool. Use when the user asks an agent to work with Slate data, or to set up a Slate MCP connection on ibl.ai."
metadata:
  kind: guide
---

# Slate connector for AI agents

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

Slate is a CRM that colleges use for admissions and enrollment. Each institution has its own Slate database holding person and application records and the related data its staff configure; integrations are built inside Slate by that institution.

## Auth & conventions

- **API:** Slate web services (Query-based exports, Upload Dataset imports, Configurable API) (Mixed). Admins turn Query Builder queries into web service endpoints returning JSON, XML, Excel or CSV, and define source formats that accept pushed or pulled data. The Configurable API publishes read-only endpoints at /manage/service/api/{API key}/{endpoint key}.
- **Base URL:** https://{instance}/manage/service/import?cmd=load&format={format-id}
- **Access:** Issued by your administrator. There is no vendor-wide public API. Each institution's Slate administrator (Administrator All Access role) builds the endpoints and creates the service account or user token; outside parties get credentials from that institution.
- **Auth:** User token (h query parameter); HTTP Basic (service username and password); Client certificate (imports). Exports accept a generated user token in the h parameter or a username and password; Slate says to use a username when a query exposes sensitive data. Imports take Basic auth or certificate auth. Optional IP or CIDR allowlists.
- **Limits:** Exports: each database is limited to 300 requests and 300 seconds of web service processing in any 5-minute window. Upload Dataset: 50 posts per 5 minutes; most uploads process within 15 minutes. Pull imports run at most every 60 minutes.
- Keep Slate 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

- **Query web service exports** — Any Configurable Joins query an admin enables as a web service, returned as JSON, XML, Excel or CSV; reserved parameters are id, h and output.
- **Configurable API endpoints** — Read-only endpoints defined in the Slate API builder at /manage/service/api/{API key}/{endpoint key}, with custom formatting and filters.
- **Parameterized lookups** — Queries can declare custom parameters (referenced as @variable_name) so a caller can pass a value, such as an ID, at request time.
- **Scheduled export deliveries** — A query can be scheduled to push its results to an external endpoint, with optional HTTP headers for bearer or basic auth.

## Writes

- **Upload Dataset (push import)** — POST JSON to /manage/service/import?cmd=load&format={format-id}; rows map through an admin-defined source format into Slate records.
- **Scheduled pull import** — Slate pulls from a third-party URL on a schedule (minimum 60 minutes) and can POST a JSON callback after each import.

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

We could not confirm an MCP server in Technolutions' own documentation as of October 2026. 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

- "List Fall 2027 applicants whose application is complete but who have no decision yet"
- "Pull this week's new inquiries from our Slate export and count them by intended program"
- "Push today's event check-ins into Slate through our import source format"
- "How many admitted students have not yet submitted an enrollment deposit?"

## Guardrails

- Applicant and student personal data; for enrolled students these are FERPA education records. Scope each query to the fields a task needs and prefer username auth for sensitive exports.
- Request the narrowest Slate 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

- Exporting Data with Web Services: https://knowledge.technolutions.net/docs/exporting-data-with-web-services
- Importing Data with Web Services: https://knowledge.technolutions.net/docs/importing-data-with-web-services
- Configurable API: https://knowledge.technolutions.net/docs/slate-configurable-api
- This connector on ibl.ai: https://ibl.ai/developer/connectors/slate
- ibl.ai MCP server connections: https://ibl.ai/developer/platform/mcp/mcp-connections
