The FellowAI MCP connector routes your AI agent's tool calls to FellowAI's own MCP server through Scalekit. Each user signs in to FellowAI once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 7 tools.
- Tools
- 7
- What they doRead · write · destructive
- 7 · 0 · 07 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 FellowAI MCP connection
In AgentKit > Connections, create a FellowAI MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for FellowAI MCP server, so you don't need to register an OAuth app. To show your own app on the consent screen, use your own credentials instead.
Use your own OAuth app
FellowAI MCP uses Dynamic Client Registration (DCR) — no client ID or secret is required. The only step is creating a connection in Scalekit and authorizing your Fellow.ai account.
-
Create a connection in Scalekit
- In the Scalekit dashboard, go to AgentKit → Connections → Create Connection.
- Search for FellowAI MCP and click Create.
- Note the Connection name — use this as
connection_namein your code (e.g.,fellowaimcp).
-
Authorize your Fellow.ai account
Generate an authorization link and open it in a browser to complete the Fellow.ai OAuth flow.
The user is redirected to Fellow.ai to sign in and grant access. Scalekit stores the token and injects it automatically into every tool call — no further configuration is needed.
-
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 = 'fellowaimcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize FellowAI 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: 'fellowaimcp_get_action_items',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 = "fellowaimcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize FellowAI MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="fellowaimcp_get_action_items",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_toolfellowaimcp_get_action_itemsFetch action items assigned to the user, filtered by date range or status (overdue, completed, or ongoing).Read-onlyGet Action Items
Fetch action items assigned to the user, filtered by date range or status (overdue, completed, or ongoing).
Inputs
check_for_team_action_itemsstring- Set this value to true if user wants to check for action items assigned to the user's team. Only works if user is a manager. Optional
from_datestring- The start date of the range to get the action items from. Must be a valid ISO 8601 date string. Optional Field, if not provided, it will be ignored.
is_overduestring- Set this value to true if user wants only overdue action items. Optional
meeting_idsstring- List of meeting IDs to filter action items by. Must be provided as an array/list, for example: ['meeting_id_1', 'meeting_id_2']. Optional.
note_idstring- The ID of the note to filter action items by. Optional
notestream_idstring- The ID of the notestream to filter action items by. Optional
only_completed_action_itemsstring- Set this value to true if user wants only completed/done action items. Optional
only_ongoing_action_itemsstring- Set this value to true, if user only wants to get ongoing action items. Optional
to_datestring- The end date of the range to get the action items from. Must be a valid ISO 8601 date string. Optional Field, if not provided, it will be ignored.
topicstring- The topic of the action items to get. Optional
fellowaimcp_get_channel_detailsRetrieve detailed information about a specific channel by its ID.Read-onlyGet Channel Details
Retrieve detailed information about a specific channel by its ID.
Inputs
channel_idintegerrequired- The ID of the channel to get details for. Use list_channels to find channel IDs.
fellowaimcp_get_meeting_participantsRetrieve all participants of a meeting, including calendar attendees and note users.Read-onlyGet Meeting Participants
Retrieve all participants of a meeting, including calendar attendees and note users.
Inputs
meeting_idstring- The ID of the meeting to get the participants for. Optional
note_idstring- The ID of the note to get the participants for. Optional
fellowaimcp_get_meeting_summaryFetch summaries for one or more meetings, including key points, decisions, and action items.Read-onlyGet Meeting Summary
Fetch summaries for one or more meetings, including key points, decisions, and action items.
Inputs
meeting_idsstring- List of meeting IDs to get summaries for. Must be provided as an array/list, for example: ['meeting_id_1', 'meeting_id_2']. Optional.
note_idstring- The ID of the note to get the summary for. Optional
fellowaimcp_get_meeting_transcriptRetrieve the transcript of a meeting.Read-onlyGet Meeting Transcript
Retrieve the transcript of a meeting. For meetings 15+ minutes, use start_time and end_time to fetch a specific segment.
Inputs
end_timestring- End time from beginning of recording (seconds, MM:SS, or HH:MM:SS format). If specified, minimum time range of 300s (5 minutes) is required.
meeting_idstring- The ID of the meeting to get the transcript for. Optional
note_idstring- The ID of the note to get the transcript for. Optional
recording_idstring- The ID of a specific recording/part to get. Optional. Use this for multi-part meetings when you need a specific part's transcript.
start_timestring- Start time from beginning of recording (seconds, MM:SS, or HH:MM:SS format). If specified, minimum time range of 300s (5 minutes) is required.
fellowaimcp_list_channelsList all available channels in the workspace, optionally filtered by name or type.Read-onlyList Channels
List all available channels in the workspace, optionally filtered by name or type.
Inputs
namestring- Optional filter: channel name (case-insensitive partial match)
typestring- Optional filter: channel type (public or private)
fellowaimcp_search_meetingsSearch for meetings across calendar events and notes, with filters for participants, date range, content, and summary.Read-onlySearch Meetings
Search for meetings across calendar events and notes, with filters for participants, date range, content, and summary.
Inputs
channel_idstring- The ID of the channel to filter the meetings by. This is used to limit the search to a subset of all possible meetings the user has access to. Optional.
from_datestring- The start date of the range to get meetings from (inclusive). ISO 8601 date string format. Used to filter meetings by start date. Optional but its use it's highly recommended.
has_external_participantsstring- Whether to filter meetings that have external participants. Optional.
has_summarystring- Whether to filter meetings that have a summary or not. If you are trying to answer a question that depends on meeting content, most of the time you will want to use this since most meetings without summary are not useful. If you don't get the results you expect, you can try again without this parameter but using 'note'. Optional.
notestring- A search query to match against meeting notes content. Used to search in meeting notes content. Optional but recommended.
note_idstring- The ID of the note to filter the meetings by. Optional.
note_summarystring- A semantic search query to search within meeting note summaries. This should be used specifically for searching past meetings with generated summaries. For best results, include the core of the user's question or prompt here rather than just keywords, as the semantic search works better with full context. If the question include things covered by other parameter like attendees, meeting title, etc, rephrase the question to NOT include those. Ideally this should be used in conjunction with the keyword based search of 'note' since some notes may have the relevant information but have no summaries. If no results are found with 'note_summary' or 'has_external_participants', use 'note'. Optional but recommended.
notestream_idstring- The ID of the note stream to filter the meetings by. Optional.
participant_email_domainsstring- List of email domains to filter meetings by participant domains (AND match). Must be provided as an array/list, for example: ['company.com', 'partner.com']. Optional.
participant_emailsstring- List of email addresses to filter meetings by participants (AND match). Must be provided as an array/list, for example: ['user1@company.com', 'user2@company.com']. Optional.
participant_full_namesstring- List of full names to filter meetings by participants (AND match). Must be provided as an array/list, for example: ['John Smith', 'Jane Doe']. Optional.
titlestring- A simple keyword based search query to match against meeting titles. Used to search in meeting titles across all sources. Optional.
to_datestring- The end date of the range to get meetings from (inclusive). ISO 8601 date string format. Used to filter meetings by end date. If it's obvious that the thing we are looking for is in the past, do set this field to the current date. Optional but its use it's highly recommended.
transcriptstring- A search query to match against meeting transcripts. Used to perform semantic search in meeting transcripts quotes. This does not include the speaker. Optional.
transcript_speakerstring- The speaker to filter the transcripts by. It could be someone who is mentioning somebody or something. Use this parameter to filter transcripts by a specific speaker's name. This is particularly useful when searching for statements or mentions made by a particular person. Optional.
user_has_calendar_eventstring- IMPORTANT: Set this to True when the user asks about their OWN meetings. This includes phrases like: 'my meetings', 'meetings I had', 'meetings I attended', 'meetings on my calendar', 'my calls', 'meetings I was in', or any query that implies the user wants meetings they personally participated in (not just meetings they have access to). When True, results are filtered to only include meetings where the user was an invited attendee.
No tools match.
Workflows
Search for recent meetings
Use fellowaimcp_search_meetings to find meetings by title, date range, participants, or content. Set user_has_calendar_event: true to search only the current user’s own meetings.
const meetings = await actions.executeTool({ connector: 'fellowaimcp', identifier: 'user_123', toolName: 'fellowaimcp_search_meetings', toolInput: { from_date: '2024-01-01', to_date: '2024-01-31', user_has_calendar_event: true, has_summary: true, },});console.log(meetings);meetings = actions.execute_tool( connection_name="fellowaimcp", identifier="user_123", tool_name="fellowaimcp_search_meetings", tool_input={ "from_date": "2024-01-01", "to_date": "2024-01-31", "user_has_calendar_event": True, "has_summary": True, },)print(meetings)Get a meeting summary
Use fellowaimcp_get_meeting_summary to retrieve AI-generated summaries for one or more meetings, including key points, decisions, and action items.
const summary = await actions.executeTool({ connector: 'fellowaimcp', identifier: 'user_123', toolName: 'fellowaimcp_get_meeting_summary', toolInput: { meeting_ids: ['meeting_abc123'], },});console.log(summary);summary = actions.execute_tool( connection_name="fellowaimcp", identifier="user_123", tool_name="fellowaimcp_get_meeting_summary", tool_input={ "meeting_ids": ["meeting_abc123"], },)print(summary)Fetch overdue action items
Use fellowaimcp_get_action_items to retrieve action items assigned to the user, filtered by status or date range.
const actionItems = await actions.executeTool({ connector: 'fellowaimcp', identifier: 'user_123', toolName: 'fellowaimcp_get_action_items', toolInput: { is_overdue: true, },});console.log(actionItems);action_items = actions.execute_tool( connection_name="fellowaimcp", identifier="user_123", tool_name="fellowaimcp_get_action_items", tool_input={ "is_overdue": True, },)print(action_items)