diff --git a/src/assets/docs/agent-connectors/dropboxmcp/step-1-developers-page.png b/src/assets/docs/agent-connectors/dropboxmcp/step-1-developers-page.png new file mode 100644 index 000000000..3bc557305 Binary files /dev/null and b/src/assets/docs/agent-connectors/dropboxmcp/step-1-developers-page.png differ diff --git a/src/assets/docs/agent-connectors/dropboxmcp/step-2-create-app.png b/src/assets/docs/agent-connectors/dropboxmcp/step-2-create-app.png new file mode 100644 index 000000000..1a1af4212 Binary files /dev/null and b/src/assets/docs/agent-connectors/dropboxmcp/step-2-create-app.png differ diff --git a/src/assets/docs/agent-connectors/dropboxmcp/step-3-app-credentials.png b/src/assets/docs/agent-connectors/dropboxmcp/step-3-app-credentials.png new file mode 100644 index 000000000..15a12f685 Binary files /dev/null and b/src/assets/docs/agent-connectors/dropboxmcp/step-3-app-credentials.png differ diff --git a/src/assets/docs/agent-connectors/slackmcp/enable-mcp.png b/src/assets/docs/agent-connectors/slackmcp/enable-mcp.png new file mode 100644 index 000000000..67a28e99d Binary files /dev/null and b/src/assets/docs/agent-connectors/slackmcp/enable-mcp.png differ diff --git a/src/assets/docs/agent-connectors/youmcp/create-api-key.png b/src/assets/docs/agent-connectors/youmcp/create-api-key.png new file mode 100644 index 000000000..cef442ab5 Binary files /dev/null and b/src/assets/docs/agent-connectors/youmcp/create-api-key.png differ diff --git a/src/assets/docs/agent-connectors/zoominfo/step-1-api-apps.png b/src/assets/docs/agent-connectors/zoominfo/step-1-api-apps.png new file mode 100644 index 000000000..f030570f0 Binary files /dev/null and b/src/assets/docs/agent-connectors/zoominfo/step-1-api-apps.png differ diff --git a/src/components/templates/agent-connectors/_section-after-setup-slackmcp-common-workflows.mdx b/src/components/templates/agent-connectors/_section-after-setup-slackmcp-common-workflows.mdx new file mode 100644 index 000000000..3bb68d93e --- /dev/null +++ b/src/components/templates/agent-connectors/_section-after-setup-slackmcp-common-workflows.mdx @@ -0,0 +1,57 @@ +import { Tabs, TabItem } from '@astrojs/starlight/components' + +## Common workflows + +### Proxy API call + + + + ```ts + import { ScalekitClient } from '@scalekit-sdk/node' + import 'dotenv/config' + + const scalekit = new ScalekitClient( + process.env.SCALEKIT_ENV_URL, + process.env.SCALEKIT_CLIENT_ID, + process.env.SCALEKIT_CLIENT_SECRET, + ) + const actions = scalekit.actions + + const connector = 'slackmcp' + const identifier = 'user_123' + + // Read a channel's message history + const result = await actions.executeTool({ + connector, + identifier, + toolName: 'slackmcp_slack_read_channel', + toolInput: { channel_id: 'C01234567' }, + }) + console.log(result) + ``` + + + ```python + from scalekit import ScalekitClient + import os + + scalekit_client = ScalekitClient( + os.environ['SCALEKIT_ENV_URL'], + os.environ['SCALEKIT_CLIENT_ID'], + os.environ['SCALEKIT_CLIENT_SECRET'], + ) + + connector = 'slackmcp' + identifier = 'user_123' + + # Read a channel's message history + result = scalekit_client.actions.execute_tool( + connector=connector, + identifier=identifier, + tool_name='slackmcp_slack_read_channel', + tool_input={'channel_id': 'C01234567'}, + ) + print(result) + ``` + + diff --git a/src/components/templates/agent-connectors/_setup-dropboxmcp.mdx b/src/components/templates/agent-connectors/_setup-dropboxmcp.mdx new file mode 100644 index 000000000..66ce64c53 --- /dev/null +++ b/src/components/templates/agent-connectors/_setup-dropboxmcp.mdx @@ -0,0 +1,38 @@ +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' + +Create a Dropbox OAuth app to get a client ID and secret, then register your Scalekit redirect URI so Dropbox can redirect users back after authorization. + + +1. ### Create a Dropbox developer app + + - Go to [dropbox.com/developers](https://www.dropbox.com/developers) and sign in. + - Click **Create apps**. + + ![](@/assets/docs/agent-connectors/dropboxmcp/step-1-developers-page.png) + +2. ### Configure the app + + On the app creation form: + - **Choose an API**: Select **Scoped access**. + - **Choose the type of access**: Select **Full Dropbox** — Access to all files and folders in a user's Dropbox. + - **Name your app**: Enter a name (e.g. `Agent Auth`). + - Click **Create app**. + + ![](@/assets/docs/agent-connectors/dropboxmcp/step-2-create-app.png) + +3. ### Copy your credentials and add the redirect URI + + On your app's settings page: + - Copy the **App key** (this is your client ID) and **App secret** (click **Show** to reveal). + - Under **OAuth 2** → **Redirect URIs**, add your Scalekit redirect URI and click **Add**. + + ![](@/assets/docs/agent-connectors/dropboxmcp/step-3-app-credentials.png) + +4. ### Create a connection in Scalekit + + - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**. + - Search for **Dropbox MCP** and click **Create**. + - Enter the **App key** as the client ID and **App secret** as the client secret. + - Note the **Connection name** — use this as `connection_name` in your code (e.g., `dropboxmcp`). + + diff --git a/src/components/templates/agent-connectors/_setup-slackmcp.mdx b/src/components/templates/agent-connectors/_setup-slackmcp.mdx new file mode 100644 index 000000000..b058237fc --- /dev/null +++ b/src/components/templates/agent-connectors/_setup-slackmcp.mdx @@ -0,0 +1,17 @@ +import { Steps } from '@astrojs/starlight/components' + +Before connecting Slack MCP, enable the Model Context Protocol feature in your Slack app settings. This allows your Slack app to share context with LLMs and agents. + + +1. ### Enable MCP in your Slack app + + - Go to [api.slack.com/apps](https://api.slack.com/apps) and open your app. + - In the left sidebar, under **Features**, click **Agents & AI Apps**. + - Under **Model Context Protocol**, toggle it on. + + ![Enable Model Context Protocol in Slack API dashboard](@/assets/docs/agent-connectors/slackmcp/enable-mcp.png) + +2. ### Connect in Scalekit + + In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **Slack MCP** and click **Create**. + diff --git a/src/components/templates/agent-connectors/_setup-youmcp.mdx b/src/components/templates/agent-connectors/_setup-youmcp.mdx new file mode 100644 index 000000000..9f5efb25e --- /dev/null +++ b/src/components/templates/agent-connectors/_setup-youmcp.mdx @@ -0,0 +1,54 @@ +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' + +Register your You.com API key with Scalekit so it can authenticate and proxy search requests on behalf of your users. You.com MCP uses API key authentication — there is no redirect URI or OAuth flow. + + +1. ### Get a You.com API key + + - Go to [you.platform](https://you.platform) and sign in or create an account. + - In the left sidebar, under **API Management**, click **API Keys**. + - Enter a name for your key (e.g. `Agent Auth`) and click **Create**. + + ![You.com API Keys page showing the Create new key form and existing keys list](@/assets/docs/agent-connectors/youmcp/create-api-key.png) + + - Copy the generated key — it starts with `ydc-sk-`. + +2. ### Create a connection in Scalekit + + - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**. + - Search for **You.com MCP** and click **Create**. + - Note the **Connection name** — use this as `connection_name` in your code (e.g., `youmcp`). + +3. ### Add a connected account + + Connected accounts link a specific user identifier in your system to a You.com API key. 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 **API Key**, then click **Save**. + + **Via API (for production)** + + + + ```ts + await scalekit.connect.upsertConnectedAccount({ + connectionName: 'youmcp', + identifier: 'user@example.com', + credentials: { apiKey: 'ydc-sk-...' }, + }) + ``` + + + ```python + scalekit_client.connect.upsert_connected_account( + connection_name="youmcp", + identifier="user@example.com", + credentials={"api_key": "ydc-sk-..."}, + ) + ``` + + + + diff --git a/src/components/templates/agent-connectors/_setup-zoominfo.mdx b/src/components/templates/agent-connectors/_setup-zoominfo.mdx new file mode 100644 index 000000000..c9deab892 --- /dev/null +++ b/src/components/templates/agent-connectors/_setup-zoominfo.mdx @@ -0,0 +1,28 @@ +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' + +Create a ZoomInfo OAuth app in the developer portal to get a client ID and client secret, then register your Scalekit redirect URI. + + +1. ### Create a ZoomInfo API app + + - Go to [developer.zoominfo.com](https://developer.zoominfo.com) and sign in with your ZoomInfo account. + - In the top-right corner, click **+ Create App**. + + ![ZoomInfo DevPortal API Apps page showing existing apps and the Create App button](@/assets/docs/agent-connectors/zoominfo/step-1-api-apps.png) + +2. ### Configure OAuth settings + + On the app creation form: + - Enter an **Application Name** (e.g. `Agent Auth`). + - Under **OAuth**, set the **Redirect URI** to your Scalekit redirect URI. + - Copy the **Client ID** shown on the app settings page. + - Click **Show** to reveal and copy the **Client Secret**. + +3. ### Create a connection in Scalekit + + - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**. + - Search for **ZoomInfo** and click **Create**. + - Enter the **Client ID** and **Client Secret** from your ZoomInfo app. + - Note the **Connection name** — use this as `connection_name` in your code (e.g., `zoominfo`). + + diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts index b2a2ad245..2da7557e6 100644 --- a/src/components/templates/agent-connectors/index.ts +++ b/src/components/templates/agent-connectors/index.ts @@ -72,6 +72,7 @@ export { default as SetupSalesloftSection } from './_setup-salesloft.mdx' export { default as SetupServicenowSection } from './_setup-servicenow.mdx' export { default as SetupSharepointSection } from './_setup-sharepoint.mdx' export { default as SetupSlackSection } from './_setup-slack.mdx' +export { default as SetupSlackmcpSection } from './_setup-slackmcp.mdx' export { default as SetupSnowflakeSection } from './_setup-snowflake.mdx' export { default as SetupSupadataSection } from './_setup-supadata.mdx' export { default as SetupSupermetricsmcpSection } from './_setup-supermetricsmcp.mdx' @@ -80,8 +81,11 @@ export { default as SetupTwitterSection } from './_setup-twitter.mdx' export { default as SetupVercelSection } from './_setup-vercel.mdx' export { default as SetupVimeoSection } from './_setup-vimeo.mdx' export { default as SetupXeroSection } from './_setup-xero.mdx' +export { default as SetupDropboxmcpSection } from './_setup-dropboxmcp.mdx' +export { default as SetupYoumcpSection } from './_setup-youmcp.mdx' export { default as SetupYoutubeSection } from './_setup-youtube.mdx' export { default as SetupZendeskSection } from './_setup-zendesk.mdx' +export { default as SetupZoominfoSection } from './_setup-zoominfo.mdx' export { default as SetupZoomSection } from './_setup-zoom.mdx' export { default as ConnectedAccountBigqueryserviceaccountSection } from './_connected-account-bigqueryserviceaccount.mdx' export { default as SectionAfterAuthenticationGoogledwdAuth } from './_section-after-authentication-googledwd-auth.mdx' @@ -160,6 +164,7 @@ export { default as SectionAfterSetupSalesforceCommonWorkflows } from './_sectio export { default as SectionAfterSetupServicenowCommonWorkflows } from './_section-after-setup-servicenow-common-workflows.mdx' export { default as SectionAfterSetupSharepointCommonWorkflows } from './_section-after-setup-sharepoint-common-workflows.mdx' export { default as SectionAfterSetupSlackCommonWorkflows } from './_section-after-setup-slack-common-workflows.mdx' +export { default as SectionAfterSetupSlackmcpCommonWorkflows } from './_section-after-setup-slackmcp-common-workflows.mdx' export { default as SectionAfterSetupSnowflakeCommonWorkflows } from './_section-after-setup-snowflake-common-workflows.mdx' export { default as SectionAfterSetupSnowflakekeyauthCommonWorkflows } from './_section-after-setup-snowflakekeyauth-common-workflows.mdx' export { default as SectionAfterSetupSupadataCommonWorkflows } from './_section-after-setup-supadata-common-workflows.mdx' diff --git a/src/content/docs/agentkit/connectors/dropboxmcp.mdx b/src/content/docs/agentkit/connectors/dropboxmcp.mdx new file mode 100644 index 000000000..549a65f62 --- /dev/null +++ b/src/content/docs/agentkit/connectors/dropboxmcp.mdx @@ -0,0 +1,79 @@ +--- +title: 'Dropbox MCP connector' +tableOfContents: true +description: 'Connect to Dropbox. Manage files and folders, create shared links, search content, and handle file requests from your AI workflows.' +sidebar: + label: 'Dropbox MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/drop_box.svg +connectorAuthType: OAuth 2.1 +connectorCategories: [Files & Documents, Productivity] +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/dropboxmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials, SetupDropboxmcpSection } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +
+ How to create a Dropbox OAuth app and get credentials + + + +
+ +3. ### Authorize and make your first call + + + +
+ +## What you can do + +Connect this agent connector to let your agent: + +- **I who am** — Retrieve the current Dropbox account profile information +- **Search records** — Search for files and folders in Dropbox by query with optional filters +- **Move records** — Move one or more files or folders to a new location in Dropbox +- **List shared links, folder, file requests** — List shared links for the account or a specific path with pagination +- **Get usage and quota, shared link metadata, file request** — Retrieve the current storage usage and quota for the Dropbox account +- **Link download** — Get temporary download URLs for one or more files + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/eracontextmcp.mdx b/src/content/docs/agentkit/connectors/eracontextmcp.mdx new file mode 100644 index 000000000..39e75b777 --- /dev/null +++ b/src/content/docs/agentkit/connectors/eracontextmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Era Context MCP connector' +tableOfContents: true +description: 'Connect to Era Context MCP. Access personal finance data including transactions, accounts, spending insights, and AI-powered financial knowledge from Era.' +sidebar: + label: 'Era Context MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/eracontext.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Accounting & Finance, AI, Productivity] +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/eracontextmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Update transactions ** — Bulk-update up to 100 transactions: set category, description, merchant name, or review status +- **Search transactions ** — Search and filter transactions by merchant name, description, amount range, category, date range, and direction (debit/credit) +- **Links transactions manage transfer** — List, confirm, or reject system-detected transfer pairs between transactions (e.g +- **Tags transactions manage transaction** — Create, list, update, delete, assign, or remove user-defined tags on transactions +- **Transaction transactions manage manual** — Create, update, or delete transactions on a manual account +- **Categories transactions manage** — Create, update, hide, delete, merge, or reorder spending categories + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/githubmcp.mdx b/src/content/docs/agentkit/connectors/githubmcp.mdx index e0b503ed7..56b60cfdc 100644 --- a/src/content/docs/agentkit/connectors/githubmcp.mdx +++ b/src/content/docs/agentkit/connectors/githubmcp.mdx @@ -22,7 +22,9 @@ head: import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/githubmcp' import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' -import { AgentKitCredentials, SetupGithubmcpSection, QuickstartGenericOauthSection } from '@components/templates' +import { AgentKitCredentials } from '@components/templates' +import { SetupGithubmcpSection } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' @@ -49,7 +51,7 @@ import { AgentKitCredentials, SetupGithubmcpSection, QuickstartGenericOauthSecti 3. ### Set up the connector - Register your GitHub credentials with Scalekit so it handles the token lifecycle. You do this once per environment. + Register your GitHub MCP credentials with Scalekit so it handles the token lifecycle. You do this once per environment.
Dashboard setup steps diff --git a/src/content/docs/agentkit/connectors/mailerlitemcp.mdx b/src/content/docs/agentkit/connectors/mailerlitemcp.mdx new file mode 100644 index 000000000..89ad7d20f --- /dev/null +++ b/src/content/docs/agentkit/connectors/mailerlitemcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Mailerlite MCP connector' +tableOfContents: true +description: 'Connect to MailerLite MCP. Manage email campaigns, subscribers, groups, automations, and forms from your AI workflows.' +sidebar: + label: 'Mailerlite MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/mailerlite.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Marketing, Automation, Communication] +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/mailerlitemcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Update webhook, subscriber, segment** — Update the configuration of an existing webhook +- **Group unassign subscriber from, import subscribers to, assign subscriber to** — Remove a subscriber from a group by subscriber ID and group ID +- **Lines suggest subject** — Generate and return improved subject line suggestions based on provided input +- **Conversation start automation** — Start a guided conversation to help build an automation from a natural language request +- **Send test automation** — Send a test run of an automation to a specified email address +- **Resource select** — Select a specific MailerLite resource by ID and type for use in an automation workflow + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/mixmaxmcp.mdx b/src/content/docs/agentkit/connectors/mixmaxmcp.mdx new file mode 100644 index 000000000..9efde7ce4 --- /dev/null +++ b/src/content/docs/agentkit/connectors/mixmaxmcp.mdx @@ -0,0 +1,69 @@ +--- +title: 'Mixmax MCP connector' +tableOfContents: true +description: 'Connect to Mixmax MCP. Manage email sequences, templates, contacts, and engagement analytics from your AI workflows.' +sidebar: + label: 'Mixmax MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/mixmax.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Communication, Marketing, 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/mixmaxmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Sequences records** — Query and inspect Mixmax email sequences +- **Info mixmax** — Retrieve general information about the Mixmax account and configuration +- **Meetings records** — Query Mixmax meetings and calendar data + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/neonmcp.mdx b/src/content/docs/agentkit/connectors/neonmcp.mdx new file mode 100644 index 000000000..3f894297e --- /dev/null +++ b/src/content/docs/agentkit/connectors/neonmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Neon MCP connector' +tableOfContents: true +description: 'Connect to Neon MCP. Manage Neon serverless Postgres databases, projects, branches, and queries from your AI workflows.' +sidebar: + label: 'Neon MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/neon.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Databases, Developer Tools, AI] +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/neonmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Search records** — Search across all organizations, projects, and branches by keyword, returning matching items with IDs and URLs +- **Run sql transaction, sql** — Execute multiple SQL statements as a single transaction against a Neon database +- **Parent reset from** — Reset a branch to its parent branch state, discarding all changes made on the branch +- **Api provision neon data** — Provision the Neon Data API for HTTP-based access to a Postgres database with JWT authentication +- **Auth provision neon, configure neon** — Provision Neon Auth for a branch, enabling managed authentication backed by Better Auth +- **Query prepare, complete** — Start a query tuning session by analyzing execution plans and suggesting optimizations on a temporary branch + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/nocodbmcp.mdx b/src/content/docs/agentkit/connectors/nocodbmcp.mdx new file mode 100644 index 000000000..8d90f81a8 --- /dev/null +++ b/src/content/docs/agentkit/connectors/nocodbmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'NocoDB MCP connector' +tableOfContents: true +description: 'Connect to NocoDB MCP. Create and manage databases, tables, records, views, and fields from your AI workflows.' +sidebar: + label: 'NocoDB MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/nocodb.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Databases, Productivity, 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/nocodbmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Updaterecords records** — Update records in a table +- **Readattachment records** — Read attachments in a record +- **Queryrecords records** — Query Records from a Table +- **Gettableslist records** — List tables accessible by user +- **Gettableschema records** — Get the table schema including fields and views information +- **Getrecord records** — Fetch a record by ID + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/pandadocmcp.mdx b/src/content/docs/agentkit/connectors/pandadocmcp.mdx new file mode 100644 index 000000000..2b0d2401d --- /dev/null +++ b/src/content/docs/agentkit/connectors/pandadocmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Pandadoc MCP connector' +tableOfContents: true +description: 'Connect to PandaDoc MCP. Create, send, and manage documents, templates, and e-signatures directly from your AI workflows.' +sidebar: + label: 'Pandadoc MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/pandadoc.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Productivity, Automation, Files & Documents] +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/pandadocmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **List templates, documents** — List templates with optional filters for search, tags, folder, and shared/deleted status +- **Get templates details, documents summary, documents status** — Get full details for a template including roles, fields, tokens, and pricing tables +- **Create templates, documents** — Create a new template from a publicly accessible PDF URL with optional name, folder, tokens, and owner +- **Update documents** — Update a draft document — name, recipients, fields, tokens, images, pricing tables, and metadata +- **Change documents status** — Manually change a document status to completed, expired, paid, or voided +- **Send documents** — Send a draft document to recipients for review and signature with optional message, subject, and CC settings + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/plainmcp.mdx b/src/content/docs/agentkit/connectors/plainmcp.mdx new file mode 100644 index 000000000..334842b8c --- /dev/null +++ b/src/content/docs/agentkit/connectors/plainmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Plain MCP connector' +tableOfContents: true +description: 'Connect to Plain MCP. Manage customer support threads, labels, tenants, Help Center articles, and thread field schemas directly from your AI workflows.' +sidebar: + label: 'Plain MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/plain.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Customer Support, Productivity] +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/plainmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Upsertthreadfield records** — Set or update a custom field value on a thread +- **Upserttenantfield records** — Set or update a custom field value on a tenant +- **Upserttenant records** — Create or update a tenant by external ID or tenant ID +- **Upserthelpcenterarticle records** — Create or update a Help Center article by slug +- **Upsertcustomer records** — Create or update a customer by external ID, email, or customer ID +- **Updatethreadtitle records** — Update the title of an existing thread + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/pylonmcp.mdx b/src/content/docs/agentkit/connectors/pylonmcp.mdx new file mode 100644 index 000000000..0b83116f0 --- /dev/null +++ b/src/content/docs/agentkit/connectors/pylonmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Pylon MCP connector' +tableOfContents: true +description: 'Connect to Pylon MCP. Manage customer issues, accounts, projects, milestones, and tasks from your AI workflows.' +sidebar: + label: 'Pylon MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/pylon.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Customer Support, Project Management] +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/pylonmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Files upload account** — Upload one or more files to an account +- **Update task, project, milestone** — Update a task title, status, assignee, due date, or other fields by its ID +- **Search tasks, projects, issues** — Search tasks by text, project, account, assignee, and status +- **Get user, tasks, task** — Retrieve a single user by their ID or email +- **Delete task** — Permanently delete a task by its ID +- **Create task, project from template, project** — Create a new task with a title + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/slackmcp.mdx b/src/content/docs/agentkit/connectors/slackmcp.mdx new file mode 100644 index 000000000..2542b4ea4 --- /dev/null +++ b/src/content/docs/agentkit/connectors/slackmcp.mdx @@ -0,0 +1,87 @@ +--- +title: 'Slack MCP connector' +tableOfContents: true +description: 'Connect to Slack MCP. Send and read messages, search channels and users, manage canvases, and react to messages across your Slack workspace.' +sidebar: + label: 'Slack MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/slack.svg +connectorAuthType: OAuth 2.1 +connectorCategories: [Communication, Collaboration, Productivity] +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/slackmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { SetupSlackmcpSection } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' +import { SectionAfterSetupSlackmcpCommonWorkflows } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Set up the connector + + Register your Slack MCP credentials with Scalekit so it handles the token lifecycle. You do this once per environment. + +
+ Dashboard setup steps + + + +
+ +4. ### Authorize and make your first call + + + +
+ +## What you can do + +Connect this agent connector to let your agent: + +- Send messages — post to channels, DMs, and threads across your Slack workspace +- Read conversations — retrieve channel history, thread replies, and direct messages +- Search channels and users — find channels, team members, and public messages by keyword +- Manage canvases — create, read, and update Slack Canvas documents +- React to messages — add and retrieve emoji reactions on any message +- Schedule messages — deliver messages to channels at a specified future time + + + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/stripemcp.mdx b/src/content/docs/agentkit/connectors/stripemcp.mdx new file mode 100644 index 000000000..ce9bd339e --- /dev/null +++ b/src/content/docs/agentkit/connectors/stripemcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Stripe MCP connector' +tableOfContents: true +description: 'Connect to Stripe MCP. Manage customers, invoices, subscriptions, refunds, disputes, and payments from your AI workflows.' +sidebar: + label: 'Stripe MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/stripe.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Accounting & Finance, Automation] +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/stripemcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Update subscription, dispute** — Update an active subscription — change its price, quantity, or proration behavior +- **Recommender stripe integration** — Get a recommendation on which Stripe integration pattern best fits a use case (e.g +- **Search stripe api, stripe resources, stripe documentation** — Search available Stripe API operations by keyword +- **Execute stripe api** — Execute any Stripe API operation by its operation ID and parameters +- **Details stripe api** — Get the full parameter schema for a specific Stripe API operation +- **Send stripe mcp feedback** — Submit feedback about a Stripe MCP tool experience + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/youmcp.mdx b/src/content/docs/agentkit/connectors/youmcp.mdx new file mode 100644 index 000000000..1ffdb610e --- /dev/null +++ b/src/content/docs/agentkit/connectors/youmcp.mdx @@ -0,0 +1,76 @@ +--- +title: 'You.com MCP connector' +tableOfContents: true +description: 'Connect to You.com MCP. Search the web, research topics with cited sources, and extract full page content using You.com''s AI-powered search and research...' +sidebar: + label: 'You.com MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/you.svg +connectorAuthType: Bearer Token +connectorCategories: [Search, AI] +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/youmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericApikeySection, SetupYoumcpSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +
+ Dashboard setup steps + + + +
+ +3. ### Make your first call + + + +
+ +## What you can do + +Connect this agent connector to let your agent: + +- **You-search records** — Search the web and news using You.com +- **You-research records** — Research a topic in depth using You.com's AI +- **You-contents records** — Extract content from one or more web pages in markdown, HTML, or structured metadata format + +## 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. + + diff --git a/src/content/docs/agentkit/connectors/zoominfo.mdx b/src/content/docs/agentkit/connectors/zoominfo.mdx new file mode 100644 index 000000000..38d6a88a7 --- /dev/null +++ b/src/content/docs/agentkit/connectors/zoominfo.mdx @@ -0,0 +1,79 @@ +--- +title: 'ZoomInfo connector' +tableOfContents: true +description: 'Connect to ZoomInfo to search and enrich B2B contact and company data, access intent signals, discover technographic insights, and manage GTM Studio...' +sidebar: + label: 'ZoomInfo' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/zoominfo.svg +connectorAuthType: OAuth 2.0 +connectorCategories: [CRM & Sales, Analytics, Marketing] +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/zoominfo' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials, SetupZoominfoSection } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +
+ How to create a ZoomInfo OAuth app and get credentials + + + +
+ +3. ### Authorize and make your first call + + + +
+ +## What you can do + +Connect this agent connector to let your agent: + +- **Settings upsert** — Create or update the customer settings singleton for the authenticated ZoomInfo account +- **Segment upsert, unarchive, archive** — Create a new Ideal Customer Profile (ICP) or update an existing one +- **Offering upsert, unarchive, archive** — Create a new product/service or update an existing one +- **Interactions upsert content** — Create or update a content interaction engagement record (website visit, email click, form submission, etc.) +- **Competitor upsert, unarchive, archive** — Create a new competitor record or update an existing one +- **Persona upsert buyer, unarchive buyer, archive buyer** — Create a new buyer persona or update an existing one + +## 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. + + diff --git a/src/data/agent-connectors/capabilities.json b/src/data/agent-connectors/capabilities.json index 5d550164a..5cdad9c4f 100644 --- a/src/data/agent-connectors/capabilities.json +++ b/src/data/agent-connectors/capabilities.json @@ -1,12 +1,12 @@ { "_comment": "Hand-curated 'What you can do' bullets per connector. Key = provider slug (matches src/data/agent-connectors/.ts). The sync script uses these instead of auto-generating from tool names. Add up to 6 bullets per connector. Omit a connector to fall back to auto-generation.", "atlassianmcp": [ - "**Manage Jira issues** — create, edit, transition, comment on, and link issues; add worklogs", - "**Search with JQL** — query issues using Jira Query Language with full field and filter support", - "**Work with Confluence** — create, update, and retrieve pages; add footer and inline comments", - "**Manage Compass components** — create, get, and search services, libraries, and applications; define custom fields and relationships", - "**Look up users and resources** — resolve Atlassian account IDs, list accessible cloud sites, and find project metadata", - "**Fetch Atlassian content** — retrieve any Atlassian object by its ARI or URL (e.g. a Jira issue or Confluence page URL)" + "**Manage Jira issues** \u2014 create, edit, transition, comment on, and link issues; add worklogs", + "**Search with JQL** \u2014 query issues using Jira Query Language with full field and filter support", + "**Work with Confluence** \u2014 create, update, and retrieve pages; add footer and inline comments", + "**Manage Compass components** \u2014 create, get, and search services, libraries, and applications; define custom fields and relationships", + "**Look up users and resources** \u2014 resolve Atlassian account IDs, list accessible cloud sites, and find project metadata", + "**Fetch Atlassian content** \u2014 retrieve any Atlassian object by its ARI or URL (e.g. a Jira issue or Confluence page URL)" ], "salesforce": [ "**Read CRM records** \u2014 retrieve accounts, contacts, leads, opportunities, and cases by ID or search query", @@ -92,44 +92,44 @@ "**Manage structure** \u2014 create and delete columns, manage subitems, webhooks, workspaces, teams, and tags" ], "googledwd": [ - "**Read and search emails** — fetch messages, threads, and attachments from any Gmail label or inbox", - "**Send and manage emails** — compose messages, manage drafts, and modify labels on Gmail messages", - "**Manage Google Drive files** — share, move, copy, and query activity on files and folders in Google Drive", - "**Access Google Calendar** — read, create, and manage calendar events across a user's calendars", - "**Manage Google Vault** — list matters and manage legal holds in Google Vault", - "**Administer user settings** — update vacation auto-reply settings and other Gmail account configurations" + "**Read and search emails** \u2014 fetch messages, threads, and attachments from any Gmail label or inbox", + "**Send and manage emails** \u2014 compose messages, manage drafts, and modify labels on Gmail messages", + "**Manage Google Drive files** \u2014 share, move, copy, and query activity on files and folders in Google Drive", + "**Access Google Calendar** \u2014 read, create, and manage calendar events across a user's calendars", + "**Manage Google Vault** \u2014 list matters and manage legal holds in Google Vault", + "**Administer user settings** \u2014 update vacation auto-reply settings and other Gmail account configurations" ], "bitlymcp": [ - "**Create and manage short links** — shorten URLs, create links with custom back-halves, update link metadata, and delete links", - "**Create and manage QR codes** — generate QR codes for links, update QR code settings, and retrieve QR code images", - "**Analyze link performance** — get click summaries, engagement metrics, and breakdowns by city, country, device, referrer, and referring domain", - "**Analyze QR code scans** — get scan summaries and breakdowns by city, country, device, and browser", - "**Analyze group-level engagement** — query top links, clicks, scans, and engagement trends across all links in a group", - "**Manage account structure** — retrieve organizations, groups, custom domains, and user details" + "**Create and manage short links** \u2014 shorten URLs, create links with custom back-halves, update link metadata, and delete links", + "**Create and manage QR codes** \u2014 generate QR codes for links, update QR code settings, and retrieve QR code images", + "**Analyze link performance** \u2014 get click summaries, engagement metrics, and breakdowns by city, country, device, referrer, and referring domain", + "**Analyze QR code scans** \u2014 get scan summaries and breakdowns by city, country, device, and browser", + "**Analyze group-level engagement** \u2014 query top links, clicks, scans, and engagement trends across all links in a group", + "**Manage account structure** \u2014 retrieve organizations, groups, custom domains, and user details" ], "klaviyomcp": [ - "**Manage campaigns** — create campaigns, assign email templates to campaign messages, and retrieve campaign details and performance reports", - "**Manage profiles** — create, update, and retrieve customer profiles; subscribe and unsubscribe profiles from marketing channels", - "**Analyze flows and metrics** — fetch flow details and reports; query and aggregate event metric data with custom dimensions", - "**Manage email templates** — create and retrieve reusable email templates for campaigns", - "**Browse lists and segments** — retrieve lists, segments, and catalog items to understand your audience", - "**Manage translations** — create, update, delete, and list translation collections for multi-language content" + "**Manage campaigns** \u2014 create campaigns, assign email templates to campaign messages, and retrieve campaign details and performance reports", + "**Manage profiles** \u2014 create, update, and retrieve customer profiles; subscribe and unsubscribe profiles from marketing channels", + "**Analyze flows and metrics** \u2014 fetch flow details and reports; query and aggregate event metric data with custom dimensions", + "**Manage email templates** \u2014 create and retrieve reusable email templates for campaigns", + "**Browse lists and segments** \u2014 retrieve lists, segments, and catalog items to understand your audience", + "**Manage translations** \u2014 create, update, delete, and list translation collections for multi-language content" ], "clarifymcp": [ - "**Manage CRM records** — create, update, delete, and query records across any custom object type", - "**Manage campaigns** — create, update, delete, and list outreach campaigns with multi-step email sequences", - "**Find and import leads** — search for leads by criteria and import them into campaigns or lists", - "**Manage lists and segments** — create, update, delete, and list audience lists for targeting", - "**Extend the data model** — create, update, and delete custom objects and fields to match your schema", - "**Analyze and query data** — run analytics queries and retrieve structured data with custom filters" + "**Manage CRM records** \u2014 create, update, delete, and query records across any custom object type", + "**Manage campaigns** \u2014 create, update, delete, and list outreach campaigns with multi-step email sequences", + "**Find and import leads** \u2014 search for leads by criteria and import them into campaigns or lists", + "**Manage lists and segments** \u2014 create, update, delete, and list audience lists for targeting", + "**Extend the data model** \u2014 create, update, and delete custom objects and fields to match your schema", + "**Analyze and query data** \u2014 run analytics queries and retrieve structured data with custom filters" ], "clickhouse": [ - "**Run SELECT queries** — execute read-only SQL queries against any ClickHouse service and retrieve results directly in your agent", - "**Explore schema** — list databases, tables, and column types to understand your data model before writing queries", - "**Manage services** — list, inspect, and get full details for ClickHouse Cloud services (clusters) in an organization", - "**Monitor backups** — list service backups, get backup details, and retrieve the backup schedule and retention config", - "**Inspect ClickPipes** — list and retrieve data ingestion pipeline status and configuration", - "**Track costs** — get billing and usage cost data for an organization over a custom date range" + "**Run SELECT queries** \u2014 execute read-only SQL queries against any ClickHouse service and retrieve results directly in your agent", + "**Explore schema** \u2014 list databases, tables, and column types to understand your data model before writing queries", + "**Manage services** \u2014 list, inspect, and get full details for ClickHouse Cloud services (clusters) in an organization", + "**Monitor backups** \u2014 list service backups, get backup details, and retrieve the backup schedule and retention config", + "**Inspect ClickPipes** \u2014 list and retrieve data ingestion pipeline status and configuration", + "**Track costs** \u2014 get billing and usage cost data for an organization over a custom date range" ], "clickup": [ "**Manage tasks** \u2014 create, update, delete, and search tasks; set priorities, due dates, assignees, and statuses", @@ -158,5 +158,13 @@ "**Manage Zapier Skills** \u2014 create, retrieve, update, and delete named reusable workflow documents that define how to accomplish multi-step tasks", "**List enabled actions** \u2014 inspect which apps and action keys are currently active so the agent always uses correct, up-to-date identifiers", "**Get configuration URL** \u2014 surface the Zapier MCP configuration page so users can add, edit, or remove connected apps and actions" + ], + "slackmcp": [ + "Send messages \u2014 post to channels, DMs, and threads across your Slack workspace", + "Read conversations \u2014 retrieve channel history, thread replies, and direct messages", + "Search channels and users \u2014 find channels, team members, and public messages by keyword", + "Manage canvases \u2014 create, read, and update Slack Canvas documents", + "React to messages \u2014 add and retrieve emoji reactions on any message", + "Schedule messages \u2014 deliver messages to channels at a specified future time" ] } diff --git a/src/data/agent-connectors/catalog.ts b/src/data/agent-connectors/catalog.ts index b52c00b06..69575f634 100644 --- a/src/data/agent-connectors/catalog.ts +++ b/src/data/agent-connectors/catalog.ts @@ -7,674 +7,744 @@ export interface ProviderMeta { } export const catalog: Record = { - todoistmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/todoist.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Productivity', 'Project Management'], - }, - planemcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/plane.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Project Management', 'Productivity'], - }, - githubmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/github.png', - authType: 'OAuth 2.1', - categories: ['Developer Tools', 'Collaboration'], - }, - context7mcp: { - iconUrl: 'https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/context7.svg', - authType: 'API Key', - categories: ['AI', 'Developer Tools', 'Productivity'], - }, - slitemcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/slite.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Collaboration', 'Productivity', 'Files & Documents'], - }, - scarpflymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/scrapfly.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Search', 'AI', 'Developer Tools'], - }, - tallymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/tally.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Productivity', 'Automation'], - }, - swaggermcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/swagger.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Developer Tools', 'Productivity'], - }, - sybilmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/sybill.svg', - authType: 'OAuth 2.1/DCR', - categories: ['CRM & Sales', 'AI', 'Analytics'], - }, - ticktickmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/ticktick .svg', - authType: 'OAuth 2.1/DCR', - categories: ['Productivity', 'Project Management'], - }, - tinyfishmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/tinyfish.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Automation', 'AI', 'Developer Tools'], - }, - zenrowsmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/zenrows.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Developer Tools', 'Automation'], - }, - mercurymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/mercury.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Accounting & Finance', 'Analytics', 'Productivity'], - }, - lunarcrushmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/lunarcrush.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Analytics', 'AI', 'Accounting & Finance'], - }, - firefliesmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/fireflies.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Transcription', 'Productivity', 'Collaboration'], - }, - googlelooker: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/googlelooker.svg', - authType: 'OAuth 2.0', - categories: ['Analytics', 'Databases', 'Productivity'], - }, - cloudfaremcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/cloudflare.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Developer Tools', 'Automation'], - }, - airopsmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/airops.svg', - authType: 'API Key', - categories: ['AI', 'Marketing', 'Analytics'], - }, - sanitymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/sanity.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Developer Tools', 'Files & Documents', 'Productivity'], - }, - fiscalaimcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/fiscalai.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Analytics', 'AI', 'Accounting & Finance'], - }, - otteraimcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/otterai.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Transcription', 'Productivity', 'Collaboration'], - }, - webflowmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/webflow.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Design', 'Developer Tools', 'Productivity'], - }, - revealedaimcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/revealedai.svg', - authType: 'OAuth 2.1/DCR', - categories: ['CRM & Sales', 'Analytics', 'AI'], - }, - cartamcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/carta.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Accounting & Finance', 'Analytics', 'Productivity'], - }, - candidmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/candid.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Search', 'AI', 'Databases'], - }, - salesloft: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/salesloft.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales', 'Automation', 'Communication'], - }, - gainsight: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/gainsight.svg', - authType: 'API Key', - categories: ['CRM & Sales', 'Customer Support', 'Analytics'], - }, - biorendermcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/biorendermcp.svg', - authType: 'OAuth 2.1/DCR', - categories: ['AI', 'Design', 'Search'], - }, - makemcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/make.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Automation', 'Productivity', 'Developer Tools'], - }, - lucidmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/lucid.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Design', 'Productivity', 'Collaboration'], - }, - jotformmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/jotform.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Productivity', 'Automation'], - }, - gustomcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/gusto.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Accounting & Finance', 'Productivity'], - }, - tavilymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/tavily.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Search', 'AI', 'Developer Tools'], - }, - firecrawlmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/firecrawl.svg', - authType: 'Bearer Token', - categories: ['AI', 'Developer Tools', 'Search'], - }, - adobemarketingagentmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/adobe.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'Analytics', 'AI'], - }, - grainmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/grain.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Transcription', 'Collaboration', 'AI'], - }, - leadiq: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/leadiq.svg', - authType: 'API Key', - categories: ['CRM & Sales', 'Analytics'], - }, - adzvisermcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/adzviser.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'Analytics'], - }, - commonroommcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/commonroom.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'Analytics', 'CRM & Sales'], - }, - fellowaimcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/fellowai.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Productivity', 'Project Management'], - }, - supermetricsmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/supermetrics.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'Analytics', 'CRM & Sales'], - }, - customeriomcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/customerio.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'Analytics', 'CRM & Sales'], - }, - zapiermcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/zapier.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Automation', 'Productivity', 'Developer Tools'], - }, - clickhouse: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/clickhouse.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Analytics', 'Developer Tools', 'Databases'], - }, - atlassianmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/atlassian.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Project Management', 'Productivity', 'Collaboration'], - }, - ahrefsmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/ahrefs.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'CRM & Sales'], - }, - clarifymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/clarify.svg', - authType: 'OAuth 2.1/DCR', - categories: ['CRM & Sales', 'Productivity', 'Analytics'], - }, - bitlymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/bitly.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'CRM & Sales'], - }, - klaviyomcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/klaviyo.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Marketing', 'CRM & Sales'], - }, - googledwd: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google.svg', - authType: 'Service Account (DWD)', - categories: ['Productivity', 'Communication'], - }, - xero: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/xero.svg', - authType: 'OAuth 2.0', - categories: ['Accounting & Finance'], - }, - mailchimp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/mailchimp.svg', - authType: 'OAuth 2.0', - categories: ['Marketing', 'Automation', 'Analytics'], - }, - datadog: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/datadog.svg', - authType: 'API Key', - categories: ['Developer Tools', 'Monitoring'], - }, - quickbooks: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/Quickbooks.svg', - authType: 'OAuth 2.0', - categories: ['Accounting & Finance'], - }, - tableau: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/tableau.svg', - authType: 'API Key', - categories: ['Analytics', 'Productivity'], - }, - heyreach: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/heyreach.svg', - authType: 'API Key', - categories: ['CRM & Sales'], - }, - posthogmcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/posthog-1.svg', - authType: 'OAuth 2.1/DCR', - categories: ['Analytics'], - }, - box: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/box.svg', - authType: 'OAuth 2.0', - categories: ['Productivity', 'Files & Documents'], - }, - bigqueryserviceaccount: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/bigquery.svg', - authType: 'Service Account', - categories: ['Analytics', 'Databases'], - }, - close: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/close.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales', 'Communication'], - }, - miro: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/Miro.svg', - authType: 'OAuth 2.0', - categories: ['Productivity', 'Collaboration', 'Design'], - }, - bitbucket: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/bitbucket.svg', - authType: 'OAuth 2.0', - categories: ['Developer Tools', 'Collaboration'], - }, - dynamo: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/dynamo.svg', - authType: 'Bearer Token', - categories: ['Accounting & Finance', 'CRM & Sales', 'Databases'], - }, - databricksworkspace: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/databricks-1.svg', - authType: 'Service Principal (OAuth 2.0)', - categories: ['Analytics', 'Automation', 'Databases'], - }, - diarize: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/diarize.svg', - authType: 'Bearer Token', - categories: ['Transcription', 'Media', 'Productivity', 'Analytics'], - }, - parallelaitaskmcp: { - iconUrl: 'https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/parallel-ai.svg', - authType: 'Bearer Token', - categories: ['Productivity', 'AI', 'Developer Tools'], - }, - calendly: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/calendly.svg', - authType: 'OAuth 2.0', - categories: ['Productivity', 'Calendar'], - }, - apifymcp: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/apify.svg', - authType: 'Bearer Token', - categories: ['AI', 'Automation', 'Developer Tools'], - }, - evertrace: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/evertrace.png', - authType: 'Bearer Token', - categories: ['CRM & Sales'], - }, - figma: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/figma.svg', - authType: 'OAuth 2.0', - categories: ['Design', 'Collaboration'], - }, - jiminny: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/jiminny.svg', - authType: 'Bearer Token', - categories: ['CRM & Sales', 'AI', 'Automation', 'Transcription'], - }, - pagerduty: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/pagerduty.svg', - authType: 'OAuth 2.0', - categories: ['Developer Tools', 'Monitoring'], - }, - vercel: { - iconUrl: 'https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/vercel.svg', - authType: 'OAuth 2.0', - categories: ['Developer Tools'], - }, - gitlab: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/gitlab.svg', - authType: 'OAuth 2.0', - categories: ['Developer Tools', 'Collaboration'], - }, - pipedrive: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/pipedrive.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales'], - }, - linkedin: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/linkedin.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales', 'Marketing', 'Communication'], - }, - outreach: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/outreach.png', - authType: 'OAuth 2.0', - categories: ['CRM & Sales'], - }, - granolamcp: { - iconUrl: 'https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/granola.svg', - authType: 'OAuth 2.1/DCR', - categories: ['AI', 'Automation', 'Communication', 'Transcription'], - }, - twitter: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/X.svg', - authType: 'Bearer Token', - categories: ['Communication', 'Marketing'], - }, - discord: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/discord.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Collaboration'], - }, - phantombuster: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/phantombuster.svg', - authType: 'API Key', - categories: ['AI', 'Automation'], - }, - affinity: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/affinity.svg', - authType: 'Bearer Token', - categories: ['CRM & Sales'], - }, - supadata: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/supadata.svg', - authType: 'API Key', - categories: ['Analytics', 'Search'], - }, - granola: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/granola.svg', - authType: 'Bearer Token', - categories: ['AI', 'Automation', 'Communication', 'Transcription'], - }, - brave: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/brave.svg', - authType: 'API Key', - categories: ['Analytics', 'Search'], - }, - harvestapi: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/harvestapi.svg', - authType: 'API Key', - categories: ['Marketing', 'Analytics'], - }, - exa: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/exa.svg', - authType: 'API Key', - categories: ['Analytics', 'AI', 'Automation', 'Search'], - }, - snowflakekeyauth: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/snowflake.svg', - authType: 'Bearer Token', - categories: ['Analytics', 'Databases'], - }, - attio: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/attio.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales'], - }, - apollo: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/apollo.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales'], - }, - vimeo: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/vimeo.svg', - authType: 'OAuth 2.0', - categories: ['Media'], - }, - youtube: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/youtube.svg', - authType: 'OAuth 2.0', - categories: ['Media', 'Marketing'], - }, - googleslides: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_slides.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - attention: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/attention.svg', - authType: 'API Key', - categories: ['AI', 'Automation', 'CRM & Sales'], - }, - clari_copilot: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/clari.svg', - authType: 'API Key', - categories: ['CRM & Sales', 'AI', 'Automation', 'Transcription'], - }, - chorus: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/chorus.svg', - authType: 'Basic Auth', - categories: ['CRM & Sales', 'AI', 'Automation', 'Transcription'], - }, - google_ads: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_ads.png', - authType: 'OAuth 2.0', - categories: ['Marketing', 'CRM & Sales'], - }, - servicenow: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/servicenow.svg', - authType: 'OAuth 2.0', - categories: ['Customer Support', 'Communication'], - }, - zendesk: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/zendesk.svg', - authType: 'API KEY', - categories: ['Customer Support', 'Communication'], - }, - googleforms: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_forms.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - microsoftword: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/word.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - microsoftexcel: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/excel.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents', 'Analytics'], - }, - onenote: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/onenote.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - snowflake: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/snowflake.svg', - authType: 'OAuth 2.0', - categories: ['Analytics', 'Databases'], - }, - onedrive: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/onedrive.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - bigquery: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/bigquery.svg', - authType: 'OAuth 2.0', - categories: ['Analytics', 'Databases'], - }, - airtable: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/airtable.svg', - authType: 'OAuth 2.0', - categories: ['Project Management', 'Analytics'], - }, - clickup: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/clickup.svg', - authType: 'OAuth 2.0', - categories: ['Project Management', 'Collaboration', 'Productivity'], - }, - fathom: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/fathom.svg', - authType: 'API Key', - categories: ['AI', 'Automation', 'Communication', 'Transcription'], - }, - googlemeet: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_meet.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Calendar'], - }, - googlesheets: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_sheets.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents', 'Analytics'], - }, - intercom: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/intercom.svg', - authType: 'OAuth 2.0', - categories: ['Customer Support', 'Communication'], - }, - monday: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/monday.svg', - authType: 'OAuth 2.0', - categories: ['Project Management', 'Collaboration', 'Productivity'], - }, - sharepoint: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/sharepoint.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - outlook: { - iconUrl: 'https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/outlook.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Calendar'], - }, - confluence: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/confluence.svg', - authType: 'OAuth 2.0', - categories: ['Project Management', 'Files & Documents', 'Collaboration'], - }, - gong: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/gong.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales', 'AI', 'Automation', 'Transcription'], - }, - slack: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/slack.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Collaboration'], - }, - hubspot: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/hub_spot.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales'], - }, - salesforce: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/sales_force.svg', - authType: 'OAuth 2.0', - categories: ['CRM & Sales'], - }, - googledocs: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_docs.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - googledrive: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_drive.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - microsoftteams: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/microsoft-teams.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Collaboration'], - }, - zoom: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/zoom.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Calendar'], - }, - linear: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/linear.svg', - authType: 'OAuth 2.0', - categories: ['Developer Tools', 'Project Management'], - }, - jira: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/jira.svg', - authType: 'OAuth 2.0', - categories: ['Developer Tools', 'Project Management'], - }, - dropbox: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/drop_box.svg', - authType: 'OAuth 2.0', - categories: ['Files & Documents'], - }, - asana: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/asana-n.svg', - authType: 'OAuth 2.0', - categories: ['Project Management', 'Collaboration', 'Productivity'], - }, - trello: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/trello_n.svg', - authType: 'OAuth 1.0a', - categories: ['Project Management', 'Collaboration', 'Productivity'], - }, - github: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/github.png', - authType: 'OAuth 2.0', - categories: ['Developer Tools', 'Collaboration'], - }, - notion: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/notion.svg', - authType: 'OAuth 2.0', - categories: ['Project Management', 'Files & Documents', 'Collaboration'], - }, - freshdesk: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/freshdesk.png', - authType: 'Basic Auth', - categories: ['Customer Support', 'Communication'], - }, - googlecalendar: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_calendar.svg', - authType: 'OAuth 2.0', - categories: ['Communication', 'Calendar'], - }, - gmail: { - iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/gmail.svg', - authType: 'OAuth 2.0', - categories: ['Communication'], + 'dropboxmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/drop_box.svg", + authType: "OAuth 2.1", + categories: ["Files & Documents","Productivity"], + }, + 'mixmaxmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/mixmax.svg", + authType: "OAuth 2.1/DCR", + categories: ["Communication","Marketing","CRM & Sales"], + }, + 'neonmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/neon.svg", + authType: "OAuth 2.1/DCR", + categories: ["Databases","Developer Tools","AI"], + }, + 'redshift': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/redshift.svg", + authType: "Trusted IDP", + categories: ["Analytics","Databases"], + }, + 'nocodbmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/nocodb.svg", + authType: "OAuth 2.1/DCR", + categories: ["Databases","Productivity","Collaboration"], + }, + 'pandadocmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/pandadoc.svg", + authType: "OAuth 2.1/DCR", + categories: ["Productivity","Automation","Files & Documents"], + }, + 'mailerlitemcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/mailerlite.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","Automation","Communication"], + }, + 'zoominfo': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/zoominfo.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales","Analytics","Marketing"], + }, + 'eracontextmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/eracontext.svg", + authType: "OAuth 2.1/DCR", + categories: ["Accounting & Finance","AI","Productivity"], + }, + 'plainmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/plain.svg", + authType: "OAuth 2.1/DCR", + categories: ["Customer Support","Productivity"], + }, + 'pylonmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/pylon.svg", + authType: "OAuth 2.1/DCR", + categories: ["Customer Support","Project Management"], + }, + 'stripemcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/stripe.svg", + authType: "OAuth 2.1/DCR", + categories: ["Accounting & Finance","Automation"], + }, + 'slackmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/slack.svg", + authType: "OAuth 2.1", + categories: ["Communication","Collaboration","Productivity"], + }, + 'youmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/you.svg", + authType: "Bearer Token", + categories: ["Search","AI"], + }, + 'todoistmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/todoist.svg", + authType: "OAuth 2.1/DCR", + categories: ["Productivity","Project Management"], + }, + 'planemcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/plane.svg", + authType: "OAuth 2.1/DCR", + categories: ["Project Management","Productivity"], + }, + 'githubmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/github.png", + authType: "OAuth 2.1", + categories: ["Developer Tools","Collaboration"], + }, + 'context7mcp': { + iconUrl: "https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/context7.svg", + authType: "API Key", + categories: ["AI","Developer Tools","Productivity"], + }, + 'slitemcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/slite.svg", + authType: "OAuth 2.1/DCR", + categories: ["Collaboration","Productivity","Files & Documents"], + }, + 'scarpflymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/scrapfly.svg", + authType: "OAuth 2.1/DCR", + categories: ["Search","AI","Developer Tools"], + }, + 'tallymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/tally.svg", + authType: "OAuth 2.1/DCR", + categories: ["Productivity","Automation"], + }, + 'swaggermcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/swagger.svg", + authType: "OAuth 2.1/DCR", + categories: ["Developer Tools","Productivity"], + }, + 'sybilmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/sybill.svg", + authType: "OAuth 2.1/DCR", + categories: ["CRM & Sales","AI","Analytics"], + }, + 'ticktickmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/ticktick .svg", + authType: "OAuth 2.1/DCR", + categories: ["Productivity","Project Management"], + }, + 'tinyfishmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/tinyfish.svg", + authType: "OAuth 2.1/DCR", + categories: ["Automation","AI","Developer Tools"], + }, + 'zenrowsmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/zenrows.svg", + authType: "OAuth 2.1/DCR", + categories: ["Developer Tools","Automation"], + }, + 'mercurymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/mercury.svg", + authType: "OAuth 2.1/DCR", + categories: ["Accounting & Finance","Analytics","Productivity"], + }, + 'lunarcrushmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/lunarcrush.svg", + authType: "OAuth 2.1/DCR", + categories: ["Analytics","AI","Accounting & Finance"], + }, + 'firefliesmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/fireflies.svg", + authType: "OAuth 2.1/DCR", + categories: ["Transcription","Productivity","Collaboration"], + }, + 'googlelooker': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/googlelooker.svg", + authType: "OAuth 2.0", + categories: ["Analytics","Databases","Productivity"], + }, + 'cloudfaremcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/cloudflare.svg", + authType: "OAuth 2.1/DCR", + categories: ["Developer Tools","Automation"], + }, + 'airopsmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/airops.svg", + authType: "API Key", + categories: ["AI","Marketing","Analytics"], + }, + 'sanitymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/sanity.svg", + authType: "OAuth 2.1/DCR", + categories: ["Developer Tools","Files & Documents","Productivity"], + }, + 'fiscalaimcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/fiscalai.svg", + authType: "OAuth 2.1/DCR", + categories: ["Analytics","AI","Accounting & Finance"], + }, + 'otteraimcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/otterai.svg", + authType: "OAuth 2.1/DCR", + categories: ["Transcription","Productivity","Collaboration"], + }, + 'webflowmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/webflow.svg", + authType: "OAuth 2.1/DCR", + categories: ["Design","Developer Tools","Productivity"], + }, + 'revealedaimcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/revealedai.svg", + authType: "OAuth 2.1/DCR", + categories: ["CRM & Sales","Analytics","AI"], + }, + 'cartamcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/carta.svg", + authType: "OAuth 2.1/DCR", + categories: ["Accounting & Finance","Analytics","Productivity"], + }, + 'candidmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/candid.svg", + authType: "OAuth 2.1/DCR", + categories: ["Search","AI","Databases"], + }, + 'salesloft': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/salesloft.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales","Automation","Communication"], + }, + 'gainsight': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/gainsight.svg", + authType: "API Key", + categories: ["CRM & Sales","Customer Support","Analytics"], + }, + 'biorendermcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/biorendermcp.svg", + authType: "OAuth 2.1/DCR", + categories: ["AI","Design","Search"], + }, + 'makemcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/make.svg", + authType: "OAuth 2.1/DCR", + categories: ["Automation","Productivity","Developer Tools"], + }, + 'lucidmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/lucid.svg", + authType: "OAuth 2.1/DCR", + categories: ["Design","Productivity","Collaboration"], + }, + 'jotformmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/jotform.svg", + authType: "OAuth 2.1/DCR", + categories: ["Productivity","Automation"], + }, + 'gustomcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/gusto.svg", + authType: "OAuth 2.1/DCR", + categories: ["Accounting & Finance","Productivity"], + }, + 'tavilymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/tavily.svg", + authType: "OAuth 2.1/DCR", + categories: ["Search","AI","Developer Tools"], + }, + 'firecrawlmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/firecrawl.svg", + authType: "Bearer Token", + categories: ["AI","Developer Tools","Search"], + }, + 'adobemarketingagentmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/adobe.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","Analytics","AI"], + }, + 'grainmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/grain.svg", + authType: "OAuth 2.1/DCR", + categories: ["Transcription","Collaboration","AI"], + }, + 'leadiq': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/leadiq.svg", + authType: "API Key", + categories: ["CRM & Sales","Analytics"], + }, + 'adzvisermcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/adzviser.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","Analytics"], + }, + 'commonroommcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/commonroom.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","Analytics","CRM & Sales"], + }, + 'fellowaimcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/fellowai.svg", + authType: "OAuth 2.1/DCR", + categories: ["Productivity","Project Management"], + }, + 'supermetricsmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/supermetrics.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","Analytics","CRM & Sales"], + }, + 'customeriomcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/customerio.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","Analytics","CRM & Sales"], + }, + 'zapiermcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/zapier.svg", + authType: "OAuth 2.1/DCR", + categories: ["Automation","Productivity","Developer Tools"], + }, + 'clickhouse': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/clickhouse.svg", + authType: "OAuth 2.1/DCR", + categories: ["Analytics","Developer Tools","Databases"], + }, + 'atlassianmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/atlassian.svg", + authType: "OAuth 2.1/DCR", + categories: ["Project Management","Productivity","Collaboration"], + }, + 'ahrefsmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/ahrefs.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","CRM & Sales"], + }, + 'clarifymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/clarify.svg", + authType: "OAuth 2.1/DCR", + categories: ["CRM & Sales","Productivity","Analytics"], + }, + 'bitlymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/bitly.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","CRM & Sales"], + }, + 'klaviyomcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/klaviyo.svg", + authType: "OAuth 2.1/DCR", + categories: ["Marketing","CRM & Sales"], + }, + 'googledwd': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google.svg", + authType: "Service Account (DWD)", + categories: ["Productivity","Communication"], + }, + 'xero': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/xero.svg", + authType: "OAuth 2.0", + categories: ["Accounting & Finance"], + }, + 'mailchimp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/mailchimp.svg", + authType: "OAuth 2.0", + categories: ["Marketing","Automation","Analytics"], + }, + 'datadog': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/datadog.svg", + authType: "API Key", + categories: ["Developer Tools","Monitoring"], + }, + 'quickbooks': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/Quickbooks.svg", + authType: "OAuth 2.0", + categories: ["Accounting & Finance"], + }, + 'tableau': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/tableau.svg", + authType: "API Key", + categories: ["Analytics","Productivity"], + }, + 'heyreach': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/heyreach.svg", + authType: "API Key", + categories: ["CRM & Sales"], + }, + 'posthogmcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/posthog-1.svg", + authType: "OAuth 2.1/DCR", + categories: ["Analytics"], + }, + 'box': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/box.svg", + authType: "OAuth 2.0", + categories: ["Productivity","Files & Documents"], + }, + 'bigqueryserviceaccount': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/bigquery.svg", + authType: "Service Account", + categories: ["Analytics","Databases"], + }, + 'close': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/close.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales","Communication"], + }, + 'miro': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/Miro.svg", + authType: "OAuth 2.0", + categories: ["Productivity","Collaboration","Design"], + }, + 'bitbucket': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/bitbucket.svg", + authType: "OAuth 2.0", + categories: ["Developer Tools","Collaboration"], + }, + 'dynamo': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/dynamo.svg", + authType: "Bearer Token", + categories: ["Accounting & Finance","CRM & Sales","Databases"], + }, + 'databricksworkspace': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/databricks-1.svg", + authType: "Service Principal (OAuth 2.0)", + categories: ["Analytics","Automation","Databases"], + }, + 'diarize': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/diarize.svg", + authType: "Bearer Token", + categories: ["Transcription","Media","Productivity","Analytics"], + }, + 'parallelaitaskmcp': { + iconUrl: "https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/parallel-ai.svg", + authType: "Bearer Token", + categories: ["Productivity","AI","Developer Tools"], + }, + 'calendly': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/calendly.svg", + authType: "OAuth 2.0", + categories: ["Productivity","Calendar"], + }, + 'apifymcp': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/apify.svg", + authType: "Bearer Token", + categories: ["AI","Automation","Developer Tools"], + }, + 'evertrace': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/evertrace.png", + authType: "Bearer Token", + categories: ["CRM & Sales"], + }, + 'figma': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/figma.svg", + authType: "OAuth 2.0", + categories: ["Design","Collaboration"], + }, + 'jiminny': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/jiminny.svg", + authType: "Bearer Token", + categories: ["CRM & Sales","AI","Automation","Transcription"], + }, + 'pagerduty': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/pagerduty.svg", + authType: "OAuth 2.0", + categories: ["Developer Tools","Monitoring"], + }, + 'vercel': { + iconUrl: "https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/vercel.svg", + authType: "OAuth 2.0", + categories: ["Developer Tools"], + }, + 'gitlab': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/gitlab.svg", + authType: "OAuth 2.0", + categories: ["Developer Tools","Collaboration"], + }, + 'pipedrive': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/pipedrive.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales"], + }, + 'linkedin': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/linkedin.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales","Marketing","Communication"], + }, + 'outreach': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/outreach.png", + authType: "OAuth 2.0", + categories: ["CRM & Sales"], + }, + 'granolamcp': { + iconUrl: "https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/granola.svg", + authType: "OAuth 2.1/DCR", + categories: ["AI","Automation","Communication","Transcription"], + }, + 'twitter': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/X.svg", + authType: "Bearer Token", + categories: ["Communication","Marketing"], + }, + 'discord': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/discord.svg", + authType: "OAuth 2.0", + categories: ["Communication","Collaboration"], + }, + 'phantombuster': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/phantombuster.svg", + authType: "API Key", + categories: ["AI","Automation"], + }, + 'affinity': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/affinity.svg", + authType: "Bearer Token", + categories: ["CRM & Sales"], + }, + 'supadata': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/supadata.svg", + authType: "API Key", + categories: ["Analytics","Search"], + }, + 'granola': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/granola.svg", + authType: "Bearer Token", + categories: ["AI","Automation","Communication","Transcription"], + }, + 'brave': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/brave.svg", + authType: "API Key", + categories: ["Analytics","Search"], + }, + 'harvestapi': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/harvestapi.svg", + authType: "API Key", + categories: ["Marketing","Analytics"], + }, + 'exa': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/exa.svg", + authType: "API Key", + categories: ["Analytics","AI","Automation","Search"], + }, + 'snowflakekeyauth': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/snowflake.svg", + authType: "Bearer Token", + categories: ["Analytics","Databases"], + }, + 'attio': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/attio.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales"], + }, + 'apollo': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/apollo.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales"], + }, + 'vimeo': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/vimeo.svg", + authType: "OAuth 2.0", + categories: ["Media"], + }, + 'youtube': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/youtube.svg", + authType: "OAuth 2.0", + categories: ["Media","Marketing"], + }, + 'googleslides': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_slides.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'attention': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/attention.svg", + authType: "API Key", + categories: ["AI","Automation","CRM & Sales"], + }, + 'clari_copilot': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/clari.svg", + authType: "API Key", + categories: ["CRM & Sales","AI","Automation","Transcription"], + }, + 'chorus': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/chorus.svg", + authType: "Basic Auth", + categories: ["CRM & Sales","AI","Automation","Transcription"], + }, + 'google_ads': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_ads.png", + authType: "OAuth 2.0", + categories: ["Marketing","CRM & Sales"], + }, + 'servicenow': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/servicenow.svg", + authType: "OAuth 2.0", + categories: ["Customer Support","Communication"], + }, + 'zendesk': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/zendesk.svg", + authType: "API KEY", + categories: ["Customer Support","Communication"], + }, + 'googleforms': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_forms.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'microsoftword': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/word.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'microsoftexcel': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/excel.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents","Analytics"], + }, + 'onenote': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/onenote.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'snowflake': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/snowflake.svg", + authType: "OAuth 2.0", + categories: ["Analytics","Databases"], + }, + 'onedrive': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/onedrive.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'bigquery': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/bigquery.svg", + authType: "OAuth 2.0", + categories: ["Analytics","Databases"], + }, + 'airtable': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/airtable.svg", + authType: "OAuth 2.0", + categories: ["Project Management","Analytics"], + }, + 'clickup': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/clickup.svg", + authType: "OAuth 2.0", + categories: ["Project Management","Collaboration","Productivity"], + }, + 'fathom': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/fathom.svg", + authType: "API Key", + categories: ["AI","Automation","Communication","Transcription"], + }, + 'googlemeet': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_meet.svg", + authType: "OAuth 2.0", + categories: ["Communication","Calendar"], + }, + 'googlesheets': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_sheets.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents","Analytics"], + }, + 'intercom': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/intercom.svg", + authType: "OAuth 2.0", + categories: ["Customer Support","Communication"], + }, + 'monday': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/monday.svg", + authType: "OAuth 2.0", + categories: ["Project Management","Collaboration","Productivity"], + }, + 'sharepoint': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/sharepoint.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'outlook': { + iconUrl: "https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/outlook.svg", + authType: "OAuth 2.0", + categories: ["Communication","Calendar"], + }, + 'confluence': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/confluence.svg", + authType: "OAuth 2.0", + categories: ["Project Management","Files & Documents","Collaboration"], + }, + 'gong': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/gong.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales","AI","Automation","Transcription"], + }, + 'slack': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/slack.svg", + authType: "OAuth 2.0", + categories: ["Communication","Collaboration"], + }, + 'hubspot': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/hub_spot.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales"], + }, + 'salesforce': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/sales_force.svg", + authType: "OAuth 2.0", + categories: ["CRM & Sales"], + }, + 'googledocs': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_docs.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'googledrive': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_drive.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'microsoftteams': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/microsoft-teams.svg", + authType: "OAuth 2.0", + categories: ["Communication","Collaboration"], + }, + 'zoom': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/zoom.svg", + authType: "OAuth 2.0", + categories: ["Communication","Calendar"], + }, + 'linear': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/linear.svg", + authType: "OAuth 2.0", + categories: ["Developer Tools","Project Management"], + }, + 'jira': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/jira.svg", + authType: "OAuth 2.0", + categories: ["Developer Tools","Project Management"], + }, + 'dropbox': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/drop_box.svg", + authType: "OAuth 2.0", + categories: ["Files & Documents"], + }, + 'asana': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/asana-n.svg", + authType: "OAuth 2.0", + categories: ["Project Management","Collaboration","Productivity"], + }, + 'trello': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/trello_n.svg", + authType: "OAuth 1.0a", + categories: ["Project Management","Collaboration","Productivity"], + }, + 'github': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/github.png", + authType: "OAuth 2.0", + categories: ["Developer Tools","Collaboration"], + }, + 'notion': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/notion.svg", + authType: "OAuth 2.0", + categories: ["Project Management","Files & Documents","Collaboration"], + }, + 'freshdesk': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/freshdesk.png", + authType: "Basic Auth", + categories: ["Customer Support","Communication"], + }, + 'googlecalendar': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/google_calendar.svg", + authType: "OAuth 2.0", + categories: ["Communication","Calendar"], + }, + 'gmail': { + iconUrl: "https://cdn.scalekit.com/sk-connect/assets/provider-icons/gmail.svg", + authType: "OAuth 2.0", + categories: ["Communication"], }, } diff --git a/src/data/agent-connectors/dropboxmcp.ts b/src/data/agent-connectors/dropboxmcp.ts new file mode 100644 index 000000000..a418f13d6 --- /dev/null +++ b/src/data/agent-connectors/dropboxmcp.ts @@ -0,0 +1,169 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'dropboxmcp_check_job_status', + description: `Check the status of an async Dropbox operation by its job ID.`, + params: [ + { name: 'operation_id', type: 'string', required: false, description: `The async job ID returned from a previous Dropbox operation.` }, + { name: 'wait_ms', type: 'integer', required: false, description: `Milliseconds to wait for the job to complete before returning.` }, + ], + }, + { + name: 'dropboxmcp_copy', + description: `Copy one or more files or folders to a new location in Dropbox.`, + params: [ + { name: 'autorename', type: 'boolean', required: false, description: `If true, renames the destination if a conflict exists.` }, + { name: 'entries', type: 'array', required: false, description: `List of file or folder paths to operate on.` }, + ], + }, + { + name: 'dropboxmcp_create_file', + description: `Create a new file at the specified path with the given content.`, + params: [ + { name: 'content', type: 'string', required: true, description: `The text content to write to the new file.` }, + { name: 'path', type: 'string', required: true, description: `The Dropbox path to the file or folder (e.g. /Documents/report.pdf).` }, + ], + }, + { + name: 'dropboxmcp_create_file_request', + description: `Create a file request so others can upload files to your Dropbox.`, + params: [ + { name: 'closed', type: 'boolean', required: false, description: `If true, the file request is closed and no longer accepts uploads.` }, + { name: 'deadline', type: 'string', required: false, description: `The deadline for the file request in ISO 8601 format.` }, + { name: 'deadline_allow_late_uploads', type: 'string', required: false, description: `No description.` }, + { name: 'description', type: 'string', required: false, description: `An optional description shown to uploaders.` }, + { name: 'destination', type: 'string', required: false, description: `The Dropbox folder path where uploaded files will be saved.` }, + { name: 'title', type: 'string', required: false, description: `The title of the file request shown to uploaders.` }, + { name: 'video_project_id', type: 'string', required: false, description: `No description.` }, + ], + }, + { + name: 'dropboxmcp_create_folder', + description: `Create a new folder at the specified path in Dropbox.`, + params: [ + { name: 'path', type: 'string', required: true, description: `The Dropbox path to the file or folder (e.g. /Documents/report.pdf).` }, + ], + }, + { + name: 'dropboxmcp_create_shared_link', + description: `Create a shared link for a file or folder with optional access controls.`, + params: [ + { name: 'path_or_file_id', type: 'string', required: true, description: `The Dropbox path or file ID of the file or folder.` }, + { name: 'access_level', type: 'string', required: false, description: `The access level for the shared link (viewer, editor).` }, + { name: 'allow_download', type: 'string', required: false, description: `No description.` }, + { name: 'audience', type: 'string', required: false, description: `The audience for the shared link (public, team, no_one).` }, + { name: 'emails', type: 'array', required: false, description: `No description.` }, + { name: 'expires', type: 'string', required: false, description: `The expiration date of the shared link in ISO 8601 format.` }, + { name: 'password', type: 'string', required: false, description: `An optional password to protect the shared link.` }, + ], + }, + { + name: 'dropboxmcp_delete', + description: `Permanently delete one or more files or folders from Dropbox.`, + params: [ + { name: 'entries', type: 'array', required: false, description: `List of file or folder paths to operate on.` }, + ], + }, + { + name: 'dropboxmcp_download_link', + description: `Get temporary download URLs for one or more files.`, + params: [ + { name: 'entries', type: 'array', required: true, description: `List of file or folder paths to operate on.` }, + { name: 'expiration_in_sec', type: 'integer', required: false, description: `Seconds until the temporary download URL expires. Must be 0 (no expiry) or between 60 and 900.` }, + ], + }, + { + name: 'dropboxmcp_get_file_content', + description: `Retrieve the raw content of a file by path or file ID.`, + params: [ + { name: 'path_or_file_id', type: 'string', required: true, description: `The Dropbox path or file ID of the file or folder.` }, + ], + }, + { + name: 'dropboxmcp_get_file_metadata', + description: `Retrieve metadata for a file or folder by path or file ID.`, + params: [ + { name: 'path_or_file_id', type: 'string', required: true, description: `The Dropbox path or file ID of the file or folder.` }, + ], + }, + { + name: 'dropboxmcp_get_file_request', + description: `Retrieve details of a specific file request by its ID.`, + params: [ + { name: 'id', type: 'string', required: false, description: `The unique ID of the file request.` }, + ], + }, + { + name: 'dropboxmcp_get_shared_link_metadata', + description: `Retrieve metadata for a file or folder from its shared link URL.`, + params: [ + { name: 'url', type: 'string', required: false, description: `The shared link URL to retrieve metadata for.` }, + ], + }, + { + name: 'dropboxmcp_get_usage_and_quota', + description: `Retrieve the current storage usage and quota for the Dropbox account.`, + params: [ + ], + }, + { + name: 'dropboxmcp_list_file_requests', + description: `List all file requests for the Dropbox account with optional pagination.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `Pagination cursor from the previous response to fetch the next page.` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum number of results to return per page.` }, + ], + }, + { + name: 'dropboxmcp_list_folder', + description: `List the contents of a Dropbox folder with optional pagination and filters.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `Pagination cursor from the previous response to fetch the next page.` }, + { name: 'max_results', type: 'integer', required: false, description: `Maximum number of results to return.` }, + { name: 'object_types', type: 'array', required: false, description: `Optional object type filters for the first list_folder call. Valid values: "file" and "folder".` }, + { name: 'path', type: 'string', required: false, description: `The Dropbox path to the file or folder (e.g. /Documents/report.pdf).` }, + { name: 'recursive', type: 'boolean', required: false, description: `If true, include the contents of all subdirectories.` }, + ], + }, + { + name: 'dropboxmcp_list_shared_links', + description: `List shared links for the account or a specific path with pagination.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `Pagination cursor from the previous response to fetch the next page.` }, + { name: 'path', type: 'string', required: false, description: `The Dropbox path to the file or folder (e.g. /Documents/report.pdf).` }, + ], + }, + { + name: 'dropboxmcp_move', + description: `Move one or more files or folders to a new location in Dropbox.`, + params: [ + { name: 'autorename', type: 'boolean', required: false, description: `If true, renames the destination if a conflict exists.` }, + { name: 'entries', type: 'array', required: false, description: `List of file or folder paths to operate on.` }, + ], + }, + { + name: 'dropboxmcp_search', + description: `Search for files and folders in Dropbox by query with optional filters.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `Pagination cursor from the previous response to fetch the next page.` }, + { name: 'file_categories', type: 'array', required: false, description: `No description.` }, + { name: 'file_extensions', type: 'array', required: false, description: `No description.` }, + { name: 'file_status', type: 'string', required: false, description: `Filter search results by file status (active or deleted).` }, + { name: 'filename_only', type: 'boolean', required: false, description: `If true, restricts the search to file and folder names only.` }, + { name: 'last_modified_after', type: 'string', required: false, description: `No description.` }, + { name: 'last_modified_before', type: 'string', required: false, description: `No description.` }, + { name: 'max_results', type: 'integer', required: false, description: `Maximum number of results to return.` }, + { name: 'order_by', type: 'string', required: false, description: `Field to sort search results by.` }, + { name: 'path', type: 'string', required: false, description: `The Dropbox path to the file or folder (e.g. /Documents/report.pdf).` }, + { name: 'query', type: 'string', required: false, description: `The search query string to match against file and folder names.` }, + { name: 'reverse_order', type: 'boolean', required: false, description: `If true, returns results in reverse order.` }, + ], + }, + { + name: 'dropboxmcp_who_am_i', + description: `Retrieve the current Dropbox account profile information.`, + params: [ + ], + }, +] diff --git a/src/data/agent-connectors/eracontextmcp.ts b/src/data/agent-connectors/eracontextmcp.ts new file mode 100644 index 000000000..d46caf410 --- /dev/null +++ b/src/data/agent-connectors/eracontextmcp.ts @@ -0,0 +1,1367 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'eracontextmcp_accounts__check_account_balance', + description: `Get the current and available balance for a specific account, including credit limit if applicable. Requires an account_group_key from List Financial Accounts.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: true, + description: `The account group projection key. Obtain from accounts__list_financial_accounts (the account_group_key field).`, + }, + ], + }, + { + name: 'eracontextmcp_accounts__list_financial_accounts', + description: `List all linked accounts (bank, credit card, investment, manual) with balances and the account_group_key values used by other tools.`, + params: [ + { + name: 'include_hidden', + type: 'boolean', + required: false, + description: `Set to true to also show accounts the user has chosen to hide. Default: false (only visible accounts).`, + }, + ], + }, + { + name: 'eracontextmcp_accounts__manage_account', + description: `Create, update, delete, or set the balance of a manually tracked account. Use action to specify the operation; amount must be a positive integer with a separate direction field.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `What to do: 'create' adds a new manual account, 'update' changes account properties (account_name applies to any account type; other fields are manual-only), 'delete' soft-deletes a manual account and its transactions, 'set_balance' records a balance snapshot on a manual account.`, + }, + { + name: 'account_group_key', + type: 'string', + required: false, + description: `The account group projection key identifying the account. Required for update, delete, and set_balance. Obtain from accounts__list_financial_accounts (the account_id field).`, + }, + { + name: 'account_name', + type: 'string', + required: false, + description: `The user-supplied display name (e.g., "Home Mortgage", "Savings Jar"). Required for create. On update, applies to any account type — manual or connected — and writes a user-layer override that surfaces as the effective name; the institution-supplied name is preserved underneath. Mutually exclusive with 'clear_account_name'.`, + }, + { + name: 'account_number_mask', + type: 'string', + required: false, + description: `Partial account number (last 4 digits). Do NOT supply the full account number. On update: manual accounts only.`, + }, + { + name: 'account_type', + type: 'string', + required: false, + description: `The account type classification. Required for create (manual). On update: manual accounts only — supplying this for a connected account is rejected.`, + }, + { + name: 'amount_minor_units', + type: 'integer', + required: false, + description: `The balance amount in integer minor units (e.g., 150050 for $1,500.50, or 1000 for 1000 JPY). Required for set_balance. Positive = asset; negative = liability.`, + }, + { + name: 'as_of_date', + type: 'string', + required: false, + description: `As-of date for the balance record in ISO 8601 format (e.g., "2026-04-15"). Defaults to today if not specified. Optional, set_balance only.`, + }, + { + name: 'balance_currency', + type: 'string', + required: false, + description: `ISO 4217 currency for the balance (required for set_balance).`, + }, + { + name: 'clear_account_name', + type: 'boolean', + required: false, + description: `On update: set to true to remove a previously applied user account-name override, reverting the display name to the institution-supplied value (or empty when no provider name exists). Mutually exclusive with 'account_name'. Account-type-agnostic.`, + }, + { + name: 'currency', + type: 'string', + required: false, + description: `ISO 4217 currency for the account (required for create).`, + }, + { + name: 'initial_balance_minor_units', + type: 'integer', + required: false, + description: `Starting balance in integer minor units (e.g., 150050 for $1,500.50, or 1000 for 1000 JPY). Positive = asset; negative = liability. Optional, create only.`, + }, + { + name: 'institution_name', + type: 'string', + required: false, + description: `Institution name for display and fingerprint matching (e.g., "Chase", "Fidelity"). On update: manual accounts only.`, + }, + ], + }, + { + name: 'eracontextmcp_accounts__set_account_visibility', + description: `Show or hide an account in the dashboard without disconnecting it — the account continues to sync.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: true, + description: `The account group projection key. Obtain from accounts__list_financial_accounts (the account_group_key field).`, + }, + { + name: 'visible', + type: 'boolean', + required: true, + description: `Set to true to show the account (Owner scope) or false to hide it (UserExcluded scope).`, + }, + ], + }, + { + name: 'eracontextmcp_accounts__toggle_balance_backfill', + description: `Enable balance history derivation from transaction data, or disable it to revert to snapshot-only balances.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: true, + description: `The account group projection key identifying the target account group. Obtain from accounts__list_financial_accounts (the account_id field). Must be a manual account.`, + }, + { + name: 'enable', + type: 'boolean', + required: true, + description: `Set to true to enable balance derivation from transaction history. Set to false to disable and revert to snapshot-only balance behavior.`, + }, + ], + }, + { + name: 'eracontextmcp_billing__cancel_subscription', + description: `Two-step cancellation: first call returns a confirmation key; second call with that key executes the cancellation.`, + params: [ + { + name: 'reason', + type: 'string', + required: true, + description: `Why the user wants to cancel. Summarize their stated reason concisely.`, + }, + { + name: 'confirmation_key', + type: 'string', + required: false, + description: `The confirmation key from the first call. Omit on first call to receive a key; pass it on the second call to execute the cancellation.`, + }, + ], + }, + { + name: 'eracontextmcp_billing__get_current_plan', + description: `Get the user's active plan tier, billing period, feature entitlements, and usage against plan limits.`, + params: [], + }, + { + name: 'eracontextmcp_billing__list_plans', + description: `List all available subscription plans with pricing, billing periods, and plan identifiers needed for the upgrade tool.`, + params: [ + { + name: 'product_key', + type: 'string', + required: false, + description: `Which product to explore plan options for (e.g., 'hub', 'quant'). Defaults to 'hub' if omitted.`, + }, + ], + }, + { + name: 'eracontextmcp_billing__uncancel_subscription', + description: `Reverse a pending subscription cancellation before it takes effect, optionally with a winback discount.`, + params: [ + { + name: 'apply_coupon', + type: 'boolean', + required: false, + description: `Whether to apply the 50% off winback coupon during the uncancel. Defaults to true. Set to false if the user does not want the discount.`, + }, + ], + }, + { + name: 'eracontextmcp_billing__upgrade', + description: `Upgrade to a higher tier or different billing period. Use billing__list_plans first to get valid plan identifiers.`, + params: [ + { + name: 'billing_period', + type: 'string', + required: true, + description: `How often to bill: 'monthly', 'quarterly', or 'yearly'.`, + }, + { + name: 'target_plan', + type: 'string', + required: true, + description: `Which plan to subscribe to (e.g., 'organize', 'automate', 'optimize'). Use billing__list_plans to see available plans.`, + }, + { + name: 'client_reference_id', + type: 'string', + required: false, + description: `Optional client reference ID for referral attribution. Passed through to Stripe unchanged.`, + }, + { + name: 'coupon_id', + type: 'string', + required: false, + description: `Optional Stripe coupon ID from Rewardful for referral discounts. Ignored when a promotion code is also provided.`, + }, + { + name: 'product_key', + type: 'string', + required: false, + description: `Which product to upgrade (e.g., 'hub', 'quant'). Defaults to 'hub' if omitted.`, + }, + { + name: 'promotion_code', + type: 'string', + required: false, + description: `Optional promotion code to apply a discount at checkout (e.g., 'SAVE50'). Omit to let the user enter one manually.`, + }, + ], + }, + { + name: 'eracontextmcp_connections__connect_bank_account', + description: `Start a bank account connection flow via Plaid or a direct integration and return a redirect URL for the user to complete.`, + params: [ + { + name: 'assistant_name', + type: 'string', + required: false, + description: `Your name or the name of the AI assistant being used (e.g. 'Claude', 'ChatGPT'). This helps personalize the connection experience for the user.`, + }, + { + name: 'connection_id', + type: 'string', + required: false, + description: `Optional existing connection ID for reconnection flows. Provide this to reconnect a stale or broken connection instead of creating a new one. Get connection IDs from the accounts listing.`, + }, + ], + }, + { + name: 'eracontextmcp_connections__disconnect_institution', + description: `Permanently remove a linked institution connection and unlink all associated accounts. Get the connection_id from accounts__list_financial_accounts.`, + params: [ + { + name: 'connection_id', + type: 'string', + required: true, + description: `The connection ID of the institution to disconnect. Obtain from accounts__list_financial_accounts (the connection_id field on account entries).`, + }, + ], + }, + { + name: 'eracontextmcp_help__get_help', + description: `Get help content for a specific topic: getting_started, connecting_accounts, what_can_i_ask, privacy_and_security, or troubleshooting. Topic is required.`, + params: [ + { + name: 'topic', + type: 'string', + required: true, + description: `The help topic to retrieve. Use 'getting_started' for first-time users, 'connecting_accounts' for account linking guidance, 'what_can_i_ask' for example prompts, 'privacy_and_security' for data handling details, or 'troubleshooting' for common issues.`, + }, + ], + }, + { + name: 'eracontextmcp_insights__analyze_spending', + description: `Break down spending into ranked groups by category, merchant, account, or time period — each with amount, percentage, and transaction count. Supports drill-down: call with group_by=category first, then again with a specific category and group_by=merchant.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: false, + description: `Filter to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).`, + }, + { + name: 'category', + type: 'string', + required: false, + description: `Filter to a specific category name for drill-down. For example, first call with group_by='category' to find 'Daily living' is the top category, then call again with category='Daily living' and group_by='merchant' to see which merchants drove that spending.`, + }, + { + name: 'group_by', + type: 'string', + required: false, + description: `How to group the spending: 'category' (e.g., Groceries, Transportation), 'merchant' (e.g., Amazon, Starbucks), 'account' (by bank account), 'week' or 'month' (spending over time).`, + }, + { + name: 'include_subcategories', + type: 'boolean', + required: false, + description: `When true and group_by is 'category', groups results by parent category with subcategory breakdown`, + }, + { + name: 'period', + type: 'string', + required: false, + description: `Time range for the breakdown. Use 'custom' with period_start/period_end for a specific date range.`, + }, + { + name: 'period_end', + type: 'string', + required: false, + description: `Custom end date (YYYY-MM-DD). Used when period is 'custom'.`, + }, + { + name: 'period_start', + type: 'string', + required: false, + description: `Custom start date (YYYY-MM-DD). Used when period is 'custom'.`, + }, + { + name: 'top_n', + type: 'integer', + required: false, + description: `How many groups to return, ranked by spending amount (highest first). Default: 10.`, + }, + ], + }, + { + name: 'eracontextmcp_insights__compare_spending_periods', + description: `Compare spending between two time periods side-by-side, returning the dollar and percentage change per group.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: false, + description: `Filter to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).`, + }, + { + name: 'category', + type: 'string', + required: false, + description: `Filter to a specific category name to compare only that category's spending between the two periods.`, + }, + { + name: 'group_by', + type: 'string', + required: false, + description: `How to break down the comparison: 'total' shows one overall comparison, 'category' compares each spending category, 'merchant' compares each merchant.`, + }, + { + name: 'period_a', + type: 'string', + required: false, + description: `The first time period to compare (shown as the 'current' or 'newer' period in the results).`, + }, + { + name: 'period_b', + type: 'string', + required: false, + description: `The second time period to compare against (shown as the 'baseline' or 'older' period).`, + }, + ], + }, + { + name: 'eracontextmcp_insights__forecast_spending', + description: `Project end-of-period spending based on current pace and historical patterns.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: false, + description: `Limit the projection to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field). Omit to project across all accounts.`, + }, + { + name: 'period', + type: 'string', + required: false, + description: `The time period to project spending for. 'this_month' is most common.`, + }, + ], + }, + { + name: 'eracontextmcp_insights__get_cash_flow', + description: `Get multi-period income vs. spending totals broken down by week or month, showing net cash flow per period.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: false, + description: `Filter to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field). Omit to see cash flow across all accounts.`, + }, + { + name: 'granularity', + type: 'string', + required: false, + description: `Whether to show cash flow by 'week' or 'month'.`, + }, + { + name: 'num_periods', + type: 'integer', + required: false, + description: `How many periods to include (e.g., 6 months, 12 weeks). Default: 6, max: 12.`, + }, + ], + }, + { + name: 'eracontextmcp_insights__get_daily_financial_summary', + description: `Get a day-by-day breakdown of spending and income totals for a specific month, optionally filtered to one category.`, + params: [ + { + name: 'category_key', + type: 'string', + required: false, + description: `Optional fcat_* category key to filter daily totals by a specific category. Omit to get unfiltered totals.`, + }, + { + name: 'month', + type: 'integer', + required: false, + description: `Month number (1-12). Defaults to the current month.`, + }, + { + name: 'year', + type: 'integer', + required: false, + description: `Year of the month to query. Defaults to the current year.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__confirm_or_reject_inference', + description: `Accept or dispute an AI-inferred financial fact. When rejecting, optionally provide the user's correct value.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `The action to take: 'confirm' to accept the inferred value, or 'reject' to dispute it.`, + }, + { + name: 'slug', + type: 'string', + required: true, + description: `The slug of the inferred assertion to confirm or reject. Get assertion slugs from knowledge__get_financial_context_and_overview.`, + }, + { + name: 'corrected_value', + type: 'string', + required: false, + description: `The user's corrected value when rejecting an inference (e.g., the system inferred '$5,000/mo' but the user's actual income is '$8,500/mo'). Only used when action is 'reject'.`, + }, + { + name: 'instance_id', + type: 'string', + required: false, + description: `Instance identifier for repeatable assertions. Only needed when multiple instances exist for the same slug.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__defer_question', + description: `Skip a question permanently or snooze it to resurface after a specified number of days.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `The action to take: 'skip' to decline the question, or 'snooze' to defer it for a number of days.`, + }, + { + name: 'question_slug', + type: 'string', + required: true, + description: `The slug of the question to skip or snooze. Get available slugs from knowledge__get_pending_questions.`, + }, + { + name: 'pack_slug', + type: 'string', + required: false, + description: `The question pack slug containing this question. Defaults to 'financial-profile-v1' if omitted.`, + }, + { + name: 'snooze_days', + type: 'integer', + required: false, + description: `Number of days to snooze the question (required when action is 'snooze'). The question will be re-surfaced after this many days.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__forget', + description: `Delete a stored financial fact from the user's profile. Use when the user wants to clear an incorrect or outdated answer.`, + params: [ + { + name: 'slug', + type: 'string', + required: true, + description: `The slug of the fact to retract. Get assertion slugs from knowledge__get_financial_context_and_overview.`, + }, + { + name: 'instance_id', + type: 'string', + required: false, + description: `Instance identifier for repeatable assertions. Only needed when multiple instances exist for the same slug.`, + }, + { + name: 'pack_slug', + type: 'string', + required: false, + description: `The question pack slug for flow progress recalculation when retracting an answer to a prompted question. Defaults to 'financial-profile-v1' if omitted.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__get_financial_context_and_overview', + description: `Get the user's complete financial context — facts, goals, account summary, net worth, monthly spending, top categories, and pending personalization questions. Call this first for comprehensive context.`, + params: [ + { + name: 'category', + type: 'string', + required: false, + description: `Filter assertions to a specific category (e.g., 'financial', 'preferences', 'goals'). Omit to return all categories.`, + }, + { + name: 'pack_slug', + type: 'string', + required: false, + description: `The question pack slug for completion progress data. Defaults to 'financial-profile-v1' if omitted.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter assertions by lifecycle status: 'active' (current facts), 'superseded' (replaced by newer facts), 'retracted' (withdrawn), or 'draft' (not finalized). Omit to return only active assertions.`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Filter assertions to those matching specific tags (e.g., ['tax-relevant']). Omit to return all assertions regardless of tags.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__get_pending_questions', + description: `Get unanswered personalization questions with display text, answer type, and criticality. High-criticality questions unlock additional features.`, + params: [ + { + name: 'max_count', + type: 'integer', + required: false, + description: `Maximum number of questions to return. Defaults to 5 if omitted.`, + }, + { + name: 'pack_slug', + type: 'string', + required: false, + description: `The question pack slug to retrieve questions from. Defaults to 'financial-profile-v1' if omitted.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__recall_history', + description: `Get the full change history for a specific financial fact, including all past values and timestamps.`, + params: [ + { + name: 'slug', + type: 'string', + required: true, + description: `The slug of the fact to retrieve history for. Get assertion slugs from knowledge__get_financial_context_and_overview.`, + }, + { + name: 'instance_id', + type: 'string', + required: false, + description: `Instance identifier for repeatable assertions. Only needed when multiple instances exist for the same slug.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__remember', + description: `Store a financial fact, preference, or goal. Populate exactly one typed value field matching the answer_type (text, number, money, date, or boolean).`, + params: [ + { + name: 'answer_type', + type: 'string', + required: true, + description: `The structural type. For prompted questions, use the answer_type from knowledge__get_pending_questions.`, + }, + { + name: 'slug', + type: 'string', + required: true, + description: `The machine-readable identifier. For prompted questions, use the slug from knowledge__get_pending_questions.`, + }, + { + name: 'boolean_value', + type: 'boolean', + required: false, + description: `Boolean value for boolean answer type.`, + }, + { + name: 'category', + type: 'string', + required: false, + description: `The logical grouping category. Auto-derived for prompted questions; required for ambient facts.`, + }, + { + name: 'confidence', + type: 'string', + required: false, + description: `How certain the system is about this fact: 'definitive' (user explicitly stated), 'confirmed' (inferred and user confirmed), 'inferred' (agent derived, not yet confirmed), or 'observed' (computed from data). Defaults to 'definitive' if omitted.`, + }, + { + name: 'date_value', + type: 'string', + required: false, + description: `Date value for date answer type (YYYY-MM-DD).`, + }, + { + name: 'instance_id', + type: 'string', + required: false, + description: `Instance identifier for repeatable facts that can have multiple values (e.g., 'checking-1', 'savings-2' for account-related facts). Omit for single-value facts.`, + }, + { + name: 'modality', + type: 'string', + required: false, + description: `The nature of the assertion: 'definite' (a stated fact), 'aspirational' (a goal or intention), or 'conditional' (contingent on something). Defaults to 'definite' if omitted.`, + }, + { + name: 'money_periodic_value', + type: 'object', + required: false, + description: `Periodic money value for money-periodic answer type (amount + currency + frequency).`, + }, + { + name: 'money_relative_value', + type: 'object', + required: false, + description: `Relative money value for money-relative answer type (amount + currency + direction).`, + }, + { + name: 'money_value', + type: 'object', + required: false, + description: `Money value for money answer type.`, + }, + { + name: 'numeric_value', + type: 'number', + required: false, + description: `Numeric value for number and scale answer types.`, + }, + { + name: 'pack_slug', + type: 'string', + required: false, + description: `Question pack slug for flow tracking. Defaults to 'financial-profile-v1'.`, + }, + { + name: 'source', + type: 'string', + required: false, + description: `How this fact was captured: 'prompted' (user answered a question), 'conversational' (discovered during chat), 'inferred' (derived by agent), 'observed' (computed from data), or 'imported' (external source). Defaults to 'conversational' if omitted.`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Optional tags for additional categorization (e.g., ['tax-relevant', 'high-priority']).`, + }, + { + name: 'text_value', + type: 'string', + required: false, + description: `String value for text, text-multiline, single-select, multi-select (comma-separated), country (ISO alpha-2), and region answer types.`, + }, + { + name: 'valid_time', + type: 'string', + required: false, + description: `When this fact became true in the user's life (YYYY-MM-DD). Omit if the fact has no specific start date.`, + }, + { + name: 'valid_until', + type: 'string', + required: false, + description: `When this fact should be considered stale and re-asked (YYYY-MM-DD). Omit if the fact does not expire.`, + }, + ], + }, + { + name: 'eracontextmcp_knowledge__show_question_ui', + description: `Render an interactive prompt for a specific pending question, including answer constraints and suggested presentation format.`, + params: [ + { + name: 'question_slug', + type: 'string', + required: true, + description: `The slug of the question to present as a visual form. Get available slugs from knowledge__get_pending_questions.`, + }, + { + name: 'pack_slug', + type: 'string', + required: false, + description: `The question pack slug containing this question. Defaults to 'financial-profile-v1' if omitted.`, + }, + ], + }, + { + name: 'eracontextmcp_referral__get_dashboard_sso', + description: `Get a single-sign-on URL for the user's referral dashboard without a separate login.`, + params: [], + }, + { + name: 'eracontextmcp_referral__get_referral_link', + description: `Get the user's unique shareable referral link for inviting others.`, + params: [], + }, + { + name: 'eracontextmcp_referral__get_referral_stats', + description: `Get referral performance stats: invites sent, conversions, and earnings.`, + params: [], + }, + { + name: 'eracontextmcp_referral__join_referral_program', + description: `Enroll the user in the referral program and create their affiliate profile.`, + params: [], + }, + { + name: 'eracontextmcp_referral__switch_referral_campaign', + description: `Switch the user's active referral campaign to a different slug.`, + params: [ + { + name: 'slug', + type: 'string', + required: true, + description: `The campaign slug to switch to. Valid values: 'invite' or 'creator'.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__import_csv_transactions', + description: `Import transactions from a CSV export of Monarch, Copilot, YNAB, Mint, or Wells Fargo. Use preview_only=true to validate before committing.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: true, + description: `The account group projection key of the manual account to import into. Obtain from accounts__list_financial_accounts (the account_id field). Must be a manual account.`, + }, + { + name: 'csv_content', + type: 'string', + required: true, + description: `The complete CSV text content (including header row). Pass the raw CSV as a string — do NOT base64-encode, MCP is text-native.`, + }, + { + name: 'format', + type: 'string', + required: false, + description: `Optional format hint to bypass auto-detection. Supported values: "monarch", "copilot", "ynab", "mint", "wellsfargo", "chase", "bankofamerica", "amex", "schwab". If omitted, format is auto-detected from the CSV header row.`, + }, + { + name: 'preview_only', + type: 'boolean', + required: false, + description: `When true, parse and validate the CSV but do not write transactions. Returns per-row validation verdicts (valid/invalid + reason). Default: false.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__list_recurring_charges', + description: `List detected recurring charges (subscriptions, bills, income) with merchant, amount, and frequency.`, + params: [ + { + name: 'active_only', + type: 'boolean', + required: false, + description: `When true (default), only shows recurring items that have appeared within the last 60 days. Set to false to also include items that may have stopped.`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Filter by type: 'subscription' (Netflix, Spotify, etc.), 'bill' (rent, utilities, etc.), 'income' (salary, freelance, etc.), or 'all' for everything.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__list_spending_categories', + description: `Get the full category tree with fcat_* keys, icons, and spending types. Call this to discover valid category keys for other tools.`, + params: [], + }, + { + name: 'eracontextmcp_transactions__list_transactions', + description: `Paginated chronological list of transactions with optional filters for date, account, category, tags, and review status. For keyword searches, use search_transactions instead.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: false, + description: `Filter to transactions from a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).`, + }, + { + name: 'category_key', + type: 'string', + required: false, + description: `Filter to transactions with this fcat_* category projection key. Get category keys from transactions__list_spending_categories. When combined with include_children=true, includes transactions from all subcategories.`, + }, + { + name: 'from_date', + type: 'string', + required: false, + description: `Start date for transaction range (YYYY-MM-DD). Defaults to all available transaction history.`, + }, + { + name: 'include_children', + type: 'boolean', + required: false, + description: `When true and category_key is set, includes transactions from the parent category and all its subcategories. Use this for parent category transaction counts.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number (1-based)` }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of transactions per page (max 100)`, + }, + { + name: 'review_status', + type: 'string', + required: false, + description: `Filter to transactions by their review status. System rules like anomaly detection and bounced payment detection automatically flag transactions as 'needs_review'.`, + }, + { + name: 'rule_ids', + type: 'array', + required: false, + description: `Rule projection keys (e.g. ["frul_abc"]). Only transactions matched by at least one of these rules are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get rule keys from transactions__manage_automation_rules with 'list' action.`, + }, + { + name: 'tag_keys', + type: 'array', + required: false, + description: `Tag projection keys (e.g. ["ftag_abc"]). Only transactions with at least one of these tags are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get tag keys from transactions__manage_transaction_tags with 'list_tags' action.`, + }, + { + name: 'to_date', + type: 'string', + required: false, + description: `End date for transaction range (YYYY-MM-DD). Defaults to today.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__manage_automation_rules', + description: `Create, list, update, delete, or enable rules that auto-categorize or tag matching transactions. Supports per-transaction and pattern-detection (transfer/recurring) rules.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `What to do. Create adds a new rule, list shows existing rules, update changes a rule's conditions or actions, delete removes a rule permanently, enable/disable turns a rule on or off without deleting it, preview tests filters against recent transactions without saving anything.`, + }, + { + name: 'actions', + type: 'array', + required: false, + description: `What to do with matching transactions (required for create and update). You can combine multiple actions. For category, merchant rename, description, review status, hide, and transfer actions, only the highest-priority rule's action applies. Tag actions (add/remove) always apply from all matching rules.`, + }, + { + name: 'application_scope', + type: 'string', + required: false, + description: `Determines which transactions this rule applies to. Prospective applies only to new transactions going forward. Retroactive applies only when explicitly re-running against existing transactions. Both (default) does both.`, + }, + { + name: 'applies_from', + type: 'string', + required: false, + description: `Only apply this rule to transactions dated on or after this date (YYYY-MM-DD). Omit to apply to transactions of any date.`, + }, + { + name: 'applies_to', + type: 'string', + required: false, + description: `Only apply this rule to transactions dated on or before this date (YYYY-MM-DD). Omit to apply to transactions of any date.`, + }, + { + name: 'apply_retroactively', + type: 'boolean', + required: false, + description: `Whether to immediately apply the rule to the user's existing transactions. Default: true — all matching transactions are updated right away. When updating an existing rule, the old matches are undone first and the new definition is applied fresh. Set to false only if the user explicitly asks for the rule to apply to future transactions only.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `An optional note explaining what this rule does or why it was created.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Conditions that determine which transactions this rule matches (required for create and update). When multiple filters are provided at the top level, ALL must match (AND logic). Use 'or' type filters to match ANY of several conditions.`, + }, + { + name: 'include_inactive', + type: 'boolean', + required: false, + description: `When listing rules, set to true to also include disabled rules. Default: false (only active rules are shown).`, + }, + { + name: 'pattern_spec', + type: 'object', + required: false, + description: `The pattern detection specification. Required for pattern-scope rules. Supports four types: pair_match (transfer detection between accounts), frequency_threshold (counting occurrences in a window), recurring_group (periodic merchant charge detection), and statistical_anomaly (z-score anomaly detection).`, + }, + { + name: 'priority', + type: 'integer', + required: false, + description: `Rules with higher priority numbers are evaluated first. When two rules could both set a category (or merchant name, etc.) on the same transaction, the higher-priority rule wins. Default: 0.`, + }, + { + name: 'revert_retroactively', + type: 'boolean', + required: false, + description: `When deleting or disabling a rule, whether to undo the changes it previously made to transactions (e.g., remove the category it assigned, remove tags it added). Default: false — previous changes are left in place. Set to true for a clean undo so the user's transactions return to their state before the rule existed.`, + }, + { + name: 'rule_key', + type: 'string', + required: false, + description: `The unique key of an existing rule. Required for update, delete, enable, and disable. Get this from the 'list' action response.`, + }, + { + name: 'rule_name', + type: 'string', + required: false, + description: `A short, descriptive name for the rule (e.g., 'Categorize Uber as Transportation'). Required for create and update.`, + }, + { + name: 'rule_scope', + type: 'string', + required: false, + description: `The rule scope: 'transaction' (default) evaluates filters against each individual transaction. 'pattern' evaluates a pattern specification against a time-windowed batch of transactions.`, + }, + { + name: 'trigger_mode', + type: 'string', + required: false, + description: `When to trigger pattern evaluation. Defaults to 'on_batch_complete' for pattern rules, 'on_each_transaction' for transaction rules.`, + }, + { + name: 'user_overrides', + type: 'object', + required: false, + description: `Optional overrides for library rule parameters. Must match the rule's pattern_spec type (e.g. pair_match overrides for a pair_match rule). Library rules cannot be created or deleted, but their behavior can be customized using this field on update.`, + }, + { + name: 'version', + type: 'integer', + required: false, + description: `The current version number of the rule, used to prevent conflicting edits. REQUIRED for update, delete, enable, and disable. Get this value from the 'list' action response. If someone else changed the rule since you last read it, the operation will fail with a conflict error — re-read the rule and retry.`, + }, + { + name: 'window_days', + type: 'integer', + required: false, + description: `How many days to look back when searching for matching patterns. Required for pattern-scope rules. Must be between 1 and 365.`, + }, + { + name: 'window_exclude_trigger_account', + type: 'boolean', + required: false, + description: `When true, transactions from the same account as the trigger are excluded from the window query. Useful for transfer detection to avoid self-matching.`, + }, + { + name: 'window_lookahead_days', + type: 'integer', + required: false, + description: `How many days to look ahead when searching for matching patterns. Default: 0 (no lookahead).`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__manage_categories', + description: `Create, update, hide, delete, merge, or reorder spending categories. New categories require a parent_category_key and URL-safe slug.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `What to do. Create adds a new custom category, update changes display properties, hide/unhide controls visibility, delete removes a user-created category, merge_categories combines multiple into one.`, + }, + { + name: 'apply_retroactively', + type: 'boolean', + required: false, + description: `When true, retroactively re-evaluates transactions (up to 12 months) after mapping rules are created. Defaults to true.`, + }, + { + name: 'assignment_eligibility', + type: 'string', + required: false, + description: `Controls whether the AI agent can auto-assign transactions to this category. Optional.`, + }, + { + name: 'category_key', + type: 'string', + required: false, + description: `The category key to operate on. Required for update, hide, unhide, delete. For merge_categories this is the target category key.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `A description of what this category covers. Optional.`, + }, + { + name: 'display_order', + type: 'integer', + required: false, + description: `Display order within sibling group. Optional.`, + }, + { + name: 'icon_name', + type: 'string', + required: false, + description: `A single UTF emoji character used as the category icon in the UI (e.g. "🏠", "💰"). Optional.`, + }, + { + name: 'merge_source_keys', + type: 'array', + required: false, + description: `Category keys to merge into the target. Required for merge_categories. These categories will be hidden.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The display name for the category. Required for create, optional for update (null = unchanged).`, + }, + { + name: 'parent_category_key', + type: 'string', + required: false, + description: `The parent category key (fcat_*) under which to create the new category. Required for create.`, + }, + { + name: 'reorder_entries', + type: 'array', + required: false, + description: `List of {category_key, display_order} pairs. Required for reorder.`, + }, + { + name: 'slug', + type: 'string', + required: false, + description: `A unique URL-safe slug for the new category (lowercase alphanumeric and hyphens, 2-50 chars). Required for create.`, + }, + { + name: 'source_system_keys', + type: 'array', + required: false, + description: `System category keys (fcat_*) whose transactions should be routed to this new category. Used with create and merge_categories. Each source gets a mapping rule.`, + }, + { + name: 'spending_type', + type: 'string', + required: false, + description: `Spending classification for budgeting and analytics. Optional.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__manage_manual_transaction', + description: `Create, update, or delete transactions on a manual account. Amount must be a positive integer; use direction=outflow or inflow. Currency is required for create.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: true, + description: `The account group projection key shared by all operations. Obtain from accounts__list_financial_accounts (the account_id field). Must be a manual account.`, + }, + { + name: 'operations', + type: 'array', + required: true, + description: `Array of transaction operations to execute sequentially. Each has its own action and fields.`, + }, + { + name: 'preview_only', + type: 'boolean', + required: false, + description: `When true, parse and validate all operations but do not write anything. Returns per-operation validation verdicts (valid/invalid + reason). Default: false.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__manage_transaction_tags', + description: `Create, list, update, delete, assign, or remove user-defined tags on transactions. version is required for update and delete.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `What to do: 'create_tag' makes a new tag, 'list_tags' shows all tags, 'get_tag' gets details for one tag, 'update_tag' changes a tag's name or appearance, 'delete_tag' removes a tag, 'assign_tags' attaches a tag to specific transactions, 'remove_tags' detaches a tag from specific transactions.`, + }, + { + name: 'color', + type: 'string', + required: false, + description: `A hex color code for the tag's visual appearance (e.g., '#FF5733'). Optional.`, + }, + { + name: 'display_name', + type: 'string', + required: false, + description: `The name shown to the user (e.g., 'Business Trip'). Optional when creating (defaults to the tag name). Required when updating. Maximum 50 characters.`, + }, + { + name: 'icon', + type: 'string', + required: false, + description: `An icon name for the tag's visual appearance. Optional.`, + }, + { + name: 'include_deleted', + type: 'boolean', + required: false, + description: `When listing tags, set to true to also include previously deleted tags. Default: false.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The tag name (required for create_tag). Spaces are replaced with hyphens and text is lowercased to create a stable identifier (e.g., 'Business Trip' becomes 'business-trip'). Maximum 50 characters.`, + }, + { + name: 'tag_key', + type: 'string', + required: false, + description: `The tag's unique identifier (required for get_tag, update_tag, delete_tag, assign_tags, remove_tags). Get this from create_tag or list_tags responses.`, + }, + { + name: 'tag_type', + type: 'string', + required: false, + description: `Whether this tag was created by the user ('user', default) or by an automation rule ('auto').`, + }, + { + name: 'transaction_ids', + type: 'array', + required: false, + description: `The transaction group IDs (utgr_*) to tag or untag. REQUIRED for assign_tags and remove_tags. Get these from transactions__list_transactions or transactions__search_transactions responses. Up to 100 per call.`, + }, + { + name: 'type_filter', + type: 'string', + required: false, + description: `When listing tags, only show tags of this type. Optional.`, + }, + { + name: 'version', + type: 'integer', + required: false, + description: `The current version number of the tag, used to prevent conflicting edits. REQUIRED for update_tag and delete_tag. Get this from list_tags or get_tag responses.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__manage_transfer_links', + description: `List, confirm, or reject system-detected transfer pairs between transactions (e.g. a credit card payment matched to a bank debit).`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `What to do: 'list' shows detected transfer links between accounts, 'confirm' marks a detected transfer as confirmed by the user (upgrades confidence), 'reject' removes a false positive transfer link and prevents re-detection.`, + }, + { + name: 'transaction_id', + type: 'string', + required: false, + description: `When listing, only show transfer links involving this specific transaction. Optional.`, + }, + { + name: 'transfer_link_id', + type: 'string', + required: false, + description: `The unique identifier of the transfer link to confirm or reject. Get this from the 'list' action response. Required for confirm and reject.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__search_transactions', + description: `Search and filter transactions by merchant name, description, amount range, category, date range, and direction (debit/credit). Returns matching transactions with total count and sum — no arithmetic needed. Use for targeted questions like 'how much did I spend at Starbucks?', 'what was that $50 charge?', or 'show me all refunds this month'. Supports free-text search so exact merchant names are not required. Use category_slug with a parent category (e.g., 'daily-living') to search across all subcategories (Groceries, Dining out, etc.). For browsing recent activity chronologically, prefer transactions__list_transactions instead. Session context from knowledge__get_financial_context_and_overview enriches these results with the user's profile, goals, and preferences.`, + params: [ + { + name: 'account_group_key', + type: 'string', + required: false, + description: `Filter to transactions from a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).`, + }, + { + name: 'category', + type: 'string', + required: false, + description: `Filter to a specific category name (e.g., 'Groceries', 'Transportation').`, + }, + { + name: 'category_key', + type: 'string', + required: false, + description: `Filter to transactions with this fcat_* category projection key. Get category keys from transactions__list_spending_categories. When combined with include_children=true, includes transactions from all subcategories.`, + }, + { + name: 'category_slug', + type: 'string', + required: false, + description: `Filter by category using a slug (e.g., 'daily-living', 'groceries'). When a parent category slug is used (e.g., 'daily-living'), automatically includes all subcategories (Groceries, Dining out, etc.).`, + }, + { + name: 'direction', + type: 'string', + required: false, + description: `Filter by money direction: 'debit' for money going out (purchases, payments), 'credit' for money coming in (income, refunds), or 'all' for both.`, + }, + { + name: 'include_children', + type: 'boolean', + required: false, + description: `When true and category_key is set, includes transactions from the parent category and all its subcategories. Use this for parent category transaction counts.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of transactions to return (1-50). The response also includes total_results count and sum even if the limit clips the list.`, + }, + { + name: 'max_amount', + type: 'number', + required: false, + description: `Maximum transaction amount.`, + }, + { + name: 'min_amount', + type: 'number', + required: false, + description: `Minimum transaction amount. Use negative values for charges/debits (e.g., -100 finds charges of $100 or more).`, + }, + { + name: 'period', + type: 'string', + required: false, + description: `Time range to search within. Use 'custom' with period_start/period_end for a specific date range.`, + }, + { + name: 'period_end', + type: 'string', + required: false, + description: `Custom end date (YYYY-MM-DD). Used when period is 'custom'.`, + }, + { + name: 'period_start', + type: 'string', + required: false, + description: `Custom start date (YYYY-MM-DD). Used when period is 'custom'.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Free-text search across merchant name and description. Exact merchant names are not required — partial matches work (e.g., 'star' matches 'Starbucks').`, + }, + { + name: 'review_status', + type: 'string', + required: false, + description: `Filter to transactions by their review status. System rules like anomaly detection and bounced payment detection automatically flag transactions as 'needs_review'.`, + }, + { + name: 'rule_ids', + type: 'array', + required: false, + description: `Rule projection keys (e.g. ["frul_abc"]). Only transactions matched by at least one of these rules are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get rule keys from transactions__manage_automation_rules with 'list' action.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `How to order the results: by 'date' (newest first), 'amount', or 'merchant' name.`, + }, + { + name: 'tag_keys', + type: 'array', + required: false, + description: `Tag projection keys (e.g. ["ftag_abc"]). Only transactions with at least one of these tags are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get tag keys from transactions__manage_transaction_tags with 'list_tags' action.`, + }, + ], + }, + { + name: 'eracontextmcp_transactions__update_transactions', + description: `Bulk-update up to 100 transactions: set category, description, merchant name, or review status. Use clear_* fields to revert overrides to automatic values.`, + params: [ + { + name: 'transaction_ids', + type: 'array', + required: true, + description: `IDs of the transactions to update (up to 100 at once). Get these from transactions__list_transactions or transactions__search_transactions.`, + }, + { + name: 'category_key', + type: 'string', + required: false, + description: `The category to assign to these transactions. Call transactions__list_spending_categories first to get valid category keys.`, + }, + { + name: 'clear_category', + type: 'boolean', + required: false, + description: `Remove the user's manual category choice, reverting to the automatically detected category.`, + }, + { + name: 'clear_description', + type: 'boolean', + required: false, + description: `Remove the user's custom description, reverting to the original description from the bank.`, + }, + { + name: 'clear_merchant_name', + type: 'boolean', + required: false, + description: `Remove the user's custom merchant name, reverting to the original name from the bank.`, + }, + { + name: 'clear_review_status', + type: 'boolean', + required: false, + description: `Clear the review status. Use this instead of review_status when removing a status.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Set a custom note or description for these transactions.`, + }, + { + name: 'merchant_name', + type: 'string', + required: false, + description: `Set a custom merchant name for these transactions (e.g., rename 'AMZN*1234' to 'Amazon').`, + }, + { + name: 'review_status', + type: 'string', + required: false, + description: `Review status to assign: needs_review, reviewed, or flagged.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/hubspot.ts b/src/data/agent-connectors/hubspot.ts index 294aee679..920509a85 100644 --- a/src/data/agent-connectors/hubspot.ts +++ b/src/data/agent-connectors/hubspot.ts @@ -1502,6 +1502,150 @@ export const tools: Tool[] = [ }, ], }, + { + name: 'hubspot_list_create', + description: `Create a new HubSpot CRM list for contacts, companies, or deals. Supports static (MANUAL), one-time snapshot (SNAPSHOT), and auto-updating dynamic (DYNAMIC) lists.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Display name of the list. Must be unique across all public lists in the portal.`, + }, + { + name: 'objectTypeId', + type: 'string', + required: true, + description: `Object type the list will contain. Use 0-1 for contacts, 0-2 for companies, 0-3 for deals.`, + }, + { + name: 'processingType', + type: 'string', + required: true, + description: `How list membership is determined. MANUAL for static lists, SNAPSHOT for a one-time filter run, DYNAMIC for continuously updated lists.`, + }, + { + name: 'customProperties', + type: 'string', + required: false, + description: `Custom key-value metadata to attach to the list.`, + }, + { + name: 'filterBranch', + type: 'string', + required: false, + description: `Nested filter tree defining membership criteria for DYNAMIC or SNAPSHOT lists.`, + }, + { + name: 'listFolderId', + type: 'integer', + required: false, + description: `ID of the folder to place this list in. Defaults to the root folder if omitted.`, + }, + { + name: 'listPermissions', + type: 'string', + required: false, + description: `Teams and users that should have edit access to this list, identified by their numeric HubSpot IDs.`, + }, + { + name: 'membershipSettings', + type: 'string', + required: false, + description: `Controls whether unassigned records are included in the list and which team owns the membership.`, + }, + ], + }, + { + name: 'hubspot_list_delete', + description: `Permanently delete a HubSpot CRM list by its list ID. This removes the list definition but does not delete the records it contains.`, + params: [ + { + name: 'listId', + type: 'string', + required: true, + description: `The ID of the list to delete.`, + }, + ], + }, + { + name: 'hubspot_list_filters_update', + description: `Replace the filter branch of a DYNAMIC HubSpot list. The new filterBranch fully replaces the existing definition — include any filters you want to keep. The list immediately begins reprocessing its membership after the update.`, + params: [ + { + name: 'filterBranch', + type: 'string', + required: true, + description: `The new filter branch definition that replaces the existing one. Must be a complete OR root branch with nested AND branches.`, + }, + { + name: 'listId', + type: 'string', + required: true, + description: `The ID of the list whose filters should be updated.`, + }, + ], + }, + { + name: 'hubspot_list_memberships_add', + description: `Add one or more records to a MANUAL HubSpot list by their record IDs.`, + params: [ + { + name: 'listId', + type: 'string', + required: true, + description: `ID of the list to add contacts to.`, + }, + { + name: 'recordIds', + type: 'string', + required: true, + description: `JSON array of contact record IDs to add to the list.`, + }, + ], + }, + { + name: 'hubspot_list_memberships_remove', + description: `Remove one or more records from a MANUAL HubSpot list by their record IDs.`, + params: [ + { + name: 'listId', + type: 'string', + required: true, + description: `ID of the list to remove contacts from.`, + }, + { + name: 'recordIds', + type: 'string', + required: true, + description: `JSON array of contact record IDs to remove from the list.`, + }, + ], + }, + { + name: 'hubspot_list_name_update', + description: `Rename a HubSpot CRM list. The new name must be unique across all public lists in the portal. Optionally return filter definitions in the response by setting includeFilters to true.`, + params: [ + { + name: 'listId', + type: 'string', + required: true, + description: `The ID of the list to update.`, + }, + { + name: 'listName', + type: 'string', + required: true, + description: `The new name for the list.`, + }, + { + name: 'includeFilters', + type: 'boolean', + required: false, + description: `Whether to include filter branch definitions in the response.`, + }, + ], + }, { name: 'hubspot_marketing_email_get', description: `Retrieve a single marketing email by its ID, including subject, body, send configuration, and metadata.`, @@ -1842,6 +1986,61 @@ export const tools: Tool[] = [ { name: 'price', type: 'string', required: false, description: `Price of the product` }, ], }, + { + name: 'hubspot_product_update', + description: `Update an existing product in the HubSpot product library by its product ID.`, + params: [ + { + name: 'product_id', + type: 'string', + required: true, + description: `The ID of the product to update.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `New description of the product.`, + }, + { + name: 'hs_cost_of_goods_sold', + type: 'string', + required: false, + description: `Cost of goods sold for the product.`, + }, + { + name: 'hs_recurring_billing_period', + type: 'string', + required: false, + description: `Billing period for recurring products (e.g. P1M for monthly, P1Y for annual).`, + }, + { + name: 'hs_sku', + type: 'string', + required: false, + description: `New stock keeping unit (SKU) identifier for the product.`, + }, + { + name: 'idProperty', + type: 'string', + required: false, + description: `The name of a unique property to use as the identifier instead of the default productId.`, + }, + { name: 'name', type: 'string', required: false, description: `New name of the product.` }, + { + name: 'price', + type: 'string', + required: false, + description: `New unit price of the product.`, + }, + { + name: 'properties', + type: 'string', + required: false, + description: `Arbitrary key-value pairs of any HubSpot product properties to update.`, + }, + ], + }, { name: 'hubspot_products_batch_archive', description: `Archive (soft delete) a product in HubSpot CRM using the batch archive API. Archived records are hidden from the UI but can be restored.`, @@ -1898,8 +2097,14 @@ export const tools: Tool[] = [ }, { name: 'hubspot_quote_create', - description: `Create a new quote in HubSpot for a deal.`, + description: `Create a new quote in HubSpot. Requires a title and language. Optionally associate with a deal and set expiration date, currency, status, and additional properties. Returns the created quote ID.`, params: [ + { + name: 'hs_expiration_date', + type: 'string', + required: true, + description: `Expiration date of the quote (YYYY-MM-DD format)`, + }, { name: 'hs_language', type: 'string', @@ -1914,10 +2119,16 @@ export const tools: Tool[] = [ description: `ID of the deal to associate this quote with`, }, { - name: 'hs_expiration_date', + name: 'hs_currency', type: 'string', required: false, - description: `Expiration date of the quote (YYYY-MM-DD format)`, + description: `Currency code for the quote (e.g. USD, EUR).`, + }, + { + name: 'hs_sender_company_name', + type: 'string', + required: false, + description: `Sender company name shown on the quote.`, }, { name: 'hs_status', @@ -1925,6 +2136,12 @@ export const tools: Tool[] = [ required: false, description: `Status of the quote (DRAFT, PENDING_APPROVAL, APPROVED, REJECTED)`, }, + { + name: 'properties', + type: 'object', + required: false, + description: `Additional HubSpot quote properties as a JSON object.`, + }, ], }, { @@ -1945,6 +2162,55 @@ export const tools: Tool[] = [ }, ], }, + { + name: 'hubspot_quote_update', + description: `Update an existing quote in HubSpot by its quote ID. Use this to change the title, status, expiration date, or currency of a quote.`, + params: [ + { + name: 'quote_id', + type: 'string', + required: true, + description: `The ID of the quote to update.`, + }, + { + name: 'hs_currency', + type: 'string', + required: false, + description: `Currency code for the quote (ISO 4217).`, + }, + { + name: 'hs_expiration_date', + type: 'string', + required: false, + description: `New expiration date for the quote (YYYY-MM-DD).`, + }, + { + name: 'hs_language', + type: 'string', + required: false, + description: `Language of the quote (ISO 639-1 code).`, + }, + { + name: 'hs_status', + type: 'string', + required: false, + description: `New status of the quote.`, + }, + { name: 'hs_title', type: 'string', required: false, description: `New title of the quote.` }, + { + name: 'idProperty', + type: 'string', + required: false, + description: `The name of a unique property to use as the identifier instead of the default quoteId.`, + }, + { + name: 'properties', + type: 'string', + required: false, + description: `Arbitrary key-value pairs of any HubSpot quote properties to update.`, + }, + ], + }, { name: 'hubspot_schemas_list', description: `List all custom object schemas defined in HubSpot. Returns object type IDs, labels, and property definitions needed to work with custom objects.`, @@ -2321,6 +2587,180 @@ export const tools: Tool[] = [ }, ], }, + { + name: 'hubspot_workflow_create', + description: `Create a new automation workflow in HubSpot. Use type CONTACT_FLOW for contact-based workflows. The workflow starts disabled by default unless isEnabled is set to true.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Display name of the workflow.`, + }, + { + name: 'objectTypeId', + type: 'string', + required: true, + description: `Object type the workflow operates on.`, + }, + { + name: 'type', + type: 'string', + required: true, + description: `Workflow type. Use CONTACT_FLOW for contact-based workflows.`, + }, + { + name: 'actions', + type: 'string', + required: false, + description: `Array of action steps in the workflow. Each action type can be STATIC_BRANCH, LIST_BRANCH, AB_TEST_BRANCH, CUSTOM_CODE, WEBHOOK, or SINGLE_CONNECTION.`, + }, + { + name: 'blockedDates', + type: 'string', + required: false, + description: `Dates on which workflow actions are suppressed.`, + }, + { + name: 'canEnrollFromSalesforce', + type: 'boolean', + required: false, + description: `Whether contacts can be enrolled from Salesforce. Only applicable for CONTACT_FLOW type.`, + }, + { + name: 'customProperties', + type: 'string', + required: false, + description: `Custom metadata key-value pairs attached to the workflow.`, + }, + { + name: 'dataSources', + type: 'string', + required: false, + description: `Data sources the workflow can reference, such as associated objects.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional description of the workflow's purpose.`, + }, + { + name: 'enrollmentCriteria', + type: 'string', + required: false, + description: `Criteria for enrolling contacts into the workflow.`, + }, + { + name: 'enrollmentSchedule', + type: 'string', + required: false, + description: `Schedule for re-enrollment checks.`, + }, + { + name: 'eventAnchor', + type: 'string', + required: false, + description: `The anchor point for date-based workflows, referencing a contact property or a static date.`, + }, + { + name: 'flowType', + type: 'string', + required: false, + description: `Flow sub-type. Use WORKFLOW for standard automation or ACTION_SET for action-only flows.`, + }, + { + name: 'goalFilterBranch', + type: 'string', + required: false, + description: `Filter branch defining the goal criteria that unenrolls contacts when met. Only for CONTACT_FLOW.`, + }, + { + name: 'isEnabled', + type: 'boolean', + required: false, + description: `Whether the workflow is active immediately after creation. Defaults to false.`, + }, + { + name: 'startActionId', + type: 'string', + required: false, + description: `The ID of the first action to execute in the workflow.`, + }, + { + name: 'suppressionFilterBranch', + type: 'string', + required: false, + description: `Filter branch defining contacts to exclude from enrollment. Only for PLATFORM_FLOW type.`, + }, + { + name: 'suppressionListIds', + type: 'string', + required: false, + description: `Array of list IDs whose members are excluded from workflow enrollment.`, + }, + { + name: 'timeWindows', + type: 'string', + required: false, + description: `Time windows that restrict when workflow actions can execute.`, + }, + { + name: 'unEnrollmentSetting', + type: 'string', + required: false, + description: `Controls when and how contacts are unenrolled. Only for CONTACT_FLOW.`, + }, + { + name: 'uuid', + type: 'string', + required: false, + description: `Optional stable identifier for the workflow, preserved across revisions.`, + }, + ], + }, + { + name: 'hubspot_workflow_delete', + description: `Permanently delete a HubSpot workflow by its workflow ID. This action cannot be undone.`, + params: [ + { + name: 'flow_id', + type: 'string', + required: true, + description: `The ID of the workflow to delete.`, + }, + ], + }, + { + name: 'hubspot_workflow_email_campaigns_get', + description: `Retrieve email campaigns associated with one or more HubSpot workflows. Filter by flow IDs to see which email campaigns a specific workflow sends.`, + params: [ + { + name: 'flowId', + type: 'string', + required: true, + description: `Comma-separated list of flow IDs to filter email campaigns by specific workflows.`, + }, + { + name: 'after', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'before', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the previous page.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + ], + }, { name: 'hubspot_workflow_enroll', description: `Enroll a contact into a HubSpot workflow by workflow ID and the contact's email address.`, @@ -2351,6 +2791,30 @@ export const tools: Tool[] = [ }, ], }, + { + name: 'hubspot_workflow_get_v3', + description: `Retrieve metadata for a specific v3 workflow by its v3 workflow ID, including name, type, enabled status, and optionally validation errors and statistics.`, + params: [ + { + name: 'workflow_id', + type: 'string', + required: true, + description: `The ID of the v3 workflow to retrieve.`, + }, + { + name: 'errors', + type: 'boolean', + required: false, + description: `Whether to include validation errors and warnings in the response.`, + }, + { + name: 'stats', + type: 'boolean', + required: false, + description: `Whether to include workflow statistics in the response.`, + }, + ], + }, { name: 'hubspot_workflow_unenroll', description: `Remove a contact from a HubSpot workflow by workflow ID and the contact's email address.`, @@ -2369,6 +2833,126 @@ export const tools: Tool[] = [ }, ], }, + { + name: 'hubspot_workflow_update', + description: `Replace a HubSpot workflow's full definition by flow ID. Requires the current revisionId for optimistic locking — fetch it first with Get Workflow. Provide all required fields (actions, blockedDates, customProperties, timeWindows, type, isEnabled) plus the revisionId.`, + params: [ + { + name: 'flow_id', + type: 'string', + required: true, + description: `The ID of the workflow to update.`, + }, + { + name: 'isEnabled', + type: 'boolean', + required: true, + description: `Whether the workflow should be active after the update.`, + }, + { + name: 'revisionId', + type: 'string', + required: true, + description: `The current revision ID of the workflow, used for optimistic locking to prevent concurrent overwrites.`, + }, + { + name: 'type', + type: 'string', + required: true, + description: `Workflow type. Must match the existing workflow type.`, + }, + { + name: 'actions', + type: 'string', + required: false, + description: `Array of action steps in the workflow. Replaces the existing actions. Each action type can be STATIC_BRANCH, LIST_BRANCH, AB_TEST_BRANCH, CUSTOM_CODE, WEBHOOK, or SINGLE_CONNECTION.`, + }, + { + name: 'blockedDates', + type: 'string', + required: false, + description: `Array of date ranges during which the workflow will not send actions.`, + }, + { + name: 'canEnrollFromSalesforce', + type: 'boolean', + required: false, + description: `Whether contacts can be enrolled from Salesforce. Only applicable for CONTACT_FLOW type.`, + }, + { + name: 'customProperties', + type: 'string', + required: false, + description: `Custom metadata key-value pairs attached to the workflow.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the workflow's purpose.`, + }, + { + name: 'enrollmentCriteria', + type: 'string', + required: false, + description: `How contacts are enrolled into the workflow.`, + }, + { + name: 'enrollmentSchedule', + type: 'string', + required: false, + description: `Schedule for re-enrollment checks.`, + }, + { + name: 'goalFilterBranch', + type: 'string', + required: false, + description: `Filter branch defining the goal criteria that unenrolls contacts when met. Only for CONTACT_FLOW workflows.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `New display name for the workflow.`, + }, + { + name: 'startActionId', + type: 'string', + required: false, + description: `The ID of the first action to execute in the workflow.`, + }, + { + name: 'suppressionFilterBranch', + type: 'string', + required: false, + description: `Filter branch defining contacts to exclude from enrollment. Only for PLATFORM_FLOW workflows.`, + }, + { + name: 'suppressionListIds', + type: 'string', + required: false, + description: `Array of list IDs whose members are excluded from workflow enrollment.`, + }, + { + name: 'timeWindows', + type: 'string', + required: false, + description: `Time windows that restrict when workflow actions can execute.`, + }, + { + name: 'unEnrollmentSetting', + type: 'string', + required: false, + description: `Controls when and how contacts are unenrolled from the workflow. Only for CONTACT_FLOW workflows.`, + }, + { + name: 'uuid', + type: 'string', + required: false, + description: `Optional stable identifier for the workflow, useful for tracking across revisions.`, + }, + ], + }, { name: 'hubspot_workflows_list', description: `List all automation workflows in HubSpot. Returns workflow IDs, names, types, and enabled status.`, @@ -2387,4 +2971,9 @@ export const tools: Tool[] = [ }, ], }, + { + name: 'hubspot_workflows_list_v3', + description: `List all v3 (v2) automation workflows in HubSpot. Returns the workflow IDs required by the Enroll in Workflow and Unenroll from Workflow tools. Use this instead of List Workflows when you need to enroll or unenroll a contact.`, + params: [], + }, ] diff --git a/src/data/agent-connectors/mailerlitemcp.ts b/src/data/agent-connectors/mailerlitemcp.ts new file mode 100644 index 000000000..4458b3fda --- /dev/null +++ b/src/data/agent-connectors/mailerlitemcp.ts @@ -0,0 +1,585 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'mailerlitemcp_add_subscriber', + description: `Add a new subscriber to your MailerLite account, optionally assigning them to groups and setting custom fields.`, + params: [ + { name: 'email', type: 'string', required: true, description: `The email address of the subscriber` }, + { name: 'fields', type: 'object', required: false, description: `Custom fields for the subscriber` }, + { name: 'groups', type: 'array', required: false, description: `Group IDs to add the subscriber to` }, + { name: 'name', type: 'string', required: false, description: `The name of the subscriber` }, + { name: 'resubscribe', type: 'boolean', required: false, description: `Whether to resubscribe a previously unsubscribed subscriber` }, + { name: 'status', type: 'string', required: false, description: `Subscriber status (default: active)` }, + ], + }, + { + name: 'mailerlitemcp_assign_subscriber_to_group', + description: `Add an existing subscriber to a MailerLite group by subscriber ID and group ID.`, + params: [ + { name: 'group_id', type: 'string', required: true, description: `The ID of the group` }, + { name: 'subscriber_id', type: 'string', required: true, description: `The ID or email of the subscriber` }, + ], + }, + { + name: 'mailerlitemcp_batch_requests', + description: `Execute up to 50 MailerLite API requests in a single batch call. Webhooks are not supported.`, + params: [ + { name: 'requests', type: 'array', required: true, description: `Array of API requests to execute (max 50)` }, + ], + }, + { + name: 'mailerlitemcp_build_custom_automation', + description: `Validate an automation plan before creating it. Checks trigger type, steps, and optionally discovers matching resources.`, + params: [ + { name: 'steps', type: 'array', required: true, description: `Planned automation steps in order` }, + { name: 'trigger_type', type: 'string', required: true, description: `The trigger type for the automation` }, + { name: 'resource_name', type: 'string', required: false, description: `Optional resource name to search for (partial match)` }, + { name: 'resource_type', type: 'string', required: false, description: `Resource type to look up. Defaults based on trigger: group for subscriber_joins_group, form for form_completed, shop for abandoned_cart, segment for subscriber_joins_segment` }, + ], + }, + { + name: 'mailerlitemcp_cancel_campaign', + description: `Cancel a scheduled or delivering campaign by its campaign ID.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign to cancel` }, + ], + }, + { + name: 'mailerlitemcp_create_automation', + description: `Create a new automation workflow with a trigger type, trigger config, and ordered steps (email or delay).`, + params: [ + { name: 'name', type: 'string', required: true, description: `Name for the automation` }, + { name: 'steps', type: 'array', required: true, description: `Steps in order (email or delay)` }, + { name: 'trigger_config', type: 'object', required: true, description: `Trigger configuration (group_ids for subscriber_joins_group, segment_id for subscriber_joins_segment, form_id for form_completed, shop_id for abandoned_cart)` }, + { name: 'trigger_type', type: 'string', required: true, description: `Trigger type` }, + ], + }, + { + name: 'mailerlitemcp_create_campaign', + description: `Create a new email campaign. The sender email must be a verified sender on your MailerLite account.`, + params: [ + { name: 'from', type: 'string', required: true, description: `The sender email address (must be verified on the MailerLite account)` }, + { name: 'from_name', type: 'string', required: true, description: `The sender name` }, + { name: 'name', type: 'string', required: true, description: `The name of the campaign` }, + { name: 'subject', type: 'string', required: true, description: `The email subject line` }, + { name: 'type', type: 'string', required: true, description: `The type of campaign` }, + { name: 'content', type: 'string', required: false, description: `The HTML content of the email (optional - can be designed in dashboard)` }, + { name: 'groups', type: 'array', required: false, description: `Group IDs to send to` }, + { name: 'reply_to', type: 'string', required: false, description: `Reply-to email address` }, + ], + }, + { + name: 'mailerlitemcp_create_field', + description: `Create a new custom subscriber field for storing additional subscriber data.`, + params: [ + { name: 'name', type: 'string', required: true, description: `The name of the field` }, + { name: 'type', type: 'string', required: true, description: `The type of the field` }, + ], + }, + { + name: 'mailerlitemcp_create_form', + description: `Create a new signup form (popup, embedded, or promotion) linked to one or more groups.`, + params: [ + { name: 'groups', type: 'array', required: true, description: `Group IDs to assign new subscribers to (required, at least one)` }, + { name: 'name', type: 'string', required: true, description: `The name of the form` }, + { name: 'type', type: 'string', required: true, description: `The type of form to create` }, + ], + }, + { + name: 'mailerlitemcp_create_group', + description: `Create a new subscriber group to organize your mailing list.`, + params: [ + { name: 'name', type: 'string', required: true, description: `The name of the group` }, + ], + }, + { + name: 'mailerlitemcp_create_segment', + description: `Create a new dynamic segment based on subscriber filter conditions.`, + params: [ + { name: 'name', type: 'string', required: true, description: `The name of the segment` }, + { name: 'filter', type: 'object', required: false, description: `Filter rules object. Format: {"rules": [[{"operator": "text_field_contains", "args": ["field_id", "value"]}]]}. Inner arrays are AND groups, outer array is OR between groups. Omit to create a segment without filters (can be configured in dashboard).` }, + ], + }, + { + name: 'mailerlitemcp_create_webhook', + description: `Create a webhook to receive real-time event notifications from MailerLite.`, + params: [ + { name: 'events', type: 'array', required: true, description: `Webhook events to subscribe to` }, + { name: 'url', type: 'string', required: true, description: `The URL to send webhook payloads to` }, + { name: 'batchable', type: 'boolean', required: false, description: `Required as true for campaign.open, campaign.click, and subscriber.deleted events` }, + { name: 'enabled', type: 'boolean', required: false, description: `Whether the webhook is enabled` }, + { name: 'name', type: 'string', required: false, description: `A name for the webhook` }, + ], + }, + { + name: 'mailerlitemcp_delete_automation', + description: `Permanently delete an automation workflow by its automation ID.`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `The ID of the automation to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_campaign', + description: `Permanently delete a campaign by its campaign ID.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_field', + description: `Delete a custom subscriber field by its field ID.`, + params: [ + { name: 'field_id', type: 'string', required: true, description: `The ID of the field to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_form', + description: `Delete a signup form by its form ID.`, + params: [ + { name: 'form_id', type: 'string', required: true, description: `The ID of the form to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_group', + description: `Delete a subscriber group by its group ID.`, + params: [ + { name: 'group_id', type: 'string', required: true, description: `The ID of the group to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_segment', + description: `Delete a dynamic segment by its segment ID.`, + params: [ + { name: 'segment_id', type: 'string', required: true, description: `The ID of the segment to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_subscriber', + description: `Permanently delete a subscriber by their subscriber ID.`, + params: [ + { name: 'subscriber_id', type: 'string', required: true, description: `The ID or email of the subscriber to delete` }, + ], + }, + { + name: 'mailerlitemcp_delete_webhook', + description: `Delete a webhook by its webhook ID.`, + params: [ + { name: 'webhook_id', type: 'string', required: true, description: `The ID of the webhook to delete` }, + ], + }, + { + name: 'mailerlitemcp_discover_automation_templates', + description: `Search and discover available automation templates by type and user intent.`, + params: [ + { name: 'type', type: 'string', required: true, description: `Template type to retrieve` }, + { name: 'user_intent', type: 'string', required: false, description: `The user's specific automation goal (e.g., welcome series, abandoned cart)` }, + ], + }, + { + name: 'mailerlitemcp_dry_run_automation', + description: `Preview an automation flow by sending a test run to a specified email address.`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `ID of automation to test` }, + { name: 'test_email', type: 'string', required: true, description: `Email address for virtual test subscriber` }, + ], + }, + { + name: 'mailerlitemcp_fetch', + description: `Fetch a MailerLite resource by its ID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `Identifier returned from the search tool (e.g., "campaign:123", "group:456")` }, + ], + }, + { + name: 'mailerlitemcp_generate_email_content', + description: `Generate email body content from a subject line and optional plain text.`, + params: [ + { name: 'plain_text', type: 'string', required: true, description: `The plain text email body to validate` }, + { name: 'subject', type: 'string', required: true, description: `The email subject line to validate` }, + ], + }, + { + name: 'mailerlitemcp_get_auth_status', + description: `Check the current authentication status and account details for the connected MailerLite account.`, + params: [ + ], + }, + { + name: 'mailerlitemcp_get_automation_activity', + description: `Retrieve activity logs for an automation, filtered by date, status, or subscriber search.`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `The ID of the automation` }, + { name: 'status', type: 'string', required: true, description: `Filter by activity status` }, + { name: 'date_from', type: 'string', required: false, description: `Filter from date (Y-m-d). For completed/canceled/failed statuses` }, + { name: 'date_to', type: 'string', required: false, description: `Filter to date (Y-m-d). For completed/canceled/failed statuses` }, + { name: 'limit', type: 'integer', required: false, description: `Number of results per page (default 10)` }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'scheduled_from', type: 'string', required: false, description: `Filter scheduled from date (Y-m-d). For active status` }, + { name: 'scheduled_to', type: 'string', required: false, description: `Filter scheduled to date (Y-m-d). For active status` }, + { name: 'search', type: 'string', required: false, description: `Search by subscriber email` }, + ], + }, + { + name: 'mailerlitemcp_get_campaign', + description: `Retrieve details for a specific campaign by its campaign ID.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign` }, + ], + }, + { + name: 'mailerlitemcp_get_campaign_link_recipients', + description: `List subscribers who clicked a specific link in a campaign.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign` }, + { name: 'link_id', type: 'string', required: true, description: `The ID of the link` }, + { name: 'limit', type: 'string', required: false, description: `Number of results per page (10, 25, 50, or 100)` }, + { name: 'order', type: 'string', required: false, description: `Sort direction` }, + { name: 'order_by', type: 'string', required: false, description: `Sort field` }, + { name: 'page', type: 'integer', required: false, description: `Page number for pagination` }, + { name: 'search', type: 'string', required: false, description: `Search by subscriber email` }, + ], + }, + { + name: 'mailerlitemcp_get_campaign_links', + description: `List all tracked links for a campaign.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign` }, + ], + }, + { + name: 'mailerlitemcp_get_campaign_subscribers', + description: `List subscribers for a campaign, filtered by activity type (opened, clicked, bounced, etc.).`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign` }, + { name: 'limit', type: 'integer', required: false, description: `Number of results (allowed values: 10, 25, 50, 100)` }, + { name: 'page', type: 'integer', required: false, description: `Page number for pagination` }, + { name: 'search', type: 'string', required: false, description: `Search by subscriber email` }, + { name: 'sort', type: 'string', required: false, description: `Sort field` }, + { name: 'type', type: 'string', required: false, description: `Filter by activity type` }, + ], + }, + { + name: 'mailerlitemcp_get_dashboard_link', + description: `Get a direct link to a MailerLite dashboard resource (automation or other context).`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `Automation ID` }, + { name: 'context', type: 'string', required: false, description: `What the user needs to edit (e.g., "design email", "edit automation")` }, + ], + }, + { + name: 'mailerlitemcp_get_form', + description: `Retrieve details for a specific signup form by its form ID.`, + params: [ + { name: 'form_id', type: 'string', required: true, description: `The ID of the form` }, + ], + }, + { + name: 'mailerlitemcp_get_form_subscribers', + description: `List subscribers who signed up through a specific form.`, + params: [ + { name: 'form_id', type: 'string', required: true, description: `The ID of the form` }, + { name: 'filter', type: 'string', required: false, description: `Filter subscribers` }, + { name: 'limit', type: 'integer', required: false, description: `Number of subscribers to return (1-100)` }, + { name: 'page', type: 'integer', required: false, description: `Page number for pagination` }, + ], + }, + { + name: 'mailerlitemcp_get_group_subscribers', + description: `List subscribers in a specific group, with optional cursor-based pagination.`, + params: [ + { name: 'group_id', type: 'string', required: true, description: `The ID of the group` }, + { name: 'cursor', type: 'string', required: false, description: `Cursor for pagination` }, + { name: 'limit', type: 'integer', required: false, description: `Number of subscribers to return (1-100)` }, + ], + }, + { + name: 'mailerlitemcp_get_segment', + description: `Retrieve details for a specific segment by its segment ID.`, + params: [ + { name: 'segment_id', type: 'string', required: true, description: `The ID of the segment` }, + ], + }, + { + name: 'mailerlitemcp_get_segment_subscribers', + description: `List subscribers matching a segment, with cursor pagination and status filtering.`, + params: [ + { name: 'segment_id', type: 'string', required: true, description: `The ID of the segment` }, + { name: 'cursor', type: 'string', required: false, description: `Cursor for pagination` }, + { name: 'limit', type: 'integer', required: false, description: `Number of subscribers to return (1-100)` }, + { name: 'status', type: 'string', required: false, description: `Filter by subscriber status` }, + ], + }, + { + name: 'mailerlitemcp_get_subscriber', + description: `Retrieve a subscriber's full profile by their subscriber ID.`, + params: [ + { name: 'subscriber_id', type: 'string', required: true, description: `The ID or email of the subscriber` }, + ], + }, + { + name: 'mailerlitemcp_get_subscriber_activity', + description: `Retrieve recent activity events for a subscriber (opens, clicks, etc.).`, + params: [ + { name: 'subscriber_id', type: 'string', required: true, description: `The ID or email of the subscriber` }, + ], + }, + { + name: 'mailerlitemcp_get_subscriber_count', + description: `Get the total count of subscribers in your MailerLite account.`, + params: [ + ], + }, + { + name: 'mailerlitemcp_get_webhook', + description: `Retrieve details for a specific webhook by its webhook ID.`, + params: [ + { name: 'webhook_id', type: 'string', required: true, description: `The ID of the webhook` }, + ], + }, + { + name: 'mailerlitemcp_import_subscribers_to_group', + description: `Bulk-import multiple subscribers into a group in one request.`, + params: [ + { name: 'group_id', type: 'string', required: true, description: `The ID of the group to import to` }, + { name: 'subscribers', type: 'array', required: true, description: `Array of subscribers to import` }, + { name: 'autoresponders', type: 'boolean', required: false, description: `Whether to trigger autoresponders` }, + { name: 'resubscribe', type: 'boolean', required: false, description: `Whether to resubscribe previously unsubscribed subscribers` }, + ], + }, + { + name: 'mailerlitemcp_install_template', + description: `Install a MailerLite email template into your account by template ID.`, + params: [ + { name: 'template_id', type: 'string', required: true, description: `ID of template to install` }, + ], + }, + { + name: 'mailerlitemcp_list_automations', + description: `List all automations in the account, with optional filtering to enabled automations only.`, + params: [ + { name: 'enabled_only', type: 'boolean', required: false, description: `Only show enabled automations` }, + { name: 'limit', type: 'number', required: false, description: `Maximum number of automations to return` }, + ], + }, + { + name: 'mailerlitemcp_list_campaigns', + description: `List campaigns in the account, with filtering by status and type.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `Cursor for pagination` }, + { name: 'limit', type: 'integer', required: false, description: `Number of campaigns to return (allowed values: 1, 10, 25, 50, 100)` }, + { name: 'status', type: 'string', required: false, description: `Filter by campaign status` }, + { name: 'type', type: 'string', required: false, description: `Filter by campaign type` }, + ], + }, + { + name: 'mailerlitemcp_list_email_templates', + description: `List available email templates with optional search and pagination.`, + params: [ + { name: 'limit', type: 'number', required: false, description: `Maximum number of templates to return (default: 10)` }, + { name: 'search', type: 'string', required: false, description: `Search filter for template names` }, + ], + }, + { + name: 'mailerlitemcp_list_fields', + description: `List all custom subscriber fields with optional filtering and sorting.`, + params: [ + { name: 'keyword', type: 'string', required: false, description: `Filter by keyword` }, + { name: 'limit', type: 'integer', required: false, description: `Number of fields to return` }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'sort', type: 'string', required: false, description: `Sort field` }, + { name: 'type', type: 'string', required: false, description: `Filter by field type` }, + ], + }, + { + name: 'mailerlitemcp_list_form_templates', + description: `List available form templates, filtered by form type.`, + params: [ + { name: 'type', type: 'string', required: true, description: `Form template type` }, + { name: 'limit', type: 'integer', required: false, description: `Number of templates to return (default: 25)` }, + ], + }, + { + name: 'mailerlitemcp_list_forms', + description: `List all signup forms with optional filtering by name, type, and sorting.`, + params: [ + { name: 'type', type: 'string', required: true, description: `The type of forms to list` }, + { name: 'limit', type: 'integer', required: false, description: `Number of forms to return (1-100)` }, + { name: 'name', type: 'string', required: false, description: `Filter by form name` }, + { name: 'page', type: 'integer', required: false, description: `Page number for pagination` }, + { name: 'sort', type: 'string', required: false, description: `Sort field` }, + ], + }, + { + name: 'mailerlitemcp_list_resources', + description: `List MailerLite resources (groups, forms, segments, or shops) with optional name filtering.`, + params: [ + { name: 'resource_type', type: 'string', required: true, description: `Type of resource to list (singular: group, form, shop, or segment)` }, + { name: 'name_filter', type: 'string', required: false, description: `Optional filter by name (partial match)` }, + ], + }, + { + name: 'mailerlitemcp_list_segments', + description: `List all dynamic segments with pagination.`, + params: [ + { name: 'limit', type: 'integer', required: false, description: `Number of segments to return (1-100)` }, + { name: 'page', type: 'integer', required: false, description: `Page number for pagination` }, + ], + }, + { + name: 'mailerlitemcp_list_subscribers', + description: `List subscribers with cursor-based pagination, status filtering, and limit control.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `Cursor for pagination` }, + { name: 'limit', type: 'integer', required: false, description: `Number of subscribers to return (1-100, default 25)` }, + { name: 'status', type: 'string', required: false, description: `Filter by subscriber status` }, + ], + }, + { + name: 'mailerlitemcp_list_webhooks', + description: `List all configured webhooks in the account.`, + params: [ + ], + }, + { + name: 'mailerlitemcp_schedule_campaign', + description: `Schedule a campaign for immediate or future delivery. Use delivery 'instant' to send now.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign to schedule` }, + { name: 'delivery', type: 'string', required: true, description: `Delivery type: "instant" sends now, "scheduled" sends at a specific time, "timezone_based" sends per subscriber timezone, "smart_sending" uses AI-optimized send times` }, + { name: 'schedule', type: 'object', required: false, description: `Schedule details — required when delivery is "scheduled" or "timezone_based"` }, + ], + }, + { + name: 'mailerlitemcp_search', + description: `Search across MailerLite subscribers and groups by query string.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Text to search for across MailerLite resources` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum number of results to return (default 10)` }, + ], + }, + { + name: 'mailerlitemcp_select_resource', + description: `Select a specific MailerLite resource by ID and type for use in an automation workflow.`, + params: [ + { name: 'resource_id', type: 'string', required: true, description: `The ID of the selected resource` }, + { name: 'resource_name', type: 'string', required: true, description: `The name of the selected resource` }, + { name: 'resource_type', type: 'string', required: true, description: `The type of the selected resource` }, + ], + }, + { + name: 'mailerlitemcp_send_test_automation', + description: `Send a test run of an automation to a specified email address.`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `ID of automation to test` }, + { name: 'email', type: 'string', required: true, description: `Your email address to receive the test emails` }, + ], + }, + { + name: 'mailerlitemcp_start_automation_conversation', + description: `Start a guided conversation to help build an automation from a natural language request.`, + params: [ + { name: 'user_request', type: 'string', required: true, description: `What the user asked for` }, + ], + }, + { + name: 'mailerlitemcp_suggest_subject_lines', + description: `Generate and return improved subject line suggestions based on provided input.`, + params: [ + { name: 'subject_lines', type: 'array', required: true, description: `Array of subject line candidates to validate` }, + ], + }, + { + name: 'mailerlitemcp_unassign_subscriber_from_group', + description: `Remove a subscriber from a group by subscriber ID and group ID.`, + params: [ + { name: 'group_id', type: 'string', required: true, description: `The ID of the group` }, + { name: 'subscriber_id', type: 'string', required: true, description: `The ID or email of the subscriber` }, + ], + }, + { + name: 'mailerlitemcp_update_automation_delay', + description: `Update the delay duration and unit for a specific step in an automation.`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `Automation ID` }, + { name: 'step_index', type: 'number', required: true, description: `Delay step index (0-based, only counts delay steps)` }, + { name: 'unit', type: 'string', required: true, description: `Delay duration unit` }, + { name: 'value', type: 'number', required: true, description: `Delay duration value (must be positive)` }, + ], + }, + { + name: 'mailerlitemcp_update_automation_email', + description: `Update the subject and plain text content for an email step in an automation.`, + params: [ + { name: 'automation_id', type: 'string', required: true, description: `Automation ID` }, + { name: 'step_index', type: 'number', required: true, description: `Email step index (0-based, only counts email steps)` }, + { name: 'subject', type: 'string', required: true, description: `Email subject line` }, + { name: 'plain_text', type: 'string', required: false, description: `Plain text email content` }, + ], + }, + { + name: 'mailerlitemcp_update_campaign', + description: `Update the name, subject, sender, or content of an existing campaign.`, + params: [ + { name: 'campaign_id', type: 'string', required: true, description: `The ID of the campaign to update` }, + { name: 'content', type: 'string', required: false, description: `New HTML content` }, + { name: 'from', type: 'string', required: false, description: `New sender email` }, + { name: 'from_name', type: 'string', required: false, description: `New sender name` }, + { name: 'name', type: 'string', required: false, description: `New campaign name` }, + { name: 'subject', type: 'string', required: false, description: `New email subject` }, + ], + }, + { + name: 'mailerlitemcp_update_field', + description: `Rename a custom subscriber field.`, + params: [ + { name: 'field_id', type: 'string', required: true, description: `The ID of the field to update` }, + { name: 'name', type: 'string', required: true, description: `The new name for the field` }, + ], + }, + { + name: 'mailerlitemcp_update_form', + description: `Update the name of an existing signup form.`, + params: [ + { name: 'form_id', type: 'string', required: true, description: `The ID of the form to update` }, + { name: 'name', type: 'string', required: false, description: `New name for the form` }, + ], + }, + { + name: 'mailerlitemcp_update_group', + description: `Rename an existing subscriber group.`, + params: [ + { name: 'group_id', type: 'string', required: true, description: `The ID of the group to update` }, + { name: 'name', type: 'string', required: true, description: `The new name for the group` }, + ], + }, + { + name: 'mailerlitemcp_update_segment', + description: `Update the name of an existing segment.`, + params: [ + { name: 'name', type: 'string', required: true, description: `New name for the segment` }, + { name: 'segment_id', type: 'string', required: true, description: `The ID of the segment to update` }, + ], + }, + { + name: 'mailerlitemcp_update_subscriber', + description: `Update an existing subscriber's name, status, or custom fields.`, + params: [ + { name: 'subscriber_id', type: 'string', required: true, description: `The ID or email of the subscriber` }, + { name: 'fields', type: 'object', required: false, description: `Custom fields to update` }, + { name: 'name', type: 'string', required: false, description: `The new name for the subscriber` }, + ], + }, + { + name: 'mailerlitemcp_update_webhook', + description: `Update the configuration of an existing webhook.`, + params: [ + { name: 'webhook_id', type: 'string', required: true, description: `The ID of the webhook to update` }, + { name: 'batchable', type: 'boolean', required: false, description: `Required as true for campaign.open, campaign.click, and subscriber.deleted events` }, + { name: 'enabled', type: 'boolean', required: false, description: `Whether the webhook is enabled` }, + { name: 'events', type: 'array', required: false, description: `Webhook events to subscribe to` }, + { name: 'name', type: 'string', required: false, description: `A name for the webhook` }, + { name: 'url', type: 'string', required: false, description: `The URL to send webhook payloads to` }, + ], + }, +] diff --git a/src/data/agent-connectors/mixmaxmcp.ts b/src/data/agent-connectors/mixmaxmcp.ts new file mode 100644 index 000000000..13b78cc53 --- /dev/null +++ b/src/data/agent-connectors/mixmaxmcp.ts @@ -0,0 +1,49 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'mixmaxmcp_meetings', + description: `Query Mixmax meetings and calendar data. Supports actions: get_event, search_events, find_event_by_meet_id, get_calendar, get_meeting_prep, list_meeting_preps, get_meeting_summary, search_meeting_summaries, get_meeting_transcript, get_meeting_assistant_settings, list_meeting_types, get_admin_copilot_settings.`, + params: [ + { name: 'action', type: 'string', required: true, description: `The action to perform. See the tool description for accepted values.` }, + { name: 'after', type: 'string', required: false, description: `ISO 8601 timestamp. Return events that start after this date and time.` }, + { name: 'attendee', type: 'string', required: false, description: `Email address of the attendee to filter meeting summaries by.` }, + { name: 'before', type: 'string', required: false, description: `ISO 8601 timestamp. Return events that start before this date and time.` }, + { name: 'domain', type: 'string', required: false, description: `Attendee email domain to filter events by (for search_events).` }, + { name: 'emails', type: 'array', required: false, description: `List of email addresses to filter events by.` }, + { name: 'eventId', type: 'string', required: false, description: `The unique calendar event ID (required for get_event).` }, + { name: 'eventType', type: 'string', required: false, description: `Type of calendar event to filter by. Accepted values: default, focusTime, outOfOffice.` }, + { name: 'expand', type: 'string', required: false, description: `Expand events to include additional data. Accepted values: mixmax:summary.` }, + { name: 'from', type: 'string', required: false, description: `ISO 8601 timestamp. Start of the date range for meeting summaries search.` }, + { name: 'includeContext', type: 'boolean', required: false, description: `Whether to include full LLM context in the meeting prep response. Defaults to true.` }, + { name: 'isExternal', type: 'boolean', required: false, description: `When true, filters to external meetings only.` }, + { name: 'limit', type: 'number', required: false, description: `Maximum number of results to return.` }, + { name: 'meetingId', type: 'string', required: false, description: `The Google Meet ID of the event (required for find_event_by_meet_id).` }, + { name: 'meetingKey', type: 'string', required: false, description: `The unique meeting key returned by search_meeting_summaries. Required for get_meeting_summary and get_meeting_transcript.` }, + { name: 'owner', type: 'string', required: false, description: `Filter meeting summaries by ownership. Accepted values: me, shared, workspace.` }, + { name: 'skip', type: 'number', required: false, description: `Number of results to skip for pagination.` }, + { name: 'title', type: 'string', required: false, description: `Filter meeting summaries by meeting title.` }, + { name: 'to', type: 'string', required: false, description: `ISO 8601 timestamp. End of the date range for meeting summaries search.` }, + { name: 'uniqueKey', type: 'string', required: false, description: `The unique meeting prep key (required for get_meeting_prep).` }, + ], + }, + { + name: 'mixmaxmcp_mixmax_info', + description: `Retrieve general information about the Mixmax account and configuration.`, + params: [ + ], + }, + { + name: 'mixmaxmcp_sequences', + description: `Query and inspect Mixmax email sequences. Supports actions: list_sequences, get_sequence, get_sequence_insights, find_contact_in_sequences, get_daily_send_count, validate_sequence.`, + params: [ + { name: 'action', type: 'string', required: true, description: `The action to perform. See the tool description for accepted values.` }, + { name: 'contactEmail', type: 'string', required: false, description: `Email address of the contact to look up in sequences.` }, + { name: 'folder', type: 'string', required: false, description: `Filter sequences by folder name.` }, + { name: 'limit', type: 'number', required: false, description: `Maximum number of results to return.` }, + { name: 'name', type: 'string', required: false, description: `Filter sequences by name using a substring match.` }, + { name: 'next', type: 'string', required: false, description: `Pagination cursor from the previous response. Use the 'next' field in the response to get the next page.` }, + { name: 'sequenceId', type: 'string', required: false, description: `The unique ID of the sequence (required for get_sequence, get_sequence_insights, and validate_sequence).` }, + ], + }, +] diff --git a/src/data/agent-connectors/neonmcp.ts b/src/data/agent-connectors/neonmcp.ts new file mode 100644 index 000000000..9a481b3fd --- /dev/null +++ b/src/data/agent-connectors/neonmcp.ts @@ -0,0 +1,288 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'neonmcp_compare_database_schema', + description: `Compare the database schema between two branches to identify differences in tables, columns, and constraints.`, + params: [ + { name: 'branchId', type: 'string', required: true, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: true, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + ], + }, + { + name: 'neonmcp_complete_database_migration', + description: `Apply a database migration to the main branch and clean up the temporary migration branch.`, + params: [ + { name: 'databaseName', type: 'string', required: true, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + { name: 'migrationId', type: 'string', required: true, description: `The migration ID returned by \`prepare_database_migration\`.` }, + { name: 'migrationSql', type: 'string', required: true, description: `The SQL DDL statement(s) to apply as a migration.` }, + { name: 'parentBranchId', type: 'string', required: true, description: `The ID of the parent branch to apply the migration to.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'temporaryBranchId', type: 'string', required: true, description: `The ID of the temporary branch created during the prepare step.` }, + { name: 'applyChanges', type: 'boolean', required: false, description: `Set to \`true\` to apply changes, \`false\` to discard and only clean up.` }, + ], + }, + { + name: 'neonmcp_complete_query_tuning', + description: `Finish a query tuning session by applying or discarding changes from the temporary tuning branch.`, + params: [ + { name: 'databaseName', type: 'string', required: true, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'suggestedSqlStatements', type: 'array', required: true, description: `The DDL statements suggested by \`prepare_query_tuning\` (e.g. CREATE INDEX).` }, + { name: 'temporaryBranchId', type: 'string', required: true, description: `The ID of the temporary branch created during the prepare step.` }, + { name: 'tuningId', type: 'string', required: true, description: `The tuning ID returned by \`prepare_query_tuning\`. Not the branch ID.` }, + { name: 'applyChanges', type: 'boolean', required: false, description: `Set to \`true\` to apply changes, \`false\` to discard and only clean up.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'roleName', type: 'string', required: false, description: `The name of the role to connect with. If you have used a specific role in prepare_query_tuning you MUST pass the same role again to this tool. If not provided, the default role (usually "neondb_owner") will be used.` }, + { name: 'shouldDeleteTemporaryBranch', type: 'boolean', required: false, description: `Set to \`true\` to delete the temporary branch after tuning. Default is \`true\`.` }, + ], + }, + { + name: 'neonmcp_configure_neon_auth', + description: `Configure Neon Auth settings for a branch by specifying the desired operation.`, + params: [ + { name: 'branchId', type: 'string', required: true, description: `The ID of the branch to configure Neon Auth for.` }, + { name: 'operation', type: 'string', required: true, description: `The configuration operation to perform on Neon Auth.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'allowLocalhost', type: 'boolean', required: false, description: `Whether to allow localhost as a trusted origin. Used with set_allow_localhost operation.` }, + { name: 'trusted_origin', type: 'string', required: false, description: `The origin URL to add or remove from trusted origins. Required for add_trusted_origin and remove_trusted_origin operations.` }, + ], + }, + { + name: 'neonmcp_create_branch', + description: `Create a new branch in a Neon project for isolated development or testing.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchName', type: 'string', required: false, description: `An optional name for the new branch.` }, + { name: 'parentId', type: 'string', required: false, description: `An optional branch ID (e.g. 'br-...') to branch from. If omitted, the branch is created from the project's default branch. Use this to fork an existing non-default branch — for example, to make an isolated copy of a dev/staging branch for experimentation.` }, + ], + }, + { + name: 'neonmcp_create_project', + description: `Create a new Neon project with a default database and branch, returning the connection string.`, + params: [ + { name: 'name', type: 'string', required: false, description: `An optional name for the new project.` }, + { name: 'org_id', type: 'string', required: false, description: `The organization ID to associate the project with.` }, + ], + }, + { + name: 'neonmcp_delete_branch', + description: `Permanently delete a branch and all its data from a Neon project.`, + params: [ + { name: 'branchId', type: 'string', required: true, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + ], + }, + { + name: 'neonmcp_delete_project', + description: `Permanently delete a Neon project and all its branches and data.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + ], + }, + { + name: 'neonmcp_describe_branch', + description: `Get a tree view of all objects in a branch including databases, schemas, tables, views, and functions.`, + params: [ + { name: 'branchId', type: 'string', required: true, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_describe_project', + description: `Get details and configuration of a specific Neon project by its ID.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + ], + }, + { + name: 'neonmcp_describe_table_schema', + description: `Get column definitions, data types, and constraints for a specific table in a Neon database.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'tableName', type: 'string', required: true, description: `The name of the table` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_explain_sql_statement', + description: `Analyze the query execution plan for a SQL statement using EXPLAIN ANALYZE.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'sql', type: 'string', required: true, description: `The SQL statement to execute.` }, + { name: 'analyze', type: 'boolean', required: false, description: `Set to \`true\` to include ANALYZE in EXPLAIN. Default is \`true\`.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_fetch', + description: `Fetch detailed information about a specific organization, project, or branch using its ID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The entity ID returned by the \`search\` tool.` }, + ], + }, + { + name: 'neonmcp_get_connection_string', + description: `Get a PostgreSQL connection string for a Neon database, resolving project, branch, and database automatically.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'computeId', type: 'string', required: false, description: `The ID of the compute endpoint. Defaults to the branch's read-write compute if not provided.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + { name: 'roleName', type: 'string', required: false, description: `The database role to connect with. Defaults to \`neondb_owner\` if not provided.` }, + ], + }, + { + name: 'neonmcp_get_database_tables', + description: `List all tables in a Neon database on a specific branch.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_get_doc_resource', + description: `Fetch a specific Neon documentation page as markdown content by its URL.`, + params: [ + { name: 'slug', type: 'string', required: true, description: `The docs page slug (path) to fetch, e.g. 'docs/guides/prisma.md'. Slugs use .md file endings matching the URLs in the documentation index. Use the list_docs_resources tool first to discover available slugs.` }, + ], + }, + { + name: 'neonmcp_get_neon_auth_config', + description: `Read the full Neon Auth configuration for a specific branch.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + ], + }, + { + name: 'neonmcp_list_branch_computes', + description: `List all compute endpoints for a project or branch.`, + params: [ + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'projectId', type: 'string', required: false, description: `The ID of the Neon project.` }, + ], + }, + { + name: 'neonmcp_list_docs_resources', + description: `List all available Neon documentation pages from the Neon docs index.`, + params: [ + ], + }, + { + name: 'neonmcp_list_organizations', + description: `List all organizations the current user belongs to, with optional name or ID filter.`, + params: [ + { name: 'search', type: 'string', required: false, description: `Filter results by partial name or ID.` }, + ], + }, + { + name: 'neonmcp_list_projects', + description: `List Neon projects in your account with optional search and pagination.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `The cursor value from the previous response for pagination.` }, + { name: 'limit', type: 'number', required: false, description: `Maximum number of results to return (1–400). Default is 10.` }, + { name: 'org_id', type: 'string', required: false, description: `The organization ID to associate the project with.` }, + { name: 'search', type: 'string', required: false, description: `Filter results by partial name or ID.` }, + ], + }, + { + name: 'neonmcp_list_shared_projects', + description: `List projects shared with the current user for collaboration.`, + params: [ + { name: 'cursor', type: 'string', required: false, description: `The cursor value from the previous response for pagination.` }, + { name: 'limit', type: 'number', required: false, description: `Maximum number of results to return (1–400). Default is 10.` }, + { name: 'search', type: 'string', required: false, description: `Filter results by partial name or ID.` }, + ], + }, + { + name: 'neonmcp_list_slow_queries', + description: `List slow queries from a Neon database to identify performance bottlenecks.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'computeId', type: 'string', required: false, description: `The ID of the compute endpoint. Defaults to the branch's read-write compute if not provided.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + { name: 'limit', type: 'number', required: false, description: `Maximum number of results to return (1–400). Default is 10.` }, + { name: 'minExecutionTime', type: 'number', required: false, description: `Minimum query execution time in milliseconds to flag as slow. Default is 1000 ms.` }, + ], + }, + { + name: 'neonmcp_prepare_database_migration', + description: `Prepare a database schema migration by generating and executing DDL statements on a temporary branch.`, + params: [ + { name: 'migrationSql', type: 'string', required: true, description: `The SQL DDL statement(s) to apply as a migration.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_prepare_query_tuning', + description: `Start a query tuning session by analyzing execution plans and suggesting optimizations on a temporary branch.`, + params: [ + { name: 'databaseName', type: 'string', required: true, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'sql', type: 'string', required: true, description: `The SQL statement to execute.` }, + { name: 'roleName', type: 'string', required: false, description: `The database role to connect with. Defaults to \`neondb_owner\` if not provided.` }, + ], + }, + { + name: 'neonmcp_provision_neon_auth', + description: `Provision Neon Auth for a branch, enabling managed authentication backed by Better Auth.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_provision_neon_data_api', + description: `Provision the Neon Data API for HTTP-based access to a Postgres database with JWT authentication.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to neondb if not provided.` }, + ], + }, + { + name: 'neonmcp_reset_from_parent', + description: `Reset a branch to its parent branch state, discarding all changes made on the branch.`, + params: [ + { name: 'branchIdOrName', type: 'string', required: true, description: `The ID or name of the branch to reset.` }, + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'preserveUnderName', type: 'string', required: false, description: `Optional name to preserve the current branch state before resetting.` }, + ], + }, + { + name: 'neonmcp_run_sql', + description: `Execute a single SQL statement against a Neon database and return the results.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'sql', type: 'string', required: true, description: `The SQL statement to execute.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_run_sql_transaction', + description: `Execute multiple SQL statements as a single transaction against a Neon database.`, + params: [ + { name: 'projectId', type: 'string', required: true, description: `The ID of the Neon project.` }, + { name: 'sqlStatements', type: 'array', required: true, description: `The SQL statements to execute as a single transaction.` }, + { name: 'branchId', type: 'string', required: false, description: `The ID of the branch. Leave blank to use the default branch.` }, + { name: 'databaseName', type: 'string', required: false, description: `The name of the database. Defaults to \`neondb\` if not provided.` }, + ], + }, + { + name: 'neonmcp_search', + description: `Search across all organizations, projects, and branches by keyword, returning matching items with IDs and URLs.`, + params: [ + { name: 'query', type: 'string', required: true, description: `The search keyword. Must be at least 3 characters.` }, + ], + }, +] diff --git a/src/data/agent-connectors/nocodbmcp.ts b/src/data/agent-connectors/nocodbmcp.ts new file mode 100644 index 000000000..45fd64f3a --- /dev/null +++ b/src/data/agent-connectors/nocodbmcp.ts @@ -0,0 +1,93 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'nocodbmcp_aggregate', + description: `Perform aggregations (sum, count, avg, etc.) on table data with filtering and grouping`, + params: [ + { name: 'aggregations', type: 'array', required: true, description: `List of aggregation operations to perform on the table fields.` }, + { name: 'filterGroups', type: 'array', required: true, description: `List of filter groups; each group produces a separate set of aggregation results.` }, + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to aggregate data from.` }, + { name: 'viewId', type: 'string', required: false, description: `Optional view ID to scope the aggregation to a specific view's configuration.` }, + ], + }, + { + name: 'nocodbmcp_countrecords', + description: `Count Records in a Table`, + params: [ + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to count records in.` }, + { name: 'where', type: 'string', required: false, description: `Filter expression to limit which records are counted. Uses NocoDB query syntax: (field,operator,value). Combine conditions with ~and / ~or.` }, + ], + }, + { + name: 'nocodbmcp_createrecords', + description: `Create records in a table`, + params: [ + { name: 'records', type: 'array', required: true, description: `List of records to create. Each record is an object with a 'fields' key containing field name-value pairs.` }, + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to insert records into.` }, + ], + }, + { + name: 'nocodbmcp_deleterecords', + description: `Delete records in a table`, + params: [ + { name: 'records', type: 'array', required: true, description: `List of records to delete. Each entry must include the record ID.` }, + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to delete records from.` }, + ], + }, + { + name: 'nocodbmcp_getbaseinfo', + description: `Fetch information about current base`, + params: [ + ], + }, + { + name: 'nocodbmcp_getrecord', + description: `Fetch a record by ID`, + params: [ + { name: 'recordId', type: 'string', required: true, description: `The ID or primary key value of the record to fetch.` }, + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table containing the record.` }, + { name: 'fields', type: 'string', required: false, description: `Comma-separated list of field names to include in the response. Leave blank to return all fields.` }, + ], + }, + { + name: 'nocodbmcp_gettableschema', + description: `Get the table schema including fields and views information`, + params: [ + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to retrieve the schema for.` }, + ], + }, + { + name: 'nocodbmcp_gettableslist', + description: `List tables accessible by user`, + params: [ + ], + }, + { + name: 'nocodbmcp_queryrecords', + description: `Query Records from a Table`, + params: [ + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to query records from.` }, + { name: 'fields', type: 'array', required: false, description: `List of field names to include in the response. Returns all fields when omitted.` }, + { name: 'page', type: 'number', required: false, description: `Page number for pagination. Starts at 1.` }, + { name: 'pageSize', type: 'number', required: false, description: `Number of records to return per page. Default is 50.` }, + { name: 'sort', type: 'array', required: false, description: `List of sort options. Each entry specifies a field name and sort direction.` }, + { name: 'where', type: 'string', required: false, description: `Filter expression using NocoDB query syntax: (field,operator,value). Combine with ~and / ~or.` }, + ], + }, + { + name: 'nocodbmcp_readattachment', + description: `Read attachments in a record`, + params: [ + { name: 'files', type: 'array', required: true, description: `List of attachment objects from NocoDB. Each attachment must include title, mimeType, size, and either a URL or a path.` }, + ], + }, + { + name: 'nocodbmcp_updaterecords', + description: `Update records in a table`, + params: [ + { name: 'records', type: 'array', required: true, description: `List of records to update. Each entry must include the record ID and a 'fields' object with the updated values.` }, + { name: 'tableId', type: 'string', required: true, description: `The unique ID of the NocoDB table to update records in.` }, + ], + }, +] diff --git a/src/data/agent-connectors/pandadocmcp.ts b/src/data/agent-connectors/pandadocmcp.ts new file mode 100644 index 000000000..bfc0d4db3 --- /dev/null +++ b/src/data/agent-connectors/pandadocmcp.ts @@ -0,0 +1,199 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'pandadocmcp_documents_archive', + description: `Archive a document by ID to remove it from active lists without permanently deleting it.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID to archive` }, + ], + }, + { + name: 'pandadocmcp_documents_audit_trail_get', + description: `Retrieve the full audit trail for a document, showing all events including views, signatures, and status changes.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + ], + }, + { + name: 'pandadocmcp_documents_content_get', + description: `Get the content of a document in HTML or PDF format by document ID.`, + params: [ + { name: 'content_format', type: 'string', required: true, description: `Content format to return. Must be one of: 'plaintext' or 'markdown'.` }, + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + ], + }, + { + name: 'pandadocmcp_documents_create', + description: `Create a new document from an existing template with optional recipients, tokens, fields, and metadata.`, + params: [ + { name: 'name', type: 'string', required: true, description: `New document name` }, + { name: 'recipients', type: 'array', required: true, description: `List of recipients for the document` }, + { name: 'template_uuid', type: 'string', required: true, description: `Template UUID` }, + { name: 'content_placeholders', type: 'string', required: false, description: `Content placeholders for content library blocks` }, + { name: 'detect_title_variables', type: 'string', required: false, description: `Use title variables from template in document name` }, + { name: 'fields', type: 'string', required: false, description: `Document fields as key-value pairs` }, + { name: 'folder_uuid', type: 'string', required: false, description: `Destination folder UUID` }, + { name: 'images', type: 'string', required: false, description: `Images to populate in template image blocks` }, + { name: 'metadata', type: 'string', required: false, description: `Document metadata as key-value pairs` }, + { name: 'owner', type: 'string', required: false, description: `Document owner (email or membership_id)` }, + { name: 'pricing_tables', type: 'string', required: false, description: `Pricing tables` }, + { name: 'tables', type: 'string', required: false, description: `Tables` }, + { name: 'tags', type: 'string', required: false, description: `Document tags` }, + { name: 'texts', type: 'string', required: false, description: `Text blocks to populate by name` }, + { name: 'tokens', type: 'string', required: false, description: `Document tokens (variables) as name/value pairs` }, + ], + }, + { + name: 'pandadocmcp_documents_create_from_markdown', + description: `Create a new PandaDoc document from Markdown content with optional recipients and role-based fields.`, + params: [ + { name: 'document_markdown', type: 'string', required: true, description: `Content of the document in markdown` }, + { name: 'name', type: 'string', required: true, description: `Name of the new document` }, + { name: 'folder_id', type: 'string', required: false, description: `ID of the folder to create the document in. Optional, if not provided document will be created in root folder.` }, + { name: 'recipients', type: 'string', required: false, description: `List of document recipients. Optional, if not provided document will be created without recipients.` }, + { name: 'role_fields', type: 'string', required: false, description: `List of roles with assigned fields. Optional, if not provided no fields will be assigned to recipients by default. MUST be used together with \`recipients\`: every role referenced here must match the \`role\` of a recipient in the \`recipients\` argument. Passing \`role_fields\` without a matching recipient role will cause an error.` }, + ], + }, + { + name: 'pandadocmcp_documents_details_get', + description: `Retrieve full details for a document including metadata, recipients, fields, and status.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + ], + }, + { + name: 'pandadocmcp_documents_fields_assign', + description: `Assign, reassign, or unassign document fields to recipients. Document must be in draft status.`, + params: [ + { name: 'assignments', type: 'array', required: true, description: `List of field-to-recipient assignments. Each item maps a field UUID to a recipient UUID (or null to unassign).` }, + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + ], + }, + { + name: 'pandadocmcp_documents_list', + description: `List documents with optional filters for status, folder, tag, and search query. Returns paginated results.`, + params: [ + { name: 'count', type: 'string', required: false, description: `Limits the size of the response. Default is 50 documents, maximum is 100 documents.` }, + { name: 'folder_uuid', type: 'string', required: false, description: `Filters by the folder where the documents are stored.` }, + { name: 'page', type: 'string', required: false, description: `Paginates the search result. Increase value to get the next page of results.` }, + { name: 'q', type: 'string', required: false, description: `Filters documents by name or reference number (stored on the template level).` }, + { name: 'status', type: 'string', required: false, description: `Filters documents by the status. 0: document.draft, 1: document.sent, 2: document.completed, 3: document.uploaded, 4: document.error, 5: document.viewed, 6: document.waiting_approval, 7: document.approved, 8: document.rejected, 9: document.waiting_pay, 10: document.paid, 11: document.voided, 12: document.declined, 13: document.external_review.` }, + { name: 'tag', type: 'string', required: false, description: `Filters documents by tag.` }, + ], + }, + { + name: 'pandadocmcp_documents_metadata_get', + description: `Get AI-extracted metadata fields from a document, combining document and content data into structured key-value pairs.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + { name: 'limit', type: 'string', required: false, description: `Maximum number of fields to return in one response. Omit for API default (100). Max 100.` }, + { name: 'offset', type: 'string', required: false, description: `Number of fields to skip before starting to collect the result set. For predictable paging, use multiples of \`limit\`.` }, + ], + }, + { + name: 'pandadocmcp_documents_search', + description: `Full-text search across documents with optional filters for status, date range, and pagination.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Full-text search string (matches document content and metadata).` }, + { name: 'count', type: 'string', required: false, description: `Page size: public API \`\`count\`\` query param. Omit for default (30). Max 100.` }, + { name: 'date_filter_column', type: 'string', required: false, description: `Which document timestamp the date window applies to. If you set any date filter, set **all three** of \`\`date_filter_column\`\`, \`\`from_date\`\`, and \`\`to_date\`\`. Allowed values: \`\`date_created\`\`, \`\`date_expiration\`\`, \`\`last_modified\`\`, \`\`signature_date\`\`, \`\`effective_date\`\`.` }, + { name: 'from_date', type: 'string', required: false, description: `Inclusive window start (ISO-8601), e.g. \`\`2026-03-01T00:00:00Z\`\`. Use together with \`\`date_filter_column\`\` and \`\`to_date\`\`.` }, + { name: 'page', type: 'string', required: false, description: `Page number (1-based). Omit to use API default (1).` }, + { name: 'status', type: 'string', required: false, description: `Restrict hits to these PandaDoc document status codes (omit to ignore status). 0 draft, 1 sent, 2 completed, 5 viewed, 6 waiting approval, 7 approved, 8 rejected, 9 waiting pay, 10 paid, 11 expired, 12 declined, 13 external review. Example: \`\`[1, 2]\`\` for sent or completed.` }, + { name: 'to_date', type: 'string', required: false, description: `Inclusive window end (ISO-8601), e.g. \`\`2026-03-31T23:59:59Z\`\`. Use together with \`\`date_filter_column\`\` and \`\`from_date\`\`.` }, + ], + }, + { + name: 'pandadocmcp_documents_send', + description: `Send a draft document to recipients for review and signature with optional message, subject, and CC settings.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + { name: 'forwarding_settings', type: 'string', required: false, description: `Settings for document and signature forwarding. Controls whether recipients can forward the document or reassign their fields to another person.` }, + { name: 'message', type: 'string', required: false, description: `A message that will be sent by email with a link to the document to sign.` }, + { name: 'reply_to', type: 'string', required: false, description: `Email address used as reply-to for the document. Must be enabled for the account by support.` }, + { name: 'selected_approvers', type: 'string', required: false, description: `Configuration for selecting approvers from approval workflow groups. Copy 'steps' from the 'approval_execution' section of Document Details and set 'is_selected' to true for the desired approver.` }, + { name: 'sender', type: 'string', required: false, description: `Set a sender of a document as an email or membership_id.` }, + { name: 'silent', type: 'string', required: false, description: `If true, disables email notifications for document recipients and the sender. Also disables scheduled reminders. Does not affect 'Approve document' email notification.` }, + { name: 'subject', type: 'string', required: false, description: `Value that will be used as the email subject.` }, + ], + }, + { + name: 'pandadocmcp_documents_status_change', + description: `Manually change a document status to completed, expired, paid, or voided.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + { name: 'status', type: 'integer', required: true, description: `Document status code (2=completed, 10=paid, 11=expired, 12=declined)` }, + { name: 'note', type: 'string', required: false, description: `Optional note for the status change` }, + { name: 'notify_recipients', type: 'boolean', required: false, description: `Whether to notify recipients of the status change` }, + ], + }, + { + name: 'pandadocmcp_documents_status_get', + description: `Get the current status of a document by ID.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + ], + }, + { + name: 'pandadocmcp_documents_summary_get', + description: `Get an AI-generated or standard summary for a document by ID.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + { name: 'summary_type', type: 'string', required: true, description: `Summary granularity to return. Must be one of: 'detailed', 'short', or 'headline'.` }, + ], + }, + { + name: 'pandadocmcp_documents_update', + description: `Update a draft document — name, recipients, fields, tokens, images, pricing tables, and metadata. Document must be in draft status.`, + params: [ + { name: 'document_id', type: 'string', required: true, description: `Document ID` }, + { name: 'fields', type: 'string', required: false, description: `Document fields as key-value pairs` }, + { name: 'images', type: 'string', required: false, description: `Images` }, + { name: 'metadata', type: 'string', required: false, description: `Document metadata as key-value pairs` }, + { name: 'name', type: 'string', required: false, description: `Document name` }, + { name: 'pricing_tables', type: 'string', required: false, description: `Pricing tables` }, + { name: 'recipients', type: 'string', required: false, description: `List of recipients. Each should have email, first_name, last_name, etc.` }, + { name: 'tables', type: 'string', required: false, description: `Tables` }, + { name: 'tags', type: 'string', required: false, description: `Document tags` }, + { name: 'texts', type: 'string', required: false, description: `List of text blocks to update. Each item should have 'name' and 'data' fields` }, + { name: 'tokens', type: 'string', required: false, description: `Document tokens (variables). Each should have name and value.` }, + { name: 'url', type: 'string', required: false, description: `Document URL` }, + ], + }, + { + name: 'pandadocmcp_templates_create', + description: `Create a new template from a publicly accessible PDF URL with optional name, folder, tokens, and owner.`, + params: [ + { name: 'url', type: 'string', required: true, description: `Secure (HTTPS) and publicly accessible URL to the PDF document` }, + { name: 'folder_uuid', type: 'string', required: false, description: `Folder ID where the created template should be stored` }, + { name: 'metadata', type: 'string', required: false, description: `Arbitrary key-value data to associate with the template` }, + { name: 'name', type: 'string', required: false, description: `The name of the template` }, + { name: 'owner_email', type: 'string', required: false, description: `Owner email for the template` }, + { name: 'owner_membership_id', type: 'string', required: false, description: `Owner membership_id for the template` }, + { name: 'tokens', type: 'string', required: false, description: `CUSTOM variables as list of {name, value} pairs` }, + ], + }, + { + name: 'pandadocmcp_templates_details_get', + description: `Get full details for a template including roles, fields, tokens, and pricing tables.`, + params: [ + { name: 'template_id', type: 'string', required: true, description: `Template ID` }, + ], + }, + { + name: 'pandadocmcp_templates_list', + description: `List templates with optional filters for search, tags, folder, and shared/deleted status.`, + params: [ + { name: 'count', type: 'string', required: false, description: `Specify how many templates to return.` }, + { name: 'deleted', type: 'string', required: false, description: `Returns only the deleted templates.` }, + { name: 'fields', type: 'string', required: false, description: `A comma-separated list of additional fields to include in the response.` }, + { name: 'folder_uuid', type: 'string', required: false, description: `UUID of the folder where the templates are stored.` }, + { name: 'page', type: 'string', required: false, description: `Specify which page of the dataset to return.` }, + { name: 'q', type: 'string', required: false, description: `Search query. Filter by template name.` }, + { name: 'shared', type: 'string', required: false, description: `Returns only the shared templates.` }, + { name: 'tag', type: 'string', required: false, description: `Search tag. Filter by template tag.` }, + { name: 'template_id', type: 'string', required: false, description: `Specify template ID.` }, + ], + }, +] diff --git a/src/data/agent-connectors/plainmcp.ts b/src/data/agent-connectors/plainmcp.ts new file mode 100644 index 000000000..d177fbf7f --- /dev/null +++ b/src/data/agent-connectors/plainmcp.ts @@ -0,0 +1,635 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'plainmcp_addgeneratedreply', + description: `Add an AI-generated reply to a thread in Plain.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_addlabels', + description: `Add one or more labels to a thread.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_archivelabeltype', + description: `Archive a label type so it can no longer be applied to threads.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_assignthread', + description: `Assign a thread to a user or machine user.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_bulkupsertthreadfields', + description: `Create or update multiple thread field values in a single call.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_changethreadpriority', + description: `Update the priority of a thread. Valid priorities are 0 (urgent) through 3 (low).`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_createlabeltype', + description: `Create a new label type that can be applied to threads.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_createnote', + description: `Add an internal note to a thread, visible only to workspace members.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_createthread', + description: `Open a new support thread for an existing customer. Does not send a message — follow up with replyToThread if needed.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_createthreadfieldschema', + description: `Create a new custom thread field schema for the workspace.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_deletethreadfieldschema', + description: `Permanently delete a custom thread field schema by key.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_getcustomerdetails', + description: `Fetch a customer's full profile including email, assignment, company, and timestamps.`, + params: [ + { + name: 'customerId', + type: 'string', + required: true, + description: `Plain customer ID (starts with c_). Get it from getCustomers or getCustomerDetails.`, + }, + ], + }, + { + name: 'plainmcp_getcustomers', + description: `Return a paginated list of all customers in the workspace.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_getcustomerthreads', + description: `Return all threads belonging to a specific customer, with optional status filtering.`, + params: [ + { + name: 'customerId', + type: 'string', + required: true, + description: `Plain customer ID (starts with c_). Get it from getCustomers or getCustomerDetails.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + { + name: 'statusDetails', + type: 'array', + required: false, + description: `Filter by status detail. Accepted values: CREATED, NEW_REPLY, WAITING_FOR_CUSTOMER, IN_PROGRESS.`, + }, + { + name: 'statuses', + type: 'array', + required: false, + description: `Filter by thread status. Accepted values: TODO, SNOOZED, DONE.`, + }, + ], + }, + { + name: 'plainmcp_gethelpcenterarticle', + description: `Fetch a single Help Center article by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Unique identifier of the resource.`, + }, + ], + }, + { + name: 'plainmcp_gethelpcenterarticlebyslug', + description: `Fetch a Help Center article by its URL slug.`, + params: [ + { + name: 'helpCenterId', + type: 'string', + required: true, + description: `Plain Help Center ID (starts with hc_). Get it from getHelpCenters.`, + }, + { + name: 'slug', + type: 'string', + required: true, + description: `URL slug of the Help Center article.`, + }, + ], + }, + { + name: 'plainmcp_gethelpcenterarticlegroups', + description: `Return all article groups for a Help Center.`, + params: [ + { + name: 'helpCenterId', + type: 'string', + required: true, + description: `Plain Help Center ID (starts with hc_). Get it from getHelpCenters.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_gethelpcenterarticles', + description: `Return a paginated list of articles in a Help Center.`, + params: [ + { + name: 'helpCenterId', + type: 'string', + required: true, + description: `Plain Help Center ID (starts with hc_). Get it from getHelpCenters.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_gethelpcenters', + description: `Return all Help Centers in the workspace.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_getlabels', + description: `Return all label types available in the workspace.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_getmyassignedthreads', + description: `Return threads assigned to the authenticated user, with optional status and priority filters.`, + params: [ + { + name: 'userId', + type: 'string', + required: true, + description: `Plain user ID (starts with u_). Get it from getUserByEmail or getMyUser.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + { + name: 'priorities', + type: 'array', + required: false, + description: `Filter by priority: 0 = urgent, 1 = high, 2 = normal, 3 = low.`, + }, + { + name: 'statusDetails', + type: 'array', + required: false, + description: `Filter by status detail. Accepted values: CREATED, NEW_REPLY, WAITING_FOR_CUSTOMER, IN_PROGRESS.`, + }, + { + name: 'statuses', + type: 'array', + required: false, + description: `Filter by thread status. Accepted values: TODO, SNOOZED, DONE.`, + }, + ], + }, + { + name: 'plainmcp_getmyuser', + description: `Return the profile of the currently authenticated workspace user.`, + params: [], + }, + { + name: 'plainmcp_getmyworkspace', + description: `Return details about the current workspace including its ID and name.`, + params: [], + }, + { + name: 'plainmcp_gettenantdetails', + description: `Fetch full details for a specific tenant by its ID.`, + params: [ + { + name: 'tenantId', + type: 'string', + required: true, + description: `Plain tenant ID (starts with t_). Get it from getCustomers.`, + }, + ], + }, + { + name: 'plainmcp_gettenants', + description: `Return a paginated list of all tenants in the workspace.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_getthreaddetails', + description: `Fetch a thread's full details and timeline entries by thread ID.`, + params: [ + { + name: 'threadId', + type: 'string', + required: true, + description: `Plain thread ID (starts with th_). Get it from getThreads or searchThreads.`, + }, + { + name: 'timelineCursor', + type: 'string', + required: false, + description: `Pagination cursor for the thread timeline from the previous pageInfo.endCursor.`, + }, + { + name: 'timelineFirst', + type: 'number', + required: false, + description: `Number of timeline entries to return per page.`, + }, + ], + }, + { + name: 'plainmcp_getthreadfieldschemas', + description: `Return all custom thread field schemas defined in the workspace.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_getthreads', + description: `Return threads with flexible filtering by status, priority, assignee, customer, labels, or date range.`, + params: [ + { + name: 'assignedToUser', + type: 'array', + required: false, + description: `Filter threads assigned to these user IDs (start with u_).`, + }, + { + name: 'createdAtAfter', + type: 'string', + required: false, + description: `Return only threads created after this ISO 8601 timestamp.`, + }, + { + name: 'createdAtBefore', + type: 'string', + required: false, + description: `Return only threads created before this ISO 8601 timestamp.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'customerIds', + type: 'array', + required: false, + description: `Filter by these Plain customer IDs (start with c_).`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + { + name: 'isAssigned', + type: 'boolean', + required: false, + description: `Pass true for assigned threads, false for unassigned, or omit for all.`, + }, + { + name: 'labelTypeIds', + type: 'array', + required: false, + description: `Filter by these label type IDs (start with lt_). Get them from getLabels.`, + }, + { + name: 'priorities', + type: 'array', + required: false, + description: `Filter by priority: 0 = urgent, 1 = high, 2 = normal, 3 = low.`, + }, + { + name: 'statusDetails', + type: 'array', + required: false, + description: `Filter by status detail. Accepted values: CREATED, NEW_REPLY, WAITING_FOR_CUSTOMER, IN_PROGRESS.`, + }, + { + name: 'statuses', + type: 'array', + required: false, + description: `Filter by thread status. Accepted values: TODO, SNOOZED, DONE.`, + }, + ], + }, + { + name: 'plainmcp_getuserbyemail', + description: `Look up a workspace user by their email address.`, + params: [ + { name: 'email', type: 'string', required: true, description: `Email address of the user.` }, + ], + }, + { + name: 'plainmcp_markthreadasdone', + description: `Mark a thread as done, moving it out of the active queue.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_markthreadastodo', + description: `Mark a thread as todo, returning it to the active queue.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_movelabeltype', + description: `Reorder a label type within the workspace label list.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_removelabels', + description: `Remove one or more labels from a thread.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_reorderthreadfieldschemas', + description: `Change the display order of custom thread field schemas.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_replytothread', + description: `Send a reply to the last message in a thread via email, Slack, or chat.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_searchcustomers', + description: `Search customers by name or email and return a paginated list of matches.`, + params: [ + { + name: 'search', + type: 'string', + required: true, + description: `Search query to filter results by text.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_searchtenants', + description: `Search tenants by name and return matching results.`, + params: [ + { + name: 'searchTerm', + type: 'string', + required: true, + description: `Search text to filter tenant results.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + ], + }, + { + name: 'plainmcp_searchthreads', + description: `Search threads by text with optional filters for status, priority, assignee, customer, and labels.`, + params: [ + { + name: 'searchQuery', + type: 'string', + required: true, + description: `Search text to match against thread title, description, or messages.`, + }, + { + name: 'assignedToUser', + type: 'array', + required: false, + description: `Filter threads assigned to these user IDs (start with u_).`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response's pageInfo.endCursor.`, + }, + { + name: 'customerIds', + type: 'array', + required: false, + description: `Filter by these Plain customer IDs (start with c_).`, + }, + { + name: 'first', + type: 'number', + required: false, + description: `Number of results to return per page. Defaults to 10.`, + }, + { + name: 'labelTypeIds', + type: 'array', + required: false, + description: `Filter by these label type IDs (start with lt_). Get them from getLabels.`, + }, + { + name: 'priorities', + type: 'array', + required: false, + description: `Filter by priority: 0 = urgent, 1 = high, 2 = normal, 3 = low.`, + }, + { + name: 'statusDetails', + type: 'array', + required: false, + description: `Filter by status detail. Accepted values: CREATED, NEW_REPLY, WAITING_FOR_CUSTOMER, IN_PROGRESS.`, + }, + { + name: 'statuses', + type: 'array', + required: false, + description: `Filter by thread status. Accepted values: TODO, SNOOZED, DONE.`, + }, + ], + }, + { + name: 'plainmcp_snoozethread', + description: `Snooze a thread until a specified date and time.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_unarchivelabeltype', + description: `Restore an archived label type so it can be applied to threads again.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_unassignthread', + description: `Remove the current assignee from a thread.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_updatelabeltype', + description: `Update the name or color of an existing label type.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_updatethreadfieldschema', + description: `Update the label or options of an existing thread field schema.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_updatethreadtitle', + description: `Update the title of an existing thread.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_upsertcustomer', + description: `Create or update a customer by external ID, email, or customer ID.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_upserthelpcenterarticle', + description: `Create or update a Help Center article by slug.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_upserttenant', + description: `Create or update a tenant by external ID or tenant ID.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_upserttenantfield', + description: `Set or update a custom field value on a tenant.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'plainmcp_upsertthreadfield', + description: `Set or update a custom field value on a thread.`, + params: [{ name: 'input', type: 'string', required: true, description: `No description.` }], + }, +] diff --git a/src/data/agent-connectors/pylonmcp.ts b/src/data/agent-connectors/pylonmcp.ts new file mode 100644 index 000000000..e421f3bb1 --- /dev/null +++ b/src/data/agent-connectors/pylonmcp.ts @@ -0,0 +1,890 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'pylonmcp_create_issue', + description: `Create a new issue in Pylon with a title, body, and account. Optionally assign a requester, priority, team, and tags.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'body_html', + type: 'string', + required: true, + description: `The HTML content of the body of the issue. Required.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `The title of the issue. Required.`, + }, + { + name: 'assignee_id', + type: 'string', + required: false, + description: `ID of the user to assign this resource to.`, + }, + { + name: 'priority', + type: 'string', + required: false, + description: `The priority of the issue.`, + }, + { + name: 'requester_id', + type: 'string', + required: false, + description: `The ID of the requester (contact) that this issue is on behalf of.`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `An array of tags to set on the issue.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `The ID of the team to assign the issue to.`, + }, + ], + }, + { + name: 'pylonmcp_create_milestone', + description: `Create a milestone within a project. Optionally set a due date and account.`, + params: [ + { name: 'name', type: 'string', required: true, description: `Milestone name.` }, + { + name: 'project_id', + type: 'string', + required: true, + description: `Project ID for this milestone.`, + }, + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date in RFC3339 format.`, + }, + ], + }, + { + name: 'pylonmcp_create_project', + description: `Create a project for an account. Provide a name or a project_template_id to scaffold milestones and tasks from a template.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'customer_portal_visible', + type: 'boolean', + required: false, + description: `Whether this project is visible in the customer portal.`, + }, + { + name: 'description_html', + type: 'string', + required: false, + description: `Project description as HTML.`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date in RFC3339 format.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Project name. Required unless project_template_id is provided.`, + }, + { + name: 'owner_id', + type: 'string', + required: false, + description: `ID of the user who owns this resource.`, + }, + { + name: 'owner_type', + type: 'string', + required: false, + description: `Owner type. Defaults to user when owner_id is provided.`, + }, + { + name: 'project_template_id', + type: 'string', + required: false, + description: `Project template ID to scaffold tasks, milestones, and subtasks from.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date in RFC3339 format.`, + }, + { name: 'status', type: 'string', required: false, description: `Project status.` }, + ], + }, + { + name: 'pylonmcp_create_project_from_template', + description: `Create a project from a template, copying its milestones, tasks, and subtasks. Optionally override name, dates, owner, and status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'project_template_id', + type: 'string', + required: true, + description: `Project template ID to use.`, + }, + { + name: 'customer_portal_visible', + type: 'boolean', + required: false, + description: `Optional customer portal visibility override.`, + }, + { + name: 'description_html', + type: 'string', + required: false, + description: `Optional project description override as HTML.`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `Optional end date override in RFC3339 format.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Optional project name override.`, + }, + { + name: 'owner_id', + type: 'string', + required: false, + description: `ID of the user who owns this resource.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Optional start date override in RFC3339 format.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Optional project status override.`, + }, + ], + }, + { + name: 'pylonmcp_create_task', + description: `Create a new task with a title. Optionally link it to an account, project, milestone, or parent task.`, + params: [ + { + name: 'title', + type: 'string', + required: true, + description: `The title of the task. Required.`, + }, + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'assignee_id', + type: 'string', + required: false, + description: `ID of the user to assign this resource to.`, + }, + { + name: 'body_html', + type: 'string', + required: false, + description: `The body HTML content of the task.`, + }, + { + name: 'customer_portal_visible', + type: 'boolean', + required: false, + description: `Whether the task is visible in the customer portal.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `The due date for the task in RFC3339 format.`, + }, + { + name: 'milestone_id', + type: 'string', + required: false, + description: `The ID of the milestone that this task belongs to.`, + }, + { + name: 'parent_task_id', + type: 'string', + required: false, + description: `The ID of the parent task, to create this as a subtask.`, + }, + { + name: 'project_id', + type: 'string', + required: false, + description: `The ID of the project that this task belongs to.`, + }, + { name: 'status', type: 'string', required: false, description: `The status of the task.` }, + ], + }, + { + name: 'pylonmcp_delete_task', + description: `Permanently delete a task by its ID.`, + params: [ + { + name: 'task_id', + type: 'string', + required: true, + description: `The ID of the task to delete. Required.`, + }, + ], + }, + { + name: 'pylonmcp_get_account', + description: `Retrieve a single account by its ID or external ID.`, + params: [ + { + name: 'account', + type: 'string', + required: true, + description: `The account ID (UUID) or external ID.`, + }, + ], + }, + { + name: 'pylonmcp_get_contact', + description: `Retrieve a single contact by their ID or external ID.`, + params: [ + { name: 'contact', type: 'string', required: true, description: `The contact ID (UUID).` }, + ], + }, + { + name: 'pylonmcp_get_issue', + description: `Retrieve a single issue by its ID.`, + params: [ + { + name: 'issue', + type: 'string', + required: true, + description: `The issue ID (UUID) or issue number.`, + }, + ], + }, + { + name: 'pylonmcp_get_issue_messages', + description: `Retrieve all messages and replies for a specific issue.`, + params: [ + { + name: 'issue', + type: 'string', + required: true, + description: `The issue ID (UUID) or issue number.`, + }, + ], + }, + { + name: 'pylonmcp_get_me', + description: `Retrieve the profile of the currently authenticated user.`, + params: [], + }, + { + name: 'pylonmcp_get_milestone', + description: `Retrieve a single milestone by its ID.`, + params: [ + { + name: 'milestone_id', + type: 'string', + required: true, + description: `The milestone ID to get details for.`, + }, + ], + }, + { + name: 'pylonmcp_get_milestones', + description: `List milestones, optionally filtered by project or account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'project_id', + type: 'string', + required: false, + description: `Project ID to filter milestones by.`, + }, + ], + }, + { + name: 'pylonmcp_get_project', + description: `Retrieve a single project by its ID.`, + params: [ + { + name: 'project_id', + type: 'string', + required: true, + description: `The project ID to get details for. Required.`, + }, + ], + }, + { + name: 'pylonmcp_get_project_templates', + description: `List available project templates, optionally filtered by name.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Optional case-insensitive template name filter.`, + }, + ], + }, + { + name: 'pylonmcp_get_projects', + description: `List projects, optionally filtered by account and archived status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'include_archived', + type: 'boolean', + required: false, + description: `Whether to include archived projects. Defaults to false.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + ], + }, + { + name: 'pylonmcp_get_task', + description: `Retrieve a single task by its ID.`, + params: [ + { + name: 'task_id', + type: 'string', + required: true, + description: `The task ID to get details for. Required.`, + }, + ], + }, + { + name: 'pylonmcp_get_tasks', + description: `List tasks, optionally filtered by project, account, and status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'project_id', + type: 'string', + required: false, + description: `The project ID to filter tasks by.`, + }, + { name: 'statuses', type: 'array', required: false, description: `Filter by task statuses.` }, + ], + }, + { + name: 'pylonmcp_get_user', + description: `Retrieve a single user by their ID or email.`, + params: [{ name: 'user', type: 'string', required: true, description: `The user ID (UUID).` }], + }, + { + name: 'pylonmcp_search_accounts', + description: `Search accounts by name, domain, owner, tags, or custom field filters.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'custom_field_filters', + type: 'array', + required: false, + description: `Filter by custom fields. Each filter specifies a custom field slug, operator, and value(s). For user-type fields, pass a Pylon user name or ID as the value - names will be resolved to Pylon user IDs automatically.`, + }, + { + name: 'domain', + type: 'string', + required: false, + description: `Filter by domain (accounts containing this domain).`, + }, + { + name: 'external_id', + type: 'string', + required: false, + description: `Filter by external ID.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Filter by account name (partial match).`, + }, + { + name: 'owner', + type: 'string', + required: false, + description: `Filter by account owner. Accepts a user ID or name (partial match).`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Filter by tags. Returns accounts containing any of the specified tags.`, + }, + ], + }, + { + name: 'pylonmcp_search_issues', + description: `Search issues by account, assignee, state, tags, type, and date range.`, + params: [ + { + name: 'account', + type: 'string', + required: false, + description: `Filter by account. Accepts either an account ID or a name (partial match).`, + }, + { + name: 'assignee', + type: 'string', + required: false, + description: `Filter by assignee. Accepts either a user ID or a name (partial match).`, + }, + { + name: 'created_after', + type: 'string', + required: false, + description: `Filter for issues created after this time (RFC3339 format).`, + }, + { + name: 'created_before', + type: 'string', + required: false, + description: `Filter for issues created before this time (RFC3339 format).`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'custom_field_filters', + type: 'array', + required: false, + description: `Filter by custom fields. Each filter specifies a custom field slug, operator, and value(s). For user-type fields, pass a Pylon user name or ID as the value - names will be resolved to Pylon user IDs automatically.`, + }, + { + name: 'is_issue_group', + type: 'boolean', + required: false, + description: `Filter by whether the issue is an issue group. Pass true to get only issue groups, false to exclude them.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'requester', + type: 'string', + required: false, + description: `Filter by requester. Accepts either a contact ID or a name (partial match).`, + }, + { + name: 'states', + type: 'array', + required: false, + description: `Filter by issue states (inclusion). Accepts built-in slugs (new, waiting_on_you, waiting_on_customer, on_hold, closed) and custom state slugs.`, + }, + { + name: 'states_not_in', + type: 'array', + required: false, + description: `Exclude issues in these states. Accepts built-in slugs (new, waiting_on_you, waiting_on_customer, on_hold, closed) and custom state slugs.`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Filter by tags. Returns issues containing any of the specified tags.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Filter by team ID. Returns issues assigned to the specified team.`, + }, + { name: 'type', type: 'string', required: false, description: `Filter by issue type.` }, + ], + }, + { + name: 'pylonmcp_search_projects', + description: `Search projects by text, account, owner, status, and archived state.`, + params: [ + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'include_archived', + type: 'boolean', + required: false, + description: `Whether to include archived projects. Defaults to false.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'owner_id', + type: 'string', + required: false, + description: `ID of the user who owns this resource.`, + }, + { + name: 'search_text', + type: 'string', + required: false, + description: `Search text for project names.`, + }, + { + name: 'statuses', + type: 'array', + required: false, + description: `Filter by project statuses.`, + }, + ], + }, + { + name: 'pylonmcp_search_tasks', + description: `Search tasks by text, project, account, assignee, and status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'assignee_id', + type: 'string', + required: false, + description: `ID of the user to assign this resource to.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'project_id', + type: 'string', + required: false, + description: `The project ID to filter tasks by.`, + }, + { + name: 'search_text', + type: 'string', + required: false, + description: `Search text for full-text search across task titles.`, + }, + { name: 'statuses', type: 'array', required: false, description: `Filter by task statuses.` }, + ], + }, + { + name: 'pylonmcp_update_account', + description: `Update an account name, owner, tags, or custom fields by its ID.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'custom_fields', + type: 'object', + required: false, + description: `Custom field values to set. Keys are custom field slugs (use get_custom_fields with object_type 'account' to discover available slugs), values are the field values to set. For multi-select fields, use comma-separated values.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The new name for the account.`, + }, + { + name: 'owner_id', + type: 'string', + required: false, + description: `ID of the user who owns this resource.`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `An array of tags to set on the account. This replaces all existing tags.`, + }, + ], + }, + { + name: 'pylonmcp_update_issue', + description: `Update an issue state, assignee, team, or tags by its ID.`, + params: [ + { + name: 'issue_id', + type: 'string', + required: true, + description: `The ID or number of the issue to update. Required.`, + }, + { + name: 'assignee_id', + type: 'string', + required: false, + description: `ID of the user to assign this resource to.`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `The state to set the issue to. Standard values: new, waiting_on_you, waiting_on_customer, on_hold, closed. Custom status slugs are also accepted.`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `An array of tags to set on the issue. This replaces all existing tags.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `The ID of the team to assign the issue to. Pass empty string to remove team assignment.`, + }, + ], + }, + { + name: 'pylonmcp_update_milestone', + description: `Update a milestone name or due date by its ID.`, + params: [ + { + name: 'milestone_id', + type: 'string', + required: true, + description: `The milestone ID to update.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date in RFC3339 format. Pass empty string to clear.`, + }, + { name: 'name', type: 'string', required: false, description: `Milestone name.` }, + ], + }, + { + name: 'pylonmcp_update_project', + description: `Update project details such as name, status, dates, owner, and visibility by its ID.`, + params: [ + { + name: 'project_id', + type: 'string', + required: true, + description: `The project ID to update.`, + }, + { + name: 'customer_portal_visible', + type: 'boolean', + required: false, + description: `Whether this project is visible in the customer portal.`, + }, + { + name: 'description_html', + type: 'string', + required: false, + description: `Project description as HTML.`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date in RFC3339 format. Pass empty string to clear.`, + }, + { + name: 'is_archived', + type: 'boolean', + required: false, + description: `Whether this project is archived.`, + }, + { name: 'name', type: 'string', required: false, description: `Project name.` }, + { + name: 'owner_id', + type: 'string', + required: false, + description: `ID of the user who owns this resource.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date in RFC3339 format. Pass empty string to clear.`, + }, + { name: 'status', type: 'string', required: false, description: `Project status.` }, + ], + }, + { + name: 'pylonmcp_update_task', + description: `Update a task title, status, assignee, due date, or other fields by its ID.`, + params: [ + { + name: 'task_id', + type: 'string', + required: true, + description: `The ID of the task to update. Required.`, + }, + { + name: 'account_id', + type: 'string', + required: false, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'assignee_id', + type: 'string', + required: false, + description: `ID of the user to assign this resource to.`, + }, + { + name: 'body_html', + type: 'string', + required: false, + description: `The body HTML content of the task.`, + }, + { + name: 'customer_portal_visible', + type: 'boolean', + required: false, + description: `Whether the task is visible in the customer portal.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `The due date for the task in RFC3339 format. Pass empty string to clear.`, + }, + { + name: 'milestone_id', + type: 'string', + required: false, + description: `The ID of the milestone. Pass empty string to clear.`, + }, + { + name: 'project_id', + type: 'string', + required: false, + description: `The ID of the project. Pass empty string to clear.`, + }, + { name: 'status', type: 'string', required: false, description: `The status of the task.` }, + { name: 'title', type: 'string', required: false, description: `The title of the task.` }, + ], + }, + { + name: 'pylonmcp_upload_account_files', + description: `Upload one or more files to an account. Each file requires a filename and base64-encoded content.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to associate with this resource.`, + }, + { + name: 'files', + type: 'array', + required: true, + description: `Files to upload. 1 to 5 files per call.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/slackmcp.ts b/src/data/agent-connectors/slackmcp.ts new file mode 100644 index 000000000..793ac1f3b --- /dev/null +++ b/src/data/agent-connectors/slackmcp.ts @@ -0,0 +1,622 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'slackmcp_slack_add_reaction', + description: `Add an emoji reaction to a Slack message. Requires the channel ID, message timestamp, and emoji name.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'emoji', + type: 'string', + required: true, + description: `Reaction (emoji) name without colons`, + }, + { + name: 'message_ts', + type: 'string', + required: true, + description: `Timestamp of the message. Get it from slack_read_channel or slack_read_thread.`, + }, + ], + }, + { + name: 'slackmcp_slack_create_canvas', + description: `Create a Slack Canvas document from Canvas-flavored Markdown content.`, + params: [ + { + name: 'content', + type: 'string', + required: true, + description: `Canvas-flavored Markdown content for the canvas body.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `Display name shown at the top of the canvas.`, + }, + ], + }, + { + name: 'slackmcp_slack_create_conversation', + description: `Create a channel, DM, or group DM. Returns a channel ID for sending messages.`, + params: [ + { + name: 'channel_name', + type: 'string', + required: false, + description: `Name for the new channel (lowercase, hyphens, max 80 chars). Omit to create a DM instead.`, + }, + { + name: 'is_private', + type: 'boolean', + required: false, + description: `If true, creates a private channel. Only used with channel_name. Default: false.`, + }, + { + name: 'user_ids', + type: 'array', + required: false, + description: `Slack user IDs to invite. 1 ID = DM, 2–8 IDs = group DM, up to 1000 IDs for a channel.`, + }, + ], + }, + { + name: 'slackmcp_slack_get_reactions', + description: `Retrieve all emoji reactions on a specific Slack message.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'message_ts', + type: 'string', + required: true, + description: `Timestamp of the message. Get it from slack_read_channel or slack_read_thread.`, + }, + ], + }, + { + name: 'slackmcp_slack_list_channel_members', + description: `List members of a Slack channel, group, or group DM with profile details.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'include_bots', + type: 'boolean', + required: false, + description: `Include bots and apps in the member list (default: false)`, + }, + { + name: 'include_deleted', + type: 'boolean', + required: false, + description: `Include deleted/deactivated users in the member list (default: false)`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + ], + }, + { + name: 'slackmcp_slack_read_canvas', + description: `Retrieve the Markdown content and section ID mapping of a Slack Canvas document.`, + params: [ + { + name: 'canvas_id', + type: 'string', + required: true, + description: `ID of the Slack canvas document. Get it from slack_search_public.`, + }, + ], + }, + { + name: 'slackmcp_slack_read_channel', + description: `Read messages from a Slack channel in reverse chronological order (newest first).`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'latest', + type: 'string', + required: false, + description: `Only return messages before this Unix timestamp (e.g. 1640995200.000000).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'oldest', + type: 'string', + required: false, + description: `Only return messages after this Unix timestamp (e.g. 1609459200.000000).`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + ], + }, + { + name: 'slackmcp_slack_read_file', + description: `Read a Slack file's content by file ID. Returns text or base64-encoded content.`, + params: [ + { + name: 'file_id', + type: 'string', + required: true, + description: `ID of the Slack file. Get it from slack_search_public.`, + }, + ], + }, + { + name: 'slackmcp_slack_read_thread', + description: `Read all messages in a Slack thread — the parent message and its replies.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'message_ts', + type: 'string', + required: true, + description: `Timestamp of the message. Get it from slack_read_channel or slack_read_thread.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'latest', + type: 'string', + required: false, + description: `Only return messages before this Unix timestamp (e.g. 1640995200.000000).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'oldest', + type: 'string', + required: false, + description: `Only return messages after this Unix timestamp (e.g. 1609459200.000000).`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + ], + }, + { + name: 'slackmcp_slack_read_user_profile', + description: `Retrieve detailed profile information for a Slack user including status and contact info.`, + params: [ + { + name: 'include_locale', + type: 'boolean', + required: false, + description: `Include user's locale information. Default: false`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + { + name: 'user_id', + type: 'string', + required: false, + description: `ID of the Slack user. Get it from slack_search_users.`, + }, + ], + }, + { + name: 'slackmcp_slack_schedule_message', + description: `Schedule a message for future delivery to a Slack channel at a specified Unix timestamp.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'message', + type: 'string', + required: true, + description: `Message content to schedule`, + }, + { + name: 'post_at', + type: 'integer', + required: true, + description: `Unix timestamp (seconds) for when to send the scheduled message.`, + }, + { + name: 'reply_broadcast', + type: 'boolean', + required: false, + description: `Broadcast thread reply to channel`, + }, + { + name: 'thread_ts', + type: 'string', + required: false, + description: `Timestamp of the parent message to reply in a thread. Get it from slack_read_channel.`, + }, + ], + }, + { + name: 'slackmcp_slack_search_channels', + description: `Search for Slack channels by name or description and return channel IDs and metadata.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Search query string.` }, + { + name: 'channel_types', + type: 'string', + required: false, + description: `Comma-separated channel types to filter. Accepted values: public_channel, private_channel, mpim, im.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'include_archived', + type: 'boolean', + required: false, + description: `Include archived channels in the search results`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + ], + }, + { + name: 'slackmcp_slack_search_emojis', + description: `Search custom emojis available in this Slack workspace by name.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Search query string.` }, + ], + }, + { + name: 'slackmcp_slack_search_public', + description: `Search messages and files in public Slack channels only.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Search query string.` }, + { + name: 'after', + type: 'string', + required: false, + description: `Only messages after this Unix timestamp (inclusive)`, + }, + { + name: 'before', + type: 'string', + required: false, + description: `Only messages before this Unix timestamp (inclusive)`, + }, + { + name: 'content_types', + type: 'string', + required: false, + description: `Comma-separated content types to search. Accepted values: messages, files.`, + }, + { + name: 'context_channel_id', + type: 'string', + required: false, + description: `Channel ID to boost relevance of results from that channel.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'include_bots', + type: 'boolean', + required: false, + description: `Include bot messages (default: false)`, + }, + { + name: 'include_context', + type: 'boolean', + required: false, + description: `Include surrounding context messages for each result. Defaults to true.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'max_context_length', + type: 'integer', + required: false, + description: `Max character length for each context message. Longer messages are truncated.`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort by relevance or date (default: 'score'). Options: 'score', 'timestamp'`, + }, + { + name: 'sort_dir', + type: 'string', + required: false, + description: `Sort direction (default: 'desc'). Options: 'asc', 'desc'`, + }, + ], + }, + { + name: 'slackmcp_slack_search_public_and_private', + description: `Search messages and files across all Slack channels including private ones the user has access to.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Search query string.` }, + { + name: 'after', + type: 'string', + required: false, + description: `Only messages after this Unix timestamp (inclusive)`, + }, + { + name: 'before', + type: 'string', + required: false, + description: `Only messages before this Unix timestamp (inclusive)`, + }, + { + name: 'channel_types', + type: 'string', + required: false, + description: `Comma-separated channel types to filter. Accepted values: public_channel, private_channel, mpim, im.`, + }, + { + name: 'content_types', + type: 'string', + required: false, + description: `Comma-separated content types to search. Accepted values: messages, files.`, + }, + { + name: 'context_channel_id', + type: 'string', + required: false, + description: `Channel ID to boost relevance of results from that channel.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'include_bots', + type: 'boolean', + required: false, + description: `Include bot messages (default: false)`, + }, + { + name: 'include_context', + type: 'boolean', + required: false, + description: `Include surrounding context messages for each result. Defaults to true.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'max_context_length', + type: 'integer', + required: false, + description: `Max character length for each context message. Longer messages are truncated.`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort by relevance or date (default: 'score'). Options: 'score', 'timestamp'`, + }, + { + name: 'sort_dir', + type: 'string', + required: false, + description: `Sort direction (default: 'desc'). Options: 'asc', 'desc'`, + }, + ], + }, + { + name: 'slackmcp_slack_search_users', + description: `Search for Slack users by name, email, or profile attributes.`, + params: [ + { name: 'query', type: 'string', required: true, description: `Search query string.` }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page.`, + }, + { + name: 'response_format', + type: 'string', + required: false, + description: `Level of detail in the response. Accepted values: detailed, concise, ids_only.`, + }, + ], + }, + { + name: 'slackmcp_slack_send_message', + description: `Send a message to a Slack channel or user. Use a user ID as channel_id to send a DM.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { name: 'message', type: 'string', required: true, description: `Add a message` }, + { + name: 'draft_id', + type: 'string', + required: false, + description: `ID of a previously saved draft to delete after sending.`, + }, + { + name: 'reply_broadcast', + type: 'boolean', + required: false, + description: `Also send to conversation`, + }, + { + name: 'thread_ts', + type: 'string', + required: false, + description: `Timestamp of the parent message to reply in a thread. Get it from slack_read_channel.`, + }, + ], + }, + { + name: 'slackmcp_slack_send_message_draft', + description: `Save a message as a draft in a Slack channel without sending it.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the Slack channel. Get it from slack_search_channels.`, + }, + { + name: 'message', + type: 'string', + required: true, + description: `The message content in standard markdown`, + }, + { + name: 'thread_ts', + type: 'string', + required: false, + description: `Timestamp of the parent message to reply in a thread. Get it from slack_read_channel.`, + }, + ], + }, + { + name: 'slackmcp_slack_update_canvas', + description: `Update an existing Slack Canvas document by appending, replacing, or deleting content.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `One of "append", "prepend", or "replace". Defaults to "append"`, + }, + { + name: 'canvas_id', + type: 'string', + required: true, + description: `ID of the Slack canvas document. Get it from slack_search_public.`, + }, + { + name: 'content', + type: 'string', + required: true, + description: `Canvas-flavored Markdown content for the canvas body.`, + }, + { + name: 'section_id', + type: 'string', + required: false, + description: `ID of the canvas section to update. Get it from slack_read_canvas.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/stripemcp.ts b/src/data/agent-connectors/stripemcp.ts new file mode 100644 index 000000000..3648f268f --- /dev/null +++ b/src/data/agent-connectors/stripemcp.ts @@ -0,0 +1,446 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'stripemcp_cancel_subscription', + description: `Immediately cancel an active Stripe subscription. The subscription ends at the current period and no further charges are made. This is irreversible — use Update Subscription to pause or downgrade instead.`, + params: [ + { + name: 'subscription', + type: 'string', + required: true, + description: `ID of the subscription to cancel immediately. Cancellation is permanent — the subscription cannot be reactivated.`, + }, + ], + }, + { + name: 'stripemcp_create_coupon', + description: `Create a discount coupon that applies a percentage or fixed amount off. Use percent_off for percentage discounts or amount_off+currency for fixed discounts. Set duration to once, forever, or repeating.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Internal name for the coupon shown in the Stripe dashboard and on invoices.`, + }, + { + name: 'amount_off', + type: 'number', + required: false, + description: `Fixed discount amount in the smallest currency unit (e.g. 500 = .00 off). Requires currency. Use this or percent_off — not both.`, + }, + { + name: 'currency', + type: 'string', + required: false, + description: `Required when using amount_off. Three-letter ISO currency code matching the discount amount.`, + }, + { + name: 'duration', + type: 'string', + required: false, + description: `How long the coupon applies: once (first invoice only), forever (all invoices), or repeating (for duration_in_months months).`, + }, + { + name: 'duration_in_months', + type: 'number', + required: false, + description: `Number of months the discount applies when duration is repeating.`, + }, + { + name: 'percent_off', + type: 'number', + required: false, + description: `Percentage discount between 0 and 100. Use this or amount_off — not both.`, + }, + ], + }, + { + name: 'stripemcp_create_customer', + description: `Create a new Stripe customer record with a name and optional email. Returns the customer ID (cus_...) used in invoices, subscriptions, and payment intents.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Full name of the customer as it will appear on invoices and receipts.`, + }, + { + name: 'email', + type: 'string', + required: false, + description: `Customer email address. Used for receipt delivery and customer lookup.`, + }, + ], + }, + { + name: 'stripemcp_create_invoice', + description: `Create a draft invoice for a customer. The invoice starts in draft status — add line items with Create Invoice Item, then call Finalize Invoice to mark it ready for payment.`, + params: [ + { + name: 'customer', + type: 'string', + required: true, + description: `ID of the Stripe customer to bill. Add line items with Create Invoice Item after creating the invoice.`, + }, + { + name: 'days_until_due', + type: 'number', + required: false, + description: `Payment due date expressed as days from today. Used for net-terms invoices (e.g. 30 for net-30). Leave blank for invoices collected immediately.`, + }, + ], + }, + { + name: 'stripemcp_create_invoice_item', + description: `Add a line item to an existing draft invoice using a price ID. The invoice must be in draft status. Both the customer and invoice IDs are required to associate the item correctly.`, + params: [ + { + name: 'customer', + type: 'string', + required: true, + description: `ID of the customer the invoice belongs to. Must match the customer on the invoice.`, + }, + { + name: 'invoice', + type: 'string', + required: true, + description: `ID of the draft invoice to add this line item to. Invoice must be in draft status.`, + }, + { + name: 'price', + type: 'string', + required: true, + description: `ID of the price to add as a line item. The price determines amount and currency.`, + }, + ], + }, + { + name: 'stripemcp_create_payment_link', + description: `Create a shareable payment link for a price. Returns a URL that customers can open to complete payment without a custom checkout integration. Requires at least one payment method enabled in your Stripe dashboard.`, + params: [ + { + name: 'price', + type: 'string', + required: true, + description: `ID of the price to sell via this link. The price must be active.`, + }, + { + name: 'quantity', + type: 'number', + required: true, + description: `Number of units to include in the payment. Use 1 for single-item purchases.`, + }, + ], + }, + { + name: 'stripemcp_create_price', + description: `Create a one-time or recurring price for a product. Amounts are in the smallest currency unit (cents for USD). Omit recurring for one-time prices; include it for subscription billing.`, + params: [ + { + name: 'currency', + type: 'string', + required: true, + description: `Three-letter ISO 4217 currency code (lowercase). Must match the currency of your Stripe account.`, + }, + { + name: 'product', + type: 'string', + required: true, + description: `ID of the product this price belongs to. Create a product first if you do not have one.`, + }, + { + name: 'unit_amount', + type: 'number', + required: true, + description: `Price in the smallest currency unit (e.g. cents for USD). 2000 = .00. Use 0 for free prices.`, + }, + { + name: 'recurring', + type: 'object', + required: false, + description: `Include to create a recurring/subscription price. Omit for one-time prices. interval must be day, week, month, or year.`, + }, + ], + }, + { + name: 'stripemcp_create_product', + description: `Create a product in Stripe representing a good or service. Products are the parent objects for prices — create a product first, then attach prices to it.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Product name shown on invoices and in the Stripe dashboard.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional product description shown on invoices and checkout pages.`, + }, + ], + }, + { + name: 'stripemcp_create_refund', + description: `Issue a full or partial refund for a succeeded PaymentIntent. Omit amount to refund the full charge. The PaymentIntent must have a successful charge — refunding a pending or failed intent will error.`, + params: [ + { + name: 'payment_intent', + type: 'string', + required: true, + description: `ID of the PaymentIntent to refund. The payment must have a succeeded charge. Get it from the charge or invoice object.`, + }, + { + name: 'amount', + type: 'integer', + required: false, + description: `Amount to refund in cents. Omit to refund the full amount. Must be less than or equal to the original charge amount.`, + }, + { + name: 'human_confirmation', + type: 'object', + required: false, + description: `Optional confirmation object for human-in-the-loop approval flows. Pass {"confirmed": true} to bypass the approval step when running in an automated context.`, + }, + { + name: 'reason', + type: 'string', + required: false, + description: `Reason for the refund. Valid values: duplicate, fraudulent, requested_by_customer. Shown on the refund receipt.`, + }, + ], + }, + { + name: 'stripemcp_fetch_stripe_resources', + description: `Retrieve a Stripe object by its ID. Works with any Stripe resource ID (cus_..., pi_..., in_..., sub_..., prod_..., price_..., dp_...). Returns the full object details.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `ID of any Stripe object to retrieve (e.g. cus_..., pi_..., in_..., sub_..., prod_..., price_..., dp_...). The resource type is inferred from the ID prefix.`, + }, + ], + }, + { + name: 'stripemcp_finalize_invoice', + description: `Finalize a draft invoice to lock it and make it ready for payment. After finalization, the invoice status changes from draft to open and a PaymentIntent is created automatically.`, + params: [ + { + name: 'invoice', + type: 'string', + required: true, + description: `ID of the draft invoice to finalize. Finalization locks the invoice and generates a PaymentIntent for collection.`, + }, + ], + }, + { + name: 'stripemcp_get_stripe_account_info', + description: `Retrieve information about the connected Stripe account, including account ID, business name, country, currency, and account type (standard, express, or custom).`, + params: [], + }, + { + name: 'stripemcp_retrieve_balance', + description: `Retrieve the current balance for the connected Stripe account, broken down by currency and availability (available vs. pending funds).`, + params: [], + }, + { + name: 'stripemcp_search_stripe_documentation', + description: `Search Stripe official documentation and API reference for answers. Use this to look up Stripe concepts, API parameters, error codes, or integration guidance.`, + params: [ + { + name: 'question', + type: 'string', + required: true, + description: `The question or topic to search Stripe documentation for.`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Programming language for code examples in results. Defaults to no specific language.`, + }, + { + name: 'search_only_api_ref', + type: 'boolean', + required: false, + description: `Set to true to search only the API reference. Set to false (default) to search all documentation including guides and tutorials.`, + }, + ], + }, + { + name: 'stripemcp_search_stripe_resources', + description: `Search Stripe resources using the format resource:query (e.g. customers:name:"Acme" or invoices:status:"open"). Valid resources: customers, payment_intents, charges, invoices, prices, products, subscriptions.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query in resource:search_term format. Valid resources: customers, payment_intents, charges, invoices, prices, products, subscriptions. Example: customers:name:"Acme" or invoices:status:"open".`, + }, + ], + }, + { + name: 'stripemcp_send_stripe_mcp_feedback', + description: `Submit feedback about a Stripe MCP tool experience. Use source=user for feedback from a human, source=agent for feedback generated by an AI agent.`, + params: [ + { + name: 'context', + type: 'string', + required: true, + description: `Additional context about what you were trying to do when you used the tool.`, + }, + { + name: 'quote', + type: 'string', + required: true, + description: `A direct quote or specific observation about the tool experience.`, + }, + { + name: 'sentiment', + type: 'string', + required: true, + description: `Sentiment of the feedback. Valid values: positive, negative, neutral.`, + }, + { + name: 'source', + type: 'string', + required: true, + description: `Who generated this feedback. Valid values: user (human feedback), agent (AI-generated feedback).`, + }, + { + name: 'tool_name', + type: 'string', + required: false, + description: `Name of the specific Stripe MCP tool this feedback is about.`, + }, + ], + }, + { + name: 'stripemcp_stripe_api_details', + description: `Get the full parameter schema for a specific Stripe API operation. Use stripe_api_search to find the operation ID first (e.g. GetCustomers, PostRefunds), then call this to see all available parameters.`, + params: [ + { + name: 'stripe_api_operation_id', + type: 'string', + required: true, + description: `The Stripe API operation ID to get details for. Get valid IDs from stripe_api_search (e.g. GetCustomers, PostRefunds, PostSubscriptions).`, + }, + ], + }, + { + name: 'stripemcp_stripe_api_execute', + description: `Execute any Stripe API operation by its operation ID and parameters. Use stripe_api_search to discover available operations and stripe_api_details to see their parameters before executing.`, + params: [ + { + name: 'parameters', + type: 'object', + required: true, + description: `Parameters to pass to the Stripe API operation. Must match the schema returned by stripe_api_details. Pass as a JSON object.`, + }, + { + name: 'stripe_api_operation_id', + type: 'string', + required: true, + description: `The Stripe API operation ID to execute. Use stripe_api_search to find available operations and stripe_api_details to see required parameters.`, + }, + { + name: 'human_confirmation', + type: 'object', + required: false, + description: `Optional confirmation object for human-in-the-loop approval flows. Pass {"confirmed": true} to bypass the approval step when running in an automated context.`, + }, + ], + }, + { + name: 'stripemcp_stripe_api_search', + description: `Search available Stripe API operations by keyword. Returns operation IDs (e.g. PostCustomers, GetSubscriptions) with their HTTP method and parameters — use these with stripe_api_details or stripe_api_execute.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Keyword to search Stripe API operations. Returns operation IDs with their HTTP method and parameters. Examples: "create customer", "list invoices", "refund".`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of operations to return. Defaults to all matches.`, + }, + ], + }, + { + name: 'stripemcp_stripe_integration_recommender', + description: `Get a recommendation on which Stripe integration pattern best fits a use case (e.g. Checkout, Payment Intents, Billing). Describe the payment scenario in the answer field.`, + params: [ + { + name: 'answer', + type: 'string', + required: true, + description: `Describe your payment scenario or what you want to build. Be specific about whether payments are one-time or recurring, and whether you need a hosted checkout or custom UI.`, + }, + { + name: 'notes', + type: 'string', + required: false, + description: `Additional context about your integration requirements, constraints, or current setup.`, + }, + { + name: 'plan_id', + type: 'string', + required: false, + description: `Optional Stripe product or plan ID if you already have a pricing structure set up. Must follow format lplan_... Leave blank if not applicable.`, + }, + ], + }, + { + name: 'stripemcp_update_dispute', + description: `Submit evidence or update an open Stripe dispute (chargeback). Pass submit=true to send the evidence to Stripe immediately, or false to save it as a draft for later submission.`, + params: [ + { + name: 'dispute', + type: 'string', + required: true, + description: `ID of the dispute to update. Get dispute IDs from the Stripe dashboard or by listing disputes via stripe_api_execute with GetDisputes.`, + }, + { + name: 'evidence', + type: 'object', + required: false, + description: `Evidence object to submit for the dispute. Include fields like customer_purchase_ip, product_description, and shipping_documentation as applicable.`, + }, + { + name: 'submit', + type: 'boolean', + required: false, + description: `Set to true to submit the evidence to Stripe immediately. Set to false to save as a draft. Once submitted, evidence cannot be changed.`, + }, + ], + }, + { + name: 'stripemcp_update_subscription', + description: `Update an active subscription — change its price, quantity, or proration behavior. Use proration_behavior=create_prorations to credit unused time when upgrading plans.`, + params: [ + { + name: 'subscription', + type: 'string', + required: true, + description: `ID of the subscription to update.`, + }, + { + name: 'items', + type: 'array', + required: false, + description: `Array of subscription items to update. Each item needs the subscription item ID (si_...) and new price ID. Used to change plan or quantity.`, + }, + { + name: 'proration_behavior', + type: 'string', + required: false, + description: `How to handle proration when changing plans mid-cycle. create_prorations credits unused time; none skips proration; always_invoice immediately bills the difference.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/youmcp.ts b/src/data/agent-connectors/youmcp.ts new file mode 100644 index 000000000..1d69037de --- /dev/null +++ b/src/data/agent-connectors/youmcp.ts @@ -0,0 +1,130 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'youmcp_you-contents', + description: `Extract content from one or more web pages in markdown, HTML, or structured metadata format. Supports up to 100 URLs per call.`, + params: [ + { + name: 'urls', + type: 'array', + required: true, + description: `One or more public HTTP/HTTPS URLs to extract content from (up to 100).`, + }, + { + name: 'crawl_timeout', + type: 'number', + required: false, + description: `Timeout in seconds for live-crawling pages (1–60).`, + }, + { + name: 'format', + type: 'string', + required: false, + description: `(Deprecated) Output format - use formats array instead`, + }, + { + name: 'formats', + type: 'array', + required: false, + description: `Output formats to return: markdown (plain text), html (layout preserved), or metadata (structured data).`, + }, + ], + }, + { + name: 'youmcp_you-research', + description: `Research a topic in depth using You.com's AI. Returns comprehensive answers with cited sources at configurable effort levels (lite, standard, deep, exhaustive).`, + params: [ + { + name: 'input', + type: 'string', + required: true, + description: `The research question or complex query for in-depth multi-step investigation (max 40,000 characters).`, + }, + { + name: 'research_effort', + type: 'string', + required: false, + description: `How much effort to spend: lite (fast), standard (balanced), deep (thorough), exhaustive (most comprehensive).`, + }, + ], + }, + { + name: 'youmcp_you-search', + description: `Search the web and news using You.com. Supports domain filtering, language and country targeting, freshness filters, and live-crawl for full page content.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query string. Supports operators: site:domain.com, filetype:pdf, +term, -term, AND/OR/NOT, lang:en.`, + }, + { + name: 'count', + type: 'integer', + required: false, + description: `Maximum number of results to return per section (1–100).`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code to localize search results (ISO 3166-1 alpha-2).`, + }, + { + name: 'crawl_timeout', + type: 'integer', + required: false, + description: `Timeout in seconds for live-crawling pages (1–60).`, + }, + { + name: 'exclude_domains', + type: 'array', + required: false, + description: `List of domains to exclude from search results (up to 500).`, + }, + { + name: 'freshness', + type: 'string', + required: false, + description: `Limit results by recency: day, week, month, year, or a date range YYYY-MM-DDtoYYYY-MM-DD.`, + }, + { + name: 'include_domains', + type: 'array', + required: false, + description: `List of domains to restrict search results to (up to 500).`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Language code (BCP 47) to filter search results.`, + }, + { + name: 'livecrawl', + type: 'string', + required: false, + description: `Enable live-crawling of full page content for the specified section: web, news, or all.`, + }, + { + name: 'livecrawl_formats', + type: 'array', + required: false, + description: `Output formats for live-crawled content: html and/or markdown.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Pagination offset for results (0–9).`, + }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe-search filter level applied to results.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/zoominfo.ts b/src/data/agent-connectors/zoominfo.ts new file mode 100644 index 000000000..dd01aed0e --- /dev/null +++ b/src/data/agent-connectors/zoominfo.ts @@ -0,0 +1,1098 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'zoominfo_archive_buyer_persona', + description: `Archive a buyer persona to hide it from active use without permanently deleting it. The persona can be unarchived later. Use this instead of delete when you may need to restore the persona.`, + params: [ + { name: 'buyerPersonaId', type: 'string', required: true, description: `UUID of the buyer persona.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_archive_competitor', + description: `Archive a competitor to hide it from active use without permanently deleting it. The record can be restored later using Unarchive Competitor.`, + params: [ + { name: 'competitorId', type: 'string', required: true, description: `UUID of the competitor.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_archive_offering', + description: `Archive a product or service to hide it from active use without deleting it. Reversible with Unarchive.`, + params: [ + { name: 'offeringId', type: 'string', required: true, description: `UUID of the product or service.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_archive_segment', + description: `Archive an ICP to hide it from active use without permanently deleting it. Reversible with Unarchive ICP.`, + params: [ + { name: 'segmentId', type: 'string', required: true, description: `UUID of the ICP segment.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_ask_account_summary', + description: `Ask a natural language question about a company's account summary. Returns an AI-generated answer using ZoomInfo's account intelligence data. Requires a ZoomInfo company ID and a question.`, + params: [ + { name: 'companyId', type: 'integer', required: true, description: `ZoomInfo unique company ID.` }, + { name: 'question', type: 'string', required: true, description: `The question to ask about the company's account data.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_create_audience', + description: `Create a new GTM Studio audience — a collection of contacts or companies for marketing and sales. Only CUSTOM source audiences are supported. Optionally define columns at creation or add them later. If folderId is omitted, a new folder matching the audience name is created automatically.`, + params: [ + { name: 'name', type: 'string', required: true, description: `Required. Display name of the audience.` }, + { name: 'type', type: 'string', required: true, description: `Record type the audience holds (CONTACT or COMPANY).` }, + { name: 'autoMatchCriteria', type: 'boolean', required: false, description: `Enable AI auto-mapping of column match criteria.` }, + { name: 'columns', type: 'array', required: false, description: `Column definitions to add to the audience at creation.` }, + { name: 'description', type: 'string', required: false, description: `Optional description of the audience's purpose.` }, + { name: 'folderId', type: 'string', required: false, description: `UUID of the folder to place this audience in. If omitted, a new folder matching the audience name is created automatically.` }, + { name: 'notes', type: 'string', required: false, description: `Optional internal notes about the audience.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_create_audience_columns', + description: `Add one or more columns to an existing audience in a single bulk operation. Supports CUSTOM (static), FORMULA, AI, and ZOOMINFO_MATCH column types. Returns 201 with created column IDs.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience to add columns to.` }, + { name: 'columns', type: 'array', required: true, description: `Array of column definitions to create.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_create_folder', + description: `Create a new folder for organizing audiences in ZoomInfo GTM Studio. Folders group related audiences by campaign, region, or team. The folder is created empty — assign audiences via Create Audience or Update Audience using the returned folderId.`, + params: [ + { name: 'name', type: 'string', required: true, description: `Display name of the folder.` }, + { name: 'description', type: 'string', required: false, description: `Optional description of the folder's purpose.` }, + { name: 'notes', type: 'string', required: false, description: `Optional internal notes about the folder.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'starred', type: 'boolean', required: false, description: `Whether the folder is starred for quick access.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_create_marketing_audience', + description: `Create a new ZoomInfo marketing audience for B2B or B2C targeting. Marketing audiences are separate from GTM Studio audiences.`, + params: [ + { name: 'audienceType', type: 'string', required: true, description: `Audience type — B2B or B2C.` }, + { name: 'name', type: 'string', required: true, description: `Name of the audience.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_audience', + description: `Permanently delete an audience by UUID. Removes all rows, columns, and configuration. This action is irreversible. Returns 204 on success.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience to delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_audience_column', + description: `Permanently remove a column from an audience, including all cell values in that column across every row. Only columns where isDeletable=true can be removed. This action is irreversible. Returns 204 on success.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'columnId', type: 'string', required: true, description: `UUID of the column to delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_audience_rows', + description: `Permanently delete up to 1000 rows from an audience in one bulk operation. This is an async operation — returns 202 with a jobId. Poll Get Audience Job Status to confirm deletion. Cannot be undone.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'rowIds', type: 'array', required: true, description: `Array of row IDs to permanently delete (max 1000).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_buyer_persona', + description: `Permanently delete a buyer persona by UUID. This is a hard delete — the persona cannot be recovered. Returns 204 on success, 404 if not found. Use Archive Buyer Persona instead if you want to hide it without deleting.`, + params: [ + { name: 'buyerPersonaId', type: 'string', required: true, description: `UUID of the buyer persona to permanently delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_delete_competitor', + description: `Permanently delete a competitor record by UUID. This is a hard delete and cannot be undone. Returns 204 on success. Use Archive Competitor to hide without deleting.`, + params: [ + { name: 'competitorId', type: 'string', required: true, description: `UUID of the competitor to delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_delete_content_interaction', + description: `Delete a content interaction engagement record by ID. Returns 204 on success.`, + params: [ + { name: 'id', type: 'string', required: true, description: `Required. Unique identifier of the content interaction to delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_folder', + description: `Permanently delete a folder by its UUID. Returns 204 on success. Audiences inside the folder are not deleted — they are unassigned from the folder.`, + params: [ + { name: 'folderId', type: 'string', required: true, description: `UUID of the folder to delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_marketing_audience', + description: `Permanently delete a ZoomInfo marketing audience by ID. Returns 204 on success.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `ID of the audience to delete.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_offering', + description: `Permanently delete a product or service by UUID. Hard delete — cannot be undone. Returns 204.`, + params: [ + { name: 'offeringId', type: 'string', required: true, description: `UUID of the product or service.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_delete_segment', + description: `Permanently delete an ICP by UUID. Hard delete — cannot be undone. Returns 204 on success.`, + params: [ + { name: 'segmentId', type: 'string', required: true, description: `UUID of the ICP segment.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_delete_settings', + description: `Permanently delete all customer settings for the authenticated ZoomInfo account. This removes the company name, elevator pitch, description, and strategic priorities. Returns 204 on success.`, + params: [ + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_audience', + description: `Start an async enrichment job to append ZoomInfo intelligence to audience rows. Use scope=AUDIENCE to enrich all rows, or scope=ROW with specific rowIds. Returns 202 with a jobId to poll via Get Audience Job Status.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience to enrich.` }, + { name: 'scope', type: 'string', required: true, description: `Enrichment scope.` }, + { name: 'columns', type: 'array', required: false, description: `Column IDs to enrich (optional for any scope).` }, + { name: 'rows', type: 'array', required: false, description: `Row IDs to enrich (required when scope=ROW).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_enrich_companies', + description: `Enrich up to 25 company records with detailed ZoomInfo firmographic data including revenue, headcount, industry, technographics, and more. Specify output fields and provide match criteria (companyId, name, or website). Each matched record consumes a credit. Use Search Companies first to get companyIds for best match accuracy.`, + params: [ + { name: 'matchCompanyInput', type: 'array', required: true, description: `List of up to 25 companies to match and enrich.` }, + { name: 'outputFields', type: 'array', required: true, description: `Fields to include in the response for each enriched company.` }, + { name: 'requiredFields', type: 'array', required: false, description: `Fields that must be present in the result for a record to be returned.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_contacts', + description: `Enrich up to 25 contact records with detailed ZoomInfo data including emails, phone numbers, job titles, and company details. Specify output fields to return and provide match criteria (personId, email, name, or phone). Each matched record consumes a credit. Use Search Contacts first to get personIds for best match accuracy.`, + params: [ + { name: 'matchPersonInput', type: 'array', required: true, description: `List of up to 25 contacts to match and enrich. Each object can include personId, email, name, phone, or company details.` }, + { name: 'outputFields', type: 'array', required: true, description: `Fields to include in the response for each enriched contact.` }, + { name: 'requiredFields', type: 'array', required: false, description: `Fields that must be present in the result for a record to be returned.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_corporate_hierarchy', + description: `Enrich the corporate hierarchy for up to 25 companies. Returns the full family tree including parent company, subsidiaries, acquisitions, former names, and known locations. If the matched company is not the top-level parent, also returns all parent companies up to the ultimate parent. Each matched record consumes a credit.`, + params: [ + { name: 'matchCompanyInput', type: 'array', required: true, description: `List of up to 25 companies to match and retrieve hierarchy for.` }, + { name: 'outputFields', type: 'array', required: true, description: `Fields to include in the response for each enriched company hierarchy.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_hashtags', + description: `Get categorical hashtag labels for a specific company by ZoomInfo company ID. Hashtags classify companies based on business characteristics, technologies, and attributes — useful for precise filtering and segmentation. Charges one credit for the enriched company.`, + params: [ + { name: 'companyId', type: 'integer', required: true, description: `ZoomInfo unique company ID.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_intent', + description: `Fetch buying intent signals for a specific company by providing up to 50 intent topics. At least one company identifier (companyId, companyName, or companyWebsite) and at least one topic are required. Returns signal score, audience strength, and optional recommended contacts. Charges one credit for the company plus record credits per signal returned.`, + params: [ + { name: 'topics', type: 'array', required: true, description: `Array of up to 50 intent topic names to fetch signals for.` }, + { name: 'audienceStrengthMax', type: 'string', required: false, description: `Maximum audience strength (A-E, where A = largest audience).` }, + { name: 'audienceStrengthMin', type: 'string', required: false, description: `Minimum audience strength (A-E, where A = largest audience).` }, + { name: 'companyId', type: 'integer', required: false, description: `ZoomInfo unique company ID. Provide at least one of companyId, companyName, or companyWebsite.` }, + { name: 'companyName', type: 'string', required: false, description: `Company name. Provide at least one of companyId, companyName, or companyWebsite.` }, + { name: 'companyWebsite', type: 'string', required: false, description: `Company website URL. Provide at least one of companyId, companyName, or companyWebsite.` }, + { name: 'findRecommendedContacts', type: 'boolean', required: false, description: `Set to false to exclude recommended contacts from results. Default is true.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination, starting from 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'signalEndDate', type: 'string', required: false, description: `End date for intent signals in YYYY-MM-DD format.` }, + { name: 'signalScoreMax', type: 'integer', required: false, description: `Maximum signal score (60-100).` }, + { name: 'signalScoreMin', type: 'integer', required: false, description: `Minimum signal score (60-100).` }, + { name: 'signalStartDate', type: 'string', required: false, description: `Start date for intent signals in YYYY-MM-DD format.` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: audiencestrength, category, companyname, issuedate, signaldate, signalscore, signalstrength, surgescore, topic. Prefix with - for descending.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_news', + description: `Fetch news articles for a specific company by providing at least one company identifier (companyId, companyName, or companyWebsite). Optionally filter by news category, URL, and date range. Charges one credit for the enriched company plus record credits per article returned. Use Search News to find articles across all companies.`, + params: [ + { name: 'categories', type: 'array', required: false, description: `News article categories to filter by.` }, + { name: 'companyId', type: 'integer', required: false, description: `ZoomInfo unique company ID.` }, + { name: 'companyName', type: 'string', required: false, description: `Company name.` }, + { name: 'companyWebsite', type: 'string', required: false, description: `Company website URL.` }, + { name: 'pageDateMax', type: 'string', required: false, description: `Latest publishing date for news articles.` }, + { name: 'pageDateMin', type: 'string', required: false, description: `Earliest publishing date for news articles.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'url', type: 'array', required: false, description: `News article URLs to filter by.` }, + ], + }, + { + name: 'zoominfo_enrich_org_charts', + description: `Get org chart data for a company by department. Returns ZoomInfo contacts organized by seniority level within the specified department(s). Requires a ZoomInfo company ID and at least one department. Charges one credit per request regardless of contacts returned.`, + params: [ + { name: 'companyId', type: 'string', required: true, description: `ZoomInfo company ID to get org chart for.` }, + { name: 'department', type: 'string', required: true, description: `Comma-separated department IDs to get org chart data for.` }, + { name: 'contactAccuracyScoreMax', type: 'string', required: false, description: `Maximum contact accuracy score (70-99).` }, + { name: 'contactAccuracyScoreMin', type: 'string', required: false, description: `Minimum contact accuracy score (70-99).` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sort', type: 'string', required: false, description: `Sort field.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_enrich_scoops', + description: `Fetch scoops (business intelligence signals) for a specific company. At least one company identifier (companyId, companyName, or companyWebsite) is required. Optionally filter by scoop type, topic, department, and date range. Charges one credit for the enriched company plus record credits per scoop returned.`, + params: [ + { name: 'companyId', type: 'string', required: false, description: `ZoomInfo company ID.` }, + { name: 'companyName', type: 'string', required: false, description: `Company name.` }, + { name: 'companyWebsite', type: 'string', required: false, description: `Company website URL.` }, + { name: 'department', type: 'string', required: false, description: `Department associated with the scoop.` }, + { name: 'description', type: 'string', required: false, description: `Keywords to search in scoop descriptions.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'publishedEndDate', type: 'string', required: false, description: `End date for scoop publication range.` }, + { name: 'publishedStartDate', type: 'string', required: false, description: `Start date for scoop publication range.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'scoopId', type: 'string', required: false, description: `ZoomInfo scoop ID.` }, + { name: 'scoopTopic', type: 'string', required: false, description: `Scoop topic IDs.` }, + { name: 'scoopType', type: 'string', required: false, description: `Scoop type IDs.` }, + { name: 'sort', type: 'string', required: false, description: `Sort field.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'updatedSinceCreation', type: 'boolean', required: false, description: `Return only scoops updated since publishedStartDate.` }, + ], + }, + { + name: 'zoominfo_enrich_technologies', + description: `Get the technology stack for a specific company by ZoomInfo company ID. Returns technologies identified through website analysis, job postings, company announcements, and data partnerships. Charges one credit for the enriched company.`, + params: [ + { name: 'companyId', type: 'integer', required: true, description: `ZoomInfo unique company ID.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_account_summary', + description: `Get an AI-generated account summary for a specific company including recent news, intent signals, key contacts, and strategic priorities. Requires a ZoomInfo company ID.`, + params: [ + { name: 'companyId', type: 'integer', required: true, description: `ZoomInfo unique company ID.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_agent_team', + description: `Get full details for an Agent Team by ID including configured input parameters required when running it. Use List Agent Teams to find the agentTeamId.`, + params: [ + { name: 'agentTeamId', type: 'string', required: true, description: `Required. Unique identifier of the Agent Team.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_agent_team_run_results', + description: `Get the status and results of a specific Agent Team run by agentTeamId and runId. Poll this endpoint after triggering a run to monitor progress.`, + params: [ + { name: 'agentTeamId', type: 'string', required: true, description: `Required. Unique identifier of the Agent Team.` }, + { name: 'runId', type: 'string', required: true, description: `Required. Unique identifier of the run returned by Run Agent Team.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_audience', + description: `Retrieve the full state of a single audience by UUID. Returns name, type, origin, record count, folder location, timestamps, and complete column structure. Returns 404 if not found.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_audience_filter_metadata', + description: `Get available filter operators for each column in an audience. Returns operator types (EQUALS, CONTAINS, NOT_EQUALS, etc.), whether multiple values are supported, value count limits, and minimum character requirements. Use before building row queries to validate filter inputs.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience to get filter metadata for.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_audience_job_status', + description: `Get the current status and progress of an async audience job (AUDIENCE_CREATE, AUDIENCE_ENRICH, or ROW_UPSERT). Status values: SCHEDULED, RUNNING, SUCCEEDED, PARTIALLY_SUCCEEDED, FAILED, CANCELLED. Returns percentProgress. Use jobId returned by the originating operation.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience the job belongs to.` }, + { name: 'jobId', type: 'string', required: true, description: `UUID of the async job to check.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_audience_row', + description: `Retrieve a single row from an audience by rowId. Returns all cell values with their state (RESULT, BLANK, LOADING, ERROR, NO_RESULT). Optionally limit response to specific columns.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'rowId', type: 'string', required: true, description: `UUID of the row to retrieve.` }, + { name: 'columns', type: 'array', required: false, description: `Column IDs to include in the response.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_buyer_persona', + description: `Retrieve a single buyer persona by its UUID. Returns full persona configuration including role, objectives, messaging angles, and custom fields. Returns 404 if the persona does not exist.`, + params: [ + { name: 'buyerPersonaId', type: 'string', required: true, description: `UUID of the buyer persona to retrieve.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_column_data_dependencies', + description: `Get available data dependencies for AI-powered audience columns. Returns which audience columns and knowledge sources can be used as context for the selected AI tool type. Use before creating AI columns to discover valid grounding sources.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'tool', type: 'string', required: true, description: `AI tool type to get data dependencies for.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_company_lookalikes', + description: `Find up to 100 companies similar to a reference company using ZoomInfo's ML model. Analyzes industry, revenue, headcount, and firmographic signals to rank lookalikes by similarity score. Provide companyId for best results, or companyName if the ID is unavailable. Results are ordered from most to least similar.`, + params: [ + { name: 'filter_companyId', type: 'string', required: false, description: `ZoomInfo unique company ID to use as the reference for finding lookalikes.` }, + { name: 'filter_companyName', type: 'string', required: false, description: `Name of the reference company to find lookalikes for.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_competitor', + description: `Retrieve a single competitor record by its UUID. Returns full competitive intelligence including products, win/loss analysis, and displacement scenarios. Returns 404 if not found.`, + params: [ + { name: 'competitorId', type: 'string', required: true, description: `UUID of the competitor.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_contact_lookalikes', + description: `Find up to 100 contacts similar to a reference person using ZoomInfo's ML model. Matches on title, seniority, department, and company attributes. Optionally scope the search to a specific target company. Returns results ordered from most to least similar by score.`, + params: [ + { name: 'filter_referencePersonId', type: 'integer', required: true, description: `ZoomInfo person ID of the reference contact to find lookalikes for.` }, + { name: 'filter_targetCompanyId', type: 'integer', required: false, description: `Constrain lookalike search to a specific target company.` }, + { name: 'page_size', type: 'integer', required: false, description: `Number of lookalike contacts to return (1-100).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_contact_recommendations', + description: `Get up to 100 ranked contact recommendations at a target company for a specific sales motion (prospecting, deal acceleration, or renewal and growth). Uses ML to surface the most relevant personas based on past user interactions, CRM data, and engagement signals. Results are ordered from most to least relevant.`, + params: [ + { name: 'filter_useCaseType', type: 'string', required: true, description: `Sales motion type to drive recommendations.` }, + { name: 'filter_ziCompanyId', type: 'integer', required: true, description: `ZoomInfo company ID of the target account to get contact recommendations for.` }, + { name: 'page_size', type: 'integer', required: false, description: `Number of recommendations to return (1-100).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_content_interaction', + description: `Retrieve a specific content interaction engagement by its ID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `Required. Unique identifier of the content interaction engagement.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_folder', + description: `Retrieve a single folder by its UUID. Returns all attributes including name, starred status, description, notes, timestamps, and the list of audience IDs in the folder. Returns 404 if not found.`, + params: [ + { name: 'folderId', type: 'string', required: true, description: `UUID of the folder.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_insights', + description: `Retrieve sales intelligence signals (insights) for up to 50 companies, filtered by signal type. Insights include funding events, leadership changes, intent spikes, hiring anomalies, website visits, and more. Signals are filtered for relevance and recency based on your team's focus areas.`, + params: [ + { name: 'ziCompanyIds', type: 'array', required: true, description: `List of ZoomInfo company IDs to retrieve insights for (max 50).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'signalTypes', type: 'array', required: false, description: `Optional filter for specific insight/signal types. Returns all types if omitted.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_marketing_audience', + description: `Retrieve a single ZoomInfo marketing audience by its ID.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `ID of the marketing audience.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_marketing_audience_upload_status', + description: `Get the upload status for a previously submitted marketing audience upload job. Returns the current status and progress.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `ID of the marketing audience.` }, + { name: 'uploadId', type: 'string', required: true, description: `ID of the upload job.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_offering', + description: `Retrieve a single product or service by UUID. Returns full configuration including positioning, pain points, and value proposition. Returns 404 if not found.`, + params: [ + { name: 'offeringId', type: 'string', required: true, description: `UUID of the product or service.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_get_segment', + description: `Retrieve a single ICP by its UUID. Returns full profile configuration. Returns 404 if not found.`, + params: [ + { name: 'segmentId', type: 'string', required: true, description: `UUID of the ICP segment.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_settings', + description: `Retrieve the customer settings for the authenticated ZoomInfo customer. Settings include company name, description, elevator pitch, and strategic GTM priorities used to power AI recommendations. Returns 404 if no settings have been configured yet.`, + params: [ + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_get_usage', + description: `Get the current user's API usage statistics and limits including credits consumed, records returned, and request counts. Use this to monitor consumption against your ZoomInfo plan limits.`, + params: [ + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_agent_team_runs', + description: `List all runs for an Agent Team, sorted in reverse chronological order. Use Get Agent Team Results to poll for status of a specific run.`, + params: [ + { name: 'agentTeamId', type: 'string', required: true, description: `Required. Unique identifier of the Agent Team.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination. Default is 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page (1-100). Default is 25.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_list_agent_teams', + description: `List all Agent Teams with optional filtering and sorting. Returns team names, registered triggers, and active status.`, + params: [ + { name: 'filter_name', type: 'string', required: false, description: `Filter agent teams by name.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination. Default is 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page (1-100). Default is 25.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: name, createdAt, updatedAt. Prefix with - for descending.` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_list_audience_rows', + description: `Search and list rows in an audience with optional filtering, sorting, and pagination. Supports complex filter groups with AND/OR logic. Optionally retrieve specific row IDs. Returns up to 500 rows per page.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'columns', type: 'array', required: false, description: `Column IDs to include in response.` }, + { name: 'filter', type: 'object', required: false, description: `Filter group with logical operator and filter conditions.` }, + { name: 'ids', type: 'array', required: false, description: `Specific row IDs to retrieve.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sort', type: 'string', required: false, description: `Column ID to sort by.` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_list_audiences', + description: `List all GTM Studio audiences with optional filtering and sorting. Use this to browse audiences or find an audienceId before operating on rows, columns, or enrichment.`, + params: [ + { name: 'filter_searchText', type: 'string', required: false, description: `Filter audiences by name using a case-insensitive contains match.` }, + { name: 'filter_type', type: 'string', required: false, description: `Filter by audience record type.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination. Default is 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: name, createdAt, updatedAt, recordCount. Prefix with - for descending. Default: -updatedAt.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_buyer_personas', + description: `List all buyer personas configured for the authenticated ZoomInfo customer. Buyer personas represent ideal buyer profiles including role, objectives, and purchasing motivations. Use this to discover persona IDs for use in other API operations.`, + params: [ + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_competitors', + description: `List all competitors configured for the authenticated ZoomInfo customer. Competitor records capture competitive intelligence including competing products, win/loss analysis, and displacement history. Use this to discover competitor IDs for other operations.`, + params: [ + { name: 'pageNumber', type: 'integer', required: false, description: `Page number.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_folders', + description: `List all folders in ZoomInfo GTM Studio with optional filtering and sorting. Useful for browsing folder structure or finding a folderId before creating or moving audiences.`, + params: [ + { name: 'filter_createdAfter', type: 'string', required: false, description: `Filter folders created after this date (ISO 8601).` }, + { name: 'filter_createdBefore', type: 'string', required: false, description: `Filter folders created before this date (ISO 8601).` }, + { name: 'filter_searchText', type: 'string', required: false, description: `Filter folders by partial name match.` }, + { name: 'filter_updatedAfter', type: 'string', required: false, description: `Filter folders updated after this date (ISO 8601).` }, + { name: 'filter_updatedBefore', type: 'string', required: false, description: `Filter folders updated before this date (ISO 8601).` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination. Default is 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: name, createdAt, updatedAt, audienceCount, recentlyViewed. Prefix with - for descending. Default: -updatedAt.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_marketing_audiences', + description: `List all ZoomInfo marketing audiences with optional pagination.`, + params: [ + { name: 'pageSize', type: 'integer', required: false, description: `Number of audiences per page.` }, + { name: 'pageToken', type: 'string', required: false, description: `Pagination token from previous response.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_list_offerings', + description: `List all products and services configured for the authenticated ZoomInfo customer. Products serve as the central linking object across GTM config, connecting buyer personas, ICPs, and competitors. Use this to discover offering IDs for other operations.`, + params: [ + { name: 'pageNumber', type: 'integer', required: false, description: `Page number.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_pulses', + description: `List the authenticated user's active intelligence pulses — lightweight signals optimized for LLM consumption. Each pulse includes a plain-text summary, priority (HIGH/MEDIUM/LOW), category, and company/contact references. Dismissed, saved, and expired pulses are excluded.`, + params: [ + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page (1-100).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_list_segments', + description: `List all Ideal Customer Profiles (ICPs) configured for the authenticated ZoomInfo customer. ICPs define target company profiles by firmographic attributes like industry, size, revenue, and geography. Use this to discover segment IDs for other operations.`, + params: [ + { name: 'pageNumber', type: 'integer', required: false, description: `Page number.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_lookup_data', + description: `Get valid values for ZoomInfo filter fields such as industries, departments, intent topics, scoop types, tech products, countries, and more. Use this to discover accepted values before calling search or enrich endpoints.`, + params: [ + { name: 'fieldName', type: 'string', required: true, description: `The lookup field to retrieve valid values for.` }, + { name: 'filter_category', type: 'string', required: false, description: `Category filter (hashtags and tech lookups only).` }, + { name: 'filter_parentCategory', type: 'string', required: false, description: `Parent category filter (hashtags and tech lookups only).` }, + { name: 'filter_subCategory', type: 'string', required: false, description: `Sub-category filter (hashtags and tech lookups only).` }, + { name: 'filter_vendor', type: 'string', required: false, description: `Vendor filter (hashtags and tech lookups only).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_lookup_enrich_fields', + description: `Get available input or output fields for ZoomInfo enrich endpoints by entity type. Use this to discover which fields you can pass as match criteria (input) or request in enriched results (output) for contacts, companies, scoops, news, intent, technologies, hashtags, org charts, and corporate hierarchy.`, + params: [ + { name: 'filter_entity', type: 'string', required: true, description: `Entity type to get enrich fields for.` }, + { name: 'filter_fieldType', type: 'string', required: true, description: `Field type — input fields for match criteria or output fields for response.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_lookup_search_fields', + description: `Get available input or output fields for ZoomInfo search endpoints by entity type. Use this to discover which fields you can filter by (input) or request in results (output) for contact, company, scoop, news, or intent searches.`, + params: [ + { name: 'filter_entity', type: 'string', required: true, description: `Entity type to get search fields for.` }, + { name: 'filter_fieldType', type: 'string', required: true, description: `Field type to return — input fields for filtering or output fields for response.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_run_agent_team', + description: `Trigger an Agent Team run. Returns 202 with a run ID to poll via List Agent Team Runs or Get Agent Team Results. Any team can be run manually regardless of active/inactive status.`, + params: [ + { name: 'agentTeamId', type: 'string', required: true, description: `Required. Unique identifier of the Agent Team to run.` }, + { name: 'inputs', type: 'array', required: false, description: `Optional named input values for the run.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_search_companies', + description: `Search ZoomInfo's company database using name, industry, revenue, headcount, location, funding, and technology filters. Does not consume credits. Use Enrich Companies to get full firmographic details.`, + params: [ + { name: 'companyDescription', type: 'string', required: false, description: `Keywords to search in company descriptions.` }, + { name: 'companyId', type: 'string', required: false, description: `ZoomInfo unique identifier for a company.` }, + { name: 'companyName', type: 'string', required: false, description: `Filter by company name.` }, + { name: 'companyRanking', type: 'string', required: false, description: `Company ranking ID (e.g. Fortune 500). Comma-separated list of IDs.` }, + { name: 'companyType', type: 'string', required: false, description: `Filter by company type. Accepts comma-separated list.` }, + { name: 'companyWebsite', type: 'string', required: false, description: `Filter by company website URL. Accepts comma-separated list.` }, + { name: 'continent', type: 'string', required: false, description: `Continent of the primary address.` }, + { name: 'country', type: 'string', required: false, description: `Country of the primary address.` }, + { name: 'employeeCount', type: 'string', required: false, description: `Pre-defined employee count range. Accepts comma-separated values.` }, + { name: 'employeeRangeMax', type: 'string', required: false, description: `Maximum employee count.` }, + { name: 'employeeRangeMin', type: 'string', required: false, description: `Minimum employee count.` }, + { name: 'excludeDefunctCompanies', type: 'boolean', required: false, description: `Set to true to exclude defunct companies from results.` }, + { name: 'excludeTechAttributeTagList', type: 'string', required: false, description: `Exclude companies with these tech tags. Comma-separated.` }, + { name: 'fundingAmountMax', type: 'integer', required: false, description: `Maximum funding amount in thousands of USD.` }, + { name: 'fundingAmountMin', type: 'integer', required: false, description: `Minimum funding amount in thousands of USD.` }, + { name: 'fundingEndDate', type: 'string', required: false, description: `End date for funding range in YYYY-MM-DD format.` }, + { name: 'fundingStartDate', type: 'string', required: false, description: `Start date for funding range in YYYY-MM-DD format.` }, + { name: 'industryCodes', type: 'string', required: false, description: `Comma-separated list of industry codes.` }, + { name: 'industryKeywords', type: 'string', required: false, description: `Industry keywords. Supports AND/OR operators.` }, + { name: 'metroRegion', type: 'string', required: false, description: `Metro area. Comma-separated list of US/Canada metro areas.` }, + { name: 'naicsCodes', type: 'string', required: false, description: `Comma-separated list of NAICS codes.` }, + { name: 'oneYearEmployeeGrowthRateMax', type: 'string', required: false, description: `Maximum 1-year employee growth rate percentage.` }, + { name: 'oneYearEmployeeGrowthRateMin', type: 'string', required: false, description: `Minimum 1-year employee growth rate percentage.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination, starting from 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'parentId', type: 'string', required: false, description: `ZoomInfo Company ID for the parent company.` }, + { name: 'revenueMax', type: 'integer', required: false, description: `Maximum annual revenue in thousands of USD.` }, + { name: 'revenueMin', type: 'integer', required: false, description: `Minimum annual revenue in thousands of USD.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sicCodes', type: 'string', required: false, description: `Comma-separated list of SIC codes.` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: name, employeeCount, revenue. Prefix with - for descending.` }, + { name: 'state', type: 'string', required: false, description: `State or province of the company's address.` }, + { name: 'techAttributeTagList', type: 'string', required: false, description: `Technology product tag IDs. Comma-separated, supports AND logic.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'zipCode', type: 'string', required: false, description: `Zip or postal code.` }, + ], + }, + { + name: 'zoominfo_search_contacts', + description: `Search ZoomInfo's contact database using name, title, company, location, industry, and other filters. Returns contact profiles with accuracy scores. Does not consume credits. Use Enrich Contacts to get emails and phone numbers.`, + params: [ + { name: 'companyId', type: 'string', required: false, description: `ZoomInfo company ID.` }, + { name: 'companyName', type: 'string', required: false, description: `Filter by company name.` }, + { name: 'companyWebsite', type: 'string', required: false, description: `Filter by company website URL.` }, + { name: 'contactAccuracyScoreMin', type: 'string', required: false, description: `Minimum contact accuracy score (70-99).` }, + { name: 'country', type: 'string', required: false, description: `Country of the company's primary address.` }, + { name: 'department', type: 'string', required: false, description: `Filter by department. Accepts comma-separated list.` }, + { name: 'emailAddress', type: 'string', required: false, description: `Filter by email address.` }, + { name: 'employeeRangeMax', type: 'string', required: false, description: `Maximum employee count.` }, + { name: 'employeeRangeMin', type: 'string', required: false, description: `Minimum employee count.` }, + { name: 'exactJobTitle', type: 'string', required: false, description: `Filter by exact job title match.` }, + { name: 'excludeJobTitle', type: 'string', required: false, description: `Comma-separated list of job titles to exclude.` }, + { name: 'executivesOnly', type: 'boolean', required: false, description: `Set to true to return only executive-level contacts.` }, + { name: 'firstName', type: 'string', required: false, description: `Filter by contact's first name.` }, + { name: 'fullName', type: 'string', required: false, description: `Filter by contact's full name.` }, + { name: 'industryCodes', type: 'string', required: false, description: `Comma-separated list of industry codes. Use lookup/data to get valid values.` }, + { name: 'jobTitle', type: 'string', required: false, description: `Filter by job title. Use OR to combine multiple titles.` }, + { name: 'lastName', type: 'string', required: false, description: `Filter by contact's last name.` }, + { name: 'lastUpdatedDateAfter', type: 'string', required: false, description: `Return only contacts updated after this date (YYYY-MM-DD).` }, + { name: 'managementLevel', type: 'string', required: false, description: `Filter by management level.` }, + { name: 'naicsCodes', type: 'string', required: false, description: `Comma-separated list of NAICS codes.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination, starting from 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'personId', type: 'string', required: false, description: `ZoomInfo unique identifier for the contact.` }, + { name: 'requiredFields', type: 'string', required: false, description: `Required data fields. Accepted values: email, phone, directPhone, personalEmail, mobilePhone.` }, + { name: 'revenueMax', type: 'integer', required: false, description: `Maximum annual revenue in thousands of USD.` }, + { name: 'revenueMin', type: 'integer', required: false, description: `Minimum annual revenue in thousands of USD.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'sicCodes', type: 'string', required: false, description: `Comma-separated list of SIC codes.` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: contactAccuracyScore, lastName, companyName, hierarchy, sourceCount, lastMentioned, relevance. Prefix with - for descending.` }, + { name: 'state', type: 'string', required: false, description: `State or province of the company's address.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'validDateAfter', type: 'string', required: false, description: `Return only contacts with a valid date after this date (YYYY-MM-DD).` }, + ], + }, + { + name: 'zoominfo_search_intent', + description: `Search ZoomInfo buying intent signals by topic and company filters. Topics are required (up to 50). Returns companies showing intent with signal score and audience strength. Counts as record credits.`, + params: [ + { name: 'topics', type: 'array', required: true, description: `Required. Array of up to 50 intent topic names. Use lookup/data to get valid topic values.` }, + { name: 'audienceStrengthMax', type: 'string', required: false, description: `Maximum audience strength (A-E, where A = largest audience).` }, + { name: 'audienceStrengthMin', type: 'string', required: false, description: `Minimum audience strength (A-E, where A = largest audience).` }, + { name: 'companyId', type: 'string', required: false, description: `Filter by ZoomInfo company ID.` }, + { name: 'companyName', type: 'string', required: false, description: `Filter by company name.` }, + { name: 'country', type: 'string', required: false, description: `Filter by country.` }, + { name: 'employeeRangeMax', type: 'string', required: false, description: `Maximum employee count.` }, + { name: 'employeeRangeMin', type: 'string', required: false, description: `Minimum employee count.` }, + { name: 'findRecommendedContacts', type: 'boolean', required: false, description: `Set to false to exclude recommended contacts from results. Default is true.` }, + { name: 'industryCodes', type: 'string', required: false, description: `Comma-separated list of industry codes.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination, starting from 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'revenueMax', type: 'integer', required: false, description: `Maximum annual revenue in thousands of USD.` }, + { name: 'revenueMin', type: 'integer', required: false, description: `Minimum annual revenue in thousands of USD.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'signalEndDate', type: 'string', required: false, description: `End date for intent signals in YYYY-MM-DD format.` }, + { name: 'signalScoreMax', type: 'integer', required: false, description: `Maximum signal score (60-100).` }, + { name: 'signalScoreMin', type: 'integer', required: false, description: `Minimum signal score (60-100).` }, + { name: 'signalStartDate', type: 'string', required: false, description: `Start date for intent signals in YYYY-MM-DD format.` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: signalDate, companyName, signalScore, category, topic, audienceStrength. Prefix with - for descending.` }, + { name: 'state', type: 'string', required: false, description: `Filter by state or province.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_search_news', + description: `Search ZoomInfo news articles by category, URL, and date range. Returns news articles across all ZoomInfo companies. At least one filter must be provided. Does not consume credits but counts toward record and request limits. Use Enrich News to get articles for a specific company.`, + params: [ + { name: 'categories', type: 'array', required: false, description: `Category of news articles to filter by.` }, + { name: 'pageDateMax', type: 'string', required: false, description: `Latest publishing date for news articles.` }, + { name: 'pageDateMin', type: 'string', required: false, description: `Earliest publishing date for news articles.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'url', type: 'array', required: false, description: `News article URLs to search for.` }, + ], + }, + { + name: 'zoominfo_search_scoops', + description: `Search ZoomInfo scoops — real-time business intelligence signals about leadership changes, funding, partnerships, and strategic events. Filter by scoop type, topic, department, date range, contact, and company criteria. Does not consume credits but counts toward record and request limits.`, + params: [ + { name: 'companyId', type: 'string', required: false, description: `ZoomInfo company ID.` }, + { name: 'companyName', type: 'string', required: false, description: `Filter by company name.` }, + { name: 'contactAccuracyScoreMin', type: 'string', required: false, description: `Minimum contact accuracy score (70-99).` }, + { name: 'country', type: 'string', required: false, description: `Country of the company's primary address.` }, + { name: 'department', type: 'string', required: false, description: `Department associated with the scoop. See Scoop Departments lookup for valid values.` }, + { name: 'description', type: 'string', required: false, description: `Keywords to search in scoop descriptions. Space-separated list of words.` }, + { name: 'employeeRangeMax', type: 'string', required: false, description: `Maximum employee count.` }, + { name: 'employeeRangeMin', type: 'string', required: false, description: `Minimum employee count.` }, + { name: 'executivesOnly', type: 'boolean', required: false, description: `Set to true to return only executive-level contacts. Default is false.` }, + { name: 'firstName', type: 'string', required: false, description: `Filter by contact's first name mentioned in scoop.` }, + { name: 'fundingAmountMax', type: 'integer', required: false, description: `Maximum funding amount in thousands of USD.` }, + { name: 'fundingAmountMin', type: 'integer', required: false, description: `Minimum funding amount in thousands of USD.` }, + { name: 'fundingEndDate', type: 'string', required: false, description: `End date for funding range in YYYY-MM-DD format.` }, + { name: 'fundingStartDate', type: 'string', required: false, description: `Start date for funding range in YYYY-MM-DD format.` }, + { name: 'industryCodes', type: 'string', required: false, description: `Comma-separated list of industry codes.` }, + { name: 'jobTitle', type: 'string', required: false, description: `Filter by contact's job title.` }, + { name: 'lastName', type: 'string', required: false, description: `Filter by contact's last name mentioned in scoop.` }, + { name: 'managementLevel', type: 'string', required: false, description: `Filter by contact's management level.` }, + { name: 'metroRegion', type: 'string', required: false, description: `Metro area. Comma-separated list of US/Canada metro areas.` }, + { name: 'naicsCodes', type: 'string', required: false, description: `Comma-separated list of NAICS codes.` }, + { name: 'pageNumber', type: 'integer', required: false, description: `Page number for pagination, starting from 1.` }, + { name: 'pageSize', type: 'integer', required: false, description: `Results per page. Valid values: 1-100. Default is 25.` }, + { name: 'publishedEndDate', type: 'string', required: false, description: `End date for scoop publication date range in YYYY-MM-DD format.` }, + { name: 'publishedStartDate', type: 'string', required: false, description: `Start date for scoop publication date range in YYYY-MM-DD format.` }, + { name: 'revenueMax', type: 'integer', required: false, description: `Maximum annual revenue in thousands of USD.` }, + { name: 'revenueMin', type: 'integer', required: false, description: `Minimum annual revenue in thousands of USD.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'scoopId', type: 'string', required: false, description: `ZoomInfo unique scoop ID. Accepts comma-separated list.` }, + { name: 'scoopTopic', type: 'string', required: false, description: `Scoop topic IDs. Comma-separated list from the lookup endpoint (e.g. integration, consolidation, compliance).` }, + { name: 'scoopType', type: 'string', required: false, description: `Scoop type IDs. Comma-separated list from the lookup endpoint (e.g. earnings, awards, partnerships).` }, + { name: 'sicCodes', type: 'string', required: false, description: `Comma-separated list of SIC codes.` }, + { name: 'sort', type: 'string', required: false, description: `Sort field. Valid values: scoopId, originalPublishedDate, description, link, linkText. Prefix with - for descending.` }, + { name: 'state', type: 'string', required: false, description: `State or province of the company's address.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'updatedSinceCreation', type: 'boolean', required: false, description: `Set to true to only return scoops updated since publishedStartDate. Default is false.` }, + ], + }, + { + name: 'zoominfo_unarchive_buyer_persona', + description: `Restore a previously archived buyer persona to active status, making it available again for use in GTM workflows.`, + params: [ + { name: 'buyerPersonaId', type: 'string', required: true, description: `UUID of the buyer persona.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_unarchive_competitor', + description: `Restore a previously archived competitor record to active status.`, + params: [ + { name: 'competitorId', type: 'string', required: true, description: `UUID of the competitor.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_unarchive_offering', + description: `Restore a previously archived product or service to active status.`, + params: [ + { name: 'offeringId', type: 'string', required: true, description: `UUID of the product or service.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_unarchive_segment', + description: `Restore a previously archived ICP to active status.`, + params: [ + { name: 'segmentId', type: 'string', required: true, description: `UUID of the ICP segment.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_update_audience', + description: `Update an audience's name, folder, description, or notes. Only provided fields are modified (partial update). Use this to rename an audience or move it to a different folder.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience to update.` }, + { name: 'description', type: 'string', required: false, description: `Updated description.` }, + { name: 'folderId', type: 'string', required: false, description: `UUID of the folder to move the audience to.` }, + { name: 'name', type: 'string', required: false, description: `New display name.` }, + { name: 'notes', type: 'string', required: false, description: `Updated notes.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_update_audience_column', + description: `Update a column's name, frozen state, or visibility within an audience. Only provided fields are modified. Cannot update columns with isEditable=false.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'columnId', type: 'string', required: true, description: `UUID of the column to update.` }, + { name: 'isFrozen', type: 'boolean', required: false, description: `Whether the column is pinned to the left in grid views.` }, + { name: 'isHidden', type: 'boolean', required: false, description: `Whether the column is hidden from grid views.` }, + { name: 'name', type: 'string', required: false, description: `New display name for the column.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_update_folder', + description: `Update a folder's name, description, notes, or starred status. Only provided fields are modified (partial update).`, + params: [ + { name: 'folderId', type: 'string', required: true, description: `UUID of the folder to update.` }, + { name: 'description', type: 'string', required: false, description: `Updated description.` }, + { name: 'name', type: 'string', required: false, description: `New display name for the folder.` }, + { name: 'notes', type: 'string', required: false, description: `Updated notes.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'starred', type: 'boolean', required: false, description: `Whether the folder is starred.` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_update_marketing_audience', + description: `Update the name of an existing ZoomInfo marketing audience.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `ID of the audience to update.` }, + { name: 'name', type: 'string', required: true, description: `New name for the audience.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_upload_marketing_audience', + description: `Add or remove records from a ZoomInfo marketing audience. Define the schema using fields (column names) and provide records as arrays matching the field order. Returns 201 with the upload job.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `ID of the marketing audience.` }, + { name: 'fields', type: 'array', required: true, description: `Schema defining which fields are in each record.` }, + { name: 'operationType', type: 'string', required: true, description: `Type of upload operation.` }, + { name: 'records', type: 'array', required: true, description: `List of records to upload, each matching the field schema order.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_upsert_audience_match_criteria', + description: `Set or update column match criteria for an audience, mapping audience columns to ZoomInfo attributes (e.g. an 'Email' column to CONTACT_EMAIL). If matchCriteria is omitted, the system uses AI to auto-map columns. Replaces existing match criteria.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'matchCriteria', type: 'array', required: false, description: `Array of column-to-ZoomInfo-attribute mappings.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_upsert_audience_rows', + description: `Create and/or update up to 500 rows in an audience in one operation. Include id (rowId) to update; omit it to create. Optionally trigger enrichment on affected rows after upsert by setting runEnrichment=true.`, + params: [ + { name: 'audienceId', type: 'string', required: true, description: `UUID of the audience.` }, + { name: 'rows', type: 'array', required: true, description: `Array of row objects to create or update (max 500).` }, + { name: 'columns', type: 'array', required: false, description: `Column IDs to enrich (only used when runEnrichment=true).` }, + { name: 'runEnrichment', type: 'boolean', required: false, description: `Whether to run enrichment after upsert.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_upsert_buyer_persona', + description: `Create a new buyer persona or update an existing one. Include id to update; omit it to create. Only name is required for creation. Buyer personas capture buyer role, objectives, priorities, and engagement insights for GTM alignment.`, + params: [ + { name: 'customFields', type: 'array', required: false, description: `Custom key-value fields for extended persona metadata.` }, + { name: 'description', type: 'string', required: false, description: `Detailed description of the persona's role and relevance to the sales process. Max 10,000 chars.` }, + { name: 'id', type: 'string', required: false, description: `Persona ID to update. Omit to create a new persona.` }, + { name: 'name', type: 'string', required: false, description: `Name of the buyer persona (required for creation, 1-1024 chars).` }, + { name: 'personalObjectives', type: 'string', required: false, description: `Personal objectives, KPIs, and success metrics that drive this persona's purchasing decisions. Max 10,000 chars.` }, + { name: 'relevantOfferings', type: 'string', required: false, description: `Offerings from your portfolio that this persona would be interested in. Max 10,000 chars.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'titlesFunctionsSeniority', type: 'string', required: false, description: `Typical job titles, functional areas, and seniority levels for this persona. Max 10,000 chars.` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'whatDoesThisPersonaCareAbout', type: 'string', required: false, description: `Messaging angle — what this persona cares about in your offering. Max 10,000 chars.` }, + ], + }, + { + name: 'zoominfo_upsert_competitor', + description: `Create a new competitor record or update an existing one. Include id to update; omit it to create. Only name is required for creation. Captures competitive intelligence including win/loss analysis, competing products, and displacement scenarios.`, + params: [ + { name: 'competitiveProducts', type: 'string', required: false, description: `Your own products that directly compete with this competitor. Max 10,000 chars.` }, + { name: 'competitorProducts', type: 'string', required: false, description: `Competitor products that overlap with your portfolio. Max 10,000 chars.` }, + { name: 'customersWeWon', type: 'string', required: false, description: `Accounts won from this competitor. Useful for competitive proof points. Max 10,000 chars.` }, + { name: 'customFields', type: 'array', required: false, description: `Custom key-value fields for extended competitor intelligence.` }, + { name: 'description', type: 'string', required: false, description: `Detailed description of the competitor including market position and strengths. Max 10,000 chars.` }, + { name: 'id', type: 'string', required: false, description: `Competitor ID to update. Omit to create a new competitor.` }, + { name: 'name', type: 'string', required: false, description: `Name of the competitor company (required for creation, 1-1024 chars).` }, + { name: 'reasonsTheyLose', type: 'string', required: false, description: `Why this competitor loses deals — weaknesses and gaps where you hold an advantage. Max 10,000 chars.` }, + { name: 'reasonsTheyWin', type: 'string', required: false, description: `Why this competitor wins deals — key strengths and differentiators. Max 10,000 chars.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'url', type: 'string', required: false, description: `Competitor's website URL. Max 1,024 chars.` }, + ], + }, + { + name: 'zoominfo_upsert_content_interactions', + description: `Create or update a content interaction engagement record (website visit, email click, form submission, etc.). Records participant details, interaction type, channel, and content type.`, + params: [ + { name: 'actionPerformedAt', type: 'string', required: true, description: `Required. Timestamp when the interaction started (ISO 8601).` }, + { name: 'channel', type: 'string', required: true, description: `Required. Source or medium of the interaction.` }, + { name: 'companyDomain', type: 'string', required: true, description: `Required. Company domain of the participant.` }, + { name: 'contentType', type: 'string', required: true, description: `Required. Category or format of the content.` }, + { name: 'engagementId', type: 'string', required: true, description: `Required. Unique content interaction identifier.` }, + { name: 'instanceId', type: 'string', required: true, description: `Required. Unique identifier of the customer's organization in the external platform.` }, + { name: 'interactionType', type: 'string', required: true, description: `Required. Specific action performed.` }, + { name: 'status', type: 'string', required: true, description: `Required. Interaction status.` }, + { name: 'companyName', type: 'string', required: false, description: `Participant company name.` }, + { name: 'duration', type: 'integer', required: false, description: `Length of interaction in seconds.` }, + { name: 'email', type: 'string', required: false, description: `Participant email address.` }, + { name: 'endedAt', type: 'string', required: false, description: `Timestamp when the interaction ended (ISO 8601).` }, + { name: 'firstName', type: 'string', required: false, description: `Participant first name.` }, + { name: 'instanceUrl', type: 'string', required: false, description: `URL of the customer's organization in the external platform.` }, + { name: 'interactionDetails', type: 'object', required: false, description: `Additional interaction attributes as key-value pairs.` }, + { name: 'lastName', type: 'string', required: false, description: `Participant last name.` }, + { name: 'phoneNumber', type: 'string', required: false, description: `Participant phone number.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'targetName', type: 'string', required: false, description: `Target name.` }, + { name: 'targetUrl', type: 'string', required: false, description: `Target URL of the interaction.` }, + { name: 'title', type: 'string', required: false, description: `Participant job title.` }, + { name: 'tool_version', type: 'string', required: false, description: `Schema version override` }, + ], + }, + { + name: 'zoominfo_upsert_offering', + description: `Create a new product/service or update an existing one. Include id to update; omit it to create. Only name is required for creation. Products serve as the central linking object connecting buyer personas, ICPs, and competitors in your GTM config.`, + params: [ + { name: 'competitors', type: 'string', required: false, description: `Text description of competitors relevant to this product. Max 10,000 chars.` }, + { name: 'customFields', type: 'array', required: false, description: `Custom key-value fields for extended product metadata.` }, + { name: 'description', type: 'string', required: false, description: `Detailed description including purpose, target audience, and key benefits. Max 10,000 chars.` }, + { name: 'id', type: 'string', required: false, description: `Product/service ID to update. Omit to create a new record.` }, + { name: 'idealCompanySegment', type: 'string', required: false, description: `Text description of the ideal company segment for this product. Max 10,000 chars.` }, + { name: 'name', type: 'string', required: false, description: `Name of the product or service (required for creation, 1-1024 chars).` }, + { name: 'offeringBuyerPersonas', type: 'string', required: false, description: `Text description of the buyer personas relevant to this product. Max 10,000 chars.` }, + { name: 'painPoints', type: 'array', required: false, description: `Customer pain points this product addresses. Array of strings, max 100 items.` }, + { name: 'proofPoints', type: 'array', required: false, description: `Reviews, testimonials, or case-study references validating effectiveness. Array of strings, max 100 items.` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + { name: 'url', type: 'string', required: false, description: `URL of the product or service webpage. Max 1,024 chars.` }, + { name: 'valueProposition', type: 'array', required: false, description: `Key reasons a buyer should choose this product. Array of strings, max 100 items.` }, + ], + }, + { + name: 'zoominfo_upsert_segment', + description: `Create a new Ideal Customer Profile (ICP) or update an existing one. Include id to update; omit it to create. Only name is required for creation. ICPs define target company profiles using firmographic criteria like industry, size, revenue, and geography.`, + params: [ + { name: 'customFields', type: 'array', required: false, description: `Custom key-value fields for extended ICP criteria.` }, + { name: 'description', type: 'string', required: false, description: `Description of the ICP including industry, company size, revenue range, and geography. Max 10,000 chars.` }, + { name: 'id', type: 'string', required: false, description: `ICP segment ID to update. Omit to create a new ICP.` }, + { name: 'name', type: 'string', required: false, description: `Name of the ICP (required for creation, 1-1024 chars).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, + { + name: 'zoominfo_upsert_settings', + description: `Create or update the customer settings singleton for the authenticated ZoomInfo account. Settings include company name, elevator pitch, description, and strategic priorities used by AI recommendations. At least one attribute must be provided. Updates are partial — only provided fields are modified.`, + params: [ + { name: 'customFields', type: 'array', required: false, description: `Custom key-value fields for extended settings.` }, + { name: 'description', type: 'string', required: false, description: `Company description including market position and target audience (max 10,000 chars).` }, + { name: 'elevatorPitch', type: 'string', required: false, description: `Brief elevator pitch or value proposition. Used by AI agents to understand your core offering (max 1,024 chars).` }, + { name: 'name', type: 'string', required: false, description: `Editable display name for the customer organization (max 1,024 chars).` }, + { name: 'schema_version', type: 'string', required: false, description: `Schema version override` }, + { name: 'strategicPriorities', type: 'string', required: false, description: `Key business objectives, growth targets, and focus areas used by AI to align GTM recommendations (max 10,000 chars).` }, + { name: 'tool_version', type: 'string', required: false, description: `Tool version override` }, + ], + }, +]