ResourcesMCP Plugins

MCP Plugins

List MCP plugin providers, manage workspace connections, select plugins for assistants, and retrieve available tools through the Talkturo API.

curl --request GET \
  --url "https://app.talkturo.com/api/mcp/providers" \
  --header "Cookie: sb-access-token=sb_example_access_token; sb-refresh-token=sb_example_refresh_token"
{
  "providers": [
    {
      "id": "google-drive",
      "name": "Google Drive",
      "description": "Search and retrieve files from Google Drive",
      "brandColor": "#0F9D58",
      "iconUrl": "https://app.talkturo.com/images/mcp/google-drive.png"
    },
    {
      "id": "notion",
      "name": "Notion",
      "description": "Search pages and databases from connected Notion workspaces",
      "brandColor": "#111111",
      "iconUrl": "https://app.talkturo.com/images/mcp/notion.png"
    }
  ]
}
curl --request GET \
  --url "https://app.talkturo.com/api/mcp/plugins?accountSlug=acme&assistantId=1d9d4e3c-5296-4f9b-a6b7-4f0f2f5851d4" \
  --header "Cookie: sb-access-token=sb_example_access_token; sb-refresh-token=sb_example_refresh_token"
{
  "plugins": [
    {
      "id": "google-drive",
      "name": "Google Drive",
      "description": "Search and retrieve files from Google Drive",
      "brandColor": "#0F9D58",
      "iconUrl": "https://app.talkturo.com/images/mcp/google-drive.png",
      "connections": [
        {
          "id": "8f2546ec-2f4f-4e1d-8f39-654f7f2bbf2d",
          "label": "Operations workspace",
          "expiresAt": "2026-01-15T18:25:43.511Z",
          "needsReauth": false
        }
      ],
      "connectionId": "8f2546ec-2f4f-4e1d-8f39-654f7f2bbf2d",
      "enabledTools": [
        "drive.search",
        "drive.get_file"
      ],
      "defaultTools": [
        "drive.search"
      ]
    }
  ]
}
curl --request POST \
  --url "https://app.talkturo.com/api/mcp/plugins/select" \
  --header "Content-Type: application/json" \
  --header "Cookie: sb-access-token=sb_example_access_token; sb-refresh-token=sb_example_refresh_token" \
  --data '{
    "assistantId": "1d9d4e3c-5296-4f9b-a6b7-4f0f2f5851d4",
    "accountSlug": "acme",
    "provider": "google-drive",
    "connectionId": "8f2546ec-2f4f-4e1d-8f39-654f7f2bbf2d",
    "tools": ["drive.search", "drive.get_file"]
  }'
{
  "ok": true,
  "attached": true
}
curl --request GET \
  --url "https://app.talkturo.com/api/mcp/plugins/tools?accountSlug=acme&connectionId=8f2546ec-2f4f-4e1d-8f39-654f7f2bbf2d" \
  --header "Cookie: sb-access-token=sb_example_access_token; sb-refresh-token=sb_example_refresh_token"
{
  "tools": [
    {
      "name": "drive.search",
      "description": "Search files and folders by name and content"
    },
    {
      "name": "drive.get_file",
      "description": "Fetch file metadata and downloadable content"
    }
  ],
  "defaultTools": [
    "drive.search"
  ],
  "capabilities": {
    "plan": "tool_selection_required",
    "stage": "production",
    "blockedTools": [],
    "warning": null
  }
}
curl --request POST \
  --url "https://app.talkturo.com/api/mcp/plugins/connect-key" \
  --header "Content-Type: application/json" \
  --header "Cookie: sb-access-token=sb_example_access_token; sb-refresh-token=sb_example_refresh_token" \
  --data '{
    "accountSlug": "acme",
    "provider": "close",
    "apiKey": "sk_live_example_key",
    "label": "Sales Close"
  }'
{
  "ok": true,
  "connectionId": "8f2546ec-2f4f-4e1d-8f39-654f7f2bbf2d",
  "label": "Sales Close"
}
curl --request POST \
  --url "https://app.talkturo.com/api/mcp/oauth/authorize" \
  --header "Content-Type: application/json" \
  --header "Cookie: sb-access-token=sb_example_access_token; sb-refresh-token=sb_example_refresh_token" \
  --data '{
    "provider": "calendly",
    "accountSlug": "acme",
    "label": "Calendly Sales"
  }'
{
  "url": "https://auth.calendly.com/oauth/authorize?response_type=code&client_id=example&redirect_uri=https%3A%2F%2Fapp.talkturo.com%2Fapi%2Fmcp%2Foauth%2Fcallback&state=example_state&code_challenge=example_challenge&code_challenge_method=S256"
}

Endpoint summary

MethodPathPurposeAuth
GET/api/mcp/providersList available MCP providersSession cookie
GET/api/mcp/pluginsList plugins, connections, and assistant selectionsSession cookie
POST/api/mcp/plugins/selectAttach or detach a plugin for an assistantSession cookie
GET/api/mcp/plugins/toolsList tools available for a workspace connectionSession cookie
POST/api/mcp/plugins/connect-keyConnect a provider using an API keySession cookie
POST/api/mcp/oauth/authorizeGenerate an OAuth authorization URL for a providerSession cookie
GET/api/mcp/oauth/callbackHandle the OAuth callback from a providerNone (redirect target)

All MCP plugin endpoints use the Talkturo web session for authentication. Send the authenticated Supabase session cookie with each request. These endpoints do not accept API keys.

GET /api/mcp/providers

Returns the MCP providers that Talkturo can connect to.

Parameters

This endpoint does not accept path, query, or request body parameters.

Response fields

providersarray
Required

Available MCP providers.

providers[].idstring
Required

Provider identifier used when selecting a plugin for an assistant.

providers[].namestring
Required

Human-readable provider name.

providers[].descriptionstring
Required

Short description of the provider and its integration.

providers[].brandColorstring
Required

Provider brand color value.

providers[].iconUrlstring
Required

Absolute URL for the provider icon.

GET /api/mcp/plugins

Returns MCP plugins for the workspace, including available connections and the current selection for an assistant when assistantId is provided.

Query parameters

query
accountSlugstring
Required

Workspace account slug.

query
assistantIdstring

Assistant UUID. When provided, the response includes the current plugin selection for that assistant in connectionId and enabledTools.

Response fields

pluginsarray
Required

Plugins available to the workspace.

plugins[].idstring
Required

Plugin or provider identifier.

plugins[].namestring
Required

Human-readable plugin name.

plugins[].descriptionstring
Required

Short description of the plugin.

plugins[].brandColorstring
Required

Brand color associated with the plugin.

plugins[].iconUrlstring
Required

Absolute URL for the plugin icon.

plugins[].authKindstring
Required

Authentication method used by the provider, such as oauth or api_key.

plugins[].keyHelpUrlstring

URL to documentation on how to obtain an API key for providers that use API key authentication. Absent for OAuth-only providers.

plugins[].connectionsarray
Required

Workspace connections for this plugin provider.

plugins[].connections[].idstring
Required

Connection UUID.

plugins[].connections[].labelstring
Required

Display label for the connection.

plugins[].connections[].expiresAtstring

Connection expiration timestamp in ISO 8601 format when the provider issues expiring credentials.

plugins[].connections[].needsReauthboolean
Required

Whether the connection requires reauthorization before tools can be used.

plugins[].connectionIdstring

Currently selected connection UUID for the assistant and provider.

plugins[].enabledToolsarray
Required

Tool names currently enabled for the assistant on this plugin.

plugins[].defaultToolsarray
Required

Default tool names suggested for this plugin.

POST /api/mcp/plugins/select

Attaches a provider connection to an assistant and stores the selected tool list. If tools is an empty array, Talkturo detaches the plugin from the assistant and deletes the saved configuration.

Body parameters

body
assistantIdstring
Required

Assistant UUID that will receive the plugin selection.

body
accountSlugstring
Required

Workspace account slug.

body
providerstring
Required

Provider identifier returned by GET /api/mcp/providers.

body
connectionIdstring
Required

Connection UUID for the selected provider.

body
toolsstring[]
Required

List of tool names to enable for the assistant. Each item can contain up to 200 characters, and the array can contain up to 100 items. Send an empty array to detach the plugin from the assistant.

Response fields

okboolean
Required

Whether the request completed successfully.

attachedboolean
Required

Whether a plugin configuration is attached after the request completes. false indicates the plugin was detached because tools was empty.

GET /api/mcp/plugins/tools

Returns the tools exposed by a specific workspace connection. Use this endpoint before saving a plugin selection so you can present the current tool list to the user.

Query parameters

query
accountSlugstring
Required

Workspace account slug.

Response fields

toolsarray
Required

Tools available through the selected connection. When reauthorization is required, this array is returned empty.

tools[].namestring
Required

Tool identifier.

tools[].descriptionstring
Required

Human-readable description of the tool.

defaultToolsarray

Default tool names recommended for the connection.

capabilitiesobject|null

Capability metadata for the connection, or null when no capability metadata is available.

capabilities.planstring

Capability plan identifier.

capabilities.stagestring

Capability stage for the tool set.

capabilities.blockedToolsarray

Tool names that are blocked for the current connection or plan.

capabilities.warningstring|null

Warning message to display alongside the tool list.

errorstring

Returned with the value reauth_required when the connection must be reauthorized before tools can be listed.

POST /api/mcp/plugins/connect-key

Connect a provider that uses API key authentication by submitting the key directly. This creates a workspace connection without an OAuth flow.

Body parameters

body
accountSlugstring
Required

Workspace account slug.

body
providerstring
Required

Provider identifier returned by GET /api/mcp/providers.

body
apiKeystring
Required

API key for the provider. The key is not returned in the response.

body
labelstring

Display label for the connection. When omitted, a default label is generated.

Response fields

okboolean
Required

Whether the connection was created successfully.

connectionIdstring
Required

UUID of the newly created connection.

labelstring
Required

Display label for the connection.

Error responses

StatusError valueMeaning
400missing_paramsMissing accountSlug, provider, or apiKey
401unauthorizedMissing or invalid session
403forbiddenNot allowed to access the workspace
404unknown_providerProvider not recognized
404account_not_foundWorkspace not found
422no_toolsProvider has no tools available
422invalid_keyAPI key was rejected by the provider
502provider_unreachableProvider could not be contacted
500save_failedConnection could not be saved
500connect_failedConnection attempt failed

POST /api/mcp/oauth/authorize

Generate an OAuth authorization URL for a provider that uses OAuth. Redirect the user to the returned URL to begin the authorization flow.

Body parameters

body
providerstring
Required

Provider identifier returned by GET /api/mcp/providers.

body
accountSlugstring
Required

Workspace account slug.

body
labelstring

Display label for the connection. Must be between 1 and 80 characters.

Response fields

urlstring
Required

OAuth authorization URL. Redirect the user to this URL to begin the OAuth flow. The URL includes response_type, client_id, redirect_uri, state, code_challenge, and code_challenge_method parameters.

Error responses

StatusError valueMeaning
400invalid_bodyRequest body failed validation
401unauthorizedMissing or invalid session
403forbiddenNot allowed to access the workspace
404unknown_providerProvider not recognized
404account_not_foundWorkspace not found
500authorize_failedFailed to generate the authorization URL. A detail field may provide additional context.

GET /api/mcp/oauth/callback

Handle the OAuth callback from a provider. After the user authorizes the connection at the provider's site, the provider redirects back to this endpoint with an authorization code.

This endpoint does not return JSON. It returns an HTML popup page that communicates the result to the opener window using postMessage, BroadcastChannel, and localStorage. The published payload has the shape { type: "mcp_oauth_result", ok: boolean, provider: string, connectionId?: string, error?: string, at: number }.

Query parameters

query
codestring

Authorization code returned by the provider. Required unless the provider returns an error.

query
statestring

State value returned by the provider. Required unless the provider returns an error.

query
errorstring

OAuth error returned by the provider when authorization fails.

Published payload

The HTML page publishes the following JSON payload to the opener window:

typestring
Required

Always mcp_oauth_result.

okboolean
Required

Whether the OAuth connection succeeded.

providerstring
Required

Provider identifier.

connectionIdstring

Connection UUID. Present only when ok is true.

errorstring

Error identifier. Present only when ok is false.

atnumber
Required

Timestamp when the payload was generated.

Possible error values

Error valueMeaning
missing_code_or_stateThe provider did not return code or state
state_missingState cookie was not found
state_mismatchState hash did not match the expected value
bad_contextOAuth context could not be deserialized
unknown_providerProvider not recognized
client_secret_missingProvider client secret is not configured
token_exchange_failedToken exchange with the provider failed
save_failedConnection could not be saved
callback_failedUnexpected error during callback processing

Error behavior

All endpoints require an authenticated Talkturo session. Beyond 401 Unauthorized, MCP plugin endpoints can return the following status codes depending on the route and workspace state:

StatusMeaning
400Missing or invalid query or body parameters
401Missing or invalid session
403Authenticated, but not allowed to access the workspace or assistant
404Requested assistant or connection was not found
500Unexpected server error