diff --git a/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg b/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg
index 06f02734a..3c13d2939 100644
--- a/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg
+++ b/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg
@@ -1,17 +1,17 @@
-
diff --git a/src/assets/docs/agent-connectors/airopsmcp/create-api-key.png b/src/assets/docs/agent-connectors/airopsmcp/create-api-key.png
new file mode 100644
index 000000000..4fb0d396f
Binary files /dev/null and b/src/assets/docs/agent-connectors/airopsmcp/create-api-key.png differ
diff --git a/src/assets/docs/agent-connectors/gainsight/create-api-key.png b/src/assets/docs/agent-connectors/gainsight/create-api-key.png
new file mode 100644
index 000000000..1f839df7c
Binary files /dev/null and b/src/assets/docs/agent-connectors/gainsight/create-api-key.png differ
diff --git a/src/assets/docs/agent-connectors/salesloft/create-api-key.png b/src/assets/docs/agent-connectors/salesloft/create-api-key.png
new file mode 100644
index 000000000..7e5346ce8
Binary files /dev/null and b/src/assets/docs/agent-connectors/salesloft/create-api-key.png differ
diff --git a/src/assets/docs/agent-connectors/salesloft/create-oauth-app.png b/src/assets/docs/agent-connectors/salesloft/create-oauth-app.png
new file mode 100644
index 000000000..87872d94c
Binary files /dev/null and b/src/assets/docs/agent-connectors/salesloft/create-oauth-app.png differ
diff --git a/src/components/templates/agent-connectors/_setup-airopsmcp.mdx b/src/components/templates/agent-connectors/_setup-airopsmcp.mdx
new file mode 100644
index 000000000..a5c5f0041
--- /dev/null
+++ b/src/components/templates/agent-connectors/_setup-airopsmcp.mdx
@@ -0,0 +1,67 @@
+import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components'
+
+Register your Scalekit environment with the AirOps connector so Scalekit can proxy API requests and inject your API key automatically. There is no redirect URI or OAuth flow — authentication uses your AirOps API key.
+
+
+1. ### Get your AirOps API key
+
+ - Sign in to [AirOps](https://app.airops.com) and click **Settings** in the bottom-left sidebar.
+ - Select **Workspace** from the settings menu.
+ - Under **API Key**, click the copy icon to copy your key. To rotate the key, click **Regenerate**.
+
+ 
+
+
+
+2. ### Create a connection in Scalekit
+
+ - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **AirOps** and click **Create**.
+ - Note the **Connection name** — use this as `connection_name` in your code (e.g., `airopsmcp`).
+ - Click **Save**.
+
+3. ### Add a connected account
+
+ Connected accounts link a user identifier in your system to an AirOps API key.
+
+ **Via dashboard (for testing)**
+ - Open the connection and click the **Connected Accounts** tab → **Add account**.
+ - Fill in:
+ - **Your User's ID** — a unique identifier for this user in your system (e.g., `user_123`)
+ - **API Key** — the AirOps API key you copied in step 1
+ - Click **Save**.
+
+ **Via API (for production)**
+
+
+
+ ```typescript
+ // Never hard-code API keys — read from secure storage or user input
+ const airopsApiKey = getUserAiropsKey(); // retrieve from your secure store
+
+ await scalekit.actions.upsertConnectedAccount({
+ connectionName: 'airopsmcp',
+ identifier: 'user_123',
+ credentials: { api_key: airopsApiKey },
+ });
+ ```
+
+
+ ```python
+ # Never hard-code API keys — read from secure storage or user input
+ airops_api_key = get_user_airops_key() # retrieve from your secure store
+
+ scalekit_client.actions.upsert_connected_account(
+ connection_name="airopsmcp",
+ identifier="user_123",
+ credentials={"api_key": airops_api_key}
+ )
+ ```
+
+
+
+
+
diff --git a/src/components/templates/agent-connectors/_setup-gainsight.mdx b/src/components/templates/agent-connectors/_setup-gainsight.mdx
new file mode 100644
index 000000000..cbdcc9dc0
--- /dev/null
+++ b/src/components/templates/agent-connectors/_setup-gainsight.mdx
@@ -0,0 +1,73 @@
+import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components'
+
+Register your Scalekit environment with the Gainsight connector so Scalekit can proxy API requests using your Gainsight access key. There is no redirect URI or OAuth flow.
+
+
+1. ### Generate a Gainsight access key
+
+ - Sign in to Gainsight and go to **Administration** → **Connectors 2.0** → **Connections**.
+ - Click **+ Create Connection**.
+ - Select **Gainsight API** as the connector type, enter a connection name, and choose **Access Key** as the authentication type.
+ - Click **Generate Access Key**.
+
+ 
+
+
+
+2. ### Create a connection in Scalekit
+
+ - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **Gainsight** and click **Create**.
+ - Note the **Connection name** — use this as `connection_name` in your code (e.g., `gainsight`).
+ - Click **Save**.
+
+3. ### Add a connected account
+
+ **Via dashboard (for testing)**
+ - Open the connection and click the **Connected Accounts** tab → **Add account**.
+ - Fill in:
+ - **Your User's ID** — a unique identifier for this user in your system (e.g., `user_123`)
+ - **Tenant Domain** — your Gainsight hostname without `https://` (e.g., `mycompany.gainsightcloud.com`)
+ - **Access Key** — the key you generated in step 1
+ - Click **Save**.
+
+ **Via API (for production)**
+
+
+
+ ```typescript
+ // Never hard-code API keys — read from secure storage or user input
+ const gainsightKey = getUserGainsightKey(); // retrieve from your secure store
+
+ await scalekit.actions.upsertConnectedAccount({
+ connectionName: 'gainsight',
+ identifier: 'user_123',
+ credentials: {
+ domain: 'mycompany.gainsightcloud.com',
+ api_key: gainsightKey,
+ },
+ });
+ ```
+
+
+ ```python
+ # Never hard-code API keys — read from secure storage or user input
+ gainsight_key = get_user_gainsight_key() # retrieve from your secure store
+
+ scalekit_client.actions.upsert_connected_account(
+ connection_name="gainsight",
+ identifier="user_123",
+ credentials={
+ "domain": "mycompany.gainsightcloud.com",
+ "api_key": gainsight_key,
+ }
+ )
+ ```
+
+
+
+
+
diff --git a/src/components/templates/agent-connectors/_setup-salesloft.mdx b/src/components/templates/agent-connectors/_setup-salesloft.mdx
new file mode 100644
index 000000000..8a2244feb
--- /dev/null
+++ b/src/components/templates/agent-connectors/_setup-salesloft.mdx
@@ -0,0 +1,71 @@
+import { Steps, Aside, Tabs, TabItem } from '@astrojs/starlight/components'
+
+Register your Scalekit environment with the Salesloft connector so Scalekit handles the OAuth 2.0 flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically.
+
+
+1. ### Create a Salesloft OAuth application
+
+ - Sign in to [Salesloft](https://accounts.salesloft.com) and go to **Settings** → **Your Applications** → **OAuth Applications**.
+ - Click **+ New Application**.
+ - Fill in the application name (e.g., `My Sales Agent`) and description.
+ - In the **Redirect URI** field, paste the redirect URI from Scalekit (see step 2 — you can return to add it after).
+ - Under **Scopes**, select the permissions your agent needs:
+
+ | Scope | Enables |
+ | --- | --- |
+ | `read` | Read access to contacts, cadences, and activities |
+ | `write` | Create and update records |
+
+ - Click **Save**. On the application detail page, copy your **Client ID** and **Client Secret**.
+
+ 
+
+
+
+2. ### Create a connection in Scalekit
+
+ - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **Salesloft** and click **Create**.
+ - Click **Use your own credentials** and copy the **Redirect URI**:
+ `https:///sso/v1/oauth//callback`
+ - Return to your Salesloft OAuth app and add this redirect URI.
+ - Back in Scalekit, enter your **Client ID**, **Client Secret**, and the **Permissions** (scopes) you selected.
+ - Note the **Connection name** (e.g., `salesloft`) — use this as `connection_name` in your code.
+ - Click **Save**.
+
+3. ### Add a connected account
+
+ **Via dashboard (for testing)**
+ - Open the connection and click the **Connected Accounts** tab → **Add account**.
+ - Enter a **User ID** and click **Save**. You will be redirected to Salesloft to authorize access.
+
+ **Via API (for production)**
+
+
+
+ ```typescript
+ const { link } = await scalekit.actions.getAuthorizationLink({
+ connectionName: 'salesloft',
+ identifier: 'user_123',
+ });
+ // Redirect your user to `link` to authorize access
+ console.log('Authorize at:', link);
+ ```
+
+
+ ```python
+ response = scalekit_client.actions.get_authorization_link(
+ connection_name="salesloft",
+ identifier="user_123"
+ )
+ # Redirect your user to response.link to authorize access
+ print("Authorize at:", response.link)
+ ```
+
+
+
+
+
diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts
index 79222f115..aa57ac067 100644
--- a/src/components/templates/agent-connectors/index.ts
+++ b/src/components/templates/agent-connectors/index.ts
@@ -1,6 +1,7 @@
export { default as AgentKitCredentials } from './_agentkit-credentials.mdx'
export { default as SetupAdobemarketingagentmcpSection } from './_setup-adobemarketingagentmcp.mdx'
export { default as SetupAdzvisermcpSection } from './_setup-adzvisermcp.mdx'
+export { default as SetupAiropsmcpSection } from './_setup-airopsmcp.mdx'
export { default as SetupAirtableSection } from './_setup-airtable.mdx'
export { default as SetupApifymcpSection } from './_setup-apifymcp.mdx'
export { default as SetupApolloSection } from './_setup-apollo.mdx'
@@ -27,6 +28,7 @@ export { default as SetupExaSection } from './_setup-exa.mdx'
export { default as SetupFellowaimcpSection } from './_setup-fellowaimcp.mdx'
export { default as SetupFigmaSection } from './_setup-figma.mdx'
export { default as SetupFirecrawlmcpSection } from './_setup-firecrawlmcp.mdx'
+export { default as SetupGainsightSection } from './_setup-gainsight.mdx'
export { default as SetupGithubSection } from './_setup-github.mdx'
export { default as SetupGitlabSection } from './_setup-gitlab.mdx'
export { default as SetupGmailSection } from './_setup-gmail.mdx'
@@ -64,6 +66,7 @@ export { default as SetupPhantombusterSection } from './_setup-phantombuster.mdx
export { default as SetupPipedriveSection } from './_setup-pipedrive.mdx'
export { default as SetupQuickbooksSection } from './_setup-quickbooks.mdx'
export { default as SetupSalesforceSection } from './_setup-salesforce.mdx'
+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'
diff --git a/src/content/docs/agentkit/connectors/airopsmcp.mdx b/src/content/docs/agentkit/connectors/airopsmcp.mdx
new file mode 100644
index 000000000..e1c86fc82
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/airopsmcp.mdx
@@ -0,0 +1,84 @@
+---
+title: 'Airops MCP connector'
+tableOfContents: true
+description: 'Connect to AirOps MCP. Manage brand kits, run AI-powered analytics, track AEO citations, and automate content workflows from your AI agents.'
+sidebar:
+ label: 'Airops MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/airops.svg
+connectorAuthType: API Key
+connectorCategories: [AI, Marketing, Analytics]
+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/airopsmcp'
+import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
+import { AgentKitCredentials } from '@components/templates'
+import { SetupAiropsmcpSection } from '@components/templates'
+import { QuickstartGenericApikeySection } 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 Airops MCP credentials with Scalekit so it can authenticate requests on your behalf. You do this once per environment.
+
+
+ Dashboard setup steps
+
+
+
+
+
+4. ### Make your first call
+
+
+
+
+
+## What you can do
+
+Connect this agent connector to let your agent:
+
+- **Grid write** — Create or update rows in a grid table
+- **Update brand kit, track aeo page content** — Update a Brand Kit's base fields
+- **Edits suggest brand kit** — Suggest edits to a Brand Kit's fields without applying them
+- **Search knowledge base** — Search a Knowledge Base for relevant content using semantic similarity
+- **Run grid rows** — Trigger execution of one or more grid rows
+- **Read grid** — Read rows from a grid table
+
+## 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/biorendermcp.mdx b/src/content/docs/agentkit/connectors/biorendermcp.mdx
new file mode 100644
index 000000000..9ba685b54
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/biorendermcp.mdx
@@ -0,0 +1,68 @@
+---
+title: 'Bio Render MCP connector'
+tableOfContents: true
+description: 'Connect to BioRender MCP. Search BioRender''s scientific icon and figure template libraries to build publication-ready biological illustrations.'
+sidebar:
+ label: 'Bio Render MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/biorendermcp.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [AI, Design, Search]
+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/biorendermcp'
+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-templates records** — Search BioRender's scientific figure template library
+- **Search-icons records** — Search BioRender's scientific icon library by keyword
+
+## 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/candidmcp.mdx b/src/content/docs/agentkit/connectors/candidmcp.mdx
new file mode 100644
index 000000000..946b3b0d2
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/candidmcp.mdx
@@ -0,0 +1,72 @@
+---
+title: 'Candid MCP connector'
+tableOfContents: true
+description: 'Connect to Candid MCP. Search nonprofit organizations, explore philanthropic data, and classify social sector activities using Candid''s knowledge base.'
+sidebar:
+ label: 'Candid MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/candid.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Search, AI, Databases]
+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/candidmcp'
+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:
+
+- **Terms taxonomy** — Classify text using Candid's Philanthropy Classification System (PCS) taxonomy to get subject and population codes
+- **Search organizations** — Search Candid's database for nonprofits and grantmaking organizations by name, mission, location, or type of work
+- **Resources knowledge** — Search Candid's knowledge base for articles, blog posts, research reports, and training content about the social and philanthropic sector
+- **Organizations identify mentioned** — Resolve nonprofit names mentioned in text to Candid profile URLs
+- **Locations identify** — Detect and resolve geographic names in text to Geonames IDs for use in organization search filters
+- **Date current** — Get today's date for use in time-sensitive queries and data requests
+
+## 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/cartamcp.mdx b/src/content/docs/agentkit/connectors/cartamcp.mdx
new file mode 100644
index 000000000..36d558cf6
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/cartamcp.mdx
@@ -0,0 +1,72 @@
+---
+title: 'Carta MCP connector'
+tableOfContents: true
+description: 'Connect to Carta. Manage equity cap tables, fund administration, company accounts, and ownership data for venture-backed companies.'
+sidebar:
+ label: 'Carta MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/carta.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Accounting & Finance, Analytics, 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/cartamcp'
+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:
+
+- **Welcome records** — Get a welcome message and orientation guide from Carta MCP
+- **Static view** — Render an interactive Carta view backed by server-bundled HTML
+- **Remote view** — Render an interactive Carta view backed by a Module Federation remote
+- **Context set** — Switch the active firm so subsequent queries use that firm data
+- **Mutate records** — Execute a write command (POST, PATCH, PUT, DELETE) against Carta
+- **List contexts, accounts** — List the firms you have access to in Carta Fund Admin
+
+## 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/cloudfaremcp.mdx b/src/content/docs/agentkit/connectors/cloudfaremcp.mdx
new file mode 100644
index 000000000..e636b5fbb
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/cloudfaremcp.mdx
@@ -0,0 +1,68 @@
+---
+title: 'Cloudflare MCP connector'
+tableOfContents: true
+description: 'Connect to Cloudflare MCP to manage your Cloudflare account — execute API calls, search the OpenAPI spec, and interact with Workers, R2, D1, KV, and all...'
+sidebar:
+ label: 'Cloudflare MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/cloudflare.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Developer Tools, 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/cloudfaremcp'
+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 the Cloudflare OpenAPI spec to discover API endpoints, request parameters, and response schemas
+- **Execute records** — Execute JavaScript code against the Cloudflare API using the `cloudflare.request()` helper
+
+## 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/fiscalaimcp.mdx b/src/content/docs/agentkit/connectors/fiscalaimcp.mdx
new file mode 100644
index 000000000..4eaac5c54
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/fiscalaimcp.mdx
@@ -0,0 +1,68 @@
+---
+title: 'FiscalAI MCP connector'
+tableOfContents: true
+description: 'Connect to FiscalAI MCP. Access financial data for public companies including SEC filings, earnings, stock prices, financial ratios, and company profiles.'
+sidebar:
+ label: 'FiscalAI MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/fiscalai.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Analytics, AI, Accounting & Finance]
+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/fiscalaimcp'
+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:
+
+- **Execute code** — Execute JavaScript code in a secure sandbox to call Fiscal.ai API functions via the codemode namespace and return results via console.log
+- **Docs api** — Retrieve Fiscal.ai API documentation with TypeScript type definitions for all available functions
+
+## 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/gainsight.mdx b/src/content/docs/agentkit/connectors/gainsight.mdx
new file mode 100644
index 000000000..0c3a9082e
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/gainsight.mdx
@@ -0,0 +1,84 @@
+---
+title: 'Gainsight connector'
+tableOfContents: true
+description: 'Connect to Gainsight Customer Success to manage companies, contacts, calls to action, success plans, timeline activities, and custom objects. Power...'
+sidebar:
+ label: 'Gainsight'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/gainsight.svg
+connectorAuthType: API Key
+connectorCategories: [CRM & Sales, Customer Support, Analytics]
+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/gainsight'
+import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
+import { AgentKitCredentials } from '@components/templates'
+import { SetupGainsightSection } from '@components/templates'
+import { QuickstartGenericApikeySection } 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 Gainsight credentials with Scalekit so it can authenticate requests on your behalf. You do this once per environment.
+
+
+ Dashboard setup steps
+
+
+
+
+
+4. ### Make your first call
+
+
+
+
+
+## What you can do
+
+Connect this agent connector to let your agent:
+
+- **Update timeline, success plan, cta** — Update one or more fields on an existing Timeline activity
+- **Query timeline, scorecard, relationships** — Search and filter Gainsight Timeline activity records by any field
+- **Create timeline, task, cta** — Log a new Timeline activity linked to a company in Gainsight
+- **List task, success plan, object** — List all tasks for a given CTA
+- **User resolve** — Look up Gainsight users by email or filter
+- **Describe object** — Return the full field schema for any Gainsight MDA object, including field names, types, and picklist values
+
+## 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/otteraimcp.mdx b/src/content/docs/agentkit/connectors/otteraimcp.mdx
new file mode 100644
index 000000000..a8a6ee084
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/otteraimcp.mdx
@@ -0,0 +1,69 @@
+---
+title: 'OtterAI MCP connector'
+tableOfContents: true
+description: 'Connect to OtterAI MCP. Search meeting recordings, fetch full transcripts, and retrieve user account info from your AI workflows.'
+sidebar:
+ label: 'OtterAI MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/otterai.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Transcription, 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/otteraimcp'
+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 OtterAI meetings by keyword, title, attendee, folder, date range, or transcript content
+- **Get user info** — Return the name and email of the currently authenticated OtterAI user
+- **Fetch records** — Retrieve the full transcript and metadata for a single OtterAI meeting by its 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/revealedaimcp.mdx b/src/content/docs/agentkit/connectors/revealedaimcp.mdx
new file mode 100644
index 000000000..2f0a49913
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/revealedaimcp.mdx
@@ -0,0 +1,72 @@
+---
+title: 'Revealed AI MCP connector'
+tableOfContents: true
+description: 'Connect to Revealed AI. Track account signals, buyer personas, and people changes to surface timely outreach actions and account intelligence for B2B...'
+sidebar:
+ label: 'Revealed AI MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/revealedai.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [CRM & Sales, Analytics, 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/revealedaimcp'
+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:
+
+- **Actions top, recommended** — Retrieve ranked recommended actions across all active accounts in the workspace
+- **Changes recent** — Retrieve what changed since the last finalized snapshot: change summary, person changes, and signal events
+- **Usage plan** — Retrieve billing plan limits and current account usage counts for the workspace
+- **Status mcp** — Check MCP connectivity and return workspace name, OAuth client ID, and granted token scopes
+- **List tracked signals, personas, people** — List persona slugs, people signal slugs, and company signal slugs configured for this workspace
+- **Get person, company signal, account brief** — Retrieve the full person record from the latest snapshot
+
+## 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/salesloft.mdx b/src/content/docs/agentkit/connectors/salesloft.mdx
new file mode 100644
index 000000000..b03a48c2b
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/salesloft.mdx
@@ -0,0 +1,83 @@
+---
+title: 'Salesloft connector'
+tableOfContents: true
+description: 'Connect with Salesloft to manage people, cadences, accounts, activities, emails, calls, and notes'
+sidebar:
+ label: 'Salesloft'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/salesloft.svg
+connectorAuthType: OAuth 2.0
+connectorCategories: [CRM & Sales, 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/salesloft'
+import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'
+import { AgentKitCredentials } from '@components/templates'
+import { SetupSalesloftSection } 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. ### Set up the connector
+
+ Register your Salesloft 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:
+
+- **List users, tasks, people** — Fetch multiple user records from Salesloft
+- **Get users, tasks, people** — Fetch the authenticated current user's information from Salesloft
+- **Update tasks, people, notes** — Update an existing task in Salesloft by its ID
+- **Delete tasks, people, notes** — Delete a task from Salesloft by its ID
+- **Create tasks, people, notes** — Create a new task in Salesloft
+
+## 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/sanitymcp.mdx b/src/content/docs/agentkit/connectors/sanitymcp.mdx
new file mode 100644
index 000000000..c232de6c4
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/sanitymcp.mdx
@@ -0,0 +1,72 @@
+---
+title: 'Sanity MCP connector'
+tableOfContents: true
+description: 'Connect to Sanity. Manage structured content, documents, datasets, schemas, releases, and media assets for headless CMS workflows.'
+sidebar:
+ label: 'Sanity MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/sanity.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Developer Tools, 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/sanitymcp'
+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:
+
+- **Whoami records** — Get the currently authenticated Sanity user profile
+- **Document version unpublish, version replace** — Unpublish a versioned document from a release
+- **Discard version** — Discard document versions associated with a release
+- **Update dataset** — Update the access control mode or description of an existing Sanity dataset
+- **Documents unpublish, publish** — Unpublish one or more documents to revert them to draft state
+- **Image transform, generate** — Apply an AI transformation to an image field in a Sanity document
+
+## 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/webflowmcp.mdx b/src/content/docs/agentkit/connectors/webflowmcp.mdx
new file mode 100644
index 000000000..1b25a763a
--- /dev/null
+++ b/src/content/docs/agentkit/connectors/webflowmcp.mdx
@@ -0,0 +1,70 @@
+---
+title: 'Webflow MCP connector'
+tableOfContents: true
+description: 'Connect to Webflow. Build and manage websites, pages, components, styles, assets, CMS collections, and site settings through the Webflow Designer and Data...'
+sidebar:
+ label: 'Webflow MCP'
+overviewTitle: 'Quickstart'
+connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/webflow.svg
+connectorAuthType: OAuth 2.1/DCR
+connectorCategories: [Design, Developer Tools, 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/webflowmcp'
+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:
+
+- **Builder whtml, element, component** — Insert elements on the current active page from HTML and CSS strings, accepting markup and optional CSS rules
+- **Tool webflow guide, variable, style** — Retrieve Webflow tool usage guidelines and recommended workflows before performing any actions
+- **Get more tools, image preview** — Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback
+- **Ai ask webflow** — Ask Webflow AI any question about the Webflow API and get a direct answer
+
+## 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/guides/dashboard/org-redirect-urls.mdx b/src/content/docs/guides/dashboard/org-redirect-urls.mdx
index 1617358bc..8abb6fb52 100644
--- a/src/content/docs/guides/dashboard/org-redirect-urls.mdx
+++ b/src/content/docs/guides/dashboard/org-redirect-urls.mdx
@@ -216,7 +216,7 @@ If no organization is in scope, the template is not expanded and the request is
2. **Set the organization's slug**
- For Megasoft, set `slug` to `auth.megasoft.com` (see [Set slug and metadata for an organization](#set-slug-and-metadata-for-an-organization) above).
+ For Megasoft, set `slug` to `auth.megasoft.com` (see [Set slug or metadata for an organization](#set-slug-or-metadata-for-an-organization) above).
3. **Pass the org-specific redirect URL and `organization_id` in the authorization request**
diff --git a/src/data/agent-connectors/airopsmcp.ts b/src/data/agent-connectors/airopsmcp.ts
new file mode 100644
index 000000000..1789b11d1
--- /dev/null
+++ b/src/data/agent-connectors/airopsmcp.ts
@@ -0,0 +1,2014 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'airopsmcp_add_grid_column',
+ description: `Add a new column to a grid table. Use this before write_grid when you need to write to a column that does not exist yet.`,
+ params: [
+ {
+ name: 'data_type',
+ type: 'string',
+ required: true,
+ description: `The data type for the column.`,
+ },
+ { name: 'grid_id', type: 'integer', required: true, description: `The ID of the grid.` },
+ {
+ name: 'grid_table_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid table (sheet).`,
+ },
+ { name: 'title', type: 'string', required: true, description: `The column title.` },
+ {
+ name: 'position',
+ type: 'integer',
+ required: false,
+ description: `Optional column position. If omitted, appended at the end.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_analytics_chart',
+ description: `Query analytics data and display it as an interactive chart. Returns data with a UI reference for visualization.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The Brand Kit ID to query analytics for`,
+ },
+ {
+ name: 'metrics',
+ type: 'array',
+ required: true,
+ description: `Metrics to calculate and display (e.g., citation_rate, mention_rate, share_of_voice).`,
+ },
+ {
+ name: 'chart_type',
+ type: 'string',
+ required: false,
+ description: `Type of chart to render. Line for time series, bar for comparisons, pie for proportions, area for comparison and visualizing totals with filled area under the curve. Default: line.`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter by country codes (ISO 3166-1 alpha-2)`,
+ },
+ {
+ name: 'dimensions',
+ type: 'array',
+ required: false,
+ description: `Dimensions to group by (max 3).`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date (YYYY-MM-DD). Defaults to yesterday. Must be before today because today's data may still be processing and is incomplete — yesterday is used to ensure robust, complete data. Leave blank unless a specific date is requested.`,
+ },
+ {
+ name: 'grain',
+ type: 'string',
+ required: false,
+ description: `Time granularity for aggregation. Default: total`,
+ },
+ { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` },
+ { name: 'providers', type: 'array', required: false, description: `Filter by AI providers` },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date (YYYY-MM-DD). Default: 7 days ago`,
+ },
+ {
+ name: 'tags',
+ type: 'array',
+ required: false,
+ description: `Filter by tag IDs. Returns data only for prompts tagged with any of the given tags.`,
+ },
+ {
+ name: 'themes',
+ type: 'array',
+ required: false,
+ description: `Filter sentiment data by theme IDs. Only applies to sentiment_score metric.`,
+ },
+ {
+ name: 'title',
+ type: 'string',
+ required: false,
+ description: `Optional chart title. If not provided, a title will be auto-generated.`,
+ },
+ { name: 'topics', type: 'array', required: false, description: `Filter by topic IDs` },
+ ],
+ },
+ {
+ name: 'airopsmcp_create_aeo_prompt',
+ description: `Create a new AEO prompt for a Brand Kit. Prompts are questions that can be asked about a brand to AI search engines, used to track AI visibility and citations.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The Brand Kit ID to add the prompt to`,
+ },
+ {
+ name: 'text',
+ type: 'string',
+ required: true,
+ description: `The prompt text (max 512 characters). Must be unique within the Brand Kit.`,
+ },
+ {
+ name: 'topic_id',
+ type: 'integer',
+ required: true,
+ description: `Topic ID to associate with the prompt. Must belong to the same Brand Kit. Use \`list_topics\` to discover available topics and either suggest one or ask the user to choose.`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `ISO alpha-2 country codes to assign (e.g., ["US", "GB"]). Must be configured on the Brand Kit.`,
+ },
+ {
+ name: 'persona_ids',
+ type: 'array',
+ required: false,
+ description: `Persona IDs to assign. Must belong to the same Brand Kit. Use \`list_personas\` to discover available personas.`,
+ },
+ {
+ name: 'platforms',
+ type: 'array',
+ required: false,
+ description: `Platforms to assign. Valid values: chat_gpt, gemini, perplexity, google_ai_mode, google_ai_overview.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_create_brand_kit_direct_upload',
+ description: `Initiate a direct file upload for use with Brand Kit visual tools.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The Brand Kit ID this file is intended for`,
+ },
+ {
+ name: 'byte_size',
+ type: 'integer',
+ required: true,
+ description: `Size of the file in bytes`,
+ },
+ {
+ name: 'checksum',
+ type: 'string',
+ required: true,
+ description: `Base64-encoded MD5 digest of the file contents`,
+ },
+ {
+ name: 'content_type',
+ type: 'string',
+ required: true,
+ description: `MIME type of the file`,
+ },
+ {
+ name: 'filename',
+ type: 'string',
+ required: true,
+ description: `The filename including extension, e.g. "logo.png" or "brand-font.woff2"`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_create_grid',
+ description: `Create a new empty, general-purpose grid with the given name. The grid is created with a single empty sheet (zero rows, zero columns).`,
+ params: [
+ { name: 'name', type: 'string', required: true, description: `The name for the new grid.` },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: false,
+ description: `Optional workspace ID. Defaults to the user's only workspace when unambiguous.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_create_grid_sheet',
+ description: `Create a new sheet (grid table) within an existing grid. The sheet is created with zero rows and zero columns.`,
+ params: [
+ {
+ name: 'grid_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid to add the sheet to.`,
+ },
+ { name: 'name', type: 'string', required: true, description: `The name for the new sheet.` },
+ ],
+ },
+ {
+ name: 'airopsmcp_create_report',
+ description: `Create a new analytics report for a Brand Kit. Reports contain one or more modules that visualize metrics like citation_rate, mention_rate, share_of_voice, etc.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'modules',
+ type: 'array',
+ required: true,
+ description: `Array of module configurations`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: true,
+ description: `Report name (must be unique per brand kit)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_aeo_citation',
+ description: `Get prompts citing a specific URL. The 'id' parameter is the URL to look up.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ { name: 'id', type: 'string', required: true, description: `Resource ID` },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by country codes`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for metrics (ISO 8601). Defaults to today.`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'personas',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by persona IDs`,
+ },
+ {
+ name: 'providers',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by AI providers`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_aeo_page_content_update',
+ description: `Get a specific page content update by ID. Track content updates.`,
+ params: [
+ { name: 'id', type: 'integer', required: true, description: `Resource ID` },
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: false,
+ description: `Optional Brand Kit ID to filter content updates by`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_answer',
+ description: `Get a specific AI answer by ID with full text content.`,
+ params: [
+ { name: 'id', type: 'integer', required: true, description: `Resource ID` },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_brand_kit',
+ description: `Fetch a Brand Kit's brand identity (writing_tone, writing_persona) and associated entities (product lines, audiences, content types, regions, writing rules, cus...`,
+ params: [
+ { name: 'id', type: 'integer', required: true, description: `Resource ID` },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ {
+ name: 'version',
+ type: 'string',
+ required: false,
+ description: `Brand Kit version to read from (\`active\` or \`draft\`). Defaults to \`active\`.`,
+ },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the workspace to retrieve brand kits from. If not provided, returns brand kits from all workspaces the user belongs to.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_grid_row_execution_status',
+ description: `Check the status of grid row executions. Returns the overall status and per-column detail for each execution.`,
+ params: [
+ {
+ name: 'grid_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid containing the executions.`,
+ },
+ {
+ name: 'row_execution_ids',
+ type: 'array',
+ required: true,
+ description: `IDs of the row executions to check (max 50).`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_insights_settings',
+ description: `Get AEO insights configuration for a Brand Kit, this includes the relevant information to use any AEO and analytics tools.`,
+ params: [
+ { name: 'id', type: 'integer', required: true, description: `Resource ID` },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_page_details',
+ description: `Get AEO metrics for a specific web page. Page details include citation share, citation rate, unique cited questions count, and Google Search Console metrics (cl...`,
+ params: [
+ { name: 'id', type: 'integer', required: true, description: `Resource ID` },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for metrics period (YYYY-MM-DD format). Defaults to current date.`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for metrics period (YYYY-MM-DD format). Defaults to 1 month ago.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_page_prompts',
+ description: `Get prompts citing a specific web page. Returns AI prompts that cite the page along with citation metrics (citation_rate, mention_rate) and trends.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `ID of the brand kit` },
+ {
+ name: 'web_page_id',
+ type: 'integer',
+ required: true,
+ description: `ID of the web page to get citing prompts for`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Country codes to filter by (ISO 3166-1 alpha-2 format).`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for analysis period (ISO 8601 format, defaults to today)`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` },
+ {
+ name: 'providers',
+ type: 'array',
+ required: false,
+ description: `Filter by AI providers (e.g., chat_gpt, gemini, perplexity, google_ai_mode, google_ai_overview, claude, grok, microsoft_copilot)`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for analysis period (ISO 8601 format, defaults to 1 month ago)`,
+ },
+ { name: 'topic_ids', type: 'array', required: false, description: `Filter by topic IDs` },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_prompt_answers',
+ description: `Get AI answers for a specific prompt/question. Prompt answers are the AI answers for a specific question/prompt asked to multiple AI providers and the answers a...`,
+ params: [
+ {
+ name: 'prompt_id',
+ type: 'integer',
+ required: true,
+ description: `ID of the question/prompt to get answers for`,
+ },
+ {
+ name: 'countries',
+ type: 'string',
+ required: false,
+ description: `Country codes to filter by (ISO 3166-1 alpha-2 format).`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for analysis period (ISO 8601 format, defaults to today)`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'personas',
+ type: 'string',
+ required: false,
+ description: `Comma-separated persona IDs to filter by.Use "default" for the default persona.`,
+ },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for analysis period (ISO 8601 format, defaults to 1 month ago)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_report',
+ description: `Get a specific report by ID with its module configurations. Reports are saved analytics views for a Brand Kit.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ { name: 'id', type: 'integer', required: true, description: `Resource ID` },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_get_sentiment_theme_answers',
+ description: `Get individual AI answers with sentiment details for a specific theme. Returns answer text, sentiment (positive/neutral/negative), confidence score, and provide...`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'sentiment_theme_id',
+ type: 'integer',
+ required: true,
+ description: `The sentiment theme ID to drill into. Use query_analytics with dimensions=[theme] to discover available theme IDs first.`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter by country codes (ISO 3166-1 alpha-2)`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date (YYYY-MM-DD). Defaults to yesterday. Must be before today.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number. Default: 1` },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Results per page (1-50). Default: 10`,
+ },
+ { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` },
+ { name: 'providers', type: 'array', required: false, description: `Filter by AI providers` },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date (YYYY-MM-DD). Default: 30 days ago`,
+ },
+ { name: 'topics', type: 'array', required: false, description: `Filter by topic IDs` },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_aeo_citations',
+ description: `List citations (URLs) with metrics for a Brand Kit.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by country codes`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for metrics (ISO 8601). Defaults to today.`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'personas',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by persona IDs`,
+ },
+ {
+ name: 'providers',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by AI providers`,
+ },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_aeo_domains',
+ description: `List domains cited in AI answers for a Brand Kit. Cited domains aggregated by domain with citation metrics.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by country codes`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for metrics (ISO 8601). Defaults to today.`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'personas',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by persona IDs`,
+ },
+ {
+ name: 'providers',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by AI providers`,
+ },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_aeo_page_content_updates',
+ description: `List page content updates for a workspace. Track content updates.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: false,
+ description: `Optional Brand Kit ID to filter content updates by`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_aeo_prompts',
+ description: `List AEO prompts for a specific Brand Kit. Questions are the AI prompts that can be asked about a brand.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by country codes`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for metrics (ISO 8601). Defaults to today.`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'personas',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by persona IDs`,
+ },
+ {
+ name: 'providers',
+ type: 'array',
+ required: false,
+ description: `Filter metrics by AI providers`,
+ },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_brand_kits',
+ description: `List all Brand Kits the user has access to. Returns \`brand_management_enabled\` and \`aeo_enabled\` flags for each brand kit.`,
+ params: [
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'version',
+ type: 'string',
+ required: false,
+ description: `Brand Kit version to read from (\`active\` or \`draft\`). Defaults to \`active\`.`,
+ },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_grids',
+ description: `List grids the authenticated user has access to. Use includes=[\\"grid_tables.grid_columns\\"] to get table and column structure needed for read_grid and write_gr...`,
+ params: [
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_knowledge_bases',
+ description: `List all Knowledge Bases the authenticated user has access to. Knowledge Bases store documents for semantic search.`,
+ params: [
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_pages',
+ description: `List web pages with daily metrics (AEO citations, GSC clicks/impressions, GA4 traffic) for a brand kit.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `ID of the brand kit to retrieve web page metrics for`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date for analysis period (ISO 8601 format, defaults to today)`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'smart_filter',
+ type: 'string',
+ required: false,
+ description: `Apply a predefined filter preset.`,
+ },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date for analysis period (ISO 8601 format, defaults to 1 month ago)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_personas',
+ description: `List personas for a specific Brand Kit. Personas are the characters that can be used to ask questions about a brand.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_reports',
+ description: `List saved analytics reports for a specific Brand Kit.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ {
+ name: 'includes',
+ type: 'array',
+ required: false,
+ description: `Related resources to include in the response, as a list of relationship names.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_tags',
+ description: `List tags for a specific Brand Kit. Tags are user-defined labels applied to prompts within a Brand Kit.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_topics',
+ description: `List topics for a specific Brand Kit. Topics are the categories of questions that can be asked about a Brand Kit.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Brand Kit`,
+ },
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_list_workspaces',
+ description: `List all workspaces the authenticated user has access to. Workspaces are the top-level container for all resources in the AirOps platform.`,
+ params: [
+ {
+ name: 'fields',
+ type: 'array',
+ required: false,
+ description: `Specify which fields to return in the response, as a list of field names.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Filter results by column values. Each filter requires column_id, operator, and value.`,
+ },
+ { name: 'page', type: 'integer', required: false, description: `Page number` },
+ { name: 'per_page', type: 'integer', required: false, description: `Items per page` },
+ {
+ name: 'sort',
+ type: 'string',
+ required: false,
+ description: `Sort field. Prefix with - for descending.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_audience',
+ description: `Create or update an audience for a Brand Kit draft. Omit \`id\` to create a new audience; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ { name: 'description', type: 'string', required: false, description: `Audience description` },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Audience ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Audience name (required on create)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_competitor',
+ description: `Create or update a competitor for a Brand Kit. Omit \`id\` to create a new competitor; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'domain',
+ type: 'string',
+ required: false,
+ description: `Competitor domain (e.g. "example.com")`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Competitor ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Competitor name (required on create)`,
+ },
+ {
+ name: 'product_line_ids',
+ type: 'array',
+ required: false,
+ description: `Product line IDs to associate (must belong to this brand kit, at least one required)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_content_sample',
+ description: `Create or update a content sample for a Brand Kit. Omit \`id\` to create a new content sample; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'audience_ids',
+ type: 'array',
+ required: false,
+ description: `Audience IDs to associate (must belong to this brand kit). Pass [] to clear.`,
+ },
+ {
+ name: 'content',
+ type: 'string',
+ required: false,
+ description: `Plain text content for the sample. On create, provide either content or url (not both).`,
+ },
+ {
+ name: 'content_type_id',
+ type: 'integer',
+ required: false,
+ description: `Content type ID (required on create, must belong to this brand kit)`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Content sample ID (omit to create new)`,
+ },
+ {
+ name: 'region_ids',
+ type: 'array',
+ required: false,
+ description: `Region IDs to associate (must belong to this brand kit). Pass [] to clear.`,
+ },
+ {
+ name: 'url',
+ type: 'string',
+ required: false,
+ description: `URL of the content sample. On create, provide either url or content (not both).`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_content_type',
+ description: `Create or update a content type for a Brand Kit. Omit \`id\` to create a new content type; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ { name: 'cta_text', type: 'string', required: false, description: `Call-to-action text` },
+ { name: 'cta_url', type: 'string', required: false, description: `Call-to-action URL` },
+ { name: 'header_case', type: 'string', required: false, description: `Header case style` },
+ {
+ name: 'header_case_custom_value',
+ type: 'string',
+ required: false,
+ description: `Custom header case rules (when header_case is custom)`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Content type ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Content type name (required on create)`,
+ },
+ {
+ name: 'sample_url',
+ type: 'string',
+ required: false,
+ description: `URL of a content sample (only used on create)`,
+ },
+ {
+ name: 'template_outline',
+ type: 'string',
+ required: false,
+ description: `Template outline`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_custom_variable',
+ description: `Before creating a custom variable, you MUST analyze the user's intent and suggest the appropriate Brand Kit dimension instead.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Custom variable ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Custom variable name (required on create)`,
+ },
+ {
+ name: 'value',
+ type: 'string',
+ required: false,
+ description: `Custom variable value (required on create, editable on update)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_font',
+ description: `Create or update a font for a Brand Kit. Omit \`id\` to create a new font; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'file_url',
+ type: 'string',
+ required: false,
+ description: `Publicly accessible URL to a font file (TTF, OTF, WOFF, WOFF2, or EOT). Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null or empty to leave the existing file unchanged.`,
+ },
+ {
+ name: 'google_font_link',
+ type: 'string',
+ required: false,
+ description: `Google Fonts URL for this font (e.g. https://fonts.google.com/specimen/Inter). Pass null or empty string to clear.`,
+ },
+ { name: 'id', type: 'integer', required: false, description: `Font ID (omit to create new)` },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Font name, e.g. "Inter" or "Brand Heading Font" (required on create)`,
+ },
+ {
+ name: 'signed_id',
+ type: 'string',
+ required: false,
+ description: `Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.`,
+ },
+ {
+ name: 'usage_instructions',
+ type: 'string',
+ required: false,
+ description: `Instructions for agents on when and how to use this font. Pass null or empty string to clear.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_logo_size',
+ description: `Create or update a logo size for a Brand Kit. Omit \`id\` to create a new logo size; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'height',
+ type: 'integer',
+ required: false,
+ description: `Height in pixels. Pass null to clear.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Logo size ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Logo size name, e.g. "Web Banner" or "Social Media Square" (required on create)`,
+ },
+ {
+ name: 'usage_instructions',
+ type: 'string',
+ required: false,
+ description: `Instructions for agents on when and how to use this logo size. Pass null to clear.`,
+ },
+ {
+ name: 'width',
+ type: 'integer',
+ required: false,
+ description: `Width in pixels. Pass null to clear.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_logo_variant',
+ description: `Create or update a logo variant for a Brand Kit. Omit \`id\` to create a new logo variant; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'background_color',
+ type: 'string',
+ required: false,
+ description: `Background color as a hex value (e.g. #ffffff). Pass null to clear.`,
+ },
+ {
+ name: 'file_url',
+ type: 'string',
+ required: false,
+ description: `Publicly accessible URL to a PNG or SVG image. Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null to leave the existing file unchanged.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Logo variant ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Logo variant name, e.g. "Primary Logo" or "Dark Background Logo" (required on create)`,
+ },
+ {
+ name: 'signed_id',
+ type: 'string',
+ required: false,
+ description: `Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.`,
+ },
+ {
+ name: 'usage_instructions',
+ type: 'string',
+ required: false,
+ description: `Instructions for agents on when and how to use this logo, e.g. "Use on dark backgrounds only". Pass null to clear.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_palette',
+ description: `Create or update a color palette for a Brand Kit. Omit \`id\` to create a new palette; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Palette ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `The palette name, e.g. "Primary" (required on create)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_palette_color',
+ description: `Create or update a color within a Brand Kit palette. Omit \`id\` to create a new color; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Color ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Color name, e.g. "Brand Blue" (required on create)`,
+ },
+ {
+ name: 'palette_id',
+ type: 'integer',
+ required: false,
+ description: `The palette ID (required on create)`,
+ },
+ {
+ name: 'usage_instructions',
+ type: 'string',
+ required: false,
+ description: `Instructions for agents on when and how to use this color`,
+ },
+ {
+ name: 'value',
+ type: 'string',
+ required: false,
+ description: `Hex color value, e.g. "#0055ff" (required on create)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_product_line',
+ description: `Create or update a product line for a Brand Kit. Omit \`id\` to create a new product line; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ { name: 'details', type: 'string', required: false, description: `Product line details` },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Product line ID (omit to create new)`,
+ },
+ {
+ name: 'ideal_customer_profile',
+ type: 'string',
+ required: false,
+ description: `Ideal customer profile`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Product line name (required on create)`,
+ },
+ { name: 'positioning', type: 'string', required: false, description: `Product positioning` },
+ { name: 'url', type: 'string', required: false, description: `Product line URL` },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_region',
+ description: `Create or update a region for a Brand Kit. Omit \`id\` to create a new region; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ { name: 'description', type: 'string', required: false, description: `Region description` },
+ {
+ name: 'icon_name',
+ type: 'string',
+ required: false,
+ description: `Flag icon name (e.g. flag-us, flag-gb). Pass empty string or null to clear.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Region ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Region name (required on create)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_type_size',
+ description: `Create or update a type size for a Brand Kit. Omit \`id\` to create a new type size; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'font_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the font this type size belongs to`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Type size ID (omit to create new)`,
+ },
+ {
+ name: 'line_height',
+ type: 'number',
+ required: false,
+ description: `Line height as a decimal multiplier, e.g. 1.5.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Type size name, e.g. "H1 Display" or "Body Regular" (required on create)`,
+ },
+ { name: 'size', type: 'integer', required: false, description: `Font size in pixels.` },
+ {
+ name: 'usage_instructions',
+ type: 'string',
+ required: false,
+ description: `Instructions for agents on when and how to use this type size. Pass null or empty string to clear.`,
+ },
+ {
+ name: 'weight',
+ type: 'integer',
+ required: false,
+ description: `Font weight as an integer (100–900), e.g. 400 or 700.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_usage_rule',
+ description: `Create or update a usage rule for a Brand Kit. Omit \`id\` to create a new usage rule; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'applies_to',
+ type: 'string',
+ required: false,
+ description: `What this rule applies to. Required on create; ignored on update.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Usage rule ID (omit to create new)`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `The usage rule text, e.g. "Use only on white backgrounds" (required on create)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_visual_example',
+ description: `Create or update a visual example for a Brand Kit's Data Visualization section. Omit \`id\` to create a new visual example; provide \`id\` to update an existing one...`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'file_url',
+ type: 'string',
+ required: false,
+ description: `Publicly accessible URL to a PNG, JPG, SVG, GIF, or WebP image. Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null to leave the existing file unchanged.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Visual example ID (omit to create new)`,
+ },
+ {
+ name: 'sample_url',
+ type: 'string',
+ required: false,
+ description: `Optional URL to a live sample. Pass null to clear.`,
+ },
+ {
+ name: 'signed_id',
+ type: 'string',
+ required: false,
+ description: `Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.`,
+ },
+ {
+ name: 'title',
+ type: 'string',
+ required: false,
+ description: `Title of the visual example, e.g. "Dashboard Overview" (required on create)`,
+ },
+ {
+ name: 'usage_instructions',
+ type: 'string',
+ required: false,
+ description: `Instructions for agents on when and how to use this visual example. Pass null to clear.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_manage_brand_kit_writing_rule',
+ description: `Create or update a writing rule for a Brand Kit. Omit \`id\` to create a new rule; provide \`id\` to update an existing one.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'audience_id',
+ type: 'integer',
+ required: false,
+ description: `Audience ID to scope this rule to (mutually exclusive with content_type_id and region_id). Only on create.`,
+ },
+ {
+ name: 'content_type_id',
+ type: 'integer',
+ required: false,
+ description: `Content type ID to scope this rule to (mutually exclusive with audience_id and region_id). Only on create.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Writing rule ID (omit to create new)`,
+ },
+ {
+ name: 'region_id',
+ type: 'integer',
+ required: false,
+ description: `Region ID to scope this rule to (mutually exclusive with content_type_id and audience_id). Only on create.`,
+ },
+ {
+ name: 'text',
+ type: 'string',
+ required: false,
+ description: `Writing rule text (required on create)`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_publish_brand_kit',
+ description: `Publish a Brand Kit's current draft so changes become active. This promotes the current draft to active and creates a fresh draft from it.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The Brand Kit ID to publish`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_query_analytics',
+ description: `Query analytics data for a Brand Kit with flexible metrics, dimensions, and filters.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The Brand Kit ID to query analytics for`,
+ },
+ {
+ name: 'metrics',
+ type: 'array',
+ required: true,
+ description: `Metrics to calculate and display (e.g., citation_rate, mention_rate, share_of_voice).`,
+ },
+ {
+ name: 'brand_mentioned',
+ type: 'string',
+ required: false,
+ description: `Filter by prompt type. Options: category (generic prompts - recommended for accurate visibility metrics), brand (prompts mentioning the brand). Defaults to category if not specified`,
+ },
+ {
+ name: 'countries',
+ type: 'array',
+ required: false,
+ description: `Filter by country codes (ISO 3166-1 alpha-2)`,
+ },
+ {
+ name: 'dimensions',
+ type: 'array',
+ required: false,
+ description: `Dimensions to group by (max 3).`,
+ },
+ {
+ name: 'end_date',
+ type: 'string',
+ required: false,
+ description: `End date (YYYY-MM-DD). Defaults to yesterday. Must be before today because today's data may still be processing and is incomplete — yesterday is used to ensure robust, complete data. Leave blank unless a specific date is requested.`,
+ },
+ {
+ name: 'grain',
+ type: 'string',
+ required: false,
+ description: `Time granularity for aggregation. Default: total`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum rows to return (1-1000). Default: 100`,
+ },
+ {
+ name: 'order_by',
+ type: 'string',
+ required: false,
+ description: `Custom sort order (e.g., "citation_count DESC")`,
+ },
+ { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` },
+ { name: 'providers', type: 'array', required: false, description: `Filter by AI providers` },
+ {
+ name: 'start_date',
+ type: 'string',
+ required: false,
+ description: `Start date (YYYY-MM-DD). Default: 7 days ago`,
+ },
+ {
+ name: 'tags',
+ type: 'array',
+ required: false,
+ description: `Filter by tag IDs. Returns data only for prompts tagged with any of the given tags.`,
+ },
+ {
+ name: 'themes',
+ type: 'array',
+ required: false,
+ description: `Filter sentiment data by theme IDs. Only applies to sentiment_score metric.`,
+ },
+ { name: 'topics', type: 'array', required: false, description: `Filter by topic IDs` },
+ ],
+ },
+ {
+ name: 'airopsmcp_read_grid',
+ description: `Read rows from a grid table. Returns rows as objects with column titles as keys.`,
+ params: [
+ {
+ name: 'grid_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid to read from.`,
+ },
+ {
+ name: 'grid_table_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid table (sheet) to read.`,
+ },
+ {
+ name: 'column_ids',
+ type: 'array',
+ required: false,
+ description: `Optional list of column IDs to include. If omitted, all columns are returned.`,
+ },
+ {
+ name: 'filters',
+ type: 'array',
+ required: false,
+ description: `Optional filters to apply.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Number of rows to return (1-100, default 50).`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Row offset for pagination (default: 0). Use with limit to page through results.`,
+ },
+ {
+ name: 'truncate',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of characters per cell value. 0 means no truncation (default).`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_run_grid_rows',
+ description: `Trigger execution of one or more grid rows. This runs all workflow (app execution) columns for each specified row in dependency order.`,
+ params: [
+ {
+ name: 'grid_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid containing the rows to execute.`,
+ },
+ {
+ name: 'grid_row_ids',
+ type: 'array',
+ required: true,
+ description: `IDs of the grid rows to execute (max 50).`,
+ },
+ {
+ name: 'grid_table_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid table (sheet) containing the rows.`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_search_knowledge_base',
+ description: `Search a Knowledge Base for relevant content using semantic similarity. Use list_knowledge_bases() first to find available Knowledge Bases and their IDs.`,
+ params: [
+ {
+ name: 'knowledge_base_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the Knowledge Base to search.`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: true,
+ description: `The search query. Use natural language to describe what you are looking for.`,
+ },
+ {
+ name: 'top_k',
+ type: 'integer',
+ required: false,
+ description: `Number of results to return (1-20, default 5).`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_suggest_brand_kit_edits',
+ description: `Suggest edits to a Brand Kit's fields without applying them. Returns a comparison of current vs suggested values for user review.`,
+ params: [
+ { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` },
+ {
+ name: 'suggestions',
+ type: 'object',
+ required: true,
+ description: `Field name to suggested value pairs. Valid fields depend on entity_type. Use arrays for multi_select fields (e.g. product_line_ids).`,
+ },
+ {
+ name: 'entity_type',
+ type: 'string',
+ required: false,
+ description: `Which entity to suggest edits for. Defaults to brand_kit.`,
+ },
+ {
+ name: 'id',
+ type: 'integer',
+ required: false,
+ description: `Record ID of the existing record to update. Omit to suggest creating a new record.`,
+ },
+ {
+ name: 'title',
+ type: 'string',
+ required: false,
+ description: `Optional heading to display in the review UI`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_track_aeo_page_content_update',
+ description: `Track a page content update (publish/refresh) to correlate future analytics with content changes.`,
+ params: [
+ {
+ name: 'type',
+ type: 'string',
+ required: true,
+ description: `The type of content update to track`,
+ },
+ {
+ name: 'url',
+ type: 'string',
+ required: true,
+ description: `The page URL to track (max 512 characters). The URL must belong to a brand_url or domain configured in one of the workspace's Brand Kits (use get_insights_settings to see domains). For example, if the Brand Kit domain is "example.com", URLs like "https://example.com/blog/post" will match.`,
+ },
+ {
+ name: 'workspace_id',
+ type: 'integer',
+ required: true,
+ description: `The workspace ID to create the content update in`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_update_brand_kit',
+ description: `Update a Brand Kit's base fields. Only provided fields are changed.`,
+ params: [
+ {
+ name: 'brand_kit_id',
+ type: 'integer',
+ required: true,
+ description: `The Brand Kit ID to update`,
+ },
+ {
+ name: 'brand_about',
+ type: 'string',
+ required: false,
+ description: `Description/overview of the brand`,
+ },
+ { name: 'brand_name', type: 'string', required: false, description: `Name of the brand` },
+ {
+ name: 'brand_url',
+ type: 'string',
+ required: false,
+ description: `URL of the brand website`,
+ },
+ {
+ name: 'writing_persona',
+ type: 'string',
+ required: false,
+ description: `The persona/voice used in brand writing`,
+ },
+ {
+ name: 'writing_tone',
+ type: 'string',
+ required: false,
+ description: `The tone of voice for brand content`,
+ },
+ ],
+ },
+ {
+ name: 'airopsmcp_write_grid',
+ description: `Create or update rows in a grid table. When mode is 'create', rows are added as new rows with column titles as keys.`,
+ params: [
+ {
+ name: 'grid_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid to write to.`,
+ },
+ {
+ name: 'grid_table_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the grid table (sheet) to write to.`,
+ },
+ {
+ name: 'mode',
+ type: 'string',
+ required: true,
+ description: `'create' to add new rows, 'update' to modify existing rows (requires __id in each row).`,
+ },
+ {
+ name: 'rows',
+ type: 'array',
+ required: true,
+ description: `Array of row objects. Keys are column titles, values are cell values. For update mode, include __id with the row ID.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/biorendermcp.ts b/src/data/agent-connectors/biorendermcp.ts
new file mode 100644
index 000000000..131550791
--- /dev/null
+++ b/src/data/agent-connectors/biorendermcp.ts
@@ -0,0 +1,23 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'biorendermcp_search-icons',
+ description: `Search BioRender's scientific icon library by keyword. Returns icon names, asset types, and placeability status for use in figures.`,
+ params: [
+ { name: 'query', type: 'string', required: true, description: `No description.` },
+ { name: 'page', type: 'number', required: false, description: `No description.` },
+ { name: 'perPage', type: 'number', required: false, description: `No description.` },
+ ],
+ },
+ {
+ name: 'biorendermcp_search-templates',
+ description: `Search BioRender's scientific figure template library. Returns templates with titles, descriptions, and preview links.`,
+ params: [
+ { name: 'analytics', type: 'object', required: true, description: `No description.` },
+ { name: 'query', type: 'string', required: true, description: `No description.` },
+ { name: 'page', type: 'number', required: false, description: `No description.` },
+ { name: 'perPage', type: 'number', required: false, description: `No description.` },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/candidmcp.ts b/src/data/agent-connectors/candidmcp.ts
new file mode 100644
index 000000000..c08e89d2d
--- /dev/null
+++ b/src/data/agent-connectors/candidmcp.ts
@@ -0,0 +1,75 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'candidmcp_current_date',
+ description: `Get today's date for use in time-sensitive queries and data requests.`,
+ params: [],
+ },
+ {
+ name: 'candidmcp_identify_locations',
+ description: `Detect and resolve geographic names in text to Geonames IDs for use in organization search filters.`,
+ params: [{ name: 'text', type: 'string', required: true, description: `No description.` }],
+ },
+ {
+ name: 'candidmcp_identify_mentioned_organizations',
+ description: `Resolve nonprofit names mentioned in text to Candid profile URLs.`,
+ params: [
+ { name: 'organizations', type: 'array', required: true, description: `No description.` },
+ ],
+ },
+ {
+ name: 'candidmcp_knowledge_resources',
+ description: `Search Candid's knowledge base for articles, blog posts, research reports, and training content about the social and philanthropic sector.`,
+ params: [
+ { name: 'query', type: 'string', required: true, description: `No description.` },
+ { name: 'sources', type: 'array', required: true, description: `No description.` },
+ { name: 'news_days_ago', type: 'integer', required: false, description: `No description.` },
+ ],
+ },
+ {
+ name: 'candidmcp_search_organizations',
+ description: `Search Candid's database for nonprofits and grantmaking organizations by name, mission, location, or type of work.`,
+ params: [
+ { name: 'query', type: 'string', required: true, description: `No description.` },
+ {
+ name: 'geonameids_of_geographies_served',
+ type: 'string',
+ required: false,
+ description: `No description.`,
+ },
+ {
+ name: 'geonameids_of_organization_location',
+ type: 'string',
+ required: false,
+ description: `No description.`,
+ },
+ {
+ name: 'leader_demographics',
+ type: 'string',
+ required: false,
+ description: `No description.`,
+ },
+ { name: 'located_admin1', type: 'string', required: false, description: `No description.` },
+ {
+ name: 'located_postal_code',
+ type: 'string',
+ required: false,
+ description: `No description.`,
+ },
+ { name: 'org_seal_status', type: 'string', required: false, description: `No description.` },
+ {
+ name: 'populations_served_codes',
+ type: 'string',
+ required: false,
+ description: `No description.`,
+ },
+ { name: 'subject_codes', type: 'string', required: false, description: `No description.` },
+ ],
+ },
+ {
+ name: 'candidmcp_taxonomy_terms',
+ description: `Classify text using Candid's Philanthropy Classification System (PCS) taxonomy to get subject and population codes.`,
+ params: [{ name: 'text', type: 'string', required: true, description: `No description.` }],
+ },
+]
diff --git a/src/data/agent-connectors/cartamcp.ts b/src/data/agent-connectors/cartamcp.ts
new file mode 100644
index 000000000..579c760a8
--- /dev/null
+++ b/src/data/agent-connectors/cartamcp.ts
@@ -0,0 +1,185 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'cartamcp_cap_table_chart',
+ description: `Show a visual cap table summary with ownership breakdown by share class.`,
+ params: [
+ {
+ name: 'corporation_id',
+ type: 'string',
+ required: true,
+ description: `Carta corporation ID of the company.`,
+ },
+ {
+ name: 'as_of_date',
+ type: 'string',
+ required: false,
+ description: `Date to use for the cap table snapshot in YYYY-MM-DD format.`,
+ },
+ {
+ name: 'company_name',
+ type: 'string',
+ required: false,
+ description: `Name of the company to look up.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_discover',
+ description: `List available Carta commands or views across all domains.`,
+ params: [
+ {
+ name: 'domain',
+ type: 'string',
+ required: false,
+ description: `Carta domain to filter commands by (e.g. equity, fund).`,
+ },
+ {
+ name: 'scope',
+ type: 'string',
+ required: false,
+ description: `Scope to filter commands by: read, write, or view.`,
+ },
+ {
+ name: 'search',
+ type: 'string',
+ required: false,
+ description: `Search term to filter results by name or description.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_fetch',
+ description: `Execute a named read command against Carta.`,
+ params: [
+ {
+ name: 'command',
+ type: 'string',
+ required: true,
+ description: `Fully qualified Carta command name in domain:verb:noun format. Use Discover to see available commands.`,
+ },
+ {
+ name: 'params',
+ type: 'string',
+ required: false,
+ description: `Parameters dict (e.g. {"corporation_id": 123}).
+ Pass "raw": true to skip formatting and get the full API
+ response. Not honored on every command — check the
+ command's \`help\` for whether \`raw\` is supported.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_get_current_user',
+ description: `Get the currently authenticated Carta user profile.`,
+ params: [],
+ },
+ {
+ name: 'cartamcp_list_accounts',
+ description: `List all companies and organizations the current user has access to.`,
+ params: [
+ {
+ name: 'search',
+ type: 'string',
+ required: false,
+ description: `Search term to filter results by name or description.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_list_contexts',
+ description: `List the firms you have access to in Carta Fund Admin.`,
+ params: [
+ {
+ name: 'firm_id',
+ type: 'string',
+ required: false,
+ description: `Carta firm ID to switch context to.`,
+ },
+ {
+ name: 'firm_name',
+ type: 'string',
+ required: false,
+ description: `Name of the firm to filter by.`,
+ },
+ {
+ name: 'firm_uuid',
+ type: 'string',
+ required: false,
+ description: `UUID of the firm to filter by.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_mutate',
+ description: `Execute a write command (POST, PATCH, PUT, DELETE) against Carta.`,
+ params: [
+ {
+ name: 'command',
+ type: 'string',
+ required: true,
+ description: `Fully qualified Carta command name in domain:verb:noun format. Use Discover to see available commands.`,
+ },
+ {
+ name: 'params',
+ type: 'string',
+ required: false,
+ description: `Parameters dict (e.g. {"ownerId": 123, "ownerKind": "FIRM", ...}).`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_set_context',
+ description: `Switch the active firm so subsequent queries use that firm data.`,
+ params: [
+ {
+ name: 'firm_id',
+ type: 'string',
+ required: true,
+ description: `Carta firm ID to switch context to.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_view_remote',
+ description: `Render an interactive Carta view backed by a Module Federation remote.`,
+ params: [
+ {
+ name: 'name',
+ type: 'string',
+ required: true,
+ description: `Name of the view to render. Use Discover with scope=view to see available views.`,
+ },
+ {
+ name: 'params',
+ type: 'string',
+ required: false,
+ description: `Parameters dict (e.g. {"corporation_id": 123}).`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_view_static',
+ description: `Render an interactive Carta view backed by server-bundled HTML.`,
+ params: [
+ {
+ name: 'name',
+ type: 'string',
+ required: true,
+ description: `Name of the view to render. Use Discover with scope=view to see available views.`,
+ },
+ {
+ name: 'params',
+ type: 'string',
+ required: false,
+ description: `Parameters dict passed to the view as \`\`window.mcpViewArgs\`\`.`,
+ },
+ ],
+ },
+ {
+ name: 'cartamcp_welcome',
+ description: `Get a welcome message and orientation guide from Carta MCP.`,
+ params: [],
+ },
+]
diff --git a/src/data/agent-connectors/catalog.ts b/src/data/agent-connectors/catalog.ts
index 6871d3815..ebae58019 100644
--- a/src/data/agent-connectors/catalog.ts
+++ b/src/data/agent-connectors/catalog.ts
@@ -7,6 +7,66 @@ export interface ProviderMeta {
}
export const catalog: Record = {
+ 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',
diff --git a/src/data/agent-connectors/cloudfaremcp.ts b/src/data/agent-connectors/cloudfaremcp.ts
new file mode 100644
index 000000000..19404a9b1
--- /dev/null
+++ b/src/data/agent-connectors/cloudfaremcp.ts
@@ -0,0 +1,34 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'cloudfaremcp_execute',
+ description: `Execute JavaScript code against the Cloudflare API using the \`cloudflare.request()\` helper. Use the search tool first to discover the right endpoint path and schema.`,
+ params: [
+ {
+ name: 'code',
+ type: 'string',
+ required: true,
+ description: `JavaScript async arrow function that calls \`cloudflare.request()\` to interact with the Cloudflare API.`,
+ },
+ {
+ name: 'account_id',
+ type: 'string',
+ required: false,
+ description: `Your Cloudflare account ID. Auto-selected if you only have one account.`,
+ },
+ ],
+ },
+ {
+ name: 'cloudfaremcp_search',
+ description: `Search the Cloudflare OpenAPI spec to discover API endpoints, request parameters, and response schemas. Run this before execute to find the right path and method for your operation.`,
+ params: [
+ {
+ name: 'code',
+ type: 'string',
+ required: true,
+ description: `JavaScript async arrow function that queries \`spec.paths\` to find matching Cloudflare API endpoints.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/fiscalaimcp.ts b/src/data/agent-connectors/fiscalaimcp.ts
new file mode 100644
index 000000000..24b1680e5
--- /dev/null
+++ b/src/data/agent-connectors/fiscalaimcp.ts
@@ -0,0 +1,21 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'fiscalaimcp_api_docs',
+ description: `Retrieve Fiscal.ai API documentation with TypeScript type definitions for all available functions.`,
+ params: [],
+ },
+ {
+ name: 'fiscalaimcp_execute_code',
+ description: `Execute JavaScript code in a secure sandbox to call Fiscal.ai API functions via the codemode namespace and return results via console.log.`,
+ params: [
+ {
+ name: 'code',
+ type: 'string',
+ required: true,
+ description: `Async arrow function to execute. Must be in async () => { ... } format using codemode.() calls and console.log() for output.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/gainsight.ts b/src/data/agent-connectors/gainsight.ts
new file mode 100644
index 000000000..43e6056d0
--- /dev/null
+++ b/src/data/agent-connectors/gainsight.ts
@@ -0,0 +1,772 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'gainsight_company_query',
+ description: `Search and filter Gainsight company records by any field. Returns up to 5000 records per call.`,
+ params: [
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 100.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'orderBy',
+ type: 'object',
+ required: false,
+ description: `Sort specification as an object with field names as keys and 'asc' or 'desc' as values. Custom fields use '__gc' suffix; lookup fields use '__gr'.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Omit to get standard fields (Name, Gsid, Status, Stage, ARR, etc.).`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses name (field name), alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_cta_create',
+ description: `Create a Call to Action in Gainsight Cockpit linked to a company. Type, reason, status, and priority must match values configured in your Gainsight instance.`,
+ params: [
+ {
+ name: 'company_gsid',
+ type: 'string',
+ required: true,
+ description: `GSID of the company to link this record to. Retrieve it from gainsight_company_query.`,
+ },
+ {
+ name: 'cta_type',
+ type: 'string',
+ required: true,
+ description: `CTA type as configured in your Gainsight instance, e.g. Risk, Expansion, Renewal. Check your Gainsight admin settings for valid values.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: true,
+ description: `Display name for this CTA, shown in the Gainsight Cockpit.`,
+ },
+ {
+ name: 'owner_email',
+ type: 'string',
+ required: true,
+ description: `Email address of the Gainsight user to assign as owner. Resolved to an internal user ID automatically.`,
+ },
+ {
+ name: 'reference_id',
+ type: 'string',
+ required: true,
+ description: `Your external identifier for this record, returned in error responses so you can match failures back to your source data.`,
+ },
+ {
+ name: 'comments',
+ type: 'string',
+ required: false,
+ description: `Free-text notes or context to attach to this CTA.`,
+ },
+ {
+ name: 'due_date',
+ type: 'string',
+ required: false,
+ description: `Due date in YYYY-MM-DD format.`,
+ },
+ {
+ name: 'playbook',
+ type: 'string',
+ required: false,
+ description: `Name of the playbook to apply. Must match a playbook configured in your Gainsight instance.`,
+ },
+ {
+ name: 'priority',
+ type: 'string',
+ required: false,
+ description: `Priority level for this record. Accepted values: High, Medium, Low.`,
+ },
+ {
+ name: 'reason',
+ type: 'string',
+ required: false,
+ description: `Reason name as configured in your Gainsight instance. Check your Gainsight admin settings for valid values.`,
+ },
+ {
+ name: 'status',
+ type: 'string',
+ required: false,
+ description: `Status value as configured in your Gainsight instance. Check your Gainsight admin settings for valid values.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_cta_list',
+ description: `Search and filter CTAs in Gainsight Cockpit with field selection and pagination. Returns up to 1000 CTAs per request.`,
+ params: [
+ {
+ name: 'linkedObject',
+ type: 'boolean',
+ required: false,
+ description: `Set to true to include linked object data in the associatedRecords field of each CTA response.`,
+ },
+ {
+ name: 'pageNumber',
+ type: 'integer',
+ required: false,
+ description: `Page number to fetch, starting from 1. Default: 1.`,
+ },
+ {
+ name: 'pageSize',
+ type: 'integer',
+ required: false,
+ description: `Number of records per page (1–1000). Default: 50.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Custom fields must be appended with '__gc'; lookup fields with '__gr'. Omit to get standard CTA fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses either fieldName (regular fields) or associatedRecord: true (linked object filter).`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_cta_update',
+ description: `Update one or more fields on an existing CTA. Only the fields you include are changed — all other fields remain untouched.`,
+ params: [
+ {
+ name: 'gsid',
+ type: 'string',
+ required: true,
+ description: `Gainsight internal ID (GSID) of the CTA to update. Retrieve it from gainsight_cta_list.`,
+ },
+ {
+ name: 'reference_id',
+ type: 'string',
+ required: true,
+ description: `Your external identifier for this record, returned in error responses so you can match failures back to your source data.`,
+ },
+ {
+ name: 'comments',
+ type: 'string',
+ required: false,
+ description: `Free-text notes or context to attach to this CTA.`,
+ },
+ {
+ name: 'due_date',
+ type: 'string',
+ required: false,
+ description: `Due date in YYYY-MM-DD format.`,
+ },
+ {
+ name: 'is_closed',
+ type: 'boolean',
+ required: false,
+ description: `Set to true to mark this CTA as closed.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `New display name for this CTA.`,
+ },
+ {
+ name: 'owner_email',
+ type: 'string',
+ required: false,
+ description: `Email address of the Gainsight user to assign as owner. Resolved to an internal user ID automatically.`,
+ },
+ {
+ name: 'priority',
+ type: 'string',
+ required: false,
+ description: `Priority level for this record. Accepted values: High, Medium, Low.`,
+ },
+ {
+ name: 'reason',
+ type: 'string',
+ required: false,
+ description: `Reason name as configured in your Gainsight instance. Check your Gainsight admin settings for valid values.`,
+ },
+ {
+ name: 'status',
+ type: 'string',
+ required: false,
+ description: `Status value as configured in your Gainsight instance. Check your Gainsight admin settings for valid values.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_object_describe',
+ description: `Return the full field schema for any Gainsight MDA object, including field names, types, and picklist values. Use gainsight_object_list to find valid object names.`,
+ params: [
+ {
+ name: 'object_name',
+ type: 'string',
+ required: true,
+ description: `Gainsight MDA object name, e.g. Company, activity_timeline, call_to_action, or a custom object like MyObj__gc.`,
+ },
+ {
+ name: 'children_level',
+ type: 'integer',
+ required: false,
+ description: `Depth of child relationships to include when include_children is true. Default: 0.`,
+ },
+ {
+ name: 'include_children',
+ type: 'boolean',
+ required: false,
+ description: `Include child object relationships in the response. Default: false.`,
+ },
+ {
+ name: 'include_hidden_columns',
+ type: 'boolean',
+ required: false,
+ description: `Include hidden fields in the schema response. Default: false.`,
+ },
+ {
+ name: 'include_picklist_details',
+ type: 'boolean',
+ required: false,
+ description: `Include picklist option values in the response. Default: true.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_object_list',
+ description: `List all standard and custom objects available in Gainsight MDA. Use this to discover object names before calling gainsight_object_query or gainsight_object_describe.`,
+ params: [
+ {
+ name: 'em',
+ type: 'boolean',
+ required: false,
+ description: `Set to true to exclude related child objects from the results.`,
+ },
+ {
+ name: 'po',
+ type: 'string',
+ required: false,
+ description: `Filter to objects related to this parent object, e.g. company. Omit to return all objects.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_object_query',
+ description: `Query any standard or custom Gainsight MDA object by name. Custom objects use the __gc suffix (e.g. MyObject__gc). Use gainsight_object_list to discover available object names.`,
+ params: [
+ {
+ name: 'object_name',
+ type: 'string',
+ required: true,
+ description: `Gainsight MDA object name, e.g. Company, activity_timeline, call_to_action, or a custom object like MyObj__gc.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 100.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'orderBy',
+ type: 'object',
+ required: false,
+ description: `Sort specification as an object with field names as keys and 'asc' or 'desc' as values.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Custom fields end with '__gc'; lookup traversals use '__gr'. Omit for all fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses name, alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_query_company_person',
+ description: `Query contact-to-company associations in Gainsight. Each record links a person to a company with their role, title, and primary company designation.`,
+ params: [
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 100.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'orderBy',
+ type: 'object',
+ required: false,
+ description: `Sort specification as an object with field names as keys and 'asc' or 'desc' as values.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Key fields: Gsid, Person_ID, Company_ID, Active, IsPrimaryCompany, Role, Title, SfdcContactId, SfdcAccountId. Omit for standard fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses name, alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_query_relationships',
+ description: `Search and filter Gainsight relationship records by any field. Returns up to 5000 records per call.`,
+ params: [
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 100.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'orderBy',
+ type: 'object',
+ required: false,
+ description: `Sort specification as an object with field names as keys and 'asc' or 'desc' as values.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return, e.g. Name, Arr, Mrr. Omit for standard relationship fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses name, alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_query_scorecard',
+ description: `Query a Gainsight scorecard object for health score data. Pass the object name from your Gainsight configuration, e.g. cs_scorecard_master.`,
+ params: [
+ {
+ name: 'scorecard_object',
+ type: 'string',
+ required: true,
+ description: `Name of the scorecard object to query, e.g. cs_scorecard_master. Use gainsight_object_list to discover the exact name in your instance.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 100.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Use gainsight_object_describe with the scorecard object name to discover available fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_resolve_user',
+ description: `Look up Gainsight users by email or filter. Use this to find a user's GSID before assigning them as a CTA or success plan owner.`,
+ params: [
+ {
+ name: 'email_search',
+ type: 'string',
+ required: false,
+ description: `Substring to match against user email addresses, case-insensitive. Useful for finding a user by partial email.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 50.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'orderBy',
+ type: 'object',
+ required: false,
+ description: `Sort specification as an object with field names as keys and 'asc' or 'desc' as values.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Key fields: Gsid, Name, Email, IsActive, Username, ExternalId. Omit for standard fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses name, alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_success_plan_list',
+ description: `Search and filter Success Plans in Gainsight with field selection and pagination. Returns up to 1000 records per request.`,
+ params: [
+ {
+ name: 'pageNumber',
+ type: 'integer',
+ required: false,
+ description: `Page number to fetch, starting from 1. Default: 1.`,
+ },
+ {
+ name: 'pageSize',
+ type: 'integer',
+ required: false,
+ description: `Number of records per page (1–1000). Default: 50.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Custom fields use '__gc' suffix; lookup fields use '__gr'. Omit to get standard Success Plan fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses fieldName, alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_success_plan_update',
+ description: `Update one or more fields on an existing success plan. Only the fields you include are changed — all other fields remain untouched.`,
+ params: [
+ {
+ name: 'plan_gsid',
+ type: 'string',
+ required: true,
+ description: `GSID of the success plan to update. Retrieve it from gainsight_success_plan_list.`,
+ },
+ {
+ name: 'reference_id',
+ type: 'string',
+ required: true,
+ description: `Your external identifier for this record, returned in error responses so you can match failures back to your source data.`,
+ },
+ {
+ name: 'due_date',
+ type: 'string',
+ required: false,
+ description: `Due date in YYYY-MM-DD format.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `New display name for this success plan.`,
+ },
+ {
+ name: 'owner_email',
+ type: 'string',
+ required: false,
+ description: `Email address of the Gainsight user to assign as owner. Resolved to an internal user ID automatically.`,
+ },
+ {
+ name: 'status',
+ type: 'string',
+ required: false,
+ description: `Status value as configured in your Gainsight instance. Check your Gainsight admin settings for valid values.`,
+ },
+ {
+ name: 'templates',
+ type: 'array',
+ required: false,
+ description: `Names of templates to append to this success plan. Must match template names configured in your Gainsight instance.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_task_create',
+ description: `Create a task under an existing CTA in Gainsight Cockpit. The parent CTA must already exist — use gainsight_cta_list to get its GSID.`,
+ params: [
+ {
+ name: 'cta_gsid',
+ type: 'string',
+ required: true,
+ description: `GSID of the parent CTA this record belongs to. Retrieve it from gainsight_cta_list.`,
+ },
+ {
+ name: 'due_date',
+ type: 'string',
+ required: true,
+ description: `Due date in YYYY-MM-DD format.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: true,
+ description: `Display name for this task, shown in Gainsight Cockpit.`,
+ },
+ {
+ name: 'owner_email',
+ type: 'string',
+ required: true,
+ description: `Email address of the Gainsight user to assign as owner. Resolved to an internal user ID automatically.`,
+ },
+ {
+ name: 'reference_id',
+ type: 'string',
+ required: true,
+ description: `Your external identifier for this record, returned in error responses so you can match failures back to your source data.`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Optional free-text description providing additional context for this task.`,
+ },
+ {
+ name: 'priority',
+ type: 'string',
+ required: false,
+ description: `Priority level for this record. Accepted values: High, Medium, Low.`,
+ },
+ {
+ name: 'status',
+ type: 'string',
+ required: false,
+ description: `Status value as configured in your Gainsight instance. Check your Gainsight admin settings for valid values.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_task_list',
+ description: `List all tasks for a given CTA. Returns up to 1000 tasks per page. Use gainsight_cta_list to get the CTA's GSID.`,
+ params: [
+ {
+ name: 'cta_gsid',
+ type: 'string',
+ required: true,
+ description: `GSID of the parent CTA this record belongs to. Retrieve it from gainsight_cta_list.`,
+ },
+ {
+ name: 'includes',
+ type: 'string',
+ required: false,
+ description: `Comma-separated custom field API names to include beyond the default fields, e.g. DT_Date__gc,DT_DateTime__gc.`,
+ },
+ {
+ name: 'pn',
+ type: 'integer',
+ required: false,
+ description: `Page number to fetch, starting from 1. Default: 1.`,
+ },
+ {
+ name: 'ps',
+ type: 'integer',
+ required: false,
+ description: `Number of tasks per page (max 1000). Default: 1000.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_timeline_create',
+ description: `Log a new Timeline activity linked to a company in Gainsight. The external_id acts as an idempotency key — re-submitting the same value will not create a duplicate.`,
+ params: [
+ {
+ name: 'activity_date',
+ type: 'string',
+ required: true,
+ description: `Date and time of the activity in ISO 8601 format, e.g. 2024-01-15T10:30:00.000+0000.`,
+ },
+ {
+ name: 'author',
+ type: 'string',
+ required: true,
+ description: `Email address of the Gainsight user authoring this activity. Must exist as an active user in your Gainsight instance.`,
+ },
+ {
+ name: 'company_gsid',
+ type: 'string',
+ required: true,
+ description: `GSID of the company to link this record to. Retrieve it from gainsight_company_query.`,
+ },
+ {
+ name: 'external_id',
+ type: 'string',
+ required: true,
+ description: `Unique ID from your system used as an idempotency key. Re-submitting the same ID will not create a duplicate activity.`,
+ },
+ {
+ name: 'notes',
+ type: 'string',
+ required: true,
+ description: `Body text of the activity. Accepts plain text or HTML.`,
+ },
+ {
+ name: 'subject',
+ type: 'string',
+ required: true,
+ description: `Title of the activity shown in the Timeline feed. Maximum 255 characters.`,
+ },
+ {
+ name: 'type_name',
+ type: 'string',
+ required: true,
+ description: `Activity type as configured in your Gainsight instance, e.g. Meeting, Email, Phone Call.`,
+ },
+ {
+ name: 'context_name',
+ type: 'string',
+ required: false,
+ description: `The entity type this activity is attached to. Accepted values: Company, Relationship, CTA, SuccessPlan. Defaults to Company.`,
+ },
+ {
+ name: 'duration_mins',
+ type: 'integer',
+ required: false,
+ description: `Duration of the activity in minutes.`,
+ },
+ {
+ name: 'internal_attendees',
+ type: 'array',
+ required: false,
+ description: `List of internal Gainsight user emails attending this activity.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_timeline_query',
+ description: `Search and filter Gainsight Timeline activity records by any field. Returns up to 5000 records per call, sorted by creation date descending by default.`,
+ params: [
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of records to return per call (1–5000). Default: 50.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of records to skip, used for pagination. Default: 0.`,
+ },
+ {
+ name: 'orderBy',
+ type: 'object',
+ required: false,
+ description: `Sort specification as an object with field names as keys and 'asc' or 'desc' as values.`,
+ },
+ {
+ name: 'select',
+ type: 'array',
+ required: false,
+ description: `Field names to return. Custom fields use the format 'Prefix__FieldName__c'. Omit to get standard timeline fields.`,
+ },
+ {
+ name: 'where',
+ type: 'object',
+ required: false,
+ description: `Filter object with conditions array and expression string. Each condition uses name, alias, value array, and operator.`,
+ },
+ ],
+ },
+ {
+ name: 'gainsight_timeline_update',
+ description: `Update one or more fields on an existing Timeline activity. Both activity_gsid and activity_type_id are required to identify the record.`,
+ params: [
+ {
+ name: 'activity_gsid',
+ type: 'string',
+ required: true,
+ description: `GSID of the Timeline activity to update. Returned as activityId in the gainsight_timeline_create response.`,
+ },
+ {
+ name: 'notes',
+ type: 'string',
+ required: true,
+ description: `Body text of the activity. Accepts plain text or HTML.`,
+ },
+ {
+ name: 'subject',
+ type: 'string',
+ required: true,
+ description: `Title of the activity shown in the Timeline feed. Maximum 255 characters.`,
+ },
+ {
+ name: 'activity_date',
+ type: 'string',
+ required: false,
+ description: `Date and time of the activity in ISO 8601 format, e.g. 2024-01-15T10:30:00.000+0000.`,
+ },
+ {
+ name: 'activity_type_id',
+ type: 'string',
+ required: false,
+ description: `GSID of the activity type. Required to identify the record type on update. Find it via gainsight_object_describe on the activity_timeline object.`,
+ },
+ {
+ name: 'company_name',
+ type: 'string',
+ required: false,
+ description: `Company name to re-link this activity to. Resolved to GsCompanyId automatically via lookup.`,
+ },
+ {
+ name: 'internal_attendees',
+ type: 'array',
+ required: false,
+ description: `Updated list of internal Gainsight user names attending this activity.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/hubspot.ts b/src/data/agent-connectors/hubspot.ts
index 4e0e97534..4206ced9f 100644
--- a/src/data/agent-connectors/hubspot.ts
+++ b/src/data/agent-connectors/hubspot.ts
@@ -5,40 +5,120 @@ export const tools: Tool[] = [
name: 'hubspot_association_create',
description: `Create a default association between two HubSpot CRM objects. For example, associate a contact with a deal, or a company with a ticket.`,
params: [
- { name: 'from_object_id', type: 'string', required: true, description: `ID of the source object` },
- { name: 'from_object_type', type: 'string', required: true, description: `Type of the source object (e.g. contacts, companies, deals, tickets)` },
- { name: 'to_object_id', type: 'string', required: true, description: `ID of the target object` },
- { name: 'to_object_type', type: 'string', required: true, description: `Type of the target object (e.g. contacts, companies, deals, tickets)` },
+ {
+ name: 'from_object_id',
+ type: 'string',
+ required: true,
+ description: `ID of the source object`,
+ },
+ {
+ name: 'from_object_type',
+ type: 'string',
+ required: true,
+ description: `Type of the source object (e.g. contacts, companies, deals, tickets)`,
+ },
+ {
+ name: 'to_object_id',
+ type: 'string',
+ required: true,
+ description: `ID of the target object`,
+ },
+ {
+ name: 'to_object_type',
+ type: 'string',
+ required: true,
+ description: `Type of the target object (e.g. contacts, companies, deals, tickets)`,
+ },
],
},
{
name: 'hubspot_associations_batch_archive',
description: `Remove an association between two HubSpot CRM objects using the v4 associations API.`,
params: [
- { name: 'from_object_type', type: 'string', required: true, description: `The type of the source object` },
- { name: 'inputs', type: 'string', required: true, description: `JSON array of associations to archive in HubSpot v4 format.` },
- { name: 'to_object_type', type: 'string', required: true, description: `The type of the target object` },
+ {
+ name: 'from_object_type',
+ type: 'string',
+ required: true,
+ description: `The type of the source object`,
+ },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of associations to archive in HubSpot v4 format.`,
+ },
+ {
+ name: 'to_object_type',
+ type: 'string',
+ required: true,
+ description: `The type of the target object`,
+ },
],
},
{
name: 'hubspot_associations_batch_create',
description: `Create one or more associations between HubSpot records using the batch API. Pass arrays of IDs — up to 100 pairs per call.`,
params: [
- { name: 'from_object_type', type: 'string', required: true, description: `Object type of the source records (e.g. contacts, deals, companies, tickets)` },
- { name: 'inputs', type: 'string', required: true, description: `JSON array of association objects in HubSpot v4 format.` },
- { name: 'to_object_type', type: 'string', required: true, description: `Object type of the target records (e.g. deals, companies, contacts, tickets)` },
+ {
+ name: 'from_object_type',
+ type: 'string',
+ required: true,
+ description: `Object type of the source records (e.g. contacts, deals, companies, tickets)`,
+ },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of association objects in HubSpot v4 format.`,
+ },
+ {
+ name: 'to_object_type',
+ type: 'string',
+ required: true,
+ description: `Object type of the target records (e.g. deals, companies, contacts, tickets)`,
+ },
],
},
{
name: 'hubspot_call_log',
description: `Log a call engagement in HubSpot CRM. Records details of a phone call including title, duration, notes, status, and direction.`,
params: [
- { name: 'hs_call_title', type: 'string', required: true, description: `Title or subject of the call` },
- { name: 'hs_timestamp', type: 'string', required: true, description: `Date and time when the call took place (ISO 8601 format)` },
- { name: 'hs_call_body', type: 'string', required: false, description: `Notes or transcript from the call` },
- { name: 'hs_call_direction', type: 'string', required: false, description: `Direction of the call` },
- { name: 'hs_call_duration', type: 'number', required: false, description: `Duration of the call in milliseconds` },
- { name: 'hs_call_status', type: 'string', required: false, description: `Outcome status of the call` },
+ {
+ name: 'hs_call_title',
+ type: 'string',
+ required: true,
+ description: `Title or subject of the call`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: true,
+ description: `Date and time when the call took place (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_call_body',
+ type: 'string',
+ required: false,
+ description: `Notes or transcript from the call`,
+ },
+ {
+ name: 'hs_call_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of the call`,
+ },
+ {
+ name: 'hs_call_duration',
+ type: 'number',
+ required: false,
+ description: `Duration of the call in milliseconds`,
+ },
+ {
+ name: 'hs_call_status',
+ type: 'string',
+ required: false,
+ description: `Outcome status of the call`,
+ },
],
},
{
@@ -46,103 +126,273 @@ export const tools: Tool[] = [
description: `Update an existing call engagement in HubSpot CRM by call ID. Provide any fields to update — only the fields you include will be changed.`,
params: [
{ name: 'call_id', type: 'string', required: true, description: `ID of the call to update` },
- { name: 'hs_call_body', type: 'string', required: false, description: `Notes or transcript from the call` },
- { name: 'hs_call_direction', type: 'string', required: false, description: `Direction of the call` },
- { name: 'hs_call_duration', type: 'number', required: false, description: `Duration of the call in milliseconds` },
- { name: 'hs_call_from_number', type: 'string', required: false, description: `Phone number the call originated from` },
- { name: 'hs_call_recording_url', type: 'string', required: false, description: `HTTPS URL pointing to the call recording (.mp3 or .wav)` },
- { name: 'hs_call_status', type: 'string', required: false, description: `Outcome status of the call` },
- { name: 'hs_call_title', type: 'string', required: false, description: `Title or subject of the call` },
- { name: 'hs_call_to_number', type: 'string', required: false, description: `Phone number that received the call` },
- { name: 'hs_timestamp', type: 'string', required: false, description: `Date and time when the call took place` },
- { name: 'hubspot_owner_id', type: 'string', required: false, description: `ID of the HubSpot owner associated with the call` },
+ {
+ name: 'hs_call_body',
+ type: 'string',
+ required: false,
+ description: `Notes or transcript from the call`,
+ },
+ {
+ name: 'hs_call_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of the call`,
+ },
+ {
+ name: 'hs_call_duration',
+ type: 'number',
+ required: false,
+ description: `Duration of the call in milliseconds`,
+ },
+ {
+ name: 'hs_call_from_number',
+ type: 'string',
+ required: false,
+ description: `Phone number the call originated from`,
+ },
+ {
+ name: 'hs_call_recording_url',
+ type: 'string',
+ required: false,
+ description: `HTTPS URL pointing to the call recording (.mp3 or .wav)`,
+ },
+ {
+ name: 'hs_call_status',
+ type: 'string',
+ required: false,
+ description: `Outcome status of the call`,
+ },
+ {
+ name: 'hs_call_title',
+ type: 'string',
+ required: false,
+ description: `Title or subject of the call`,
+ },
+ {
+ name: 'hs_call_to_number',
+ type: 'string',
+ required: false,
+ description: `Phone number that received the call`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: false,
+ description: `Date and time when the call took place`,
+ },
+ {
+ name: 'hubspot_owner_id',
+ type: 'string',
+ required: false,
+ description: `ID of the HubSpot owner associated with the call`,
+ },
],
},
{
name: 'hubspot_calls_search',
description: `Search HubSpot call engagements using filters and full-text search. Returns logged calls with their properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across call properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across call properties`,
+ },
],
},
{
name: 'hubspot_campaign_get',
description: `Retrieve details of a specific HubSpot marketing campaign by campaign ID.`,
params: [
- { name: 'campaign_id', type: 'string', required: true, description: `ID of the campaign to retrieve` },
+ {
+ name: 'campaign_id',
+ type: 'string',
+ required: true,
+ description: `ID of the campaign to retrieve`,
+ },
],
},
{
name: 'hubspot_campaigns_list',
description: `List all HubSpot marketing campaigns with pagination support.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination cursor for the next page of results` },
- { name: 'limit', type: 'number', required: false, description: `Number of campaigns to return per page` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination cursor for the next page of results`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of campaigns to return per page`,
+ },
],
},
{
name: 'hubspot_companies_batch_archive',
description: `Archive (soft delete) a company in HubSpot CRM using the batch archive API. Archived records are hidden from the UI but can be restored.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to archive. Each item has an 'id' field.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to archive. Each item has an 'id' field.`,
+ },
],
},
{
name: 'hubspot_companies_batch_create',
description: `Create one or more companys in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to create in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to create in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_companies_batch_read',
description: `Retrieve a company record from HubSpot CRM using the batch read API. Returns the specified properties for the record.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to read. Each item has an 'id' field.` },
- { name: 'properties', type: 'string', required: false, description: `JSON array of property names to return. Omit to get default properties.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to read. Each item has an 'id' field.`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `JSON array of property names to return. Omit to get default properties.`,
+ },
],
},
{
name: 'hubspot_companies_batch_update',
description: `Update one or more companys in HubSpot using the batch API. Pass a list of records with IDs — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to update in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to update in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_companies_batch_upsert',
description: `Upsert one or more companys in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to upsert in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to upsert in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_companies_search',
description: `Search HubSpot companies using full-text search and pagination. Returns matching companies with specified properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Search term for full-text search across company properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'array',
+ required: false,
+ description: `List of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Search term for full-text search across company properties`,
+ },
],
},
{
name: 'hubspot_company_create',
description: `Create a new company in HubSpot CRM. Requires a company name as the unique identifier. Supports additional properties like domain, industry, phone, location, and revenue information.`,
params: [
- { name: 'name', type: 'string', required: true, description: `Company name (required, serves as primary identifier)` },
- { name: 'annualrevenue', type: 'number', required: false, description: `Annual revenue of the company` },
+ {
+ name: 'name',
+ type: 'string',
+ required: true,
+ description: `Company name (required, serves as primary identifier)`,
+ },
+ {
+ name: 'annualrevenue',
+ type: 'number',
+ required: false,
+ description: `Annual revenue of the company`,
+ },
{ name: 'city', type: 'string', required: false, description: `Company city location` },
{ name: 'country', type: 'string', required: false, description: `Company country location` },
- { name: 'description', type: 'string', required: false, description: `Company description or overview` },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Company description or overview`,
+ },
{ name: 'domain', type: 'string', required: false, description: `Company website domain` },
- { name: 'industry', type: 'string', required: false, description: `Industry type of the company` },
- { name: 'numberofemployees', type: 'number', required: false, description: `Number of employees at the company` },
+ {
+ name: 'industry',
+ type: 'string',
+ required: false,
+ description: `Industry type of the company`,
+ },
+ {
+ name: 'numberofemployees',
+ type: 'number',
+ required: false,
+ description: `Number of employees at the company`,
+ },
{ name: 'phone', type: 'string', required: false, description: `Company phone number` },
{ name: 'state', type: 'string', required: false, description: `Company state or region` },
],
@@ -151,25 +401,75 @@ export const tools: Tool[] = [
name: 'hubspot_company_get',
description: `Retrieve details of a specific company from HubSpot by company ID. Returns company properties and associated data.`,
params: [
- { name: 'company_id', type: 'string', required: true, description: `ID of the company to retrieve` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
+ {
+ name: 'company_id',
+ type: 'string',
+ required: true,
+ description: `ID of the company to retrieve`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
],
},
{
name: 'hubspot_company_update',
description: `Update an existing company in HubSpot CRM by company ID. Provide any fields to update.`,
params: [
- { name: 'company_id', type: 'string', required: true, description: `ID of the company to update` },
- { name: 'annualrevenue', type: 'string', required: false, description: `Annual revenue of the company` },
- { name: 'city', type: 'string', required: false, description: `City where the company is located` },
- { name: 'country', type: 'string', required: false, description: `Country where the company is located` },
- { name: 'description', type: 'string', required: false, description: `Description of the company` },
+ {
+ name: 'company_id',
+ type: 'string',
+ required: true,
+ description: `ID of the company to update`,
+ },
+ {
+ name: 'annualrevenue',
+ type: 'string',
+ required: false,
+ description: `Annual revenue of the company`,
+ },
+ {
+ name: 'city',
+ type: 'string',
+ required: false,
+ description: `City where the company is located`,
+ },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Country where the company is located`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Description of the company`,
+ },
{ name: 'domain', type: 'string', required: false, description: `Company website domain` },
- { name: 'industry', type: 'string', required: false, description: `Industry the company operates in` },
+ {
+ name: 'industry',
+ type: 'string',
+ required: false,
+ description: `Industry the company operates in`,
+ },
{ name: 'name', type: 'string', required: false, description: `Name of the company` },
- { name: 'numberofemployees', type: 'number', required: false, description: `Number of employees at the company` },
+ {
+ name: 'numberofemployees',
+ type: 'number',
+ required: false,
+ description: `Number of employees at the company`,
+ },
{ name: 'phone', type: 'string', required: false, description: `Company phone number` },
- { name: 'state', type: 'string', required: false, description: `State or region where the company is located` },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `State or region where the company is located`,
+ },
{ name: 'website', type: 'string', required: false, description: `Company website URL` },
],
},
@@ -177,163 +477,453 @@ export const tools: Tool[] = [
name: 'hubspot_contact_create',
description: `Create a new contact in HubSpot CRM. Requires an email address as the unique identifier. Supports additional properties like name, company, phone, and lifecycle stage.`,
params: [
- { name: 'email', type: 'string', required: true, description: `Primary email address for the contact (required, serves as unique identifier)` },
- { name: 'company', type: 'string', required: false, description: `Company name where the contact works` },
- { name: 'firstname', type: 'string', required: false, description: `First name of the contact` },
- { name: 'hs_lead_status', type: 'string', required: false, description: `Lead status of the contact` },
- { name: 'jobtitle', type: 'string', required: false, description: `Job title of the contact` },
- { name: 'lastname', type: 'string', required: false, description: `Last name of the contact` },
- { name: 'lifecyclestage', type: 'string', required: false, description: `Lifecycle stage of the contact` },
- { name: 'phone', type: 'string', required: false, description: `Phone number of the contact` },
- { name: 'website', type: 'string', required: false, description: `Personal or company website URL` },
+ {
+ name: 'email',
+ type: 'string',
+ required: true,
+ description: `Primary email address for the contact (required, serves as unique identifier)`,
+ },
+ {
+ name: 'company',
+ type: 'string',
+ required: false,
+ description: `Company name where the contact works`,
+ },
+ {
+ name: 'firstname',
+ type: 'string',
+ required: false,
+ description: `First name of the contact`,
+ },
+ {
+ name: 'hs_lead_status',
+ type: 'string',
+ required: false,
+ description: `Lead status of the contact`,
+ },
+ {
+ name: 'jobtitle',
+ type: 'string',
+ required: false,
+ description: `Job title of the contact`,
+ },
+ {
+ name: 'lastname',
+ type: 'string',
+ required: false,
+ description: `Last name of the contact`,
+ },
+ {
+ name: 'lifecyclestage',
+ type: 'string',
+ required: false,
+ description: `Lifecycle stage of the contact`,
+ },
+ {
+ name: 'phone',
+ type: 'string',
+ required: false,
+ description: `Phone number of the contact`,
+ },
+ {
+ name: 'website',
+ type: 'string',
+ required: false,
+ description: `Personal or company website URL`,
+ },
],
},
{
name: 'hubspot_contact_email_events_get',
description: `Retrieve marketing email events for a specific contact by their email address. Returns open, click, bounce, and unsubscribe events.`,
params: [
- { name: 'email', type: 'string', required: true, description: `Email address of the contact to retrieve events for` },
- { name: 'eventType', type: 'string', required: false, description: `Filter by event type (e.g., OPEN, CLICK, BOUNCE, UNSUBSCRIBE)` },
- { name: 'limit', type: 'number', required: false, description: `Number of events to return per page` },
+ {
+ name: 'email',
+ type: 'string',
+ required: true,
+ description: `Email address of the contact to retrieve events for`,
+ },
+ {
+ name: 'eventType',
+ type: 'string',
+ required: false,
+ description: `Filter by event type (e.g., OPEN, CLICK, BOUNCE, UNSUBSCRIBE)`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of events to return per page`,
+ },
],
},
{
name: 'hubspot_contact_get',
description: `Retrieve details of a specific contact from HubSpot by contact ID. Returns contact properties and associated data.`,
params: [
- { name: 'contact_id', type: 'string', required: true, description: `ID of the contact to retrieve` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
+ {
+ name: 'contact_id',
+ type: 'string',
+ required: true,
+ description: `ID of the contact to retrieve`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
],
},
{
name: 'hubspot_contact_list_membership_get',
description: `Retrieve all HubSpot lists that a specific contact belongs to, identified by contact ID.`,
params: [
- { name: 'contact_id', type: 'string', required: true, description: `ID of the contact to retrieve list memberships for` },
+ {
+ name: 'contact_id',
+ type: 'string',
+ required: true,
+ description: `ID of the contact to retrieve list memberships for`,
+ },
],
},
{
name: 'hubspot_contact_update',
description: `Update an existing contact in HubSpot CRM by contact ID. Provide any fields to update.`,
params: [
- { name: 'contact_id', type: 'string', required: true, description: `ID of the contact to update` },
- { name: 'company', type: 'string', required: false, description: `Company name where the contact works` },
- { name: 'email', type: 'string', required: false, description: `Primary email address of the contact` },
- { name: 'firstname', type: 'string', required: false, description: `First name of the contact` },
- { name: 'hs_lead_status', type: 'string', required: false, description: `Lead status of the contact` },
- { name: 'jobtitle', type: 'string', required: false, description: `Job title of the contact` },
- { name: 'lastname', type: 'string', required: false, description: `Last name of the contact` },
- { name: 'lifecyclestage', type: 'string', required: false, description: `Lifecycle stage of the contact` },
- { name: 'phone', type: 'string', required: false, description: `Phone number of the contact` },
- { name: 'website', type: 'string', required: false, description: `Website URL of the contact` },
+ {
+ name: 'contact_id',
+ type: 'string',
+ required: true,
+ description: `ID of the contact to update`,
+ },
+ {
+ name: 'company',
+ type: 'string',
+ required: false,
+ description: `Company name where the contact works`,
+ },
+ {
+ name: 'email',
+ type: 'string',
+ required: false,
+ description: `Primary email address of the contact`,
+ },
+ {
+ name: 'firstname',
+ type: 'string',
+ required: false,
+ description: `First name of the contact`,
+ },
+ {
+ name: 'hs_lead_status',
+ type: 'string',
+ required: false,
+ description: `Lead status of the contact`,
+ },
+ {
+ name: 'jobtitle',
+ type: 'string',
+ required: false,
+ description: `Job title of the contact`,
+ },
+ {
+ name: 'lastname',
+ type: 'string',
+ required: false,
+ description: `Last name of the contact`,
+ },
+ {
+ name: 'lifecyclestage',
+ type: 'string',
+ required: false,
+ description: `Lifecycle stage of the contact`,
+ },
+ {
+ name: 'phone',
+ type: 'string',
+ required: false,
+ description: `Phone number of the contact`,
+ },
+ {
+ name: 'website',
+ type: 'string',
+ required: false,
+ description: `Website URL of the contact`,
+ },
],
},
{
name: 'hubspot_contacts_batch_archive',
description: `Archive (soft delete) a contact in HubSpot CRM using the batch archive API. Archived records are hidden from the UI but can be restored.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to archive. Each item has an 'id' field.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to archive. Each item has an 'id' field.`,
+ },
],
},
{
name: 'hubspot_contacts_batch_create',
description: `Create one or more contacts in HubSpot using the batch API. Pass the inputs array in native HubSpot format — up to 100 records per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of contact objects in HubSpot batch format. Each item has a 'properties' object and optional 'associations' array.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of contact objects in HubSpot batch format. Each item has a 'properties' object and optional 'associations' array.`,
+ },
],
},
{
name: 'hubspot_contacts_batch_read',
description: `Retrieve a contact record from HubSpot CRM using the batch read API. Returns the specified properties for the record.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to read. Each item has an 'id' field.` },
- { name: 'properties', type: 'string', required: false, description: `JSON array of property names to return. Omit to get default properties.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to read. Each item has an 'id' field.`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `JSON array of property names to return. Omit to get default properties.`,
+ },
],
},
{
name: 'hubspot_contacts_batch_update',
description: `Update one or more contacts in HubSpot using the batch API. Pass a list of records with IDs — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to update in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to update in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_contacts_batch_upsert',
description: `Upsert one or more contacts in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to upsert in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to upsert in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_contacts_list',
description: `Retrieve a list of contacts from HubSpot with filtering and pagination. Returns contact properties and supports pagination through cursor-based navigation.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination cursor to get the next set of results` },
- { name: 'archived', type: 'boolean', required: false, description: `Whether to include archived contacts in the results` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination cursor to get the next set of results`,
+ },
+ {
+ name: 'archived',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include archived contacts in the results`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
],
},
{
name: 'hubspot_contacts_search',
description: `Search HubSpot contacts using full-text search and pagination. Returns matching contacts with specified properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Search term for full-text search across contact properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'array',
+ required: false,
+ description: `List of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Search term for full-text search across contact properties`,
+ },
],
},
{
name: 'hubspot_custom_object_record_create',
description: `Create a new record for a HubSpot custom object type.`,
params: [
- { name: 'object_type_id', type: 'string', required: true, description: `The object type ID of the custom object (e.g., contacts)` },
- { name: 'properties', type: 'string', required: true, description: `JSON object containing the properties for the new record` },
+ {
+ name: 'object_type_id',
+ type: 'string',
+ required: true,
+ description: `The object type ID of the custom object (e.g., contacts)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: true,
+ description: `JSON object containing the properties for the new record`,
+ },
],
},
{
name: 'hubspot_custom_object_record_get',
description: `Retrieve a specific record of a HubSpot custom object by object type ID and record ID.`,
params: [
- { name: 'object_type_id', type: 'string', required: true, description: `The object type ID of the custom object (e.g., contacts)` },
- { name: 'record_id', type: 'string', required: true, description: `ID of the record to retrieve` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
+ {
+ name: 'object_type_id',
+ type: 'string',
+ required: true,
+ description: `The object type ID of the custom object (e.g., contacts)`,
+ },
+ {
+ name: 'record_id',
+ type: 'string',
+ required: true,
+ description: `ID of the record to retrieve`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
],
},
{
name: 'hubspot_custom_object_record_update',
description: `Update an existing record of a HubSpot custom object by object type ID and record ID. Use hubspot_schemas_list to discover available object type IDs and their properties.`,
params: [
- { name: 'object_type_id', type: 'string', required: true, description: `The object type ID of the custom object (e.g., contacts)` },
- { name: 'properties', type: 'object', required: true, description: `Key-value pairs of custom object properties to update` },
- { name: 'record_id', type: 'string', required: true, description: `ID of the record to update` },
+ {
+ name: 'object_type_id',
+ type: 'string',
+ required: true,
+ description: `The object type ID of the custom object (e.g., contacts)`,
+ },
+ {
+ name: 'properties',
+ type: 'object',
+ required: true,
+ description: `Key-value pairs of custom object properties to update`,
+ },
+ {
+ name: 'record_id',
+ type: 'string',
+ required: true,
+ description: `ID of the record to update`,
+ },
],
},
{
name: 'hubspot_custom_object_records_search',
description: `Search records of a HubSpot custom object by object type ID. Use hubspot_schemas_list to find the objectTypeId for your custom object.`,
params: [
- { name: 'object_type_id', type: 'string', required: true, description: `The object type ID of the custom object (e.g., contacts)` },
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across record properties` },
+ {
+ name: 'object_type_id',
+ type: 'string',
+ required: true,
+ description: `The object type ID of the custom object (e.g., contacts)`,
+ },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across record properties`,
+ },
],
},
{
name: 'hubspot_deal_create',
description: `Create a new deal in HubSpot CRM. Requires dealname and dealstage. Supports additional properties like amount, pipeline, close date, and deal type.`,
params: [
- { name: 'dealname', type: 'string', required: true, description: `Name of the deal (required)` },
- { name: 'dealstage', type: 'string', required: true, description: `Current stage of the deal (required)` },
+ {
+ name: 'dealname',
+ type: 'string',
+ required: true,
+ description: `Name of the deal (required)`,
+ },
+ {
+ name: 'dealstage',
+ type: 'string',
+ required: true,
+ description: `Current stage of the deal (required)`,
+ },
{ name: 'amount', type: 'number', required: false, description: `Deal amount/value` },
- { name: 'closedate', type: 'string', required: false, description: `Expected close date (YYYY-MM-DD format)` },
+ {
+ name: 'closedate',
+ type: 'string',
+ required: false,
+ description: `Expected close date (YYYY-MM-DD format)`,
+ },
{ name: 'dealtype', type: 'string', required: false, description: `Type of deal` },
{ name: 'description', type: 'string', required: false, description: `Deal description` },
- { name: 'hs_priority', type: 'string', required: false, description: `Deal priority (high, medium, low)` },
+ {
+ name: 'hs_priority',
+ type: 'string',
+ required: false,
+ description: `Deal priority (high, medium, low)`,
+ },
{ name: 'pipeline', type: 'string', required: false, description: `Deal pipeline` },
],
},
@@ -341,23 +931,48 @@ export const tools: Tool[] = [
name: 'hubspot_deal_get',
description: `Retrieve details of a specific deal from HubSpot by deal ID. Returns deal properties and associated data.`,
params: [
- { name: 'deal_id', type: 'string', required: true, description: `ID of the deal to retrieve` },
- { name: 'associations', type: 'string', required: false, description: `Comma-separated list of object types to retrieve associations for` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
+ {
+ name: 'deal_id',
+ type: 'string',
+ required: true,
+ description: `ID of the deal to retrieve`,
+ },
+ {
+ name: 'associations',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of object types to retrieve associations for`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
],
},
{
name: 'hubspot_deal_line_items_get',
description: `Retrieve all line items associated with a specific HubSpot deal.`,
params: [
- { name: 'deal_id', type: 'string', required: true, description: `ID of the deal to retrieve line items for` },
+ {
+ name: 'deal_id',
+ type: 'string',
+ required: true,
+ description: `ID of the deal to retrieve line items for`,
+ },
],
},
{
name: 'hubspot_deal_pipelines_list',
description: `Retrieve all deal pipelines in HubSpot, including pipeline stages. Use this to get valid pipeline IDs and stage IDs for creating or updating deals.`,
params: [
- { name: 'archived', type: 'string', required: false, description: `Include archived pipelines in the response` },
+ {
+ name: 'archived',
+ type: 'string',
+ required: false,
+ description: `Include archived pipelines in the response`,
+ },
],
},
{
@@ -366,12 +981,37 @@ export const tools: Tool[] = [
params: [
{ name: 'deal_id', type: 'string', required: true, description: `ID of the deal to update` },
{ name: 'amount', type: 'number', required: false, description: `Updated deal amount/value` },
- { name: 'closedate', type: 'string', required: false, description: `Updated expected close date (YYYY-MM-DD format)` },
- { name: 'dealname', type: 'string', required: false, description: `Updated name of the deal` },
- { name: 'dealstage', type: 'string', required: false, description: `Updated stage of the deal` },
+ {
+ name: 'closedate',
+ type: 'string',
+ required: false,
+ description: `Updated expected close date (YYYY-MM-DD format)`,
+ },
+ {
+ name: 'dealname',
+ type: 'string',
+ required: false,
+ description: `Updated name of the deal`,
+ },
+ {
+ name: 'dealstage',
+ type: 'string',
+ required: false,
+ description: `Updated stage of the deal`,
+ },
{ name: 'dealtype', type: 'string', required: false, description: `Updated type of deal` },
- { name: 'description', type: 'string', required: false, description: `Updated deal description` },
- { name: 'hs_priority', type: 'string', required: false, description: `Updated deal priority` },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Updated deal description`,
+ },
+ {
+ name: 'hs_priority',
+ type: 'string',
+ required: false,
+ description: `Updated deal priority`,
+ },
{ name: 'pipeline', type: 'string', required: false, description: `Updated deal pipeline` },
],
},
@@ -379,114 +1019,324 @@ export const tools: Tool[] = [
name: 'hubspot_deals_batch_archive',
description: `Archive (soft delete) a deal in HubSpot CRM using the batch archive API. Archived records are hidden from the UI but can be restored.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to archive. Each item has an 'id' field.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to archive. Each item has an 'id' field.`,
+ },
],
},
{
name: 'hubspot_deals_batch_create',
description: `Create one or more deals in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to create in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to create in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_deals_batch_read',
description: `Retrieve a deal record from HubSpot CRM using the batch read API. Returns the specified properties for the record.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to read. Each item has an 'id' field.` },
- { name: 'properties', type: 'string', required: false, description: `JSON array of property names to return. Omit to get default properties.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to read. Each item has an 'id' field.`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `JSON array of property names to return. Omit to get default properties.`,
+ },
],
},
{
name: 'hubspot_deals_batch_update',
description: `Update one or more deals in HubSpot using the batch API. Pass a list of records with IDs — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to update in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to update in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_deals_batch_upsert',
description: `Upsert one or more deals in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to upsert in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to upsert in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_deals_search',
description: `Search HubSpot deals using full-text search and pagination. Returns matching deals with specified properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Search term for full-text search across deal properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'array',
+ required: false,
+ description: `List of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Search term for full-text search across deal properties`,
+ },
],
},
{
name: 'hubspot_email_create',
description: `Create an email engagement in HubSpot CRM to log an email interaction on a record's timeline. Use this to record sent, received, or forwarded emails against contacts, companies, or deals.`,
params: [
- { name: 'hs_email_direction', type: 'string', required: true, description: `Direction the email was sent` },
- { name: 'hs_timestamp', type: 'string', required: true, description: `Date and time of the email` },
- { name: 'hs_email_headers', type: 'string', required: false, description: `Email headers as a JSON-escaped string containing sender and recipient details` },
- { name: 'hs_email_html', type: 'string', required: false, description: `HTML body of the email` },
- { name: 'hs_email_status', type: 'string', required: false, description: `Send status of the email` },
- { name: 'hs_email_subject', type: 'string', required: false, description: `Subject line of the email` },
- { name: 'hs_email_text', type: 'string', required: false, description: `Plain-text body of the email` },
- { name: 'hubspot_owner_id', type: 'string', required: false, description: `ID of the HubSpot owner associated with the email` },
+ {
+ name: 'hs_email_direction',
+ type: 'string',
+ required: true,
+ description: `Direction the email was sent`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: true,
+ description: `Date and time of the email`,
+ },
+ {
+ name: 'hs_email_headers',
+ type: 'string',
+ required: false,
+ description: `Email headers as a JSON-escaped string containing sender and recipient details`,
+ },
+ {
+ name: 'hs_email_html',
+ type: 'string',
+ required: false,
+ description: `HTML body of the email`,
+ },
+ {
+ name: 'hs_email_status',
+ type: 'string',
+ required: false,
+ description: `Send status of the email`,
+ },
+ {
+ name: 'hs_email_subject',
+ type: 'string',
+ required: false,
+ description: `Subject line of the email`,
+ },
+ {
+ name: 'hs_email_text',
+ type: 'string',
+ required: false,
+ description: `Plain-text body of the email`,
+ },
+ {
+ name: 'hubspot_owner_id',
+ type: 'string',
+ required: false,
+ description: `ID of the HubSpot owner associated with the email`,
+ },
],
},
{
name: 'hubspot_email_update',
description: `Update an existing email engagement in HubSpot CRM by email ID. Provide any fields to update — only the fields you include will be changed.`,
params: [
- { name: 'email_id', type: 'string', required: true, description: `ID of the email engagement to update` },
- { name: 'hs_email_direction', type: 'string', required: false, description: `Direction the email was sent` },
- { name: 'hs_email_headers', type: 'string', required: false, description: `Email headers as a JSON-escaped string containing sender and recipient details` },
- { name: 'hs_email_html', type: 'string', required: false, description: `HTML body of the email` },
- { name: 'hs_email_status', type: 'string', required: false, description: `Send status of the email` },
- { name: 'hs_email_subject', type: 'string', required: false, description: `Subject line of the email` },
- { name: 'hs_email_text', type: 'string', required: false, description: `Plain-text body of the email` },
- { name: 'hs_timestamp', type: 'string', required: false, description: `Date and time of the email` },
- { name: 'hubspot_owner_id', type: 'string', required: false, description: `ID of the HubSpot owner associated with the email` },
+ {
+ name: 'email_id',
+ type: 'string',
+ required: true,
+ description: `ID of the email engagement to update`,
+ },
+ {
+ name: 'hs_email_direction',
+ type: 'string',
+ required: false,
+ description: `Direction the email was sent`,
+ },
+ {
+ name: 'hs_email_headers',
+ type: 'string',
+ required: false,
+ description: `Email headers as a JSON-escaped string containing sender and recipient details`,
+ },
+ {
+ name: 'hs_email_html',
+ type: 'string',
+ required: false,
+ description: `HTML body of the email`,
+ },
+ {
+ name: 'hs_email_status',
+ type: 'string',
+ required: false,
+ description: `Send status of the email`,
+ },
+ {
+ name: 'hs_email_subject',
+ type: 'string',
+ required: false,
+ description: `Subject line of the email`,
+ },
+ {
+ name: 'hs_email_text',
+ type: 'string',
+ required: false,
+ description: `Plain-text body of the email`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: false,
+ description: `Date and time of the email`,
+ },
+ {
+ name: 'hubspot_owner_id',
+ type: 'string',
+ required: false,
+ description: `ID of the HubSpot owner associated with the email`,
+ },
],
},
{
name: 'hubspot_emails_search',
description: `Search HubSpot email engagements (logged emails) using filters and full-text search. Returns logged email records with their properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across email properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across email properties`,
+ },
],
},
{
name: 'hubspot_engagements_list',
description: `List engagements (notes, tasks, calls, emails, meetings) from HubSpot CRM. Supports filtering by engagement type and pagination.`,
params: [
- { name: 'engagement_type', type: 'string', required: true, description: `Type of engagement to list` },
- { name: 'after', type: 'string', required: false, description: `Pagination cursor to get the next page of results` },
- { name: 'limit', type: 'integer', required: false, description: `Number of results to return (max 100)` },
+ {
+ name: 'engagement_type',
+ type: 'string',
+ required: true,
+ description: `Type of engagement to list`,
+ },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination cursor to get the next page of results`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Number of results to return (max 100)`,
+ },
],
},
{
name: 'hubspot_form_submissions_get',
description: `Retrieve all submissions for a specific HubSpot form. Returns submitted field values and submission timestamps.`,
params: [
- { name: 'form_id', type: 'string', required: true, description: `ID of the form to retrieve submissions for` },
- { name: 'after', type: 'string', required: false, description: `Pagination offset token for the next page` },
- { name: 'limit', type: 'number', required: false, description: `Number of submissions to return per page` },
+ {
+ name: 'form_id',
+ type: 'string',
+ required: true,
+ description: `ID of the form to retrieve submissions for`,
+ },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset token for the next page`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of submissions to return per page`,
+ },
],
},
{
name: 'hubspot_forms_list',
description: `List all HubSpot marketing forms. Returns form IDs, names, and field definitions.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination cursor for the next page of results` },
- { name: 'formTypes', type: 'string', required: false, description: `Comma-separated list of form types to filter by (e.g., hubspot,captured,flow)` },
- { name: 'limit', type: 'number', required: false, description: `Number of forms to return per page (max 50)` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination cursor for the next page of results`,
+ },
+ {
+ name: 'formTypes',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of form types to filter by (e.g., hubspot,captured,flow)`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of forms to return per page (max 50)`,
+ },
],
},
{
@@ -494,85 +1344,240 @@ export const tools: Tool[] = [
description: `Create a new line item in HubSpot. Line items represent individual products or services in a deal.`,
params: [
{ name: 'name', type: 'string', required: true, description: `Name of the line item` },
- { name: 'deal_id', type: 'string', required: false, description: `ID of the deal to associate this line item with` },
- { name: 'hs_product_id', type: 'string', required: false, description: `ID of the associated product from HubSpot product library` },
- { name: 'price', type: 'string', required: false, description: `Unit price of the line item` },
- { name: 'quantity', type: 'string', required: false, description: `Quantity of the line item` },
+ {
+ name: 'deal_id',
+ type: 'string',
+ required: false,
+ description: `ID of the deal to associate this line item with`,
+ },
+ {
+ name: 'hs_product_id',
+ type: 'string',
+ required: false,
+ description: `ID of the associated product from HubSpot product library`,
+ },
+ {
+ name: 'price',
+ type: 'string',
+ required: false,
+ description: `Unit price of the line item`,
+ },
+ {
+ name: 'quantity',
+ type: 'string',
+ required: false,
+ description: `Quantity of the line item`,
+ },
],
},
{
name: 'hubspot_line_items_batch_archive',
description: `Archive (soft delete) a line item in HubSpot CRM using the batch archive API. Archived records are hidden from the UI but can be restored.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to archive. Each item has an 'id' field.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to archive. Each item has an 'id' field.`,
+ },
],
},
{
name: 'hubspot_line_items_batch_create',
description: `Create one or more line items in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to create in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to create in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_line_items_batch_read',
description: `Retrieve a line item record from HubSpot CRM using the batch read API. Returns the specified properties for the record.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to read. Each item has an 'id' field.` },
- { name: 'properties', type: 'string', required: false, description: `JSON array of property names to return. Omit to get default properties.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to read. Each item has an 'id' field.`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `JSON array of property names to return. Omit to get default properties.`,
+ },
],
},
{
name: 'hubspot_line_items_batch_update',
description: `Update one or more line items in HubSpot using the batch API. Pass a list of records with IDs — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to update in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to update in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_meeting_log',
description: `Log a meeting engagement in HubSpot CRM. Records details of a meeting including title, start/end time, description, and outcome.`,
params: [
- { name: 'hs_meeting_end_time', type: 'string', required: true, description: `End time of the meeting (ISO 8601 format)` },
- { name: 'hs_meeting_start_time', type: 'string', required: true, description: `Start time of the meeting (ISO 8601 format)` },
- { name: 'hs_meeting_title', type: 'string', required: true, description: `Title of the meeting` },
- { name: 'hs_timestamp', type: 'string', required: true, description: `Timestamp for the meeting (ISO 8601 format)` },
- { name: 'hs_meeting_body', type: 'string', required: false, description: `Description or agenda for the meeting` },
- { name: 'hs_meeting_outcome', type: 'string', required: false, description: `Outcome of the meeting` },
+ {
+ name: 'hs_meeting_end_time',
+ type: 'string',
+ required: true,
+ description: `End time of the meeting (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_meeting_start_time',
+ type: 'string',
+ required: true,
+ description: `Start time of the meeting (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_meeting_title',
+ type: 'string',
+ required: true,
+ description: `Title of the meeting`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: true,
+ description: `Timestamp for the meeting (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_meeting_body',
+ type: 'string',
+ required: false,
+ description: `Description or agenda for the meeting`,
+ },
+ {
+ name: 'hs_meeting_outcome',
+ type: 'string',
+ required: false,
+ description: `Outcome of the meeting`,
+ },
],
},
{
name: 'hubspot_meeting_update',
description: `Update an existing meeting engagement in HubSpot CRM by meeting ID. Provide any fields to update — only the fields you include will be changed.`,
params: [
- { name: 'meeting_id', type: 'string', required: true, description: `ID of the meeting to update` },
- { name: 'hs_internal_meeting_notes', type: 'string', required: false, description: `Internal notes not shared with attendees` },
- { name: 'hs_meeting_body', type: 'string', required: false, description: `Description or agenda for the meeting` },
- { name: 'hs_meeting_end_time', type: 'string', required: false, description: `End time of the meeting (ISO 8601 format)` },
- { name: 'hs_meeting_location', type: 'string', required: false, description: `Location of the meeting` },
- { name: 'hs_meeting_outcome', type: 'string', required: false, description: `Outcome of the meeting` },
- { name: 'hs_meeting_start_time', type: 'string', required: false, description: `Start time of the meeting (ISO 8601 format)` },
- { name: 'hs_meeting_title', type: 'string', required: false, description: `Title of the meeting` },
- { name: 'hs_timestamp', type: 'string', required: false, description: `Timestamp for the meeting (ISO 8601 format)` },
- { name: 'hubspot_owner_id', type: 'string', required: false, description: `ID of the HubSpot owner associated with the meeting` },
+ {
+ name: 'meeting_id',
+ type: 'string',
+ required: true,
+ description: `ID of the meeting to update`,
+ },
+ {
+ name: 'hs_internal_meeting_notes',
+ type: 'string',
+ required: false,
+ description: `Internal notes not shared with attendees`,
+ },
+ {
+ name: 'hs_meeting_body',
+ type: 'string',
+ required: false,
+ description: `Description or agenda for the meeting`,
+ },
+ {
+ name: 'hs_meeting_end_time',
+ type: 'string',
+ required: false,
+ description: `End time of the meeting (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_meeting_location',
+ type: 'string',
+ required: false,
+ description: `Location of the meeting`,
+ },
+ {
+ name: 'hs_meeting_outcome',
+ type: 'string',
+ required: false,
+ description: `Outcome of the meeting`,
+ },
+ {
+ name: 'hs_meeting_start_time',
+ type: 'string',
+ required: false,
+ description: `Start time of the meeting (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_meeting_title',
+ type: 'string',
+ required: false,
+ description: `Title of the meeting`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: false,
+ description: `Timestamp for the meeting (ISO 8601 format)`,
+ },
+ {
+ name: 'hubspot_owner_id',
+ type: 'string',
+ required: false,
+ description: `ID of the HubSpot owner associated with the meeting`,
+ },
],
},
{
name: 'hubspot_meetings_search',
description: `Search HubSpot meeting engagements using filters and full-text search. Returns logged meetings with their properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across meeting properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across meeting properties`,
+ },
],
},
{
name: 'hubspot_note_create',
description: `Create a note in HubSpot CRM to log interactions, meeting summaries, or important information. Notes can be associated with contacts, companies, or deals.`,
params: [
- { name: 'props', type: 'object', required: true, description: `Note properties. hs_note_body (required) is the note content. hs_timestamp (required) is Unix ms timestamp e.g. 1700000000000.` },
+ {
+ name: 'props',
+ type: 'object',
+ required: true,
+ description: `Note properties. hs_note_body (required) is the note content. hs_timestamp (required) is Unix ms timestamp e.g. 1700000000000.`,
+ },
],
},
{
@@ -580,7 +1585,12 @@ export const tools: Tool[] = [
description: `Log a note engagement in HubSpot CRM. Creates a text note that can be associated with contacts, companies, or deals.`,
params: [
{ name: 'hs_note_body', type: 'string', required: true, description: `Content of the note` },
- { name: 'hs_timestamp', type: 'string', required: true, description: `Timestamp for the note (ISO 8601 format)` },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: true,
+ description: `Timestamp for the note (ISO 8601 format)`,
+ },
],
},
{
@@ -588,37 +1598,102 @@ export const tools: Tool[] = [
description: `Update an existing note in HubSpot CRM by note ID. Provide any fields to update — only the fields you include will be changed.`,
params: [
{ name: 'note_id', type: 'string', required: true, description: `ID of the note to update` },
- { name: 'hs_note_body', type: 'string', required: false, description: `Text content of the note` },
- { name: 'hs_timestamp', type: 'string', required: false, description: `Date and time of the note` },
- { name: 'hubspot_owner_id', type: 'string', required: false, description: `ID of the HubSpot owner associated with the note` },
+ {
+ name: 'hs_note_body',
+ type: 'string',
+ required: false,
+ description: `Text content of the note`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: false,
+ description: `Date and time of the note`,
+ },
+ {
+ name: 'hubspot_owner_id',
+ type: 'string',
+ required: false,
+ description: `ID of the HubSpot owner associated with the note`,
+ },
],
},
{
name: 'hubspot_notes_search',
description: `Search HubSpot note engagements using filters and full-text search. Returns logged notes with their content and timestamps.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across note content` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across note content`,
+ },
],
},
{
name: 'hubspot_object_properties_list',
description: `Retrieve all properties defined for a HubSpot CRM object type (contacts, companies, deals, tickets, etc.).`,
params: [
- { name: 'object_type', type: 'string', required: true, description: `The CRM object type to list properties for` },
- { name: 'archived', type: 'string', required: false, description: `Include archived properties in the response` },
+ {
+ name: 'object_type',
+ type: 'string',
+ required: true,
+ description: `The CRM object type to list properties for`,
+ },
+ {
+ name: 'archived',
+ type: 'string',
+ required: false,
+ description: `Include archived properties in the response`,
+ },
],
},
{
name: 'hubspot_owners_list',
description: `List all HubSpot owners (users). Use this to find owner IDs for assigning contacts, deals, tickets, and other CRM records.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination cursor for the next page of results` },
- { name: 'email', type: 'string', required: false, description: `Filter owners by email address` },
- { name: 'limit', type: 'number', required: false, description: `Number of owners to return per page (max 500)` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination cursor for the next page of results`,
+ },
+ {
+ name: 'email',
+ type: 'string',
+ required: false,
+ description: `Filter owners by email address`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of owners to return per page (max 500)`,
+ },
],
},
{
@@ -626,8 +1701,18 @@ export const tools: Tool[] = [
description: `Create a new product in the HubSpot product library.`,
params: [
{ name: 'name', type: 'string', required: true, description: `Name of the product` },
- { name: 'description', type: 'string', required: false, description: `Description of the product` },
- { name: 'hs_sku', type: 'string', required: false, description: `Stock keeping unit (SKU) identifier for the product` },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Description of the product`,
+ },
+ {
+ name: 'hs_sku',
+ type: 'string',
+ required: false,
+ description: `Stock keeping unit (SKU) identifier for the product`,
+ },
{ name: 'price', type: 'string', required: false, description: `Price of the product` },
],
},
@@ -635,50 +1720,115 @@ export const tools: Tool[] = [
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.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to archive. Each item has an 'id' field.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to archive. Each item has an 'id' field.`,
+ },
],
},
{
name: 'hubspot_products_batch_read',
description: `Retrieve a product record from HubSpot CRM using the batch read API. Returns the specified properties for the record.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to read. Each item has an 'id' field.` },
- { name: 'properties', type: 'string', required: false, description: `JSON array of property names to return. Omit to get default properties.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to read. Each item has an 'id' field.`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `JSON array of property names to return. Omit to get default properties.`,
+ },
],
},
{
name: 'hubspot_products_list',
description: `Retrieve a list of products from the HubSpot product library.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination cursor for the next page of results` },
- { name: 'limit', type: 'number', required: false, description: `Number of products to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of product properties to include in response` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination cursor for the next page of results`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of products to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of product properties to include in response`,
+ },
],
},
{
name: 'hubspot_quote_create',
description: `Create a new quote in HubSpot for a deal.`,
params: [
- { name: 'hs_language', type: 'string', required: true, description: `Language of the quote (ISO 639-1 code, e.g. en, de, fr, es)` },
+ {
+ name: 'hs_language',
+ type: 'string',
+ required: true,
+ description: `Language of the quote (ISO 639-1 code, e.g. en, de, fr, es)`,
+ },
{ name: 'hs_title', type: 'string', required: true, description: `Title of the quote` },
- { name: 'deal_id', type: 'string', required: false, description: `ID of the deal to associate this quote with` },
- { name: 'hs_expiration_date', type: 'string', required: false, description: `Expiration date of the quote (YYYY-MM-DD format)` },
- { name: 'hs_status', type: 'string', required: false, description: `Status of the quote (DRAFT, PENDING_APPROVAL, APPROVED, REJECTED)` },
+ {
+ name: 'deal_id',
+ type: 'string',
+ required: false,
+ description: `ID of the deal to associate this quote with`,
+ },
+ {
+ name: 'hs_expiration_date',
+ type: 'string',
+ required: false,
+ description: `Expiration date of the quote (YYYY-MM-DD format)`,
+ },
+ {
+ name: 'hs_status',
+ type: 'string',
+ required: false,
+ description: `Status of the quote (DRAFT, PENDING_APPROVAL, APPROVED, REJECTED)`,
+ },
],
},
{
name: 'hubspot_quote_get',
description: `Retrieve a specific HubSpot quote by its ID.`,
params: [
- { name: 'quote_id', type: 'string', required: true, description: `ID of the quote to retrieve` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of quote properties to include in response` },
+ {
+ name: 'quote_id',
+ type: 'string',
+ required: true,
+ description: `ID of the quote to retrieve`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of quote properties to include in response`,
+ },
],
},
{
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.`,
params: [
- { name: 'archived', type: 'string', required: false, description: `Include archived schemas in the response` },
+ {
+ name: 'archived',
+ type: 'string',
+ required: false,
+ description: `Include archived schemas in the response`,
+ },
],
},
{
@@ -686,19 +1836,54 @@ export const tools: Tool[] = [
description: `Mark a HubSpot task as completed or update its status. Use the task ID from hubspot_tasks_search or hubspot_task_create.`,
params: [
{ name: 'task_id', type: 'string', required: true, description: `ID of the task to update` },
- { name: 'hs_task_body', type: 'string', required: false, description: `Updated notes for the task` },
- { name: 'hs_task_status', type: 'string', required: false, description: `New status to set for the task` },
+ {
+ name: 'hs_task_body',
+ type: 'string',
+ required: false,
+ description: `Updated notes for the task`,
+ },
+ {
+ name: 'hs_task_status',
+ type: 'string',
+ required: false,
+ description: `New status to set for the task`,
+ },
],
},
{
name: 'hubspot_task_create',
description: `Create a new task in HubSpot CRM. Tasks can be assigned to owners and associated with contacts, companies, or deals.`,
params: [
- { name: 'hs_task_subject', type: 'string', required: true, description: `Subject or title of the task` },
- { name: 'hs_timestamp', type: 'string', required: true, description: `Due date and time for the task (ISO 8601 format)` },
- { name: 'hs_task_body', type: 'string', required: false, description: `Notes or description for the task` },
- { name: 'hs_task_priority', type: 'string', required: false, description: `Priority level of the task` },
- { name: 'hs_task_status', type: 'string', required: false, description: `Status of the task` },
+ {
+ name: 'hs_task_subject',
+ type: 'string',
+ required: true,
+ description: `Subject or title of the task`,
+ },
+ {
+ name: 'hs_timestamp',
+ type: 'string',
+ required: true,
+ description: `Due date and time for the task (ISO 8601 format)`,
+ },
+ {
+ name: 'hs_task_body',
+ type: 'string',
+ required: false,
+ description: `Notes or description for the task`,
+ },
+ {
+ name: 'hs_task_priority',
+ type: 'string',
+ required: false,
+ description: `Priority level of the task`,
+ },
+ {
+ name: 'hs_task_status',
+ type: 'string',
+ required: false,
+ description: `Status of the task`,
+ },
{ name: 'hs_task_type', type: 'string', required: false, description: `Type of task` },
],
},
@@ -706,89 +1891,229 @@ export const tools: Tool[] = [
name: 'hubspot_tasks_search',
description: `Search HubSpot tasks using filters and full-text search. Returns tasks with their subject, status, due date, and priority.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across task properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across task properties`,
+ },
],
},
{
name: 'hubspot_ticket_create',
description: `Create a new support ticket in HubSpot. Use hubspot_deal_pipelines_list with object type 'tickets' to find valid pipeline and stage IDs.`,
params: [
- { name: 'hs_pipeline_stage', type: 'string', required: true, description: `Pipeline stage ID for the ticket` },
+ {
+ name: 'hs_pipeline_stage',
+ type: 'string',
+ required: true,
+ description: `Pipeline stage ID for the ticket`,
+ },
{ name: 'subject', type: 'string', required: true, description: `Subject of the ticket` },
- { name: 'content', type: 'string', required: false, description: `Detailed description of the support issue` },
- { name: 'hs_pipeline', type: 'string', required: false, description: `Pipeline ID for the ticket (defaults to '0' for the default pipeline)` },
- { name: 'hs_ticket_priority', type: 'string', required: false, description: `Priority level of the ticket` },
+ {
+ name: 'content',
+ type: 'string',
+ required: false,
+ description: `Detailed description of the support issue`,
+ },
+ {
+ name: 'hs_pipeline',
+ type: 'string',
+ required: false,
+ description: `Pipeline ID for the ticket (defaults to '0' for the default pipeline)`,
+ },
+ {
+ name: 'hs_ticket_priority',
+ type: 'string',
+ required: false,
+ description: `Priority level of the ticket`,
+ },
],
},
{
name: 'hubspot_ticket_get',
description: `Retrieve details of a specific HubSpot support ticket by ticket ID.`,
params: [
- { name: 'ticket_id', type: 'string', required: true, description: `ID of the ticket to retrieve` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
+ {
+ name: 'ticket_id',
+ type: 'string',
+ required: true,
+ description: `ID of the ticket to retrieve`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
],
},
{
name: 'hubspot_ticket_update',
description: `Update an existing HubSpot support ticket by ticket ID. Provide any fields to update.`,
params: [
- { name: 'ticket_id', type: 'string', required: true, description: `ID of the ticket to update` },
- { name: 'content', type: 'string', required: false, description: `Updated description of the support issue` },
- { name: 'hs_pipeline', type: 'string', required: false, description: `Updated pipeline ID for the ticket` },
- { name: 'hs_pipeline_stage', type: 'string', required: false, description: `Updated pipeline stage ID for the ticket` },
- { name: 'hs_ticket_priority', type: 'string', required: false, description: `Updated priority level of the ticket` },
- { name: 'subject', type: 'string', required: false, description: `Updated subject of the ticket` },
+ {
+ name: 'ticket_id',
+ type: 'string',
+ required: true,
+ description: `ID of the ticket to update`,
+ },
+ {
+ name: 'content',
+ type: 'string',
+ required: false,
+ description: `Updated description of the support issue`,
+ },
+ {
+ name: 'hs_pipeline',
+ type: 'string',
+ required: false,
+ description: `Updated pipeline ID for the ticket`,
+ },
+ {
+ name: 'hs_pipeline_stage',
+ type: 'string',
+ required: false,
+ description: `Updated pipeline stage ID for the ticket`,
+ },
+ {
+ name: 'hs_ticket_priority',
+ type: 'string',
+ required: false,
+ description: `Updated priority level of the ticket`,
+ },
+ {
+ name: 'subject',
+ type: 'string',
+ required: false,
+ description: `Updated subject of the ticket`,
+ },
],
},
{
name: 'hubspot_tickets_batch_archive',
description: `Archive (soft delete) a ticket in HubSpot CRM using the batch archive API. Archived records are hidden from the UI but can be restored.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to archive. Each item has an 'id' field.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to archive. Each item has an 'id' field.`,
+ },
],
},
{
name: 'hubspot_tickets_batch_create',
description: `Create one or more tickets in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to create in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to create in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_tickets_batch_read',
description: `Retrieve a ticket record from HubSpot CRM using the batch read API. Returns the specified properties for the record.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of record IDs to read. Each item has an 'id' field.` },
- { name: 'properties', type: 'string', required: false, description: `JSON array of property names to return. Omit to get default properties.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of record IDs to read. Each item has an 'id' field.`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `JSON array of property names to return. Omit to get default properties.`,
+ },
],
},
{
name: 'hubspot_tickets_batch_update',
description: `Update one or more tickets in HubSpot using the batch API. Pass a list of records with IDs — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to update in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to update in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_tickets_batch_upsert',
description: `Upsert one or more tickets in HubSpot using the batch API. Pass a list of records — up to 100 per call.`,
params: [
- { name: 'inputs', type: 'string', required: true, description: `JSON array of objects to upsert in HubSpot batch format.` },
+ {
+ name: 'inputs',
+ type: 'string',
+ required: true,
+ description: `JSON array of objects to upsert in HubSpot batch format.`,
+ },
],
},
{
name: 'hubspot_tickets_search',
description: `Search HubSpot support tickets using filters and full-text search. Returns matching tickets with their properties.`,
params: [
- { name: 'after', type: 'string', required: false, description: `Pagination offset to get results starting from a specific position` },
- { name: 'filterGroups', type: 'string', required: false, description: `JSON string containing filter groups for advanced filtering` },
- { name: 'limit', type: 'number', required: false, description: `Number of results to return per page (max 100)` },
- { name: 'properties', type: 'string', required: false, description: `Comma-separated list of properties to include in the response` },
- { name: 'query', type: 'string', required: false, description: `Full-text search term across ticket properties` },
+ {
+ name: 'after',
+ type: 'string',
+ required: false,
+ description: `Pagination offset to get results starting from a specific position`,
+ },
+ {
+ name: 'filterGroups',
+ type: 'string',
+ required: false,
+ description: `JSON string containing filter groups for advanced filtering`,
+ },
+ {
+ name: 'limit',
+ type: 'number',
+ required: false,
+ description: `Number of results to return per page (max 100)`,
+ },
+ {
+ name: 'properties',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of properties to include in the response`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Full-text search term across ticket properties`,
+ },
],
},
]
diff --git a/src/data/agent-connectors/otteraimcp.ts b/src/data/agent-connectors/otteraimcp.ts
new file mode 100644
index 000000000..90fd5010f
--- /dev/null
+++ b/src/data/agent-connectors/otteraimcp.ts
@@ -0,0 +1,87 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'otteraimcp_fetch',
+ description: `Retrieve the full transcript and metadata for a single OtterAI meeting by its ID.`,
+ params: [
+ {
+ name: 'id',
+ type: 'string',
+ required: true,
+ description: `The unique OtterAI meeting ID to fetch. Get it from the search tool.`,
+ },
+ ],
+ },
+ {
+ name: 'otteraimcp_get_user_info',
+ description: `Return the name and email of the currently authenticated OtterAI user.`,
+ params: [],
+ },
+ {
+ name: 'otteraimcp_search',
+ description: `Search OtterAI meetings by keyword, title, attendee, folder, date range, or transcript content.`,
+ params: [
+ {
+ name: 'query',
+ type: 'string',
+ required: true,
+ description: `Full-text search query to find meetings by title or transcript content.`,
+ },
+ {
+ name: 'attended_by',
+ type: 'string',
+ required: false,
+ description: `Filter meetings attended by this email address.`,
+ },
+ {
+ name: 'channel_name',
+ type: 'string',
+ required: false,
+ description: `Filter meetings belonging to this channel or workspace.`,
+ },
+ {
+ name: 'created_after',
+ type: 'string',
+ required: false,
+ description: `Return only meetings created after this date (YYYY-MM-DD format, e.g. 2025-01-01).`,
+ },
+ {
+ name: 'created_before',
+ type: 'string',
+ required: false,
+ description: `Return only meetings created before this date (YYYY-MM-DD format, e.g. 2025-12-31).`,
+ },
+ {
+ name: 'folder_name',
+ type: 'string',
+ required: false,
+ description: `Filter meetings stored in this folder name.`,
+ },
+ {
+ name: 'include_shared_meetings',
+ type: 'string',
+ required: false,
+ description: `Set to true to include meetings shared with you by others.`,
+ },
+ {
+ name: 'keywords_in_transcript',
+ type: 'string',
+ required: false,
+ description: `Space-separated keywords that must appear in the transcript.`,
+ },
+ {
+ name: 'title_contains',
+ type: 'string',
+ required: false,
+ description: `Filter meetings whose title contains this substring.`,
+ },
+ {
+ name: 'username',
+ type: 'string',
+ required: false,
+ description: `Filter meetings by the Otter.ai username (email) of the meeting owner.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/revealedaimcp.ts b/src/data/agent-connectors/revealedaimcp.ts
new file mode 100644
index 000000000..2124ae392
--- /dev/null
+++ b/src/data/agent-connectors/revealedaimcp.ts
@@ -0,0 +1,223 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'revealedaimcp_get_account',
+ description: `Retrieve the full account snapshot including company signals, people, summaries, and metadata. Use Get Account Brief for lightweight overviews when scanning many accounts.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_get_account_brief',
+ description: `Retrieve a compact account overview from the latest snapshot including change summary, signal counts, and top signals by impact.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_get_company_signal',
+ description: `Retrieve all snapshot rows for a specific company signal by its data element slug. Use List Tracked Signals to discover available signal slugs.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ {
+ name: 'signal_slug',
+ type: 'string',
+ required: true,
+ description: `Data element slug for the company signal. Obtain from List Tracked Signals.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_get_person',
+ description: `Retrieve the full person record from the latest snapshot. Provide exactly one of persona (slug), name (full name), or person_id.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Person's full name as shown in List People. Merges all persona rows for that person. Mutually exclusive with persona.`,
+ },
+ {
+ name: 'person_id',
+ type: 'string',
+ required: false,
+ description: `Deprecated alias for persona slug. Use persona or name instead.`,
+ },
+ {
+ name: 'persona',
+ type: 'string',
+ required: false,
+ description: `Persona slug (e.g. chief-nursing-officer). Obtain from List Personas or List People.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_list_accounts',
+ description: `List accounts in the workspace with lifecycle status and last reviewed date. Call this first to obtain account IDs required by all other account-scoped tools.`,
+ params: [
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: false,
+ description: `Case-insensitive substring to filter account names.`,
+ },
+ {
+ name: 'status',
+ type: 'string',
+ required: false,
+ description: `Lifecycle status filter. Accepted values: active, paused, all.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_list_people',
+ description: `List people at an account from the latest snapshot, deduplicated by name. Optionally filter by persona slug substring or change type.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ {
+ name: 'change_type',
+ type: 'string',
+ required: false,
+ description: `Filter people by their latest change type. Accepted values: new, departed, role_change, any.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ {
+ name: 'persona',
+ type: 'string',
+ required: false,
+ description: `Persona slug (e.g. chief-nursing-officer). Obtain from List Personas or List People.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_list_personas',
+ description: `List buyer persona slugs present in an account snapshot with counts and human-readable names. Use slugs with Get Person.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_list_tracked_signals',
+ description: `List persona slugs, people signal slugs, and company signal slugs configured for this workspace. Use these slugs with Get Person and Get Company Signal.`,
+ params: [],
+ },
+ {
+ name: 'revealedaimcp_mcp_status',
+ description: `Check MCP connectivity and return workspace name, OAuth client ID, and granted token scopes. Call after connecting to verify the session.`,
+ params: [],
+ },
+ {
+ name: 'revealedaimcp_plan_usage',
+ description: `Retrieve billing plan limits and current account usage counts for the workspace. Requires admin:read scope.`,
+ params: [],
+ },
+ {
+ name: 'revealedaimcp_recent_changes',
+ description: `Retrieve what changed since the last finalized snapshot: change summary, person changes, and signal events. Use for meeting prep and what-is-new questions.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ {
+ name: 'since',
+ type: 'string',
+ required: false,
+ description: `Reserved for future time filtering. Currently unused.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_recommended_actions',
+ description: `Retrieve outreach-oriented actions derived from person changes and signal events, including target, rationale, and a draft message.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: true,
+ description: `Account UUID from list_accounts. Obtain by calling List Accounts first.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ {
+ name: 'person_id',
+ type: 'string',
+ required: false,
+ description: `Deprecated alias for persona slug. Use persona or name instead.`,
+ },
+ {
+ name: 'persona',
+ type: 'string',
+ required: false,
+ description: `Persona slug (e.g. chief-nursing-officer). Obtain from List Personas or List People.`,
+ },
+ ],
+ },
+ {
+ name: 'revealedaimcp_top_actions',
+ description: `Retrieve ranked recommended actions across all active accounts in the workspace. Use when the user asks for next steps without specifying an account.`,
+ params: [
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/salesloft.ts b/src/data/agent-connectors/salesloft.ts
new file mode 100644
index 000000000..dc14aa1e7
--- /dev/null
+++ b/src/data/agent-connectors/salesloft.ts
@@ -0,0 +1,2993 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'salesloft_accounts_create',
+ description: `Create a new account record in Salesloft. Both name and domain are required; domain must be unique on the team.`,
+ params: [
+ {
+ name: 'domain',
+ type: 'string',
+ required: true,
+ description: `Domain of the account (e.g. acmecorp.com). Used as the unique identifier for the account.`,
+ },
+ { name: 'name', type: 'string', required: true, description: `Name of the account/company` },
+ {
+ name: 'account_tier_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the Account Tier for this account`,
+ },
+ {
+ name: 'city',
+ type: 'string',
+ required: false,
+ description: `City where the account is located`,
+ },
+ {
+ name: 'company_stage_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the CompanyStage assigned to this account`,
+ },
+ {
+ name: 'company_type',
+ type: 'string',
+ required: false,
+ description: `Type of company (e.g. prospect, customer, partner)`,
+ },
+ {
+ name: 'conversational_name',
+ type: 'string',
+ required: false,
+ description: `Conversational name of the company (e.g. Acme instead of Acme Corporation)`,
+ },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Country where the account is located`,
+ },
+ {
+ name: 'crm_id',
+ type: 'string',
+ required: false,
+ description: `CRM record ID for this account. Requires Salesforce.`,
+ },
+ {
+ name: 'crm_id_type',
+ type: 'string',
+ required: false,
+ description: `The CRM that the provided crm_id is for. Must be: salesforce`,
+ },
+ {
+ name: 'custom_fields',
+ type: 'object',
+ required: false,
+ description: `Custom fields defined by the team. Only fields with values appear in the API.`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Description of the account`,
+ },
+ {
+ name: 'do_not_contact',
+ type: 'boolean',
+ required: false,
+ description: `If true, the account will be marked as do not contact`,
+ },
+ { name: 'founded', type: 'string', required: false, description: `Date or year of founding` },
+ { name: 'industry', type: 'string', required: false, description: `Industry of the account` },
+ {
+ name: 'linkedin_url',
+ type: 'string',
+ required: false,
+ description: `LinkedIn page URL for the account`,
+ },
+ {
+ name: 'locale',
+ type: 'string',
+ required: false,
+ description: `Time locale for the account`,
+ },
+ {
+ name: 'owner_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the user who owns this account`,
+ },
+ {
+ name: 'phone',
+ type: 'string',
+ required: false,
+ description: `Phone number for the account`,
+ },
+ {
+ name: 'postal_code',
+ type: 'string',
+ required: false,
+ description: `Postal/ZIP code of the account`,
+ },
+ {
+ name: 'revenue_range',
+ type: 'string',
+ required: false,
+ description: `Revenue range of the account`,
+ },
+ {
+ name: 'size',
+ type: 'string',
+ required: false,
+ description: `Number of employees at the account`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `State or region where the account is located`,
+ },
+ {
+ name: 'street',
+ type: 'string',
+ required: false,
+ description: `Street address of the account`,
+ },
+ {
+ name: 'tags',
+ type: 'array',
+ required: false,
+ description: `All tags applied to this account`,
+ },
+ {
+ name: 'twitter_handle',
+ type: 'string',
+ required: false,
+ description: `Twitter handle for the account (without @)`,
+ },
+ {
+ name: 'website',
+ type: 'string',
+ required: false,
+ description: `Website URL of the account`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_accounts_delete',
+ description: `Delete an account from Salesloft by its ID. This operation is not reversible without contacting support.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the account to delete`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_accounts_get',
+ description: `Fetch a single account record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the account to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_accounts_list',
+ description: `Fetch multiple account records from Salesloft. The records can be filtered by domain, owner, tags, timestamps, and more, and paged and sorted according to the respective parameters.`,
+ params: [
+ {
+ name: 'account_stage_id',
+ type: 'integer',
+ required: false,
+ description: `Filter accounts by account stage ID`,
+ },
+ {
+ name: 'account_tier_id',
+ type: 'integer',
+ required: false,
+ description: `Filter accounts by account tier ID`,
+ },
+ {
+ name: 'account_type',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by type (e.g. prospect, customer, partner)`,
+ },
+ {
+ name: 'archived',
+ type: 'boolean',
+ required: false,
+ description: `Filter to return archived accounts only`,
+ },
+ { name: 'city', type: 'string', required: false, description: `Filter accounts by city` },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by country`,
+ },
+ {
+ name: 'created_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter accounts created after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'created_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter accounts created at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'created_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter accounts created before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'created_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter accounts created at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'crm_id',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by CRM record ID`,
+ },
+ {
+ name: 'domain',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by domain. Domains are unique and lowercase.`,
+ },
+ {
+ name: 'has_open_opportunity',
+ type: 'boolean',
+ required: false,
+ description: `Filter to accounts that have an open opportunity`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific account IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'industry',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by industry`,
+ },
+ {
+ name: 'last_contacted_gt',
+ type: 'string',
+ required: false,
+ description: `Filter accounts last contacted after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'last_contacted_gte',
+ type: 'string',
+ required: false,
+ description: `Filter accounts last contacted at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'last_contacted_lt',
+ type: 'string',
+ required: false,
+ description: `Filter accounts last contacted before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'last_contacted_lte',
+ type: 'string',
+ required: false,
+ description: `Filter accounts last contacted at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'locales',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by locale. Comma-separated list of locales.`,
+ },
+ { name: 'name', type: 'string', required: false, description: `Filter accounts by name` },
+ {
+ name: 'owner_crm_id',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by the CRM ID of the owner`,
+ },
+ {
+ name: 'owner_id',
+ type: 'integer',
+ required: false,
+ description: `Filter accounts by owner user ID`,
+ },
+ {
+ name: 'owner_is_active',
+ type: 'boolean',
+ required: false,
+ description: `Filter accounts whose owner is active (true) or inactive (false)`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'prospector_engagement_level',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by prospector engagement level`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at, last_contacted_at, account_stage, account_stage_name, account_tier, account_tier_name, name, counts_people, prospector_engagement_score. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by state or region`,
+ },
+ { name: 'tag', type: 'string', required: false, description: `Filter accounts by tag name` },
+ {
+ name: 'tag_id',
+ type: 'integer',
+ required: false,
+ description: `Filter accounts by tag ID`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter accounts updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter accounts updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter accounts updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter accounts updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'website',
+ type: 'string',
+ required: false,
+ description: `Filter accounts by website URL`,
+ },
+ {
+ name: 'your_related_accounts_active',
+ type: 'boolean',
+ required: false,
+ description: `Filter to accounts where you have an active relationship`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_accounts_update',
+ description: `Update an existing account record in Salesloft by its ID.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the account to update`,
+ },
+ {
+ name: 'account_tier_id',
+ type: 'integer',
+ required: false,
+ description: `Updated Account Tier ID for this account`,
+ },
+ {
+ name: 'archived',
+ type: 'boolean',
+ required: false,
+ description: `Whether this account should be archived. Setting to true sets archived_at to now; setting to false clears it.`,
+ },
+ { name: 'city', type: 'string', required: false, description: `Updated city of the account` },
+ {
+ name: 'company_stage_id',
+ type: 'integer',
+ required: false,
+ description: `Updated CompanyStage ID for this account`,
+ },
+ {
+ name: 'company_type',
+ type: 'string',
+ required: false,
+ description: `Updated type of company`,
+ },
+ {
+ name: 'conversational_name',
+ type: 'string',
+ required: false,
+ description: `Updated conversational name of the company`,
+ },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Updated country of the account`,
+ },
+ {
+ name: 'crm_id',
+ type: 'string',
+ required: false,
+ description: `Updated CRM record ID for this account`,
+ },
+ {
+ name: 'crm_id_type',
+ type: 'string',
+ required: false,
+ description: `The CRM that the provided crm_id is for. Must be: salesforce`,
+ },
+ {
+ name: 'custom_fields',
+ type: 'object',
+ required: false,
+ description: `Updated custom fields for the account`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Updated description of the account`,
+ },
+ {
+ name: 'do_not_contact',
+ type: 'boolean',
+ required: false,
+ description: `Updated do not contact status of the account`,
+ },
+ {
+ name: 'domain',
+ type: 'string',
+ required: false,
+ description: `Updated domain of the account`,
+ },
+ {
+ name: 'founded',
+ type: 'string',
+ required: false,
+ description: `Updated date or year of founding`,
+ },
+ {
+ name: 'industry',
+ type: 'string',
+ required: false,
+ description: `Updated industry of the account`,
+ },
+ {
+ name: 'linkedin_url',
+ type: 'string',
+ required: false,
+ description: `Updated LinkedIn page URL for the account`,
+ },
+ {
+ name: 'locale',
+ type: 'string',
+ required: false,
+ description: `Updated time locale for the account`,
+ },
+ {
+ name: 'name',
+ type: 'string',
+ required: false,
+ description: `Updated name of the account/company`,
+ },
+ {
+ name: 'owner_id',
+ type: 'integer',
+ required: false,
+ description: `Updated owner user ID for the account`,
+ },
+ {
+ name: 'phone',
+ type: 'string',
+ required: false,
+ description: `Updated phone number for the account`,
+ },
+ {
+ name: 'postal_code',
+ type: 'string',
+ required: false,
+ description: `Updated postal/ZIP code of the account`,
+ },
+ {
+ name: 'revenue_range',
+ type: 'string',
+ required: false,
+ description: `Updated revenue range of the account`,
+ },
+ {
+ name: 'size',
+ type: 'string',
+ required: false,
+ description: `Updated number of employees at the account`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `Updated state or region of the account`,
+ },
+ {
+ name: 'street',
+ type: 'string',
+ required: false,
+ description: `Updated street address of the account`,
+ },
+ {
+ name: 'tags',
+ type: 'array',
+ required: false,
+ description: `Updated tags applied to this account`,
+ },
+ {
+ name: 'twitter_handle',
+ type: 'string',
+ required: false,
+ description: `Updated Twitter handle for the account`,
+ },
+ {
+ name: 'website',
+ type: 'string',
+ required: false,
+ description: `Updated website URL of the account`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_actions_get',
+ description: `Fetch a single action record from Salesloft by its ID. Actions represent individual cadence steps that are due to be performed.`,
+ params: [
+ {
+ name: 'action_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the action to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_actions_list',
+ description: `Fetch multiple action records from Salesloft. Actions are individual steps within cadences that are due to be performed. The records can be filtered, paged, and sorted.`,
+ params: [
+ {
+ name: 'cadence_id',
+ type: 'integer',
+ required: false,
+ description: `Filter actions by cadence ID`,
+ },
+ {
+ name: 'due_on_gt',
+ type: 'string',
+ required: false,
+ description: `Filter actions with due date after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'due_on_gte',
+ type: 'string',
+ required: false,
+ description: `Filter actions with due date at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'due_on_lt',
+ type: 'string',
+ required: false,
+ description: `Filter actions with due date before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'due_on_lte',
+ type: 'string',
+ required: false,
+ description: `Filter actions with due date at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific action IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'multitouch_group_id',
+ type: 'integer',
+ required: false,
+ description: `Filter actions by multitouch group ID`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: false,
+ description: `Filter actions by associated person ID`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'step_id',
+ type: 'integer',
+ required: false,
+ description: `Filter actions by cadence step ID`,
+ },
+ {
+ name: 'type',
+ type: 'string',
+ required: false,
+ description: `Filter actions by type (e.g. email, phone, other)`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter actions updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter actions updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter actions updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter actions updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'user_guid',
+ type: 'string',
+ required: false,
+ description: `Filter actions by user GUID`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_cadence_memberships_create',
+ description: `Add a person to a cadence by creating a cadence membership in Salesloft. person_id and cadence_id are required and must be visible to the authenticated user.`,
+ params: [
+ {
+ name: 'cadence_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the cadence to add the person to`,
+ },
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: true,
+ description: `The ID of the person to add to the cadence`,
+ },
+ {
+ name: 'step_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the step on which the person should start the cadence. Defaults to the first step.`,
+ },
+ {
+ name: 'task_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the task that causes this action. The task will be completed automatically on success.`,
+ },
+ {
+ name: 'user_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the user to create the cadence membership for. The associated cadence must be owned by the user or be a team cadence.`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_cadence_memberships_delete',
+ description: `Remove a person from a cadence by deleting their cadence membership in Salesloft.`,
+ params: [
+ {
+ name: 'membership_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the cadence membership to delete`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_cadence_memberships_get',
+ description: `Fetch a single cadence membership record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'membership_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the cadence membership to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_cadence_memberships_list',
+ description: `Fetch multiple cadence membership records from Salesloft. A cadence membership is the association between a person and their current and historical time on a cadence.`,
+ params: [
+ {
+ name: 'cadence_id',
+ type: 'integer',
+ required: false,
+ description: `Filter memberships by cadence ID`,
+ },
+ {
+ name: 'currently_on_cadence',
+ type: 'boolean',
+ required: false,
+ description: `Filter to memberships where the person is currently active on the cadence`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific membership IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: false,
+ description: `Filter memberships by person ID`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: added_at, updated_at. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter memberships updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter memberships updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter memberships updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter memberships updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_cadences_get',
+ description: `Fetch a single cadence record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'cadence_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the cadence to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_cadences_list',
+ description: `Fetch multiple cadence records from Salesloft. The records can be filtered, paged, and sorted according to the respective parameters.`,
+ params: [
+ {
+ name: 'archived',
+ type: 'boolean',
+ required: false,
+ description: `Filter to return archived cadences`,
+ },
+ {
+ name: 'group_ids',
+ type: 'string',
+ required: false,
+ description: `Filter cadences by group IDs. Comma-separated list or JSON array string.`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific cadence IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ { name: 'name', type: 'string', required: false, description: `Filter cadences by name` },
+ {
+ name: 'override_contact_restrictions',
+ type: 'boolean',
+ required: false,
+ description: `Override contact restrictions when filtering cadences`,
+ },
+ {
+ name: 'owned_by_guid',
+ type: 'string',
+ required: false,
+ description: `Filter cadences by owner GUID`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'pending_actions_assigned_to',
+ type: 'string',
+ required: false,
+ description: `Filter cadences by the user GUID that pending actions are assigned to`,
+ },
+ {
+ name: 'people_addable',
+ type: 'boolean',
+ required: false,
+ description: `Filter to cadences that people can be added to`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'shared',
+ type: 'boolean',
+ required: false,
+ description: `Filter to cadences that are shared`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at, name. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'tag_ids',
+ type: 'string',
+ required: false,
+ description: `Filter cadences by tag IDs. Comma-separated list of tag IDs.`,
+ },
+ {
+ name: 'team_cadence',
+ type: 'boolean',
+ required: false,
+ description: `Filter by team cadences (true) or personal cadences (false)`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter cadences updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter cadences updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter cadences updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter cadences updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_calls_get',
+ description: `Fetch a single call activity record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'call_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the call to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_calls_list',
+ description: `Fetch multiple call activity records from Salesloft. The records can be filtered by person, user, sentiment, disposition, and timestamps, and paged and sorted.`,
+ params: [
+ {
+ name: 'connected',
+ type: 'boolean',
+ required: false,
+ description: `Filter to calls where a connection was made`,
+ },
+ {
+ name: 'created_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter calls created after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'created_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter calls created at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'created_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter calls created before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'created_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter calls created at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'disposition',
+ type: 'string',
+ required: false,
+ description: `Filter calls by disposition (e.g. answered, voicemail, no_answer)`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific call IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: false,
+ description: `Filter calls by associated person ID`,
+ },
+ {
+ name: 'positive',
+ type: 'boolean',
+ required: false,
+ description: `Filter to calls marked as positive`,
+ },
+ {
+ name: 'sentiment',
+ type: 'string',
+ required: false,
+ description: `Filter calls by sentiment (e.g. positive, neutral, negative)`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter calls updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter calls updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter calls updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter calls updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'user_guid',
+ type: 'string',
+ required: false,
+ description: `Filter calls by user GUID`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_email_templates_get',
+ description: `Fetch a single email template record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'email_template_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the email template to fetch`,
+ },
+ {
+ name: 'include_signature',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include the email signature in the response`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_email_templates_list',
+ description: `Fetch multiple email template records from Salesloft. The records can be filtered by title, tag, group, cadence, and timestamps, and paged and sorted.`,
+ params: [
+ {
+ name: 'cadence_id',
+ type: 'integer',
+ required: false,
+ description: `Filter email templates by cadence ID`,
+ },
+ {
+ name: 'filter_by_owner',
+ type: 'boolean',
+ required: false,
+ description: `Filter to return only templates owned by the authenticated user`,
+ },
+ {
+ name: 'group_id',
+ type: 'integer',
+ required: false,
+ description: `Filter email templates by group ID`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific email template IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_archived_templates',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include archived templates in the results`,
+ },
+ {
+ name: 'include_cadence_templates',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include cadence-specific templates in the results`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'linked_to_team_template',
+ type: 'boolean',
+ required: false,
+ description: `Filter to return only templates linked to a team template`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'search',
+ type: 'string',
+ required: false,
+ description: `Filter email templates by title or subject`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at, last_used_at. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'tag',
+ type: 'string',
+ required: false,
+ description: `Filter email templates by tag name`,
+ },
+ {
+ name: 'tag_ids',
+ type: 'string',
+ required: false,
+ description: `Filter email templates by tag IDs. Comma-separated list of tag IDs.`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter templates updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter templates updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter templates updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter templates updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_emails_get',
+ description: `Fetch a single email activity record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'email_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the email to fetch`,
+ },
+ {
+ name: 'scoped_fields',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of fields to scope the response to`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_emails_list',
+ description: `Fetch multiple email activity records from Salesloft. The records can be filtered by person, account, cadence, status, timestamps, and engagement signals, and paged and sorted.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by associated account ID`,
+ },
+ {
+ name: 'action_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by action ID`,
+ },
+ {
+ name: 'bounced',
+ type: 'boolean',
+ required: false,
+ description: `Filter to only bounced emails`,
+ },
+ {
+ name: 'cadence_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by cadence ID`,
+ },
+ {
+ name: 'crm_activity_id',
+ type: 'string',
+ required: false,
+ description: `Filter emails by CRM activity ID`,
+ },
+ {
+ name: 'draft_with_ai',
+ type: 'boolean',
+ required: false,
+ description: `Filter to emails drafted with AI assistance`,
+ },
+ {
+ name: 'email_addresses',
+ type: 'string',
+ required: false,
+ description: `Filter emails by recipient email address(es). Comma-separated list.`,
+ },
+ {
+ name: 'email_template_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by the email template used`,
+ },
+ {
+ name: 'has_clicks',
+ type: 'boolean',
+ required: false,
+ description: `Filter to emails that have link clicks`,
+ },
+ {
+ name: 'has_replies',
+ type: 'boolean',
+ required: false,
+ description: `Filter to emails that have replies`,
+ },
+ {
+ name: 'has_views',
+ type: 'boolean',
+ required: false,
+ description: `Filter to emails that have been viewed/opened`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific email IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'one_off',
+ type: 'boolean',
+ required: false,
+ description: `Filter to one-off emails (not part of a cadence)`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by associated person ID`,
+ },
+ {
+ name: 'personalization',
+ type: 'string',
+ required: false,
+ description: `Filter emails by personalization value`,
+ },
+ {
+ name: 'scoped_fields',
+ type: 'string',
+ required: false,
+ description: `Comma-separated list of fields to scope the response to`,
+ },
+ {
+ name: 'sent_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter emails sent after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'sent_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter emails sent at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'sent_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter emails sent before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'sent_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter emails sent at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: updated_at, recipient, send_time, account, subject, views, clicks, replies. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ { name: 'status', type: 'string', required: false, description: `Filter emails by status` },
+ {
+ name: 'step_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by cadence step ID`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter emails updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter emails updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter emails updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter emails updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'user_id',
+ type: 'integer',
+ required: false,
+ description: `Filter emails by user ID`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_notes_create',
+ description: `Create a new note in Salesloft. Notes require content, an associated object type (person or account), and the ID of that object. Optionally link the note to a call.`,
+ params: [
+ {
+ name: 'associated_with_id',
+ type: 'integer',
+ required: true,
+ description: `ID of the person or account to associate the note with`,
+ },
+ {
+ name: 'associated_with_type',
+ type: 'string',
+ required: true,
+ description: `Type of object the note is associated with. Accepted values: person, account`,
+ },
+ {
+ name: 'content',
+ type: 'string',
+ required: true,
+ description: `The text content of the note`,
+ },
+ {
+ name: 'call_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the call to associate this note with. The call cannot already have a note.`,
+ },
+ {
+ name: 'crm_activity_metadata',
+ type: 'object',
+ required: false,
+ description: `JSONB metadata for CRM activity tracking`,
+ },
+ {
+ name: 'skip_crm_sync',
+ type: 'boolean',
+ required: false,
+ description: `If true, the note will not be synced to the CRM`,
+ },
+ {
+ name: 'subject',
+ type: 'string',
+ required: false,
+ description: `The subject of the note's CRM activity. Defaults to 'Note'.`,
+ },
+ {
+ name: 'user_guid',
+ type: 'string',
+ required: false,
+ description: `GUID of the user to create the note for. Only team admins may create notes on behalf of other users. Defaults to the requesting user.`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_notes_delete',
+ description: `Delete a note from Salesloft by its ID. Only notes owned by the authorized account can be deleted.`,
+ params: [
+ {
+ name: 'note_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the note to delete`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_notes_get',
+ description: `Fetch a single note record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'note_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the note to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_notes_list',
+ description: `Fetch multiple note records from Salesloft. The records can be filtered by associated object, timestamps, and IDs, and paged and sorted.`,
+ params: [
+ {
+ name: 'associated_with_id',
+ type: 'integer',
+ required: false,
+ description: `Filter notes by the ID of the associated person or account. associated_with_type must also be present.`,
+ },
+ {
+ name: 'associated_with_type',
+ type: 'string',
+ required: false,
+ description: `Type of the associated object. Accepted values: person, account`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific note IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Limit the paging counts returned in the response metadata`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter notes updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter notes updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter notes updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter notes updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_notes_update',
+ description: `Update an existing note in Salesloft by its ID.`,
+ params: [
+ {
+ name: 'content',
+ type: 'string',
+ required: true,
+ description: `The text content of the note`,
+ },
+ {
+ name: 'note_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the note to update`,
+ },
+ {
+ name: 'call_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the call to associate this note with. If the note is already associated to a call, it will become associated to the requested call.`,
+ },
+ {
+ name: 'crm_activity_metadata',
+ type: 'object',
+ required: false,
+ description: `JSONB metadata for CRM activity tracking`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_people_create',
+ description: `Create a new person record in Salesloft. Either email_address or phone and last_name must be provided as a unique lookup on the team.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the Account to link this person to`,
+ },
+ {
+ name: 'autotag_date',
+ type: 'boolean',
+ required: false,
+ description: `Whether to add today's date as a tag to this person in Y-m-d format. Default is false.`,
+ },
+ {
+ name: 'city',
+ type: 'string',
+ required: false,
+ description: `City where the person is located`,
+ },
+ {
+ name: 'contact_restrictions',
+ type: 'array',
+ required: false,
+ description: `Communication methods to prevent for this person. Accepted values: call, email, message`,
+ },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Country where the person is located`,
+ },
+ {
+ name: 'crm_id',
+ type: 'string',
+ required: false,
+ description: `ID of the person in your external CRM. Requires crm_id_type. Salesforce IDs must be exactly 18 characters and a Lead (00Q) or Contact (003) object.`,
+ },
+ {
+ name: 'crm_id_type',
+ type: 'string',
+ required: false,
+ description: `The CRM that the provided crm_id is for. Must be one of: salesforce`,
+ },
+ {
+ name: 'custom_fields',
+ type: 'object',
+ required: false,
+ description: `Custom fields defined by the team for this person`,
+ },
+ {
+ name: 'do_not_contact',
+ type: 'boolean',
+ required: false,
+ description: `If true, prevents this person from being called, emailed, or added to a cadence`,
+ },
+ {
+ name: 'email_address',
+ type: 'string',
+ required: false,
+ description: `Email address of the person. Required if phone and last_name are not provided.`,
+ },
+ {
+ name: 'eu_resident',
+ type: 'boolean',
+ required: false,
+ description: `Whether this person is a European Resident for GDPR compliance`,
+ },
+ {
+ name: 'external_source',
+ type: 'string',
+ required: false,
+ description: `The name of the external source from where this person was imported`,
+ },
+ {
+ name: 'first_name',
+ type: 'string',
+ required: false,
+ description: `First name of the person`,
+ },
+ {
+ name: 'home_phone',
+ type: 'string',
+ required: false,
+ description: `Home phone number without formatting`,
+ },
+ {
+ name: 'import_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the Import this person is a part of`,
+ },
+ {
+ name: 'job_seniority',
+ type: 'string',
+ required: false,
+ description: `Job seniority of the person. Accepted values: director, executive, individual_contributor, manager, vice_president, unknown`,
+ },
+ {
+ name: 'last_name',
+ type: 'string',
+ required: false,
+ description: `Last name of the person. Required together with phone if email_address is not provided.`,
+ },
+ {
+ name: 'linkedin_url',
+ type: 'string',
+ required: false,
+ description: `LinkedIn profile URL of the person`,
+ },
+ { name: 'locale', type: 'string', required: false, description: `Time locale of the person` },
+ {
+ name: 'mobile_phone',
+ type: 'string',
+ required: false,
+ description: `Mobile phone number without formatting`,
+ },
+ {
+ name: 'owner_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the User that owns this person`,
+ },
+ {
+ name: 'person_company_industry',
+ type: 'string',
+ required: false,
+ description: `Company industry specific to this person, unrelated to the linked company object`,
+ },
+ {
+ name: 'person_company_name',
+ type: 'string',
+ required: false,
+ description: `Company name specific to this person, unrelated to the linked company object`,
+ },
+ {
+ name: 'person_company_website',
+ type: 'string',
+ required: false,
+ description: `Company website specific to this person, unrelated to the linked company object`,
+ },
+ {
+ name: 'person_stage_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the PersonStage of this person`,
+ },
+ {
+ name: 'personal_email_address',
+ type: 'string',
+ required: false,
+ description: `Personal email address of the person`,
+ },
+ {
+ name: 'personal_website',
+ type: 'string',
+ required: false,
+ description: `Personal website URL of the person`,
+ },
+ {
+ name: 'phone',
+ type: 'string',
+ required: false,
+ description: `Phone number without formatting`,
+ },
+ {
+ name: 'phone_extension',
+ type: 'string',
+ required: false,
+ description: `Phone extension without formatting`,
+ },
+ {
+ name: 'secondary_email_address',
+ type: 'string',
+ required: false,
+ description: `Alternate email address of the person`,
+ },
+ {
+ name: 'skip_permission_checks',
+ type: 'boolean',
+ required: false,
+ description: `Flag to indicate this is an intake form request that should bypass permission checks`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `State or region where the person is located`,
+ },
+ {
+ name: 'tags',
+ type: 'array',
+ required: false,
+ description: `All tags applied to this person`,
+ },
+ { name: 'title', type: 'string', required: false, description: `Job title of the person` },
+ {
+ name: 'twitter_handle',
+ type: 'string',
+ required: false,
+ description: `Twitter handle of the person`,
+ },
+ {
+ name: 'work_city',
+ type: 'string',
+ required: false,
+ description: `Work location city of the person`,
+ },
+ {
+ name: 'work_country',
+ type: 'string',
+ required: false,
+ description: `Work location country of the person`,
+ },
+ {
+ name: 'work_state',
+ type: 'string',
+ required: false,
+ description: `Work location state or region of the person`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_people_delete',
+ description: `Delete a person from Salesloft by their ID. This operation is not reversible without contacting support.`,
+ params: [
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the person to delete`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_people_get',
+ description: `Fetch a single person record from Salesloft by their ID.`,
+ params: [
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the person to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_people_list',
+ description: `Fetch multiple person records from Salesloft. The records can be filtered by email, account, stage, owner, cadence, contact restrictions, timestamps, and more, and paged and sorted.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by account ID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'active_cadences',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether they have an active cadence`,
+ },
+ {
+ name: 'bounced',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether an email sent to them bounced`,
+ },
+ {
+ name: 'cadence_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by the cadence they are currently on. Comma-separated list. Use _is_null to filter people not on a cadence.`,
+ },
+ {
+ name: 'can_call',
+ type: 'boolean',
+ required: false,
+ description: `Filter people who can be called given do_not_contact and contact_restrictions`,
+ },
+ {
+ name: 'can_email',
+ type: 'boolean',
+ required: false,
+ description: `Filter people who can be emailed given do_not_contact and contact_restrictions`,
+ },
+ {
+ name: 'can_text',
+ type: 'boolean',
+ required: false,
+ description: `Filter people who can be sent a text message given do_not_contact and contact_restrictions`,
+ },
+ {
+ name: 'city',
+ type: 'string',
+ required: false,
+ description: `Filter people by city. Supports partial matching. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'company',
+ type: 'string',
+ required: false,
+ description: `Filter people by company name. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Filter people by country. Supports partial matching. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'created_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter people created after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'created_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter people created at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'created_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter people created before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'created_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter people created at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'crm_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by CRM ID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'custom_fields',
+ type: 'object',
+ required: false,
+ description: `Filter people by custom field values. Custom field names are case-sensitive; values are case-insensitive.`,
+ },
+ {
+ name: 'do_not_contact',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by their do_not_contact status`,
+ },
+ {
+ name: 'email_addresses',
+ type: 'string',
+ required: false,
+ description: `Filter people by email address(es). Comma-separated list. Use _is_null to filter people with no email.`,
+ },
+ {
+ name: 'eu_resident',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether they are marked as a European Union Resident`,
+ },
+ {
+ name: 'first_name',
+ type: 'string',
+ required: false,
+ description: `Filter people by first name. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific person IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'import_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by import ID. Comma-separated list. Use _is_null to filter people not imported.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'job_seniority',
+ type: 'string',
+ required: false,
+ description: `Filter people by job seniority. Comma-separated list. Use _is_null to filter people without a seniority.`,
+ },
+ {
+ name: 'last_contacted_gt',
+ type: 'string',
+ required: false,
+ description: `Filter people last contacted after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'last_contacted_gte',
+ type: 'string',
+ required: false,
+ description: `Filter people last contacted at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'last_contacted_lt',
+ type: 'string',
+ required: false,
+ description: `Filter people last contacted before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'last_contacted_lte',
+ type: 'string',
+ required: false,
+ description: `Filter people last contacted at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'last_contacted_type',
+ type: 'string',
+ required: false,
+ description: `Filter people by last contacted type. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'last_name',
+ type: 'string',
+ required: false,
+ description: `Filter people by last name. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Specifies whether the max limit of 10k records should be applied to pagination counts`,
+ },
+ {
+ name: 'locales',
+ type: 'string',
+ required: false,
+ description: `Filter people by locale. Comma-separated list. Use Null to filter people without a locale.`,
+ },
+ {
+ name: 'new',
+ type: 'boolean',
+ required: false,
+ description: `Filter people who have never been on a cadence or contacted in any way`,
+ },
+ {
+ name: 'owned_by_guid',
+ type: 'string',
+ required: false,
+ description: `Filter people by the owner's GUID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'owner_crm_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by owner CRM ID. Comma-separated list. Use _is_null to filter unowned people.`,
+ },
+ {
+ name: 'owner_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by owner user ID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'owner_is_active',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether the owner is active`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'person_stage_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by person stage ID. Comma-separated list. Use _is_null to filter people with no stage.`,
+ },
+ {
+ name: 'phone_number',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether they have a phone number`,
+ },
+ {
+ name: 'replied',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether they have replied to an email`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: created_at, updated_at, last_contacted_at, name, title, job_seniority, call_count, sent_emails, clicked_emails, replied_emails, viewed_emails, account, cadence_stage_name. Defaults to updated_at.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'starred_by_guid',
+ type: 'string',
+ required: false,
+ description: `Filter people who have been starred by the given user GUIDs. Comma-separated list.`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `Filter people by state. Supports partial matching. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'success',
+ type: 'boolean',
+ required: false,
+ description: `Filter people by whether they have been marked as a success`,
+ },
+ {
+ name: 'tag_id',
+ type: 'string',
+ required: false,
+ description: `Filter people by tag ID. Comma-separated list. Use _is_null or _is_not_null to filter by tag presence.`,
+ },
+ {
+ name: 'title',
+ type: 'string',
+ required: false,
+ description: `Filter people by job title. Supports partial matching. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter people updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter people updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter people updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter people updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_people_update',
+ description: `Update an existing person record in Salesloft by their ID.`,
+ params: [
+ {
+ name: 'person_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the person to update`,
+ },
+ {
+ name: 'account_id',
+ type: 'integer',
+ required: false,
+ description: `Updated account ID for this person`,
+ },
+ { name: 'city', type: 'string', required: false, description: `Updated city of the person` },
+ {
+ name: 'contact_restrictions',
+ type: 'array',
+ required: false,
+ description: `Communication methods to prevent for this person. Accepted values: call, email, message`,
+ },
+ {
+ name: 'country',
+ type: 'string',
+ required: false,
+ description: `Updated country of the person`,
+ },
+ {
+ name: 'crm_id',
+ type: 'string',
+ required: false,
+ description: `ID of the person in your external CRM. Requires crm_id_type. Salesforce IDs must be exactly 18 characters and a Lead (00Q) or Contact (003) object.`,
+ },
+ {
+ name: 'crm_id_type',
+ type: 'string',
+ required: false,
+ description: `The CRM that the provided crm_id is for. Must be one of: salesforce`,
+ },
+ {
+ name: 'custom_fields',
+ type: 'object',
+ required: false,
+ description: `Updated custom fields for the person`,
+ },
+ {
+ name: 'do_not_contact',
+ type: 'boolean',
+ required: false,
+ description: `Update the do not contact status of the person`,
+ },
+ {
+ name: 'email_address',
+ type: 'string',
+ required: false,
+ description: `Updated email address of the person`,
+ },
+ {
+ name: 'eu_resident',
+ type: 'boolean',
+ required: false,
+ description: `Whether this person is a European Resident for GDPR compliance`,
+ },
+ {
+ name: 'external_source',
+ type: 'string',
+ required: false,
+ description: `The name of the external source from where this person was imported`,
+ },
+ {
+ name: 'first_name',
+ type: 'string',
+ required: false,
+ description: `Updated first name of the person`,
+ },
+ {
+ name: 'home_phone',
+ type: 'string',
+ required: false,
+ description: `Updated home phone number of the person`,
+ },
+ {
+ name: 'import_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the import this person was part of`,
+ },
+ {
+ name: 'job_seniority',
+ type: 'string',
+ required: false,
+ description: `Job seniority of the person. Accepted values: director, executive, individual_contributor, manager, vice_president, unknown`,
+ },
+ {
+ name: 'last_name',
+ type: 'string',
+ required: false,
+ description: `Updated last name of the person`,
+ },
+ {
+ name: 'linkedin_url',
+ type: 'string',
+ required: false,
+ description: `Updated LinkedIn profile URL`,
+ },
+ {
+ name: 'locale',
+ type: 'string',
+ required: false,
+ description: `Updated time locale for the person`,
+ },
+ {
+ name: 'mobile_phone',
+ type: 'string',
+ required: false,
+ description: `Updated mobile phone number of the person`,
+ },
+ {
+ name: 'owner_id',
+ type: 'integer',
+ required: false,
+ description: `Updated owner user ID for this person record`,
+ },
+ {
+ name: 'person_company_industry',
+ type: 'string',
+ required: false,
+ description: `Updated company industry associated with this person`,
+ },
+ {
+ name: 'person_company_name',
+ type: 'string',
+ required: false,
+ description: `Updated company name associated with this person`,
+ },
+ {
+ name: 'person_company_website',
+ type: 'string',
+ required: false,
+ description: `Updated company website associated with this person`,
+ },
+ {
+ name: 'person_stage_id',
+ type: 'integer',
+ required: false,
+ description: `Updated person stage ID`,
+ },
+ {
+ name: 'personal_email_address',
+ type: 'string',
+ required: false,
+ description: `Updated personal email address of the person`,
+ },
+ {
+ name: 'personal_website',
+ type: 'string',
+ required: false,
+ description: `Updated personal website URL of the person`,
+ },
+ {
+ name: 'phone',
+ type: 'string',
+ required: false,
+ description: `Updated phone number of the person`,
+ },
+ {
+ name: 'phone_extension',
+ type: 'string',
+ required: false,
+ description: `Updated phone extension of the person`,
+ },
+ {
+ name: 'secondary_email_address',
+ type: 'string',
+ required: false,
+ description: `Updated secondary email address of the person`,
+ },
+ {
+ name: 'skip_permission_checks',
+ type: 'boolean',
+ required: false,
+ description: `Flag to indicate this is an intake form request that should bypass permission checks`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `Updated state or region of the person`,
+ },
+ {
+ name: 'tags',
+ type: 'array',
+ required: false,
+ description: `Updated tags applied to this person`,
+ },
+ {
+ name: 'title',
+ type: 'string',
+ required: false,
+ description: `Updated job title of the person`,
+ },
+ {
+ name: 'twitter_handle',
+ type: 'string',
+ required: false,
+ description: `Updated Twitter handle of the person (without @)`,
+ },
+ {
+ name: 'work_city',
+ type: 'string',
+ required: false,
+ description: `Updated work city of the person`,
+ },
+ {
+ name: 'work_country',
+ type: 'string',
+ required: false,
+ description: `Updated work country of the person`,
+ },
+ {
+ name: 'work_state',
+ type: 'string',
+ required: false,
+ description: `Updated work state or region of the person`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_tasks_create',
+ description: `Create a new task in Salesloft. A subject is required. Optionally link the task to a person, user, and cadence step.`,
+ params: [
+ { name: 'subject', type: 'string', required: true, description: `Subject line of the task` },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `A description of the task recorded for the person at completion time`,
+ },
+ {
+ name: 'due_date',
+ type: 'string',
+ required: false,
+ description: `Date the task is due, in ISO-8601 date format (YYYY-MM-DD)`,
+ },
+ {
+ name: 'idempotency_key',
+ type: 'string',
+ required: false,
+ description: `Unique identifier to prevent duplicate tasks from being created`,
+ },
+ {
+ name: 'person_id',
+ type: 'string',
+ required: false,
+ description: `ID of the person to be contacted`,
+ },
+ {
+ name: 'remind_at',
+ type: 'string',
+ required: false,
+ description: `Datetime at which to remind the user of the task, in ISO-8601 datetime format`,
+ },
+ {
+ name: 'task_type',
+ type: 'string',
+ required: false,
+ description: `Type of the task. Accepted values: call, email, general`,
+ },
+ {
+ name: 'user_guid',
+ type: 'string',
+ required: false,
+ description: `GUID of the user linked to the task. Defaults to the authenticated user.`,
+ },
+ {
+ name: 'user_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the user linked to the task. Defaults to the authenticated user.`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_tasks_delete',
+ description: `Delete a task from Salesloft by its ID. This operation is not reversible.`,
+ params: [
+ {
+ name: 'task_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the task to delete`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_tasks_get',
+ description: `Fetch a single task record from Salesloft by its ID.`,
+ params: [
+ {
+ name: 'task_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the task to fetch`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_tasks_list',
+ description: `Fetch multiple task records from Salesloft. The records can be filtered by user, person, account, state, type, time interval, timestamps, and more, and paged and sorted.`,
+ params: [
+ {
+ name: 'account_id',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by the account to which they are associated. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'completed_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter tasks completed after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'completed_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter tasks completed at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'completed_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter tasks completed before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'completed_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter tasks completed at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'completed_time_interval',
+ type: 'string',
+ required: false,
+ description: `Filter completed tasks by time interval. Accepted values: today, yesterday, this_week, previous_week, this_month`,
+ },
+ {
+ name: 'current_state',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by current state. Comma-separated list. Accepted values: scheduled, completed`,
+ },
+ {
+ name: 'idempotency_key',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by idempotency key`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific task IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_counts_acted_on_gt',
+ type: 'string',
+ required: false,
+ description: `Include counts acted on after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'include_counts_acted_on_gte',
+ type: 'string',
+ required: false,
+ description: `Include counts acted on at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'include_counts_acted_on_lt',
+ type: 'string',
+ required: false,
+ description: `Include counts acted on before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'include_counts_acted_on_lte',
+ type: 'string',
+ required: false,
+ description: `Include counts acted on at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'limit_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Specifies whether the max limit of 10k records should be applied to pagination counts`,
+ },
+ {
+ name: 'locale',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by locale of the associated person. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'person_id',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by the person to which they are associated. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: due_date, due_at, utc_offset, company, updated_at, completed_at, salesloft.prioritizers/rhythm. Defaults to due_date.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to ASC.`,
+ },
+ {
+ name: 'source',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by source. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'task_type',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by type. Comma-separated list. Accepted values: call, email, general`,
+ },
+ {
+ name: 'time_interval_filter',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by time interval. Accepted values: overdue, today, tomorrow, this_week, next_week`,
+ },
+ {
+ name: 'updated_at_gt',
+ type: 'string',
+ required: false,
+ description: `Filter tasks updated after this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_gte',
+ type: 'string',
+ required: false,
+ description: `Filter tasks updated at or after this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'updated_at_lt',
+ type: 'string',
+ required: false,
+ description: `Filter tasks updated before this ISO8601 timestamp (exclusive)`,
+ },
+ {
+ name: 'updated_at_lte',
+ type: 'string',
+ required: false,
+ description: `Filter tasks updated at or before this ISO8601 timestamp (inclusive)`,
+ },
+ {
+ name: 'user_id',
+ type: 'string',
+ required: false,
+ description: `Filter tasks by the user to which they are assigned. Comma-separated list for multiple values.`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_tasks_update',
+ description: `Update an existing task in Salesloft by its ID.`,
+ params: [
+ {
+ name: 'task_id',
+ type: 'integer',
+ required: true,
+ description: `The unique identifier of the task to update`,
+ },
+ {
+ name: 'current_state',
+ type: 'string',
+ required: false,
+ description: `Current state of the task. Valid option: completed`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `A description of the task recorded for the person at completion time`,
+ },
+ {
+ name: 'due_at',
+ type: 'string',
+ required: false,
+ description: `Datetime the task is due, in ISO-8601 datetime format`,
+ },
+ {
+ name: 'due_date',
+ type: 'string',
+ required: false,
+ description: `Date the task is due, in ISO-8601 date format (YYYY-MM-DD)`,
+ },
+ {
+ name: 'is_logged',
+ type: 'boolean',
+ required: false,
+ description: `A flag to indicate that the task should only be logged`,
+ },
+ {
+ name: 'person_id',
+ type: 'string',
+ required: false,
+ description: `ID of the person to be contacted`,
+ },
+ {
+ name: 'remind_at',
+ type: 'string',
+ required: false,
+ description: `Datetime at which to remind the user of the task, in ISO-8601 datetime format`,
+ },
+ { name: 'subject', type: 'string', required: false, description: `Subject line of the task` },
+ {
+ name: 'task_type',
+ type: 'string',
+ required: false,
+ description: `Task type. Accepted values: call, email, general`,
+ },
+ {
+ name: 'user_guid',
+ type: 'string',
+ required: false,
+ description: `GUID of the user linked to the task. Defaults to the authenticated user.`,
+ },
+ {
+ name: 'user_id',
+ type: 'integer',
+ required: false,
+ description: `ID of the user linked to the task. Defaults to the authenticated user.`,
+ },
+ ],
+ },
+ {
+ name: 'salesloft_users_get_current',
+ description: `Fetch the authenticated current user's information from Salesloft. This endpoint does not accept any parameters.`,
+ params: [],
+ },
+ {
+ name: 'salesloft_users_list',
+ description: `Fetch multiple user records from Salesloft. Non-admin users will only see their own user or all on team depending on group visibility policy.`,
+ params: [
+ {
+ name: 'active',
+ type: 'boolean',
+ required: false,
+ description: `Filter users by active status. Defaults to not applied.`,
+ },
+ {
+ name: 'calendar_connection_status',
+ type: 'boolean',
+ required: false,
+ description: `Filter users by calendar connection status. True returns only users with a connected calendar; false returns only users without.`,
+ },
+ {
+ name: 'emails',
+ type: 'string',
+ required: false,
+ description: `Filter users by exact email address match. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'group_id',
+ type: 'string',
+ required: false,
+ description: `Filter users by group ID. Comma-separated list. Use _is_null to filter users not in any group.`,
+ },
+ {
+ name: 'guid',
+ type: 'string',
+ required: false,
+ description: `Filter users by GUID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'has_crm_user',
+ type: 'boolean',
+ required: false,
+ description: `Filter users by whether they have a CRM user mapped`,
+ },
+ {
+ name: 'ids',
+ type: 'string',
+ required: false,
+ description: `Filter by specific user IDs. Comma-separated list of IDs.`,
+ },
+ {
+ name: 'include_calendar_connection_status',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include calendar connection status in the response. When true, adds a calendar_connection_status object to each user.`,
+ },
+ {
+ name: 'include_paging_counts',
+ type: 'boolean',
+ required: false,
+ description: `Whether to include total count and page count in the response metadata`,
+ },
+ {
+ name: 'last_login',
+ type: 'string',
+ required: false,
+ description: `Filter users based on last login time`,
+ },
+ {
+ name: 'managed_ar',
+ type: 'boolean',
+ required: false,
+ description: `Filter users based on whether they manage Automation Rules`,
+ },
+ {
+ name: 'manager_user_guid',
+ type: 'string',
+ required: false,
+ description: `Filter users by their manager's user GUID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'page',
+ type: 'integer',
+ required: false,
+ description: `Page number for pagination, starting from 1`,
+ },
+ {
+ name: 'per_page',
+ type: 'integer',
+ required: false,
+ description: `Number of results per page in the range [1, 100]. Defaults to 25.`,
+ },
+ {
+ name: 'permissions',
+ type: 'string',
+ required: false,
+ description: `Filter users by specific permissions. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'role_id',
+ type: 'string',
+ required: false,
+ description: `Filter users by role ID. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'search',
+ type: 'string',
+ required: false,
+ description: `Space-separated keywords to search First Name, Last Name, or Email (case-insensitive substring match)`,
+ },
+ {
+ name: 'seat_package',
+ type: 'string',
+ required: false,
+ description: `Filter users by assigned license. Comma-separated list for multiple values.`,
+ },
+ {
+ name: 'sort_by',
+ type: 'string',
+ required: false,
+ description: `Field to sort results by. Accepted values: id, seat_package, email, name, group, last_login, role. Defaults to id.`,
+ },
+ {
+ name: 'sort_direction',
+ type: 'string',
+ required: false,
+ description: `Direction of sort: ASC or DESC. Defaults to DESC.`,
+ },
+ {
+ name: 'visible_only',
+ type: 'boolean',
+ required: false,
+ description: `When true, only shows users actionable based on team privacy settings. When false, shows all users including deactivated. Defaults to true.`,
+ },
+ {
+ name: 'work_country',
+ type: 'string',
+ required: false,
+ description: `Filter users by assigned work country. Comma-separated list for multiple values.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/sanitymcp.ts b/src/data/agent-connectors/sanitymcp.ts
new file mode 100644
index 000000000..c2548dcda
--- /dev/null
+++ b/src/data/agent-connectors/sanitymcp.ts
@@ -0,0 +1,1070 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'sanitymcp__get_ui_context',
+ description: `Get the current UI context including the active document and workspace in Sanity Studio.`,
+ params: [
+ { name: 'resource', type: 'object', required: true, description: `No description.` },
+ {
+ name: 'documentId',
+ type: 'string',
+ required: false,
+ description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`,
+ },
+ {
+ name: 'documentType',
+ type: 'string',
+ required: false,
+ description: `Schema type name of the document.`,
+ },
+ {
+ name: 'maxRefDepth',
+ type: 'integer',
+ required: false,
+ description: `Maximum reference depth to follow when resolving document references.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_add_cors_origin',
+ description: `Add a CORS origin to allow browser-based API access for a Sanity project.`,
+ params: [
+ {
+ name: 'origin',
+ type: 'string',
+ required: true,
+ description: `CORS origin URL to allow (e.g. https://myapp.com).`,
+ },
+ { name: 'resource', type: 'object', required: true, description: `No description.` },
+ {
+ name: 'allowCredentials',
+ type: 'boolean',
+ required: false,
+ description: `Whether to allow credentials (cookies) from this CORS origin.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_create_dataset',
+ description: `Create a new dataset in a Sanity project with the specified access control mode.`,
+ params: [
+ {
+ name: 'datasetName',
+ type: 'string',
+ required: true,
+ description: `Name of the Sanity dataset.`,
+ },
+ { name: 'resource', type: 'object', required: true, description: `No description.` },
+ {
+ name: 'aclMode',
+ type: 'string',
+ required: false,
+ description: `Dataset access control mode: public or private.`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Human-readable description.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_create_documents_from_json',
+ description: `Create one or more Sanity documents from a JSON array of document objects.`,
+ params: [
+ {
+ name: 'documents',
+ type: 'array',
+ required: true,
+ description: `Array of documents to create. Each document must have a type and content.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: false,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_create_documents_from_markdown',
+ description: `Create one or more Sanity documents from Markdown content.`,
+ params: [
+ {
+ name: 'documents',
+ type: 'array',
+ required: true,
+ description: `Array of documents to create. Each document must have a type and Markdown content.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: false,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_create_project',
+ description: `Create a new Sanity project with optional CORS origin and organization.`,
+ params: [
+ {
+ name: 'displayName',
+ type: 'string',
+ required: true,
+ description: `Display name for the Sanity project.`,
+ },
+ {
+ name: 'organizationId',
+ type: 'string',
+ required: true,
+ description: `Sanity organization ID to create the project under.`,
+ },
+ {
+ name: 'allowCredentials',
+ type: 'boolean',
+ required: false,
+ description: `Whether to allow credentials (cookies) from this CORS origin.`,
+ },
+ {
+ name: 'corsOrigin',
+ type: 'string',
+ required: false,
+ description: `CORS origin URL for the new project.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_create_release',
+ description: `Create a new content release for scheduling or grouping document publications.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ { name: 'title', type: 'string', required: true, description: `Title of the release.` },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Human-readable description.`,
+ },
+ {
+ name: 'intendedPublishAt',
+ type: 'string',
+ required: false,
+ description: `ISO 8601 datetime when the release is scheduled to publish.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'releaseType',
+ type: 'string',
+ required: false,
+ description: `Type of release: scheduled, immediate, or undecided.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_create_version',
+ description: `Create versioned copies of documents and associate them with a release.`,
+ params: [
+ {
+ name: 'documentIds',
+ type: 'array',
+ required: true,
+ description: `Array of document IDs to create versions for (min 1, max 10)`,
+ },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: true,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_deploy_schema',
+ description: `Deploy a schema declaration to a Sanity project workspace.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'schemaDeclaration',
+ type: 'string',
+ required: true,
+ description: `Sanity schema configuration declaration string.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_deploy_studio',
+ description: `Deploy a Sanity Studio to a hosted app subdomain.`,
+ params: [
+ {
+ name: 'appHost',
+ type: 'string',
+ required: true,
+ description: `Subdomain hostname for the deployed Sanity Studio.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ { name: 'title', type: 'string', required: false, description: `Title of the release.` },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_discard_drafts',
+ description: `Discard draft versions of one or more documents.`,
+ params: [
+ {
+ name: 'ids',
+ type: 'array',
+ required: true,
+ description: `Document IDs to discard drafts for`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_generate_image',
+ description: `Generate an image for a document field using an AI instruction.`,
+ params: [
+ {
+ name: 'documentId',
+ type: 'string',
+ required: true,
+ description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`,
+ },
+ {
+ name: 'imagePath',
+ type: 'string',
+ required: true,
+ description: `Path to the image field within the document.`,
+ },
+ {
+ name: 'instruction',
+ type: 'string',
+ required: true,
+ description: `Natural language instruction for the image transformation.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_get_document',
+ description: `Retrieve a single Sanity document by its ID.`,
+ params: [
+ {
+ name: 'documentId',
+ type: 'string',
+ required: true,
+ description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_get_project_studios',
+ description: `List all Sanity Studios deployed for a project.`,
+ params: [
+ { name: 'resource', type: 'object', required: true, description: `No description.` },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_get_sanity_rules',
+ description: `Load one or more Sanity content rules by name.`,
+ params: [
+ {
+ name: 'rules',
+ type: 'array',
+ required: true,
+ description: `One or more rule names to load. Use list_sanity_rules to see available rules.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_get_schema',
+ description: `Retrieve the schema for a specific document type in a workspace.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ { name: 'type', type: 'string', required: false, description: `Document schema type name.` },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_datasets',
+ description: `List all datasets in a Sanity project.`,
+ params: [
+ { name: 'resource', type: 'object', required: true, description: `No description.` },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_embeddings_indices',
+ description: `List all embeddings indices available in a Sanity project.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_organizations',
+ description: `List all Sanity organizations the authenticated user belongs to.`,
+ params: [
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_projects',
+ description: `List all Sanity projects the authenticated user has access to.`,
+ params: [
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_releases',
+ description: `List content releases for a project with optional state filtering and pagination.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ {
+ name: 'offset',
+ type: 'integer',
+ required: false,
+ description: `Number of items to skip for pagination.`,
+ },
+ {
+ name: 'state',
+ type: 'string',
+ required: false,
+ description: `Filter releases by state: active, archived, or published.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_sanity_rules',
+ description: `List all available Sanity content rule names.`,
+ params: [
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_list_workspace_schemas',
+ description: `List all schema types defined in a Sanity workspace.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_migration_guide',
+ description: `Retrieve a Sanity migration guide by name.`,
+ params: [
+ {
+ name: 'guide',
+ type: 'string',
+ required: true,
+ description: `Name of the migration guide to retrieve.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_patch_document_from_json',
+ description: `Apply set, unset, or append patch operations to a document using JSON.`,
+ params: [
+ {
+ name: 'documentId',
+ type: 'string',
+ required: true,
+ description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'append',
+ type: 'array',
+ required: false,
+ description: `Append patch operations: adds items to the end of existing array fields.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: false,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'set',
+ type: 'array',
+ required: false,
+ description: `Set patch operations: replaces field values at the specified document paths.`,
+ },
+ {
+ name: 'unset',
+ type: 'array',
+ required: false,
+ description: `Unset patch operations: removes fields or array items at the specified paths.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_patch_document_from_markdown',
+ description: `Patch a document field with Markdown content converted to Sanity portable text.`,
+ params: [
+ {
+ name: 'documentId',
+ type: 'string',
+ required: true,
+ description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`,
+ },
+ {
+ name: 'markdown',
+ type: 'string',
+ required: true,
+ description: `Markdown content to patch into the document.`,
+ },
+ {
+ name: 'path',
+ type: 'string',
+ required: true,
+ description: `Document field path to target.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: false,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_publish_documents',
+ description: `Publish one or more draft documents to make them publicly visible.`,
+ params: [
+ {
+ name: 'ids',
+ type: 'array',
+ required: true,
+ description: `IDs of the documents to publish`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_query_documents',
+ description: `Execute a GROQ query against the Sanity dataset and return matching documents.`,
+ params: [
+ {
+ name: 'query',
+ type: 'string',
+ required: true,
+ description: `GROQ query string to execute.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ {
+ name: 'params',
+ type: 'object',
+ required: false,
+ description: `Optional parameters for the GROQ query`,
+ },
+ {
+ name: 'perspective',
+ type: 'string',
+ required: false,
+ description: `Query perspective: published, previewDrafts, or raw.`,
+ },
+ {
+ name: 'single',
+ type: 'boolean',
+ required: false,
+ description: `Return a single result instead of an array.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_read_docs',
+ description: `Read a Sanity documentation page by URL or path.`,
+ params: [
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'path',
+ type: 'string',
+ required: false,
+ description: `Document field path to target.`,
+ },
+ {
+ name: 'url',
+ type: 'string',
+ required: false,
+ description: `URL of the Sanity documentation page to read.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_search_docs',
+ description: `Search Sanity documentation by keyword query.`,
+ params: [
+ {
+ name: 'query',
+ type: 'string',
+ required: true,
+ description: `GROQ query string to execute.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_semantic_search',
+ description: `Perform a semantic similarity search against a Sanity embeddings index.`,
+ params: [
+ {
+ name: 'indexName',
+ type: 'string',
+ required: true,
+ description: `Name of the embeddings index to search.`,
+ },
+ {
+ name: 'query',
+ type: 'string',
+ required: true,
+ description: `GROQ query string to execute.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'limit',
+ type: 'integer',
+ required: false,
+ description: `Maximum number of items to return.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_transform_image',
+ description: `Apply an AI transformation to an image field in a Sanity document.`,
+ params: [
+ {
+ name: 'documentId',
+ type: 'string',
+ required: true,
+ description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`,
+ },
+ {
+ name: 'imagePath',
+ type: 'string',
+ required: true,
+ description: `Path to the image field within the document.`,
+ },
+ {
+ name: 'instruction',
+ type: 'string',
+ required: true,
+ description: `Natural language instruction for the image transformation.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ {
+ name: 'workspaceName',
+ type: 'string',
+ required: false,
+ description: `Sanity workspace name. Defaults to the default workspace.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_unpublish_documents',
+ description: `Unpublish one or more documents to revert them to draft state.`,
+ params: [
+ {
+ name: 'ids',
+ type: 'array',
+ required: true,
+ description: `IDs of the documents to unpublish (published document IDs only)`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_update_dataset',
+ description: `Update the access control mode or description of an existing Sanity dataset.`,
+ params: [
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'aclMode',
+ type: 'string',
+ required: false,
+ description: `Dataset access control mode: public or private.`,
+ },
+ {
+ name: 'description',
+ type: 'string',
+ required: false,
+ description: `Human-readable description.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_version_discard',
+ description: `Discard document versions associated with a release.`,
+ params: [
+ {
+ name: 'ids',
+ type: 'array',
+ required: true,
+ description: `Document IDs to discard from the release`,
+ },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: true,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_version_replace_document',
+ description: `Replace a versioned document with the content of a source document.`,
+ params: [
+ { name: 'id', type: 'string', required: true, description: `Sanity document ID.` },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: true,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'sourceDocumentId',
+ type: 'string',
+ required: true,
+ description: `ID of the source document to replace from.`,
+ },
+ {
+ name: 'type',
+ type: 'string',
+ required: true,
+ description: `Must be version.replace for this operation.`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_version_unpublish_document',
+ description: `Unpublish a versioned document from a release.`,
+ params: [
+ { name: 'id', type: 'string', required: true, description: `Sanity document ID.` },
+ {
+ name: 'releaseId',
+ type: 'string',
+ required: true,
+ description: `ID of the release to target.`,
+ },
+ {
+ name: 'resource',
+ type: 'object',
+ required: true,
+ description: `Resource information indicating which project ID and dataset to target`,
+ },
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+ {
+ name: 'sanitymcp_whoami',
+ description: `Get the currently authenticated Sanity user profile.`,
+ params: [
+ {
+ name: 'intent',
+ type: 'string',
+ required: false,
+ description: `Brief description of what you are trying to accomplish.`,
+ },
+ ],
+ },
+]
diff --git a/src/data/agent-connectors/webflowmcp.ts b/src/data/agent-connectors/webflowmcp.ts
new file mode 100644
index 000000000..f690e3c01
--- /dev/null
+++ b/src/data/agent-connectors/webflowmcp.ts
@@ -0,0 +1,389 @@
+import type { Tool } from '../../types/agent-connectors'
+
+export const tools: Tool[] = [
+ {
+ name: 'webflowmcp_ask_webflow_ai',
+ description: `Ask Webflow AI any question about the Webflow API and get a direct answer.`,
+ params: [
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Description of what the user is trying to accomplish, used to select the right action.`,
+ },
+ {
+ name: 'message',
+ type: 'string',
+ required: true,
+ description: `Your question about the Webflow API.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_asset_tool',
+ description: `Designer Tool - Asset tool to perform actions like create folder, get all assets and folders, update assets and folders, and upload image by URL`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_component_builder',
+ description: `Insert component instances onto the current active page into an element or a component instance slot.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_assets_tool',
+ description: `Manage Webflow site assets — create folders, upload files, and retrieve asset metadata via the Data API.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_cms_tool',
+ description: `Manage Webflow CMS collections and items including listing, creating, updating, and publishing.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Description of what the user is trying to accomplish, used to select the right action.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_comments_tool',
+ description: `Manage Webflow Designer comments — list threads by page, filter by resolution status or date, search comment authors, and reply to existing threads.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_enterprise_tool',
+ description: `Manage enterprise-tier Webflow settings including 301 redirects and robots.txt. Requires an Enterprise workspace plan.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_localization_tool',
+ description: `Localize Webflow pages and components into secondary locales by reading and updating static content.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Description of what the user is trying to accomplish, used to select the right action.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_pages_tool',
+ description: `List pages, get page metadata, update page settings, and manage branches via the Webflow Data API.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Description of what the user is trying to accomplish, used to select the right action.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_scripts_tool',
+ description: `Register, apply, update, and remove custom code scripts at the site or page level in Webflow.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Description of what the user is trying to accomplish, used to select the right action.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_sites_tool',
+ description: `Data tool - Sites tool to perform actions like list sites, get site details, and publish sites`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_data_webhook_tool',
+ description: `Data tool - Webhook tool to perform actions like list webhooks, create webhooks, get webhook details, and delete webhooks for a Webflow site.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_de_component_tool',
+ description: `Designer tool - Component tool to perform actions like create component instances, get all components and more.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_de_page_tool',
+ description: `Manage Designer pages — create pages and folders, switch pages, open components, and inspect branch and mode state.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_element_builder',
+ description: `Designer Tool - Element builder to create element on current active page.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_element_snapshot_tool',
+ description: `Capture a visual snapshot of a Designer element for debugging and visual feedback.`,
+ params: [
+ { name: 'action', type: 'object', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_element_tool',
+ description: `Designer Tool - Element tool to perform actions like get all elements, get selected element, select element on current active page. and more`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_get_image_preview',
+ description: `Designer Tool - Get image preview from url. this is helpful to get image preview from url. Only supports JPG, PNG, GIF, WEBP, WEBP and AVIF formats.`,
+ params: [
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ {
+ name: 'url',
+ type: 'string',
+ required: true,
+ description: `The URL of the image to get the preview from`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_get_more_tools',
+ description: `Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.`,
+ params: [
+ {
+ name: 'brief',
+ type: 'string',
+ required: true,
+ description: `Describe the use case, what the user wants to accomplish, why existing tools are insufficient, and any relevant Webflow context.`,
+ },
+ {
+ name: 'category',
+ type: 'string',
+ required: true,
+ description: `The category of the capability you are looking for.`,
+ },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `A short description of your goal and what kind of tool would help accomplish it.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_style_tool',
+ description: `Designer Tool - Style tool to perform actions like create style, get all styles, update styles, remove styles`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_variable_tool',
+ description: `Manage Webflow Designer variables — create, list, update, rename, delete, and manage style variable modes.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_webflow_guide_tool',
+ description: `Retrieve Webflow tool usage guidelines and recommended workflows before performing any actions.`,
+ params: [
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ ],
+ },
+ {
+ name: 'webflowmcp_whtml_builder',
+ description: `Insert elements on the current active page from HTML and CSS strings, accepting markup and optional CSS rules.`,
+ params: [
+ { name: 'actions', type: 'array', required: true, description: `No description.` },
+ {
+ name: 'context',
+ type: 'string',
+ required: true,
+ description: `Brief description of why this tool is being called in context of the user goal (15-25 words, third-person).`,
+ },
+ {
+ name: 'siteId',
+ type: 'string',
+ required: true,
+ description: `The unique ID of the Webflow site. Get it from the data_sites_tool if not known.`,
+ },
+ ],
+ },
+]