Subchapter 158.4
concepts/oauth-setup.mdMarkdown8 KBView on GitHub
The documented path for Zoom MCP is a General app using user-level OAuth.
Each user authorizes with their own Zoom account, and the resulting bearer token is passed by
the bundled connector in .mcp.json (opens in a new tab).
For development, two pragmatic options are:
Option 0: localhost and manually copy the code
Example:
http://localhost:3000/oauth/zoom/callbackIf the local app does not actually handle the callback yet, the browser may show a failed page
load. You can still copy the code and state values from the browser URL and paste them into
Claude or your terminal flow so the token exchange can continue manually.
Pros:
Cons:
Option 1: ngrok in front of a local callback server
Example:
Local app: http://localhost:3000/oauth/zoom/callback
Public redirect URL: https://your-subdomain.ngrok.app/oauth/zoom/callbackPros:
Cons:
Option 2: webhook.site for one-off callback capture
Example:
https://webhook.site/your-tokenPros:
code and stateCons:
Practical recommendation:
localhost if you only need a one-off auth code and are fine copying it manuallyngrok if you are building a real integration or expect to repeat the flowwebhook.site only for quick one-off testing when you do not yet have a callback handlerAdd the MCP-specific granular scopes required by the tools you want to use.
| Product Area | Scope | Zoom label | Needed for |
|---|---|---|---|
| AI Companion | ai_companion:read:search | Search across Zoom Meeting, Zoom Chat, and Zoom Doc, returning the most relevant results based on the query. | semantic MCP search |
| Meeting | meeting:read:search | Search and view meetings | search_meetings |
| Meeting | meeting:read:assets | View a meeting’s assets | get_meeting_assets |
| Recording | cloud_recording:read:list_user_recordings | Lists all cloud recordings for a user. | recordings_list |
| Recording | cloud_recording:read:content | read recording content scope | get_recording_resource |
| Zoom Docs | docs:write:import | Create new file by import | create_file_with_content |
| Zoom Docs | docs:read:export | Read file content in Markdown format | get_file_content |
Minimum recommendation for the main Zoom MCP connector:
For the dedicated Zoom Docs MCP connector:
docs:write:import if you want Docs creationdocs:read:export if you want Docs retrievalZOOM_DOCS_MCP_ACCESS_TOKENWhiteboard MCP uses a separate scope set. See ../whiteboard/SKILL.md.
https://zoom.us/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URIcode from the redirect URL.curl -X POST https://zoom.us/oauth/token \
-u "CLIENT_ID:CLIENT_SECRET" \
-d "grant_type=authorization_code&code=CODE&redirect_uri=REDIRECT_URI"access_token and refresh_token.Treat the refresh token as single-use:
If you used webhook.site, the callback will arrive as a captured request and the code
parameter will be in the query string. Exchange it immediately and do not keep using the same
capture URL longer than necessary.
Smart Recording and Meeting Summary are feature prerequisites for useful semantic meeting search, meeting assets, and transcript-rich recording content.
In the Zoom web portal:
Important:
Export the token environment variable used by this plugin:
export ZOOM_MCP_ACCESS_TOKEN="YOUR_ACCESS_TOKEN"
export ZOOM_DOCS_MCP_ACCESS_TOKEN="YOUR_DOCS_ACCESS_TOKEN"Verification:
recordings_list, search_meetings, get_meeting_assets,
and get_recording_resourcecreate_file_with_content
and get_file_contenttools/list as the authority for the live catalogrecordings_list to verify the token has the correct MCP scopes| Property | Details |
|---|---|
| Access token expiry | About 1 hour |
| Refresh flow | Exchange refresh_token for a new access_token and replacement refresh_token |
| Client update | Update ZOOM_MCP_ACCESS_TOKEN, then restart Claude Code or re-enable the plugin |
Refresh exchange:
curl -X POST https://zoom.us/oauth/token \
-u "CLIENT_ID:CLIENT_SECRET" \
-d "grant_type=refresh_token&refresh_token=YOUR_REFRESH_TOKEN"After a successful refresh:
ZOOM_CLIENT_ID=your_client_id
ZOOM_CLIENT_SECRET=your_client_secret
ZOOM_MCP_ACCESS_TOKEN=your_access_token
ZOOM_DOCS_MCP_ACCESS_TOKEN=your_docs_access_token
ZOOM_REFRESH_TOKEN=your_refresh_tokenSee also: ../../oauth/SKILL.md