---
name: iblai-connect-granicus
description: "Read and write Granicus govDelivery data through the Communications Cloud (govDelivery) API; Targeted Messaging (TMS) API and expose it to an ibl.ai agent as an MCP tool. Use when the user asks an agent to work with Granicus govDelivery data, or to set up a Granicus govDelivery MCP connection on ibl.ai."
metadata:
  kind: guide
---

# Granicus govDelivery connector for AI agents

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

govDelivery (Communications Cloud) is Granicus's email and SMS platform for agencies. It stores subscribers, their topic subscriptions, categories and the bulletins sent to them.

## Auth & conventions

- **API:** Communications Cloud (govDelivery) API; Targeted Messaging (TMS) API (REST). Manages subscribers, topic subscriptions, categories and bulletins: create, schedule or send bulletins to topics and list sent bulletins. Payloads in the v1 API are XML. TMS sends and tracks email, SMS and voice.
- **Base URL:** https://api.govdelivery.com/api/account/{ACCOUNT_CODE}/ (staging: https://stage-api.govdelivery.com/)
- **Access:** Issued by your administrator. Existing customers request API access from Granicus Customer Support (support@granicus.com), which provides credentials, an authorization token and a development environment. The account code comes from the admin interface.
- **Auth:** HTTP Basic authentication. The v1 API uses basic HTTP authentication with secure login credentials that have the needed govDelivery administrator permissions. Granicus support also issues an authorization token on request.
- Keep Granicus govDelivery 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

- **Subscribers** — Subscriber information resources: list subscribers and their details.
- **Subscriber topic subscriptions** — Which topics and categories a subscriber follows.
- **Sent bulletins** — List sent bulletins for the account.
- **Topics and categories** — Topic and category resources used to target bulletins.

## Writes

- **Send bulletin now** — POST /api/account/{ACCOUNT_CODE}/bulletins/send_now sends immediately to subscribers of the listed topics. **Confirm with the user first.**
- **Draft bulletin** — POST /api/account/{ACCOUNT_CODE}/bulletins.xml saves a draft for administrator review.
- **Add subscription** — Adds topic subscriptions to a subscriber, creating the subscriber if needed.
- **Delete subscription or subscriber** — Removes topic subscriptions or deletes a subscriber record. **Confirm with the user first.**

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

Granicus 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

- "Draft a bulletin about Saturday's road closure for the Public Works topic"
- "How many subscribers does our Emergency Alerts topic have?"
- "List the bulletins we sent last week and their subjects"
- "Subscribe resident@example.com to the Parks and Recreation topic"

## Guardrails

- Subscriber records are PII (email addresses and phone numbers). Bulletins are outward-facing public communications, so sends should require human approval.
- Request the narrowest Granicus govDelivery 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

- govDelivery API documentation: https://developers.govdelivery.com/
- Communications Cloud v1 API: https://developers.govdelivery.com/api/comm_cloud_v1/Content/API/Comm%20Cloud%20V1/API_CommCloudV1_Landing.htm
- This connector on ibl.ai: https://ibl.ai/developer/connectors/granicus
- ibl.ai MCP server connections: https://ibl.ai/developer/platform/mcp/mcp-connections
