---
name: iblai-connect-anthology-reach
description: "Read and write Encoura Reach (Anthology Reach) data through the Microsoft Dataverse Web API (the Dynamics 365 platform under Reach); Reach file import/export framework and expose it to an ibl.ai agent as an MCP tool. Use when the user asks an agent to work with Encoura Reach (Anthology Reach) data, or to set up an Encoura Reach (Anthology Reach) MCP connection on ibl.ai."
metadata:
  kind: guide
---

# Encoura Reach (Anthology Reach) connector for AI agents

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

Reach is a higher-education CRM built on Microsoft Dynamics 365 for recruitment, admissions and student success. Its primary record is the Contact (the student), with applications, test scores and programs. Encoura acquired it from Anthology in 2026.

## Auth & conventions

- **API:** Microsoft Dataverse Web API (the Dynamics 365 platform under Reach); Reach file import/export framework (Mixed). Reach data sits in Dynamics 365/Dataverse tables, readable and writable through the Dataverse Web API (OData v4). Reach also ships a file import/export framework (CSV/XLSX in Azure file shares, run by Power Automate flows) used for SIS feeds.
- **Base URL:** https://{yourorg}.crm.dynamics.com/api/data/v9.2/
- **Access:** Issued by your administrator. Encoura publishes no separate Reach API reference. The institution's Dynamics 365 admin registers an app in Microsoft Entra ID and binds it to an application user with a security role; Reach admins set up file imports and exports.
- **Auth:** OAuth 2.0 via Microsoft Entra ID (delegated user); OAuth 2.0 client credentials (application user, secret or certificate). Dataverse requires OAuth with Microsoft Entra ID. Interactive apps use the user_impersonation scope; server-to-server apps use {environment-url}/.default with a client secret or certificate. Tokens last about 60 minutes.
- **Limits:** Dataverse service protection, per user per web server: 6,000 requests and 1,200 seconds of execution time in a 5-minute sliding window, and 52 concurrent requests. Over the limit returns 429 with Retry-After.
- Keep Encoura Reach (Anthology Reach) 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

- **Contacts** — The Contact is Reach's primary constituent: prospects, students and alumni, with lifecycle and inbound interest records.
- **Applications** — Application registration and application records tied to contacts and programs.
- **Test scores and programs** — Test score and program records created by Reach imports and integrations.
- **Integration logs** — Integration Log records show the status of each integration message.
- **File exports** — Admin-configured export templates write Reach data to files for other systems, such as an SIS.

## Writes

- **File import** — CSV/XLSX files in the Azure file share are processed by Power Automate flows (daily at 12:00 UTC by default) into Contact, Application and other records.
- **Create or update rows** — Dataverse Web API POST and PATCH on Reach tables, within the app user's security role.
- **Delete rows** — Dataverse Web API DELETE on Reach tables. **Confirm with the user first.**

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

Encoura 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

- "List new inquiries from the last 7 days who have not been assigned a recruiter"
- "Show this applicant's submitted applications and their programs"
- "Which contacts failed last night's import, and why?"
- "Update this contact's intended start term after I confirm"

## Guardrails

- Applicant and student records; for enrolled students these are FERPA education records. Give the Dataverse application user a security role limited to the tables a task needs.
- Request the narrowest Encoura Reach (Anthology Reach) 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

- Reach documentation hub: https://help.anthology.com/Content/DocSets/ENGDocSet.htm
- Reach file import overview: https://help.anthology.com/ENG/Content/Help/Integrations/File-Imports/File-Import-Overview.htm
- Dataverse Web API (Microsoft): https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/overview
- This connector on ibl.ai: https://ibl.ai/developer/connectors/anthology-reach
- ibl.ai MCP server connections: https://ibl.ai/developer/platform/mcp/mcp-connections
