Remote MCP
Chronote exposes a remote MCP (Model Context Protocol) endpoint for AI assistants and agents that need meeting context or want to control live recordings.
The endpoint uses OAuth with Discord sign-in. Chronote checks the same meeting access rules used by the web portal before returning data, and write tools require separate consent scopes.
For an unattended agent that cannot complete a browser sign-in, see Service Accounts.
Endpoint
Use the API MCP endpoint:
https://api.chronote.gg/mcp
Self-hosted deployments should use their own API base URL plus /mcp.
Remote MCP requires Discord OAuth and OAUTH_SECRET to be configured. Set MCP_PUBLIC_BASE_URL to the externally reachable API origin if it differs from the server's internal URL.
Available Tools
list_servers: Lists Discord servers where the authenticated user can access Chronote data.list_meetings: Lists recent meetings in a server, with optional channel, date, tag, and archived filters.list_my_meetings: Lists meetings across servers for the authenticated user. It defaults to meetings the user attended in the past 7 days and can also list meetings the user can access. Useall,today, orpast_7_dayswithoutstartDateorendDate. Userange: "custom"when you need explicit date bounds. If the response includesnextCursor, pass it ascursorto fetch the next page.get_meeting_summary: Returns notes and metadata for one accessible meeting.get_meeting_transcript: Returns transcript text for one accessible meeting when that server allows transcript access. UseoffsetandmaxCharsto page through long transcripts.start_meeting: Starts a Chronote recording from the authenticated user's current Discord voice channel. Optionally passserverId,voiceChannelId,textChannelId,context, andtags.stop_meeting: Stops the active Chronote meeting, either byserverIdor by inferring the server from the authenticated user's current voice channel. PassmeetingIdto guard against stopping the wrong meeting.get_live_meeting_status: Returns status for an active meeting.get_live_meeting_transcript: Returns currently available live transcript events when that server allows transcript access. PassserverIdso the request reaches the bot runtime that owns the meeting, and useafterEventIdto page from the last event you saw.get_meeting_control_request: Checks a queued start, stop, or live meeting request byrequestId.
For follow-up fetch tools, use the list item's id field. Do not pass the UUID-style meetingId field.
Example flow:
- Call
list_meetingsorlist_my_meetings. - Take the returned
idvalue, for example<server-id>#2026-05-08T01:06:47.307Z. - Pass that
idintoget_meeting_summaryorget_meeting_transcript.
For long transcripts, request a window at a time:
- Call
get_meeting_transcriptwithid, optionally addingmaxChars. - If the response includes
truncated: true, call it again withoffsetset tonextOffset.
Live Control Tips
- Join the Discord voice channel before calling
start_meetingwithout explicit IDs. - If you are connected in multiple servers, pass
serverId. - If the server does not have a default notes channel, pass
textChannelId. - Write and live tools may return
requestStatus: "pending"with arequestIdwhile a bot worker completes the command. Callget_meeting_control_requestwith thatrequestIdto check the result. stop_meetingcan be used by the meeting creator or members with meeting-management permissions.
Date Range Tips
- For preset My Meetings ranges, send
range: "all",range: "today", orrange: "past_7_days"and omitstartDateandendDate. - For explicit windows, send
range: "custom"withstartDate, and optionallyendDate. - Chronote rejects mixed inputs such as
range: "past_7_days"with a manualstartDate.
OAuth Scopes
meetings:read: Required for server lists, meeting lists, and meeting summaries.transcripts:read: Required in addition tomeetings:readfor transcript text.meetings:start: Required to start recordings through MCP.meetings:stop: Required to stop recordings through MCP.get_meeting_control_requestrequires a valid MCP token and only returns requests created by the authenticated user.
If a tool returns insufficient_scope, your MCP client should follow the WWW-Authenticate challenge, run OAuth step-up authorization for the listed scopes, and retry the request. During step-up, Chronote may require a fresh browser authorization instead of refreshing the existing token so the new scopes are explicitly approved. If your client does not support step-up authorization, reconnect Chronote MCP and approve the read, transcript, start, and stop scopes you need.
OpenCode Example
{
"mcp": {
"chronote": {
"type": "remote",
"url": "https://api.chronote.gg/mcp",
"oauth": {}
}
}
}
When your MCP client connects, it opens a Chronote authorization flow in the browser. Sign in with Discord, review the requested scopes, and approve the client.
Access Rules
Chronote only returns meeting data if the authenticated Discord user can access the meeting. Access follows the same model as My Meetings and Server Library:
- Users who participated can access their indexed meetings when attendee access is enabled.
- Other users need access to the voice channel and notes channel history.
- Transcript access requires explicit transcript scope consent.
- A server's Transcript access setting can still make completed and live transcripts unavailable, even when the token has
transcripts:read. - Starting a live meeting requires the authenticated Discord user to already be in the target voice channel.
- Stopping a meeting requires creator or meeting-management permissions.
Service account tokens run through these same rules, resolved against the bot they act as, plus the server and channel bounds recorded on the token.