The 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.
- Tools
- 3
- What they doRead · write · destructive
- 3 · 0 · 03 read0 write0 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet 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>Create the OtterAI MCP connection
In AgentKit > Connections, create an OtterAI MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for OtterAI MCP server, so you don't need to register an OAuth app.
Authorize a user 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.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolotteraimcp_otter_fetchRetrieve the full transcript and metadata for a single OtterAI meeting by its ID, returned by otter_search.Read-onlyFetch
Retrieve the full transcript and metadata for a single OtterAI meeting by its ID, returned by otter_search.
Inputs
idstringrequired- Meeting ID returned by otter_search. Used to retrieve the full transcript from the Otter.ai platform.
otteraimcp_otter_get_user_infoReturn the name and email of the currently authenticated OtterAI user.Read-onlyGet User Info
Return the name and email of the currently authenticated OtterAI user.
Inputs
This tool takes no inputs.
otteraimcp_otter_searchSearch meetings across platforms by date, attendee, topic, keyword, or title.Read-onlySearch
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.
Inputs
attended_bystring- Optional. Name(s) of the participant(s) who were in the meeting. Case insensitive. Comma-separate multiple names.
channel_namestring- Optional. Name of any channel mentioned. Only include the name without the word channel.default
created_afterstring- Optional. 'YYYY/MM/DD' format. Start of the date range: only meetings created on or after this date are returned.default
created_beforestring- Optional. 'YYYY/MM/DD' format. End of the date range: only meetings created on or before this date are returned.default
cursorstring- Optional. The next_cursor value from a previous otter_search response, used to fetch the next page of the same search.
folder_namestring- Optional. Name of any folder mentioned. Only include the name without the word folder.default
include_shared_meetingsstring- Optional. Whether to include meetings shared with the user. Set to false only when the user explicitly asks for their own meetings.default
true keywords_in_transcriptstring- Optional. Comma separated keywords that could be in the transcript. Case insensitive.default
page_sizestring- Optional. At most how many meetings to return in this response, between 1 and 25.
querystring- Optional. Semantic search query for finding relevant meetings by topic or content.default
rationalestring- Optional. 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_containsstring- Optional. Space-delimited list of words, all of which must appear (in any order) in the recording title. Case insensitive.default
usernamestring- Optional. The current user's name from otter_get_user_info, used to mark results as personally attended vs. only shared with the user.
No tools match.