Connect AI agents to the OtterAI MCP server
Vendor MCP3 toolsOAuth 2.1/DCRTranscriptionProductivityCollaborationThe OtterAI MCP connector routes your AI agent's tool calls to OtterAI's own MCP server through Scalekit. Each user signs in to OtterAI once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 3 tools.
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenv -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'otteraimcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize OtterAI MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'otteraimcp_otter_get_user_info',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "otteraimcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize OtterAI MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="otteraimcp_otter_get_user_info",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.py
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Search otter — Search meetings across platforms by date, attendee, topic, keyword, or title
- Get otter — Return the name and email of the currently authenticated OtterAI user
- Fetch otter — Retrieve the full transcript and metadata for a single OtterAI meeting by its ID, returned by otter_search
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
otteraimcp_otter_fetch#Retrieve the full transcript and metadata for a single OtterAI meeting by its ID, returned by otter_search.1 param
Retrieve the full transcript and metadata for a single OtterAI meeting by its ID, returned by otter_search.
idstringrequiredMeeting ID returned by otter_search. Used to retrieve the full transcript from the Otter.ai platform.otteraimcp_otter_get_user_info#Return the name and email of the currently authenticated OtterAI user.0 params
Return the name and email of the currently authenticated OtterAI user.
otteraimcp_otter_search#Search meetings across platforms by date, attendee, topic, keyword, or title. Returns meeting metadata, AI summaries, outlines, and action items ranked by relevance; supports pagination via cursor.13 params
Search meetings across platforms by date, attendee, topic, keyword, or title. Returns meeting metadata, AI summaries, outlines, and action items ranked by relevance; supports pagination via cursor.
attended_bystringoptionalOptional. Name(s) of the participant(s) who were in the meeting. Case insensitive. Comma-separate multiple names.channel_namestringoptionalOptional. Name of any channel mentioned. Only include the name without the word channel.created_afterstringoptionalOptional. 'YYYY/MM/DD' format. Start of the date range: only meetings created on or after this date are returned.created_beforestringoptionalOptional. 'YYYY/MM/DD' format. End of the date range: only meetings created on or before this date are returned.cursorstringoptionalOptional. The next_cursor value from a previous otter_search response, used to fetch the next page of the same search.folder_namestringoptionalOptional. Name of any folder mentioned. Only include the name without the word folder.include_shared_meetingsstringoptionalOptional. Whether to include meetings shared with the user. Set to false only when the user explicitly asks for their own meetings.keywords_in_transcriptstringoptionalOptional. Comma separated keywords that could be in the transcript. Case insensitive.page_sizestringoptionalOptional. At most how many meetings to return in this response, between 1 and 25.querystringoptionalOptional. Semantic search query for finding relevant meetings by topic or content.rationalestringoptionalOptional. Briefly explain why you are calling this tool and how you plan to use the results. Do not include PII or other sensitive information. Maximum 250 characters.title_containsstringoptionalOptional. Space-delimited list of words, all of which must appear (in any order) in the recording title. Case insensitive.usernamestringoptionalOptional. The current user's name from otter_get_user_info, used to mark results as personally attended vs. only shared with the user.