Connectors
Attach a ready-made MCP server for Gmail, Google Drive, SharePoint and other common services
A connector is a ready-made MCP server for a common service — Gmail, Google Drive, SharePoint, Dropbox. The provider builds and maintains it, so there is nothing for you to host or register. Attach it to your Omniagent, supply the signed-in user's access token, and the agent can search their mail or read their calendar during the conversation.
Available connectors
The services you can attach today
Attach a connector
The mcp.connectors field
Access tokens and scopes
What the user's token has to carry
Connectors require the OpenAI provider. They are not available on Azure OpenAI — which is the default — because connectors are hosted by OpenAI and reached through their API directly. If your Omniagent runs on Azure OpenAI, attach the service's own MCP server instead: see the alternative.
This is stricter than MCP servers, which work on both providers.
Connectors vs. registered servers
Both end up as tools the agent can call. The difference is whether you have to register the server yourself.
| Connector | Registered server | |
|---|---|---|
| Who maintains it | The provider | Whoever runs the server |
| You register it | No | Yes, with POST /public/mcp-servers |
| Attached via | mcp.connectors | mcp.servers |
| Authentication | Always the end user's token | None, a credential you hold, or the end user's |
| Tools available | Fixed set, per service | Whatever the server exposes |
Every connector acts as the signed-in user, never as your application. That is the point of them — the agent answers "what's on my calendar this afternoon" with that user's calendar.
If you are on Azure OpenAI
Connectors are unavailable, but the same services are still reachable — most publish their own MCP server, which you register like any other and attach with mcp.servers:
| Service | MCP server |
|---|---|
| Google Calendar | https://calendarmcp.googleapis.com/mcp/v1 |
| Gmail | https://gmailmcp.googleapis.com/mcp/v1 |
| Google Drive | https://drivemcp.googleapis.com/mcp/v1 |
Register one with authorizationRequired: true and supply the user's OAuth token per session, exactly as described under per-user authorization. You run the same consent flow either way — only the field the ID goes in changes.
Available connectors
| Service | ID | What the agent can reach |
|---|---|---|
| Dropbox | dropbox | Files, file contents, recent activity |
| Gmail | gmail | Messages, search, recent mail |
| Google Calendar | googlecalendar | Events and event details |
| Google Drive | googledrive | Documents, drives, recent files |
| Microsoft Teams | microsoftteams | Messages, chat members |
| Outlook Calendar | outlookcalendar | Events, individual and batched |
| Outlook Email | outlookemail | Messages, search, recent mail |
| SharePoint | sharepoint | Messages, sites, documents, recent activity |
The ID is what you put in mcp.connectors.
Connectors are not returned by GET /public/mcp-servers — that endpoint lists only the servers you registered yourself.
Attach a connector
Connectors go in mcp.connectors, alongside any servers you registered in mcp.servers:
curl -X PATCH https://companion-api.napster.com/public/agents/agent_abc123 \
-H "X-Api-Key: $NAPSTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mcp": {
"servers": ["inventory"],
"connectors": ["gmail"]
}
}'Then pass the user's access token when you open the session, keyed by the connector's ID:
curl -X POST https://companion-api.napster.com/public/agents/agent_abc123/connections \
-H "X-Api-Key: $NAPSTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channelType": "webrtc",
"mcp": {
"authorizations": [
{
"mcpServerId": "gmail",
"token": "ya29.a0AfH6..."
}
]
}
}'A connector always requires a token. Attaching one without an entry in mcp.authorizations fails the session with 400.
Access tokens and scopes
You run the OAuth flow. Napster never contacts Google, Microsoft or Dropbox — you register your own OAuth client with them, take the user through consent, hold the refresh token, and mint an access token per session. The token is used for that session and never stored.
The token has to carry the right scopes, or the connector's tools fail even though the session starts normally. Scopes are granted at consent time, so a missing one means sending the user back through the flow.
Scopes are defined by the service that issues the token — Google, Microsoft or Dropbox — not by Napster or by the connector. To find out what to ask for, see OpenAI's connectors documentation, which lists the scopes each connector's tools require.
Mint a fresh token per session rather than reusing a cached one — a conversation can outlive a short expiry, and the agent will start failing tool calls mid-session when it does.