-
Notifications
You must be signed in to change notification settings - Fork 13
sync: add Apollo (API Key), Momentum, and Zoom Revenue Accelerator connectors #891
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 4 commits
8bb181e
e98ab27
dd1bf69
3c0fadd
ea3c787
ad79c95
ff315e4
cb79e0c
5638767
d274dfa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components' | ||
|
|
||
| Register your Discord bot token with Scalekit so it can authenticate and proxy requests on behalf of your users. Discord Bot uses Bearer Token authentication — there is no redirect URI or OAuth flow. | ||
|
|
||
| <Steps> | ||
| 1. ### Create a Discord application and bot user | ||
|
|
||
| - Go to the [Discord Developer Portal](https://discord.com/developers/applications) and sign in with your Discord account. | ||
| - Click **New Application**, enter a name (for example, `Agent Auth`), accept the terms, and click **Create**. | ||
| - Open your application and go to **Bot** in the left sidebar. | ||
|
|
||
| 2. ### Get your bot token | ||
|
|
||
| - On the **Bot** page, under **Token**, click **Reset Token** to generate a new bot token and copy it immediately — Discord shows the full token only once. | ||
|
|
||
|  | ||
|
|
||
| <Aside type="caution" title="Keep your bot token secret"> | ||
| Anyone with your bot token can control your bot completely. If you suspect it has leaked, click **Reset Token** immediately to invalidate the old one. | ||
| </Aside> | ||
|
|
||
| 3. ### Invite the bot to a server | ||
|
|
||
| - Go to **OAuth2** > **URL Generator** in the left sidebar. | ||
| - Under **Scopes**, select **bot**. | ||
| - Under **Bot Permissions**, select the permissions your agent needs. | ||
|
|
||
|  | ||
|
|
||
| - Copy the generated URL at the bottom of the page, open it in a browser, and select a server to add the bot to. | ||
|
|
||
| 4. ### Create a connection in Scalekit | ||
|
|
||
| - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**. | ||
| - Search for **Discord Bot** and click **Create**. | ||
| - Note the **Connection name** — use this as `connection_name` in your code (e.g., `discordbot`). | ||
|
|
||
| 5. ### Add a connected account | ||
|
|
||
| Connected accounts link a specific user identifier in your system to a Discord bot token. Add them via the dashboard for testing, or via the Scalekit API in production. | ||
|
|
||
| **Via dashboard (for testing)** | ||
|
|
||
| - Open the connection and click the **Connected Accounts** tab → **Add account**. | ||
| - Fill in **Your User's ID** and **Bot Token**, then click **Save**. | ||
|
|
||
| **Via API (for production)** | ||
|
|
||
| <Tabs syncKey="tech-stack"> | ||
| <TabItem label="Node.js"> | ||
| ```ts | ||
| await scalekit.connect.upsertConnectedAccount({ | ||
| connectionName: 'discordbot', | ||
| identifier: 'user@example.com', | ||
| credentials: { apiKey: 'your-discord-bot-token' }, | ||
| }) | ||
| ``` | ||
| </TabItem> | ||
| <TabItem label="Python"> | ||
| ```python | ||
| scalekit_client.connect.upsert_connected_account( | ||
| connection_name="discordbot", | ||
| identifier="user@example.com", | ||
| credentials={"api_key": "your-discord-bot-token"}, | ||
| ) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win Add inline secret-handling guidance. These examples pass a bot token without an inline warning to keep it out of source control and logs. Add language-appropriate security comments and show the value coming from secure storage. As per path instructions, security-sensitive code examples must include inline comments explaining the mitigated threat. 🤖 Prompt for AI AgentsSource: Path instructions 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: sed -n '1,140p' src/components/templates/agent-connectors/_setup-discordbot.mdx | cat -nRepository: scalekit-inc/developer-docs Length of output: 3715 🏁 Script executed: python3 - <<'PY'
from pathlib import Path
p = Path('src/components/templates/agent-connectors/_setup-discordbot.mdx')
for i, line in enumerate(p.read_text().splitlines(), 1):
if 1 <= i <= 140:
print(f"{i:4}: {line}")
PYRepository: scalekit-inc/developer-docs Length of output: 3645 🏁 Script executed: ls -la src/components/templates/agent-connectors && echo '---' && sed -n '1,120p' src/components/templates/agent-connectors/_setup-discordbot.mdx | nl -ba | sed -n '1,120p'Repository: scalekit-inc/developer-docs Length of output: 21302 🏁 Script executed: python3 - <<'PY'
from pathlib import Path
import re
root = Path('src/components/templates/agent-connectors')
patterns = [
('upsertConnectedAccount', re.compile(r'upsertConnectedAccount|upsert_connected_account')),
('import', re.compile(r'^\s*import\s+', re.M)),
('constructor', re.compile(r'new\s+Scalekit|Scalekit\(')),
]
for path in sorted(root.glob('_setup-*.mdx')):
text = path.read_text()
if patterns[0][1].search(text):
print(f'FILE: {path}')
for name, pat in patterns:
print(f' {name}:', bool(pat.search(text)))
print(' --- snippets ---')
for m in re.finditer(r'```(?:ts|js|python|go|java)\n(.*?)```', text, re.S):
snippet = m.group(1).strip().splitlines()[:8]
print(' ', ' / '.join(snippet))
print()
PYRepository: scalekit-inc/developer-docs Length of output: 13611 🏁 Script executed: python3 - <<'PY'
from pathlib import Path
import re
root = Path('src/components/templates/agent-connectors')
for path in sorted(root.glob('_setup-*.mdx')):
text = path.read_text()
if 'upsertConnectedAccount' in text or 'upsert_connected_account' in text:
print(f'FILE: {path}')
for label, needle in [
('has import', 'import '),
('has scalekit client init', 'new Scalekit'),
('has scalekit_client init', 'scalekit_client ='),
('has upsertConnectedAccount', 'upsertConnectedAccount'),
('has upsert_connected_account', 'upsert_connected_account'),
]:
print(f' {label}: {needle in text}')
print()
PYRepository: scalekit-inc/developer-docs Length of output: 6788 Make these SDK snippets runnable. 🤖 Prompt for AI AgentsSource: Path instructions |
||
| ``` | ||
| </TabItem> | ||
| </Tabs> | ||
|
|
||
| </Steps> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| --- | ||
| title: 'Apollo (API Key) connector' | ||
| tableOfContents: true | ||
| description: 'Connect to Apollo.io using a master API key to search and enrich B2B contacts and accounts, manage CRM records, sequences, tasks, and deals, and access...' | ||
| sidebar: | ||
| label: 'Apollo (API Key)' | ||
| overviewTitle: 'Quickstart' | ||
| connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/apollo.svg | ||
| connectorAuthType: API Key | ||
| connectorCategories: [CRM & Sales] | ||
| head: | ||
| - tag: style | ||
| content: | | ||
| .sl-markdown-content h2 { | ||
| font-size: var(--sl-text-xl); | ||
| } | ||
| .sl-markdown-content h3 { | ||
| font-size: var(--sl-text-lg); | ||
| } | ||
| --- | ||
|
|
||
| import ToolList from '@/components/ToolList.astro' | ||
| import { tools } from '@/data/agent-connectors/apolloapikey' | ||
| import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' | ||
| import { AgentKitCredentials } from '@components/templates' | ||
| import { QuickstartGenericApikeySection } from '@components/templates' | ||
|
|
||
| <Steps> | ||
|
|
||
| 1. ### Install the SDK | ||
|
|
||
| <Tabs syncKey="tech-stack"> | ||
| <TabItem label="Node.js"> | ||
| ```bash frame="terminal" | ||
| npm install @scalekit-sdk/node | ||
| ``` | ||
| </TabItem> | ||
| <TabItem label="Python"> | ||
| ```bash frame="terminal" | ||
| pip install scalekit | ||
| ``` | ||
| </TabItem> | ||
| </Tabs> | ||
|
|
||
| Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) | ||
|
|
||
| 2. ### Set your credentials | ||
|
|
||
| <AgentKitCredentials /> | ||
|
|
||
| 3. ### Make your first call | ||
|
|
||
| <QuickstartGenericApikeySection connector="apolloapikey" toolName="apolloapikey_get_api_usage" providerName="Apollo (API Key)" /> | ||
|
|
||
| </Steps> | ||
|
|
||
| ## What you can do | ||
|
|
||
| Connect this agent connector to let your agent: | ||
|
|
||
| - **Sequence activate, add contacts to, archive** — Activate (start) an inactive Sequence in your team's Apollo account by ID | ||
| - **List add records to, account stages, contact deals** — Add existing contacts or accounts to one or more Apollo lists, referencing the lists by name | ||
| - **Create bulk** — Create up to 100 accounts (companies) in your Apollo CRM in a single request | ||
| - **Organizations bulk enrich** — Enrich data for up to 10 companies in a single API call, matching each by domain, LinkedIn URL, name, and/or website | ||
| - **People bulk enrich** — Enrich data for up to 10 people in a single API call by matching on name, email, employer, LinkedIn URL, or Apollo person ID | ||
| - **Update bulk, account** — Update up to 1,000 accounts in your Apollo CRM in a single request | ||
|
|
||
| ## 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. | ||
|
|
||
| <ToolList tools={tools} /> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| --- | ||
| title: 'Discord Bot connector' | ||
| tableOfContents: true | ||
| description: 'Connect to Discord as a bot. Manage guilds, channels, members, messages, roles, webhooks, and more using a Discord Bot Token.' | ||
| sidebar: | ||
| label: 'Discord Bot' | ||
| overviewTitle: 'Quickstart' | ||
| connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/discord.svg | ||
| connectorAuthType: API Key | ||
| connectorCategories: [Communication, Collaboration] | ||
| head: | ||
| - tag: style | ||
| content: | | ||
| .sl-markdown-content h2 { | ||
| font-size: var(--sl-text-xl); | ||
| } | ||
| .sl-markdown-content h3 { | ||
| font-size: var(--sl-text-lg); | ||
| } | ||
| --- | ||
|
|
||
| import ToolList from '@/components/ToolList.astro' | ||
| import { tools } from '@/data/agent-connectors/discordbot' | ||
| import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' | ||
| import { AgentKitCredentials } from '@components/templates' | ||
| import { SetupDiscordbotSection } from '@components/templates' | ||
| import { QuickstartGenericApikeySection } from '@components/templates' | ||
|
|
||
| <Steps> | ||
|
|
||
| 1. ### Install the SDK | ||
|
|
||
| <Tabs syncKey="tech-stack"> | ||
| <TabItem label="Node.js"> | ||
| ```bash frame="terminal" | ||
| npm install @scalekit-sdk/node | ||
| ``` | ||
| </TabItem> | ||
| <TabItem label="Python"> | ||
| ```bash frame="terminal" | ||
| pip install scalekit | ||
| ``` | ||
| </TabItem> | ||
| </Tabs> | ||
|
|
||
| Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) | ||
|
|
||
| 2. ### Set your credentials | ||
|
|
||
| <AgentKitCredentials /> | ||
|
|
||
| 3. ### Set up the connector | ||
|
|
||
| <SetupDiscordbotSection /> | ||
|
|
||
| 4. ### Make your first call | ||
|
|
||
| <QuickstartGenericApikeySection connector="discordbot" toolName="discordbot_get_current_application" providerName="Discord Bot" /> | ||
|
|
||
| </Steps> | ||
|
|
||
| ## What you can do | ||
|
|
||
| Connect this agent connector to let your agent: | ||
|
|
||
| - **Member add guild, add lobby, add thread** — Add a user to a guild using their OAuth2 access token with the guilds.join scope | ||
| - **Role add guild member, modify guild, remove guild member** — Add a role to a guild member | ||
| - **Prune begin guild** — Begin a prune operation to kick inactive members | ||
| - **Delete bulk, all reactions, all reactions for emoji** — Delete multiple messages in a Discord channel in a single request (2-100 messages) | ||
| - **Ban bulk guild, remove guild** — Ban up to 200 users from a guild and optionally delete their recent messages | ||
| - **Commands bulk overwrite global application, bulk overwrite guild application** — Bulk overwrite all global application commands | ||
|
|
||
| ## 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. | ||
|
|
||
| <ToolList tools={tools} /> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| --- | ||
| title: 'Momentum connector' | ||
| tableOfContents: true | ||
| description: 'Connect to Momentum, the AI-powered revenue intelligence platform. Retrieve meetings with attendee and transcript details, ingest and remap meetings, run...' | ||
| sidebar: | ||
| label: 'Momentum' | ||
| overviewTitle: 'Quickstart' | ||
| connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/momentum.svg | ||
| connectorAuthType: API Key | ||
| connectorCategories: [AI, CRM & Sales, Transcription] | ||
| head: | ||
| - tag: style | ||
| content: | | ||
| .sl-markdown-content h2 { | ||
| font-size: var(--sl-text-xl); | ||
| } | ||
| .sl-markdown-content h3 { | ||
| font-size: var(--sl-text-lg); | ||
| } | ||
| --- | ||
|
|
||
| import ToolList from '@/components/ToolList.astro' | ||
| import { tools } from '@/data/agent-connectors/momentum' | ||
| import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' | ||
| import { AgentKitCredentials } from '@components/templates' | ||
| import { QuickstartGenericApikeySection } from '@components/templates' | ||
|
|
||
| <Steps> | ||
|
|
||
| 1. ### Install the SDK | ||
|
|
||
| <Tabs syncKey="tech-stack"> | ||
| <TabItem label="Node.js"> | ||
| ```bash frame="terminal" | ||
| npm install @scalekit-sdk/node | ||
| ``` | ||
| </TabItem> | ||
| <TabItem label="Python"> | ||
| ```bash frame="terminal" | ||
| pip install scalekit | ||
| ``` | ||
| </TabItem> | ||
| </Tabs> | ||
|
|
||
| Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) | ||
|
|
||
| 2. ### Set your credentials | ||
|
|
||
| <AgentKitCredentials /> | ||
|
|
||
| 3. ### Make your first call | ||
|
|
||
| <QuickstartGenericApikeySection connector="momentum" toolName="momentum_list_signal_definitions" providerName="Momentum" /> | ||
|
|
||
| </Steps> | ||
|
|
||
| ## What you can do | ||
|
|
||
| Connect this agent connector to let your agent: | ||
|
|
||
| - **Meeting ingest, remap** — Ingest a meeting (and optional transcript) from any source into Momentum | ||
| - **List meetings, signal definitions, signal executions** — Retrieve a paginated list of meetings from Momentum within a date range, including attendee and transcript details | ||
|
|
||
| ## 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. | ||
|
|
||
| <ToolList tools={tools} /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
sed -n '1,140p' src/components/templates/agent-connectors/_setup-discord.mdxRepository: scalekit-inc/developer-docs
Length of output: 4732
🌐 Web query:
Discord bot permissions bitfield 2260657982483703 invite kick ban permissions recommended default💡 Result:
The Discord permission bitfield 2260657982483703 is an integer that encodes a specific set of permissions for a bot or user [1][2][3]. Discord permissions are stored as a 64-bit integer where each bit represents a unique privilege [4][3][5]. To determine exactly which permissions are enabled for this specific bitfield, you can use a Discord permission calculator or a programming environment (such as JavaScript or Python) to perform a bitwise AND operation against the defined permission flags [6][7][5][8]. To check if a specific permission is included in 2260657982483703, you can use the following logic in many programming languages [6]: const bitfield = 2260657982483703n; const KICK_MEMBERS = 1n << 1n; // 2 const BAN_MEMBERS = 1n << 2n; // 4 const CREATE_INVITE = 1n << 0n; // 1 // Check for a permission const hasKick = (bitfield & KICK_MEMBERS) === KICK_MEMBERS; For practical purposes, you can copy the number 2260657982483703 and paste it into various community-provided Discord permission calculators (such as those found at discordapi.com, gatecord.com, or xgamingserver.com) to see a human-readable list of all checked permissions [7][3][5]. These tools automatically decode the bitfield by identifying which bits are set to 1 [5][9][8]. Regarding recommended default permissions: Discord does not have a single fixed set of recommended default permissions; you should only request the permissions your bot specifically requires to function [5][8]. For example, if your bot only needs to respond to slash commands, it may only need the Use Application Commands permission [4][5]. Requesting unnecessary permissions, especially sensitive ones like Administrator, Kick Members, or Ban Members, is generally discouraged for bot security and user trust [5][10]. Always review the official Discord API documentation for the specific requirements of your bot's features [6][1].
Citations:
🏁 Script executed:
Repository: scalekit-inc/developer-docs
Length of output: 242
🌐 Web query:
site:docs.discord.com developers topics permissions Discord bot permissions calculator bot page permissions💡 Result:
Discord bot permissions determine what actions an application can perform within a server or channel [1][2]. These permissions are managed via a bitfield system and are essential for controlling bot functionality and security [1][3]. Core Concepts: Permissions Bitfield: Discord stores permissions as a variable-length integer [3]. Each permission corresponds to a specific bit in this integer [3]. To determine the total permissions value, you use bitwise OR (
|) operations on the individual flag values [3]. To check if a bot has a specific permission, you use a bitwise AND (&) operation [3]. Guild-level vs. Channel-level: Permissions can be configured at the guild (server) level, which applies generally, or overridden at the channel level for specific roles or members [3][2]. OAuth2 and Authorization: When adding a bot to a server, you use an OAuth2 URL that includes the bot scope and a permissions integer [1][4]. This integer dictates the permissions the bot requests from the server administrator [1][5]. Managing Permissions: Developer Portal: When configuring your application in the Discord Developer Portal, you can select the required permissions under the Bot tab [6][5]. This ensures the correct permissions bitfield is included when users invite your bot [4]. Permission Overwrites: These allow you to adjust access on a per-channel basis [3][2]. For example, you might grant a bot the ability to send messages server-wide, but deny it that permission in a specific private channel [2]. Application Command Permissions: Distinct from standard bot permissions, these allow you to enable or disable specific slash commands for particular roles, users, or channels [3][7]. Best Practices: Request Minimal Permissions: Always follow the principle of least privilege [1]. Only request the permissions your bot absolutely needs to function [1]. Requesting excessive permissions can reduce user trust and may violate developer policies [1]. Use Big Integer Libraries: Because permissions are stored as large, variable-length integers, it is recommended to use your programming language's built-in Big Integer libraries for handling these values to ensure stability [3]. You can find the complete, up-to-date reference table of all permission flags, their hexadecimal integer values, and usage requirements in the official Discord documentation [3].Citations:
Remove the default bot-permissions bitfield
2260657982483703includes invite, kick, and ban permissions, so it is not a safe generic read/write preset. Use the minimum bitfield the bot needs, and link to the Discord permissions UI instead of the generic applications page.🤖 Prompt for AI Agents
Source: MCP tools