Skip to main content

Webex Meetings MCP

The Webex Meetings MCP exposes per-user Webex meeting, participant, recording, and transcript operations to Dynamic Agents. It runs as one shared MCP service, but each tool call uses the connected Webex account of the caller.

Authentication flow

The CAIPE caller JWT remains in the request Authorization header until AgentGateway authorizes the tool call. The provider token is carried separately in X-CAIPE-Provider-Token. AgentGateway then rewrites the provider token into the upstream Authorization header for the MCP server.

The MCP service does not store OAuth credentials or query MongoDB. Credential storage, refresh, and caller-scoped connection selection belong to the CAIPE UI credential service and Dynamic Agents runtime.

Tools

ToolPurpose
webex_list_meetingsList or search meetings
webex_userhub_calendarBest-effort User Hub calendar lookup
webex_resolve_meeting_linkResolve a Webex join link through the meetings API
webex_get_meeting_statusRead meeting details and optional participants
webex_create_meetingSchedule a meeting
webex_update_meetingUpdate a scheduled meeting
webex_delete_meetingDelete a scheduled meeting
webex_list_recordingsList meeting recordings
webex_list_transcriptsList and optionally download transcripts

Minimum Webex scopes

The local MCP calls the Webex REST API directly. For read-only meeting listing and lookup, the minimum is meeting:schedules_read. To support the MCP's full tool surface, enable the scopes required by the capabilities you expose:

ScopeRequired by
meeting:schedules_readList/get meetings, resolve links, and read the current meeting before an update
meeting:schedules_writeCreate, update, and delete meetings
meeting:participants_readOptional participant expansion in webex_get_meeting_status
meeting:recordings_readwebex_list_recordings
meeting:transcripts_readwebex_list_transcripts and transcript downloads

Add spark:people_read when CAIPE should display the connected user's Webex profile through /v1/people/me. This scope is useful for the Connected Apps UI, but the meeting tools themselves do not require it.

The following scopes are not required by the current local MCP:

  • spark:mcp is for the Webex-hosted MCP service, not this local REST proxy.
  • meeting:summaries_read is unnecessary because this MCP has no summary tool.
  • Messaging, membership, room, admin, compliance, and write scopes unrelated to the tools above should not be requested unless another integration needs them.

webex_userhub_calendar calls a best-effort Webex User Hub endpoint rather than a public Webex REST resource. Webex does not publish a separate OAuth scope contract for that endpoint, so do not treat it as a guaranteed integration API.

Every scope in an OAuth authorization request must also be enabled on the Webex Integration in the Webex developer portal. Otherwise Webex returns invalid_scope. After changing scopes, restart the UI so deployment-configured connectors are reconciled, then reconnect the Webex account to obtain a token with the new grants.

See the Webex documentation for the Meetings API scopes.

Helm configuration

This example enables the MCP, provisions a Webex OAuth provider, routes tool calls through AgentGateway, and registers the MCP with Dynamic Agents. Replace the release name, namespace, public URL, and secret store values for your environment.

tags:
caipe-ui: true
dynamic-agents: true
mcp-webex-meetings: true

global:
agentgateway:
enabled: true

mcp-webex-meetings:
nameOverride: mcp-webex-meetings
mcpSecrets:
requiresSecret: false
mcp:
mode: http
port: 8000
agentgateway:
enabled: true
id: webex_meetings
pathPrefix: /mcp/webex_meetings
protocol: StreamableHTTP
credential_sources:
- kind: provider_connection
name: X-CAIPE-Provider-Token
provider: webex
target: header

caipe-ui:
config:
CAIPE_CREDENTIALS_ENABLED: "true"
CREDENTIAL_BOOTSTRAP_OAUTH_CONNECTORS: "false"

oauthConnectors:
- provider: webex
name: Webex
clientIdEnv: WEBEX_CLIENT_ID
clientSecretEnv: WEBEX_CLIENT_SECRET
authorizationUrl: https://webexapis.com/v1/authorize
tokenUrl: https://webexapis.com/v1/access_token
redirectUri: https://caipe.example.com/api/credentials/oauth/webex/callback
scopes:
- meeting:schedules_read
- meeting:schedules_write
- meeting:participants_read
- meeting:recordings_read
- meeting:transcripts_read
- spark:people_read

externalSecrets:
enabled: true
secretStoreRef:
name: vault
kind: ClusterSecretStore
data:
- secretKey: WEBEX_CLIENT_ID
remoteRef:
key: projects/caipe/oauth-connectors
property: WEBEX_CLIENT_ID
- secretKey: WEBEX_CLIENT_SECRET
remoteRef:
key: projects/caipe/oauth-connectors
property: WEBEX_CLIENT_SECRET

appConfig:
mcp_servers:
- id: webex_meetings
name: Webex Meetings
description: Webex meeting, recording, and transcript tools
transport: http
enabled: true
endpoint: http://caipe-agentgateway:4000/mcp/webex_meetings
source: agentgateway
agentgateway_endpoint: http://caipe-agentgateway:4000/mcp/webex_meetings
agentgateway_target_endpoint: http://caipe-mcp-webex-meetings-mcp.caipe.svc.cluster.local:8000/mcp
credential_sources:
- kind: provider_connection
name: X-CAIPE-Provider-Token
provider: webex
target: header

The redirect URI path must use the same provider ID as provider. Register that exact URI on the Webex Integration before users connect.

Multiple provider variants

Multiple logical MCP entries can share the same Webex Meetings pod. Give each OAuth connector a unique provider ID, then use that ID in the MCP row's credential_sources:

caipe-ui:
oauthConnectors:
- provider: webex_secondary
name: Webex Secondary
clientIdEnv: WEBEX_SECONDARY_CLIENT_ID
clientSecretEnv: WEBEX_SECONDARY_CLIENT_SECRET
authorizationUrl: https://webexapis.com/v1/authorize
tokenUrl: https://webexapis.com/v1/access_token
redirectUri: https://caipe.example.com/api/credentials/oauth/webex_secondary/callback
scopes:
- meeting:schedules_read
- meeting:schedules_write
- meeting:participants_read
- meeting:recordings_read
- meeting:transcripts_read

appConfig:
mcp_servers:
- id: webex_meetings_secondary
name: Webex Meetings Secondary
transport: http
enabled: true
endpoint: http://caipe-agentgateway:4000/mcp/webex_meetings_secondary
agentgateway_target_endpoint: http://caipe-mcp-webex-meetings-mcp.caipe.svc.cluster.local:8000/mcp
credential_sources:
- kind: provider_connection
name: X-CAIPE-Provider-Token
provider: webex_secondary
target: header

global:
agentgateway:
extraMcpTargets:
- id: webex_meetings_secondary
host: caipe-mcp-webex-meetings-mcp.caipe.svc.cluster.local
port: 8000
pathPrefix: /mcp/webex_meetings_secondary
protocol: StreamableHTTP
providerTokenAuth: true

This creates a second credential and routing identity, not a second MCP Deployment. Agents select a variant by listing its MCP server ID under allowed_tools.