From 7e9009385fbf8ed49f5569d4483357d31701637a Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 10:51:21 +0530 Subject: [PATCH 01/23] chore: ignore .worktrees directory --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 14a487235..a849c090c 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,7 @@ skills-lock.json .windsurf/ .tmp/ +.firebase/ .superpowers/ +docs/superpowers/ +.worktrees From b3b4b1f75c2bc32612f7544fbb4270e7596ec412 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 11:39:29 +0530 Subject: [PATCH 02/23] feat(provider-catalog): add shared agent connector types --- src/types/agent-connectors.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/types/agent-connectors.ts diff --git a/src/types/agent-connectors.ts b/src/types/agent-connectors.ts new file mode 100644 index 000000000..4e6e649c3 --- /dev/null +++ b/src/types/agent-connectors.ts @@ -0,0 +1,16 @@ +// src/types/agent-connectors.ts + +export type ParamType = 'string' | 'boolean' | 'integer' | 'object' + +export interface ToolParam { + name: string + type: ParamType + required: boolean + description: string +} + +export interface Tool { + name: string + description: string + params: ToolParam[] +} From aa806cfe250074ee25306ccf8aee1416b1f84c3b Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 11:43:23 +0530 Subject: [PATCH 03/23] feat(provider-catalog): add Snowflake Key Pair Auth tool data --- src/data/agent-connectors/snowflakekeyauth.ts | 357 ++++++++++++++++++ 1 file changed, 357 insertions(+) create mode 100644 src/data/agent-connectors/snowflakekeyauth.ts diff --git a/src/data/agent-connectors/snowflakekeyauth.ts b/src/data/agent-connectors/snowflakekeyauth.ts new file mode 100644 index 000000000..720e93ae5 --- /dev/null +++ b/src/data/agent-connectors/snowflakekeyauth.ts @@ -0,0 +1,357 @@ +// src/data/agent-connectors/snowflakekeyauth.ts +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'snowflakekeyauth_cancel_query', + description: 'Cancel a running Snowflake SQL API statement by statement handle.', + params: [ + { + name: 'statement_handle', + type: 'string', + required: true, + description: 'Snowflake statement handle to cancel', + }, + { + name: 'request_id', + type: 'string', + required: false, + description: 'Optional request ID used when the statement was submitted', + }, + ], + }, + { + name: 'snowflakekeyauth_execute_query', + description: + 'Execute one or more SQL statements against Snowflake using the SQL API. Use semicolons to submit multiple statements.', + params: [ + { + name: 'statement', + type: 'string', + required: true, + description: + 'SQL statement to execute. Use semicolons to send multiple statements in one request.', + }, + { + name: 'async', + type: 'boolean', + required: false, + description: 'Execute statement asynchronously and return a statement handle', + }, + { + name: 'bindings', + type: 'object', + required: false, + description: "Bind variables object for '?' placeholders in the SQL statement", + }, + { + name: 'database', + type: 'string', + required: false, + description: 'Database to use when executing the statement', + }, + { + name: 'nullable', + type: 'boolean', + required: false, + description: 'When false, SQL NULL values are returned as the string "null"', + }, + { + name: 'parameters', + type: 'object', + required: false, + description: 'Statement-level Snowflake parameters as a JSON object', + }, + { + name: 'request_id', + type: 'string', + required: false, + description: 'Unique request identifier (UUID) used for idempotent retries', + }, + { + name: 'retry', + type: 'boolean', + required: false, + description: + 'Set true when resubmitting a previously sent request with the same request_id', + }, + { + name: 'role', + type: 'string', + required: false, + description: 'Role to use when executing the statement', + }, + { + name: 'schema', + type: 'string', + required: false, + description: 'Schema to use when executing the statement', + }, + { + name: 'timeout', + type: 'integer', + required: false, + description: 'Maximum number of seconds to wait for statement execution', + }, + { + name: 'warehouse', + type: 'string', + required: false, + description: 'Warehouse to use when executing the statement', + }, + ], + }, + { + name: 'snowflakekeyauth_get_columns', + description: 'Query INFORMATION_SCHEMA.COLUMNS for column metadata.', + params: [ + { name: 'database', type: 'string', required: true, description: 'Database name' }, + { + name: 'column_name_like', + type: 'string', + required: false, + description: 'Optional column name pattern', + }, + { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, + { name: 'table', type: 'string', required: false, description: 'Optional table filter' }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_get_query_partition', + description: 'Get a specific result partition for a Snowflake SQL API statement.', + params: [ + { + name: 'partition', + type: 'integer', + required: true, + description: 'Partition index to fetch (0-based)', + }, + { + name: 'statement_handle', + type: 'string', + required: true, + description: 'Snowflake statement handle returned by execute_query', + }, + { + name: 'request_id', + type: 'string', + required: false, + description: 'Optional request ID used when the statement was submitted', + }, + ], + }, + { + name: 'snowflakekeyauth_get_query_status', + description: + 'Get Snowflake SQL API statement status and first partition result metadata by statement handle.', + params: [ + { + name: 'statement_handle', + type: 'string', + required: true, + description: 'Snowflake statement handle returned by execute_query', + }, + { + name: 'request_id', + type: 'string', + required: false, + description: 'Optional request ID used when the statement was submitted', + }, + ], + }, + { + name: 'snowflakekeyauth_get_referential_constraints', + description: 'Query INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS.', + params: [ + { name: 'database', type: 'string', required: true, description: 'Database name' }, + { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, + { name: 'table', type: 'string', required: false, description: 'Optional table filter' }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_get_schemata', + description: 'Query INFORMATION_SCHEMA.SCHEMATA for schema metadata.', + params: [ + { name: 'database', type: 'string', required: true, description: 'Database name' }, + { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { + name: 'schema_like', + type: 'string', + required: false, + description: 'Optional schema pattern', + }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_get_table_constraints', + description: 'Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS.', + params: [ + { name: 'database', type: 'string', required: true, description: 'Database name' }, + { + name: 'constraint_type', + type: 'string', + required: false, + description: 'Optional constraint type filter', + }, + { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, + { name: 'table', type: 'string', required: false, description: 'Optional table filter' }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_get_tables', + description: 'Query INFORMATION_SCHEMA.TABLES for table metadata in a Snowflake database.', + params: [ + { name: 'database', type: 'string', required: true, description: 'Database name' }, + { name: 'limit', type: 'integer', required: false, description: 'Maximum number of rows' }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, + { + name: 'table_name_like', + type: 'string', + required: false, + description: 'Optional table name pattern', + }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_show_databases_schemas', + description: 'Run SHOW DATABASES or SHOW SCHEMAS.', + params: [ + { name: 'object_type', type: 'string', required: true, description: 'Object type to show' }, + { + name: 'database_name', + type: 'string', + required: false, + description: 'Optional database scope for SHOW SCHEMAS', + }, + { + name: 'like_pattern', + type: 'string', + required: false, + description: 'Optional LIKE pattern', + }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_show_grants', + description: 'Run SHOW GRANTS in common modes (to role, to user, of role, on object).', + params: [ + { name: 'grant_view', type: 'string', required: true, description: 'SHOW GRANTS variant' }, + { + name: 'object_name', + type: 'string', + required: false, + description: 'Object name for on_object', + }, + { + name: 'object_type', + type: 'string', + required: false, + description: 'Object type for on_object', + }, + { name: 'role', type: 'string', required: false, description: 'Optional execution role' }, + { + name: 'role_name', + type: 'string', + required: false, + description: 'Role name (for to_role/of_role)', + }, + { + name: 'user_name', + type: 'string', + required: false, + description: 'User name (for to_user)', + }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_show_imported_exported_keys', + description: + 'Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. Use fully-qualified scope (database_name + schema_name + table_name) for reliable execution.', + params: [ + { + name: 'key_direction', + type: 'string', + required: true, + description: 'Which command to run', + }, + { + name: 'table_name', + type: 'string', + required: true, + description: + 'Table name (use with schema_name and database_name for fully-qualified scope)', + }, + { + name: 'database_name', + type: 'string', + required: false, + description: 'Optional database name (recommended with schema_name)', + }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { + name: 'schema_name', + type: 'string', + required: false, + description: 'Optional schema name (recommended with database_name)', + }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_show_primary_keys', + description: + 'Run SHOW PRIMARY KEYS with optional scope. When using schema_name (or schema_name + table_name), database_name is required.', + params: [ + { + name: 'database_name', + type: 'string', + required: false, + description: 'Optional database name for scope (required when schema_name is set)', + }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { + name: 'schema_name', + type: 'string', + required: false, + description: 'Optional schema name for scope', + }, + { + name: 'table_name', + type: 'string', + required: false, + description: 'Optional table name for scope', + }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, + { + name: 'snowflakekeyauth_show_warehouses', + description: 'Run SHOW WAREHOUSES.', + params: [ + { + name: 'like_pattern', + type: 'string', + required: false, + description: 'Optional LIKE pattern', + }, + { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + ], + }, +] From 3c3e6b8fa9955c4041dbcba3c43ce7843b6b7c63 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 11:45:25 +0530 Subject: [PATCH 04/23] feat(provider-catalog): add ToolList accordion component --- src/components/ToolList.astro | 266 ++++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 src/components/ToolList.astro diff --git a/src/components/ToolList.astro b/src/components/ToolList.astro new file mode 100644 index 000000000..ce7e80c24 --- /dev/null +++ b/src/components/ToolList.astro @@ -0,0 +1,266 @@ +--- +import type { Tool } from '../types/agent-connectors' + +interface Props { + tools: Tool[] +} + +const { tools } = Astro.props +--- + +
+ { + tools.map((tool, i) => ( +
+ + +
+

{tool.description}

+ {tool.params.length > 0 && ( +
+
+ Name + Type + Required + Description +
+ {tool.params.map((param) => ( +
+ {param.name} + {param.type} + + {param.required ? 'required' : 'optional'} + + {param.description} +
+ ))} +
+ )} +
+
+ )) + } +
+ + From d1707f9524685647171803f72076e8a732764118 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 11:50:48 +0530 Subject: [PATCH 05/23] feat(provider-catalog): replace Snowflake tool tables with ToolList component --- .../agent-connectors/snowflakekeyauth.mdx | 195 +----------------- 1 file changed, 10 insertions(+), 185 deletions(-) diff --git a/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx b/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx index eceec4844..165c090c4 100644 --- a/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx +++ b/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx @@ -8,203 +8,28 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/snowflakekeyauth' import { UsageSnowflakekeyauthSection } from '@components/templates'
-
- Connect to Snowflake via Public Private Key Pair to manage and analyze your data warehouse workloads -
-
- Snowflake Key Pair Auth logo -
+
+ Connect to Snowflake via Public Private Key Pair to manage and analyze your data warehouse workloads +
+
+ Snowflake Key Pair Auth logo +
Supports authentication: - ## Usage ## Tool list -## `snowflakekeyauth_cancel_query` - -Cancel a running Snowflake SQL API statement by statement handle. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `request_id` | string | No | Optional request ID used when the statement was submitted | -| `statement_handle` | string | Yes | Snowflake statement handle to cancel | - -## `snowflakekeyauth_execute_query` - -Execute one or more SQL statements against Snowflake using the SQL API. Requires a valid Snowflake OAuth2 connection. Use semicolons to submit multiple statements. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `async` | boolean | No | Execute statement asynchronously and return a statement handle | -| `bindings` | `object` | No | Bind variables object for '?' placeholders in the SQL statement | -| `database` | string | No | Database to use when executing the statement | -| `nullable` | boolean | No | When false, SQL NULL values are returned as the string "null" | -| `parameters` | `object` | No | Statement-level Snowflake parameters as a JSON object | -| `request_id` | string | No | Unique request identifier (UUID) used for idempotent retries | -| `retry` | boolean | No | Set true when resubmitting a previously sent request with the same request_id | -| `role` | string | No | Role to use when executing the statement | -| `schema` | string | No | Schema to use when executing the statement | -| `statement` | string | Yes | SQL statement to execute. Use semicolons to send multiple statements in one request. | -| `timeout` | integer | No | Maximum number of seconds to wait for statement execution | -| `warehouse` | string | No | Warehouse to use when executing the statement | - -## `snowflakekeyauth_get_columns` - -Query INFORMATION_SCHEMA.COLUMNS for column metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `column_name_like` | string | No | Optional column name pattern | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table` | string | No | Optional table filter | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_get_query_partition` - -Get a specific result partition for a Snowflake SQL API statement. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `partition` | integer | Yes | Partition index to fetch (0-based) | -| `request_id` | string | No | Optional request ID used when the statement was submitted | -| `statement_handle` | string | Yes | Snowflake statement handle returned by Execute Query | - -## `snowflakekeyauth_get_query_status` - -Get Snowflake SQL API statement status and first partition result metadata by statement handle. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `request_id` | string | No | Optional request ID used when the statement was submitted | -| `statement_handle` | string | Yes | Snowflake statement handle returned by Execute Query | - -## `snowflakekeyauth_get_referential_constraints` - -Query INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table` | string | No | Optional table filter | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_get_schemata` - -Query INFORMATION_SCHEMA.SCHEMATA for schema metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema_like` | string | No | Optional schema pattern | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_get_table_constraints` - -Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `constraint_type` | string | No | Optional constraint type filter | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table` | string | No | Optional table filter | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_get_tables` - -Query INFORMATION_SCHEMA.TABLES for table metadata in a Snowflake database. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum number of rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table_name_like` | string | No | Optional table name pattern | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_show_databases_schemas` - -Run SHOW DATABASES or SHOW SCHEMAS. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_name` | string | No | Optional database scope for SHOW SCHEMAS | -| `like_pattern` | string | No | Optional LIKE pattern | -| `object_type` | string | Yes | Object type to show | -| `role` | string | No | Optional role | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_show_grants` - -Run SHOW GRANTS in common modes (to role, to user, of role, on object). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `grant_view` | string | Yes | SHOW GRANTS variant | -| `object_name` | string | No | Object name for on_object | -| `object_type` | string | No | Object type for on_object | -| `role` | string | No | Optional execution role | -| `role_name` | string | No | Role name (for to_role/of_role) | -| `user_name` | string | No | User name (for to_user) | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_show_imported_exported_keys` - -Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. For reliable execution in this environment, use fully-qualified scope (database_name + schema_name + table_name). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_name` | string | No | Optional database name (recommended with schema_name) | -| `key_direction` | string | Yes | Which command to run | -| `role` | string | No | Optional role | -| `schema_name` | string | No | Optional schema name (recommended with database_name) | -| `table_name` | string | Yes | Table name (use with schema_name and database_name for fully-qualified scope) | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_show_primary_keys` - -Run SHOW PRIMARY KEYS with optional scope. When using schema_name (or schema_name + table_name), database_name is required for fully-qualified scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_name` | string | No | Optional database name for scope (required when schema_name is set) | -| `role` | string | No | Optional role | -| `schema_name` | string | No | Optional schema name for scope | -| `table_name` | string | No | Optional table name for scope | -| `warehouse` | string | No | Optional warehouse | - -## `snowflakekeyauth_show_warehouses` - -Run SHOW WAREHOUSES. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `like_pattern` | string | No | Optional LIKE pattern | -| `role` | string | No | Optional role | -| `warehouse` | string | No | Optional warehouse | + From 5e723c159c55e12e5e18093057169a60e768d49e Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 11:52:35 +0530 Subject: [PATCH 06/23] feat(provider-catalog): add ProviderCatalog grid with search and filter --- src/components/ProviderCatalog.astro | 430 +++++++++++++++++++++++++++ 1 file changed, 430 insertions(+) create mode 100644 src/components/ProviderCatalog.astro diff --git a/src/components/ProviderCatalog.astro b/src/components/ProviderCatalog.astro new file mode 100644 index 000000000..6ca737144 --- /dev/null +++ b/src/components/ProviderCatalog.astro @@ -0,0 +1,430 @@ +--- +import { getCollection } from 'astro:content' + +const connectors = await getCollection('docs', ({ id }) => + id.startsWith('reference/agent-connectors/'), +) + +function getSlug(id: string): string { + return id.split('/').pop() ?? '' +} + +const CATEGORY_MAP: Record = { + gmail: 'Google Workspace', + googledrive: 'Google Workspace', + googlecalendar: 'Google Workspace', + googlesheets: 'Google Workspace', + googledocs: 'Google Workspace', + googleslides: 'Google Workspace', + googlemeet: 'Google Workspace', + googleforms: 'Google Workspace', + google_ads: 'Google Workspace', + outlook: 'Microsoft 365', + onedrive: 'Microsoft 365', + microsoftword: 'Microsoft 365', + microsoftexcel: 'Microsoft 365', + microsoftteams: 'Microsoft 365', + sharepoint: 'Microsoft 365', + onenote: 'Microsoft 365', + slack: 'Communication', + discord: 'Communication', + zoom: 'Communication', + vimeo: 'Communication', + youtube: 'Communication', + intercom: 'Communication', + jira: 'Project Management', + linear: 'Project Management', + asana: 'Project Management', + monday: 'Project Management', + clickup: 'Project Management', + trello: 'Project Management', + notion: 'Project Management', + confluence: 'Project Management', + salesforce: 'CRM & Sales', + hubspot: 'CRM & Sales', + pipedrive: 'CRM & Sales', + apollo: 'CRM & Sales', + attio: 'CRM & Sales', + chorus: 'CRM & Sales', + gong: 'CRM & Sales', + attention: 'CRM & Sales', + github: 'Data & Dev', + gitlab: 'Data & Dev', + figma: 'Data & Dev', + snowflake: 'Data & Dev', + snowflakekeyauth: 'Data & Dev', + bigquery: 'Data & Dev', + dropbox: 'Data & Dev', +} + +const AUTH_MAP: Record = { + snowflakekeyauth: 'Bearer Token', + exa: 'API Key', + harvestapi: 'API Key', + 'brave-search': 'API Key', + figma: 'API Key', +} + +const CATEGORY_ORDER = [ + 'Google Workspace', + 'Microsoft 365', + 'Communication', + 'Project Management', + 'CRM & Sales', + 'Data & Dev', + 'Other', +] + +const items = connectors.map((entry) => { + const slug = getSlug(entry.id) + return { + slug, + title: entry.data.title ?? slug, + description: entry.data.description ?? '', + href: `/${entry.id}/`, + category: CATEGORY_MAP[slug] ?? 'Other', + authType: AUTH_MAP[slug] ?? 'OAuth 2.0', + iconUrl: `https://cdn.scalekit.com/sk-connect/assets/provider-icons/${slug}.svg`, + } +}) + +const grouped = CATEGORY_ORDER.map((cat) => ({ + name: cat, + items: items.filter((i) => i.category === cat).sort((a, b) => a.title.localeCompare(b.title)), +})).filter((g) => g.items.length > 0) +--- + +
+
+
+ + +
+
+ + + + +
+
+ + { + grouped.map((group) => ( +
+

{group.name}

+ +
+ )) + } + + +
+ + + + From 191141532841b8bf5d17e67da1b96604cff01590 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 11:58:16 +0530 Subject: [PATCH 07/23] feat(provider-catalog): replace AgentConnectorsSection with ProviderCatalog on index --- .../docs/guides/integrations/agent-connectors/index.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/guides/integrations/agent-connectors/index.mdx b/src/content/docs/guides/integrations/agent-connectors/index.mdx index 44ebff1d7..0ca1000bd 100644 --- a/src/content/docs/guides/integrations/agent-connectors/index.mdx +++ b/src/content/docs/guides/integrations/agent-connectors/index.mdx @@ -8,10 +8,10 @@ prev: false next: false --- -import AgentConnectorsSection from '@/components/AgentConnectorsSection.astro' +import ProviderCatalog from '@/components/ProviderCatalog.astro' Agent connectors enable AI-powered applications to connect to tools and data from popular platforms such as Slack, Google Workspace, Salesforce, Notion, and more. Each connector provides OAuth or API key authentication and exposes tools your agents can use. Choose a connector below to view setup instructions and available tools: - + From 0b5b896b1726d3f8ae8ef2f530a03a094718417d Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 12:02:15 +0530 Subject: [PATCH 08/23] fix(provider-catalog): add sidebar label, aria-pressed, CSP-safe icon error handling --- src/components/ProviderCatalog.astro | 32 +++++++++++-------- .../agent-connectors/snowflakekeyauth.mdx | 2 ++ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/components/ProviderCatalog.astro b/src/components/ProviderCatalog.astro index 6ca737144..a275fdd9d 100644 --- a/src/components/ProviderCatalog.astro +++ b/src/components/ProviderCatalog.astro @@ -6,7 +6,7 @@ const connectors = await getCollection('docs', ({ id }) => ) function getSlug(id: string): string { - return id.split('/').pop() ?? '' + return id.replace(/\/$/, '').split('/').pop() ?? id } const CATEGORY_MAP: Record = { @@ -106,10 +106,12 @@ const grouped = CATEGORY_ORDER.map((cat) => ({ />
- - - - + + + +
@@ -128,13 +130,7 @@ const grouped = CATEGORY_ORDER.map((cat) => ({ >
{item.title} @@ -202,12 +198,22 @@ const grouped = CATEGORY_ORDER.map((cat) => ({ filterPills?.forEach((pill) => { pill.addEventListener('click', () => { - filterPills.forEach((p) => p.classList.remove('active')) + filterPills.forEach((p) => { + p.classList.remove('active') + p.setAttribute('aria-pressed', 'false') + }) pill.classList.add('active') + pill.setAttribute('aria-pressed', 'true') activeFilter = pill.dataset.filter ?? 'all' applyFilters() }) }) + + catalog?.querySelectorAll('.provider-logo img').forEach((img) => { + img.addEventListener('error', () => { + img.style.display = 'none' + }) + }) + + From 0e0e5b703a2d0c43ca58f954a37c6867a0b4d3d8 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 12:20:16 +0530 Subject: [PATCH 10/23] fix(provider-catalog): expand accordion on TOC click and hash navigation --- src/components/ToolList.astro | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/components/ToolList.astro b/src/components/ToolList.astro index 9acae7ec9..46dc5e74d 100644 --- a/src/components/ToolList.astro +++ b/src/components/ToolList.astro @@ -288,10 +288,33 @@ const { tools } = Astro.props 'font-size:var(--sl-text-xs);font-family:var(--sl-font-system-mono);color:var(--sl-color-gray-2);text-decoration:none;display:block;padding:0.125rem 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;' a.addEventListener('mouseenter', () => (a.style.color = 'var(--sl-color-text-accent)')) a.addEventListener('mouseleave', () => (a.style.color = 'var(--sl-color-gray-2)')) + a.addEventListener('click', (e) => { + e.preventDefault() + const target = document.getElementById(card.id) as HTMLDetailsElement | null + if (target) { + target.open = true + target.scrollIntoView({ behavior: 'smooth', block: 'start' }) + history.pushState(null, '', `#${card.id}`) + } + }) li.appendChild(a) nestedUl.appendChild(li) }) toolListItem.appendChild(nestedUl) }) + + // Open and scroll to the target tool when navigating directly via URL hash + function openFromHash(): void { + const hash = location.hash.slice(1) + if (!hash) return + const target = document.querySelector(`.tool-card#${CSS.escape(hash)}`) + if (target) { + target.open = true + setTimeout(() => target.scrollIntoView({ behavior: 'smooth', block: 'start' }), 50) + } + } + + openFromHash() + window.addEventListener('hashchange', openFromHash) From d37dd41faaff536eb185effe32441825c2baffd8 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 12:27:57 +0530 Subject: [PATCH 11/23] feat(provider-catalog): add Figma tool data + background tint open state + number/array types --- src/components/ToolList.astro | 12 +- .../docs/reference/agent-connectors/figma.mdx | 444 +------ src/data/agent-connectors/figma.ts | 1083 +++++++++++++++++ src/types/agent-connectors.ts | 2 +- 4 files changed, 1105 insertions(+), 436 deletions(-) create mode 100644 src/data/agent-connectors/figma.ts diff --git a/src/components/ToolList.astro b/src/components/ToolList.astro index 46dc5e74d..cea38dd04 100644 --- a/src/components/ToolList.astro +++ b/src/components/ToolList.astro @@ -74,7 +74,7 @@ const { tools } = Astro.props } .tool-card[open] { border-color: var(--sl-color-hairline); - border-left: 2px solid var(--sl-color-text-accent); + background: color-mix(in srgb, var(--sl-color-text-accent) 6%, var(--sl-color-bg-nav)); } .tool-header { @@ -212,6 +212,16 @@ const { tools } = Astro.props color: #22c55e; border: 1px solid rgba(34, 197, 94, 0.2); } + .type-number { + background: rgba(249, 115, 22, 0.1); + color: #f97316; + border: 1px solid rgba(249, 115, 22, 0.2); + } + .type-array { + background: rgba(20, 184, 166, 0.1); + color: #14b8a6; + border: 1px solid rgba(20, 184, 166, 0.2); + } .req-badge { font-family: var(--sl-font-system-mono); diff --git a/src/content/docs/reference/agent-connectors/figma.mdx b/src/content/docs/reference/agent-connectors/figma.mdx index f27425a2e..96c123167 100644 --- a/src/content/docs/reference/agent-connectors/figma.mdx +++ b/src/content/docs/reference/agent-connectors/figma.mdx @@ -1,7 +1,9 @@ --- title: Figma -description: Connect to Figma to access user files, teams, projects, and design metadata via OAuth 2.0 +description: Connect to Figma API v1. Read and write files, manage components, styles, variables, webhooks, and dev resources. Enterprise features include library analytics and activity logs. tableOfContents: true +sidebar: + label: Figma head: - tag: style content: | @@ -13,23 +15,22 @@ head: } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupFigmaSection } from '@components/templates' -import { UsageFigmaSection } from '@components/templates' +import { Badge, Aside } from '@astrojs/starlight/components' +import { SetupFigmaSection, UsageFigmaSection } from '@components/templates' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/figma'
- Connect to Figma to access user files, teams, projects, and design metadata via OAuth 2.0 + Connect to Figma API v1. Read and write files, manage components, styles, variables, webhooks, and dev resources. Enterprise features include library analytics and activity logs.
- Figma logo + Figma logo
Supports authentication: - ## Set up the agent connector @@ -40,429 +41,4 @@ Supports authentication: ## Tool list -## `figma_activity_logs_list` - -Returns activity log events for an organization (Enterprise only). Includes events for file edits, permissions changes, and user actions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor from previous response for pagination. | -| `end_time` | integer | No | Unix timestamp (seconds) to stop fetching events at. | -| `event_type` | string | No | Filter by a specific event type, e.g. 'file.update'. | -| `limit` | integer | No | Maximum number of events to return (1-1000, default 100). | -| `order` | string | No | Sort order: asc or desc by timestamp. Default is desc. | -| `start_time` | integer | No | Unix timestamp (seconds) to start fetching events from. | - -## `figma_comment_reaction_create` - -Adds an emoji reaction to a comment in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The ID of the comment to react to. | -| `emoji` | string | Yes | The emoji to react with (e.g. ':thumbsup:'). | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_comment_reaction_delete` - -Removes the authenticated user's emoji reaction from a comment in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The ID of the comment to remove reaction from. | -| `emoji` | string | Yes | The emoji reaction to remove (e.g. ':thumbsup:'). | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_comment_reactions_list` - -Returns a list of emoji reactions on a specific comment in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The ID of the comment to get reactions for. | -| `cursor` | string | No | Pagination cursor for next page of results. | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_component_get` - -Returns metadata for a published component by its key, including name, description, thumbnail, and containing file information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The unique key of the component. | - -## `figma_component_set_get` - -Returns metadata for a published component set (a group of related component variants) by its key. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The unique key of the component set. | - -## `figma_dev_resource_create` - -Creates a dev resource (external link) attached to a node in a Figma file, such as a link to Storybook, Jira, or documentation. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The key of the Figma file containing the target node. | -| `name` | string | Yes | Display name for the dev resource link. | -| `node_id` | string | Yes | The ID of the node to attach the dev resource to. | -| `url` | string | Yes | The URL of the external resource. | - -## `figma_dev_resource_delete` - -Permanently deletes a dev resource from a node in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dev_resource_id` | string | Yes | The ID of the dev resource to delete. | -| `file_key` | string | Yes | The key of the Figma file containing the dev resource. | - -## `figma_dev_resource_update` - -Updates an existing dev resource attached to a node in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dev_resource_id` | string | Yes | The ID of the dev resource to update. | -| `name` | string | No | New display name for the dev resource. | -| `url` | string | No | New URL for the dev resource. | - -## `figma_dev_resources_list` - -Returns dev resources (links to external tools like Storybook, Jira, etc.) attached to nodes in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The key of the Figma file to get dev resources for. | -| `node_ids` | string | No | Comma-separated node IDs to filter by. Omit to return all dev resources in the file. | - -## `figma_file_comment_create` - -Posts a new comment on a Figma file. Can be placed at a specific canvas position or anchored to a specific node. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `client_meta` | string | No | JSON string specifying position or node anchor for the comment, e.g. `{"node_id":"1:2","node_offset":{"x":0,"y":0}}`. | -| `file_key` | string | Yes | The unique key of the Figma file. | -| `message` | string | Yes | The text content of the comment. | - -## `figma_file_comment_delete` - -Deletes a specific comment from a Figma file. Only the comment author or file owner can delete a comment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The ID of the comment to delete. | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_comments_list` - -Returns all comments left on a Figma file, including their text, author, position, and resolved status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `as_md` | boolean | No | If true, returns comment text as Markdown. | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_component_sets_list` - -Returns all published component sets in a Figma file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_components_list` - -Returns a list of all published components in a Figma file, including their keys, names, descriptions, and thumbnails. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_get` - -Returns a Figma file's full document tree including all nodes, components, styles, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `depth` | integer | No | Depth of the document tree to return (1-4). Lower depth returns faster. | -| `file_key` | string | Yes | The unique key of the Figma file (found in the file URL). | -| `version` | string | No | A specific version ID to get. Omit to get the current version. | - -## `figma_file_image_fills_get` - -Returns download URLs for all image fills used in a Figma file. Image fills are images that have been applied as fills to nodes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_images_render` - -Renders nodes from a Figma file as images (PNG, JPG, SVG, or PDF) and returns URLs to download them. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | -| `format` | string | No | Image format: jpg, png, svg, or pdf. Default is png. | -| `ids` | string | Yes | Comma-separated list of node IDs to render. | -| `scale` | number | No | Image scale factor (0.01 to 4). Default is 1. | -| `version` | string | No | A specific version ID to render from. | - -## `figma_file_nodes_get` - -Returns specific nodes from a Figma file by their node IDs, along with their children and associated styles and components. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `depth` | integer | No | Depth of the document tree to return for each node. | -| `file_key` | string | Yes | The unique key of the Figma file. | -| `ids` | string | Yes | Comma-separated list of node IDs to retrieve. | -| `version` | string | No | A specific version ID to fetch nodes from. | - -## `figma_file_styles_list` - -Returns all published styles in a Figma file, including color, text, effect, and grid styles. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_variables_local_get` - -Returns all local variables and variable collections defined in a Figma file. Requires the variables:read scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_variables_published_get` - -Returns all published variables and variable collections from a Figma file's library. Requires the variables:read scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | - -## `figma_file_variables_update` - -Creates, updates, or deletes variables and variable collections in a Figma file. Accepts a JSON payload describing the changes. Requires the variables:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_key` | string | Yes | The unique key of the Figma file. | -| `payload` | string | Yes | JSON string with variableCollections, variables, and variableModeValues arrays describing changes to apply. | - -## `figma_file_versions_list` - -Returns the version history of a Figma file, including version IDs, labels, descriptions, and creation timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Return versions created after this version ID (for pagination). | -| `before` | string | No | Return versions created before this version ID (for pagination). | -| `file_key` | string | Yes | The unique key of the Figma file. | -| `page_size` | integer | No | Number of versions to return per page. | - -## `figma_library_analytics_component_actions_get` - -Returns analytics data on component insertion, detachment, and usage actions from a library file. Enterprise only. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor from previous response. | -| `end_date` | string | No | End date for analytics in YYYY-MM-DD format. | -| `file_key` | string | Yes | The key of the library Figma file. | -| `group_by` | string | Yes | Dimension to group results by: component or team. | -| `start_date` | string | No | Start date for analytics in YYYY-MM-DD format. | - -## `figma_library_analytics_component_usages_get` - -Returns a snapshot of how many times each component from a library is used across the organization. Enterprise only. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor from previous response. | -| `file_key` | string | Yes | The key of the library Figma file. | - -## `figma_library_analytics_style_actions_get` - -Returns analytics data on style insertion and detachment actions from a library file. Enterprise only. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor from previous response. | -| `end_date` | string | No | End date for analytics in YYYY-MM-DD format. | -| `file_key` | string | Yes | The key of the library Figma file. | -| `group_by` | string | Yes | Dimension to group results by: style or team. | -| `start_date` | string | No | Start date for analytics in YYYY-MM-DD format. | - -## `figma_library_analytics_style_usages_get` - -Returns a snapshot of how many times each style from a library is used across the organization. Enterprise only. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor from previous response. | -| `file_key` | string | Yes | The key of the library Figma file. | - -## `figma_library_analytics_variable_actions_get` - -Returns analytics data on variable actions from a library file. Enterprise only. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor from previous response. | -| `end_date` | string | No | End date for analytics in YYYY-MM-DD format. | -| `file_key` | string | Yes | The key of the library Figma file. | -| `group_by` | string | Yes | Dimension to group results by: variable or team. | -| `start_date` | string | No | Start date for analytics in YYYY-MM-DD format. | - -## `figma_library_analytics_variable_usages_get` - -Returns a snapshot of how many times each variable from a library is used across the organization. Enterprise only. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor from previous response. | -| `file_key` | string | Yes | The key of the library Figma file. | - -## `figma_me_get` - -Returns the authenticated user's information including name, email, and profile image URL. - -## `figma_payments_get` - -Returns payment and plan information for a Figma user or resource, including subscription status and plan type. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `resource_id` | string | No | The ID of the plugin or widget resource. | -| `resource_type` | string | No | The type of resource: plugin or widget. | -| `user_id` | string | No | The ID of the user to get payment info for. | - -## `figma_project_files_list` - -Returns all files in a Figma project, including file keys, names, thumbnails, and last modified timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch_data` | boolean | No | If true, includes branch metadata for each file. | -| `project_id` | string | Yes | The ID of the Figma project. | - -## `figma_style_get` - -Returns metadata for a published style by its key, including name, description, style type, and containing file information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The unique key of the style. | - -## `figma_team_component_sets_list` - -Returns all published component sets in a Figma team library, with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | integer | No | Cursor for the next page of results. | -| `before` | integer | No | Cursor for the previous page of results. | -| `page_size` | integer | No | Number of component sets to return per page. | -| `team_id` | string | Yes | The ID of the Figma team. | - -## `figma_team_components_list` - -Returns all published components in a Figma team library, with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | integer | No | Cursor for the next page of results. | -| `before` | integer | No | Cursor for the previous page of results. | -| `page_size` | integer | No | Number of components to return per page. | -| `team_id` | string | Yes | The ID of the Figma team. | - -## `figma_team_get` - -Returns metadata about a Figma team, including its name and member count. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | Yes | The ID of the Figma team. | - -## `figma_team_projects_list` - -Returns all projects within a Figma team that the authenticated user has access to. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | Yes | The ID of the Figma team. | - -## `figma_team_styles_list` - -Returns all published styles in a Figma team library, with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | integer | No | Cursor for the next page of results. | -| `before` | integer | No | Cursor for the previous page of results. | -| `page_size` | integer | No | Number of styles to return per page. | -| `team_id` | string | Yes | The ID of the Figma team. | - -## `figma_team_webhooks_list` - -Returns all webhooks registered for a Figma team. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | Yes | The ID of the Figma team. | - -## `figma_webhook_create` - -Creates a new webhook that sends events to the specified endpoint URL when Figma events occur in a team. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Optional description for the webhook. | -| `endpoint` | string | Yes | The HTTPS URL to send webhook payloads to. | -| `event_type` | string | Yes | The event type to subscribe to: FILE_UPDATE, FILE_DELETE, FILE_VERSION_UPDATE, FILE_COMMENT, LIBRARY_PUBLISH. | -| `passcode` | string | Yes | A passcode included in the webhook payload for verification. | -| `status` | string | No | Webhook status: ACTIVE or PAUSED. | -| `team_id` | string | Yes | The ID of the team to subscribe to events for. | - -## `figma_webhook_delete` - -Permanently deletes a Figma webhook. This stops all future event deliveries for this webhook. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | string | Yes | The ID of the webhook to delete. | - -## `figma_webhook_get` - -Returns details of a specific Figma webhook by its ID, including event type, endpoint, and status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | string | Yes | The ID of the webhook. | - -## `figma_webhook_requests_list` - -Returns the delivery history for a webhook, including request payloads, response codes, and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | string | Yes | The ID of the webhook. | - -## `figma_webhook_update` - -Updates an existing Figma webhook's endpoint, passcode, status, or description. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description for the webhook. | -| `endpoint` | string | No | New HTTPS URL to send webhook payloads to. | -| `passcode` | string | No | New passcode for webhook verification. | -| `status` | string | No | Webhook status: ACTIVE or PAUSED. | -| `webhook_id` | string | Yes | The ID of the webhook to update. | + diff --git a/src/data/agent-connectors/figma.ts b/src/data/agent-connectors/figma.ts new file mode 100644 index 000000000..27e07dbbb --- /dev/null +++ b/src/data/agent-connectors/figma.ts @@ -0,0 +1,1083 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'figma_me_get', + description: + "Returns the authenticated user's profile information including name, email, handle, and profile image URL. No parameters required.", + params: [], + }, + { + name: 'figma_file_get', + description: + "Returns a Figma file's full document tree including all nodes, components, styles, and metadata.", + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file (found in the file URL)', + }, + { + name: 'version', + type: 'string', + required: false, + description: 'A specific version ID to retrieve; omit for the latest version', + }, + { + name: 'ids', + type: 'string', + required: false, + description: 'Comma-separated list of node IDs to limit the response to specific nodes', + }, + { + name: 'depth', + type: 'integer', + required: false, + description: 'Maximum depth of the document tree to return', + }, + { + name: 'geometry', + type: 'string', + required: false, + description: 'Set to `paths` to export vector path data for nodes', + }, + { + name: 'plugin_data', + type: 'string', + required: false, + description: 'Comma-separated list of plugin IDs to include plugin-specific data', + }, + { + name: 'branch_data', + type: 'boolean', + required: false, + description: 'Whether to include branch metadata in the response', + }, + ], + }, + { + name: 'figma_file_nodes_get', + description: + 'Returns specific nodes from a Figma file by their node IDs, along with their children and associated styles and components.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'ids', + type: 'string', + required: true, + description: 'Comma-separated list of node IDs to fetch', + }, + { + name: 'version', + type: 'string', + required: false, + description: 'A specific version ID to retrieve', + }, + { + name: 'depth', + type: 'integer', + required: false, + description: 'Maximum depth of the subtree to return', + }, + { + name: 'geometry', + type: 'string', + required: false, + description: 'Set to `paths` to export vector path data', + }, + { + name: 'plugin_data', + type: 'string', + required: false, + description: 'Comma-separated list of plugin IDs for plugin-specific data', + }, + ], + }, + { + name: 'figma_file_images_render', + description: + 'Renders nodes from a Figma file as images (PNG, JPG, SVG, or PDF) and returns download URLs.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'ids', + type: 'string', + required: true, + description: 'Comma-separated list of node IDs to render', + }, + { + name: 'scale', + type: 'number', + required: false, + description: 'Image scale factor between 0.01 and 4 (default: 1)', + }, + { + name: 'format', + type: 'string', + required: false, + description: 'Output format: `png`, `jpg`, `svg`, or `pdf` (default: `png`)', + }, + { + name: 'svg_include_id', + type: 'boolean', + required: false, + description: 'Whether to include node IDs as attributes in SVG output', + }, + { + name: 'svg_simplify_stroke', + type: 'boolean', + required: false, + description: 'Whether to simplify inside/outside strokes in SVG output', + }, + { + name: 'use_absolute_bounds', + type: 'boolean', + required: false, + description: "Whether to use the node's absolute bounding box for cropping", + }, + { + name: 'version', + type: 'string', + required: false, + description: 'A specific version ID to render', + }, + ], + }, + { + name: 'figma_file_image_fills_get', + description: + 'Returns download URLs for all image fills used in a Figma file. Image fills are images applied as fills to nodes.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + ], + }, + { + name: 'figma_file_versions_list', + description: + 'Returns the version history of a Figma file, including version IDs, labels, descriptions, and creation timestamps.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: 'Number of versions to return per page', + }, + { + name: 'before', + type: 'integer', + required: false, + description: 'Cursor for backward pagination; returns versions before this version ID', + }, + { + name: 'after', + type: 'integer', + required: false, + description: 'Cursor for forward pagination; returns versions after this version ID', + }, + ], + }, + { + name: 'figma_file_comments_list', + description: + 'Returns all comments on a Figma file, including their text, author, position, and resolved status.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'as_md', + type: 'boolean', + required: false, + description: 'Whether to return comment text formatted as Markdown', + }, + ], + }, + { + name: 'figma_file_comment_create', + description: + 'Posts a new comment on a Figma file. Can be placed at a specific canvas position or anchored to a specific node.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'message', + type: 'string', + required: true, + description: 'The text content of the comment', + }, + { + name: 'client_meta', + type: 'object', + required: false, + description: 'Coordinates or node anchor for placing the comment on the canvas', + }, + { + name: 'comment_id', + type: 'string', + required: false, + description: 'ID of the parent comment to reply to an existing thread', + }, + ], + }, + { + name: 'figma_file_comment_delete', + description: + 'Deletes a specific comment from a Figma file. Only the comment author or file owner can delete a comment.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'comment_id', + type: 'string', + required: true, + description: 'The ID of the comment to delete', + }, + ], + }, + { + name: 'figma_comment_reactions_list', + description: 'Returns a list of emoji reactions on a specific comment in a Figma file.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'comment_id', + type: 'string', + required: true, + description: 'The ID of the comment to list reactions for', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for fetching the next page of results', + }, + ], + }, + { + name: 'figma_comment_reaction_create', + description: 'Adds an emoji reaction to a comment in a Figma file.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'comment_id', + type: 'string', + required: true, + description: 'The ID of the comment to react to', + }, + { + name: 'emoji', + type: 'string', + required: true, + description: 'The emoji to add as a reaction (e.g., `:heart:`, `:+1:`)', + }, + ], + }, + { + name: 'figma_comment_reaction_delete', + description: "Removes the authenticated user's emoji reaction from a comment in a Figma file.", + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'comment_id', + type: 'string', + required: true, + description: 'The ID of the comment to remove the reaction from', + }, + { + name: 'emoji', + type: 'string', + required: true, + description: 'The emoji reaction to remove (e.g., `:heart:`, `:+1:`)', + }, + ], + }, + { + name: 'figma_file_components_list', + description: + 'Returns a list of all published components in a Figma file, including their keys, names, descriptions, and thumbnails.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + ], + }, + { + name: 'figma_component_get', + description: + 'Returns metadata for a published component by its key, including name, description, thumbnail, and containing file information.', + params: [ + { + name: 'key', + type: 'string', + required: true, + description: 'The key of the published component (from `figma_file_components_list`)', + }, + ], + }, + { + name: 'figma_file_component_sets_list', + description: 'Returns all published component sets in a Figma file.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + ], + }, + { + name: 'figma_component_set_get', + description: + 'Returns metadata for a published component set (a group of related component variants) by its key.', + params: [ + { + name: 'key', + type: 'string', + required: true, + description: 'The key of the published component set', + }, + ], + }, + { + name: 'figma_team_components_list', + description: + 'Returns all published components in a Figma team library, with pagination support.', + params: [ + { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + { + name: 'page_size', + type: 'integer', + required: false, + description: 'Number of components to return per page', + }, + { + name: 'after', + type: 'integer', + required: false, + description: 'Cursor for forward pagination', + }, + { + name: 'before', + type: 'integer', + required: false, + description: 'Cursor for backward pagination', + }, + ], + }, + { + name: 'figma_team_component_sets_list', + description: + 'Returns all published component sets in a Figma team library, with pagination support.', + params: [ + { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + { + name: 'page_size', + type: 'integer', + required: false, + description: 'Number of component sets to return per page', + }, + { + name: 'after', + type: 'integer', + required: false, + description: 'Cursor for forward pagination', + }, + { + name: 'before', + type: 'integer', + required: false, + description: 'Cursor for backward pagination', + }, + ], + }, + { + name: 'figma_file_styles_list', + description: + 'Returns all published styles in a Figma file, including color, text, effect, and grid styles.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + ], + }, + { + name: 'figma_style_get', + description: + 'Returns metadata for a published style by its key, including name, description, style type, and containing file information.', + params: [ + { + name: 'key', + type: 'string', + required: true, + description: 'The key of the published style', + }, + ], + }, + { + name: 'figma_team_styles_list', + description: 'Returns all published styles in a Figma team library, with pagination support.', + params: [ + { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + { + name: 'page_size', + type: 'integer', + required: false, + description: 'Number of styles to return per page', + }, + { + name: 'after', + type: 'integer', + required: false, + description: 'Cursor for forward pagination', + }, + { + name: 'before', + type: 'integer', + required: false, + description: 'Cursor for backward pagination', + }, + ], + }, + { + name: 'figma_file_variables_local_get', + description: + 'Returns all local variables and variable collections defined in a Figma file. Requires the `file_variables:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + ], + }, + { + name: 'figma_file_variables_published_get', + description: + "Returns all published variables and variable collections from a Figma file's library. Requires the `file_variables:read` scope.", + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + ], + }, + { + name: 'figma_file_variables_update', + description: + 'Creates, updates, or deletes variables and variable collections in a Figma file. Accepts a JSON payload describing the changes. Requires the `file_variables:write` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'variableCollections', + type: 'array', + required: false, + description: 'Variable collection changes: create, update, or delete collections', + }, + { + name: 'variableModes', + type: 'array', + required: false, + description: 'Variable mode changes: create, update, or delete modes within collections', + }, + { + name: 'variables', + type: 'array', + required: false, + description: 'Variable changes: create, update, or delete individual variables', + }, + ], + }, + { + name: 'figma_team_get', + description: 'Returns metadata about a Figma team, including its name and member count.', + params: [ + { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + ], + }, + { + name: 'figma_team_projects_list', + description: + 'Returns all projects within a Figma team that the authenticated user has access to.', + params: [ + { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + ], + }, + { + name: 'figma_project_files_list', + description: + 'Returns all files in a Figma project, including file keys, names, thumbnails, and last modified timestamps.', + params: [ + { + name: 'project_id', + type: 'string', + required: true, + description: 'The ID of the Figma project', + }, + { + name: 'branch_data', + type: 'boolean', + required: false, + description: 'Whether to include branch metadata for each file', + }, + ], + }, + { + name: 'figma_dev_resources_list', + description: + 'Returns dev resources (links to external tools like Storybook, Jira, etc.) attached to nodes in a Figma file.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'node_id', + type: 'string', + required: false, + description: 'Filter results to dev resources attached to a specific node ID', + }, + ], + }, + { + name: 'figma_dev_resource_create', + description: + 'Creates a dev resource (external link) attached to a node in a Figma file, such as a link to Storybook, Jira, or documentation.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'node_id', + type: 'string', + required: true, + description: 'The ID of the node to attach the dev resource to', + }, + { + name: 'name', + type: 'string', + required: true, + description: 'Display name for the dev resource link', + }, + { + name: 'url', + type: 'string', + required: true, + description: 'The URL of the external resource', + }, + ], + }, + { + name: 'figma_dev_resource_update', + description: 'Updates an existing dev resource attached to a node in a Figma file.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'dev_resource_id', + type: 'string', + required: true, + description: 'The ID of the dev resource to update', + }, + { + name: 'name', + type: 'string', + required: false, + description: 'Updated display name for the dev resource', + }, + { + name: 'url', + type: 'string', + required: false, + description: 'Updated URL for the dev resource', + }, + ], + }, + { + name: 'figma_dev_resource_delete', + description: 'Permanently deletes a dev resource from a node in a Figma file.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the Figma file', + }, + { + name: 'dev_resource_id', + type: 'string', + required: true, + description: 'The ID of the dev resource to delete', + }, + ], + }, + { + name: 'figma_webhook_create', + description: + 'Creates a new webhook that sends events to the specified endpoint URL when Figma events occur in a team. Requires the `webhooks:write` scope.', + params: [ + { + name: 'team_id', + type: 'string', + required: true, + description: 'The ID of the Figma team to register the webhook for', + }, + { + name: 'event_type', + type: 'string', + required: true, + description: + 'The event type that triggers the webhook (e.g., `FILE_UPDATE`, `FILE_VERSION_UPDATE`, `FILE_DELETE`, `LIBRARY_PUBLISH`, `FILE_COMMENT`)', + }, + { + name: 'endpoint', + type: 'string', + required: true, + description: 'The HTTPS URL that receives webhook POST requests', + }, + { + name: 'passcode', + type: 'string', + required: true, + description: 'A secret string included in each webhook payload for request verification', + }, + { + name: 'status', + type: 'string', + required: false, + description: 'Webhook status: `ACTIVE` or `PAUSED` (default: `ACTIVE`)', + }, + { + name: 'description', + type: 'string', + required: false, + description: "A human-readable description of the webhook's purpose", + }, + ], + }, + { + name: 'figma_webhook_get', + description: + 'Returns details of a specific Figma webhook by its ID, including event type, endpoint, and status.', + params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: 'The ID of the webhook to retrieve', + }, + ], + }, + { + name: 'figma_webhook_update', + description: "Updates an existing Figma webhook's endpoint, passcode, status, or description.", + params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: 'The ID of the webhook to update', + }, + { + name: 'endpoint', + type: 'string', + required: false, + description: 'Updated HTTPS URL to receive webhook events', + }, + { + name: 'passcode', + type: 'string', + required: false, + description: 'Updated secret for verifying webhook payloads', + }, + { + name: 'status', + type: 'string', + required: false, + description: 'Updated status: `ACTIVE` or `PAUSED`', + }, + { + name: 'description', + type: 'string', + required: false, + description: 'Updated description for the webhook', + }, + ], + }, + { + name: 'figma_webhook_delete', + description: + 'Permanently deletes a Figma webhook. This stops all future event deliveries for this webhook.', + params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: 'The ID of the webhook to delete', + }, + ], + }, + { + name: 'figma_team_webhooks_list', + description: 'Returns all webhooks registered for a Figma team.', + params: [ + { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + ], + }, + { + name: 'figma_webhook_requests_list', + description: + 'Returns the delivery history for a webhook, including request payloads, response codes, and timestamps.', + params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: 'The ID of the webhook to fetch request history for', + }, + ], + }, + { + name: 'figma_payments_get', + description: + 'Returns payment and plan information for a Figma user or resource, including subscription status and plan type.', + params: [ + { + name: 'user_id', + type: 'string', + required: false, + description: 'The ID of the user to check payment status for', + }, + { + name: 'community_file_id', + type: 'string', + required: false, + description: 'The ID of a community file to check resource payment status', + }, + { + name: 'plugin_id', + type: 'string', + required: false, + description: 'The ID of a plugin to check payment status for', + }, + ], + }, + { + name: 'figma_activity_logs_list', + description: + 'Returns activity log events for an organization. Includes events for file edits, permissions changes, and user actions. Enterprise only: requires organization admin permissions.', + params: [ + { + name: 'org_id', + type: 'string', + required: true, + description: 'The ID of the Figma organization', + }, + { + name: 'events', + type: 'string', + required: false, + description: 'Comma-separated list of event types to filter by', + }, + { + name: 'start_time', + type: 'integer', + required: false, + description: 'Unix timestamp (seconds) for the start of the time range', + }, + { + name: 'end_time', + type: 'integer', + required: false, + description: 'Unix timestamp (seconds) for the end of the time range', + }, + { + name: 'limit', + type: 'integer', + required: false, + description: 'Number of events to return per page', + }, + { + name: 'next_page', + type: 'string', + required: false, + description: 'Pagination cursor returned by the previous response', + }, + ], + }, + { + name: 'figma_library_analytics_component_actions_get', + description: + 'Returns analytics data on component insertion, detachment, and usage actions from a library file. Enterprise only: requires the `library_analytics:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the library file', + }, + { + name: 'group_by', + type: 'string', + required: true, + description: 'Dimension to group results by: `component` or `team`', + }, + { + name: 'start_date', + type: 'string', + required: false, + description: 'Start date for the analytics range (ISO 8601 format, e.g., `2024-01-01`)', + }, + { + name: 'end_date', + type: 'string', + required: false, + description: 'End date for the analytics range (ISO 8601 format)', + }, + { + name: 'order', + type: 'string', + required: false, + description: 'Sort order for results: `asc` or `desc`', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for the next page of results', + }, + ], + }, + { + name: 'figma_library_analytics_component_usages_get', + description: + 'Returns a snapshot of how many times each component from a library is used across the organization. Enterprise only: requires the `library_analytics:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the library file', + }, + { + name: 'group_by', + type: 'string', + required: true, + description: 'Dimension to group results by: `component` or `team`', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for the next page of results', + }, + ], + }, + { + name: 'figma_library_analytics_style_actions_get', + description: + 'Returns analytics data on style insertion and detachment actions from a library file. Enterprise only: requires the `library_analytics:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the library file', + }, + { + name: 'group_by', + type: 'string', + required: true, + description: 'Dimension to group results by: `style` or `team`', + }, + { + name: 'start_date', + type: 'string', + required: false, + description: 'Start date for the analytics range (ISO 8601 format)', + }, + { + name: 'end_date', + type: 'string', + required: false, + description: 'End date for the analytics range (ISO 8601 format)', + }, + { + name: 'order', + type: 'string', + required: false, + description: 'Sort order for results: `asc` or `desc`', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for the next page of results', + }, + ], + }, + { + name: 'figma_library_analytics_style_usages_get', + description: + 'Returns a snapshot of how many times each style from a library is used across the organization. Enterprise only: requires the `library_analytics:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the library file', + }, + { + name: 'group_by', + type: 'string', + required: true, + description: 'Dimension to group results by: `style` or `team`', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for the next page of results', + }, + ], + }, + { + name: 'figma_library_analytics_variable_actions_get', + description: + 'Returns analytics data on variable actions from a library file. Enterprise only: requires the `library_analytics:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the library file', + }, + { + name: 'group_by', + type: 'string', + required: true, + description: 'Dimension to group results by: `variable` or `team`', + }, + { + name: 'start_date', + type: 'string', + required: false, + description: 'Start date for the analytics range (ISO 8601 format)', + }, + { + name: 'end_date', + type: 'string', + required: false, + description: 'End date for the analytics range (ISO 8601 format)', + }, + { + name: 'order', + type: 'string', + required: false, + description: 'Sort order for results: `asc` or `desc`', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for the next page of results', + }, + ], + }, + { + name: 'figma_library_analytics_variable_usages_get', + description: + 'Returns a snapshot of how many times each variable from a library is used across the organization. Enterprise only: requires the `library_analytics:read` scope.', + params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: 'The unique key identifying the library file', + }, + { + name: 'group_by', + type: 'string', + required: true, + description: 'Dimension to group results by: `variable` or `team`', + }, + { + name: 'cursor', + type: 'string', + required: false, + description: 'Pagination cursor for the next page of results', + }, + ], + }, +] diff --git a/src/types/agent-connectors.ts b/src/types/agent-connectors.ts index 4e6e649c3..979253cd2 100644 --- a/src/types/agent-connectors.ts +++ b/src/types/agent-connectors.ts @@ -1,6 +1,6 @@ // src/types/agent-connectors.ts -export type ParamType = 'string' | 'boolean' | 'integer' | 'object' +export type ParamType = 'string' | 'boolean' | 'integer' | 'number' | 'object' | 'array' export interface ToolParam { name: string From 52d313a2e1ea8b39976dc9d3e78c43ca7986999e Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 12:33:49 +0530 Subject: [PATCH 12/23] feat(provider-catalog): update sync script to generate TS data files + ToolList MDX --- scripts/sync-agent-connectors.js | 134 +++++++++++++++++-------------- 1 file changed, 74 insertions(+), 60 deletions(-) diff --git a/scripts/sync-agent-connectors.js b/scripts/sync-agent-connectors.js index 9262482f4..22a99df47 100644 --- a/scripts/sync-agent-connectors.js +++ b/scripts/sync-agent-connectors.js @@ -508,6 +508,57 @@ function syncTemplateIndex(setupMap, usageMap) { fs.writeFileSync(indexPath, lines.join('\n') + '\n', 'utf8') } +// --------------------------------------------------------------------------- +// TypeScript data file generation — src/data/agent-connectors/.ts +// --------------------------------------------------------------------------- + +function mapParamType(rawType) { + if (Array.isArray(rawType)) rawType = rawType[0] || 'string' + const allowed = ['string', 'boolean', 'integer', 'number', 'object', 'array'] + return allowed.includes(rawType) ? rawType : 'string' +} + +function escapeTemplateLiteral(str) { + return (str || '').replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${') +} + +function generateTsDataFile(provider, tools) { + const sortedTools = [...tools].sort((a, b) => (a.name || '').localeCompare(b.name || '')) + const lines = [] + lines.push("import type { Tool } from '../../types/agent-connectors'") + lines.push('') + lines.push('export const tools: Tool[] = [') + + for (const tool of sortedTools) { + const name = tool.name || 'unnamed_tool' + const description = escapeTemplateLiteral(tool.description || 'No description available.') + const inputSchema = tool.input_schema || {} + const properties = Object.entries(inputSchema.properties || {}) + const required = inputSchema.required || [] + + lines.push(' {') + lines.push(` name: '${name}',`) + lines.push(` description: \`${description}\`,`) + lines.push(' params: [') + + for (const [propName, propInfo] of properties) { + const type = mapParamType(propInfo.type || 'string') + const isRequired = required.includes(propName) + const desc = escapeTemplateLiteral(propInfo.description || 'No description.') + lines.push( + ` { name: '${propName}', type: '${type}', required: ${isRequired}, description: \`${desc}\` },`, + ) + } + + lines.push(' ],') + lines.push(' },') + } + + lines.push(']') + lines.push('') + return lines.join('\n') +} + // --------------------------------------------------------------------------- // MDX generation — port of Python MDXGenerator.generate_mdx_content() // --------------------------------------------------------------------------- @@ -533,9 +584,9 @@ function generateMdxContent(provider, tools) { lines.push(`title: ${providerName}`) lines.push(`description: ${providerDescription}`) lines.push('tableOfContents: true') - + lines.push('sidebar:') + lines.push(` label: ${providerName}`) if (comingSoon) { - lines.push('sidebar:') lines.push(' badge:') lines.push(' text: Soon') lines.push(' variant: tip') @@ -548,18 +599,14 @@ function generateMdxContent(provider, tools) { lines.push(' .sl-markdown-content h2 {') lines.push(' font-size: var(--sl-text-xl);') lines.push(' }') - lines.push(' table td:first-child, table th:first-child {') - lines.push(' white-space: nowrap;') - lines.push(' }') lines.push('---') lines.push('') // Imports - lines.push( - "import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components'", - ) - lines.push("import { Accordion, AccordionItem } from 'accessible-astro-components'") + lines.push("import { Badge } from '@astrojs/starlight/components'") + lines.push("import ToolList from '@/components/ToolList.astro'") const providerSlug = toSafeIdentifier(provider.identifier) + lines.push(`import { tools } from '@/data/agent-connectors/${providerSlug}'`) const setupComponentName = getSetupComponent(SETUP_STEM_MAP, providerSlug) const usageComponentName = getUsageComponent(USAGE_STEM_MAP, providerSlug) if (setupComponentName) { @@ -609,59 +656,12 @@ function generateMdxContent(provider, tools) { lines.push('') } - // Tool list heading + // Tool list if (tools.length > 0) { lines.push('## Tool list') lines.push('') - } - - // Per-tool sections (sorted by name, matching Python's sorted(tool_files)) - const sortedTools = [...tools].sort((a, b) => (a.name || '').localeCompare(b.name || '')) - - for (const tool of sortedTools) { - const toolName = tool.name || 'unnamed_tool' - const toolDescription = tool.description || 'No description available.' - const inputSchema = tool.input_schema || {} - const properties = inputSchema.properties || {} - const requiredFields = inputSchema.required || [] - - lines.push(`## \`${toolName}\``) + lines.push('') lines.push('') - lines.push(renderMarkdownWithAst(toolDescription)) - lines.push('') - - const propEntries = Object.entries(properties) - if (propEntries.length > 0) { - lines.push('| Name | Type | Required | Description |') - lines.push('| --- | --- | --- | --- |') - - for (const [propName, propInfo] of propEntries) { - let propType = propInfo.type || 'string' - const propDescription = renderMarkdownWithAst(propInfo.description || 'No description', { - tableCell: true, - }) - - // Handle type arrays like ["string", "null"] - if (Array.isArray(propType)) { - propType = propType[0] || 'string' - } - - // Handle array and object types - if (propType === 'array') { - const items = propInfo.items || {} - let itemType = items.type || 'unknown' - if (Array.isArray(itemType)) itemType = itemType[0] || 'unknown' - propType = `\`array<${itemType}>\`` - } else if (propType === 'object') { - propType = '`object`' - } - - const isRequired = requiredFields.includes(propName) ? 'Yes' : 'No' - lines.push(`| \`${propName}\` | ${propType} | ${isRequired} | ${propDescription} |`) - } - - lines.push('') - } } return lines.join('\n') @@ -693,6 +693,9 @@ async function main() { const outputDir = path.join(__dirname, '../src/content/docs/reference/agent-connectors') fs.mkdirSync(outputDir, { recursive: true }) + const dataOutputDir = path.join(__dirname, '../src/data/agent-connectors') + fs.mkdirSync(dataOutputDir, { recursive: true }) + console.log(`🔑 Authenticating with ${host}...`) const token = await getAccessToken(host, clientId, clientSecret) console.log('✓ Access token obtained') @@ -744,6 +747,16 @@ async function main() { } fs.writeFileSync(filePath, mdxContent, 'utf8') + + const tsContent = generateTsDataFile(provider, providerTools) + const tsFileName = safeIdentifier + '.ts' + const tsFilePath = path.join(dataOutputDir, tsFileName) + if (!tsFilePath.startsWith(dataOutputDir + path.sep)) { + console.warn(` ⚠ Skipping unsafe data path for identifier "${identifier}"`) + continue + } + fs.writeFileSync(tsFilePath, tsContent, 'utf8') + console.log(` ✓ ${fileName} (${providerTools.length} tools)`) written++ } @@ -751,9 +764,10 @@ async function main() { console.log(`\n📊 Summary:`) console.log(` Providers: ${providers.length}`) console.log(` Tools: ${tools.length}`) - console.log(` Files written: ${written}`) + console.log(` Files written: ${written} MDX + ${written} TS data`) console.log(` Orphans removed: ${removed}`) - console.log(` Output: src/content/docs/reference/agent-connectors/`) + console.log(` MDX output: src/content/docs/reference/agent-connectors/`) + console.log(` Data output: src/data/agent-connectors/`) console.log('🎉 Done!') } From e726b3268a3624696f4aa0feef9b0b0dc4e2722f Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 16:11:02 +0530 Subject: [PATCH 13/23] updated all providers --- .../templates/agent-connectors/index.ts | 1 + .../reference/agent-connectors/airtable.mdx | 10 +- .../reference/agent-connectors/apollo.mdx | 131 +- .../docs/reference/agent-connectors/asana.mdx | 10 +- .../reference/agent-connectors/attention.mdx | 10 +- .../docs/reference/agent-connectors/attio.mdx | 542 +------- .../reference/agent-connectors/bigquery.mdx | 10 +- .../reference/agent-connectors/chorus.mdx | 10 +- .../agent-connectors/clari_copilot.mdx | 10 +- .../reference/agent-connectors/clickup.mdx | 10 +- .../reference/agent-connectors/confluence.mdx | 10 +- .../reference/agent-connectors/discord.mdx | 122 +- .../reference/agent-connectors/dropbox.mdx | 9 +- .../docs/reference/agent-connectors/exa.mdx | 130 +- .../reference/agent-connectors/fathom.mdx | 10 +- .../docs/reference/agent-connectors/figma.mdx | 12 +- .../reference/agent-connectors/freshdesk.mdx | 148 +-- .../reference/agent-connectors/github.mdx | 157 +-- .../reference/agent-connectors/gitlab.mdx | 1164 +---------------- .../docs/reference/agent-connectors/gmail.mdx | 110 +- .../docs/reference/agent-connectors/gong.mdx | 304 +---- .../reference/agent-connectors/google_ads.mdx | 10 +- .../agent-connectors/googlecalendar.mdx | 127 +- .../reference/agent-connectors/googledocs.mdx | 55 +- .../agent-connectors/googledrive.mdx | 53 +- .../agent-connectors/googleforms.mdx | 48 +- .../reference/agent-connectors/googlemeet.mdx | 11 +- .../agent-connectors/googlesheets.mdx | 84 +- .../agent-connectors/googleslides.mdx | 31 +- .../reference/agent-connectors/granolamcp.mdx | 84 +- .../reference/agent-connectors/harvestapi.mdx | 283 +--- .../reference/agent-connectors/hubspot.mdx | 142 +- .../reference/agent-connectors/intercom.mdx | 10 +- .../docs/reference/agent-connectors/jira.mdx | 10 +- .../reference/agent-connectors/linear.mdx | 63 +- .../agent-connectors/microsoftexcel.mdx | 11 +- .../agent-connectors/microsoftteams.mdx | 11 +- .../agent-connectors/microsoftword.mdx | 11 +- .../reference/agent-connectors/monday.mdx | 10 +- .../reference/agent-connectors/notion.mdx | 280 +--- .../reference/agent-connectors/onedrive.mdx | 10 +- .../reference/agent-connectors/onenote.mdx | 10 +- .../reference/agent-connectors/outlook.mdx | 325 +---- .../agent-connectors/phantombuster.mdx | 330 +---- .../reference/agent-connectors/pipedrive.mdx | 678 +--------- .../reference/agent-connectors/salesforce.mdx | 532 +------- .../reference/agent-connectors/servicenow.mdx | 9 +- .../reference/agent-connectors/sharepoint.mdx | 10 +- .../docs/reference/agent-connectors/slack.mdx | 196 +-- .../reference/agent-connectors/snowflake.mdx | 184 +-- .../agent-connectors/snowflakekeyauth.mdx | 15 +- .../reference/agent-connectors/trello.mdx | 9 +- .../docs/reference/agent-connectors/vimeo.mdx | 343 +---- .../reference/agent-connectors/youtube.mdx | 405 +----- .../reference/agent-connectors/zendesk.mdx | 184 +-- .../docs/reference/agent-connectors/zoom.mdx | 10 +- src/data/agent-connectors/figma.ts | 999 ++++++-------- src/data/agent-connectors/snowflakekeyauth.ts | 238 ++-- 58 files changed, 835 insertions(+), 7906 deletions(-) diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts index 4b31499b0..2eba989d1 100644 --- a/src/components/templates/agent-connectors/index.ts +++ b/src/components/templates/agent-connectors/index.ts @@ -59,6 +59,7 @@ export { default as UsageChorusSection } from './_usage-chorus.mdx' export { default as UsageClariCopilotSection } from './_usage-clari_copilot.mdx' export { default as UsageClickupSection } from './_usage-clickup.mdx' export { default as UsageConfluenceSection } from './_usage-confluence.mdx' +export { default as UsageBraveSearchSection } from './_usage-brave-search.mdx' export { default as UsageDiscordSection } from './_usage-discord.mdx' export { default as UsageDropboxSection } from './_usage-dropbox.mdx' export { default as UsageExaSection } from './_usage-exa.mdx' diff --git a/src/content/docs/reference/agent-connectors/airtable.mdx b/src/content/docs/reference/agent-connectors/airtable.mdx index bf4455f4a..cb5b1f69b 100644 --- a/src/content/docs/reference/agent-connectors/airtable.mdx +++ b/src/content/docs/reference/agent-connectors/airtable.mdx @@ -2,19 +2,19 @@ title: Airtable description: Connect to Airtable. Manage databases, tables, records, and collaborate on structured data tableOfContents: true +sidebar: + label: Airtable head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/airtable' import { SetupAirtableSection } from '@components/templates' import { UsageAirtableSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/apollo.mdx b/src/content/docs/reference/agent-connectors/apollo.mdx index 955fd136a..c4141bda8 100644 --- a/src/content/docs/reference/agent-connectors/apollo.mdx +++ b/src/content/docs/reference/agent-connectors/apollo.mdx @@ -2,19 +2,19 @@ title: Apollo description: Connect to Apollo.io to search and enrich B2B contacts and accounts, manage CRM contacts, and automate outreach sequences. tableOfContents: true +sidebar: + label: Apollo head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/apollo' import { SetupApolloSection } from '@components/templates' import { UsageApolloSection } from '@components/templates' @@ -40,123 +40,4 @@ Supports authentication: ## Tool list -## `apollo_create_account` - -Create a new account (company) record in your Apollo CRM. Accounts represent organizations and can be linked to contacts. Check for duplicates before creating to avoid double entries. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | No | Website domain of the company | -| `linkedin_url` | string | No | LinkedIn company page URL | -| `name` | string | Yes | Name of the company/account | -| `phone_number` | string | No | Main phone number of the company | -| `raw_address` | string | No | Physical address of the company | - -## `apollo_create_contact` - -Create a new contact record in your Apollo CRM. The contact will appear in your Apollo contacts list and can be enrolled in sequences. Check for duplicates before creating to avoid double entries. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | No | Apollo account ID to associate this contact with | -| `email` | string | No | Email address of the contact | -| `first_name` | string | Yes | First name of the contact | -| `last_name` | string | Yes | Last name of the contact | -| `linkedin_url` | string | No | LinkedIn profile URL of the contact | -| `organization_name` | string | No | Company name the contact works at | -| `phone` | string | No | Phone number of the contact | -| `title` | string | No | Job title of the contact | - -## `apollo_enrich_account` - -Enrich a company/account record with Apollo firmographic data using the company's website domain or name. Returns verified employee count, revenue estimates, industry, tech stack, funding rounds, and social profiles. Consumes Apollo credits per match. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | No | Website domain of the company to enrich (e.g., acmecorp.com) | -| `name` | string | No | Company name to enrich (used if domain is not available) | - -## `apollo_enrich_contact` - -Enrich a contact using Apollo's people matching engine. Provide an email address or name + company to retrieve a verified contact profile. Revealing personal emails or phone numbers consumes additional Apollo credits per successful match. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | No | Work email address of the contact to enrich | -| `first_name` | string | No | First name of the contact to enrich | -| `last_name` | string | No | Last name of the contact to enrich | -| `linkedin_url` | string | No | LinkedIn profile URL for precise matching | -| `organization_name` | string | No | Company name to assist in matching | -| `reveal_personal_emails` | boolean | No | Attempt to reveal personal email addresses (consumes extra Apollo credits) | -| `reveal_phone_number` | boolean | No | Attempt to reveal direct phone numbers (consumes extra Apollo credits) | - -## `apollo_get_account` - -Retrieve the full profile of a company account from Apollo by its ID. Returns detailed firmographic data including employee count, revenue estimates, industry, tech stack, funding information, and social profiles. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The Apollo account (organization) ID to retrieve | - -## `apollo_get_contact` - -Retrieve the full profile of a contact from Apollo by their ID. Returns detailed professional information including email, phone, LinkedIn URL, employment history, education, and social profiles. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `contact_id` | string | Yes | The Apollo contact ID to retrieve | - -## `apollo_list_sequences` - -List available email sequences (Apollo Sequences / Emailer Campaigns) in your Apollo account. Supports filtering by name and pagination. Returns sequence ID, name, status, and step count. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination (starts at 1) | -| `per_page` | integer | No | Number of sequences to return per page (max 100) | -| `search` | string | No | Filter sequences by name (partial match) | - -## `apollo_search_accounts` - -Search Apollo's company database using firmographic filters such as company name, industry, employee count range, revenue range, and location. Returns matching account records with company details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_name` | string | No | Filter accounts by company name (partial match supported) | -| `employee_ranges` | string | No | Comma-separated employee count ranges (e.g., 1,10,11,50,51,200) | -| `industry` | string | No | Filter accounts by industry vertical | -| `keywords` | string | No | Keyword search across company name, description, and domain | -| `location` | string | No | Filter accounts by headquarters city, state, or country | -| `page` | integer | No | Page number for pagination (starts at 1) | -| `per_page` | integer | No | Number of accounts to return per page (max 100) | - -## `apollo_search_contacts` - -Search contacts in your Apollo CRM using filters such as job title, company, and sort order. Returns matching contact records with professional details. Results are paginated. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_name` | string | No | Filter contacts by company name | -| `industry` | string | No | Filter contacts by their company's industry (e.g., Software, Healthcare) | -| `keywords` | string | No | Full-text keyword search across contact name, title, company, and bio | -| `location` | string | No | Filter contacts by city, state, or country | -| `page` | integer | No | Page number for pagination (starts at 1) | -| `per_page` | integer | No | Number of contacts to return per page (max 100) | -| `seniority` | string | No | Filter by seniority level (e.g., c_suite, vp, director, manager, senior, entry) | -| `title` | string | No | Filter contacts by job title keywords (e.g., VP of Sales) | - -## `apollo_update_contact` - -Update properties or CRM stage of an existing Apollo contact record by contact ID. Only the provided fields will be updated; omitted fields remain unchanged. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `contact_id` | string | Yes | The Apollo contact ID to update | -| `contact_stage_id` | string | No | Apollo CRM stage ID to move the contact to | -| `email` | string | No | Updated email address for the contact | -| `first_name` | string | No | Updated first name | -| `last_name` | string | No | Updated last name | -| `linkedin_url` | string | No | Updated LinkedIn profile URL | -| `organization_name` | string | No | Updated company name | -| `phone` | string | No | Updated phone number | -| `title` | string | No | Updated job title | + diff --git a/src/content/docs/reference/agent-connectors/asana.mdx b/src/content/docs/reference/agent-connectors/asana.mdx index bfcd4df0a..cccc8f98d 100644 --- a/src/content/docs/reference/agent-connectors/asana.mdx +++ b/src/content/docs/reference/agent-connectors/asana.mdx @@ -2,19 +2,19 @@ title: Asana description: Connect to Asana. Manage tasks, projects, teams, and workflow automation tableOfContents: true +sidebar: + label: Asana head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/asana' import { SetupAsanaSection } from '@components/templates' import { UsageAsanaSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/attention.mdx b/src/content/docs/reference/agent-connectors/attention.mdx index bba279bac..62a84ac8e 100644 --- a/src/content/docs/reference/agent-connectors/attention.mdx +++ b/src/content/docs/reference/agent-connectors/attention.mdx @@ -2,19 +2,19 @@ title: Attention description: Connect to Attention for AI insights, conversations, teams, and workflows tableOfContents: true +sidebar: + label: Attention head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/attention' import { UsageAttentionSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/attio.mdx b/src/content/docs/reference/agent-connectors/attio.mdx index eea9a635a..d156c7d7c 100644 --- a/src/content/docs/reference/agent-connectors/attio.mdx +++ b/src/content/docs/reference/agent-connectors/attio.mdx @@ -2,19 +2,19 @@ title: Attio description: Connect to Attio CRM to manage contacts, companies, deals, notes, tasks, and lists with a modern relationship management platform. tableOfContents: true +sidebar: + label: Attio head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/attio' import { SetupAttioSection } from '@components/templates' import { UsageAttioSection } from '@components/templates' @@ -40,534 +40,4 @@ Supports authentication: ## Tool list -## `attio_add_to_list` - -Add a record (contact, company, deal, or custom object) to a specific Attio list. Returns the newly created list entry with its entry ID, which can be used to remove it later. If the record is already in the list, a new entry is created. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entry_values` | `object` | No | Optional attribute values to set on the list entry itself (not the underlying record). Keys are attribute slugs, values are the data to set. Example: `{"stage": "qualified"}` | -| `list_id` | string | Yes | The UUID of the Attio list to add the record to. Use the List Lists tool (attio_list_lists) to retrieve available lists and their UUIDs. | -| `parent_object` | string | Yes | The object type slug the record belongs to. Must match the object type the list is configured for — run attio_list_lists to check the list's parent object before adding. | -| `parent_record_id` | string | Yes | The UUID of the record to add to the list. Must be a valid UUID — obtain this from search or list records results. | - -## `attio_create_attribute` - -Creates a new attribute on an Attio object or list. Requires api_slug, title, type, description, is_required, is_unique, is_mct, and config. The config object varies by type — for most types pass an empty object `{}`. For select/multiselect, config can include options. For record-reference, config includes the target object. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `api_slug` | string | Yes | Snake_case identifier for the new attribute. Must be unique within the object. | -| `config` | `object` | Yes | Type-specific configuration object. For most types (text, number, date, checkbox, etc.) pass an empty object `{}`. For record-reference, pass `{"relationship": {"object": "companies"}}`. | -| `description` | string | Yes | Human-readable description of what this attribute is used for. | -| `is_multiselect` | boolean | Yes | Whether this attribute allows multiple values per record. | -| `is_required` | boolean | Yes | Whether this attribute is required when creating records of this object type. | -| `is_unique` | boolean | Yes | Whether values for this attribute must be unique across all records of this object type. | -| `object` | string | Yes | Slug or UUID of the object to create the attribute on. Common slugs: people, companies, deals. | -| `title` | string | Yes | Human-readable display title for the attribute. | -| `type` | string | Yes | Data type of the attribute. Supported values: text, number, select, multiselect, status, date, timestamp, checkbox, currency, record-reference, actor-reference, location, domain, email-address, phone-number, interaction. | - -## `attio_create_comment` - -Creates a new comment on a record in Attio. Requires author_id (workspace member UUID), content, record_object (e.g. people, companies, deals), and record_id. Optionally provide thread_id to reply to an existing thread. Format is always plaintext. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `author_id` | string | Yes | UUID of the workspace member who is authoring the comment. Use the List Workspace Members tool to find member UUIDs. | -| `content` | string | Yes | Plaintext content of the comment. | -| `record_id` | string | Yes | UUID of the record to attach the comment to. | -| `record_object` | string | Yes | Object slug or UUID of the record to comment on. Common slugs: people, companies, deals. | -| `thread_id` | string | No | UUID of an existing comment thread to reply to. Leave empty to start a new top-level comment. | - -## `attio_create_company` - -Creates a new company record in Attio. Throws an error on conflicts of unique attributes like domains. Use Assert Company if you prefer to update on conflicts. Note: The logo_url attribute cannot currently be set via the API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `values` | `object` | Yes | Attribute values for the new company record. | - -## `attio_create_deal` - -Creates a new deal record in Attio. Throws an error on conflicts of unique attributes. Provide at least one attribute value in the values field. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `values` | `object` | Yes | Attribute values for the new deal record. | - -## `attio_create_list` - -Creates a new list in Attio. Requires workspace_access (one of: full-access, read-and-write, read-only) and workspace_member_access array. After creation, add attributes using Create Attribute and records using Create Entry. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `api_slug` | string | Yes | Snake_case identifier for the new list used in API access. | -| `name` | string | Yes | Human-readable display name for the new list. | -| `parent_object` | string | Yes | Object slug the list tracks. Must be a valid object slug such as people, companies, or deals. | -| `workspace_access` | string | Yes | Access level for all workspace members. Must be one of: full-access, read-and-write, read-only. Use full-access to give all members full control. | -| `workspace_member_access` | `array` | No | Optional array of per-member access overrides. Leave empty for uniform access via workspace_access. Each item: `{"workspace_member_id": "uuid", "level": "full-access"}`. | - -## `attio_create_note` - -Create a note on an Attio record (person, company, deal, or custom object). Notes support plaintext or Markdown formatting. You can optionally backdate the note by specifying a created_at timestamp, or associate it with an existing meeting via meeting_id. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content` | string | Yes | Body of the note. Use plain text or Markdown depending on the format field. Line breaks are supported via \n in plaintext mode. | -| `created_at` | string | No | ISO 8601 timestamp for backdating the note. Defaults to the current time if not provided. Example: "2024-01-15T10:30:00Z" | -| `format` | string | Yes | Format of the note content. Must be either "plaintext" or "markdown". | -| `meeting_id` | string | No | UUID of an existing meeting to associate with this note. Optional. | -| `parent_object` | string | Yes | The slug or UUID of the parent object the note will be attached to. Common slugs: "people", "companies", "deals". | -| `parent_record_id` | string | Yes | UUID of the parent record the note will be attached to. | -| `title` | string | Yes | Plaintext title for the note. No formatting is allowed in the title. | - -## `attio_create_object` - -Creates a new custom object in the Attio workspace. Use when you need an object type beyond the standard types (people, companies, deals, users, workspaces). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `api_slug` | string | Yes | Snake_case identifier for the new object. | -| `plural_noun` | string | Yes | Plural noun for the new object type. | -| `singular_noun` | string | Yes | Singular noun for the new object type. | - -## `attio_create_person` - -Creates a new person record in Attio. Throws an error on conflicts of unique attributes like email_addresses. Use Assert Person if you prefer to update on conflicts. Note: The avatar_url attribute cannot currently be set via the API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `values` | `object` | Yes | Attribute values for the new person record. | - -## `attio_create_record` - -Create a new record in Attio for a given object type (e.g. people, companies, deals). Provide attribute values as a JSON object mapping attribute API slugs or IDs to their values. Throws an error if a unique attribute conflict is detected — use the Assert Record endpoint instead to upsert on conflict. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `object` | string | Yes | The slug or UUID of the object type to create the record in. Common slugs: "people", "companies", "deals". | -| `values` | `object` | Yes | Attribute values for the new record. Keys are attribute API slugs or UUIDs; values are the data to set. For multi-value attributes, supply an array. Example for a person: `{"name": [{"first_name": "Alice", "last_name": "Smith"}], "email_addresses": [{"email_address": "alice@example.com"}]}` | - -## `attio_create_task` - -Create a new task in Attio. Tasks can be linked to one or more records (people, companies, deals, etc.) and assigned to workspace members. Supports setting a deadline and initial completion status. Only plaintext format is supported for task content. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignees` | `array` | No | Array of assignees for this task. Each item must have either referenced_actor_id (UUID) with referenced_actor_type set to workspace-member, or workspace_member_email_address. Example: [`{"referenced_actor_type": "workspace-member", "referenced_actor_id": "d4a8e6f2-3b1c-4d5e-9f0a-1b2c3d4e5f6a"}`] | -| `content` | string | Yes | The text content of the task. Maximum 2000 characters. Only plaintext is supported. | -| `deadline_at` | string | Yes | ISO 8601 datetime for the task deadline. Must include milliseconds and timezone, e.g. 2024-03-31T17:00:00.000Z. | -| `is_completed` | boolean | No | Whether the task is already completed. Defaults to false. | -| `linked_records` | `array` | No | Array of records to link this task to. Each item must have a target_object (slug or UUID) and either target_record_id (UUID) or an attribute-based match. Example: [`{"target_object": "people", "target_record_id": "bf071e1f-6035-429d-b874-d83ea64ea13b"}`] | - -## `attio_delete_comment` - -Permanently deletes a comment by its comment_id. If the comment is at the head of a thread, all messages in the thread are also deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The unique identifier of the comment to delete. | - -## `attio_delete_company` - -Permanently deletes a company record from Attio by its record_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the company record to delete. | - -## `attio_delete_deal` - -Permanently deletes a deal record from Attio by its record_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the deal record to delete. | - -## `attio_delete_note` - -Permanently deletes a note from Attio by its note_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `note_id` | string | Yes | The unique identifier of the note to delete. | - -## `attio_delete_person` - -Permanently deletes a person record from Attio by its record_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the person record to delete. | - -## `attio_delete_record` - -Permanently delete a record from Attio by its object type and record ID. This action is irreversible. Returns an empty response on success. Returns 404 if the record does not exist. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `object` | string | Yes | The slug or UUID of the object type the record belongs to. Common slugs: "people", "companies", "deals". | -| `record_id` | string | Yes | The UUID of the record to delete. | - -## `attio_delete_task` - -Permanently deletes a task from Attio by its task_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `task_id` | string | Yes | The unique identifier of the task to delete. | - -## `attio_delete_user_record` - -Permanently deletes a user record from Attio by its record_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the user record to delete. | - -## `attio_delete_webhook` - -Permanently deletes a webhook by its webhook_id from Attio. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | string | Yes | The unique identifier of the webhook to delete. | - -## `attio_delete_workspace_record` - -Permanently deletes a workspace record from Attio by its record_id. This operation is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the workspace record to delete. | - -## `attio_get_attribute` - -Retrieves details of a single attribute on an Attio object or list, including its type, slug, configuration, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attribute` | string | Yes | Attribute slug or UUID. | -| `object` | string | Yes | Object slug or UUID. | - -## `attio_get_comment` - -Retrieves a single comment by its comment_id in Attio. Returns the comment's content, author, thread, and resolution status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The unique identifier of the comment. | - -## `attio_get_company` - -Retrieves a single company record by its record_id from Attio. Returns all attribute values with temporal and audit metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the company record. | - -## `attio_get_current_token_info` - -Identifies the current access token, the workspace it is linked to, and its permissions. Use to verify token validity or retrieve workspace information. - -## `attio_get_deal` - -Retrieves a single deal record by its record_id from Attio. Returns all attribute values with temporal and audit metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the deal record. | - -## `attio_get_list` - -Retrieves details of a single list in the Attio workspace by its UUID or slug. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | The unique identifier or slug of the list. | - -## `attio_get_list_entry` - -Retrieves a single list entry by its entry_id. Returns detailed information about a specific entry in an Attio list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entry_id` | string | Yes | The unique identifier of the list entry. | -| `list_id` | string | Yes | The unique identifier or slug of the list. | - -## `attio_get_note` - -Retrieves a single note by its note_id in Attio. Returns the note's title, content (plaintext and markdown), tags, and creator information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `note_id` | string | Yes | The unique identifier of the note. | - -## `attio_get_object` - -Retrieves details of a single object by its slug or UUID in Attio. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `object` | string | Yes | Object slug or UUID. | - -## `attio_get_person` - -Retrieves a single person record by its record_id from Attio. Returns all attribute values with temporal and audit metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the person record. | - -## `attio_get_record` - -Retrieve a specific record from Attio by its object type and record ID. Returns the full record including all attribute values with their complete audit trail (created_by_actor, active_from, active_until). Supports people, companies, deals, and custom objects. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `object` | string | Yes | The slug or UUID of the object type the record belongs to. Common slugs: "people", "companies", "deals". | -| `record_id` | string | Yes | The UUID of the record to retrieve. | - -## `attio_get_record_attribute_values` - -Retrieves all values for a given attribute on a record in Attio. Can include historic values using show_historic parameter. Not available for COMINT or enriched attributes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attribute` | string | Yes | Attribute slug or UUID. | -| `object` | string | Yes | Object slug or UUID. | -| `record_id` | string | Yes | The unique identifier of the record. | -| `show_historic` | boolean | No | Whether to include historic values. | - -## `attio_get_task` - -Retrieves a single task by its task_id in Attio. Returns the task's content, deadline, assignees, and linked records. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `task_id` | string | Yes | The unique identifier of the task. | - -## `attio_get_webhook` - -Retrieves a single webhook by its webhook_id in Attio. Returns the webhook's target URL, event subscriptions, status, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | string | Yes | The unique identifier of the webhook. | - -## `attio_get_workspace_member` - -Retrieves a single workspace member by their workspace_member_id. Returns name, email, access level, and avatar information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `workspace_member_id` | string | Yes | The unique identifier of the workspace member. | - -## `attio_get_workspace_record` - -Retrieves a single workspace record by its record_id from Attio. Returns all attribute values with temporal and audit metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | The unique identifier of the workspace record. | - -## `attio_list_attribute_options` - -Lists all select options for a select or multiselect attribute on an Attio object or list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attribute` | string | Yes | Attribute slug or UUID of the select/multiselect attribute. | -| `object` | string | Yes | Object slug or UUID. | - -## `attio_list_attribute_statuses` - -Lists all statuses for a status attribute on an Attio object or list. Returns status IDs, titles, and configuration. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attribute` | string | Yes | Attribute slug or UUID of the status attribute. | -| `object` | string | Yes | Object slug or UUID. | - -## `attio_list_attributes` - -Lists the attribute schema for an Attio object or list, including slugs, types, and select/status configuration. Use to discover what attributes exist and their types before filtering or writing. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `object` | string | Yes | Object slug or UUID to list attributes for. | - -## `attio_list_companies` - -Lists company records in Attio with optional filtering and sorting. Use filter and sorts fields to narrow results. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter criteria for querying companies. | -| `limit` | number | No | Maximum number of records to return. | -| `offset` | number | No | Number of records to skip for pagination. | -| `sorts` | `array` | No | Sorting criteria for the results. | - -## `attio_list_deals` - -Lists deal records in Attio with optional filtering and sorting. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter criteria for querying deals. | -| `limit` | number | No | Maximum number of records to return. | -| `offset` | number | No | Number of records to skip for pagination. | -| `sorts` | `array` | No | Sorting criteria for the results. | - -## `attio_list_entries` - -Lists entries in a given Attio list with optional filtering and sorting. Returns records that belong to the specified list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter criteria for querying entries. | -| `limit` | number | No | Maximum number of entries to return. | -| `list_id` | string | Yes | The unique identifier or slug of the list. | -| `offset` | number | No | Number of entries to skip for pagination. | -| `sorts` | `array` | No | Sorting criteria for the results. | - -## `attio_list_lists` - -Retrieve all CRM lists available in the Attio workspace, along with their entries for a specific record. Lists are used to track pipeline stages, outreach targets, or custom groupings of records. Optionally filter entries by a parent record ID and object type. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | number | No | Maximum number of list entries to return per list. Defaults to 20. | -| `offset` | number | No | Number of list entries to skip for pagination. Defaults to 0. | - -## `attio_list_meetings` - -Lists all meetings in the Attio workspace. Optionally filter by participants or linked records. This endpoint is in beta. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | number | No | Maximum number of results to return. | -| `offset` | number | No | Number of results to skip for pagination. | - -## `attio_list_notes` - -List notes in Attio. Optionally filter by a parent object and record to retrieve notes attached to a specific person, company, deal, or other object. Supports pagination via limit (max 50) and offset. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | number | No | Maximum number of notes to return. Default is 10, maximum is 50. | -| `offset` | number | No | Number of notes to skip before returning results. Default is 0. Use with limit for pagination. | -| `parent_object` | string | No | Filter notes by parent object slug or UUID. Examples: "people", "companies", "deals". Must be provided together with parent_record_id to filter by a specific record. | -| `parent_record_id` | string | No | Filter notes by parent record UUID. Must be provided together with parent_object. | - -## `attio_list_objects` - -Retrieves all available objects (both system-defined and user-defined) in the Attio workspace. Fundamental for understanding workspace structure. - -## `attio_list_people` - -Lists person records in Attio with optional filtering and sorting. Use filter and sorts fields to narrow results. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter criteria for querying people. | -| `limit` | number | No | Maximum number of records to return. | -| `offset` | number | No | Number of records to skip for pagination. | -| `sorts` | `array` | No | Sorting criteria for the results. | - -## `attio_list_record_entries` - -Lists all entries across all lists for which a specific record is the parent in Attio. Returns list IDs, slugs, entry IDs, and creation timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `object` | string | Yes | Object slug or UUID. | -| `record_id` | string | Yes | The unique identifier of the parent record. | - -## `attio_list_records` - -List and query records for a specific Attio object type (e.g. people, companies, deals). Supports filtering by attribute values, sorting, and pagination with limit and offset. Returns guaranteed up-to-date data unlike the Search Records endpoint. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter object to narrow results to a subset of records. Structure depends on the attributes of the target object. Example: `{"email_addresses": {"email_address": {"$eq": "alice@example.com"}}}` | -| `limit` | number | No | Maximum number of records to return. Defaults to 500. | -| `object` | string | Yes | The slug or UUID of the object type to list records for. Common slugs: "people", "companies", "deals". | -| `offset` | number | No | Number of records to skip before returning results. Defaults to 0. Use with limit for pagination. | -| `sorts` | `array` | No | Array of sort objects to order results. Each sort object specifies a direction ("asc" or "desc"), an attribute slug or ID, and an optional field. Example: [`{"direction": "asc", "attribute": "name"}`] | - -## `attio_list_tasks` - -List tasks in Attio, optionally filtered by linked record. Returns tasks with their content, deadline, completion status, assignees, and linked records. Use record filters to retrieve tasks associated with a specific contact, company, or deal. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `is_completed` | boolean | No | Filter tasks by completion status. Set to true to return only completed tasks, false for only incomplete tasks, or omit to return all tasks. | -| `limit` | number | No | Maximum number of tasks to return. Defaults to 20. | -| `linked_object` | string | No | Filter tasks linked to records of this object type. Use with linked_record_id. Common slugs: "people", "companies", "deals". | -| `linked_record_id` | string | No | Filter tasks linked to this specific record UUID. Use with linked_object to specify the object type. | -| `offset` | number | No | Number of tasks to skip for pagination. Defaults to 0. | - -## `attio_list_threads` - -Lists threads of comments on a record or list entry in Attio. Returns all comment threads associated with a specific record or list entry. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `parent_object` | string | Yes | Object slug of the parent record. | -| `parent_record_id` | string | Yes | The unique identifier of the parent record. | - -## `attio_list_user_records` - -Lists user records in Attio with optional filtering and sorting. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter criteria for querying user records. | -| `limit` | number | No | Maximum number of records to return. | -| `offset` | number | No | Number of records to skip for pagination. | -| `sorts` | `array` | No | Sorting criteria for the results. | - -## `attio_list_webhooks` - -Retrieves all webhooks in the Attio workspace. Returns webhook configurations, subscriptions, and statuses. Supports optional limit and offset pagination parameters. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | number | No | Maximum number of webhooks to return. | -| `offset` | number | No | Number of webhooks to skip for pagination. | - -## `attio_list_workspace_members` - -Lists all workspace members in the Attio workspace. Use to retrieve workspace member IDs needed for assigning owners or actor-reference attributes. - -## `attio_list_workspace_records` - -Lists workspace records in Attio with optional filtering and sorting. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | `object` | No | Filter criteria for querying workspace records. | -| `limit` | number | No | Maximum number of records to return. | -| `offset` | number | No | Number of records to skip for pagination. | -| `sorts` | `array` | No | Sorting criteria for the results. | - -## `attio_remove_from_list` - -Remove a specific entry from an Attio list by its entry ID. This deletes the list entry but does not delete the underlying record. Obtain the entry ID from the Add to List response or by querying list entries. Returns 404 if the entry does not exist. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entry_id` | string | Yes | The UUID of the list entry to remove. This is the entry ID returned when the record was added to the list, not the record ID itself. | -| `list_id` | string | Yes | The slug or UUID of the Attio list to remove the entry from. | - -## `attio_search_records` - -Search for records in Attio for a given object type (people, companies, deals, or custom objects) using a fuzzy text query. Returns matching records with their IDs, labels, and key attributes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | Maximum number of results to return per page. Defaults to 20. | -| `object` | string | Yes | The slug or UUID of the object type to search within. Common slugs: "people", "companies", "deals". | -| `offset` | integer | No | Number of results to skip for pagination. Defaults to 0. | -| `query` | string | Yes | Fuzzy text search string matched against names, emails, domains, phone numbers, and social handles. Pass an empty string to return all records. | + diff --git a/src/content/docs/reference/agent-connectors/bigquery.mdx b/src/content/docs/reference/agent-connectors/bigquery.mdx index 43bd78520..8310be399 100644 --- a/src/content/docs/reference/agent-connectors/bigquery.mdx +++ b/src/content/docs/reference/agent-connectors/bigquery.mdx @@ -2,19 +2,19 @@ title: Google BigQuery description: BigQuery is Google Cloud’s fully-managed enterprise data warehouse for analytics at scale. tableOfContents: true +sidebar: + label: Google BigQuery head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/bigquery' import { SetupBigquerySection } from '@components/templates' import { UsageBigquerySection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/chorus.mdx b/src/content/docs/reference/agent-connectors/chorus.mdx index 4d60f0cb0..68309fc2d 100644 --- a/src/content/docs/reference/agent-connectors/chorus.mdx +++ b/src/content/docs/reference/agent-connectors/chorus.mdx @@ -2,19 +2,19 @@ title: Chorus description: Connect to Chorus.ai to sync calls, transcripts, conversation intelligence, and analytics. tableOfContents: true +sidebar: + label: Chorus head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/chorus' import { UsageChorusSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/clari_copilot.mdx b/src/content/docs/reference/agent-connectors/clari_copilot.mdx index 789c92a85..5029d29ef 100644 --- a/src/content/docs/reference/agent-connectors/clari_copilot.mdx +++ b/src/content/docs/reference/agent-connectors/clari_copilot.mdx @@ -2,19 +2,19 @@ title: Clari Copilot description: Connect to Clari Copilot for sales call transcripts, analytics, call data, and insights. tableOfContents: true +sidebar: + label: Clari Copilot head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/clari_copilot' import { UsageClariCopilotSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/clickup.mdx b/src/content/docs/reference/agent-connectors/clickup.mdx index 1596a2a34..22dbb5d72 100644 --- a/src/content/docs/reference/agent-connectors/clickup.mdx +++ b/src/content/docs/reference/agent-connectors/clickup.mdx @@ -2,19 +2,19 @@ title: ClickUp description: Connect to ClickUp. Manage tasks, projects, workspaces, and team collaboration tableOfContents: true +sidebar: + label: ClickUp head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/clickup' import { SetupClickupSection } from '@components/templates' import { UsageClickupSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/confluence.mdx b/src/content/docs/reference/agent-connectors/confluence.mdx index b7caf51c9..a21c9659e 100644 --- a/src/content/docs/reference/agent-connectors/confluence.mdx +++ b/src/content/docs/reference/agent-connectors/confluence.mdx @@ -2,19 +2,19 @@ title: Confluence description: Connect to Confluence. Manage spaces, pages, content, and team collaboration tableOfContents: true +sidebar: + label: Confluence head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/confluence' import { SetupConfluenceSection } from '@components/templates' import { UsageConfluenceSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/discord.mdx b/src/content/docs/reference/agent-connectors/discord.mdx index dbb39b055..60fd3eb53 100644 --- a/src/content/docs/reference/agent-connectors/discord.mdx +++ b/src/content/docs/reference/agent-connectors/discord.mdx @@ -2,19 +2,19 @@ title: Discord description: Connect to Discord. Read user profile, guilds, roles, manage bots, and perform interactions. tableOfContents: true +sidebar: + label: Discord head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/discord' import { SetupDiscordSection } from '@components/templates' import { UsageDiscordSection } from '@components/templates' @@ -40,114 +40,4 @@ Supports authentication: ## Tool list -## `discord_get_current_user_application_entitlements` - -Retrieves entitlements for the current user for a given application. Use when you need to check what premium offerings or subscriptions the authenticated user has access to. Requires the applications.entitlements OAuth2 scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `application_id` | string | Yes | The ID of the application to retrieve entitlements for. | -| `exclude_deleted` | boolean | No | Whether to exclude deleted entitlements. | -| `exclude_ended` | boolean | No | Whether to exclude ended entitlements. | -| `limit` | integer | No | Maximum number of entitlements to return (1–100). | - -## `discord_get_gateway` - -Retrieves a valid WebSocket (wss) URL for establishing a Gateway connection to Discord. Use when you need to connect to the Discord Gateway for real-time events. No authentication required. - -## `discord_get_guild_template` - -Retrieves information about a Discord guild template using its unique template code. Use when you need to get details about a guild template for creating new servers. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `template_code` | string | Yes | The unique code of the guild template. | - -## `discord_get_guild_widget` - -Retrieves the guild widget in JSON format. Returns public information about a Discord guild's widget including online member count and invite URL. The widget must be enabled in the guild's server settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `guild_id` | string | Yes | The ID of the Discord guild (server) to retrieve the widget for. | - -## `discord_get_guild_widget_png` - -Retrieves a PNG image widget for a Discord guild. Returns a visual representation of the guild widget that can be embedded on external websites. The widget must be enabled in the guild's server settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `guild_id` | string | Yes | The ID of the Discord guild (server) to retrieve the widget image for. | -| `style` | string | No | Style of the widget image. | - -## `discord_get_invite_deprecated` - -DEPRECATED: Use discord_resolve_invite instead. Retrieves information about a specific invite code including guild and channel details. This endpoint is deprecated — prefer the Resolve Invite tool for new integrations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `invite_code` | string | Yes | The unique invite code to look up. | -| `with_counts` | boolean | No | Whether to include approximate member and presence counts. | -| `with_expiration` | boolean | No | Whether to include the expiration date of the invite. | - -## `discord_get_my_guild_member` - -Retrieves the guild member object for the currently authenticated user within a specified guild, provided they are a member of that guild. Requires the guilds.members.read OAuth2 scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `guild_id` | string | Yes | The ID of the guild to retrieve the current user's member object from. | - -## `discord_get_my_oauth2_authorization` - -Retrieves current OAuth2 authorization details for the application, including app info, granted scopes, token expiration date, and user data (contingent on scopes like 'identify'). Useful for verifying what access the current token has. - -## `discord_get_my_user` - -Fetches comprehensive profile information for the currently authenticated Discord user, including username, avatar, discriminator, locale, and email if the 'email' OAuth2 scope is granted. - -## `discord_get_openid_connect_userinfo` - -Retrieves OpenID Connect compliant user information for the authenticated user. Returns standardized OIDC claims (sub, email, nickname, picture, locale, etc.) following the OpenID Connect specification. Requires an OAuth2 access token with the 'openid' scope; additional fields require 'identify' and 'email' scopes. - -## `discord_get_public_keys` - -Retrieves Discord OAuth2 public keys (JWKS). Use when you need to verify OAuth2 tokens or access public keys for cryptographic operations such as signature verification. - -## `discord_get_user` - -Retrieve information about a Discord user. With OAuth Bearer token, use '@me' as user_id to return the authenticated user's information. With a Bot token, you can query any user by their ID. Returns username, avatar, discriminator, locale, premium status, and email (if email scope is granted). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `user_id` | string | Yes | The ID of the user to retrieve. Use '@me' to get the authenticated user's information. | - -## `discord_list_my_guilds` - -Lists the current user's guilds, returning partial data (id, name, icon, owner, permissions, features) for each. Primarily used for displaying server lists or verifying guild memberships. Requires the 'guilds' OAuth2 scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Get guilds after this guild ID (for pagination). | -| `before` | string | No | Get guilds before this guild ID (for pagination). | -| `limit` | integer | No | Maximum number of guilds to return (1–200, default 200). | -| `with_counts` | boolean | No | Whether to include approximate member and presence counts for each guild. | - -## `discord_list_sticker_packs` - -Retrieves all available Discord Nitro sticker packs. Returns official Discord sticker packs including pack name, description, stickers, cover sticker, and banner asset. - -## `discord_resolve_invite` - -Resolves and retrieves information about a Discord invite code, including the associated guild, channel, event, and inviter. Prefer this over the deprecated Get Invite tool for new integrations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `guild_scheduled_event_id` | string | No | Guild scheduled event ID to include event details in the response. | -| `invite_code` | string | Yes | The unique invite code to resolve. | -| `with_counts` | boolean | No | Whether to include approximate member and presence counts. | -| `with_expiration` | boolean | No | Whether to include the expiration date of the invite. | - -## `discord_retrieve_user_connections` - -Retrieves a list of the authenticated user's connected third-party accounts on Discord, such as Twitch, YouTube, GitHub, Steam, and others. Requires the 'connections' OAuth2 scope. + diff --git a/src/content/docs/reference/agent-connectors/dropbox.mdx b/src/content/docs/reference/agent-connectors/dropbox.mdx index 311f63367..93f7a29fb 100644 --- a/src/content/docs/reference/agent-connectors/dropbox.mdx +++ b/src/content/docs/reference/agent-connectors/dropbox.mdx @@ -3,6 +3,7 @@ title: Dropbox description: Connect to Dropbox. Manage files, folders, sharing, and cloud storage workflows tableOfContents: true sidebar: + label: Dropbox badge: text: Soon variant: tip @@ -12,13 +13,11 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/dropbox' import { SetupDropboxSection } from '@components/templates' import { UsageDropboxSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/exa.mdx b/src/content/docs/reference/agent-connectors/exa.mdx index db7753a94..4bdb644ce 100644 --- a/src/content/docs/reference/agent-connectors/exa.mdx +++ b/src/content/docs/reference/agent-connectors/exa.mdx @@ -8,13 +8,11 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/exa' import { SetupExaSection } from '@components/templates' import { UsageExaSection } from '@components/templates' @@ -40,124 +38,4 @@ Supports authentication: ## Tool list -## `exa_answer` - -Get a natural language answer to a question by searching the web with Exa and synthesizing results. Returns a direct answer with citations to the source pages. Ideal for factual questions, current events, and research queries. Rate limit: 60 requests/minute. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `exclude_domains` | `array` | No | JSON array of domains to exclude from answer sources. | -| `include_domains` | `array` | No | JSON array of domains to restrict source search to. Example: ["reuters.com","bbc.com"] | -| `include_text` | boolean | No | When true, also returns the source page text alongside the synthesized answer. | -| `num_results` | integer | No | Number of web sources to use when generating the answer (1–20). More sources improves accuracy but costs more credits. | -| `query` | string | Yes | The question or query to answer from web sources. | - -## `exa_crawl` - -Crawl one or more web pages by URL and extract their content including full text, highlights, and AI-generated summaries. Useful for reading specific pages discovered via search. Rate limit: 60 requests/minute. Credit consumption depends on number of URLs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `highlights_per_url` | integer | No | Number of highlight sentences to return per URL when include_highlights is true. Defaults to 3. | -| `include_highlights` | boolean | No | When true, returns the most relevant sentence-level highlights from each page. | -| `include_html_tags` | boolean | No | When true, retains HTML tags in the extracted text. Defaults to false (plain text only). | -| `include_summary` | boolean | No | When true, returns an AI-generated summary for each crawled page. | -| `max_characters` | integer | No | Maximum characters of text to extract per page. Defaults to 5000. | -| `summary_query` | string | No | Optional query to focus the AI summary on a specific aspect of the page. | -| `urls` | `array` | Yes | JSON array of URLs to crawl and extract content from. | - -## `exa_delete_webset` - -Delete an Exa Webset by its ID. This permanently removes the webset and all its collected items. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webset_id` | string | Yes | The ID of the webset to delete. | - -## `exa_find_similar` - -Find web pages similar to a given URL using Exa's neural similarity search. Useful for competitor research, finding related articles, or discovering similar companies. Optionally returns page text, highlights, or summaries. Rate limit: 60 requests/minute. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `end_published_date` | string | No | Only return pages published before this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z | -| `exclude_domains` | `array` | No | Array of domains to exclude from results. | -| `include_domains` | `array` | No | Array of domains to restrict results to. | -| `include_text` | boolean | No | When true, returns the full text content of each result page. | -| `max_characters` | integer | No | Maximum characters of page text to return per result when include_text is true. Defaults to 3000. | -| `num_results` | integer | No | Number of similar results to return (1–100). Defaults to 10. | -| `start_published_date` | string | No | Only return pages published after this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z | -| `url` | string | Yes | The URL to find similar pages for. | - -## `exa_get_webset` - -Get the status and details of an existing Exa Webset by its ID. Use this to poll the status of an async webset created with Create Webset. Returns metadata including status (created, running, completed, cancelled), progress, and configuration. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webset_id` | string | Yes | The ID of the webset to retrieve. | - -## `exa_list_webset_items` - -List the collected URLs and items from a completed Exa Webset. Use this after polling Get Webset until its status is 'completed' to retrieve the discovered results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of items to return per page. Defaults to 10. | -| `cursor` | string | No | Pagination cursor from a previous response to fetch the next page of items. | -| `webset_id` | string | Yes | The ID of the webset to retrieve items from. | - -## `exa_list_websets` - -List all Exa Websets in your account with optional pagination. Returns a list of websets with their IDs, statuses, and configurations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of websets to return per page. Defaults to 10. | -| `cursor` | string | No | Pagination cursor from a previous response to fetch the next page. | - -## `exa_research` - -Run in-depth research on a topic using Exa's neural search. Performs a semantic search and returns results with full page text and AI-generated summaries, providing structured multi-source research output. Best for comprehensive topic analysis. Rate limit: 60 requests/minute. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `category` | string | No | Restrict research to a specific content category for more targeted results. | -| `exclude_domains` | `array` | No | JSON array of domains to exclude from research results. | -| `include_domains` | `array` | No | JSON array of domains to restrict research sources to. Useful to focus on authoritative sources. | -| `max_characters` | integer | No | Maximum characters of text to extract per source page. Defaults to 5000. | -| `num_results` | integer | No | Number of sources to gather for the research (1–20). More sources provide broader coverage. | -| `query` | string | Yes | The research topic or question to investigate across the web. | -| `start_published_date` | string | No | Only include sources published after this date. ISO 8601 format. | -| `summary_query` | string | No | Optional focused question to guide the AI page summaries. Defaults to the main research query. | - -## `exa_search` - -Search the web using Exa's AI-powered semantic or keyword search engine. Supports filtering by domain, date range, content category, and result type. Optionally returns page text, highlights, or summaries alongside search results. Rate limit: 60 requests/minute. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `category` | string | No | Restrict results to a specific content category. | -| `end_published_date` | string | No | Only return pages published before this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z | -| `exclude_domains` | `array` | No | JSON array of domains to exclude from results. Example: ["reddit.com","quora.com"] | -| `include_domains` | `array` | No | JSON array of domains to restrict results to. Example: ["techcrunch.com","wired.com"] | -| `include_text` | boolean | No | When true, returns the full text content of each result page (up to max_characters). | -| `max_characters` | integer | No | Maximum characters of page text to return per result when include_text is true. Defaults to 3000. | -| `num_results` | integer | No | Number of results to return (1–100). Defaults to 10. | -| `query` | string | Yes | The search query. For neural/auto type, natural language works best. For keyword type, use specific terms. | -| `start_published_date` | string | No | Only return pages published after this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z | -| `type` | string | No | Search type: 'neural' for semantic AI search (best for natural language), 'keyword' for exact-match keyword search, 'auto' to let Exa decide. | -| `use_autoprompt` | boolean | No | When true, Exa automatically rewrites the query to be more semantically effective. | - -## `exa_websets` - -Execute a complex web query designed to discover and return large sets of URLs (up to thousands) matching specific criteria. Websets are ideal for lead generation, market research, competitor analysis, and large-scale data collection. Returns a webset ID — poll status with GET /websets/v0/websets/\{id\}. High credit consumption. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Target number of URLs to collect. Can range from hundreds to thousands. Higher counts take longer and consume more credits. | -| `entity_type` | string | No | The type of entity to search for. Helps Exa understand what constitutes a valid result match. | -| `exclude_domains` | `array` | No | JSON array of domains to exclude from webset results. | -| `external_id` | string | No | Optional external identifier to tag this webset for reference in your system. | -| `include_domains` | `array` | No | JSON array of domains to restrict webset sources to. | -| `query` | string | Yes | The search query describing what kinds of pages or entities to find. Be specific and descriptive for best results. | + diff --git a/src/content/docs/reference/agent-connectors/fathom.mdx b/src/content/docs/reference/agent-connectors/fathom.mdx index e7f286c66..aba613c97 100644 --- a/src/content/docs/reference/agent-connectors/fathom.mdx +++ b/src/content/docs/reference/agent-connectors/fathom.mdx @@ -2,19 +2,19 @@ title: Fathom description: Connect to Fathom AI meeting assistant. Record, transcribe, and summarize meetings with AI-powered insights tableOfContents: true +sidebar: + label: Fathom head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/fathom' import { UsageFathomSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/figma.mdx b/src/content/docs/reference/agent-connectors/figma.mdx index 96c123167..0f763632e 100644 --- a/src/content/docs/reference/agent-connectors/figma.mdx +++ b/src/content/docs/reference/agent-connectors/figma.mdx @@ -1,6 +1,6 @@ --- title: Figma -description: Connect to Figma API v1. Read and write files, manage components, styles, variables, webhooks, and dev resources. Enterprise features include library analytics and activity logs. +description: Connect to Figma to access user files, teams, projects, and design metadata via OAuth 2.0 tableOfContents: true sidebar: label: Figma @@ -15,22 +15,24 @@ head: } --- -import { Badge, Aside } from '@astrojs/starlight/components' -import { SetupFigmaSection, UsageFigmaSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/figma' +import { SetupFigmaSection } from '@components/templates' +import { UsageFigmaSection } from '@components/templates'
- Connect to Figma API v1. Read and write files, manage components, styles, variables, webhooks, and dev resources. Enterprise features include library analytics and activity logs. + Connect to Figma to access user files, teams, projects, and design metadata via OAuth 2.0
- Figma logo + Figma logo
Supports authentication: + ## Set up the agent connector diff --git a/src/content/docs/reference/agent-connectors/freshdesk.mdx b/src/content/docs/reference/agent-connectors/freshdesk.mdx index 52751cff5..c5e0fa76e 100644 --- a/src/content/docs/reference/agent-connectors/freshdesk.mdx +++ b/src/content/docs/reference/agent-connectors/freshdesk.mdx @@ -2,19 +2,19 @@ title: Freshdesk description: Connect to Freshdesk. Manage tickets, contacts, companies, and customer support workflows tableOfContents: true +sidebar: + label: Freshdesk head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/freshdesk' import { UsageFreshdeskSection } from '@components/templates'
@@ -35,140 +35,4 @@ Supports authentication: ## Tool list -## `freshdesk_agent_create` - -Create a new agent in Freshdesk. Email is required and must be unique. Agent will receive invitation email to set up account. At least one role must be assigned. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agent_type` | number | No | Type of agent (1=Support Agent, 2=Field Agent, 3=Collaborator) | -| `email` | string | Yes | Email address of the agent (must be unique) | -| `focus_mode` | boolean | No | Focus mode setting for the agent | -| `group_ids` | `array` | No | Array of group IDs to assign the agent to | -| `language` | string | No | Language preference of the agent | -| `name` | string | No | Full name of the agent | -| `occasional` | boolean | No | Whether the agent is occasional (true) or full-time (false) | -| `role_ids` | `array` | Yes | Array of role IDs to assign to the agent (at least one required) | -| `signature` | string | No | Agent email signature in HTML format | -| `skill_ids` | `array` | No | Array of skill IDs to assign to the agent | -| `ticket_scope` | number | Yes | Ticket permission level (1=Global Access, 2=Group Access, 3=Restricted Access) | -| `time_zone` | string | No | Time zone of the agent | - -## `freshdesk_agent_delete` - -Delete an agent from Freshdesk. This action is irreversible and will remove the agent from the system. The agent will no longer have access to the helpdesk and all associated data will be permanently deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agent_id` | number | Yes | ID of the agent to delete | - -## `freshdesk_agents_list` - -Retrieve a list of agents from Freshdesk with filtering options. Returns agent details including IDs, contact information, roles, and availability status. Supports pagination with up to 100 agents per page. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | No | Filter agents by email address | -| `mobile` | string | No | Filter agents by mobile number | -| `page` | number | No | Page number for pagination (starts from 1) | -| `per_page` | number | No | Number of agents per page (max 100) | -| `phone` | string | No | Filter agents by phone number | -| `state` | string | No | Filter agents by state (fulltime or occasional) | - -## `freshdesk_contact_create` - -Create a new contact in Freshdesk. Email and name are required. Supports custom fields, company assignment, and contact segmentation. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `address` | string | No | Address of the contact | -| `company_id` | number | No | Company ID to associate with the contact | -| `custom_fields` | `object` | No | Key-value pairs for custom field values | -| `description` | string | No | Description about the contact | -| `email` | string | Yes | Email address of the contact | -| `job_title` | string | No | Job title of the contact | -| `language` | string | No | Language preference of the contact | -| `mobile` | string | No | Mobile number of the contact | -| `name` | string | Yes | Full name of the contact | -| `phone` | string | No | Phone number of the contact | -| `tags` | `array` | No | Array of tags to associate with the contact | -| `time_zone` | string | No | Time zone of the contact | - -## `freshdesk_roles_list` - -Retrieve a list of all roles from Freshdesk. Returns role details including IDs, names, descriptions, default status, and timestamps. This endpoint provides information about the different permission levels and access controls available in the Freshdesk system. - -## `freshdesk_ticket_create` - -Create a new ticket in Freshdesk. Requires either requester_id, email, facebook_id, phone, twitter_id, or unique_external_id to identify the requester. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cc_emails` | `array` | No | Array of email addresses to be added in CC | -| `custom_fields` | `object` | No | Key-value pairs containing custom field names and values | -| `description` | string | No | HTML content of the ticket describing the issue | -| `email` | string | No | Email address of the requester. If no contact exists, will be added as new contact. | -| `group_id` | number | No | ID of the group to which the ticket has been assigned | -| `name` | string | No | Name of the requester | -| `priority` | number | No | Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent | -| `requester_id` | number | No | User ID of the requester. For existing contacts, can be passed instead of email. | -| `responder_id` | number | No | ID of the agent to whom the ticket has been assigned | -| `source` | number | No | Channel through which ticket was created. 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedback Widget, 10=Outbound Email | -| `status` | number | No | Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed | -| `subject` | string | No | Subject of the ticket | -| `tags` | `array` | No | Array of tags to be associated with the ticket | -| `type` | string | No | Helps categorize the ticket according to different kinds of issues | - -## `freshdesk_ticket_get` - -Retrieve details of a specific ticket by ID. Includes ticket properties, conversations, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional resources to include (stats, requester, company, conversations) | -| `ticket_id` | number | Yes | ID of the ticket to retrieve | - -## `freshdesk_ticket_update` - -Update an existing ticket in Freshdesk. Note: Subject and description of outbound tickets cannot be updated. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `custom_fields` | `object` | No | Key-value pairs containing custom field names and values | -| `description` | string | No | HTML content of the ticket (cannot be updated for outbound tickets) | -| `group_id` | number | No | ID of the group to which the ticket has been assigned | -| `name` | string | No | Name of the requester | -| `priority` | number | No | Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent | -| `responder_id` | number | No | ID of the agent to whom the ticket has been assigned | -| `status` | number | No | Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed | -| `subject` | string | No | Subject of the ticket (cannot be updated for outbound tickets) | -| `tags` | `array` | No | Array of tags to be associated with the ticket | -| `ticket_id` | number | Yes | ID of the ticket to update | - -## `freshdesk_tickets_list` - -Retrieve a list of tickets with filtering and pagination. Supports filtering by status, priority, requester, and more. Returns 30 tickets per page by default. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_id` | number | No | Filter by company ID | -| `email` | string | No | Filter by requester email | -| `filter` | string | No | Filter name (new_and_my_open, watching, spam, deleted) | -| `include` | string | No | Additional resources to include (description, requester, company, stats) | -| `page` | number | No | Page number for pagination (starts from 1) | -| `per_page` | number | No | Number of tickets per page (max 100) | -| `requester_id` | number | No | Filter by requester ID | -| `updated_since` | string | No | Filter tickets updated since this timestamp (ISO 8601) | - -## `freshdesk_tickets_reply` - -Add a public reply to a ticket conversation. The reply will be visible to the customer and will update the ticket status if specified. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `bcc_emails` | `array` | No | Array of email addresses to BCC on the reply | -| `body` | string | Yes | HTML content of the reply | -| `cc_emails` | `array` | No | Array of email addresses to CC on the reply | -| `from_email` | string | No | Email address to send the reply from | -| `ticket_id` | number | Yes | ID of the ticket to reply to | -| `user_id` | number | No | ID of the agent sending the reply | + diff --git a/src/content/docs/reference/agent-connectors/github.mdx b/src/content/docs/reference/agent-connectors/github.mdx index 88390f6a0..5a4c6397a 100644 --- a/src/content/docs/reference/agent-connectors/github.mdx +++ b/src/content/docs/reference/agent-connectors/github.mdx @@ -2,19 +2,19 @@ title: Github description: GitHub is a cloud-based Git repository hosting service that allows developers to store, manage, and track changes to their code. tableOfContents: true +sidebar: + label: Github head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/github' import { SetupGithubSection } from '@components/templates' import { UsageGithubSection } from '@components/templates' @@ -40,149 +40,4 @@ Supports authentication: ## Tool list -## `github_branch_create` - -Create a new branch in a GitHub repository. Requires the SHA of the commit to branch from (typically the HEAD of main). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch_name` | string | Yes | Name of the new branch to create | -| `owner` | string | Yes | The account owner of the repository | -| `repo` | string | Yes | The name of the repository | -| `sha` | string | Yes | The SHA of the commit to branch from. Use the HEAD SHA of the base branch (e.g. main). | - -## `github_branch_get` - -Get details of a specific branch in a GitHub repository. Returns the branch name, latest commit SHA, and protection status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | Yes | The name of the branch to retrieve | -| `owner` | string | Yes | The account owner of the repository | -| `repo` | string | Yes | The name of the repository | - -## `github_file_contents_get` - -Get the contents of a file or directory from a GitHub repository. Returns Base64 encoded content for files. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `owner` | string | Yes | The account owner of the repository | -| `path` | string | Yes | The content path (file or directory path in the repository) | -| `ref` | string | No | The name of the commit/branch/tag | -| `repo` | string | Yes | The name of the repository | - -## `github_file_create_update` - -Create a new file or update an existing file in a GitHub repository. Content must be Base64 encoded. Requires SHA when updating existing files. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `author` | `object` | No | Author information object with name and email | -| `branch` | string | No | The branch name | -| `committer` | `object` | No | Committer information object with name and email | -| `content` | string | Yes | The new file content (Base64 encoded) | -| `message` | string | Yes | The commit message for this change | -| `owner` | string | Yes | The account owner of the repository | -| `path` | string | Yes | The file path in the repository | -| `repo` | string | Yes | The name of the repository | -| `sha` | string | No | The blob SHA of the file being replaced (required when updating existing files) | - -## `github_issue_create` - -Create a new issue in a repository. Requires push access to set assignees, milestones, and labels. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignees` | `array` | No | GitHub usernames to assign to the issue | -| `body` | string | No | The contents of the issue | -| `labels` | `array` | No | Labels to associate with the issue | -| `milestone` | number | No | Milestone number to associate with the issue | -| `owner` | string | Yes | The account owner of the repository | -| `repo` | string | Yes | The name of the repository | -| `title` | string | Yes | The title of the issue | -| `type` | string | No | The name of the issue type | - -## `github_issues_list` - -List issues in a repository. Both issues and pull requests are returned as issues in the GitHub API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee` | string | No | Filter by assigned user | -| `creator` | string | No | Filter by issue creator | -| `direction` | string | No | Sort order | -| `labels` | string | No | Filter by comma-separated list of label names | -| `milestone` | string | No | Filter by milestone number or state | -| `owner` | string | Yes | The account owner of the repository | -| `page` | number | No | Page number of results to fetch | -| `per_page` | number | No | Number of results per page (max 100) | -| `repo` | string | Yes | The name of the repository | -| `since` | string | No | Show issues updated after this timestamp (ISO 8601 format) | -| `sort` | string | No | Property to sort issues by | -| `state` | string | No | Filter by issue state | - -## `github_public_repos_list` - -List public repositories for a specified user. Does not require authentication. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort order | -| `page` | number | No | Page number of results to fetch | -| `per_page` | number | No | Number of results per page (max 100) | -| `sort` | string | No | Property to sort repositories by | -| `type` | string | No | Filter repositories by type | -| `username` | string | Yes | The GitHub username to list repositories for | - -## `github_pull_request_create` - -Create a new pull request in a repository. Requires write access to the head branch. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `base` | string | Yes | The name of the branch you want the changes pulled into | -| `body` | string | No | The contents of the pull request description | -| `draft` | boolean | No | Indicates whether the pull request is a draft | -| `head` | string | Yes | The name of the branch where your changes are implemented (format: user:branch) | -| `maintainer_can_modify` | boolean | No | Indicates whether maintainers can modify the pull request | -| `owner` | string | Yes | The account owner of the repository | -| `repo` | string | Yes | The name of the repository | -| `title` | string | No | The title of the pull request | - -## `github_pull_requests_list` - -List pull requests in a repository with optional filtering by state, head, and base branches. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `base` | string | No | Filter by base branch name | -| `direction` | string | No | Sort order | -| `head` | string | No | Filter by head branch (format: user:ref-name) | -| `owner` | string | Yes | The account owner of the repository | -| `page` | number | No | Page number of results to fetch | -| `per_page` | number | No | Number of results per page (max 100) | -| `repo` | string | Yes | The name of the repository | -| `sort` | string | No | Property to sort pull requests by | -| `state` | string | No | Filter by pull request state | - -## `github_repo_get` - -Get detailed information about a GitHub repository including metadata, settings, and statistics. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `owner` | string | Yes | The account owner of the repository (case-insensitive) | -| `repo` | string | Yes | The name of the repository without the .git extension (case-insensitive) | - -## `github_user_repos_list` - -List repositories for the authenticated user. Requires authentication. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort order | -| `page` | number | No | Page number of results to fetch | -| `per_page` | number | No | Number of results per page (max 100) | -| `sort` | string | No | Property to sort repositories by | -| `type` | string | No | Filter repositories by type | + diff --git a/src/content/docs/reference/agent-connectors/gitlab.mdx b/src/content/docs/reference/agent-connectors/gitlab.mdx index c67ba7909..1f4b6a307 100644 --- a/src/content/docs/reference/agent-connectors/gitlab.mdx +++ b/src/content/docs/reference/agent-connectors/gitlab.mdx @@ -2,19 +2,19 @@ title: GitLab description: Connect to GitLab to manage repositories, issues, merge requests, pipelines, CI/CD, users, groups, and DevOps workflows. tableOfContents: true +sidebar: + label: GitLab head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/gitlab' import { SetupGitlabSection } from '@components/templates'
@@ -35,1156 +35,4 @@ Supports authentication: ## Tool list -## `gitlab_branch_create` - -Create a new branch in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | Yes | The name of the new branch. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `ref` | string | Yes | The source branch, tag, or commit SHA to branch from. | - -## `gitlab_branch_delete` - -Delete a branch from a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | Yes | The name of the branch to delete. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_branch_get` - -Get details of a specific branch in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | Yes | The name of the branch. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_branches_list` - -List repository branches for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Filter branches by name. | - -## `gitlab_commit_comment_create` - -Add a comment to a specific commit. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `line` | integer | No | Line number for an inline comment. | -| `note` | string | Yes | The comment text. | -| `path` | string | No | File path for an inline comment. | -| `sha` | string | Yes | The commit SHA. | - -## `gitlab_commit_comments_list` - -List comments on a specific commit. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `sha` | string | Yes | The commit SHA. | - -## `gitlab_commit_diff_get` - -Get the diff of a specific commit. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `sha` | string | Yes | The commit SHA. | - -## `gitlab_commit_get` - -Get details of a specific commit by its SHA. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `sha` | string | Yes | The commit SHA. | - -## `gitlab_commits_list` - -List repository commits for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `author` | string | No | Filter commits by author name or email. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `path` | string | No | Filter commits by file path. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `ref_name` | string | No | The branch or tag name to list commits from. | -| `since` | string | No | Only commits after this date are returned (ISO 8601 format). | -| `until` | string | No | Only commits before this date are returned (ISO 8601 format). | - -## `gitlab_compare_refs` - -Compare two refs (branches, tags, or commits) in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `from` | string | Yes | The source branch, tag, or commit SHA to compare from. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `straight` | string | No | Comparison method: 'true' for straight diff, 'false' for merge base. | -| `to` | string | Yes | The target branch, tag, or commit SHA to compare to. | - -## `gitlab_current_user_get` - -Get the currently authenticated user's profile. - -## `gitlab_current_user_ssh_keys_list` - -List SSH keys for the currently authenticated user. - -## `gitlab_deploy_key_create` - -Create a new deploy key for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `can_push` | string | No | If 'true', the deploy key has write access. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `key` | string | Yes | The SSH public key content. | -| `title` | string | Yes | A descriptive title for the deploy key. | - -## `gitlab_deploy_key_delete` - -Delete a deploy key from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `key_id` | integer | Yes | The numeric ID of the deploy key to delete. | - -## `gitlab_deploy_keys_list` - -List deploy keys for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_file_create` - -Create a new file in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `author_email` | string | No | The author's email for the commit. | -| `author_name` | string | No | The author's name for the commit. | -| `branch` | string | Yes | The branch to create the file on. | -| `commit_message` | string | Yes | The commit message for creating this file. | -| `content` | string | Yes | The file content (plain text or base64 encoded). | -| `encoding` | string | No | The encoding type: 'text' or 'base64'. | -| `file_path` | string | Yes | URL-encoded file path in the repository. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_file_delete` - -Delete a file from a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | Yes | The branch to delete the file from. | -| `commit_message` | string | Yes | The commit message for deleting this file. | -| `file_path` | string | Yes | URL-encoded file path in the repository. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_file_get` - -Get a file's content and metadata from a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `file_path` | string | Yes | URL-encoded file path in the repository. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `ref` | string | Yes | The branch, tag, or commit SHA to get the file from. | - -## `gitlab_file_update` - -Update an existing file in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | Yes | The branch to update the file on. | -| `commit_message` | string | Yes | The commit message for updating this file. | -| `content` | string | Yes | The new file content. | -| `file_path` | string | Yes | URL-encoded file path in the repository. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `last_commit_id` | string | No | Last known file commit ID (for conflict detection). | - -## `gitlab_global_search` - -Search globally across GitLab for projects, issues, merge requests, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `scope` | string | Yes | The scope to search in. | -| `search` | string | Yes | The search query string. | - -## `gitlab_group_create` - -Create a new GitLab group or subgroup. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Optional group description. | -| `name` | string | Yes | The name of the group. | -| `parent_id` | integer | No | ID of the parent group (for subgroups). | -| `path` | string | Yes | URL-friendly path slug for the group. | -| `visibility` | string | No | Visibility level: private, internal, or public. | - -## `gitlab_group_delete` - -Delete a GitLab group. This is an asynchronous operation (returns 202 Accepted). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | - -## `gitlab_group_get` - -Get a specific group by numeric ID or URL-encoded path. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | - -## `gitlab_group_member_add` - -Add a member to a GitLab group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `access_level` | integer | Yes | Access level for the member. 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner. | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | -| `user_id` | integer | Yes | The numeric ID of the user to add. | - -## `gitlab_group_member_remove` - -Remove a member from a GitLab group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | -| `user_id` | integer | Yes | The numeric ID of the user to remove. | - -## `gitlab_group_members_list` - -List members of a GitLab group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `query` | string | No | Filter members by name. | - -## `gitlab_group_projects_list` - -List projects belonging to a GitLab group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Filter projects by name. | -| `visibility` | string | No | Filter by visibility level: public, internal, or private. | - -## `gitlab_group_update` - -Update a GitLab group's settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated group description. | -| `id` | string | Yes | The group ID (numeric) or URL-encoded path. | -| `name` | string | No | New name for the group. | -| `visibility` | string | No | New visibility level: private, internal, or public. | - -## `gitlab_groups_list` - -List groups accessible to the authenticated user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `min_access_level` | integer | No | Minimum access level filter (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner). | -| `owned` | string | No | If 'true', limits to groups explicitly owned by the current user. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Search groups by name. | - -## `gitlab_issue_create` - -Create a new issue in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_ids` | string | No | Comma-separated list of user IDs to assign. | -| `description` | string | No | Detailed description of the issue (Markdown supported). | -| `due_date` | string | No | Due date for the issue in YYYY-MM-DD format. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `labels` | string | No | Comma-separated list of label names to apply. | -| `milestone_id` | integer | No | The ID of the milestone to assign. | -| `title` | string | Yes | The title of the issue. | - -## `gitlab_issue_delete` - -Delete an issue from a GitLab project (admin only). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue within the project. | - -## `gitlab_issue_get` - -Get a specific issue by its internal ID (IID). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue within the project. | - -## `gitlab_issue_labels_list` - -List labels for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | - -## `gitlab_issue_note_create` - -Add a comment to a specific issue. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | Yes | The comment text (Markdown supported). | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue. | - -## `gitlab_issue_note_delete` - -Delete a comment on a specific issue. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue. | -| `note_id` | integer | Yes | The ID of the note to delete. | - -## `gitlab_issue_note_update` - -Update a comment on a specific issue. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | Yes | The updated comment text (Markdown supported). | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue. | -| `note_id` | integer | Yes | The ID of the note to update. | - -## `gitlab_issue_notes_list` - -List comments (notes) on a specific issue. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | - -## `gitlab_issue_update` - -Update an existing issue in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_ids` | string | No | Comma-separated list of user IDs to assign. | -| `description` | string | No | Updated description of the issue. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issue_iid` | integer | Yes | The internal ID of the issue within the project. | -| `labels` | string | No | Comma-separated list of label names. | -| `state_event` | string | No | State transition: 'close' to close, 'reopen' to reopen. | -| `title` | string | No | New title for the issue. | - -## `gitlab_issues_list` - -List issues for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | integer | No | Filter issues by assignee user ID. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `labels` | string | No | Filter issues by comma-separated label names. | -| `milestone` | string | No | Filter issues by milestone title. | -| `order_by` | string | No | Order issues by field (created_at, updated_at, priority). | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Search issues by title or description. | -| `sort` | string | No | Sort order: asc or desc. | -| `state` | string | No | Filter issues by state: opened, closed, or all. | - -## `gitlab_job_artifacts_download` - -Download the artifacts archive of a specific CI/CD job. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `job_id` | integer | Yes | The numeric ID of the job. | - -## `gitlab_job_cancel` - -Cancel a specific CI/CD job. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `job_id` | integer | Yes | The numeric ID of the job to cancel. | - -## `gitlab_job_get` - -Get details of a specific CI/CD job. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `job_id` | integer | Yes | The numeric ID of the job. | - -## `gitlab_job_log_get` - -Get the log (trace) output of a specific CI/CD job. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `job_id` | integer | Yes | The numeric ID of the job. | - -## `gitlab_job_retry` - -Retry a specific CI/CD job. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `job_id` | integer | Yes | The numeric ID of the job to retry. | - -## `gitlab_jobs_list` - -List all jobs for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `scope` | string | No | Filter jobs by scope/status. | - -## `gitlab_label_create` - -Create a new label in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `color` | string | Yes | The color for the label in hex format (e.g. #FF0000). | -| `description` | string | No | Optional description for the label. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `name` | string | Yes | The name of the label. | - -## `gitlab_merge_request_approvals_get` - -Get the approval state of a specific merge request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | - -## `gitlab_merge_request_approve` - -Approve a merge request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | - -## `gitlab_merge_request_commits_list` - -List commits in a specific merge request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | - -## `gitlab_merge_request_create` - -Create a new merge request in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | integer | No | The numeric ID of the user to assign. | -| `description` | string | No | Description for the merge request (Markdown supported). | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `labels` | string | No | Comma-separated list of label names. | -| `remove_source_branch` | string | No | If 'true', removes the source branch after merging. | -| `source_branch` | string | Yes | The source branch name. | -| `squash` | string | No | If 'true', squashes all commits into one on merge. | -| `target_branch` | string | Yes | The target branch name. | -| `title` | string | Yes | The title of the merge request. | - -## `gitlab_merge_request_diff_get` - -Get the diffs of a specific merge request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | - -## `gitlab_merge_request_get` - -Get a specific merge request by its internal ID (IID). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request within the project. | - -## `gitlab_merge_request_merge` - -Merge an approved merge request in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_commit_message` | string | No | Custom merge commit message. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | -| `should_remove_source_branch` | string | No | If 'true', removes the source branch after merging. | -| `squash` | string | No | If 'true', squashes all commits into one. | - -## `gitlab_merge_request_note_create` - -Add a comment to a specific merge request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | Yes | The comment text (Markdown supported). | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | - -## `gitlab_merge_request_notes_list` - -List comments on a specific merge request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | - -## `gitlab_merge_request_update` - -Update an existing merge request in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | integer | No | The numeric ID of the user to assign. | -| `description` | string | No | Updated description for the merge request. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `labels` | string | No | Comma-separated list of label names. | -| `merge_request_iid` | integer | Yes | The internal ID of the merge request. | -| `state_event` | string | No | State transition: 'close' to close, 'reopen' to reopen. | -| `target_branch` | string | No | New target branch name. | -| `title` | string | No | New title for the merge request. | - -## `gitlab_merge_requests_list` - -List merge requests for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `labels` | string | No | Filter by comma-separated label names. | -| `order_by` | string | No | Order MRs by field (created_at, updated_at, title). | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Search MRs by title or description. | -| `sort` | string | No | Sort order: asc or desc. | -| `source_branch` | string | No | Filter by source branch name. | -| `state` | string | No | Filter by state: opened, closed, locked, merged, or all. | -| `target_branch` | string | No | Filter by target branch name. | - -## `gitlab_milestone_create` - -Create a new milestone in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Optional description for the milestone. | -| `due_date` | string | No | Due date for the milestone in YYYY-MM-DD format. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `start_date` | string | No | Start date for the milestone in YYYY-MM-DD format. | -| `title` | string | Yes | The title of the milestone. | - -## `gitlab_milestone_delete` - -Delete a milestone from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `milestone_id` | integer | Yes | The numeric ID of the milestone. | - -## `gitlab_milestone_get` - -Get a specific project milestone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `milestone_id` | integer | Yes | The numeric ID of the milestone. | - -## `gitlab_milestone_update` - -Update an existing milestone in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description for the milestone. | -| `due_date` | string | No | Updated due date in YYYY-MM-DD format. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `milestone_id` | integer | Yes | The numeric ID of the milestone. | -| `state_event` | string | No | State transition: 'close' to close, 'activate' to reopen. | -| `title` | string | No | New title for the milestone. | - -## `gitlab_milestones_list` - -List milestones for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Filter milestones by title. | -| `state` | string | No | Filter milestones by state: active or closed. | - -## `gitlab_namespaces_list` - -List namespaces available to the current user (personal namespaces and groups). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Filter namespaces by name. | - -## `gitlab_pipeline_cancel` - -Cancel a running pipeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `pipeline_id` | integer | Yes | The numeric ID of the pipeline to cancel. | - -## `gitlab_pipeline_create` - -Trigger a new CI/CD pipeline for a specific branch or tag. Note: GitLab.com requires identity verification on the account before pipelines can be triggered via API. Ensure the authenticated user has verified their identity at gitlab.com/-/profile/verify. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `ref` | string | Yes | The branch or tag name to run the pipeline on. | -| `variables` | string | No | JSON array of pipeline variables, each with 'key' and 'value' fields. | - -## `gitlab_pipeline_delete` - -Delete a pipeline from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `pipeline_id` | integer | Yes | The numeric ID of the pipeline to delete. | - -## `gitlab_pipeline_get` - -Get details of a specific pipeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `pipeline_id` | integer | Yes | The numeric ID of the pipeline. | - -## `gitlab_pipeline_jobs_list` - -List jobs for a specific pipeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `pipeline_id` | integer | Yes | The numeric ID of the pipeline. | -| `scope` | string | No | Filter jobs by scope. | - -## `gitlab_pipeline_retry` - -Retry a failed pipeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `pipeline_id` | integer | Yes | The numeric ID of the pipeline to retry. | - -## `gitlab_pipelines_list` - -List pipelines for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `ref` | string | No | Filter pipelines by branch or tag name. | -| `sha` | string | No | Filter pipelines by commit SHA. | -| `status` | string | No | Filter by pipeline status. | - -## `gitlab_project_create` - -Create a new GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | A short description of the project. | -| `initialize_with_readme` | string | No | If 'true', initializes the repository with a README. | -| `name` | string | Yes | The name of the project. | -| `visibility` | string | No | Visibility level: private, internal, or public. Defaults to private. | - -## `gitlab_project_delete` - -Delete a GitLab project. This is an asynchronous operation (returns 202 Accepted). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject'). | - -## `gitlab_project_fork` - -Fork a GitLab project into a namespace. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path to fork. | -| `name` | string | No | The name for the forked project. | -| `namespace_id` | integer | No | The ID of the namespace to fork the project into. | -| `path` | string | No | The URL path (slug) for the forked project. Must be unique in the target namespace. If omitted, GitLab uses the source project path which may already be taken. | - -## `gitlab_project_forks_list` - -List forks of a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | - -## `gitlab_project_get` - -Get a specific project by numeric ID or URL-encoded namespace/project path. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject'). | - -## `gitlab_project_member_add` - -Add a member to a GitLab project with a specified access level. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `access_level` | integer | Yes | Access level for the member. 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `user_id` | integer | Yes | The numeric ID of the user to add. | - -## `gitlab_project_member_remove` - -Remove a member from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `user_id` | integer | Yes | The numeric ID of the user to remove. | - -## `gitlab_project_members_list` - -List members of a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `query` | string | No | Filter members by name. | - -## `gitlab_project_search` - -Search within a specific GitLab project for issues, merge requests, commits, code, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `ref` | string | No | The branch or tag name to search (for blobs or commits scope). | -| `scope` | string | Yes | The scope to search in within the project. | -| `search` | string | Yes | The search query string. | - -## `gitlab_project_snippet_create` - -Create a new snippet in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content` | string | Yes | The content of the snippet. | -| `description` | string | No | Optional description for the snippet. | -| `file_name` | string | Yes | The filename for the snippet. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `title` | string | Yes | The title of the snippet. | -| `visibility` | string | No | Visibility level: private, internal, or public. | - -## `gitlab_project_snippet_get` - -Get a specific snippet from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `snippet_id` | integer | Yes | The numeric ID of the snippet. | - -## `gitlab_project_snippets_list` - -List all snippets in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | - -## `gitlab_project_star` - -Star a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_project_unstar` - -Unstar a GitLab project. Returns 200 with project data if successfully unstarred, or 304 if the project was not starred. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_project_update` - -Update an existing GitLab project's settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `default_branch` | string | No | The default branch name for the project. | -| `description` | string | No | A short description of the project. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject'). | -| `name` | string | No | New name for the project. | -| `visibility` | string | No | New visibility level: private, internal, or public. | - -## `gitlab_project_variable_create` - -Create a new CI/CD variable for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `environment_scope` | string | No | The environment scope for this variable (default '*'). | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `key` | string | Yes | The variable key name. | -| `masked` | string | No | If 'true', masks the variable in job logs. | -| `protected` | string | No | If 'true', the variable is only available on protected branches/tags. | -| `value` | string | Yes | The value of the variable. | -| `variable_type` | string | No | The variable type: env_var (default) or file. | - -## `gitlab_project_variable_delete` - -Delete a CI/CD variable from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `key` | string | Yes | The variable key name to delete. | - -## `gitlab_project_variable_get` - -Get a specific CI/CD variable for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `key` | string | Yes | The variable key name. | - -## `gitlab_project_variable_update` - -Update an existing CI/CD variable for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `key` | string | Yes | The variable key name to update. | -| `masked` | string | No | If 'true', masks the variable in job logs. | -| `protected` | string | No | If 'true', the variable is only available on protected branches/tags. | -| `value` | string | Yes | The new value of the variable. | - -## `gitlab_project_variables_list` - -List all CI/CD variables for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_project_webhook_create` - -Create a new webhook for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `issues_events` | string | No | If 'true', trigger the webhook on issue events. | -| `merge_requests_events` | string | No | If 'true', trigger on merge request events. | -| `pipeline_events` | string | No | If 'true', trigger on pipeline events. | -| `push_events` | string | No | If 'true', trigger the webhook on push events. | -| `token` | string | No | Secret token to validate webhook payloads. | -| `url` | string | Yes | The URL to send webhook payloads to. | - -## `gitlab_project_webhook_delete` - -Delete a webhook from a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `hook_id` | integer | Yes | The numeric ID of the webhook to delete. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_project_webhook_get` - -Get a specific webhook for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `hook_id` | integer | Yes | The numeric ID of the webhook. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_project_webhook_update` - -Update an existing webhook for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `hook_id` | integer | Yes | The numeric ID of the webhook to update. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `merge_requests_events` | string | No | If 'true', trigger on merge request events. | -| `pipeline_events` | string | No | If 'true', trigger on pipeline events. | -| `push_events` | string | No | If 'true', trigger on push events. | -| `url` | string | Yes | The new URL to send webhook payloads to. | - -## `gitlab_project_webhooks_list` - -List all webhooks configured for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | - -## `gitlab_projects_list` - -List all projects accessible to the authenticated user. Supports filtering by search, ownership, membership, and visibility. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `membership` | string | No | If 'true', limits by projects where the user is a member. | -| `order_by` | string | No | Order projects by a field (e.g. id, name, created_at). | -| `owned` | string | No | If 'true', limits by projects explicitly owned by the current user. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Search query to filter projects by name. | -| `sort` | string | No | Sort order: 'asc' or 'desc'. | -| `visibility` | string | No | Filter by visibility level: public, internal, or private. | - -## `gitlab_release_create` - -Create a new release in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | Yes | Release notes in Markdown format. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `name` | string | Yes | The release name. | -| `ref` | string | No | The branch or commit to create the tag from (only if tag does not exist). | -| `tag_name` | string | Yes | The tag name for the release. | - -## `gitlab_release_delete` - -Delete a release from a GitLab project. Returns the deleted release object. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `tag_name` | string | Yes | The tag name of the release to delete. | - -## `gitlab_release_get` - -Get a specific release by tag name. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `tag_name` | string | Yes | The tag name for the release. | - -## `gitlab_release_update` - -Update an existing release in a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated release notes in Markdown format. | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `name` | string | No | Updated release name. | -| `tag_name` | string | Yes | The tag name of the release to update. | - -## `gitlab_releases_list` - -List releases for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | - -## `gitlab_repository_tree_list` - -List files and directories in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `page` | integer | No | Page number for pagination. | -| `path` | string | No | Folder path to list files from. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `recursive` | string | No | If 'true', lists files recursively. | -| `ref` | string | No | The branch, tag, or commit SHA to list files from. | - -## `gitlab_ssh_key_add` - -Add an SSH key for the currently authenticated user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The SSH public key content. | -| `title` | string | Yes | A descriptive title for the SSH key. | - -## `gitlab_tag_create` - -Create a new tag in a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `message` | string | No | Message for an annotated tag. | -| `ref` | string | Yes | The commit SHA, branch name, or another tag name to create the tag from. | -| `release_description` | string | No | Release notes for the tag. | -| `tag_name` | string | Yes | The name of the new tag. | - -## `gitlab_tag_delete` - -Delete a tag from a GitLab repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `tag_name` | string | Yes | The name of the tag to delete. | - -## `gitlab_tag_get` - -Get details of a specific repository tag. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `tag_name` | string | Yes | The name of the tag. | - -## `gitlab_tags_list` - -List repository tags for a GitLab project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The project ID (numeric) or URL-encoded path. | -| `order_by` | string | No | Order tags by field (name, updated, version). | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Filter tags by name. | -| `sort` | string | No | Sort order: asc or desc. | - -## `gitlab_user_get` - -Get a specific user by ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the user. | - -## `gitlab_user_projects_list` - -List projects owned by a specific user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `user_id` | integer | Yes | The numeric ID of the user whose projects to list. | - -## `gitlab_users_list` - -List users. Supports filtering by search term, username, and active status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `active` | string | No | Filter by active status. Use 'true' or 'false'. | -| `page` | integer | No | Page number for pagination. | -| `per_page` | integer | No | Number of results per page (max 100). | -| `search` | string | No | Search users by name or email. | -| `username` | string | No | Filter by exact username. | + diff --git a/src/content/docs/reference/agent-connectors/gmail.mdx b/src/content/docs/reference/agent-connectors/gmail.mdx index 1218ee662..c6d469070 100644 --- a/src/content/docs/reference/agent-connectors/gmail.mdx +++ b/src/content/docs/reference/agent-connectors/gmail.mdx @@ -2,19 +2,19 @@ title: Gmail description: Gmail is Google's cloud based email service that allows you to access your messages from any computer or device with just a web browser. tableOfContents: true +sidebar: + label: Gmail head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/gmail' import { SetupGmailSection } from '@components/templates' import { UsageGmailSection } from '@components/templates' @@ -40,102 +40,4 @@ Supports authentication: ## Tool list -## `gmail_fetch_mails` - -Fetch emails from a connected Gmail account using search filters. Requires a valid Gmail OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `format` | string | No | Format of the returned message. | -| `include_spam_trash` | boolean | No | Whether to fetch emails from spam and trash folders | -| `label_ids` | `array` | No | Gmail label IDs to filter messages | -| `max_results` | integer | No | Maximum number of emails to fetch | -| `page_token` | string | No | Page token for pagination | -| `query` | string | No | Search query string using Gmail's search syntax (e.g., 'is:unread from:user@example.com') | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_get_attachment_by_id` - -Retrieve a specific attachment from a Gmail message using the message ID and attachment ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attachment_id` | string | Yes | Unique Gmail attachment ID | -| `file_name` | string | No | Preferred filename to use when saving/returning the attachment | -| `message_id` | string | Yes | Unique Gmail message ID that contains the attachment | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_get_contacts` - -Fetch a list of contacts from the connected Gmail account. Supports pagination and field filtering. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `max_results` | integer | No | Maximum number of contacts to fetch | -| `page_token` | string | No | Token to retrieve the next page of results | -| `person_fields` | `array` | No | Fields to include for each person | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_get_message_by_id` - -Retrieve a specific Gmail message using its message ID. Optionally control the format of the returned data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `format` | string | No | Format of the returned message. | -| `message_id` | string | Yes | Unique Gmail message ID | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_get_thread_by_id` - -Retrieve a specific Gmail thread by thread ID. Optionally control message format and metadata headers. Requires a valid Gmail OAuth2 connection with read access. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `format` | string | No | Format of messages in the returned thread. | -| `metadata_headers` | `array` | No | Specific email headers to include when format is metadata | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `thread_id` | string | Yes | Unique Gmail thread ID | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_list_drafts` - -List draft emails from a connected Gmail account. Requires a valid Gmail OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `max_results` | integer | No | Maximum number of drafts to fetch | -| `page_token` | string | No | Page token for pagination | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_list_threads` - -List threads in a connected Gmail account using optional search and label filters. Requires a valid Gmail OAuth2 connection with read access. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include_spam_trash` | boolean | No | Whether to include threads from Spam and Trash | -| `label_ids` | `array` | No | Gmail label IDs to filter threads (threads must match all labels) | -| `max_results` | integer | No | Maximum number of threads to return | -| `page_token` | string | No | Page token for pagination | -| `query` | string | No | Search query string using Gmail search syntax (for example, 'is:unread from:user@example.com') | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `gmail_search_people` - -Search people or contacts in the connected Google account using a query. Requires a valid Google OAuth2 connection with People API scopes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `other_contacts` | boolean | No | Whether to include people not in the user's contacts (from 'Other Contacts'). | -| `page_size` | integer | No | Maximum number of people to return. | -| `person_fields` | `array` | No | Fields to retrieve for each person. | -| `query` | string | Yes | Text query to search people (e.g., name, email address). | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | + diff --git a/src/content/docs/reference/agent-connectors/gong.mdx b/src/content/docs/reference/agent-connectors/gong.mdx index edbb864d3..c66b6d145 100644 --- a/src/content/docs/reference/agent-connectors/gong.mdx +++ b/src/content/docs/reference/agent-connectors/gong.mdx @@ -2,19 +2,19 @@ title: Gong description: Connect with Gong to sync calls, transcripts, insights, coaching and CRM activity tableOfContents: true +sidebar: + label: Gong head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/gong' import { SetupGongSection } from '@components/templates' import { UsageGongSection } from '@components/templates' @@ -40,296 +40,4 @@ Supports authentication: , ## Tool list -## `gong_call_outcomes_list` - -List all call outcome options configured in the Gong account. Returns outcome definitions such as name and ID that can be applied to calls to indicate the result of a conversation. - -## `gong_calls_create` - -Create (register) a new call in Gong. This adds a call record with metadata such as title, scheduled start time, participants, and direction. After creation, Gong returns a media upload URL that can be used to upload the call recording separately. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actual_start` | string | Yes | The actual date and time the call started (ISO 8601 format, e.g., 2024-06-15T14:00:00Z). | -| `call_provider_code` | string | No | The telephony or conferencing system used (e.g., 'zoom', 'webex', 'ringcentral'). | -| `client_unique_id` | string | No | A unique identifier for this call in your system, used to prevent duplicate uploads. | -| `direction` | string | No | Direction of the call: 'Inbound' or 'Outbound'. | -| `disposition` | string | No | Outcome of the call (e.g., 'Connected', 'No Answer', 'Left Voicemail'). | -| `duration` | integer | No | Duration of the call in seconds. | -| `language` | string | No | Primary language spoken on the call as a BCP-47 language tag (e.g., 'en-US', 'es-ES'). | -| `parties` | `array` | No | Array of participant objects. Each participant should include emailAddress, name, speakerId, and userId fields. | -| `purpose` | string | No | Purpose or topic of the call (e.g., 'Discovery', 'Demo', 'QBR'). | -| `scheduled_end` | string | No | Scheduled end time for the call (ISO 8601 format). | -| `scheduled_start` | string | No | Scheduled start time for the call (ISO 8601 format). | -| `title` | string | No | Title or subject of the call. | -| `workspace_id` | string | No | Workspace ID to associate this call with a specific Gong workspace. | - -## `gong_calls_get` - -Retrieve extensive details for one or more Gong calls by their IDs. Returns enriched call data including participants, interaction stats, topics discussed, and CRM associations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `call_ids` | `array` | Yes | Array of Gong call IDs to retrieve extensive details for. | -| `cursor` | string | No | Cursor value from a previous API response for paginating to the next page of results. | -| `from_date_time` | string | No | Start of the date-time range to filter calls (ISO 8601 format). | -| `to_date_time` | string | No | End of the date-time range to filter calls (ISO 8601 format). | -| `workspace_id` | string | No | Optional workspace ID to restrict the results to a specific Gong workspace. | - -## `gong_calls_list` - -List Gong calls with optional filters for date range, workspace, and specific call IDs. Returns a page of calls with metadata such as title, duration, participants, and direction. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `call_ids` | string | No | Comma-separated list of specific call IDs to retrieve. | -| `cursor` | string | No | Cursor value from a previous API response for paginating to the next page of results. | -| `from_date_time` | string | No | Start of the date-time range for filtering calls (ISO 8601 format, e.g., 2024-01-01T00:00:00Z). | -| `to_date_time` | string | No | End of the date-time range for filtering calls (ISO 8601 format, e.g., 2024-12-31T23:59:59Z). | -| `workspace_id` | string | No | Optional workspace ID to restrict results to a specific Gong workspace. | - -## `gong_calls_transcript_get` - -Retrieve transcripts for one or more Gong calls by their IDs. Returns speaker-attributed, sentence-level transcript segments with timing offsets for each call. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `call_ids` | `array` | Yes | Array of Gong call IDs whose transcripts to retrieve. | -| `cursor` | string | No | Cursor value from a previous API response for paginating to the next page of results. | -| `from_date_time` | string | No | Start of the date-time range to filter calls (ISO 8601 format). | -| `to_date_time` | string | No | End of the date-time range to filter calls (ISO 8601 format). | -| `workspace_id` | string | No | Optional workspace ID to restrict the results to a specific Gong workspace. | - -## `gong_coaching_get` - -Get coaching data from Gong, including coaching sessions and feedback provided by managers to their team members. Supports cursor-based pagination for large result sets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor value from a previous response for paginating to the next page of results. | - -## `gong_engage_digital_interactions_create` - -Add a digital interaction event (such as a web visit, content engagement, or other digital touchpoint) to a Gong Engage prospect's activity timeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `crm_account_id` | string | No | The CRM account ID associated with this interaction. | -| `crm_contact_id` | string | No | The CRM contact ID associated with this interaction. | -| `event_name` | string | Yes | Name of the digital interaction event (e.g., 'Visited Pricing Page', 'Downloaded Whitepaper'). | -| `event_timestamp` | string | Yes | Timestamp when the digital interaction occurred (ISO 8601 format). | -| `prospect_email` | string | No | Email address of the prospect who performed this digital interaction. | -| `url` | string | No | URL associated with the digital interaction (e.g., the page visited or content accessed). | - -## `gong_engage_email_activity_report` - -Report email engagement events (opens, clicks, bounces, unsubscribes) to Gong Engage so they appear in the activity timeline for a prospect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email_id` | string | Yes | External identifier for the email message that was engaged with. | -| `event_timestamp` | string | Yes | Timestamp when the engagement event occurred (ISO 8601 format). | -| `event_type` | string | Yes | The type of email engagement event to report. | -| `link_url` | string | No | For EMAIL_LINK_CLICKED events, the URL of the link that was clicked. | -| `prospect_email` | string | Yes | Email address of the prospect who triggered this engagement event. | - -## `gong_engage_flow_content_override` - -Override field placeholder values in a Gong Engage flow for specific prospects, allowing personalized content without modifying the base flow template. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `field_values` | `object` | Yes | Key-value pairs of field placeholder names and their override values to substitute into the flow content. | -| `flow_instance_id` | string | Yes | The unique ID of the flow instance to override content for. Retrieve from the Get Flows for Prospects endpoint. | - -## `gong_engage_flow_folders_list` - -List all Gong Engage flow folders available to a user, including company folders, personal folders, and folders shared with the specified user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor value from a previous API response for paginating to the next page of results. | -| `flow_owner_email` | string | Yes | Email address of the Gong user whose flow folders to retrieve. Returns company folders plus personal and shared folders for this user. | -| `workspace_id` | string | No | Optional workspace ID to filter flow folders by a specific workspace. | - -## `gong_engage_flows_list` - -List all Gong Engage flows available to a user, including company flows, personal flows, and flows shared with the specified user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor value from a previous API response for paginating to the next page of results. | -| `flow_owner_email` | string | Yes | Email address of the Gong user whose flows to retrieve. Returns company flows plus personal and shared flows for this user. | -| `workspace_id` | string | No | Optional workspace ID to filter flows by a specific workspace. | - -## `gong_engage_prospects_assign` - -Assign up to 200 CRM prospects (contacts or leads) to a specific Gong Engage flow. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `crm_prospect_ids` | `array` | Yes | Array of CRM prospect IDs (contacts or leads) to assign to the flow. Maximum 200 per request. | -| `flow_id` | string | Yes | The unique ID of the Gong Engage flow to assign the prospects to. | -| `flow_instance_owner_email` | string | Yes | Email address of the Gong user who will own the flow to-dos and be responsible for this flow instance. | - -## `gong_engage_prospects_assign_cool_off_override` - -Assign CRM prospects to a Gong Engage flow while overriding the cool-off period restriction that would normally prevent re-enrollment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `crm_prospect_ids` | `array` | Yes | Array of CRM prospect IDs (contacts or leads) to assign to the flow, bypassing the cool-off period. Maximum 200 per request. | -| `flow_id` | string | Yes | The unique ID of the Gong Engage flow to assign the prospects to. | -| `flow_instance_owner_email` | string | No | Email address of the Gong user who will own the flow to-dos and be responsible for this flow instance. | - -## `gong_engage_prospects_bulk_assign` - -Asynchronously bulk assign CRM prospects to a Gong Engage flow; returns an assignment ID that can be used to poll the operation status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `crm_prospect_ids` | `array` | Yes | Array of CRM prospect IDs (contacts or leads) to bulk assign to the flow. | -| `flow_id` | string | Yes | The unique ID of the Gong Engage flow to assign the prospects to. | -| `flow_instance_owner_email` | string | No | Email address of the Gong user who will own the flow to-dos and be responsible for this flow instance. | - -## `gong_engage_prospects_bulk_assign_status` - -Retrieve the status and result of a previously submitted bulk prospect-to-flow assignment operation using its assignment ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignment_id` | string | Yes | The unique ID of the bulk assignment operation to check, returned from the Bulk Assign Prospects to Flow request. | - -## `gong_engage_prospects_flows_list` - -List all Gong Engage flows currently assigned to a given set of CRM prospects (contacts or leads). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `crm_prospect_ids` | `array` | Yes | Array of CRM prospect IDs (contacts or leads) to look up flow assignments for. Maximum 200 prospects per request. | - -## `gong_engage_prospects_unassign` - -Unassign CRM prospects (contacts or leads) from a specific Gong Engage flow using their CRM IDs, removing them from the flow sequence. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `crm_prospect_ids` | `array` | Yes | Array of CRM prospect IDs (contacts or leads) to remove from the flow. | -| `flow_id` | string | Yes | The unique ID of the Gong Engage flow to unassign the prospects from. | - -## `gong_engage_prospects_unassign_by_instance` - -Unassign prospects from a Gong Engage flow using flow instance IDs rather than CRM prospect IDs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `flow_instance_ids` | `array` | Yes | Array of flow instance IDs identifying the specific prospect-flow enrollments to remove. | - -## `gong_engage_task_complete` - -Mark a specific Gong Engage task as completed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `completion_notes` | string | No | Optional notes about how the task was completed. | -| `task_id` | string | Yes | The unique ID of the Gong Engage task to mark as completed. | - -## `gong_engage_task_skip` - -Skip a specific Gong Engage task, indicating it should not be performed for this prospect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `skip_reason` | string | No | Optional reason for skipping this task. | -| `task_id` | string | Yes | The unique ID of the Gong Engage task to skip. | - -## `gong_engage_tasks_list` - -List Gong Engage tasks for a specified user, such as call tasks, email tasks, LinkedIn tasks, and other follow-up actions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_email` | string | Yes | Email address of the Gong user whose tasks to retrieve. | -| `cursor` | string | No | Cursor value from a previous response for paginating to the next page of results. | -| `from_date` | string | No | Start date for filtering tasks (ISO 8601 format, e.g., 2024-01-01T00:00:00Z). | -| `to_date` | string | No | End date for filtering tasks (ISO 8601 format, e.g., 2024-12-31T23:59:59Z). | -| `workspace_id` | string | No | Optional workspace ID to filter tasks by a specific workspace. | - -## `gong_engage_users_list` - -List all active Gong users in the organization, useful for finding user emails to use as flow owners or assignees in Gong Engage. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor value from a previous API response for paginating to the next page of results. | -| `include_avatars` | boolean | No | Whether to include avatar URLs in the response. | - -## `gong_engage_workspaces_list` - -List all company workspaces in Gong, which can be used to scope Gong Engage flows and tasks to specific business units or teams. - -## `gong_library_folder_content_get` - -Get the content of a specific Gong library folder by its folder ID. Returns calls, clips, and other media items stored inside the folder. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `folder_id` | string | Yes | The unique identifier of the library folder whose content should be retrieved. | - -## `gong_library_folders_list` - -List all library folders in the Gong account. Returns folder names, IDs, and hierarchy information. Optionally filter by workspace to retrieve folders scoped to a specific business unit. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `workspace_id` | string | No | Optional workspace ID to filter library folders belonging to a specific Gong workspace. | - -## `gong_scorecards_list` - -List all scorecard settings configured in the Gong account. Returns scorecard definitions including name, questions, and associated criteria used for call review and coaching. - -## `gong_stats_interaction` - -Get aggregated interaction statistics for Gong calls within a date range. Returns metrics such as talk ratio, longest monologue, patience, question rate, and interactivity for each participant. Optionally filter by specific call IDs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `call_ids` | `array` | No | Optional array of specific Gong call IDs to filter the statistics. | -| `cursor` | string | No | Cursor value from a previous response for paginating to the next page of results. | -| `from_date_time` | string | Yes | Start of the date range for retrieving interaction statistics (ISO 8601 format, e.g., 2024-01-01T00:00:00Z). | -| `to_date_time` | string | Yes | End of the date range for retrieving interaction statistics (ISO 8601 format, e.g., 2024-12-31T23:59:59Z). | - -## `gong_stats_user_actions` - -Get user activity and scorecard statistics for Gong calls within a date range. Returns aggregated scorecard metrics and activity data per user. Optionally filter by specific user IDs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor value from a previous response for paginating to the next page of results. | -| `from_date_time` | string | Yes | Start of the date range for retrieving scorecard statistics (ISO 8601 format, e.g., 2024-01-01T00:00:00Z). | -| `to_date_time` | string | Yes | End of the date range for retrieving scorecard statistics (ISO 8601 format, e.g., 2024-12-31T23:59:59Z). | -| `user_ids` | `array` | No | Optional array of Gong user IDs to filter scorecard statistics for specific users. | - -## `gong_trackers_list` - -List all tracker (keyword tracker) settings configured in the Gong account. Returns tracker definitions including name, tracked phrases, and associated categories used for monitoring conversation topics. - -## `gong_users_get` - -Get detailed user information for specific Gong users using an extensive filter. Filter by user IDs or by a creation date range. Returns full user profiles including settings, roles, and manager details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `created_from_date_time` | string | No | Return users created on or after this date-time (ISO 8601 format, e.g., 2024-01-01T00:00:00Z). | -| `created_to_date_time` | string | No | Return users created on or before this date-time (ISO 8601 format, e.g., 2024-12-31T23:59:59Z). | -| `cursor` | string | No | Cursor value from a previous response for paginating to the next page of results. | -| `user_ids` | `array` | No | Array of Gong user IDs to retrieve detailed information for. | - -## `gong_users_list` - -List all users in the Gong account. Returns user profiles including name, email, title, and manager information. Supports cursor-based pagination and optionally includes avatar URLs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor value from a previous response for paginating to the next page of results. | -| `include_avatars` | boolean | No | Whether to include avatar image URLs in the response. | + diff --git a/src/content/docs/reference/agent-connectors/google_ads.mdx b/src/content/docs/reference/agent-connectors/google_ads.mdx index 8cad9d1ae..1fc740b01 100644 --- a/src/content/docs/reference/agent-connectors/google_ads.mdx +++ b/src/content/docs/reference/agent-connectors/google_ads.mdx @@ -2,19 +2,19 @@ title: Google Ads description: Connect to Google Ads to manage advertising campaigns, analyze performance metrics, and optimize ad spending across Google's advertising platform tableOfContents: true +sidebar: + label: Google Ads head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/google_ads' import { SetupGoogleAdsSection } from '@components/templates' import { UsageGoogleAdsSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/googlecalendar.mdx b/src/content/docs/reference/agent-connectors/googlecalendar.mdx index 938372eff..0279d521b 100644 --- a/src/content/docs/reference/agent-connectors/googlecalendar.mdx +++ b/src/content/docs/reference/agent-connectors/googlecalendar.mdx @@ -2,19 +2,19 @@ title: Google Calendar description: Google Calendar is Google's cloud-based calendar service that allows you to manage your events, appointments, and schedules from any computer or device with just a web browser. tableOfContents: true +sidebar: + label: Google Calendar head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googlecalendar' import { SetupGooglecalendarSection } from '@components/templates' import { UsageGooglecalendarSection } from '@components/templates' @@ -40,119 +40,4 @@ Supports authentication: ## Tool list -## `googlecalendar_create_event` - -Create a new event in a connected Google Calendar account. Supports meeting links, recurrence, attendees, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attendees_emails` | `array` | No | Attendee email addresses | -| `calendar_id` | string | No | Calendar ID to create the event in | -| `create_meeting_room` | boolean | No | Generate a Google Meet link for this event | -| `description` | string | No | Optional event description | -| `event_duration_hour` | integer | No | Duration of event in hours | -| `event_duration_minutes` | integer | No | Duration of event in minutes | -| `event_type` | string | No | Event type for display purposes | -| `guests_can_invite_others` | boolean | No | Allow guests to invite others | -| `guests_can_modify` | boolean | No | Allow guests to modify the event | -| `guests_can_see_other_guests` | boolean | No | Allow guests to see each other | -| `location` | string | No | Location of the event | -| `recurrence` | `array` | No | Recurrence rules (iCalendar RRULE format) | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `send_updates` | boolean | No | Send update notifications to attendees | -| `start_datetime` | string | Yes | Event start time in RFC3339 format | -| `summary` | string | Yes | Event title/summary | -| `timezone` | string | No | Timezone for the event (IANA time zone identifier) | -| `tool_version` | string | No | Optional tool version to use for execution | -| `transparency` | string | No | Calendar transparency (free/busy) | -| `visibility` | string | No | Visibility of the event | - -## `googlecalendar_delete_event` - -Delete an event from a connected Google Calendar account. Requires the calendar ID and event ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `calendar_id` | string | No | The ID of the calendar from which the event should be deleted | -| `event_id` | string | Yes | The ID of the calendar event to delete | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googlecalendar_get_event_by_id` - -Retrieve a specific calendar event by its ID using optional filtering and list parameters. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `calendar_id` | string | No | The calendar ID to search in | -| `event_id` | string | Yes | The unique identifier of the calendar event to fetch | -| `event_types` | `array` | No | Filter by Google event types | -| `query` | string | No | Free text search query | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `show_deleted` | boolean | No | Include deleted events in results | -| `single_events` | boolean | No | Expand recurring events into instances | -| `time_max` | string | No | Upper bound for event start time (RFC3339) | -| `time_min` | string | No | Lower bound for event start time (RFC3339) | -| `tool_version` | string | No | Optional tool version to use for execution | -| `updated_min` | string | No | Filter events updated after this time (RFC3339) | - -## `googlecalendar_list_calendars` - -List all accessible Google Calendar calendars for the authenticated user. Supports filters and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `max_results` | integer | No | Maximum number of calendars to fetch | -| `min_access_role` | string | No | Minimum access role to include in results | -| `page_token` | string | No | Token to retrieve the next page of results | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `show_deleted` | boolean | No | Include deleted calendars in the list | -| `show_hidden` | boolean | No | Include calendars that are hidden from the calendar list | -| `sync_token` | string | No | Token to get updates since the last sync | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googlecalendar_list_events` - -List events from a connected Google Calendar account with filtering options. Requires a valid Google Calendar OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `calendar_id` | string | No | Calendar ID to list events from | -| `max_results` | integer | No | Maximum number of events to fetch | -| `order_by` | string | No | Order of events in the result | -| `page_token` | string | No | Page token for pagination | -| `query` | string | No | Free text search query | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `single_events` | boolean | No | Expand recurring events into single events | -| `time_max` | string | No | Upper bound for event start time (RFC3339 timestamp) | -| `time_min` | string | No | Lower bound for event start time (RFC3339 timestamp) | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googlecalendar_update_event` - -Update an existing event in a connected Google Calendar account. Only provided fields will be updated. Supports updating time, attendees, location, meeting links, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attendees_emails` | `array` | No | Attendee email addresses | -| `calendar_id` | string | Yes | Calendar ID containing the event | -| `create_meeting_room` | boolean | No | Generate a Google Meet link for this event | -| `description` | string | No | Optional event description | -| `end_datetime` | string | No | Event end time in RFC3339 format | -| `event_duration_hour` | integer | No | Duration of event in hours | -| `event_duration_minutes` | integer | No | Duration of event in minutes | -| `event_id` | string | Yes | The ID of the calendar event to update | -| `event_type` | string | No | Event type for display purposes | -| `guests_can_invite_others` | boolean | No | Allow guests to invite others | -| `guests_can_modify` | boolean | No | Allow guests to modify the event | -| `guests_can_see_other_guests` | boolean | No | Allow guests to see each other | -| `location` | string | No | Location of the event | -| `recurrence` | `array` | No | Recurrence rules (iCalendar RRULE format) | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `send_updates` | boolean | No | Send update notifications to attendees | -| `start_datetime` | string | No | Event start time in RFC3339 format | -| `summary` | string | No | Event title/summary | -| `timezone` | string | No | Timezone for the event (IANA time zone identifier) | -| `tool_version` | string | No | Optional tool version to use for execution | -| `transparency` | string | No | Calendar transparency (free/busy) | -| `visibility` | string | No | Visibility of the event | + diff --git a/src/content/docs/reference/agent-connectors/googledocs.mdx b/src/content/docs/reference/agent-connectors/googledocs.mdx index 287942b5b..469c4fea1 100644 --- a/src/content/docs/reference/agent-connectors/googledocs.mdx +++ b/src/content/docs/reference/agent-connectors/googledocs.mdx @@ -2,20 +2,19 @@ title: Google Docs description: Connect to Google Docs. Create, edit, and collaborate on documents tableOfContents: true +sidebar: + label: Google Docs head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupGoogleDocsSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googledocs' import { UsageGoogledocsSection } from '@components/templates'
@@ -40,46 +39,4 @@ Supports authentication: ## Tool list -## `googledocs_create_document` - -Create a new blank Google Doc with an optional title. Returns the new document's ID and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `title` | string | No | Title of the new document | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googledocs_list_documents` - -List all Google Docs documents in the user's Drive. Optionally search by document name. Returns document IDs, names, and metadata with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `order_by` | string | No | Sort order for results. Examples: modifiedTime desc, name asc, createdTime desc | -| `page_size` | integer | No | Number of documents to return per page (max 1000, default 100) | -| `page_token` | string | No | Token for retrieving the next page of results. Use the nextPageToken from a previous response. | -| `query` | string | No | Drive search query to filter documents. Defaults to all Google Docs. To search by name, use: mimeType = 'application/vnd.google-apps.document' and trashed = false and name contains 'report' | - -## `googledocs_read_document` - -Read the complete content and structure of a Google Doc including text, formatting, tables, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `document_id` | string | Yes | The ID of the Google Doc to read | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `suggestions_view_mode` | string | No | How suggestions are rendered in the response | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googledocs_update_document` - -Update the content of an existing Google Doc using batch update requests. Supports inserting and deleting text, formatting, tables, and other document elements. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `document_id` | string | Yes | The ID of the Google Doc to update | -| `requests` | `array` | Yes | Array of update requests to apply to the document | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | -| `write_control` | `object` | No | Optional write control for revision management | + diff --git a/src/content/docs/reference/agent-connectors/googledrive.mdx b/src/content/docs/reference/agent-connectors/googledrive.mdx index a6a2bfa41..646df4aa4 100644 --- a/src/content/docs/reference/agent-connectors/googledrive.mdx +++ b/src/content/docs/reference/agent-connectors/googledrive.mdx @@ -2,20 +2,19 @@ title: Google Drive description: Connect to Google Drive. Manage files, folders, and sharing permissions tableOfContents: true +sidebar: + label: Google Drive head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupGoogleDriveSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googledrive' import { UsageGoogledriveSection } from '@components/templates'
@@ -40,44 +39,4 @@ Supports authentication: ## Tool list -## `googledrive_get_file_metadata` - -Retrieve metadata for a specific file in Google Drive by its file ID. Returns name, MIME type, size, creation time, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Fields to include in the response | -| `file_id` | string | Yes | The ID of the file to retrieve metadata for | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `supports_all_drives` | boolean | No | Support shared drives | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googledrive_search_content` - -Search inside the content of files stored in Google Drive using full-text search. Finds files where the body text matches the search term. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Fields to include in the response | -| `mime_type` | string | No | Filter results by MIME type | -| `page_size` | integer | No | Number of files to return per page | -| `page_token` | string | No | Token for the next page of results | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `search_term` | string | Yes | Text to search for inside file contents | -| `supports_all_drives` | boolean | No | Include shared drives in results | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googledrive_search_files` - -Search for files and folders in Google Drive using query filters like name, type, owner, and parent folder. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Fields to include in the response | -| `order_by` | string | No | Sort order for results | -| `page_size` | integer | No | Number of files to return per page | -| `page_token` | string | No | Token for the next page of results | -| `query` | string | No | Drive search query string | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `supports_all_drives` | boolean | No | Include shared drives in results | -| `tool_version` | string | No | Optional tool version to use for execution | + diff --git a/src/content/docs/reference/agent-connectors/googleforms.mdx b/src/content/docs/reference/agent-connectors/googleforms.mdx index 8c416107e..3f786612a 100644 --- a/src/content/docs/reference/agent-connectors/googleforms.mdx +++ b/src/content/docs/reference/agent-connectors/googleforms.mdx @@ -2,20 +2,19 @@ title: Google Forms description: Connect to Google Forms. Create, view, and manage forms and responses securely tableOfContents: true +sidebar: + label: Google Forms head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupGoogleFormsSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googleforms' import { UsageGoogleformsSection } from '@components/templates'
@@ -40,39 +39,4 @@ Supports authentication: ## Tool list -## `googleforms_create_form` - -Create a new Google Form with a title and optional document title. Returns the new form's ID and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `document_title` | string | No | The title of the document shown in Google Drive (defaults to the form title if not provided) | -| `title` | string | Yes | The title of the form shown to respondents | - -## `googleforms_get_form` - -Get the structure and metadata of a Google Form including its title, description, and all questions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `form_id` | string | Yes | The ID of the Google Form to retrieve | - -## `googleforms_get_response` - -Get a single response submitted to a Google Form by its response ID. Returns the respondent's answers for all questions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `form_id` | string | Yes | The ID of the Google Form | -| `response_id` | string | Yes | The ID of the specific response to retrieve | - -## `googleforms_list_responses` - -List all responses submitted to a Google Form. Returns response IDs, submission timestamps, and answer values for each respondent. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | string | No | Filter responses by submission time. Format: timestamp > 2026-01-01T00:00:00Z | -| `form_id` | string | Yes | The ID of the Google Form to list responses for | -| `page_size` | integer | No | Maximum number of responses to return (max 5000) | -| `page_token` | string | No | Token for retrieving the next page of results | + diff --git a/src/content/docs/reference/agent-connectors/googlemeet.mdx b/src/content/docs/reference/agent-connectors/googlemeet.mdx index 064cf9c39..8e22f3bb3 100644 --- a/src/content/docs/reference/agent-connectors/googlemeet.mdx +++ b/src/content/docs/reference/agent-connectors/googlemeet.mdx @@ -2,20 +2,19 @@ title: Google Meet description: Connect to Google Meet. Create and manage video meetings with powerful collaboration features tableOfContents: true +sidebar: + label: Google Meet head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupGoogleMeetsSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googlemeet' import { UsageGooglemeetSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/googlesheets.mdx b/src/content/docs/reference/agent-connectors/googlesheets.mdx index 16c6c5c1b..d3ad73228 100644 --- a/src/content/docs/reference/agent-connectors/googlesheets.mdx +++ b/src/content/docs/reference/agent-connectors/googlesheets.mdx @@ -2,20 +2,19 @@ title: Google Sheets description: Connect to Google Sheets. Create, edit, and analyze spreadsheets with powerful data management capabilities tableOfContents: true +sidebar: + label: Google Sheets head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupGoogleSheetsSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googlesheets' import { UsageGooglesheetsSection } from '@components/templates'
@@ -40,75 +39,4 @@ Supports authentication: ## Tool list -## `googlesheets_append_values` - -Append rows of data to a Google Sheets spreadsheet. Data is added after the last row with existing content in the specified range. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `insert_data_option` | string | No | How the input data should be inserted. Options: INSERT_ROWS (inserts new rows), OVERWRITE (overwrites existing data). Default: OVERWRITE | -| `range` | string | Yes | The A1 notation range to append data to (e.g. Sheet1!A1) | -| `spreadsheet_id` | string | Yes | The ID of the spreadsheet to append data to | -| `value_input_option` | string | No | How input data should be interpreted. Options: RAW (literal values), USER_ENTERED (as if typed in UI, parses formulas/dates). Default: USER_ENTERED | -| `values` | `array` | Yes | 2D array of values to append. Each inner array is a row. | - -## `googlesheets_clear_values` - -Clear all values in a specified range of a Google Sheets spreadsheet. Formatting is preserved; only the cell values are cleared. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `range` | string | Yes | The A1 notation range to clear (e.g. Sheet1!A1:D10) | -| `spreadsheet_id` | string | Yes | The ID of the spreadsheet to clear values in | - -## `googlesheets_create_spreadsheet` - -Create a new Google Sheets spreadsheet with an optional title and initial sheet configuration. Returns the new spreadsheet ID and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `locale` | string | No | Locale of the spreadsheet | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `sheets` | `array` | No | Initial sheets to include in the spreadsheet | -| `time_zone` | string | No | Time zone for the spreadsheet | -| `title` | string | No | Title of the new spreadsheet | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googlesheets_get_values` - -Returns only the cell values from a specific range in a Google Sheet — no metadata, no formatting, just the data. For full spreadsheet metadata and formatting, use googlesheets_read_spreadsheet instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `major_dimension` | string | No | Whether values are returned by rows or columns | -| `range` | string | Yes | Cell range to read in A1 notation | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `spreadsheet_id` | string | Yes | The ID of the Google Sheet | -| `tool_version` | string | No | Optional tool version to use for execution | -| `value_render_option` | string | No | How values should be rendered in the response | - -## `googlesheets_read_spreadsheet` - -Returns everything about a spreadsheet — including spreadsheet metadata, sheet properties, cell values, formatting, themes, and pixel sizes. If you only need cell values, use googlesheets_get_values instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include_grid_data` | boolean | No | Include cell data in the response | -| `ranges` | string | No | Cell range to read in A1 notation | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `spreadsheet_id` | string | Yes | The ID of the Google Sheet to read | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googlesheets_update_values` - -Update cell values in a specific range of a Google Sheet. Supports writing single cells or multiple rows and columns at once. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include_values_in_response` | boolean | No | Return the updated cell values in the response | -| `range` | string | Yes | Cell range to update in A1 notation | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `spreadsheet_id` | string | Yes | The ID of the Google Sheet to update | -| `tool_version` | string | No | Optional tool version to use for execution | -| `value_input_option` | string | No | How input values should be interpreted | -| `values` | `array` | Yes | 2D array of values to write to the range | + diff --git a/src/content/docs/reference/agent-connectors/googleslides.mdx b/src/content/docs/reference/agent-connectors/googleslides.mdx index 925f1fa51..0f0578a15 100644 --- a/src/content/docs/reference/agent-connectors/googleslides.mdx +++ b/src/content/docs/reference/agent-connectors/googleslides.mdx @@ -2,19 +2,19 @@ title: Google Slides description: Connect to Google Slides to create, read, and modify presentations programmatically. tableOfContents: true +sidebar: + label: Google Slides head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/googleslides' import { SetupGoogleslidesSection } from '@components/templates' import { UsageGoogleslidesSection } from '@components/templates' @@ -40,23 +40,4 @@ Supports authentication: ## Tool list -## `googleslides_create_presentation` - -Create a new Google Slides presentation with an optional title. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `title` | string | No | Title of the new presentation | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `googleslides_read_presentation` - -Read the complete structure and content of a Google Slides presentation including slides, text, images, shapes, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Fields to include in the response | -| `presentation_id` | string | Yes | The ID of the Google Slides presentation to read | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for execution | + diff --git a/src/content/docs/reference/agent-connectors/granolamcp.mdx b/src/content/docs/reference/agent-connectors/granolamcp.mdx index 15e6bd963..de42b6f20 100644 --- a/src/content/docs/reference/agent-connectors/granolamcp.mdx +++ b/src/content/docs/reference/agent-connectors/granolamcp.mdx @@ -8,13 +8,11 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/granolamcp' import { UsageGranolamcpSection } from '@components/templates'
@@ -35,78 +33,4 @@ Supports authentication: ## Tool list -## `granolamcp_get_meeting_transcript` - -Get the full transcript for a specific Granola meeting by ID. Returns only the verbatim transcript content, not summaries or notes. -Use this when the user needs exact quotes, specific wording, or wants to review what was literally said in a meeting. For summarized content or action items, use query_granola_meetings or list_meetings/get_meetings instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `meeting_id` | string | Yes | Meeting UUID | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for tool execution | - -## `granolamcp_get_meetings` - -Get detailed meeting information for one or more Granola meetings by ID. Returns private notes, AI-generated summary, attendees, and metadata. -Use this when you already have specific meeting IDs (e.g. from list_meetings results). For open-ended questions about meeting content, use query_granola_meetings instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `meeting_ids` | `array` | Yes | Array of meeting UUIDs (max 10) | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for tool execution | - -## `granolamcp_list_meetings` - -List the user's Granola meeting notes within a time range. Returns meeting titles and metadata. - -IMPORTANT: For short-term questions about recent meeting details, prefer using query_granola_meetings instead. - -When to use: - -- User asks to list their meetings -- User asks about action items, decisions, or summaries from meetings over a longer or specific date range -- User asks about content from their meeting transcripts -- User references 'Granola notes' or 'meeting notes' or 'transcripts' - -When NOT to use: - -- User is asking about upcoming calendar events or scheduling -- User wants to create/modify calendar invites - -Use get_meetings to retrieve detailed meeting content after identifying relevant meetings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `custom_end` | string | No | ISO date for custom range end (required if time_range is 'custom') | -| `custom_start` | string | No | ISO date for custom range start (required if time_range is 'custom') | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `time_range` | string | No | Time range to query meetings from | -| `tool_version` | string | No | Optional tool version to use for tool execution | - -## `granolamcp_query_granola_meetings` - -Query Granola about the user's meetings using natural language. Returns a tailored response with inline citation links in mark (e.g. [\[0\]](url)) that reference source meeting notes. - -IMPORTANT: The response includes numbered citation links to specific Granola meeting notes. These citations MUST be preserved in your response to the user — they provide transparency and allow the user to verify information by clicking through to the original notes. - -When to use: - -- User asks about what was discussed, decided, or action-items from meetings -- User asks about follow-ups, todos, or commitments from recent meetings -- User references 'Granola notes' or 'meeting notes' - -When NOT to use: - -- User is asking about calendar scheduling or upcoming events -- User explicitly asks for a specific meeting by ID (use get_meetings instead) - -Prioritize using query_granola_meetings over list_meetings/get_meetings for open-ended or natural language queries about meeting content. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `document_ids` | `array` | No | Optional list of specific meeting IDs to limit context to | -| `query` | string | Yes | The query to run on Granola meeting notes | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `tool_version` | string | No | Optional tool version to use for tool execution | + diff --git a/src/content/docs/reference/agent-connectors/harvestapi.mdx b/src/content/docs/reference/agent-connectors/harvestapi.mdx index fb434c59d..5816dd698 100644 --- a/src/content/docs/reference/agent-connectors/harvestapi.mdx +++ b/src/content/docs/reference/agent-connectors/harvestapi.mdx @@ -2,19 +2,19 @@ title: HarvestAPI description: Connect to HarvestAPI to scrape LinkedIn profiles, companies, and job listings, and search for people and jobs using LinkedIn data. Enables AI agents to access real-time LinkedIn data for recruiting, sales prospecting, and market research. Pay-as-you-go credit model. tableOfContents: true +sidebar: + label: HarvestAPI head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/harvestapi' import { SetupHarvestapiSection } from '@components/templates' import { UsageHarvestapiSection } from '@components/templates' @@ -40,275 +40,4 @@ Supports authentication: ## Tool list -## `harvestapi_bulk_scrape_profiles` - -Batch scrape multiple LinkedIn profiles in a single request using the HarvestAPI Apify scraper. Accepts a JSON array of LinkedIn profile URLs. Pricing: $4 per 1,000 profiles, $10 per 1,000 with email. Requires an Apify API token from https://console.apify.com/settings/integrations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `apify_token` | string | Yes | Your Apify API token from https://console.apify.com/settings/integrations. | -| `find_email` | boolean | No | When true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4. | -| `profile_urls` | `array` | Yes | JSON array of LinkedIn profile URLs to scrape in bulk. | - -## `harvestapi_get_ad` - -Retrieve details of a specific LinkedIn ad by ad ID or URL. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ad_id` | string | No | The unique identifier of the LinkedIn Ad. | -| `url` | string | No | The URL of the LinkedIn Ad. | - -## `harvestapi_get_comment_reactions` - -Retrieve reactions on a specific LinkedIn comment by its URL. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination (default: 1). | -| `url` | string | Yes | URL of the LinkedIn comment. | - -## `harvestapi_get_company` - -Retrieve the Harvest company (account) information for the authenticated user, including company name, base URI, plan type, clock format, currency, and weekly capacity settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | Your Harvest account ID, returned during OAuth as the Harvest-Account-Id header. | - -## `harvestapi_get_company_posts` - -Retrieve posts published by a LinkedIn company page. Returns paginated post content, engagement metrics, and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company` | string | No | LinkedIn company URL. Provide this or company_universal_name. | -| `company_universal_name` | string | No | LinkedIn company universal name (slug from company URL). | -| `page` | integer | No | Page number for pagination (default: 1). | - -## `harvestapi_get_group` - -Retrieve details of a LinkedIn group including name, description, member count, and activity by URL or group ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `group_id` | string | No | LinkedIn group ID. Provide this or url. | -| `url` | string | No | LinkedIn group URL. Provide this or group_id. | - -## `harvestapi_get_post` - -Retrieve a specific LinkedIn post by its URL. Returns full post content, author details, and engagement metrics. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `url` | string | Yes | The LinkedIn post URL. | - -## `harvestapi_get_post_comments` - -Retrieve all comments on a LinkedIn post by its URL. Returns comment text, author details, and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `post` | string | Yes | The LinkedIn post URL to retrieve comments for. | - -## `harvestapi_get_post_reactions` - -Retrieve all reactions on a LinkedIn post by its URL. Returns reaction type and reactor profile details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `post` | string | Yes | The LinkedIn post URL to retrieve reactions for. | - -## `harvestapi_get_profile_comments` - -Retrieve comments made by a LinkedIn profile. Returns paginated results with comment content and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination (default: 1). | -| `pagination_token` | string | No | Required for pages > 1. Use token from previous page response. | -| `posted_limit` | string | No | Filter by maximum posted date. Options: '24h', 'week', 'month'. | -| `profile` | string | No | URL of the LinkedIn profile. | -| `profile_id` | string | No | Profile ID of the LinkedIn profile. Faster than URL lookup. | - -## `harvestapi_get_profile_posts` - -Retrieve posts made by a specific LinkedIn profile. Returns paginated post content, engagement data, and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination (default: 1). | -| `profile` | string | No | LinkedIn profile URL. Provide this or profile_id. | -| `profile_id` | string | No | LinkedIn profile ID. Provide this or profile. | -| `profile_public_identifier` | string | No | LinkedIn public identifier (slug from profile URL). | - -## `harvestapi_get_profile_reactions` - -Retrieve reactions made by a LinkedIn profile. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination (default: 1). | -| `pagination_token` | string | No | Required for pages > 1. Use token from previous page response. | -| `profile` | string | No | URL of the LinkedIn profile. | -| `profile_id` | string | No | Profile ID of the LinkedIn profile. Faster than URL lookup. | - -## `harvestapi_scrape_company` - -Scrape a LinkedIn company page for overview, headcount, employee count range, follower count, locations, specialities, industries, and funding data. Provide one of: company_url, universal_name, or search (company name). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_url` | string | No | Full LinkedIn company page URL. Provide this, universal_name, or search. | -| `search` | string | No | Company name to look up on LinkedIn. Returns the most relevant result. Provide this, company_url, or universal_name. | -| `universal_name` | string | No | Company universal name from the LinkedIn URL slug. Provide this, company_url, or search. | - -## `harvestapi_scrape_job` - -Retrieve full job listing details from LinkedIn by job URL or job ID. Returns title, company, description, requirements, salary, location, workplace type, employment type, applicant count, and application details. Provide one of: job_url or job_id. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `job_id` | string | No | LinkedIn numeric job ID from the posting URL. Provide this or job_url. | -| `job_url` | string | No | Full LinkedIn job posting URL. Provide this or job_id. | - -## `harvestapi_scrape_profile` - -Scrape a LinkedIn profile by URL or public identifier, returning contact details, employment history, education, skills, and more. Provide either profile_url or public_identifier. Use main=true for a simplified profile at fewer credits. Optionally find email with find_email=true (costs extra credits). Processing time ~2.6s (main) or ~4.9s (full). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `find_email` | boolean | No | When true, attempts to find the profile's email address via SMTP verification. Costs extra credits. | -| `include_about_profile` | boolean | No | When true, includes the 'About' section of the LinkedIn profile in the response. | -| `main` | boolean | No | When true, returns a simplified profile with fewer fields. Charges fewer credits than a full scrape. | -| `profile_id` | string | No | LinkedIn numeric profile ID. Can be used instead of profile_url or public_identifier. | -| `profile_url` | string | No | Full LinkedIn profile URL. Provide this or public_identifier or profile_id. | -| `public_identifier` | string | No | LinkedIn profile public identifier (the slug in the URL). Provide this or profile_url or profile_id. | -| `skip_smtp` | boolean | No | When true, skips SMTP verification when finding email. Faster but less accurate. | - -## `harvestapi_search_ads` - -Search the LinkedIn Ad Library for ads by keyword, advertiser, country, and date range. Useful for competitive research and ad intelligence. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_owner` | string | No | LinkedIn company URL of the advertiser. | -| `countries` | string | No | Country codes to filter ads by, comma-separated. e.g. 'US,GB'. | -| `date_option` | string | No | Predefined date filter option. | -| `enddate` | string | No | End date for ad search in YYYY-MM-DD format. | -| `keyword` | string | No | Keyword to search for in ads. | -| `startdate` | string | No | Start date for ad search in YYYY-MM-DD format. | - -## `harvestapi_search_companies` - -Search LinkedIn for companies using keyword, location, and company size filters. Returns paginated results with company name, description, and LinkedIn URL. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_size` | string | No | Company size range filter e.g. '1-10', '11-50', '51-200'. | -| `location` | string | No | Location to filter companies by. | -| `page` | integer | No | Page number for pagination (default: 1). | -| `search` | string | No | Keyword to search for companies. | - -## `harvestapi_search_geo` - -Search for LinkedIn geo IDs by location name. Returns matching geographic location IDs used for filtering people and job searches by location. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `search` | string | Yes | Location name to search for geo IDs. | - -## `harvestapi_search_groups` - -Search LinkedIn groups by keyword. Returns paginated results with group name, description, and member count. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number for pagination (default: 1). | -| `search` | string | Yes | Keyword to search for groups. | - -## `harvestapi_search_jobs` - -Search LinkedIn job listings by keyword, location, company, workplace type, employment type, experience level, and salary. Returns paginated job listings with title, company, location, and LinkedIn URL. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_id` | string | No | Filter by LinkedIn company ID(s), comma-separated. | -| `easy_apply` | boolean | No | When true, filter to jobs with LinkedIn Easy Apply only. | -| `employment_type` | string | No | Filter by employment type. Accepted values: full-time, part-time, contract, temporary, internship (comma-separated). | -| `experience_level` | string | No | Filter by experience level. Accepted values: internship, entry, associate, mid-senior, director, executive (comma-separated). | -| `location` | string | No | Filter by job location text (city, country, or region). | -| `page` | integer | No | Page number for pagination (default: 1). | -| `posted_limit` | string | No | Filter by recency of posting. Accepted values: 24h, week, month. | -| `salary` | string | No | Minimum salary filter. Accepted values: 40k+, 60k+, 80k+, 100k+, 120k+, 140k+, 160k+, 180k+, 200k+. | -| `search` | string | No | Job title or keyword to search for. | -| `sort_by` | string | No | Sort results by relevance or date. | -| `workplace_type` | string | No | Filter by workplace type. Accepted values: office, hybrid, remote (comma-separated). | - -## `harvestapi_search_leads` - -Search LinkedIn for leads using advanced filters including company, job title, location, seniority, industry, and experience. Supports LinkedIn Sales Navigator URLs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_headcount` | string | No | Filter by company size e.g. '1-10', '11-50', '51-200'. | -| `current_companies` | string | No | Filter by current company IDs or URLs (max 50, comma-separated). | -| `current_job_titles` | string | No | Filter by current job titles (max 70, comma-separated). | -| `first_names` | string | No | Filter by first names (max 70, comma-separated). | -| `geo_ids` | string | No | LinkedIn Geo IDs for location filtering. Overrides locations. | -| `industry_ids` | string | No | Filter by industry IDs (max 70, comma-separated). | -| `last_names` | string | No | Filter by last names (max 70, comma-separated). | -| `locations` | string | No | Location text filter (max 70, comma-separated). | -| `page` | integer | No | Page number for pagination (default: 1, max: 100). | -| `past_companies` | string | No | Filter by past company IDs or URLs (max 50, comma-separated). | -| `past_job_titles` | string | No | Filter by past job titles (max 70, comma-separated). | -| `recently_changed_jobs` | boolean | No | Filter for people who recently changed jobs. | -| `sales_nav_url` | string | No | LinkedIn Sales Navigator URL to use as search override. | -| `search` | string | No | Search query supporting LinkedIn operators. | -| `seniority_level_ids` | string | No | Filter by seniority level IDs (comma-separated). | -| `years_of_experience_ids` | string | No | Filter by years of total experience IDs. | - -## `harvestapi_search_people` - -Search LinkedIn for people using filters such as job title, current company, location, and industry. Uses LinkedIn Lead Search for unmasked results. Returns paginated profiles with name, title, location, and LinkedIn URL. All parameters are optional and comma-separated for multiple values. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_headcount` | string | No | Company headcount range filter, comma-separated (e.g. '1-10,11-50'). | -| `current_companies` | string | No | Current company IDs or LinkedIn URLs, comma-separated (max 50). | -| `current_job_titles` | string | No | Current job titles, comma-separated (max 70). e.g. 'CTO,VP Engineering' | -| `first_names` | string | No | First names to filter by, comma-separated (max 70). | -| `industry_ids` | string | No | LinkedIn industry IDs, comma-separated (max 70). | -| `last_names` | string | No | Last names to filter by, comma-separated (max 70). | -| `locations` | string | No | Location text, comma-separated (max 70). e.g. 'San Francisco,New York' | -| `page` | integer | No | Page number for pagination (default: 1, max: 100). | -| `search` | string | No | Fuzzy keyword search across name, title, and company. Supports LinkedIn search operators. | -| `seniority_level_ids` | string | No | LinkedIn seniority level IDs, comma-separated. | - -## `harvestapi_search_posts` - -Search LinkedIn posts by keyword, company, profile, or group. Supports filtering by post age and sorting. Returns paginated results with post content, author, and engagement data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `authors_company` | string | No | Filter posts by the author's current company URL. | -| `company` | string | No | LinkedIn company URL to filter posts by. | -| `company_id` | string | No | LinkedIn company ID to filter posts by. | -| `group` | string | No | LinkedIn group URL to filter posts by. | -| `page` | integer | No | Page number for pagination (default: 1). | -| `posted_limit` | string | No | Filter by post age. e.g. 'past-24h', 'past-week', 'past-month'. | -| `profile` | string | No | LinkedIn profile URL to filter posts by. | -| `profile_id` | string | No | LinkedIn profile ID to filter posts by. | -| `search` | string | No | Keyword to search for in posts. | -| `sort_by` | string | No | Sort results by 'relevance' or 'date'. | - -## `harvestapi_search_services` - -Search LinkedIn profiles offering services by name, location, or geo ID. Returns paginated results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `geo_id` | string | No | Filter by LinkedIn Geo ID. Overrides the location parameter. | -| `location` | string | No | Filter by location text. | -| `page` | integer | No | Page number for pagination (default: 1). | -| `search` | string | Yes | Search profiles by service name or keyword. | + diff --git a/src/content/docs/reference/agent-connectors/hubspot.mdx b/src/content/docs/reference/agent-connectors/hubspot.mdx index 4de0b512e..ea84846b0 100644 --- a/src/content/docs/reference/agent-connectors/hubspot.mdx +++ b/src/content/docs/reference/agent-connectors/hubspot.mdx @@ -2,19 +2,19 @@ title: HubSpot description: Connect to HubSpot CRM. Manage contacts, deals, companies, and marketing automation tableOfContents: true +sidebar: + label: HubSpot head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/hubspot' import { SetupHubspotSection } from '@components/templates' import { UsageHubspotSection } from '@components/templates' @@ -40,134 +40,4 @@ Supports authentication: ## Tool list -## `hubspot_companies_search` - -Search HubSpot companies using full-text search and pagination. Returns matching companies with specified properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Pagination offset to get results starting from a specific position | -| `filterGroups` | string | No | JSON string containing filter groups for advanced filtering | -| `limit` | number | No | Number of results to return per page (max 100) | -| `properties` | string | No | Comma-separated list of properties to include in the response | -| `query` | string | No | Search term for full-text search across company properties | - -## `hubspot_company_create` - -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. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `annualrevenue` | number | No | Annual revenue of the company | -| `city` | string | No | Company city location | -| `country` | string | No | Company country location | -| `description` | string | No | Company description or overview | -| `domain` | string | No | Company website domain | -| `industry` | string | No | Industry type of the company | -| `name` | string | Yes | Company name (required, serves as primary identifier) | -| `numberofemployees` | number | No | Number of employees at the company | -| `phone` | string | No | Company phone number | -| `state` | string | No | Company state or region | - -## `hubspot_company_get` - -Retrieve details of a specific company from HubSpot by company ID. Returns company properties and associated data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company_id` | string | Yes | ID of the company to retrieve | -| `properties` | string | No | Comma-separated list of properties to include in the response | - -## `hubspot_contact_create` - -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. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company` | string | No | Company name where the contact works | -| `email` | string | Yes | Primary email address for the contact (required, serves as unique identifier) | -| `firstname` | string | No | First name of the contact | -| `hs_lead_status` | string | No | Lead status of the contact | -| `jobtitle` | string | No | Job title of the contact | -| `lastname` | string | No | Last name of the contact | -| `lifecyclestage` | string | No | Lifecycle stage of the contact | -| `phone` | string | No | Phone number of the contact | -| `website` | string | No | Personal or company website URL | - -## `hubspot_contact_get` - -Retrieve details of a specific contact from HubSpot by contact ID. Returns contact properties and associated data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `contact_id` | string | Yes | ID of the contact to retrieve | -| `properties` | string | No | Comma-separated list of properties to include in the response | - -## `hubspot_contact_update` - -Update an existing contact in HubSpot CRM by contact ID. Allows updating contact properties like name, email, company, phone, and lifecycle stage. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `contact_id` | string | Yes | ID of the contact to update | -| `props` | `object` | No | Object containing properties like first name, last name, email, company, phone, and job title to update all these should be provided inside props as a JSON object, this is required | - -## `hubspot_contacts_list` - -Retrieve a list of contacts from HubSpot with filtering and pagination. Returns contact properties and supports pagination through cursor-based navigation. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Pagination cursor to get the next set of results | -| `archived` | boolean | No | Whether to include archived contacts in the results | -| `limit` | number | No | Number of results to return per page (max 100) | -| `properties` | string | No | Comma-separated list of properties to include in the response | - -## `hubspot_contacts_search` - -Search HubSpot contacts using full-text search and pagination. Returns matching contacts with specified properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Pagination offset to get results starting from a specific position | -| `filterGroups` | string | No | JSON string containing filter groups for advanced filtering | -| `limit` | number | No | Number of results to return per page (max 100) | -| `properties` | string | No | Comma-separated list of properties to include in the response | -| `query` | string | No | Search term for full-text search across contact properties | - -## `hubspot_deal_create` - -Create a new deal in HubSpot CRM. Requires dealname, amount, and dealstage. Supports additional properties like pipeline, close date, and deal type. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `amount` | number | Yes | Deal amount/value (required) | -| `closedate` | string | No | Expected close date (YYYY-MM-DD format) | -| `dealname` | string | Yes | Name of the deal (required) | -| `dealstage` | string | Yes | Current stage of the deal (required) | -| `dealtype` | string | No | Type of deal | -| `description` | string | No | Deal description | -| `hs_priority` | string | No | Deal priority (HIGH, MEDIUM, LOW) | -| `pipeline` | string | No | Deal pipeline | - -## `hubspot_deal_update` - -Update an existing deal in HubSpot CRM by deal ID. Allows updating deal properties like name, amount, stage, pipeline, close date, and priority. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deal_id` | string | Yes | ID of the deal to update | -| `good_deal` | boolean | No | Boolean flag indicating if this is a good deal | -| `properties` | `object` | Yes | Object containing deal properties to update | - -## `hubspot_deals_search` - -Search HubSpot deals using full-text search and pagination. Returns matching deals with specified properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Pagination offset to get results starting from a specific position | -| `filterGroups` | string | No | JSON string containing filter groups for advanced filtering | -| `limit` | number | No | Number of results to return per page (max 100) | -| `properties` | string | No | Comma-separated list of properties to include in the response | -| `query` | string | No | Search term for full-text search across deal properties | + diff --git a/src/content/docs/reference/agent-connectors/intercom.mdx b/src/content/docs/reference/agent-connectors/intercom.mdx index 65177377f..db08c72a4 100644 --- a/src/content/docs/reference/agent-connectors/intercom.mdx +++ b/src/content/docs/reference/agent-connectors/intercom.mdx @@ -2,19 +2,19 @@ title: Intercom description: Connect to Intercom. Send messages, manage conversations, and interact with users and contacts. tableOfContents: true +sidebar: + label: Intercom head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/intercom' import { SetupIntercomSection } from '@components/templates' import { UsageIntercomSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/jira.mdx b/src/content/docs/reference/agent-connectors/jira.mdx index f6a5646f1..631e66242 100644 --- a/src/content/docs/reference/agent-connectors/jira.mdx +++ b/src/content/docs/reference/agent-connectors/jira.mdx @@ -2,19 +2,19 @@ title: Jira description: Connect to Jira. Manage issues, projects, workflows, and agile development processes tableOfContents: true +sidebar: + label: Jira head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/jira' import { SetupJiraSection } from '@components/templates' import { UsageJiraSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/linear.mdx b/src/content/docs/reference/agent-connectors/linear.mdx index c14a6c18a..8f94ac258 100644 --- a/src/content/docs/reference/agent-connectors/linear.mdx +++ b/src/content/docs/reference/agent-connectors/linear.mdx @@ -2,19 +2,19 @@ title: Linear description: Connect to Linear. Manage issues, projects, sprints, and development workflows tableOfContents: true +sidebar: + label: Linear head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/linear' import { SetupLinearSection } from '@components/templates' import { UsageLinearSection } from '@components/templates' @@ -40,55 +40,4 @@ Supports authentication: ## Tool list -## `linear_graphql_query` - -Execute a custom GraphQL query or mutation against the Linear API. Allows running any valid GraphQL operation with variables support for advanced use cases. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `query` | string | Yes | The GraphQL query or mutation to execute | -| `variables` | `object` | No | Variables to pass to the GraphQL query | - -## `linear_issue_create` - -Create a new issue in Linear using the issueCreate mutation. Requires a team ID and title at minimum. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assigneeId` | string | No | ID of the user to assign the issue to | -| `description` | string | No | Description of the issue | -| `estimate` | string | No | Story point estimate for the issue | -| `labelIds` | `array` | No | Array of label IDs to apply to the issue | -| `priority` | string | No | Priority level of the issue (1-4, where 1 is urgent) | -| `projectId` | string | No | ID of the project to associate the issue with | -| `stateId` | string | No | ID of the workflow state to set | -| `teamId` | string | Yes | ID of the team to create the issue in | -| `title` | string | Yes | Title of the issue | - -## `linear_issue_update` - -Update an existing issue in Linear. You can update title, description, priority, state, and assignee. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assigneeId` | string | No | ID of the user to assign the issue to | -| `description` | string | No | New description for the issue | -| `issueId` | string | Yes | ID of the issue to update | -| `priority` | string | No | Priority level of the issue (1-4, where 1 is urgent) | -| `stateId` | string | No | ID of the workflow state to set | -| `title` | string | No | New title for the issue | - -## `linear_issues_list` - -List issues in Linear using the issues query with simple filtering and pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `after` | string | No | Cursor for pagination (returns issues after this cursor) | -| `assignee` | string | No | Filter by assignee email (e.g., 'user@example.com') | -| `before` | string | No | Cursor for pagination (returns issues before this cursor) | -| `first` | integer | No | Number of issues to return (pagination) | -| `labels` | `array` | No | Filter by label names (array of strings) | -| `priority` | string | No | Filter by priority level (1=Urgent, 2=High, 3=Medium, 4=Low) | -| `project` | string | No | Filter by project name (e.g., 'Q4 Goals') | -| `state` | string | No | Filter by state name (e.g., 'In Progress', 'Done') | + diff --git a/src/content/docs/reference/agent-connectors/microsoftexcel.mdx b/src/content/docs/reference/agent-connectors/microsoftexcel.mdx index eb9d25d49..237a31859 100644 --- a/src/content/docs/reference/agent-connectors/microsoftexcel.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftexcel.mdx @@ -2,20 +2,19 @@ title: Microsoft Excel description: Connect to Microsoft Excel. Access, read, and modify spreadsheets stored in OneDrive or SharePoint through Microsoft Graph API. tableOfContents: true +sidebar: + label: Microsoft Excel head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupMicrosoftExcelSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/microsoftexcel' import { UsageMicrosoftexcelSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftteams.mdx b/src/content/docs/reference/agent-connectors/microsoftteams.mdx index e12804830..7220dc7f9 100644 --- a/src/content/docs/reference/agent-connectors/microsoftteams.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftteams.mdx @@ -2,20 +2,19 @@ title: Teams description: Connect to Microsoft Teams. Manage messages, channels, meetings, and team collaboration tableOfContents: true +sidebar: + label: Teams head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupMicrosoftTeamsSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/microsoftteams' import { UsageMicrosoftteamsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftword.mdx b/src/content/docs/reference/agent-connectors/microsoftword.mdx index 4fcf4f4b2..c341e1e22 100644 --- a/src/content/docs/reference/agent-connectors/microsoftword.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftword.mdx @@ -2,20 +2,19 @@ title: Microsoft Word description: Connect to Microsoft Word. Authenticate with your Microsoft account to create, read, and edit Word documents stored in OneDrive or SharePoint through Microsoft Graph API. tableOfContents: true +sidebar: + label: Microsoft Word head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupMicrosoftWordSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/microsoftword' import { UsageMicrosoftwordSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/monday.mdx b/src/content/docs/reference/agent-connectors/monday.mdx index 045f8a06f..8acd13247 100644 --- a/src/content/docs/reference/agent-connectors/monday.mdx +++ b/src/content/docs/reference/agent-connectors/monday.mdx @@ -2,19 +2,19 @@ title: Monday.com description: Connect to Monday.com. Manage boards, tasks, workflows, teams, and project collaboration tableOfContents: true +sidebar: + label: Monday.com head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/monday' import { SetupMondaySection } from '@components/templates' import { UsageMondaySection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/notion.mdx b/src/content/docs/reference/agent-connectors/notion.mdx index 432935cfc..85a0a7817 100644 --- a/src/content/docs/reference/agent-connectors/notion.mdx +++ b/src/content/docs/reference/agent-connectors/notion.mdx @@ -2,19 +2,19 @@ title: Notion description: Connect to Notion workspace. Create, edit pages, manage databases, and collaborate on content tableOfContents: true +sidebar: + label: Notion head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/notion' import { SetupNotionSection } from '@components/templates' import { UsageNotionSection } from '@components/templates' @@ -40,272 +40,4 @@ Supports authentication: ## Tool list -## `notion_block_delete` - -Delete (archive) a Notion block by its ID. This also deletes all child blocks within it. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `block_id` | string | Yes | The ID of the block to delete | - -## `notion_block_update` - -Update the text content of an existing Notion block. Supports paragraph, heading, list item, quote, callout, and code blocks. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `block_id` | string | Yes | The ID of the block to update | -| `language` | string | No | Programming language for code blocks | -| `text` | string | Yes | New text content for the block | -| `type` | string | Yes | The block type (must match the existing block type) | - -## `notion_comment_create` - -Create a comment in Notion. Provide a comment object with rich_text content and either a parent object (with page_id) for a page-level comment or a discussion_id to reply in an existing thread. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment` | `object` | Yes | Comment object containing a rich_text array. Example: `{"rich_text":[{"type":"text","text":{"content":"Hello"}}]}` | -| `discussion_id` | string | No | Existing discussion thread ID to reply to. | -| `notion_version` | string | No | Optional override for the Notion-Version header (e.g., 2022-06-28). | -| `parent` | `object` | No | Parent object for a new top-level comment. Shape: `{"page_id":""}`. | -| `schema_version` | string | No | Internal override for schema version. | -| `tool_version` | string | No | Internal override for tool implementation version. | - -## `notion_comment_retrieve` - -Retrieve a single Notion comment by its `comment_id`. LLM tip: you typically obtain `comment_id` from the response of creating a comment or by first listing comments for a page/block and selecting the desired item’s `id`. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The identifier of the comment to retrieve (hyphenated UUID). Obtain it from Create-Comment responses or from a prior List-Comments call. | -| `notion_version` | string | No | Optional Notion-Version header override (e.g., 2022-06-28). | -| `schema_version` | string | No | Internal override for schema version. | -| `tool_version` | string | No | Internal override for tool implementation version. | - -## `notion_comments_fetch` - -Fetch comments for a given Notion block. Provide a `block_id` (the target page/block ID, hyphenated UUID). Supports pagination via `start_cursor` and `page_size` (1–100). LLM tip: extract `block_id` from a Notion URL’s trailing 32-char id, then insert hyphens (8-4-4-4-12). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `block_id` | string | Yes | Target Notion block (or page) ID to fetch comments for. Use a hyphenated UUID. | -| `notion_version` | string | No | Optional Notion-Version header override (e.g., 2022-06-28). | -| `page_size` | integer | No | Maximum number of comments to return (1–100). | -| `schema_version` | string | No | Internal override for schema version. | -| `start_cursor` | string | No | Cursor to fetch the next page of results. | -| `tool_version` | string | No | Internal override for tool implementation version. | - -## `notion_data_fetch` - -Fetch data from Notion using the workspace search API (/search). Supports pagination via start_cursor. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_size` | integer | No | Max number of results to return (1–100) | -| `query` | string | No | Text query used by /search | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `start_cursor` | string | No | Cursor for pagination; pass the previous response's next_cursor | -| `tool_version` | string | No | Optional tool version to use for execution | - -## `notion_data_source_fetch` - -Retrieve a Notion database's schema, title, and properties using the Notion 2025-09-03 API. Unlike notion_database_fetch, this returns a data_sources array — each entry contains a data_source_id required by notion_data_source_query and notion_data_source_insert_row. Use this as the first step when working with merged, synced, or multi-source databases. For standard single-source databases, notion_database_fetch is sufficient. LLM guidance: extract data_sources\[0].id (or the relevant source) from the response and pass it to the query or insert tools. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_id` | string | Yes | The target database ID in UUID format with hyphens. | - -## `notion_data_source_insert_row` - -Create a new row (page) in a Notion data source using the 2025-09-03 API. Required for merged, synced, or multi-source databases — these require parent.data_source_id instead of parent.database_id which the older notion_database_insert_row uses. Provide the data_source_id from notion_data_source_fetch (data_sources\[].id) and a properties object mapping column names to Notion property value shapes. Optionally attach child blocks (page content), an icon, or a cover image. LLM guidance: step 1 — call notion_data_source_fetch to get the data_source_id; step 2 — build the properties object using exact column names from the schema (use 'title' key for title-type fields); step 3 — call this tool. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `child_blocks` | `array` | No | Optional array of Notion blocks to append as page content. | -| `cover` | `object` | No | Optional page cover object. Example: `{"type":"external","external":{"url":"https://example.com/cover.jpg"}}` | -| `data_source_id` | string | Yes | The ID of the data source to insert a row into. Retrieve from notion_database_fetch response under data_sources[].id. | -| `icon` | `object` | No | Optional page icon object. Example: `{"type":"emoji","emoji":"📝"}` | -| `properties` | `object` | Yes | Object mapping column names (or property ids) to property values. Example: `{"title": {"title": [{"text": {"content": "Task A"}}]}, "Status": {"select": {"name": "Todo"}}}` | - -## `notion_data_source_query` - -Query rows (pages) from a Notion data source using the 2025-09-03 API. Required for merged, synced, or multi-source databases — these cannot be queried via notion_database_query as that tool uses the older /databases/\{id\}/query endpoint which does not support multiple data sources. Provide the data_source_id obtained from notion_data_source_fetch (data_sources\[].id). Supports filtering by property values, sorting, and cursor-based pagination. LLM guidance: step 1 — call notion_data_source_fetch with the database_id to retrieve the data_source_id; step 2 — pass that id here along with an optional filter, sorts, and page_size. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `data_source_id` | string | Yes | The ID of the data source to query. Retrieve from notion_database_fetch response under data_sources[].id. | -| `filter` | `object` | No | Notion filter object to narrow results. Example: `{"property": "Status", "select": {"equals": "Done"}}`. Supports compound filters with 'and'/'or' arrays. | -| `page_size` | integer | No | Maximum number of rows to return (1-100). | -| `sorts` | `array` | No | Order the results. Each item must include either property or timestamp, plus direction. | -| `start_cursor` | string | No | Cursor to fetch the next page of results. | - -## `notion_database_create` - -Create a new database in Notion under a parent page. Provide a parent object with page_id, a database title (rich_text array), and a properties object that defines the database schema (columns). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `parent` | `object` | Yes | Parent object specifying the page under which the database is created. Example: `{"page_id": "2561ab6c-418b-8072-beec-c4779fa811cf"}` | -| `properties` | `object` | Yes | Database schema object defining properties (columns). Example: `{"Name": {"title": {}}, "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Doing"}, {"name": "Done"}]}}}` | -| `schema_version` | string | No | Internal override for schema version. | -| `title` | `array` | Yes | Database title as a Notion rich_text array. | -| `tool_version` | string | No | Internal override for tool implementation version. | - -## `notion_database_fetch` - -Retrieve a Notion database's full definition, including title, properties, and schema. Required: database_id (hyphenated UUID). LLM tip: Extract the last 32 characters from a Notion database URL, then insert hyphens (8-4-4-4-12). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_id` | string | Yes | The target database ID in UUID format with hyphens. | - -## `notion_database_insert_row` - -Insert a new row (page) into a Notion database. Required: `database_id` (hyphenated UUID) and `properties` (object mapping database column names to Notion \*\*property values). Optional: child_blocks`(content blocks),`icon`(page icon object), and`cover\` (page cover object). - -LLM guidance: - -- `properties` must use **property values** (not schema). Example: - -```json - { - "title": { "title": \[ { "text": { "content": "Task A" } } ] }, - "Status": { "select": { "name": "Todo" } }, - "Due": { "date": { "start": "2025-09-01" } } - } -``` -- Use the **exact property key** as defined in the database (case‑sensitive), or the property id. -- `icon` example (emoji): `{"type":"emoji","emoji":"📝"}` -- `cover` example (external): `{"type":"external","external":{"url":"https://example.com/image.jpg"}}` -- Runtime note: the executor/host should synthesize `parent = {"database_id": database_id}` before sending to Notion. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `_parent` | `object` | No | Computed by host: `{ "database_id": "" }`. Do not supply manually. | -| `child_blocks` | `array` | No | Optional array of Notion blocks to append as page content (paragraph, heading, to_do, etc.). | -| `cover` | `object` | No | Optional page cover object. Example external: `{"type":"external","external":{"url":"https://example.com/cover.jpg"}}`. | -| `database_id` | string | Yes | Target database ID (hyphenated UUID). | -| `icon` | `object` | No | Optional page icon object. Examples: `{"type":"emoji","emoji":"📝"}` or `{"type":"external","external":{"url":"https://..."}}`. | -| `properties` | `object` | Yes | Object mapping **column names (or property ids)** to **property values**. ️ **CRITICAL: Property Identification Rules:** - For title fields: ALWAYS use 'title' as the property key (not 'Name' or display names) - For other properties: Use exact property names from database schema (case-sensitive) - DO NOT use URL-encoded property IDs with special characters **Recommended Workflow:** 1. Call fetch_database first to see exact property names 2. Use 'title' for title-type properties 3. Match other property names exactly as shown in schema Example: `{ "title": { "title": [ { "text": { "content": "Task A" } } ] }, "Status": { "select": { "name": "Todo" } }, "Due": { "date": { "start": "2025-09-01" } } }` | -| `schema_version` | string | No | Optional schema version override. | -| `tool_version` | string | No | Optional tool version override. | - -## `notion_database_property_retrieve` - -Query a Notion database and return only specific properties by supplying one or more property IDs. Use when you need page rows but want to limit the returned properties to reduce payload. Provide the database_id and an array of filter_properties (each item is a property id like "title") - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_id` | string | Yes | Target database ID (hyphenated UUID). | -| `property_id` | string | No | property ID to filter results by a specific property. get the property id by querying database. | -| `schema_version` | string | No | Optional schema version override. | -| `tool_version` | string | No | Optional tool version override. | - -## `notion_database_query` - -Query a Notion database for rows (pages) using the 2022-06-28 API. Works for standard single-source databases. NOTE: If you encounter an 'Invalid request URL' error or are working with a merged, synced, or multi-source database, use the newer data source tools instead — call notion_data_source_fetch with the database_id to get the data_source_id, then call notion_data_source_query with that id. Provide database_id (hyphenated UUID). Optional: filter (Notion filter object), page_size (default 10), start_cursor for pagination, and sorts. LLM guidance: extract the last 32 characters from a Notion database URL and insert hyphens (8-4-4-4-12) to form database_id. Sort rules: each sort item MUST include either property OR timestamp (last_edited_time/created_time), not both. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_id` | string | Yes | Target database ID (hyphenated UUID). | -| `filter` | `object` | No | Notion filter object to narrow results. Example: `{"property": "Status", "select": {"equals": "Done"}}`. Supports compound filters with 'and'/'or' arrays. | -| `page_size` | integer | No | Maximum number of rows to return (1–100). | -| `schema_version` | string | No | Optional schema version override. | -| `sorts` | `array` | No | Order the results. Each item must include either property or timestamp, plus direction. | -| `start_cursor` | string | No | Cursor to fetch the next page of results. | -| `tool_version` | string | No | Optional tool version override. | - -## `notion_database_update` - -Update a Notion database's title, description, or property schema. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_id` | string | Yes | The ID of the database to update | -| `description` | string | No | New description for the database | -| `properties` | `object` | No | Property schema updates (add, rename, or reconfigure columns) | -| `title` | string | No | New title for the database | - -## `notion_page_content_append` - -Append blocks to a Notion page or block. IMPORTANT: This tool uses a simplified block format — do NOT pass raw Notion API block objects. Each block takes a 'type' and a 'text' string (plain text only). The tool internally converts these into the Notion API format. Supported types: paragraph, heading_1, heading_2, heading_3, bulleted_list_item, numbered_list_item, code, quote, callout, divider. For code blocks, add a 'language' field. Dividers require only the 'type' field. Example: \[`{"type": "heading_1", "text": "My Title"}`, `{"type": "paragraph", "text": "Some content"}`, `{"type": "code", "text": "print('hi')", "language": "python"}`, `{"type": "divider"}`]. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `block_id` | string | Yes | The ID of the page or block to append content to | -| `blocks` | `array` | Yes | Array of blocks to append. Each block uses a simplified format with 'type' and 'text' fields — NOT the raw Notion API format. Do not pass Notion block objects with rich_text arrays. | - -## `notion_page_content_get` - -Retrieve the content (blocks) of a Notion page or block. Returns all child blocks with their type and text content. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `block_id` | string | Yes | The ID of the page or block whose children to retrieve | -| `page_size` | number | No | Number of blocks to return (max 100) | -| `start_cursor` | string | No | Cursor for pagination from a previous response | - -## `notion_page_create` - -Create a page in Notion either inside a database (as a row) or as a child of a page. Use exactly one parent mode: provide database_id to create a database row (page with properties) OR provide parent_page_id to create a child page. When creating in a database, properties must use Notion property value shapes and the title property key must be "title" (not the display name). Children (content blocks), icon, and cover are optional. The executor should synthesize the Notion parent object from the chosen parent input. - -Target rules: - -- Use database_id OR parent_page_id (not both) -- If database_id is provided → properties are required -- If parent_page_id is provided → properties are optional - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `_parent` | `object` | No | Computed by the executor: `{"database_id": "..."}` OR `{"page_id": "..."}` derived from database_id/parent_page_id. | -| `child_blocks` | `array` | No | Optional blocks to add as page content (children). | -| `cover` | `object` | No | Optional page cover object. | -| `database_id` | string | No | Create a page as a new row in this database (hyphenated UUID). Extract from the database URL (last 32 chars → hyphenate 8-4-4-4-12). | -| `icon` | `object` | No | Optional page icon object. | -| `notion_version` | string | No | Optional Notion-Version header override. | -| `parent_page_id` | string | No | Create a child page under this page (hyphenated UUID). Extract from the parent page URL. | -| `properties` | `object` | No | For database rows, supply property values keyed by property name (or id). For title properties, the key must be "title". Example (database row): `{ "title": { "title": [ { "text": { "content": "Task A" } } ] }, "Status": { "select": { "name": "Todo" } }, "Due": { "date": { "start": "2025-09-01" } } }` | -| `schema_version` | string | No | Optional schema version override. | -| `tool_version` | string | No | Optional tool version override. | - -## `notion_page_get` - -Retrieve a Notion page by its ID. Returns the page properties, metadata, and parent information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_id` | string | Yes | The ID of the Notion page to retrieve | - -## `notion_page_search` - -Search Notion pages by text query. Returns matching pages with their titles, IDs, and metadata. Optionally sort by last_edited_time or created_time, and paginate with start_cursor. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_size` | integer | No | Maximum number of pages to return (1–100). | -| `query` | string | No | Text to search for across Notion pages. | -| `sort_direction` | string | No | Direction to sort results. | -| `sort_timestamp` | string | No | Timestamp field to sort results by. | -| `start_cursor` | string | No | Cursor to fetch the next page of results. | - -## `notion_page_update` - -Update a Notion page's properties, archive/unarchive it, or change its icon and cover. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `archived` | boolean | No | Set to true to archive (delete) the page, false to unarchive it | -| `cover` | `object` | No | Page cover image to set | -| `icon` | `object` | No | Page icon to set | -| `page_id` | string | Yes | The ID of the Notion page to update | -| `properties` | `object` | No | Page properties to update using Notion property value shapes | - -## `notion_user_list` - -List all users in the Notion workspace including people and bots. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_size` | number | No | Number of users to return (max 100) | -| `start_cursor` | string | No | Cursor for pagination from a previous response | + diff --git a/src/content/docs/reference/agent-connectors/onedrive.mdx b/src/content/docs/reference/agent-connectors/onedrive.mdx index 469042620..8991f5e5c 100644 --- a/src/content/docs/reference/agent-connectors/onedrive.mdx +++ b/src/content/docs/reference/agent-connectors/onedrive.mdx @@ -2,19 +2,19 @@ title: OneDrive description: Connect to OneDrive. Manage files, folders, and cloud storage with Microsoft OneDrive tableOfContents: true +sidebar: + label: OneDrive head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/onedrive' import { SetupOnedriveSection } from '@components/templates' import { UsageOnedriveSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/onenote.mdx b/src/content/docs/reference/agent-connectors/onenote.mdx index 1f2119516..5ddb0f709 100644 --- a/src/content/docs/reference/agent-connectors/onenote.mdx +++ b/src/content/docs/reference/agent-connectors/onenote.mdx @@ -2,19 +2,19 @@ title: OneNote description: Connect to Microsoft OneNote. Access, create, and manage notebooks, sections, and pages stored in OneDrive or SharePoint through Microsoft Graph API. tableOfContents: true +sidebar: + label: OneNote head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/onenote' import { SetupOnenoteSection } from '@components/templates' import { UsageOnenoteSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/outlook.mdx b/src/content/docs/reference/agent-connectors/outlook.mdx index b8e69c459..be576ab5b 100644 --- a/src/content/docs/reference/agent-connectors/outlook.mdx +++ b/src/content/docs/reference/agent-connectors/outlook.mdx @@ -2,19 +2,19 @@ title: Outlook description: Connect to Microsoft Outlook. Manage emails, calendar events, contacts, and tasks tableOfContents: true +sidebar: + label: Outlook head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/outlook' import { SetupOutlookSection } from '@components/templates' import { UsageOutlookSection } from '@components/templates' @@ -40,317 +40,4 @@ Supports authentication: ## Tool list -## `outlook_create_calendar_event` - -Create a new calendar event in the user's Outlook calendar. Supports attendees, recurrence, reminders, online meetings, multiple locations, and event properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attendees_optional` | string | No | Array of email addresses for optional attendees | -| `attendees_required` | string | No | Array of email addresses for required attendees | -| `attendees_resource` | string | No | Array of email addresses for resources (meeting rooms, equipment) | -| `body_content` | string | No | No description | -| `body_contentType` | string | No | No description | -| `end_datetime` | string | Yes | No description | -| `end_timezone` | string | Yes | No description | -| `hideAttendees` | boolean | No | When true, each attendee only sees themselves | -| `importance` | string | No | Event importance level | -| `isAllDay` | boolean | No | Mark as all-day event | -| `isOnlineMeeting` | boolean | No | Create an online meeting (Teams/Skype) | -| `isReminderOn` | boolean | No | Enable or disable reminder | -| `location` | string | No | No description | -| `locations` | string | No | JSON array of location objects with displayName, address, coordinates | -| `onlineMeetingProvider` | string | No | Online meeting provider | -| `recurrence_days_of_week` | string | No | Days of week for weekly recurrence (comma-separated) | -| `recurrence_end_date` | string | No | End date for recurrence (YYYY-MM-DD), required if range_type is endDate | -| `recurrence_interval` | integer | No | How often the event recurs (e.g., every 2 weeks = 2) | -| `recurrence_occurrences` | integer | No | Number of occurrences, required if range_type is numbered | -| `recurrence_range_type` | string | No | How the recurrence ends | -| `recurrence_start_date` | string | No | Start date for recurrence (YYYY-MM-DD) | -| `recurrence_type` | string | No | Recurrence pattern type | -| `reminderMinutesBeforeStart` | integer | No | Minutes before event start to show reminder | -| `sensitivity` | string | No | Event sensitivity/privacy level | -| `showAs` | string | No | Free/busy status | -| `start_datetime` | string | Yes | No description | -| `start_timezone` | string | Yes | No description | -| `subject` | string | Yes | No description | - -## `outlook_create_contact` - -Create a new contact in the user's mailbox with name, email addresses, and phone numbers. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `businessPhones` | `array` | No | Array of business phone numbers | -| `companyName` | string | No | Company name | -| `emailAddresses` | `array` | No | Array of email address objects with 'address' and optional 'name' fields | -| `givenName` | string | Yes | First name of the contact | -| `jobTitle` | string | No | Job title | -| `mobilePhone` | string | No | Mobile phone number | -| `surname` | string | Yes | Last name of the contact | - -## `outlook_delete_calendar_event` - -Delete a calendar event by ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `event_id` | string | Yes | No description | - -## `outlook_get_attachment` - -Download a specific attachment from an Outlook email message by attachment ID. Returns the full attachment including base64-encoded file content in the contentBytes field. Use List Attachments to get the attachment ID first. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attachment_id` | string | Yes | The ID of the attachment to download. | -| `message_id` | string | Yes | The ID of the message containing the attachment. | - -## `outlook_get_calendar_event` - -Retrieve an existing calendar event by ID from the user's Outlook calendar. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `event_id` | string | Yes | No description | - -## `outlook_get_message` - -Retrieve a specific email message by ID from the user's Outlook mailbox, including full body content, sender, recipients, attachments info, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `message_id` | string | Yes | The ID of the message to retrieve. | - -## `outlook_list_attachments` - -List all attachments on a specific Outlook email message. Returns attachment metadata including ID, name, size, and content type. Use the attachment ID with Get Attachment to download the file content. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `message_id` | string | Yes | The ID of the message to list attachments for. | - -## `outlook_list_calendar_events` - -List calendar events from the user's Outlook calendar with filtering, sorting, pagination, and field selection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | string | No | OData filter expression to filter events (e.g., startsWith(subject,'All')) | -| `orderby` | string | No | OData orderby expression to sort events (e.g., start/dateTime desc) | -| `select` | string | No | Comma-separated list of properties to include in the response | -| `skip` | number | No | Number of events to skip for pagination | -| `top` | number | No | Maximum number of events to return | - -## `outlook_list_contacts` - -List all contacts in the user's mailbox with support for filtering, pagination, and field selection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `$filter` | string | No | Filter expression to narrow results (e.g., "emailAddresses/any(a:a/address eq 'user@example.com')") | -| `$orderby` | string | No | Property to sort by (e.g., "displayName") | -| `$select` | string | No | Comma-separated list of properties to return (e.g., "displayName,emailAddresses,phoneNumbers") | -| `$skip` | integer | No | Number of contacts to skip for pagination | -| `$top` | integer | No | Number of contacts to return (default: 10) | - -## `outlook_list_messages` - -List all messages in the user's mailbox with support for filtering, pagination, and field selection. Returns 10 messages by default. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `$filter` | string | No | Filter expression to narrow results (e.g., "from/emailAddress/address eq 'user@example.com'") | -| `$orderby` | string | No | Property to sort by (e.g., "receivedDateTime desc") | -| `$select` | string | No | Comma-separated list of properties to return (e.g., "subject,from,receivedDateTime") | -| `$skip` | integer | No | Number of messages to skip for pagination | -| `$top` | integer | No | Number of messages to return (1-1000, default: 10) | - -## `outlook_mailbox_settings_get` - -Retrieve the mailbox settings for the signed-in user. Returns automatic replies (out-of-office) configuration, language, timezone, working hours, date/time format, and delegate meeting message delivery preferences. - -## `outlook_mailbox_settings_update` - -Update mailbox settings for the signed-in user. Supports configuring automatic replies (out-of-office), language, timezone, working hours, date/time format, and delegate meeting message delivery preferences. Only fields provided will be updated. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `automaticRepliesSetting` | `object` | No | Configuration for automatic replies (out-of-office). Set status, internal/external reply messages, and optional scheduled time window. | -| `dateFormat` | string | No | Preferred date format string for the mailbox (e.g., 'MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy-MM-dd'). | -| `delegateMeetingMessageDeliveryOptions` | string | No | Controls how meeting messages are delivered when a delegate is configured. | -| `language` | `object` | No | Language and locale for the mailbox. Object with locale (e.g., 'en-US') and displayName. | -| `timeFormat` | string | No | Preferred time format string for the mailbox (e.g., 'hh:mm tt' for 12-hour, 'HH:mm' for 24-hour). | -| `timeZone` | string | No | Preferred time zone for the mailbox (e.g., 'UTC', 'Pacific Standard Time', 'Eastern Standard Time'). | -| `workingHours` | `object` | No | Working hours configuration including days of week, start/end times, and time zone. | - -## `outlook_reply_to_message` - -Reply to an existing email message. The reply is automatically sent to the original sender and saved in the Sent Items folder. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment` | string | Yes | Reply message content | -| `messageId` | string | Yes | The unique identifier of the message to reply to | - -## `outlook_search_messages` - -Search messages by keywords across subject, body, sender, and other fields. Returns matching messages with support for pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `$select` | string | No | Comma-separated list of properties to return (e.g., "subject,from,receivedDateTime") | -| `$skip` | integer | No | Number of messages to skip for pagination | -| `$top` | integer | No | Number of messages to return (1-1000, default: 10) | -| `query` | string | Yes | Search query string (searches across subject, body, from, to) | - -## `outlook_send_message` - -Send an email message using Microsoft Graph API. The message is saved in the Sent Items folder by default. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `bccRecipients` | `array` | No | Array of email addresses to BCC | -| `body` | string | Yes | Body content of the email | -| `bodyType` | string | No | Content type of the body (Text or HTML) | -| `ccRecipients` | `array` | No | Array of email addresses to CC | -| `saveToSentItems` | boolean | No | Save the message in Sent Items folder (default: true) | -| `subject` | string | Yes | Subject line of the email | -| `toRecipients` | `array` | Yes | Array of email addresses to send to | - -## `outlook_todo_lists_create` - -Create a new Microsoft To Do task list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `display_name` | string | Yes | The name of the task list. | - -## `outlook_todo_lists_delete` - -Permanently delete a Microsoft To Do task list and all its tasks. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | The ID of the task list to delete. | - -## `outlook_todo_lists_get` - -Get a specific Microsoft To Do task list by ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | The ID of the task list. | - -## `outlook_todo_lists_list` - -List all Microsoft To Do task lists for the current user. - -## `outlook_todo_lists_update` - -Rename a Microsoft To Do task list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `display_name` | string | Yes | The new name for the task list. | -| `list_id` | string | Yes | The ID of the task list to update. | - -## `outlook_todo_tasks_create` - -Create a new task in a Microsoft To Do task list with optional body, due date, importance, and reminder. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | No | The body/notes of the task (plain text). | -| `categories` | `array` | No | Array of category names to assign to the task. | -| `due_date` | string | No | Due date in YYYY-MM-DD format (e.g. "2026-04-15"). | -| `due_time_zone` | string | No | Time zone for the due date (e.g. "UTC", "America/New_York"). Defaults to UTC. | -| `importance` | string | No | The importance of the task: low, normal, or high. | -| `list_id` | string | Yes | The ID of the task list to add the task to. | -| `reminder_date_time` | string | No | Reminder date and time in ISO 8601 format (e.g. "2026-04-15T09:00:00"). | -| `reminder_time_zone` | string | No | Time zone for the reminder (e.g. "UTC"). Defaults to UTC. | -| `status` | string | No | The status of the task: notStarted, inProgress, completed, waitingOnOthers, or deferred. | -| `title` | string | Yes | The title of the task. | - -## `outlook_todo_tasks_delete` - -Permanently delete a task from a Microsoft To Do task list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | The ID of the task list. | -| `task_id` | string | Yes | The ID of the task to delete. | - -## `outlook_todo_tasks_get` - -Get a specific task from a Microsoft To Do task list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | The ID of the task list. | -| `task_id` | string | Yes | The ID of the task. | - -## `outlook_todo_tasks_list` - -List all tasks in a Microsoft To Do task list with optional filtering and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `$filter` | string | No | OData filter expression (e.g. "status eq 'notStarted'"). | -| `$orderby` | string | No | Property to sort by (e.g. "createdDateTime desc"). | -| `$skip` | integer | No | Number of tasks to skip for pagination. | -| `$top` | integer | No | Number of tasks to return (default: 10). | -| `list_id` | string | Yes | The ID of the task list. | - -## `outlook_todo_tasks_update` - -Update a task in a Microsoft To Do task list. Only provided fields are changed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | No | New body/notes for the task (plain text). | -| `categories` | `array` | No | Array of category names to assign to the task. | -| `due_date` | string | No | Due date in YYYY-MM-DD format. | -| `due_time_zone` | string | No | Time zone for the due date. Defaults to UTC. | -| `importance` | string | No | The importance: low, normal, or high. | -| `list_id` | string | Yes | The ID of the task list. | -| `status` | string | No | The status: notStarted, inProgress, completed, waitingOnOthers, or deferred. | -| `task_id` | string | Yes | The ID of the task to update. | -| `title` | string | No | New title for the task. | - -## `outlook_update_calendar_event` - -Update an existing Outlook calendar event. Only provided fields will be updated. Supports time, attendees, location, reminders, online meetings, recurrence, and event properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attendees_optional` | string | No | Comma-separated optional attendee emails | -| `attendees_required` | string | No | Comma-separated required attendee emails | -| `attendees_resource` | string | No | Comma-separated resource emails (meeting rooms, equipment) | -| `body_content` | string | No | Event description/body | -| `body_contentType` | string | No | Content type of body | -| `categories` | string | No | Comma-separated categories | -| `end_datetime` | string | No | Event end time in RFC3339 format | -| `end_timezone` | string | No | Timezone for end time | -| `event_id` | string | Yes | The ID of the calendar event to update | -| `hideAttendees` | boolean | No | When true, each attendee only sees themselves | -| `importance` | string | No | Event importance level | -| `isAllDay` | boolean | No | Mark as all-day event | -| `isOnlineMeeting` | boolean | No | Create an online meeting (Teams/Skype) | -| `isReminderOn` | boolean | No | Enable or disable reminder | -| `location` | string | No | Physical or virtual location | -| `locations` | string | No | JSON array of location objects with displayName, address, coordinates | -| `onlineMeetingProvider` | string | No | Online meeting provider | -| `recurrence_days_of_week` | string | No | Days of week for weekly recurrence (comma-separated) | -| `recurrence_end_date` | string | No | End date for recurrence (YYYY-MM-DD) | -| `recurrence_interval` | integer | No | How often the event recurs (e.g., every 2 weeks = 2) | -| `recurrence_occurrences` | integer | No | Number of occurrences | -| `recurrence_range_type` | string | No | How the recurrence ends | -| `recurrence_start_date` | string | No | Start date for recurrence (YYYY-MM-DD) | -| `recurrence_type` | string | No | Recurrence pattern type | -| `reminderMinutesBeforeStart` | integer | No | Minutes before event start to show reminder | -| `sensitivity` | string | No | Event sensitivity/privacy level | -| `showAs` | string | No | Free/busy status | -| `start_datetime` | string | No | Event start time in RFC3339 format | -| `start_timezone` | string | No | Timezone for start time | -| `subject` | string | No | Event title/summary | + diff --git a/src/content/docs/reference/agent-connectors/phantombuster.mdx b/src/content/docs/reference/agent-connectors/phantombuster.mdx index ec04e58f4..e2a962e8f 100644 --- a/src/content/docs/reference/agent-connectors/phantombuster.mdx +++ b/src/content/docs/reference/agent-connectors/phantombuster.mdx @@ -2,19 +2,19 @@ title: PhantomBuster description: Connect to PhantomBuster to automate web scraping and data extraction workflows. Launch, monitor, and manage automation agents that extract data from LinkedIn, Instagram, Twitter, and hundreds of other platforms. tableOfContents: true +sidebar: + label: PhantomBuster head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/phantombuster' import { SetupPhantombusterSection } from '@components/templates' import { UsagePhantombusterSection } from '@components/templates' @@ -40,322 +40,4 @@ Supports authentication: ## Tool list -## `phantombuster_agent_delete` - -Permanently delete a PhantomBuster agent and all its associated data. This action is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentId` | string | Yes | The unique identifier of the agent to permanently delete. | - -## `phantombuster_agent_fetch` - -Retrieve details of a specific PhantomBuster agent by its ID. Returns agent name, script, schedule, launch type, argument configuration, and current status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentId` | string | Yes | The unique identifier of the agent to retrieve. | - -## `phantombuster_agent_fetch_output` - -Get the output of the most recent container of an agent. Designed for incremental data retrieval — use fromOutputPos to fetch only new output since the last call. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fromOutputPos` | number | No | Start output from this byte position (for incremental fetching). | -| `id` | string | Yes | ID of the agent to fetch output from. | -| `prevContainerId` | string | No | Retrieve output from the container after this previous container ID. | -| `prevRuntimeEventIndex` | number | No | Return runtime events starting from this index. | -| `prevStatus` | string | No | Previously retrieved status from user-side (for delta detection). | - -## `phantombuster_agent_launch` - -Launch a PhantomBuster automation agent asynchronously. Starts the agent execution immediately and returns a container ID to track progress. Use the Get Container Output or Get Container Result tools to retrieve results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentId` | string | Yes | The unique identifier of the agent to launch. | -| `arguments` | `object` | No | JSON object of input arguments to pass to the agent for this execution. | -| `output` | string | No | Output mode for the launch response. | -| `saveArguments` | boolean | No | Whether to persist the provided arguments as the agent's default arguments for future launches. | - -## `phantombuster_agent_launch_soon` - -Schedule a PhantomBuster agent to launch within a specified number of minutes. Useful for delayed execution without setting up a full recurring schedule. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `argument` | `object` | No | Input arguments to pass to the agent for this execution (object or JSON string). | -| `id` | string | Yes | ID of the agent to schedule. | -| `minutes` | integer | Yes | Number of minutes from now after which the agent will launch. | -| `saveArgument` | boolean | No | If true, saves the provided argument as the agent's default for future launches. | - -## `phantombuster_agent_save` - -Create a new PhantomBuster agent or update an existing one. Supports configuring the script, schedule, proxy, notifications, execution limits, and launch arguments. Pass an ID to update; omit to create. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `argument` | `object` | No | Default launch argument for the agent (object or JSON string). | -| `branch` | string | No | Script branch to use (e.g., main, staging). | -| `executionTimeLimit` | number | No | Maximum execution time in seconds before the agent is killed. | -| `id` | string | No | ID of the agent to update. Omit to create a new agent. | -| `launchType` | string | No | How the agent is launched. | -| `maxParallelism` | number | No | Maximum number of concurrent executions allowed for this agent. | -| `maxRetryNumber` | number | No | Maximum number of retries before aborting on failure. | -| `name` | string | No | Display name for the agent. | -| `proxyAddress` | string | No | HTTP proxy address or proxy pool name. | -| `proxyPassword` | string | No | Proxy authentication password. | -| `proxyType` | string | No | Proxy configuration type. | -| `proxyUsername` | string | No | Proxy authentication username. | -| `script` | string | No | Script slug or name to assign to this agent. | - -## `phantombuster_agent_stop` - -Stop a currently running PhantomBuster agent execution. Gracefully halts the agent and saves any partial results collected up to that point. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentId` | string | Yes | The unique identifier of the agent to stop. | - -## `phantombuster_agents_fetch_all` - -Retrieve all automation agents in the PhantomBuster organization. Returns agent IDs, names, associated scripts, schedules, and current status. - -## `phantombuster_agents_fetch_deleted` - -Retrieve all deleted agents in the PhantomBuster organization. Returns agent IDs, names, creation timestamps, deletion timestamps, and who deleted each agent. - -## `phantombuster_agents_unschedule_all` - -Disable automatic launch for ALL agents in the current PhantomBuster organization. Agents will remain but will only run when launched manually. - -## `phantombuster_ai_completions` - -Get an AI text completion from PhantomBuster's AI service. Supports multiple models including GPT-4o and GPT-4.1-mini. Optionally request structured JSON output via a response schema. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `messages` | `array` | Yes | Array of conversation messages. Each must have a role (system, assistant, or user) and content string. | -| `model` | string | No | AI model to use for the completion. | -| `temperature` | number | No | Sampling temperature (0–2). Lower = more deterministic, higher = more creative. | - -## `phantombuster_branch_create` - -Create a new script branch in the current PhantomBuster organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | Yes | Name for the new branch. Only letters, numbers, underscores, and hyphens allowed. Max 50 characters. | - -## `phantombuster_branch_delete` - -Permanently delete a branch by ID from the current PhantomBuster organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the branch to delete. | - -## `phantombuster_branch_release` - -Release (promote to production) specified scripts on a branch in the current PhantomBuster organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | Yes | Name of the branch to release. | -| `scriptIds` | `array` | Yes | Array of script IDs to release on this branch. | - -## `phantombuster_branches_fetch_all` - -Retrieve all branches associated with the current PhantomBuster organization. - -## `phantombuster_container_attach` - -Attach to a running PhantomBuster container and stream its console output in real-time. Returns a live stream of log lines as the agent executes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the running container to attach to. | - -## `phantombuster_container_fetch` - -Retrieve a single PhantomBuster container by its ID. Returns status, timestamps, launch type, exit code, and optionally the full output, result object, and runtime events. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the container to fetch. | -| `withNewerAndOlderContainerId` | boolean | No | Set to true to include the IDs of the next and previous containers for this agent. | -| `withOutput` | boolean | No | Set to true to include the container's console output. | -| `withResultObject` | boolean | No | Set to true to include the container's result object. | -| `withRuntimeEvents` | boolean | No | Set to true to include runtime events (progress, notifications, etc.). | - -## `phantombuster_container_fetch_output` - -Retrieve the console output and execution logs of a specific PhantomBuster container (agent run). Useful for monitoring execution progress, debugging errors, and viewing step-by-step agent activity. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `containerId` | string | Yes | The unique identifier of the container whose output to retrieve. | - -## `phantombuster_container_fetch_result` - -Retrieve the final result object of a completed PhantomBuster container (agent run). Returns the structured data extracted or produced by the agent, such as scraped profiles, leads, or exported records. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `containerId` | string | Yes | The unique identifier of the container whose result to retrieve. | - -## `phantombuster_containers_fetch_all` - -Retrieve all execution containers (past runs) for a specific PhantomBuster agent. Returns container IDs, status, launch type, exit codes, timestamps, and runtime events for each execution. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentId` | string | Yes | The unique identifier of the agent whose containers to retrieve. | - -## `phantombuster_leads_delete_many` - -Permanently delete multiple leads from PhantomBuster organization storage by their IDs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ids` | `array` | Yes | Array of lead IDs to delete. | - -## `phantombuster_leads_fetch_by_list` - -Fetch paginated leads belonging to a specific lead list in PhantomBuster organization storage. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `includeTotalCount` | boolean | No | Include the total count of leads in the response. | -| `listId` | string | Yes | ID of the lead list to fetch leads from. | -| `paginationOffset` | integer | No | Offset for pagination. | -| `paginationOrder` | string | No | Sort order for pagination. | -| `paginationSize` | integer | No | Number of leads per page. | - -## `phantombuster_leads_save` - -Save a single lead to PhantomBuster organization storage. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `lead` | `object` | Yes | Lead data object to save. | - -## `phantombuster_leads_save_many` - -Save multiple leads at once to PhantomBuster organization storage. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `leads` | `array` | Yes | Array of lead objects to save. | - -## `phantombuster_list_delete` - -Permanently delete a lead list from PhantomBuster organization storage by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the lead list to delete. | - -## `phantombuster_list_fetch` - -Retrieve a specific lead list from PhantomBuster organization storage by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the lead list to fetch. | - -## `phantombuster_lists_fetch_all` - -Retrieve all lead lists in the PhantomBuster organization's storage. - -## `phantombuster_location_ip` - -Retrieve the country associated with an IPv4 or IPv6 address using PhantomBuster's geolocation service. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ip` | string | Yes | IPv4 or IPv6 address to look up. | - -## `phantombuster_org_export_agent_usage` - -Export a CSV file containing agent usage metrics for the current PhantomBuster organization over a specified number of days (max 6 months). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `days` | string | Yes | Number of days of usage data to export. Maximum is ~180 days (6 months). | - -## `phantombuster_org_export_container_usage` - -Export a CSV file containing container usage metrics for the current PhantomBuster organization. Optionally filter to a specific agent. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentId` | string | No | Filter the export to a specific agent ID. | -| `days` | string | Yes | Number of days of usage data to export. Maximum is ~180 days (6 months). | - -## `phantombuster_org_fetch` - -Retrieve details of the current PhantomBuster organization including plan, billing, timezone, proxy config, and CRM integrations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `withCrmIntegrations` | boolean | No | Include the organization's CRM integrations. | -| `withCustomPrompts` | boolean | No | Include the organization's custom prompts. | -| `withGlobalObject` | boolean | No | Include the organization's global object in the response. | -| `withProxies` | boolean | No | Include the organization's proxy pool configuration. | - -## `phantombuster_org_fetch_agent_groups` - -Retrieve the agent groups and their ordering for the current PhantomBuster organization. - -## `phantombuster_org_fetch_resources` - -Retrieve the current PhantomBuster organization's resource usage and limits. Returns daily and monthly usage for execution time, mail, captcha, AI credits, SERP credits, storage, and agent count. - -## `phantombuster_org_fetch_running_containers` - -List all currently executing containers across the PhantomBuster organization. Returns container IDs, associated agent IDs/names, creation timestamps, launch types, and script slugs. - -## `phantombuster_org_save_agent_groups` - -Update the agent groups and their ordering for the current PhantomBuster organization. The order of groups and agents within groups is preserved as provided. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `agentGroups` | `array` | Yes | Array of agent groups. Each item is either an agent ID string or an object with id, name, and agents array. | - -## `phantombuster_org_save_crm_contact` - -Save a new contact to the organization's connected CRM (HubSpot). Requires a CRM integration to be configured in the PhantomBuster organization settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `company` | string | No | Company the contact works at. | -| `crmName` | string | Yes | The CRM to save the contact to. | -| `email` | string | No | Contact's email address. | -| `firstname` | string | Yes | Contact's first name. | -| `jobtitle` | string | No | Contact's job title. | -| `lastname` | string | Yes | Contact's last name. | -| `pb_linkedin_profile_url` | string | Yes | LinkedIn profile URL of the contact. | -| `phone` | string | No | Contact's phone number. | - -## `phantombuster_script_fetch` - -Retrieve a specific PhantomBuster script by ID including its manifest, argument schema, output types, and optionally the full source code. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | No | Branch of the script to fetch. | -| `id` | string | Yes | ID of the script to fetch. | -| `withCode` | boolean | No | Set to true to include the script's source code in the response. | - -## `phantombuster_scripts_fetch_all` - -Retrieve all scripts associated with the current PhantomBuster user. Returns script IDs, names, slugs, descriptions, branches, and manifest details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `branch` | string | No | Filter scripts by branch name. | -| `exclude` | string | No | Exclude modules or non-modules from results. | -| `org` | string | No | Filter scripts by organization. | + diff --git a/src/content/docs/reference/agent-connectors/pipedrive.mdx b/src/content/docs/reference/agent-connectors/pipedrive.mdx index 0cbf53fc8..765bb232f 100644 --- a/src/content/docs/reference/agent-connectors/pipedrive.mdx +++ b/src/content/docs/reference/agent-connectors/pipedrive.mdx @@ -2,19 +2,19 @@ title: Pipedrive description: Connect to Pipedrive CRM. Manage deals, contacts, organizations, activities, leads, and notes to streamline your sales pipeline. tableOfContents: true +sidebar: + label: Pipedrive head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/pipedrive' import { SetupPipedriveSection } from '@components/templates' Connect to Pipedrive CRM. Manage deals, contacts, organizations, activities, leads, and notes to streamline your sales pipeline. @@ -28,670 +28,4 @@ Supports authentication: ## Tool list -## `pipedrive_activities_list` - -Retrieve a list of activities from Pipedrive. Filter by owner, deal, person, organization, completion status, and date range. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `deal_id` | integer | No | Filter activities by deal ID. | -| `done` | boolean | No | Filter by completion status: true for done, false for undone. | -| `limit` | integer | No | Number of activities to return per page (max 500). | -| `org_id` | integer | No | Filter activities by organization ID. | -| `owner_id` | integer | No | Filter activities by owner user ID. | -| `person_id` | integer | No | Filter activities by person ID. | -| `updated_since` | string | No | Filter activities updated after this RFC3339 datetime. | - -## `pipedrive_activity_create` - -Create a new activity in Pipedrive such as a call, meeting, email, or task. Associate it with a deal, person, or organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deal_id` | integer | No | ID of the deal to associate this activity with. | -| `due_date` | string | No | Due date of the activity in YYYY-MM-DD format. | -| `due_time` | string | No | Due time of the activity in HH:MM format. | -| `note` | string | No | Note or description for the activity. | -| `org_id` | integer | No | ID of the organization to associate this activity with. | -| `owner_id` | integer | No | ID of the user responsible for this activity. | -| `person_id` | integer | No | ID of the person to associate this activity with. | -| `subject` | string | Yes | Subject/title of the activity. | -| `type` | string | No | Type of activity (e.g., call, meeting, email, task, deadline, lunch). | - -## `pipedrive_activity_delete` - -Delete an activity from Pipedrive by its ID. After 30 days it will be permanently removed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the activity to delete. | - -## `pipedrive_activity_update` - -Update an existing activity in Pipedrive. Modify subject, type, due date/time, note, completion status, or associations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deal_id` | integer | No | ID of the deal to associate this activity with. | -| `done` | boolean | No | Mark the activity as done (true) or undone (false). | -| `due_date` | string | No | Updated due date in YYYY-MM-DD format. | -| `due_time` | string | No | Updated due time in HH:MM format. | -| `id` | integer | Yes | The ID of the activity to update. | -| `note` | string | No | Updated note or description for the activity. | -| `subject` | string | No | Updated subject/title of the activity. | -| `type` | string | No | Updated type of activity (e.g., call, meeting, email, task). | - -## `pipedrive_deal_create` - -Create a new deal in Pipedrive with a title, value, currency, pipeline, stage, associated person and organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `currency` | string | No | Currency code for the deal value (e.g., USD, EUR). | -| `expected_close_date` | string | No | Expected close date in YYYY-MM-DD format. | -| `org_id` | integer | No | ID of the organization to associate with this deal. | -| `owner_id` | integer | No | ID of the user who owns this deal. | -| `person_id` | integer | No | ID of the person to associate with this deal. | -| `pipeline_id` | integer | No | ID of the pipeline to place this deal in. | -| `stage_id` | integer | No | ID of the pipeline stage for this deal. | -| `title` | string | Yes | Title of the deal. | -| `value` | number | No | Monetary value of the deal. | - -## `pipedrive_deal_delete` - -Delete a deal from Pipedrive by its ID. This action marks the deal as deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the deal to delete. | - -## `pipedrive_deal_get` - -Retrieve details of a specific deal in Pipedrive by its ID, including title, value, status, pipeline stage, associated person and organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the deal to retrieve. | - -## `pipedrive_deal_update` - -Update an existing deal in Pipedrive. Modify title, value, status, pipeline stage, associated person, organization, or close date. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `currency` | string | No | Currency code for the deal value (e.g., USD, EUR). | -| `expected_close_date` | string | No | Expected close date in YYYY-MM-DD format. | -| `id` | integer | Yes | The ID of the deal to update. | -| `org_id` | integer | No | ID of the organization to associate with this deal. | -| `owner_id` | integer | No | ID of the user who owns this deal. | -| `person_id` | integer | No | ID of the person to associate with this deal. | -| `pipeline_id` | integer | No | ID of the pipeline for this deal. | -| `stage_id` | integer | No | ID of the pipeline stage for this deal. | -| `status` | string | No | Status of the deal: open, won, or lost. | -| `title` | string | No | New title for the deal. | -| `value` | number | No | Monetary value of the deal. | - -## `pipedrive_deals_list` - -Retrieve a list of deals from Pipedrive. Filter by owner, person, organization, pipeline, stage, and status with cursor-based pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `filter_id` | integer | No | ID of a saved filter to apply. | -| `limit` | integer | No | Number of deals to return per page (max 500). | -| `org_id` | integer | No | Filter deals by organization ID. | -| `owner_id` | integer | No | Filter deals by owner user ID. | -| `person_id` | integer | No | Filter deals by person ID. | -| `pipeline_id` | integer | No | Filter deals by pipeline ID. | -| `stage_id` | integer | No | Filter deals by stage ID. | -| `status` | string | No | Filter deals by status: open, won, lost, or all_not_deleted. | - -## `pipedrive_deals_search` - -Search for deals in Pipedrive by a search term across title and other fields. Supports filtering by person, organization, and status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `exact_match` | boolean | No | When true, only results with exact case-insensitive match are returned. | -| `fields` | string | No | Comma-separated list of fields to search in (e.g., title,notes,custom_fields). | -| `limit` | integer | No | Number of results per page (max 500). | -| `organization_id` | integer | No | Filter results by organization ID. | -| `person_id` | integer | No | Filter results by person ID. | -| `status` | string | No | Filter by deal status: open, won, or lost. | -| `term` | string | Yes | Search term to find matching deals. Minimum 2 characters. | - -## `pipedrive_file_delete` - -Delete a file from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the file to delete. | - -## `pipedrive_file_get` - -Retrieve metadata of a specific file in Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the file to retrieve. | - -## `pipedrive_files_list` - -Retrieve a list of files attached to Pipedrive records with pagination and sorting. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | Number of files per page. | -| `sort` | string | No | Field and direction to sort by (e.g., id DESC, add_time ASC). | -| `start` | integer | No | Pagination start offset. | - -## `pipedrive_goal_create` - -Create a new goal in Pipedrive to track team or individual performance metrics. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | integer | Yes | ID of the user or team assigned to this goal. | -| `assignee_type` | string | Yes | Type of assignee: person or team. | -| `duration_end` | string | Yes | Goal end date in YYYY-MM-DD format. | -| `duration_start` | string | Yes | Goal start date in YYYY-MM-DD format. | -| `interval` | string | Yes | Goal tracking interval: weekly, monthly, quarterly, or yearly. | -| `target` | number | Yes | Target value for the goal. | -| `title` | string | Yes | Title of the goal. | -| `tracking_metric` | string | Yes | What to track: count or sum. | -| `type_name` | string | Yes | Goal type: deals_won, deals_progressed, activities_completed, activities_added, or revenue_forecast. | - -## `pipedrive_goal_delete` - -Delete a goal from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the goal to delete. | - -## `pipedrive_goal_update` - -Update an existing goal in Pipedrive. Modify title, assignee, target, interval, or duration. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | integer | No | Updated assignee user or team ID. | -| `assignee_type` | string | No | Updated assignee type: person or team. | -| `duration_end` | string | No | Updated goal end date in YYYY-MM-DD format. | -| `duration_start` | string | No | Updated goal start date in YYYY-MM-DD format. | -| `id` | string | Yes | The ID of the goal to update. | -| `interval` | string | No | Updated tracking interval: weekly, monthly, quarterly, or yearly. | -| `target` | number | No | Updated target value. | -| `title` | string | No | Updated title of the goal. | - -## `pipedrive_goals_find` - -Search and filter goals in Pipedrive by type, title, assignee, and time period. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | integer | No | Filter goals by assignee user or team ID. | -| `assignee_type` | string | No | Type of assignee: person or team. | -| `is_active` | boolean | No | Filter by active status: true for active, false for inactive. | -| `period_end` | string | No | Goal period end date in YYYY-MM-DD format. | -| `period_start` | string | No | Goal period start date in YYYY-MM-DD format. | -| `title` | string | No | Filter goals by title. | -| `type_name` | string | No | Filter by goal type: deals_won, deals_progressed, activities_completed, activities_added, revenue_forecast. | - -## `pipedrive_lead_create` - -Create a new lead in Pipedrive with a title and optional associations to a person or organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `organization_id` | integer | No | ID of the organization to associate this lead with. | -| `owner_id` | integer | No | ID of the user who owns this lead. | -| `person_id` | integer | No | ID of the person to associate this lead with. | -| `title` | string | Yes | Title of the lead. | - -## `pipedrive_lead_delete` - -Delete a lead from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The UUID of the lead to delete. | - -## `pipedrive_lead_get` - -Retrieve details of a specific lead in Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The UUID of the lead to retrieve. | - -## `pipedrive_lead_update` - -Update an existing lead in Pipedrive. Modify title, owner, person, organization, or status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The UUID of the lead to update. | -| `is_archived` | boolean | No | Whether to archive this lead. | -| `organization_id` | integer | No | ID of the organization to associate this lead with. | -| `owner_id` | integer | No | ID of the user who owns this lead. | -| `person_id` | integer | No | ID of the person to associate this lead with. | -| `title` | string | No | Updated title of the lead. | - -## `pipedrive_leads_list` - -Retrieve a list of leads from Pipedrive with pagination. Filter by owner, person, or organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_id` | integer | No | ID of a saved filter to apply. | -| `limit` | integer | No | Number of leads per page. | -| `organization_id` | integer | No | Filter leads by organization ID. | -| `owner_id` | integer | No | Filter leads by owner user ID. | -| `person_id` | integer | No | Filter leads by person ID. | -| `start` | integer | No | Pagination start offset. | - -## `pipedrive_leads_search` - -Search for leads in Pipedrive by title, notes, or custom fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `exact_match` | boolean | No | When true, only exact case-insensitive matches are returned. | -| `fields` | string | No | Comma-separated fields to search in (e.g., title,notes,custom_fields). | -| `limit` | integer | No | Number of results per page (max 500). | -| `organization_id` | integer | No | Filter results by organization ID. | -| `person_id` | integer | No | Filter results by person ID. | -| `term` | string | Yes | Search term. Minimum 2 characters. | - -## `pipedrive_note_create` - -Create a new note in Pipedrive and associate it with a deal, person, organization, or lead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content` | string | Yes | HTML content of the note. | -| `deal_id` | integer | No | ID of the deal to attach this note to. | -| `lead_id` | string | No | UUID of the lead to attach this note to. | -| `org_id` | integer | No | ID of the organization to attach this note to. | -| `person_id` | integer | No | ID of the person to attach this note to. | - -## `pipedrive_note_delete` - -Delete a note from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the note to delete. | - -## `pipedrive_note_update` - -Update the content of an existing note in Pipedrive. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content` | string | Yes | Updated HTML content of the note. | -| `id` | integer | Yes | The ID of the note to update. | - -## `pipedrive_notes_list` - -Retrieve a list of notes from Pipedrive. Filter by deal, person, organization, lead, or date range. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deal_id` | integer | No | Filter notes by deal ID. | -| `lead_id` | string | No | Filter notes by lead UUID. | -| `limit` | integer | No | Number of notes per page. | -| `org_id` | integer | No | Filter notes by organization ID. | -| `person_id` | integer | No | Filter notes by person ID. | -| `start` | integer | No | Pagination start offset. | -| `user_id` | integer | No | Filter notes by the user who created them. | - -## `pipedrive_organization_create` - -Create a new organization (company) in Pipedrive with a name, address, and optional owner. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `address` | string | No | Physical address of the organization. | -| `name` | string | Yes | Name of the organization. | -| `owner_id` | integer | No | ID of the user who owns this organization. | - -## `pipedrive_organization_delete` - -Delete an organization from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the organization to delete. | - -## `pipedrive_organization_get` - -Retrieve details of a specific organization in Pipedrive by its ID, including name, address, and associated deals and contacts. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the organization to retrieve. | - -## `pipedrive_organization_update` - -Update an existing organization in Pipedrive. Modify name, address, or owner. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `address` | string | No | Updated physical address of the organization. | -| `id` | integer | Yes | The ID of the organization to update. | -| `name` | string | No | Updated name of the organization. | -| `owner_id` | integer | No | ID of the user who owns this organization. | - -## `pipedrive_organizations_list` - -Retrieve a list of organizations (companies) from Pipedrive with cursor-based pagination and optional filtering. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `filter_id` | integer | No | ID of a saved filter to apply. | -| `limit` | integer | No | Number of organizations to return per page (max 500). | -| `owner_id` | integer | No | Filter organizations by owner user ID. | - -## `pipedrive_organizations_search` - -Search for organizations in Pipedrive by a search term across name, address, and custom fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `exact_match` | boolean | No | When true, only exact case-insensitive matches are returned. | -| `fields` | string | No | Comma-separated fields to search in (e.g., name,address,custom_fields). | -| `limit` | integer | No | Number of results per page (max 500). | -| `term` | string | Yes | Search term. Minimum 2 characters. | - -## `pipedrive_person_create` - -Create a new person (contact) in Pipedrive with name, email, phone, and optional organization association. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | No | Email address of the person. | -| `name` | string | Yes | Full name of the person. | -| `org_id` | integer | No | ID of the organization to associate this person with. | -| `owner_id` | integer | No | ID of the user who owns this person record. | -| `phone` | string | No | Phone number of the person. | - -## `pipedrive_person_delete` - -Delete a person (contact) from Pipedrive by their ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the person to delete. | - -## `pipedrive_person_get` - -Retrieve details of a specific person (contact) in Pipedrive by their ID, including name, emails, phones, and associated organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the person to retrieve. | - -## `pipedrive_person_update` - -Update an existing person (contact) in Pipedrive. Modify name, email, phone, organization, or owner. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | No | Updated email address of the person. | -| `id` | integer | Yes | The ID of the person to update. | -| `name` | string | No | Updated full name of the person. | -| `org_id` | integer | No | ID of the organization to associate this person with. | -| `owner_id` | integer | No | ID of the user who owns this person record. | -| `phone` | string | No | Updated phone number of the person. | - -## `pipedrive_persons_list` - -Retrieve a list of persons (contacts) from Pipedrive. Filter by owner, organization, or deal with cursor-based pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `deal_id` | integer | No | Filter persons by associated deal ID. | -| `filter_id` | integer | No | ID of a saved filter to apply. | -| `limit` | integer | No | Number of persons to return per page (max 500). | -| `org_id` | integer | No | Filter persons by organization ID. | -| `owner_id` | integer | No | Filter persons by owner user ID. | - -## `pipedrive_persons_search` - -Search for persons (contacts) in Pipedrive by name, email, phone, or custom fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `exact_match` | boolean | No | When true, only results with exact case-insensitive match are returned. | -| `fields` | string | No | Comma-separated list of fields to search in (e.g., name,email,phone,custom_fields). | -| `limit` | integer | No | Number of results per page (max 500). | -| `organization_id` | integer | No | Filter results by organization ID. | -| `term` | string | Yes | Search term to find matching persons. Minimum 2 characters. | - -## `pipedrive_pipeline_create` - -Create a new sales pipeline in Pipedrive with a name and optional deal probability setting. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `is_deal_probability_enabled` | boolean | No | Whether deal probability is enabled for this pipeline. | -| `name` | string | Yes | Name of the pipeline. | - -## `pipedrive_pipeline_delete` - -Delete a sales pipeline from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the pipeline to delete. | - -## `pipedrive_pipeline_get` - -Retrieve details of a specific sales pipeline in Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the pipeline to retrieve. | - -## `pipedrive_pipeline_update` - -Update an existing sales pipeline in Pipedrive. Modify name or deal probability settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the pipeline to update. | -| `is_deal_probability_enabled` | boolean | No | Whether deal probability is enabled for this pipeline. | -| `name` | string | No | Updated name of the pipeline. | - -## `pipedrive_pipelines_list` - -Retrieve all sales pipelines from Pipedrive with their stages and configuration. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `limit` | integer | No | Number of pipelines per page (max 500). | -| `sort_by` | string | No | Field to sort results by: id, update_time, or add_time. | -| `sort_direction` | string | No | Sort direction: asc or desc. | - -## `pipedrive_product_create` - -Create a new product in Pipedrive with name, price, description, and other attributes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `code` | string | No | Product code or SKU. | -| `description` | string | No | Description of the product. | -| `name` | string | Yes | Name of the product. | -| `owner_id` | integer | No | ID of the user who owns this product. | -| `tax` | number | No | Tax rate for this product (percentage). | -| `unit` | string | No | Unit of measurement for this product. | - -## `pipedrive_product_delete` - -Delete a product from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the product to delete. | - -## `pipedrive_product_get` - -Retrieve details of a specific product in Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the product to retrieve. | - -## `pipedrive_product_update` - -Update an existing product in Pipedrive. Modify name, code, description, unit, tax, or owner. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `code` | string | No | Updated product code or SKU. | -| `description` | string | No | Updated description of the product. | -| `id` | integer | Yes | The ID of the product to update. | -| `name` | string | No | Updated name of the product. | -| `owner_id` | integer | No | Updated owner user ID. | -| `tax` | number | No | Updated tax rate (percentage). | -| `unit` | string | No | Updated unit of measurement. | - -## `pipedrive_products_list` - -Retrieve a list of products from Pipedrive with cursor-based pagination and optional filtering. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `filter_id` | integer | No | ID of a saved filter to apply. | -| `limit` | integer | No | Number of products per page (max 500). | -| `owner_id` | integer | No | Filter products by owner user ID. | -| `sort_by` | string | No | Field to sort by (e.g., id, update_time, add_time, name). | -| `sort_direction` | string | No | Sort direction: asc or desc. | - -## `pipedrive_products_search` - -Search for products in Pipedrive by name, code, or custom fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `exact_match` | boolean | No | When true, only exact case-insensitive matches are returned. | -| `fields` | string | No | Comma-separated fields to search in (e.g., name,code,description). | -| `limit` | integer | No | Number of results per page (max 500). | -| `term` | string | Yes | Search term. Minimum 2 characters. | - -## `pipedrive_stage_create` - -Create a new stage in a Pipedrive pipeline with a name and optional deal probability settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `days_to_rotten` | integer | No | Number of days a deal stays in this stage before it's marked as rotten. | -| `deal_probability` | integer | No | Deal success probability for this stage (0-100). | -| `is_deal_rot_enabled` | boolean | No | Whether rotten flag is enabled for deals in this stage. | -| `name` | string | Yes | Name of the stage. | -| `pipeline_id` | integer | Yes | ID of the pipeline this stage belongs to. | - -## `pipedrive_stage_delete` - -Delete a pipeline stage from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the stage to delete. | - -## `pipedrive_stage_get` - -Retrieve details of a specific pipeline stage in Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the stage to retrieve. | - -## `pipedrive_stage_update` - -Update an existing pipeline stage in Pipedrive. Modify name, pipeline, deal probability, or rotten settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `days_to_rotten` | integer | No | Number of days before a deal is marked as rotten. | -| `deal_probability` | integer | No | Deal success probability for this stage (0-100). | -| `id` | integer | Yes | The ID of the stage to update. | -| `is_deal_rot_enabled` | boolean | No | Whether rotten flag is enabled for deals in this stage. | -| `name` | string | No | Updated name of the stage. | -| `pipeline_id` | integer | No | ID of the pipeline this stage belongs to. | - -## `pipedrive_stages_list` - -Retrieve all stages in Pipedrive. Filter by pipeline ID with cursor-based pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Cursor for pagination from a previous response. | -| `limit` | integer | No | Number of stages per page (max 500). | -| `pipeline_id` | integer | No | Filter stages by pipeline ID. | -| `sort_by` | string | No | Field to sort by (e.g., id, update_time, add_time). | -| `sort_direction` | string | No | Sort direction: asc or desc. | - -## `pipedrive_user_get` - -Retrieve details of a specific user in Pipedrive by their ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the user to retrieve. | - -## `pipedrive_user_me` - -Retrieve the profile of the currently authenticated user in Pipedrive. - -## `pipedrive_users_find` - -Search for Pipedrive users by name or email address. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `search_by_email` | boolean | No | When true, the search term is matched against email addresses instead of names. | -| `term` | string | Yes | Search term to match against user name or email. | - -## `pipedrive_users_list` - -Retrieve all users in the Pipedrive company account. - -## `pipedrive_webhook_create` - -Create a new webhook in Pipedrive to receive real-time notifications when objects are created, updated, or deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `event_action` | string | Yes | Action to trigger the webhook: added, updated, deleted, or * for all. | -| `event_object` | string | Yes | Object type to watch: deal, person, organization, activity, lead, note, pipeline, product, stage, user, or * for all. | -| `http_auth_password` | string | No | Password for HTTP Basic Auth on the subscription URL. | -| `http_auth_user` | string | No | Username for HTTP Basic Auth on the subscription URL. | -| `name` | string | No | Display name for this webhook. | -| `subscription_url` | string | Yes | The URL to send webhook notifications to. | -| `version` | string | No | Webhook payload version: 1 or 2. | - -## `pipedrive_webhook_delete` - -Delete a webhook from Pipedrive by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | integer | Yes | The ID of the webhook to delete. | - -## `pipedrive_webhooks_list` - -Retrieve all webhooks configured in the Pipedrive account. + diff --git a/src/content/docs/reference/agent-connectors/salesforce.mdx b/src/content/docs/reference/agent-connectors/salesforce.mdx index 7b2438bf4..442e786c5 100644 --- a/src/content/docs/reference/agent-connectors/salesforce.mdx +++ b/src/content/docs/reference/agent-connectors/salesforce.mdx @@ -2,19 +2,19 @@ title: Salesforce description: Connect to Salesforce CRM. Manage leads, opportunities, accounts, and customer relationships tableOfContents: true +sidebar: + label: Salesforce head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/salesforce' import { SetupSalesforceSection } from '@components/templates' import { UsageSalesforceSection } from '@components/templates' @@ -40,524 +40,4 @@ Supports authentication: ## Tool list -## `salesforce_account_create` - -Create a new Account in Salesforce. Supports standard fields - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `AccountNumber` | string | No | Account number for the organization | -| `AnnualRevenue` | number | No | Annual revenue | -| `BillingCity` | string | No | Billing city | -| `BillingCountry` | string | No | Billing country | -| `BillingPostalCode` | string | No | Billing postal code | -| `BillingState` | string | No | Billing state/province | -| `BillingStreet` | string | No | Billing street | -| `Description` | string | No | Description | -| `Industry` | string | No | Industry | -| `Name` | string | Yes | Account Name | -| `NumberOfEmployees` | integer | No | Number of employees | -| `OwnerId` | string | No | Record owner (User/Queue Id) | -| `Phone` | string | No | Main phone number | -| `RecordTypeId` | string | No | Record Type Id | -| `Website` | string | No | Website URL | - -## `salesforce_account_delete` - -Delete an existing Account from Salesforce by account ID. This is a destructive operation that permanently removes the account record. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | ID of the account to delete | - -## `salesforce_account_get` - -Retrieve details of a specific account from Salesforce by account ID. Returns account properties and associated data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | ID of the account to retrieve | -| `fields` | string | No | Comma-separated list of fields to include in the response | - -## `salesforce_account_update` - -Update an existing Account in Salesforce by account ID. Allows updating account properties like name, phone, website, industry, billing information, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `AccountNumber` | string | No | Account number for the organization | -| `AccountSource` | string | No | Lead source for this account | -| `AnnualRevenue` | number | No | Annual revenue | -| `BillingCity` | string | No | Billing city | -| `BillingCountry` | string | No | Billing country | -| `BillingGeocodeAccuracy` | string | No | Billing geocode accuracy | -| `BillingLatitude` | number | No | Billing address latitude | -| `BillingLongitude` | number | No | Billing address longitude | -| `BillingPostalCode` | string | No | Billing postal code | -| `BillingState` | string | No | Billing state/province | -| `BillingStreet` | string | No | Billing street | -| `CleanStatus` | string | No | Data.com clean status | -| `Description` | string | No | Description | -| `DunsNumber` | string | No | D-U-N-S Number | -| `Fax` | string | No | Fax number | -| `Industry` | string | No | Industry | -| `Jigsaw` | string | No | Data.com key | -| `JigsawCompanyId` | string | No | Jigsaw company ID | -| `NaicsCode` | string | No | NAICS code | -| `NaicsDesc` | string | No | NAICS description | -| `Name` | string | No | Account Name | -| `NumberOfEmployees` | integer | No | Number of employees | -| `OwnerId` | string | No | Record owner (User/Queue Id) | -| `Ownership` | string | No | Ownership type | -| `ParentId` | string | No | Parent Account Id | -| `Phone` | string | No | Main phone number | -| `Rating` | string | No | Account rating | -| `RecordTypeId` | string | No | Record Type Id | -| `ShippingCity` | string | No | Shipping city | -| `ShippingCountry` | string | No | Shipping country | -| `ShippingGeocodeAccuracy` | string | No | Shipping geocode accuracy | -| `ShippingLatitude` | number | No | Shipping address latitude | -| `ShippingLongitude` | number | No | Shipping address longitude | -| `ShippingPostalCode` | string | No | Shipping postal code | -| `ShippingState` | string | No | Shipping state/province | -| `ShippingStreet` | string | No | Shipping street | -| `Sic` | string | No | SIC code | -| `SicDesc` | string | No | SIC description | -| `Site` | string | No | Account site or location | -| `TickerSymbol` | string | No | Stock ticker symbol | -| `Tradestyle` | string | No | Trade style name | -| `Type` | string | No | Account type | -| `Website` | string | No | Website URL | -| `YearStarted` | string | No | Year the company started | -| `account_id` | string | Yes | ID of the account to update | - -## `salesforce_accounts_list` - -Retrieve a list of accounts from Salesforce using a pre-built SOQL query. Returns basic account information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | number | Yes | Number of results to return per page | - -## `salesforce_chatter_comment_create` - -Add a comment to a Salesforce Chatter post (feed element). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `feed_element_id` | string | Yes | The ID of the Chatter post to comment on | -| `text` | string | Yes | The text body of the comment | - -## `salesforce_chatter_comment_delete` - -Delete a comment from a Salesforce Chatter post. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The ID of the Chatter comment to delete | - -## `salesforce_chatter_comments_list` - -List all comments on a Salesforce Chatter post (feed element). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `feed_element_id` | string | Yes | The ID of the Chatter post to list comments for | -| `page` | string | No | Page token for retrieving the next page of results | -| `page_size` | number | No | Number of comments to return per page (default: 25, max: 100) | - -## `salesforce_chatter_post_create` - -Create a new post (feed element) on a Salesforce Chatter feed. Use 'me' as subject_id to post to the current user's feed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `is_rich_text` | boolean | No | If true, the text body will be treated as HTML rich text. Default is false (plain text). | -| `message_segments` | `array` | No | Advanced: provide raw Salesforce message segments array for full rich text control (bold, italic, links, mentions, etc.). When provided, overrides 'text' and 'is_rich_text'. Each segment must have a 'type' field (Text, MarkupBegin, MarkupEnd, Mention, Link). MarkupBegin/End use markupType: Bold, Italic, Underline, Paragraph, etc. | -| `subject_id` | string | No | The ID of the subject (user, record, or group) to post to. Use 'me' for the current user's feed. | -| `text` | string | Yes | The text body of the Chatter post | - -## `salesforce_chatter_post_delete` - -Delete a Salesforce Chatter post (feed element) by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `feed_element_id` | string | Yes | The ID of the Chatter post to delete | - -## `salesforce_chatter_post_get` - -Retrieve a specific Salesforce Chatter post (feed element) by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `feed_element_id` | string | Yes | The ID of the Chatter feed element (post) to retrieve. | - -## `salesforce_chatter_posts_search` - -Search Salesforce Chatter posts (feed elements) by keyword across all feeds. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | string | No | Page token for retrieving the next page of results | -| `page_size` | number | No | Number of results to return per page (default: 25, max: 100) | -| `q` | string | Yes | Search query string to find matching Chatter posts | - -## `salesforce_chatter_user_feed_list` - -Retrieve feed elements (posts) from a Salesforce user's Chatter news feed. Use 'me' as the user ID to get the current user's feed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | string | No | Page token for retrieving the next page of results. Use the value from the previous response's nextPageToken. | -| `page_size` | number | No | Number of feed elements to return per page (default: 25, max: 100) | -| `sort_param` | string | No | Sort order for feed elements. Options: LastModifiedDateDesc (default), CreatedDateDesc, MostRecentActivity | -| `user_id` | string | Yes | The ID of the user whose Chatter feed to retrieve. Use 'me' for the current user. | - -## `salesforce_composite` - -Execute multiple Salesforce REST API requests in a single call using the Composite API. Allows for efficient batch operations and related data retrieval. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `composite_request` | string | Yes | JSON string containing composite request with multiple sub-requests | - -## `salesforce_contact_create` - -Create a new contact in Salesforce. Allows setting contact properties like name, email, phone, account association, and other standard fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `AccountId` | string | No | Salesforce Account Id associated with this contact | -| `Department` | string | No | Department of the contact | -| `Description` | string | No | Free-form description | -| `Email` | string | No | Email address of the contact | -| `FirstName` | string | No | First name of the contact | -| `LastName` | string | Yes | Last name of the contact (required) | -| `LeadSource` | string | No | Lead source for the contact | -| `MailingCity` | string | No | Mailing city | -| `MailingCountry` | string | No | Mailing country | -| `MailingPostalCode` | string | No | Mailing postal code | -| `MailingState` | string | No | Mailing state/province | -| `MailingStreet` | string | No | Mailing street | -| `MobilePhone` | string | No | Mobile phone of the contact | -| `Phone` | string | No | Phone number of the contact | -| `Title` | string | No | Job title of the contact | - -## `salesforce_contact_get` - -Retrieve details of a specific contact from Salesforce by contact ID. Returns contact properties and associated data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `contact_id` | string | Yes | ID of the contact to retrieve | -| `fields` | string | No | Comma-separated list of fields to include in the response | - -## `salesforce_dashboard_clone` - -Clone an existing dashboard in Salesforce. Creates a copy of the source dashboard in the specified folder. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `folderId` | string | Yes | Folder to place the cloned dashboard | -| `name` | string | No | Name for the cloned dashboard | -| `source_dashboard_id` | string | Yes | ID of the dashboard to clone | - -## `salesforce_dashboard_get` - -Retrieve dashboard data and results from Salesforce by dashboard ID. Returns dashboard component data and results from all underlying reports. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dashboard_id` | string | Yes | ID of the dashboard to retrieve | -| `filter1` | string | No | First dashboard filter value (DashboardFilterOption ID) | -| `filter2` | string | No | Second dashboard filter value (DashboardFilterOption ID) | -| `filter3` | string | No | Third dashboard filter value (DashboardFilterOption ID) | - -## `salesforce_dashboard_metadata_get` - -Retrieve metadata for a Salesforce dashboard, including dashboard components, filters, layout, and the running user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dashboard_id` | string | Yes | The unique ID of the Salesforce dashboard | - -## `salesforce_dashboard_update` - -Update a Salesforce dashboard. Supports renaming, moving to a folder, and saving sticky filters. Use GET dashboard first to find filter IDs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dashboard_id` | string | Yes | ID of the dashboard to update | -| `filters` | `array` | No | Dashboard filters to save (array) | -| `folderId` | string | No | Folder to move the dashboard to | -| `name` | string | No | New name for the dashboard | - -## `salesforce_global_describe` - -Retrieve metadata about all available SObjects in the Salesforce organization. Returns list of all objects with basic information. - -## `salesforce_limits_get` - -Retrieve organization limits information from Salesforce. Returns API usage limits, data storage limits, and other organizational constraints. - -## `salesforce_object_describe` - -Retrieve detailed metadata about a specific SObject in Salesforce. Returns fields, relationships, and other object metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sobject` | string | Yes | SObject API name to describe | - -## `salesforce_opportunities_list` - -Retrieve a list of opportunities from Salesforce using a pre-built SOQL query. Returns basic opportunity information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | number | No | Number of results to return per page | - -## `salesforce_opportunity_create` - -Create a new opportunity in Salesforce. Allows setting opportunity properties like name, amount, stage, close date, and account association. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `AccountId` | string | No | Associated Account Id | -| `Amount` | number | No | Opportunity amount | -| `CampaignId` | string | No | Related Campaign Id | -| `CloseDate` | string | Yes | Expected close date (YYYY-MM-DD, required) | -| `Custom_Field__c` | string | No | Example custom field (replace with your org’s custom field API name) | -| `Description` | string | No | Opportunity description | -| `ForecastCategoryName` | string | No | Forecast category name | -| `LeadSource` | string | No | Lead source | -| `Name` | string | Yes | Opportunity name (required) | -| `NextStep` | string | No | Next step in the sales process | -| `OwnerId` | string | No | Record owner (User/Queue Id) | -| `PricebookId` | string | No | Associated Price Book Id | -| `Probability` | number | No | Probability percentage (0–100) | -| `RecordTypeId` | string | No | Record Type Id for Opportunity | -| `StageName` | string | Yes | Current sales stage (required) | -| `Type` | string | No | Opportunity type | - -## `salesforce_opportunity_get` - -Retrieve details of a specific opportunity from Salesforce by opportunity ID. Returns opportunity properties and associated data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Comma-separated list of fields to include in the response | -| `opportunity_id` | string | Yes | ID of the opportunity to retrieve | - -## `salesforce_opportunity_update` - -Update an existing opportunity in Salesforce by opportunity ID. Allows updating opportunity properties like name, amount, stage, and close date. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `AccountId` | string | No | Associated Account Id | -| `Amount` | number | No | Opportunity amount | -| `CampaignId` | string | No | Related Campaign Id | -| `CloseDate` | string | No | Expected close date (YYYY-MM-DD) | -| `Description` | string | No | Opportunity description | -| `ForecastCategoryName` | string | No | Forecast category name | -| `LeadSource` | string | No | Lead source | -| `Name` | string | No | Opportunity name | -| `NextStep` | string | No | Next step in the sales process | -| `OwnerId` | string | No | Record owner (User/Queue Id) | -| `Pricebook2Id` | string | No | Associated Price Book Id | -| `Probability` | number | No | Probability percentage (0–100) | -| `RecordTypeId` | string | No | Record Type Id for Opportunity | -| `StageName` | string | No | Current sales stage | -| `Type` | string | No | Opportunity type | -| `opportunity_id` | string | Yes | ID of the opportunity to update | - -## `salesforce_query_next_page` - -Fetch the next page of results from a previous SOQL query. Use the nextRecordsUrl returned when a query response has done=false. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | Yes | The record cursor from a previous SOQL query response. Extract the cursor ID from the nextRecordsUrl (e.g. '01gxx0000002GJm-2000' from '/services/data/v66.0/query/01gxx0000002GJm-2000') | - -## `salesforce_query_soql` - -Execute SOQL queries against Salesforce data. Supports complex queries with joins, filters, and aggregations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `query` | string | Yes | SOQL query string to execute | - -## `salesforce_report_create` - -Create a new report in Salesforce using the Analytics API. Minimal verified version with only confirmed working fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `aggregates` | string | No | Aggregates configuration (JSON array) | -| `chart` | string | No | Chart configuration (JSON object) | -| `description` | string | No | Report description | -| `detailColumns` | string | No | Detail columns (JSON array of field names) | -| `folderId` | string | No | Folder ID where report will be stored | -| `groupingsAcross` | string | No | Column groupings (JSON array) | -| `groupingsDown` | string | No | Row groupings (JSON array) | -| `name` | string | Yes | Report name | -| `reportBooleanFilter` | string | No | Filter logic | -| `reportFilters` | string | No | Report filters (JSON array) | -| `reportFormat` | string | No | Report format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings) | -| `reportType` | string | Yes | The report type's API name from your Salesforce org (e.g. Opportunity, AccountList). Find valid values in Setup > Report Types | -| `scope` | string | No | Report scope. organization (all records) or team (current user's team records) | - -## `salesforce_report_delete` - -Delete an existing report from Salesforce by report ID. This is a destructive operation that permanently removes the report and cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `report_id` | string | Yes | ID of the report to delete | - -## `salesforce_report_metadata_get` - -Retrieve report, report type, and related metadata for a Salesforce report. Returns information about report structure, fields, groupings, and configuration. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `report_id` | string | Yes | The unique ID of the Salesforce report | - -## `salesforce_report_update` - -Update an existing report in Salesforce by report ID. Minimal verified version with only confirmed working fields. Only updates fields that are provided. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `aggregates` | string | No | Aggregates configuration (JSON array) | -| `chart` | string | No | Chart configuration (JSON object) | -| `description` | string | No | Updated report description | -| `detailColumns` | string | No | Detail columns (JSON array of field names) | -| `folderId` | string | No | Move report to different folder | -| `groupingsAcross` | string | No | Column groupings (JSON array) | -| `groupingsDown` | string | No | Row groupings (JSON array) | -| `name` | string | No | Updated report name | -| `reportBooleanFilter` | string | No | Filter logic | -| `reportFilters` | string | No | Report filters (JSON array) | -| `reportFormat` | string | No | Report format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings) | -| `report_id` | string | Yes | ID of the report to update | -| `scope` | string | No | Report scope. organization (all records) or team (current user's team records) | - -## `salesforce_search_parameterized` - -Execute parameterized searches against Salesforce data. Provides simplified search interface with predefined parameters. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Comma-separated list of fields to return | -| `search_text` | string | Yes | Text to search for | -| `sobject` | string | Yes | SObject type to search in | - -## `salesforce_search_sosl` - -Execute SOSL searches against Salesforce data. Performs full-text search across multiple objects and fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `search_query` | string | Yes | SOSL search query string to execute | - -## `salesforce_sobject_create` - -Create a new record for any Salesforce SObject type (Account, Contact, Lead, Opportunity, custom objects, etc.). Provide the object type and fields as a dynamic object. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | `object` | Yes | Object containing field names and values to set on the new record | -| `sobject_type` | string | Yes | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | - -## `salesforce_sobject_delete` - -Delete a record from any Salesforce SObject type by ID. This is a destructive operation that permanently removes the record. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | ID of the record to delete | -| `sobject_type` | string | Yes | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | - -## `salesforce_sobject_get` - -Retrieve a record from any Salesforce SObject type by ID. Optionally specify which fields to return. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Comma-separated list of fields to include in the response | -| `record_id` | string | Yes | ID of the record to retrieve | -| `sobject_type` | string | Yes | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | - -## `salesforce_sobject_update` - -Update an existing record for any Salesforce SObject type by ID. Only the fields provided will be updated. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | `object` | Yes | Object containing field names and values to update on the record | -| `record_id` | string | Yes | ID of the record to update | -| `sobject_type` | string | Yes | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | - -## `salesforce_soql_execute` - -Execute custom SOQL queries against Salesforce data. Supports complex queries with joins, filters, aggregations, and custom field selection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `soql_query` | string | Yes | SOQL query string to execute | - -## `salesforce_tooling_query_execute` - -Execute SOQL queries against Salesforce Tooling API to access metadata objects like ApexClass, ApexTrigger, CustomObject, and development metadata. Use this for querying metadata rather than data objects. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `soql_query` | string | Yes | SOQL query string to execute against Tooling API | - -## `salesforce_tooling_sobject_create` - -Create a new metadata record for any Salesforce Tooling API object type (ApexClass, ApexTrigger, CustomField, etc.). Supports both simple and nested field structures. For CustomField, use FullName and Metadata properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | `object` | Yes | Object containing field names and values to set on the new metadata record. Supports nested structures for complex metadata types. | -| `sobject_type` | string | Yes | The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject) | - -## `salesforce_tooling_sobject_delete` - -Delete a metadata record from any Salesforce Tooling API object type by ID. This is a destructive operation that permanently removes the metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `record_id` | string | Yes | ID of the metadata record to delete | -| `sobject_type` | string | Yes | The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject) | - -## `salesforce_tooling_sobject_describe` - -Retrieve detailed metadata schema for a specific Tooling API object type. Returns fields, relationships, and other metadata properties. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sobject` | string | Yes | Tooling API object name to describe | - -## `salesforce_tooling_sobject_get` - -Retrieve a metadata record from any Salesforce Tooling API object type by ID. Optionally specify which fields to return. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | string | No | Comma-separated list of fields to include in the response | -| `record_id` | string | Yes | ID of the metadata record to retrieve | -| `sobject_type` | string | Yes | The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject) | - -## `salesforce_tooling_sobject_update` - -Update an existing metadata record for any Salesforce Tooling API object type by ID. Supports both simple and nested field structures. Only the fields provided will be updated. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fields` | `object` | Yes | Object containing field names and values to update on the metadata record. Supports nested structures for complex metadata types. | -| `record_id` | string | Yes | ID of the metadata record to update | -| `sobject_type` | string | Yes | The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject) | + diff --git a/src/content/docs/reference/agent-connectors/servicenow.mdx b/src/content/docs/reference/agent-connectors/servicenow.mdx index c1e07eb17..b4c70dd03 100644 --- a/src/content/docs/reference/agent-connectors/servicenow.mdx +++ b/src/content/docs/reference/agent-connectors/servicenow.mdx @@ -3,6 +3,7 @@ title: ServiceNow description: Connect to ServiceNow. Manage incidents, service requests, CMDB, and IT service management workflows tableOfContents: true sidebar: + label: ServiceNow badge: text: Soon variant: tip @@ -12,13 +13,11 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/servicenow' import { SetupServicenowSection } from '@components/templates' import { UsageServicenowSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/sharepoint.mdx b/src/content/docs/reference/agent-connectors/sharepoint.mdx index 917d78eb1..1365eae85 100644 --- a/src/content/docs/reference/agent-connectors/sharepoint.mdx +++ b/src/content/docs/reference/agent-connectors/sharepoint.mdx @@ -2,19 +2,19 @@ title: SharePoint description: Connect to SharePoint. Manage sites, documents, lists, and collaborative content tableOfContents: true +sidebar: + label: SharePoint head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/sharepoint' import { SetupSharepointSection } from '@components/templates' import { UsageSharepointSection } from '@components/templates' diff --git a/src/content/docs/reference/agent-connectors/slack.mdx b/src/content/docs/reference/agent-connectors/slack.mdx index 925500aa0..ad9194150 100644 --- a/src/content/docs/reference/agent-connectors/slack.mdx +++ b/src/content/docs/reference/agent-connectors/slack.mdx @@ -2,19 +2,19 @@ title: Slack description: Connect to Slack workspace. Send Messages as Bots or on behalf of users tableOfContents: true +sidebar: + label: Slack head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/slack' import { SetupSlackSection } from '@components/templates' import { UsageSlackSection } from '@components/templates' @@ -40,188 +40,4 @@ Supports authentication: ## Tool list -## `slack_add_reaction` - -Add an emoji reaction to a message in Slack. Requires a valid Slack OAuth2 connection with reactions:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID or channel name where the message exists | -| `name` | string | Yes | Emoji name to react with (without colons) | -| `timestamp` | string | Yes | Timestamp of the message to add reaction to | - -## `slack_create_channel` - -Creates a new public or private channel in a Slack workspace. Requires a valid Slack OAuth2 connection with channels:manage scope for public channels or groups:write scope for private channels. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `is_private` | boolean | No | Create a private channel instead of public | -| `name` | string | Yes | Name of the channel to create (without # prefix) | -| `team_id` | string | No | Encoded team ID to create channel in (if using org tokens) | - -## `slack_delete_message` - -Deletes a message from a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM where the message was sent | -| `ts` | string | Yes | Timestamp of the message to delete | - -## `slack_fetch_conversation_history` - -Fetches conversation history from a Slack channel or direct message with pagination support. Requires a valid Slack OAuth2 connection with channels:history scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM | -| `cursor` | string | No | Paginate through collections by cursor for pagination | -| `latest` | string | No | End of time range of messages to include in results | -| `limit` | integer | No | Number of messages to return (1-1000, default 100) | -| `oldest` | string | No | Start of time range of messages to include in results | - -## `slack_get_conversation_info` - -Retrieve information about a Slack channel, including metadata, settings, and member count. Requires a valid Slack OAuth2 connection with channels:read scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM | -| `include_locale` | boolean | No | Set to true to include the locale for this conversation | -| `include_num_members` | boolean | No | Set to true to include the member count for the conversation | - -## `slack_get_conversation_replies` - -Retrieve replies to a specific message thread in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with channels:history or groups:history scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM | -| `cursor` | string | No | Pagination cursor for retrieving next page of results | -| `inclusive` | boolean | No | Include messages with latest or oldest timestamp in results | -| `latest` | string | No | End of time range of messages to include in results | -| `limit` | integer | No | Number of messages to return (default 100, max 1000) | -| `oldest` | string | No | Start of time range of messages to include in results | -| `ts` | string | Yes | Timestamp of the parent message to get replies for | - -## `slack_get_user_info` - -Retrieves detailed information about a specific Slack user, including profile data, status, and workspace information. Requires a valid Slack OAuth2 connection with users:read scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include_locale` | boolean | No | Set to true to include locale information for the user | -| `user` | string | Yes | User ID to get information about | - -## `slack_get_user_presence` - -Gets the current presence status of a Slack user (active, away, etc.). Indicates whether the user is currently online and available. Requires a valid Slack OAuth2 connection with users:read scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `user` | string | Yes | User ID to check presence for | - -## `slack_invite_users_to_channel` - -Invites one or more users to a Slack channel. Requires a valid Slack OAuth2 connection with channels:write scope for public channels or groups:write for private channels. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID or channel name (#general) to invite users to | -| `users` | string | Yes | Comma-separated list of user IDs to invite to the channel | - -## `slack_join_conversation` - -Joins an existing Slack channel. The authenticated user will become a member of the channel. Requires a valid Slack OAuth2 connection with channels:write scope for public channels. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID or channel name (#general) to join | - -## `slack_leave_conversation` - -Leaves a Slack channel. The authenticated user will be removed from the channel and will no longer receive messages from it. Requires a valid Slack OAuth2 connection with channels:write scope for public channels or groups:write for private channels. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID or channel name (#general) to leave | - -## `slack_list_channels` - -List all public and private channels in a Slack workspace that the authenticated user has access to. Requires a valid Slack OAuth2 connection with channels:read, groups:read, mpim:read, and/or im:read scopes depending on conversation types needed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor for retrieving next page of results | -| `exclude_archived` | boolean | No | Exclude archived channels from the list | -| `limit` | integer | No | Number of channels to return (default 100, max 1000) | -| `team_id` | string | No | Encoded team ID to list channels for (optional) | -| `types` | string | No | Mix and match channel types (public_channel, private_channel, mpim, im) | - -## `slack_list_users` - -Lists all users in a Slack workspace, including information about their status, profile, and presence. Requires a valid Slack OAuth2 connection with users:read scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `cursor` | string | No | Pagination cursor for fetching additional pages of users | -| `include_locale` | boolean | No | Set to true to include locale information for each user | -| `limit` | number | No | Number of users to return (1-1000) | -| `team_id` | string | No | Encoded team ID to list users for (if using org tokens) | - -## `slack_lookup_user_by_email` - -Find a user by their registered email address in a Slack workspace. Requires a valid Slack OAuth2 connection with users:read.email scope. Cannot be used by custom bot users. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | Yes | Email address to search for users by | - -## `slack_pin_message` - -Pin a message to a Slack channel. Pinned messages are highlighted and easily accessible to channel members. Requires a valid Slack OAuth2 connection with pins:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel` | string | Yes | Channel ID or channel name where the message exists | -| `timestamp` | string | Yes | Timestamp of the message to pin | - -## `slack_send_message` - -Sends a message to a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attachments` | string | No | JSON-encoded array of attachment objects for additional message formatting | -| `blocks` | string | No | JSON-encoded array of Block Kit block elements for rich message formatting | -| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM | -| `reply_broadcast` | boolean | No | Used in conjunction with thread_ts to broadcast reply to channel | -| `schema_version` | string | No | Optional schema version to use for tool execution | -| `text` | string | Yes | Message text content | -| `thread_ts` | string | No | Timestamp of parent message to reply in thread | -| `tool_version` | string | No | Optional tool version to use for execution | -| `unfurl_links` | boolean | No | Enable or disable link previews | -| `unfurl_media` | boolean | No | Enable or disable media link previews | - -## `slack_set_user_status` - -Set the user's custom status with text and emoji. This appears in their profile and can include an expiration time. Requires a valid Slack OAuth2 connection with users.profile:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `status_emoji` | string | No | Emoji to display with status (without colons) | -| `status_expiration` | integer | No | Unix timestamp when status should expire | -| `status_text` | string | No | Status text to display | - -## `slack_update_message` - -Updates/edits a previously sent message in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `attachments` | string | No | JSON-encoded array of attachment objects for additional message formatting | -| `blocks` | string | No | JSON-encoded array of Block Kit block elements for rich message formatting | -| `channel` | string | Yes | Channel ID, channel name (#general), or user ID for DM where the message was sent | -| `text` | string | No | New message text content | -| `ts` | string | Yes | Timestamp of the message to update | + diff --git a/src/content/docs/reference/agent-connectors/snowflake.mdx b/src/content/docs/reference/agent-connectors/snowflake.mdx index 0c4990b5d..996734036 100644 --- a/src/content/docs/reference/agent-connectors/snowflake.mdx +++ b/src/content/docs/reference/agent-connectors/snowflake.mdx @@ -2,19 +2,19 @@ title: Snowflake description: Connect to Snowflake to manage and analyze your data warehouse workloads tableOfContents: true +sidebar: + label: Snowflake head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/snowflake' import { SetupSnowflakeSection } from '@components/templates' import { UsageSnowflakeSection } from '@components/templates' @@ -40,176 +40,4 @@ Supports authentication: ## Tool list -## `snowflake_cancel_query` - -Cancel a running Snowflake SQL API statement by statement handle. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `request_id` | string | No | Optional request ID used when the statement was submitted | -| `statement_handle` | string | Yes | Snowflake statement handle to cancel | - -## `snowflake_execute_query` - -Execute one or more SQL statements against Snowflake using the SQL API. Requires a valid Snowflake OAuth2 connection. Use semicolons to submit multiple statements. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `async` | boolean | No | Execute statement asynchronously and return a statement handle | -| `bindings` | `object` | No | Bind variables object for '?' placeholders in the SQL statement | -| `database` | string | No | Database to use when executing the statement | -| `nullable` | boolean | No | When false, SQL NULL values are returned as the string "null" | -| `parameters` | `object` | No | Statement-level Snowflake parameters as a JSON object | -| `request_id` | string | No | Unique request identifier (UUID) used for idempotent retries | -| `retry` | boolean | No | Set true when resubmitting a previously sent request with the same request_id | -| `role` | string | No | Role to use when executing the statement | -| `schema` | string | No | Schema to use when executing the statement | -| `statement` | string | Yes | SQL statement to execute. Use semicolons to send multiple statements in one request. | -| `timeout` | integer | No | Maximum number of seconds to wait for statement execution | -| `warehouse` | string | No | Warehouse to use when executing the statement | - -## `snowflake_get_columns` - -Query INFORMATION_SCHEMA.COLUMNS for column metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `column_name_like` | string | No | Optional column name pattern | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table` | string | No | Optional table filter | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_get_query_partition` - -Get a specific result partition for a Snowflake SQL API statement. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `partition` | integer | Yes | Partition index to fetch (0-based) | -| `request_id` | string | No | Optional request ID used when the statement was submitted | -| `statement_handle` | string | Yes | Snowflake statement handle returned by Execute Query | - -## `snowflake_get_query_status` - -Get Snowflake SQL API statement status and first partition result metadata by statement handle. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `request_id` | string | No | Optional request ID used when the statement was submitted | -| `statement_handle` | string | Yes | Snowflake statement handle returned by Execute Query | - -## `snowflake_get_referential_constraints` - -Query INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table` | string | No | Optional table filter | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_get_schemata` - -Query INFORMATION_SCHEMA.SCHEMATA for schema metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema_like` | string | No | Optional schema pattern | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_get_table_constraints` - -Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `constraint_type` | string | No | Optional constraint type filter | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table` | string | No | Optional table filter | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_get_tables` - -Query INFORMATION_SCHEMA.TABLES for table metadata in a Snowflake database. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database` | string | Yes | Database name | -| `limit` | integer | No | Maximum number of rows | -| `role` | string | No | Optional role | -| `schema` | string | No | Optional schema filter | -| `table_name_like` | string | No | Optional table name pattern | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_show_databases_schemas` - -Run SHOW DATABASES or SHOW SCHEMAS. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_name` | string | No | Optional database scope for SHOW SCHEMAS | -| `like_pattern` | string | No | Optional LIKE pattern | -| `object_type` | string | Yes | Object type to show | -| `role` | string | No | Optional role | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_show_grants` - -Run SHOW GRANTS in common modes (to role, to user, of role, on object). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `grant_view` | string | Yes | SHOW GRANTS variant | -| `object_name` | string | No | Object name for on_object | -| `object_type` | string | No | Object type for on_object | -| `role` | string | No | Optional execution role | -| `role_name` | string | No | Role name (for to_role/of_role) | -| `user_name` | string | No | User name (for to_user) | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_show_imported_exported_keys` - -Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. For reliable execution in this environment, use fully-qualified scope (database_name + schema_name + table_name). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_name` | string | No | Optional database name (recommended with schema_name) | -| `key_direction` | string | Yes | Which command to run | -| `role` | string | No | Optional role | -| `schema_name` | string | No | Optional schema name (recommended with database_name) | -| `table_name` | string | Yes | Table name (use with schema_name and database_name for fully-qualified scope) | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_show_primary_keys` - -Run SHOW PRIMARY KEYS with optional scope. When using schema_name (or schema_name + table_name), database_name is required for fully-qualified scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `database_name` | string | No | Optional database name for scope (required when schema_name is set) | -| `role` | string | No | Optional role | -| `schema_name` | string | No | Optional schema name for scope | -| `table_name` | string | No | Optional table name for scope | -| `warehouse` | string | No | Optional warehouse | - -## `snowflake_show_warehouses` - -Run SHOW WAREHOUSES. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `like_pattern` | string | No | Optional LIKE pattern | -| `role` | string | No | Optional role | -| `warehouse` | string | No | Optional warehouse | + diff --git a/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx b/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx index aebed869d..3e77eb52f 100644 --- a/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx +++ b/src/content/docs/reference/agent-connectors/snowflakekeyauth.mdx @@ -3,7 +3,7 @@ title: Snowflake Key Pair Auth description: Connect to Snowflake via Public Private Key Pair to manage and analyze your data warehouse workloads tableOfContents: true sidebar: - label: Snowflake Key Auth + label: Snowflake Key Pair Auth head: - tag: style content: | @@ -18,16 +18,17 @@ import { tools } from '@/data/agent-connectors/snowflakekeyauth' import { UsageSnowflakekeyauthSection } from '@components/templates'
-
- Connect to Snowflake via Public Private Key Pair to manage and analyze your data warehouse workloads -
-
- Snowflake Key Pair Auth logo -
+
+ Connect to Snowflake via Public Private Key Pair to manage and analyze your data warehouse workloads +
+
+ Snowflake Key Pair Auth logo +
Supports authentication: + ## Usage diff --git a/src/content/docs/reference/agent-connectors/trello.mdx b/src/content/docs/reference/agent-connectors/trello.mdx index 55c5c029d..27843f456 100644 --- a/src/content/docs/reference/agent-connectors/trello.mdx +++ b/src/content/docs/reference/agent-connectors/trello.mdx @@ -3,6 +3,7 @@ title: Trello description: Connect to Trello. Manage boards, cards, lists, and team collaboration workflows tableOfContents: true sidebar: + label: Trello badge: text: Soon variant: tip @@ -12,13 +13,11 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/trello' import { UsageTrelloSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/vimeo.mdx b/src/content/docs/reference/agent-connectors/vimeo.mdx index ba5a96a6f..52664d6aa 100644 --- a/src/content/docs/reference/agent-connectors/vimeo.mdx +++ b/src/content/docs/reference/agent-connectors/vimeo.mdx @@ -2,19 +2,19 @@ title: Vimeo description: Connect to Vimeo API v3.4. Upload and manage videos, organize content into showcases and folders, manage channels, handle comments, likes, and webhooks. tableOfContents: true +sidebar: + label: Vimeo head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/vimeo' import { SetupVimeoSection } from '@components/templates'
@@ -35,335 +35,4 @@ Supports authentication: ## Tool list -## `vimeo_categories_list` - -Retrieve all top-level Vimeo content categories (e.g., Animation, Documentary, Music). Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of categories per page | -| `sort` | string | No | Sort order for categories | - -## `vimeo_channel_videos_list` - -Retrieve all videos in a specific Vimeo channel. Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel_id` | string | Yes | Vimeo channel ID or slug | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter videos by type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `query` | string | No | Search query to filter channel videos | -| `sort` | string | No | Sort order for videos | - -## `vimeo_channels_list` - -Retrieve a list of Vimeo channels. Can list all public channels or channels the authenticated user follows/manages. Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter channels by type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of channels per page | -| `query` | string | No | Search query to filter channels by name | -| `sort` | string | No | Sort order for channels | - -## `vimeo_folder_create` - -Create a new folder (project) in the authenticated user's Vimeo account for organizing private video content. Requires create scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | Yes | Name of the new folder | -| `parent_folder_uri` | string | No | URI of the parent folder to nest this folder inside | - -## `vimeo_folder_video_add` - -Move or add a video into a Vimeo folder (project). Requires edit scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `folder_id` | string | Yes | Folder (project) ID to add the video to | -| `video_id` | string | Yes | Video ID to add to the folder | - -## `vimeo_folder_videos_list` - -Retrieve all videos inside a specific Vimeo folder (project). Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter videos by type | -| `folder_id` | string | Yes | Folder (project) ID to list videos from | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `query` | string | No | Search query to filter videos by name | -| `sort` | string | No | Sort order for videos | - -## `vimeo_folders_list` - -Retrieve all folders (projects) owned by the authenticated Vimeo user for organizing private video libraries. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of folders per page | -| `query` | string | No | Search query to filter folders by name | -| `sort` | string | No | Sort order for folders | - -## `vimeo_following_list` - -Retrieve a list of Vimeo users that the authenticated user is following. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter following list by type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of users per page | -| `query` | string | No | Search query to filter following list by name | -| `sort` | string | No | Sort order | - -## `vimeo_liked_videos_list` - -Retrieve all videos liked by the authenticated Vimeo user. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter liked videos by type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `sort` | string | No | Sort order for liked videos | - -## `vimeo_me_get` - -Retrieve the authenticated Vimeo user's profile including account type, bio, location, stats, and links. Requires a valid Vimeo OAuth2 connection. - -## `vimeo_my_videos_list` - -Retrieve all videos uploaded by the authenticated Vimeo user. Supports filtering, sorting, and pagination. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `containing_uri` | string | No | Filter videos that contain a specific URI | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter videos by type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `query` | string | No | Search query to filter videos by title or description | -| `sort` | string | No | Sort order for video results | - -## `vimeo_showcase_create` - -Create a new showcase (album) on Vimeo for organizing videos. Supports privacy, password protection, branding, and embed settings. Requires create scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `brand_color` | string | No | Hex color code for showcase branding | -| `description` | string | No | Description of the showcase | -| `hide_nav` | boolean | No | Whether to hide Vimeo navigation in the showcase | -| `hide_upcoming` | boolean | No | Whether to hide upcoming live events in the showcase | -| `name` | string | Yes | Name/title of the showcase | -| `password` | string | No | Password for the showcase when privacy is set to 'password' | -| `privacy` | string | No | Privacy setting for the showcase | -| `review_mode` | boolean | No | Enable review mode for the showcase | -| `sort` | string | No | Default sort for videos in the showcase | - -## `vimeo_showcase_video_add` - -Add a video to a Vimeo showcase. Requires edit scope and ownership of both the showcase and the video. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `album_id` | string | Yes | Showcase (album) ID to add the video to | -| `video_id` | string | Yes | Video ID to add to the showcase | - -## `vimeo_showcase_videos_list` - -Retrieve all videos in a specific Vimeo showcase. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `album_id` | string | Yes | Showcase (album) ID | -| `direction` | string | No | Sort direction | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `sort` | string | No | Sort order for videos | - -## `vimeo_showcases_list` - -Retrieve all showcases (formerly albums) owned by the authenticated Vimeo user. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of showcases per page | -| `query` | string | No | Search query to filter showcases by name | -| `sort` | string | No | Sort order for showcases | - -## `vimeo_user_follow` - -Follow a Vimeo user on behalf of the authenticated user. Requires interact scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `follow_user_id` | string | Yes | Vimeo user ID to follow | - -## `vimeo_user_get` - -Retrieve public profile information for any Vimeo user by their user ID or username. Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `user_id` | string | Yes | Vimeo user ID or username | - -## `vimeo_user_videos_list` - -Retrieve all public videos uploaded by a specific Vimeo user. Supports filtering and pagination. Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter results by video type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `query` | string | No | Search query to filter videos | -| `sort` | string | No | Sort order for video results | -| `user_id` | string | Yes | Vimeo user ID or username | - -## `vimeo_video_comment_add` - -Post a comment on a Vimeo video on behalf of the authenticated user. Requires interact scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `text` | string | Yes | Comment text to post | -| `video_id` | string | Yes | Vimeo video ID to comment on | - -## `vimeo_video_comments_list` - -Retrieve all comments posted on a specific Vimeo video. Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of comments per page | -| `video_id` | string | Yes | Vimeo video ID to list comments from | - -## `vimeo_video_delete` - -Permanently delete a Vimeo video. This action is irreversible. Requires delete scope and ownership of the video. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `video_id` | string | Yes | Vimeo video ID to delete | - -## `vimeo_video_edit` - -Update the metadata of an existing Vimeo video including title, description, privacy settings, tags, and content rating. Requires edit scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content_rating` | string | No | Content rating of the video | -| `description` | string | No | New description for the video | -| `license` | string | No | Creative Commons license to apply | -| `name` | string | No | New title for the video | -| `password` | string | No | Password for the video when privacy view is set to 'password' | -| `privacy_add` | boolean | No | Whether users can add the video to their showcases or channels | -| `privacy_comments` | string | No | Who can comment on the video | -| `privacy_download` | boolean | No | Whether users can download the video | -| `privacy_embed` | string | No | Who can embed the video | -| `privacy_view` | string | No | Who can view the video | -| `video_id` | string | Yes | Vimeo video ID to edit | - -## `vimeo_video_get` - -Retrieve detailed information about a specific Vimeo video including metadata, privacy settings, stats, and embed details. Requires a valid Vimeo OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `video_id` | string | Yes | Vimeo video ID | - -## `vimeo_video_like` - -Like a Vimeo video on behalf of the authenticated user. Use PUT /me/likes/\{video_id\} to like. Requires interact scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `video_id` | string | Yes | Vimeo video ID to like | - -## `vimeo_video_tags_list` - -Retrieve all tags applied to a specific Vimeo video. Requires public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `video_id` | string | Yes | Vimeo video ID to list tags from | - -## `vimeo_videos_search` - -Search for public videos on Vimeo using keywords and filters. Returns paginated video results with metadata. Requires a valid Vimeo OAuth2 connection with public scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction for results | -| `filter` | string | No | Filter results by video type | -| `page` | integer | No | Page number of results to return | -| `per_page` | integer | No | Number of results to return per page | -| `query` | string | Yes | Search query keywords | -| `sort` | string | No | Sort order for search results | - -## `vimeo_watchlater_add` - -Add a video to the authenticated user's Vimeo Watch Later queue. Requires interact scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `video_id` | string | Yes | Vimeo video ID to add to Watch Later | - -## `vimeo_watchlater_list` - -Retrieve all videos in the authenticated user's Vimeo Watch Later queue. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `direction` | string | No | Sort direction | -| `filter` | string | No | Filter by video type | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of videos per page | -| `sort` | string | No | Sort order for watch later videos | - -## `vimeo_webhook_create` - -Register a new webhook endpoint to receive real-time Vimeo event notifications. Supports events for video uploads, transcoding, privacy changes, and comments. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `event_types` | `array` | Yes | List of event types that will trigger this webhook | -| `url` | string | Yes | HTTPS URL that Vimeo will send webhook POST requests to | - -## `vimeo_webhook_delete` - -Delete a registered Vimeo webhook endpoint so it no longer receives event notifications. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | string | Yes | Webhook ID to delete | - -## `vimeo_webhooks_list` - -Retrieve all webhooks registered for the authenticated Vimeo application. Requires private scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | integer | No | Page number of results | -| `per_page` | integer | No | Number of webhooks per page | + diff --git a/src/content/docs/reference/agent-connectors/youtube.mdx b/src/content/docs/reference/agent-connectors/youtube.mdx index d0a8aea8c..ba3af7a1f 100644 --- a/src/content/docs/reference/agent-connectors/youtube.mdx +++ b/src/content/docs/reference/agent-connectors/youtube.mdx @@ -2,19 +2,19 @@ title: YouTube description: Connect to YouTube to access channel details, analytics, and upload or manage videos via OAuth 2.0 tableOfContents: true +sidebar: + label: YouTube head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/youtube' import { SetupYoutubeSection } from '@components/templates'
@@ -35,397 +35,4 @@ Supports authentication: ## Tool list -## `youtube_analytics_group_create` - -Create a YouTube Analytics group to organize videos, playlists, channels, or assets for collective analytics reporting. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `item_type` | string | Yes | Type of items the group will contain | -| `on_behalf_of_content_owner` | string | No | Content owner ID. For content partners only. | -| `title` | string | Yes | Title of the analytics group | - -## `youtube_analytics_group_item_insert` - -Add a video, playlist, or channel to a YouTube Analytics group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `group_id` | string | Yes | ID of the Analytics group to add the item to | -| `on_behalf_of_content_owner` | string | No | Content owner ID. For content partners only. | -| `resource_id` | string | Yes | ID of the resource (video ID, channel ID, or playlist ID) | -| `resource_kind` | string | Yes | Type of the resource | - -## `youtube_analytics_group_items_delete` - -Remove an item (video, channel, or playlist) from a YouTube Analytics group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the group item to remove | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | - -## `youtube_analytics_group_items_list` - -Retrieve a list of items (videos, playlists, channels, or assets) that belong to a YouTube Analytics group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `group_id` | string | Yes | ID of the group whose items to retrieve | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | - -## `youtube_analytics_groups_delete` - -Delete a YouTube Analytics group. This removes the group but does not delete the videos, channels, or playlists within it. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `group_id` | string | Yes | ID of the Analytics group to delete | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | - -## `youtube_analytics_groups_list` - -Retrieve a list of YouTube Analytics groups for a channel or content owner. Specify either id or mine to filter results. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | No | Comma-separated list of group IDs to retrieve | -| `mine` | boolean | No | If true, return only groups owned by the authenticated user. Required if id is not set. | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | -| `page_token` | string | No | Token for retrieving the next page of results | - -## `youtube_analytics_groups_update` - -Update the title of an existing YouTube Analytics group. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `group_id` | string | Yes | ID of the Analytics group to update | -| `on_behalf_of_content_owner` | string | No | Content owner ID. For content partners only. | -| `title` | string | Yes | New title for the Analytics group | - -## `youtube_analytics_query` - -Query YouTube Analytics data to retrieve metrics like views, watch time, subscribers, revenue, etc. for channels or content owners. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `currency` | string | No | Currency for monetary metrics (ISO 4217 code, e.g., USD) | -| `dimensions` | string | No | Comma-separated list of dimensions to group results by (e.g., day,country,video) | -| `end_date` | string | Yes | End date for the analytics report in YYYY-MM-DD format | -| `filters` | string | No | Filter expression to narrow results (e.g., country==US, video==VIDEO_ID) | -| `ids` | string | Yes | Channel or content owner ID. Format: channel==CHANNEL_ID or contentOwner==CONTENT_OWNER_ID | -| `include_historical_channel_data` | boolean | No | Include historical channel data recorded before the channel was linked to a content owner | -| `max_results` | integer | No | Maximum number of rows to return in the response (maximum value: 200) | -| `metrics` | string | Yes | Comma-separated list of metrics to retrieve (e.g., views,estimatedMinutesWatched,likes,subscribersGained) | -| `sort` | string | No | Comma-separated list of columns to sort by. Prefix with - for descending order (e.g., -views) | -| `start_date` | string | Yes | Start date for the analytics report in YYYY-MM-DD format | -| `start_index` | integer | No | 1-based index of the first row to return (for pagination) | - -## `youtube_captions_list` - -Retrieve a list of caption tracks for a YouTube video. The part parameter is fixed to 'snippet'. Requires youtube.force-ssl scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | No | Comma-separated list of caption track IDs to filter results | -| `video_id` | string | Yes | ID of the video to list captions for | - -## `youtube_channels_list` - -Retrieve information about one or more YouTube channels including subscriber count, video count, and channel metadata. You must provide exactly one filter: id, mine, for_handle, for_username, or managed_by_me. Requires a valid YouTube OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `for_handle` | string | No | YouTube channel handle to look up (e.g., @MrBeast). Use instead of id, mine, or for_username. | -| `for_username` | string | No | YouTube username of the channel to look up (legacy). Use instead of id, mine, or for_handle. | -| `id` | string | No | Comma-separated list of YouTube channel IDs. Use instead of mine, for_handle, or for_username. | -| `managed_by_me` | boolean | No | Return channels managed by the authenticated user (content partners only). Use instead of id, mine, for_handle, or for_username. | -| `max_results` | integer | No | Maximum number of results to return (0-50, default: 5) | -| `mine` | boolean | No | Return the authenticated user's channel. Use instead of id, for_handle, or for_username. | -| `page_token` | string | No | Token for pagination | -| `part` | string | Yes | Comma-separated list of channel resource parts to include in the response | - -## `youtube_comment_threads_insert` - -Post a new top-level comment on a YouTube video. Requires youtube.force-ssl scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `text` | string | Yes | Text of the comment | -| `video_id` | string | Yes | ID of the video to comment on | - -## `youtube_comment_threads_list` - -Retrieve top-level comment threads for a YouTube video or channel. You must provide exactly one filter: video_id, all_threads_related_to_channel_id, or id. Each thread includes the top-level comment and optionally its replies. Requires a valid YouTube OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `all_threads_related_to_channel_id` | string | No | Return all comment threads associated with a specific channel. Use instead of video_id or id. | -| `id` | string | No | Comma-separated list of comment thread IDs to retrieve. Use instead of video_id or all_threads_related_to_channel_id. | -| `max_results` | integer | No | Maximum number of comment threads to return (1-100, default: 20) | -| `order` | string | No | Sort order for comment threads | -| `page_token` | string | No | Token for pagination | -| `part` | string | Yes | Comma-separated list of comment thread resource parts to include | -| `search_terms` | string | No | Limit results to comments containing these search terms | -| `video_id` | string | No | YouTube video ID to fetch comment threads for. Use instead of all_threads_related_to_channel_id or id. | - -## `youtube_comments_list` - -Retrieve a list of replies to a specific YouTube comment thread. You must provide exactly one filter: parent_id or id. The part parameter is fixed to 'snippet'. Requires youtube.readonly scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | No | Comma-separated list of comment IDs to retrieve. Use instead of parent_id. | -| `max_results` | integer | No | Maximum number of replies to return (1-100, default: 20). Cannot be used with id filter. | -| `page_token` | string | No | Token for pagination to retrieve the next page of replies. Cannot be used with id filter. | -| `parent_id` | string | No | ID of the comment thread (top-level comment) to list replies for. Use instead of id. | -| `text_format` | string | No | Format of the comment text in the response | - -## `youtube_playlist_delete` - -Permanently delete a YouTube playlist. This action cannot be undone. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `playlist_id` | string | Yes | ID of the playlist to delete | - -## `youtube_playlist_insert` - -Create a new YouTube playlist for the authenticated user. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `default_language` | string | No | Default language of the playlist | -| `description` | string | No | Playlist description | -| `privacy_status` | string | No | Privacy setting | -| `tags` | `array` | No | Tags for the playlist | -| `title` | string | Yes | Playlist title | - -## `youtube_playlist_items_delete` - -Remove a video from a YouTube playlist by its playlist item ID. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `playlist_item_id` | string | Yes | ID of the playlist item to remove (not the video ID) | - -## `youtube_playlist_items_insert` - -Add a video to a YouTube playlist at an optional position. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `note` | string | No | Optional note for this playlist item | -| `playlist_id` | string | Yes | Playlist to add the video to | -| `position` | integer | No | Zero-based position in the playlist. Omit to add at end. | -| `video_id` | string | Yes | YouTube video ID to add | - -## `youtube_playlist_items_list` - -Retrieve a list of videos in a YouTube playlist. Returns playlist items with video details, positions, and metadata. Requires a valid YouTube OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `max_results` | integer | No | Maximum number of playlist items to return (0-50, default: 5) | -| `page_token` | string | No | Token for pagination to retrieve the next page | -| `part` | string | Yes | Comma-separated list of playlist item resource parts to include | -| `playlist_id` | string | Yes | YouTube playlist ID to retrieve items from | -| `video_id` | string | No | Filter results to items containing a specific video | - -## `youtube_playlist_update` - -Update an existing YouTube playlist's title, description, privacy status, or default language. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `default_language` | string | No | Language of the playlist | -| `description` | string | No | New playlist description | -| `playlist_id` | string | Yes | ID of the playlist to update | -| `privacy_status` | string | No | New privacy setting | -| `title` | string | No | New playlist title | - -## `youtube_playlists_list` - -Retrieve a list of YouTube playlists for a channel or the authenticated user. You must provide exactly one filter: channel_id, id, or mine. Requires a valid YouTube OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel_id` | string | No | Return playlists for a specific channel. Use instead of id or mine. | -| `id` | string | No | Comma-separated list of playlist IDs to retrieve. Use instead of channel_id or mine. | -| `max_results` | integer | No | Maximum number of playlists to return (0-50, default: 5) | -| `mine` | boolean | No | Return playlists owned by the authenticated user. Use instead of channel_id or id. | -| `page_token` | string | No | Token for pagination | -| `part` | string | Yes | Comma-separated list of playlist resource parts to include | - -## `youtube_reporting_create_job` - -Create a YouTube reporting job to schedule daily generation of a specific report type. Once created, YouTube will generate the report daily. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | Yes | Human-readable name for the reporting job | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the job is being created | -| `report_type_id` | string | Yes | ID of the report type to generate (e.g., channel_basic_a2, channel_demographics_a1) | - -## `youtube_reporting_jobs_delete` - -Delete a scheduled YouTube Reporting API job. Stopping a job means new reports will no longer be generated. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `job_id` | string | Yes | ID of the reporting job to delete | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | - -## `youtube_reporting_list_jobs` - -List all YouTube Reporting API jobs scheduled for a channel or content owner. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include_system_managed` | boolean | No | If true, include system-managed reporting jobs in the response | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | -| `page_size` | integer | No | Maximum number of jobs to return per page | -| `page_token` | string | No | Token for retrieving the next page of results | - -## `youtube_reporting_list_report_types` - -List all YouTube Reporting API report types available for a channel or content owner (e.g., channel_basic_a2, channel_demographics_a1). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include_system_managed` | boolean | No | If true, include system-managed report types in the response | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | -| `page_size` | integer | No | Maximum number of report types to return per page | -| `page_token` | string | No | Token for retrieving the next page of results | - -## `youtube_reporting_list_reports` - -List reports that have been generated for a YouTube reporting job. Each report is a downloadable CSV file. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `created_after` | string | No | Only return reports created after this timestamp (RFC3339 format, e.g., 2024-01-01T00:00:00Z) | -| `job_id` | string | Yes | ID of the reporting job whose reports to list | -| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made | -| `page_size` | integer | No | Maximum number of reports to return per page | -| `page_token` | string | No | Token for retrieving the next page of results | -| `start_time_at_or_after` | string | No | Only return reports whose data start time is at or after this timestamp (RFC3339 format) | -| `start_time_before` | string | No | Only return reports whose data start time is before this timestamp (RFC3339 format) | - -## `youtube_search` - -Search for videos, channels, and playlists on YouTube. Returns a list of resources matching the search query. The part parameter is fixed to 'snippet'. Requires a valid YouTube OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel_id` | string | No | Restrict search results to a specific channel | -| `max_results` | integer | No | Maximum number of results to return (0-50, default: 10) | -| `order` | string | No | Sort order for search results | -| `page_token` | string | No | Token for pagination to retrieve the next page of results | -| `published_after` | string | No | Filter results to resources published after this date (RFC 3339 format) | -| `published_before` | string | No | Filter results to resources published before this date (RFC 3339 format) | -| `q` | string | No | Search query keywords | -| `safe_search` | string | No | Safe search filter level | -| `type` | string | No | Restrict results to a specific resource type | -| `video_duration` | string | No | Filter videos by duration (only applies when type is 'video') | - -## `youtube_subscriptions_delete` - -Unsubscribe the authenticated user from a YouTube channel using the subscription ID. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `subscription_id` | string | Yes | ID of the subscription to delete | - -## `youtube_subscriptions_insert` - -Subscribe the authenticated user to a YouTube channel. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel_id` | string | Yes | ID of the YouTube channel to subscribe to | - -## `youtube_subscriptions_list` - -Retrieve a list of YouTube channel subscriptions for the authenticated user or a specific channel. You must provide exactly one filter: channel_id, id, mine, my_recent_subscribers, or my_subscribers. Requires a valid YouTube OAuth2 connection with youtube.readonly scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channel_id` | string | No | Return subscriptions for a specific channel. Use instead of id, mine, my_recent_subscribers, or my_subscribers. | -| `for_channel_id` | string | No | Filter subscriptions to specific channels (comma-separated channel IDs) | -| `id` | string | No | Comma-separated list of subscription IDs to retrieve. Use instead of channel_id, mine, my_recent_subscribers, or my_subscribers. | -| `max_results` | integer | No | Maximum number of subscriptions to return (0-50, default: 5) | -| `mine` | boolean | No | Return subscriptions for the authenticated user. Use instead of channel_id, id, my_recent_subscribers, or my_subscribers. | -| `my_recent_subscribers` | boolean | No | Return the authenticated user's recent subscribers. Use instead of channel_id, id, mine, or my_subscribers. | -| `my_subscribers` | boolean | No | Return the authenticated user's subscribers. Use instead of channel_id, id, mine, or my_recent_subscribers. | -| `order` | string | No | Sort order for subscriptions | -| `page_token` | string | No | Token for pagination | -| `part` | string | Yes | Comma-separated list of subscription resource parts to include | - -## `youtube_video_categories_list` - -Retrieve a list of YouTube video categories available in a given region or by ID. You must provide exactly one filter: id or region_code. The part parameter is fixed to 'snippet'. Useful for setting the category when updating a video. Requires youtube.readonly scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `hl` | string | No | Language for the category names in the response (BCP-47) | -| `id` | string | No | Comma-separated list of category IDs to retrieve. Use instead of region_code. | -| `region_code` | string | No | ISO 3166-1 alpha-2 country code to retrieve categories available in that region. Use instead of id. | - -## `youtube_videos_delete` - -Permanently delete a YouTube video. This action cannot be undone. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `video_id` | string | Yes | ID of the video to delete | - -## `youtube_videos_get_rating` - -Retrieve the authenticated user's rating (like, dislike, or none) for one or more YouTube videos. The part parameter is fixed to 'id'. Requires youtube.readonly scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Comma-separated list of YouTube video IDs to get ratings for | - -## `youtube_videos_list` - -Retrieve detailed information about one or more YouTube videos including statistics, snippet, content details, and status. You must provide exactly one filter: id, chart, or my_rating. Requires a valid YouTube OAuth2 connection. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `chart` | string | No | Retrieve a chart of the most popular videos. Use instead of id or my_rating. | -| `id` | string | No | Comma-separated list of YouTube video IDs. Use instead of chart or my_rating. | -| `max_results` | integer | No | Maximum number of results to return when using chart filter (1-50, default: 5) | -| `my_rating` | string | No | Filter videos by the authenticated user's rating. Use instead of id or chart. | -| `page_token` | string | No | Token for pagination | -| `part` | string | Yes | Comma-separated list of video resource parts to include in the response | -| `region_code` | string | No | ISO 3166-1 alpha-2 country code to filter trending videos by region | -| `video_category_id` | string | No | Filter most popular videos by category ID | - -## `youtube_videos_rate` - -Like, dislike, or remove a rating from a YouTube video on behalf of the authenticated user. Requires youtube scope with youtube.force-ssl. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `rating` | string | Yes | Rating to apply to the video | -| `video_id` | string | Yes | YouTube video ID to rate | - -## `youtube_videos_update` - -Update metadata for an existing YouTube video. When updating snippet, both title and category_id are required together. Requires youtube scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `category_id` | string | No | YouTube video category ID. Required together with title when updating snippet. | -| `default_language` | string | No | Language of the video | -| `description` | string | No | New video description | -| `embeddable` | boolean | No | Whether the video can be embedded | -| `license` | string | No | Video license | -| `privacy_status` | string | No | New privacy setting | -| `public_stats_viewable` | boolean | No | Whether stats are publicly visible | -| `tags` | `array` | No | Video tags | -| `title` | string | No | New video title. Required together with category_id when updating snippet. | -| `video_id` | string | Yes | ID of the video to update | + diff --git a/src/content/docs/reference/agent-connectors/zendesk.mdx b/src/content/docs/reference/agent-connectors/zendesk.mdx index b9902eb0c..aaecb5257 100644 --- a/src/content/docs/reference/agent-connectors/zendesk.mdx +++ b/src/content/docs/reference/agent-connectors/zendesk.mdx @@ -2,19 +2,19 @@ title: Zendesk description: Connect to Zendesk. Manage customer support tickets, users, organizations, and help desk operations tableOfContents: true +sidebar: + label: Zendesk head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/zendesk' import { SetupZendeskSection } from '@components/templates' import { UsageZendeskSection } from '@components/templates' @@ -40,176 +40,4 @@ Supports authentication: ## Tool list -## `zendesk_groups_list` - -List all groups in Zendesk. Groups are used to organize agents and route tickets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | number | No | Page number for pagination | -| `per_page` | number | No | Number of groups per page (max 100) | - -## `zendesk_organization_get` - -Retrieve details of a specific Zendesk organization by ID. Returns organization name, domain names, tags, notes, shared ticket settings, and custom fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional related data to include (e.g., lookup_relationship_fields) | -| `organization_id` | number | Yes | The ID of the organization to retrieve | - -## `zendesk_organizations_list` - -List all organizations in Zendesk with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | number | No | Page number for pagination | -| `per_page` | number | No | Number of organizations per page (max 100) | - -## `zendesk_search_tickets` - -Search Zendesk tickets using a query string. Supports Zendesk's search syntax (e.g., 'type:ticket status:open'). Zendesk limits search results to 1,000 total — the maximum valid page is floor(1000 / per_page) (e.g., per_page=100 → max page 10, per_page=25 → max page 40). Stop paginating when next_page is null or you reach the max page; requesting beyond the limit returns a 400 error. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | number | No | Page number for pagination. Max valid page = floor(1000 / per_page). Do not exceed this — Zendesk returns a 400 error beyond the 1,000 result limit. | -| `per_page` | number | No | Number of results per page (max 100). Determines the max page ceiling: floor(1000 / per_page). Higher values mean fewer pages but a lower max page number. | -| `query` | string | Yes | Search query string using Zendesk search syntax (e.g., 'type:ticket status:open assignee:me') | -| `sort_by` | string | No | Field to sort results by (updated_at, created_at, priority, status, ticket_type) | -| `sort_order` | string | No | Sort direction: asc or desc (default: desc) | - -## `zendesk_side_conversation_get` - -Retrieve a specific side conversation on a Zendesk ticket by its ID. Returns the side conversation's state, subject, participants, preview text, and timestamps. Requires the Collaboration add-on. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history of the side conversation. | -| `side_conversation_id` | string | Yes | The ID of the side conversation to retrieve | -| `ticket_id` | number | Yes | The ID of the parent ticket | - -## `zendesk_side_conversations_list` - -List all side conversations on a Zendesk ticket. Returns side conversations including their state, subject, participants, and preview text. Requires the Collaboration add-on. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history for each side conversation. | -| `ticket_id` | number | Yes | The ID of the ticket whose side conversations to list | - -## `zendesk_ticket_comments_list` - -Retrieve all comments (public replies and internal notes) for a specific Zendesk ticket. Returns comment body, author, timestamps, and attachments. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Sideloads to include. Accepts 'users' to list email CCs. | -| `include_inline_images` | boolean | No | When true, inline images are listed as attachments (default: false) | -| `sort_order` | string | No | Sort direction for comments: asc or desc (default: asc) | -| `ticket_id` | number | Yes | The ID of the ticket whose comments to list | - -## `zendesk_ticket_create` - -Create a new support ticket in Zendesk. Requires a comment/description and optionally a subject, priority, assignee, and tags. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_email` | string | No | Email of the agent to assign the ticket to | -| `comment_body` | string | Yes | The description or first comment of the ticket | -| `priority` | string | No | Ticket priority: urgent, high, normal, or low | -| `status` | string | No | Ticket status: new, open, pending, hold, solved, or closed | -| `subject` | string | No | The subject/title of the ticket | -| `tags` | `array` | No | List of tags to apply to the ticket | -| `type` | string | No | Ticket type: problem, incident, question, or task | - -## `zendesk_ticket_get` - -Retrieve details of a specific Zendesk ticket by ID. Returns ticket properties including status, priority, subject, requester, assignee, and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Comma-separated list of sideloads to include (e.g., users, groups, organizations) | -| `ticket_id` | number | Yes | The ID of the ticket to retrieve | - -## `zendesk_ticket_reply` - -Add a public reply or internal note to a Zendesk ticket. Set public to false for internal notes visible only to agents. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | Yes | The reply message content (plain text, markdown supported) | -| `public` | boolean | No | Whether the comment is public (true) or an internal note (false). Defaults to true. | -| `ticket_id` | number | Yes | The ID of the ticket to reply to | - -## `zendesk_ticket_update` - -Update an existing Zendesk ticket. Change status, priority, assignee, subject, tags, or any other writable ticket field. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_email` | string | No | Email of the agent to assign the ticket to | -| `assignee_id` | number | No | ID of the agent to assign the ticket to | -| `group_id` | number | No | ID of the group to assign the ticket to | -| `priority` | string | No | Ticket priority: urgent, high, normal, or low | -| `status` | string | No | Ticket status: new, open, pending, hold, solved, or closed | -| `subject` | string | No | New subject/title for the ticket | -| `tags` | `array` | No | List of tags to set on the ticket (replaces existing tags) | -| `ticket_id` | number | Yes | The ID of the ticket to update | -| `type` | string | No | Ticket type: problem, incident, question, or task | - -## `zendesk_tickets_list` - -List tickets in Zendesk with sorting and pagination. Returns tickets for the authenticated agent's account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | number | No | Page number for pagination | -| `per_page` | number | No | Number of tickets per page (max 100) | -| `sort_by` | string | No | Field to sort by: created_at, updated_at, priority, status, ticket_type | -| `sort_order` | string | No | Sort direction: asc or desc (default: desc) | - -## `zendesk_user_create` - -Create a new user in Zendesk. Can create end-users (customers), agents, or admins. Email is required for end-users. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | No | Primary email address of the user | -| `name` | string | Yes | Full name of the user | -| `organization_id` | number | No | ID of the organization to associate the user with | -| `phone` | string | No | Primary phone number (E.164 format, e.g. +15551234567) | -| `role` | string | No | User role: end-user, agent, or admin. Defaults to end-user. | -| `verified` | boolean | No | Whether the user's identity is verified. Defaults to false. | - -## `zendesk_user_get` - -Retrieve details of a specific Zendesk user by ID. Returns user profile including name, email, role, organization, and account status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Comma-separated list of sideloads to include | -| `user_id` | number | Yes | The ID of the user to retrieve | - -## `zendesk_users_list` - -List users in Zendesk. Filter by role (end-user, agent, admin) with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page` | number | No | Page number for pagination | -| `per_page` | number | No | Number of users per page (max 100) | -| `role` | string | No | Filter by role: end-user, agent, or admin | -| `sort` | string | No | Field to sort by. Prefix with - for descending (e.g. -created_at) | - -## `zendesk_views_list` - -List ticket views in Zendesk. Views are saved filters for organizing tickets by status, assignee, tags, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `access` | string | No | Filter by access level: personal, shared, or account | -| `page` | number | No | Page number for pagination | -| `per_page` | number | No | Number of views per page (max 100) | -| `sort_by` | string | No | Field to sort by: title, updated_at, created_at, or position | -| `sort_order` | string | No | Sort direction: asc or desc | + diff --git a/src/content/docs/reference/agent-connectors/zoom.mdx b/src/content/docs/reference/agent-connectors/zoom.mdx index 0e8fe503c..504cd0cf1 100644 --- a/src/content/docs/reference/agent-connectors/zoom.mdx +++ b/src/content/docs/reference/agent-connectors/zoom.mdx @@ -2,19 +2,19 @@ title: Zoom description: Connect to Zoom. Schedule meetings, manage recordings, and handle video conferencing workflows tableOfContents: true +sidebar: + label: Zoom head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/zoom' import { SetupZoomSection } from '@components/templates' import { UsageZoomSection } from '@components/templates' diff --git a/src/data/agent-connectors/figma.ts b/src/data/agent-connectors/figma.ts index 27e07dbbb..0055e1db1 100644 --- a/src/data/agent-connectors/figma.ts +++ b/src/data/agent-connectors/figma.ts @@ -2,1081 +2,916 @@ import type { Tool } from '../../types/agent-connectors' export const tools: Tool[] = [ { - name: 'figma_me_get', - description: - "Returns the authenticated user's profile information including name, email, handle, and profile image URL. No parameters required.", - params: [], - }, - { - name: 'figma_file_get', - description: - "Returns a Figma file's full document tree including all nodes, components, styles, and metadata.", + name: 'figma_activity_logs_list', + description: `Returns activity log events for an organization (Enterprise only). Includes events for file edits, permissions changes, and user actions.`, params: [ { - name: 'file_key', + name: 'cursor', type: 'string', - required: true, - description: 'The unique key identifying the Figma file (found in the file URL)', + required: false, + description: `Cursor from previous response for pagination.`, }, { - name: 'version', - type: 'string', + name: 'end_time', + type: 'integer', required: false, - description: 'A specific version ID to retrieve; omit for the latest version', + description: `Unix timestamp (seconds) to stop fetching events at.`, }, { - name: 'ids', + name: 'event_type', type: 'string', required: false, - description: 'Comma-separated list of node IDs to limit the response to specific nodes', + description: `Filter by a specific event type, e.g. 'file.update'.`, }, { - name: 'depth', + name: 'limit', type: 'integer', required: false, - description: 'Maximum depth of the document tree to return', - }, - { - name: 'geometry', - type: 'string', - required: false, - description: 'Set to `paths` to export vector path data for nodes', + description: `Maximum number of events to return (1-1000, default 100).`, }, { - name: 'plugin_data', + name: 'order', type: 'string', required: false, - description: 'Comma-separated list of plugin IDs to include plugin-specific data', + description: `Sort order: asc or desc by timestamp. Default is desc.`, }, { - name: 'branch_data', - type: 'boolean', + name: 'start_time', + type: 'integer', required: false, - description: 'Whether to include branch metadata in the response', + description: `Unix timestamp (seconds) to start fetching events from.`, }, ], }, { - name: 'figma_file_nodes_get', - description: - 'Returns specific nodes from a Figma file by their node IDs, along with their children and associated styles and components.', + name: 'figma_comment_reaction_create', + description: `Adds an emoji reaction to a comment in a Figma file.`, params: [ { - name: 'file_key', + name: 'comment_id', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The ID of the comment to react to.`, }, { - name: 'ids', + name: 'emoji', type: 'string', required: true, - description: 'Comma-separated list of node IDs to fetch', + description: `The emoji to react with (e.g. ':thumbsup:').`, }, { - name: 'version', + name: 'file_key', type: 'string', - required: false, - description: 'A specific version ID to retrieve', + required: true, + description: `The unique key of the Figma file.`, }, + ], + }, + { + name: 'figma_comment_reaction_delete', + description: `Removes the authenticated user's emoji reaction from a comment in a Figma file.`, + params: [ { - name: 'depth', - type: 'integer', - required: false, - description: 'Maximum depth of the subtree to return', + name: 'comment_id', + type: 'string', + required: true, + description: `The ID of the comment to remove reaction from.`, }, { - name: 'geometry', + name: 'emoji', type: 'string', - required: false, - description: 'Set to `paths` to export vector path data', + required: true, + description: `The emoji reaction to remove (e.g. ':thumbsup:').`, }, { - name: 'plugin_data', + name: 'file_key', type: 'string', - required: false, - description: 'Comma-separated list of plugin IDs for plugin-specific data', + required: true, + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_file_images_render', - description: - 'Renders nodes from a Figma file as images (PNG, JPG, SVG, or PDF) and returns download URLs.', + name: 'figma_comment_reactions_list', + description: `Returns a list of emoji reactions on a specific comment in a Figma file.`, params: [ { - name: 'file_key', + name: 'comment_id', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The ID of the comment to get reactions for.`, }, { - name: 'ids', + name: 'cursor', type: 'string', - required: true, - description: 'Comma-separated list of node IDs to render', - }, - { - name: 'scale', - type: 'number', required: false, - description: 'Image scale factor between 0.01 and 4 (default: 1)', + description: `Pagination cursor for next page of results.`, }, { - name: 'format', + name: 'file_key', type: 'string', - required: false, - description: 'Output format: `png`, `jpg`, `svg`, or `pdf` (default: `png`)', - }, - { - name: 'svg_include_id', - type: 'boolean', - required: false, - description: 'Whether to include node IDs as attributes in SVG output', - }, - { - name: 'svg_simplify_stroke', - type: 'boolean', - required: false, - description: 'Whether to simplify inside/outside strokes in SVG output', - }, - { - name: 'use_absolute_bounds', - type: 'boolean', - required: false, - description: "Whether to use the node's absolute bounding box for cropping", + required: true, + description: `The unique key of the Figma file.`, }, + ], + }, + { + name: 'figma_component_get', + description: `Returns metadata for a published component by its key, including name, description, thumbnail, and containing file information.`, + params: [ { - name: 'version', + name: 'key', type: 'string', - required: false, - description: 'A specific version ID to render', + required: true, + description: `The unique key of the component.`, }, ], }, { - name: 'figma_file_image_fills_get', - description: - 'Returns download URLs for all image fills used in a Figma file. Image fills are images applied as fills to nodes.', + name: 'figma_component_set_get', + description: `Returns metadata for a published component set (a group of related component variants) by its key.`, params: [ { - name: 'file_key', + name: 'key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The unique key of the component set.`, }, ], }, { - name: 'figma_file_versions_list', - description: - 'Returns the version history of a Figma file, including version IDs, labels, descriptions, and creation timestamps.', + name: 'figma_dev_resource_create', + description: `Creates a dev resource (external link) attached to a node in a Figma file, such as a link to Storybook, Jira, or documentation.`, params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The key of the Figma file containing the target node.`, }, { - name: 'page_size', - type: 'integer', - required: false, - description: 'Number of versions to return per page', + name: 'name', + type: 'string', + required: true, + description: `Display name for the dev resource link.`, }, { - name: 'before', - type: 'integer', - required: false, - description: 'Cursor for backward pagination; returns versions before this version ID', + name: 'node_id', + type: 'string', + required: true, + description: `The ID of the node to attach the dev resource to.`, }, { - name: 'after', - type: 'integer', - required: false, - description: 'Cursor for forward pagination; returns versions after this version ID', + name: 'url', + type: 'string', + required: true, + description: `The URL of the external resource.`, }, ], }, { - name: 'figma_file_comments_list', - description: - 'Returns all comments on a Figma file, including their text, author, position, and resolved status.', + name: 'figma_dev_resource_delete', + description: `Permanently deletes a dev resource from a node in a Figma file.`, params: [ { - name: 'file_key', + name: 'dev_resource_id', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The ID of the dev resource to delete.`, }, { - name: 'as_md', - type: 'boolean', - required: false, - description: 'Whether to return comment text formatted as Markdown', + name: 'file_key', + type: 'string', + required: true, + description: `The key of the Figma file containing the dev resource.`, }, ], }, { - name: 'figma_file_comment_create', - description: - 'Posts a new comment on a Figma file. Can be placed at a specific canvas position or anchored to a specific node.', + name: 'figma_dev_resource_update', + description: `Updates an existing dev resource attached to a node in a Figma file.`, params: [ { - name: 'file_key', + name: 'dev_resource_id', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The ID of the dev resource to update.`, }, { - name: 'message', + name: 'name', type: 'string', - required: true, - description: 'The text content of the comment', - }, - { - name: 'client_meta', - type: 'object', required: false, - description: 'Coordinates or node anchor for placing the comment on the canvas', + description: `New display name for the dev resource.`, }, { - name: 'comment_id', + name: 'url', type: 'string', required: false, - description: 'ID of the parent comment to reply to an existing thread', + description: `New URL for the dev resource.`, }, ], }, { - name: 'figma_file_comment_delete', - description: - 'Deletes a specific comment from a Figma file. Only the comment author or file owner can delete a comment.', + name: 'figma_dev_resources_list', + description: `Returns dev resources (links to external tools like Storybook, Jira, etc.) attached to nodes in a Figma file.`, params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The key of the Figma file to get dev resources for.`, }, { - name: 'comment_id', + name: 'node_ids', type: 'string', - required: true, - description: 'The ID of the comment to delete', + required: false, + description: `Comma-separated node IDs to filter by. Omit to return all dev resources in the file.`, }, ], }, { - name: 'figma_comment_reactions_list', - description: 'Returns a list of emoji reactions on a specific comment in a Figma file.', + name: 'figma_file_comment_create', + description: `Posts a new comment on a Figma file. Can be placed at a specific canvas position or anchored to a specific node.`, params: [ { - name: 'file_key', + name: 'client_meta', type: 'string', - required: true, - description: 'The unique key identifying the Figma file', + required: false, + description: `JSON string specifying position or node anchor for the comment, e.g. {"node_id":"1:2","node_offset":{"x":0,"y":0}}.`, }, { - name: 'comment_id', + name: 'file_key', type: 'string', required: true, - description: 'The ID of the comment to list reactions for', + description: `The unique key of the Figma file.`, }, { - name: 'cursor', + name: 'message', type: 'string', - required: false, - description: 'Pagination cursor for fetching the next page of results', + required: true, + description: `The text content of the comment.`, }, ], }, { - name: 'figma_comment_reaction_create', - description: 'Adds an emoji reaction to a comment in a Figma file.', + name: 'figma_file_comment_delete', + description: `Deletes a specific comment from a Figma file. Only the comment author or file owner can delete a comment.`, params: [ - { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the Figma file', - }, { name: 'comment_id', type: 'string', required: true, - description: 'The ID of the comment to react to', + description: `The ID of the comment to delete.`, }, { - name: 'emoji', + name: 'file_key', type: 'string', required: true, - description: 'The emoji to add as a reaction (e.g., `:heart:`, `:+1:`)', + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_comment_reaction_delete', - description: "Removes the authenticated user's emoji reaction from a comment in a Figma file.", + name: 'figma_file_comments_list', + description: `Returns all comments left on a Figma file, including their text, author, position, and resolved status.`, params: [ { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the Figma file', + name: 'as_md', + type: 'boolean', + required: false, + description: `If true, returns comment text as Markdown.`, }, { - name: 'comment_id', + name: 'file_key', type: 'string', required: true, - description: 'The ID of the comment to remove the reaction from', + description: `The unique key of the Figma file.`, }, + ], + }, + { + name: 'figma_file_component_sets_list', + description: `Returns all published component sets in a Figma file.`, + params: [ { - name: 'emoji', + name: 'file_key', type: 'string', required: true, - description: 'The emoji reaction to remove (e.g., `:heart:`, `:+1:`)', + description: `The unique key of the Figma file.`, }, ], }, { name: 'figma_file_components_list', - description: - 'Returns a list of all published components in a Figma file, including their keys, names, descriptions, and thumbnails.', + description: `Returns a list of all published components in a Figma file, including their keys, names, descriptions, and thumbnails.`, params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_component_get', - description: - 'Returns metadata for a published component by its key, including name, description, thumbnail, and containing file information.', + name: 'figma_file_get', + description: `Returns a Figma file's full document tree including all nodes, components, styles, and metadata.`, params: [ { - name: 'key', + name: 'depth', + type: 'integer', + required: false, + description: `Depth of the document tree to return (1-4). Lower depth returns faster.`, + }, + { + name: 'file_key', type: 'string', required: true, - description: 'The key of the published component (from `figma_file_components_list`)', + description: `The unique key of the Figma file (found in the file URL).`, + }, + { + name: 'version', + type: 'string', + required: false, + description: `A specific version ID to get. Omit to get the current version.`, }, ], }, { - name: 'figma_file_component_sets_list', - description: 'Returns all published component sets in a Figma file.', + name: 'figma_file_image_fills_get', + description: `Returns download URLs for all image fills used in a Figma file. Image fills are images that have been applied as fills to nodes.`, params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_component_set_get', - description: - 'Returns metadata for a published component set (a group of related component variants) by its key.', + name: 'figma_file_images_render', + description: `Renders nodes from a Figma file as images (PNG, JPG, SVG, or PDF) and returns URLs to download them.`, params: [ { - name: 'key', + name: 'file_key', type: 'string', required: true, - description: 'The key of the published component set', + description: `The unique key of the Figma file.`, }, - ], - }, - { - name: 'figma_team_components_list', - description: - 'Returns all published components in a Figma team library, with pagination support.', - params: [ - { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, { - name: 'page_size', - type: 'integer', + name: 'format', + type: 'string', required: false, - description: 'Number of components to return per page', + description: `Image format: jpg, png, svg, or pdf. Default is png.`, }, { - name: 'after', - type: 'integer', + name: 'ids', + type: 'string', + required: true, + description: `Comma-separated list of node IDs to render.`, + }, + { + name: 'scale', + type: 'number', required: false, - description: 'Cursor for forward pagination', + description: `Image scale factor (0.01 to 4). Default is 1.`, }, { - name: 'before', - type: 'integer', + name: 'version', + type: 'string', required: false, - description: 'Cursor for backward pagination', + description: `A specific version ID to render from.`, }, ], }, { - name: 'figma_team_component_sets_list', - description: - 'Returns all published component sets in a Figma team library, with pagination support.', + name: 'figma_file_nodes_get', + description: `Returns specific nodes from a Figma file by their node IDs, along with their children and associated styles and components.`, params: [ - { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, { - name: 'page_size', + name: 'depth', type: 'integer', required: false, - description: 'Number of component sets to return per page', + description: `Depth of the document tree to return for each node.`, }, { - name: 'after', - type: 'integer', - required: false, - description: 'Cursor for forward pagination', + name: 'file_key', + type: 'string', + required: true, + description: `The unique key of the Figma file.`, }, { - name: 'before', - type: 'integer', + name: 'ids', + type: 'string', + required: true, + description: `Comma-separated list of node IDs to retrieve.`, + }, + { + name: 'version', + type: 'string', required: false, - description: 'Cursor for backward pagination', + description: `A specific version ID to fetch nodes from.`, }, ], }, { name: 'figma_file_styles_list', - description: - 'Returns all published styles in a Figma file, including color, text, effect, and grid styles.', + description: `Returns all published styles in a Figma file, including color, text, effect, and grid styles.`, params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_style_get', - description: - 'Returns metadata for a published style by its key, including name, description, style type, and containing file information.', + name: 'figma_file_variables_local_get', + description: `Returns all local variables and variable collections defined in a Figma file. Requires the variables:read scope.`, params: [ { - name: 'key', + name: 'file_key', type: 'string', required: true, - description: 'The key of the published style', + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_team_styles_list', - description: 'Returns all published styles in a Figma team library, with pagination support.', + name: 'figma_file_variables_published_get', + description: `Returns all published variables and variable collections from a Figma file's library. Requires the variables:read scope.`, params: [ - { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, { - name: 'page_size', - type: 'integer', - required: false, - description: 'Number of styles to return per page', - }, - { - name: 'after', - type: 'integer', - required: false, - description: 'Cursor for forward pagination', - }, - { - name: 'before', - type: 'integer', - required: false, - description: 'Cursor for backward pagination', + name: 'file_key', + type: 'string', + required: true, + description: `The unique key of the Figma file.`, }, ], }, { - name: 'figma_file_variables_local_get', - description: - 'Returns all local variables and variable collections defined in a Figma file. Requires the `file_variables:read` scope.', + name: 'figma_file_variables_update', + description: `Creates, updates, or deletes variables and variable collections in a Figma file. Accepts a JSON payload describing the changes. Requires the variables:write scope.`, params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The unique key of the Figma file.`, }, - ], - }, - { - name: 'figma_file_variables_published_get', - description: - "Returns all published variables and variable collections from a Figma file's library. Requires the `file_variables:read` scope.", - params: [ { - name: 'file_key', + name: 'payload', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `JSON string with variableCollections, variables, and variableModeValues arrays describing changes to apply.`, }, ], }, { - name: 'figma_file_variables_update', - description: - 'Creates, updates, or deletes variables and variable collections in a Figma file. Accepts a JSON payload describing the changes. Requires the `file_variables:write` scope.', + name: 'figma_file_versions_list', + description: `Returns the version history of a Figma file, including version IDs, labels, descriptions, and creation timestamps.`, params: [ { - name: 'file_key', + name: 'after', type: 'string', - required: true, - description: 'The unique key identifying the Figma file', + required: false, + description: `Return versions created after this version ID (for pagination).`, }, { - name: 'variableCollections', - type: 'array', + name: 'before', + type: 'string', required: false, - description: 'Variable collection changes: create, update, or delete collections', + description: `Return versions created before this version ID (for pagination).`, }, { - name: 'variableModes', - type: 'array', - required: false, - description: 'Variable mode changes: create, update, or delete modes within collections', + name: 'file_key', + type: 'string', + required: true, + description: `The unique key of the Figma file.`, }, { - name: 'variables', - type: 'array', + name: 'page_size', + type: 'integer', required: false, - description: 'Variable changes: create, update, or delete individual variables', + description: `Number of versions to return per page.`, }, ], }, { - name: 'figma_team_get', - description: 'Returns metadata about a Figma team, including its name and member count.', - params: [ - { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, - ], - }, - { - name: 'figma_team_projects_list', - description: - 'Returns all projects within a Figma team that the authenticated user has access to.', - params: [ - { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, - ], - }, - { - name: 'figma_project_files_list', - description: - 'Returns all files in a Figma project, including file keys, names, thumbnails, and last modified timestamps.', + name: 'figma_library_analytics_component_actions_get', + description: `Returns analytics data on component insertion, detachment, and usage actions from a library file. Enterprise only.`, params: [ { - name: 'project_id', + name: 'cursor', type: 'string', - required: true, - description: 'The ID of the Figma project', + required: false, + description: `Pagination cursor from previous response.`, }, { - name: 'branch_data', - type: 'boolean', + name: 'end_date', + type: 'string', required: false, - description: 'Whether to include branch metadata for each file', + description: `End date for analytics in YYYY-MM-DD format.`, }, - ], - }, - { - name: 'figma_dev_resources_list', - description: - 'Returns dev resources (links to external tools like Storybook, Jira, etc.) attached to nodes in a Figma file.', - params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The key of the library Figma file.`, }, { - name: 'node_id', + name: 'group_by', + type: 'string', + required: true, + description: `Dimension to group results by: component or team.`, + }, + { + name: 'start_date', type: 'string', required: false, - description: 'Filter results to dev resources attached to a specific node ID', + description: `Start date for analytics in YYYY-MM-DD format.`, }, ], }, { - name: 'figma_dev_resource_create', - description: - 'Creates a dev resource (external link) attached to a node in a Figma file, such as a link to Storybook, Jira, or documentation.', + name: 'figma_library_analytics_component_usages_get', + description: `Returns a snapshot of how many times each component from a library is used across the organization. Enterprise only.`, params: [ { - name: 'file_key', + name: 'cursor', type: 'string', - required: true, - description: 'The unique key identifying the Figma file', + required: false, + description: `Pagination cursor from previous response.`, }, { - name: 'node_id', + name: 'file_key', type: 'string', required: true, - description: 'The ID of the node to attach the dev resource to', + description: `The key of the library Figma file.`, }, + ], + }, + { + name: 'figma_library_analytics_style_actions_get', + description: `Returns analytics data on style insertion and detachment actions from a library file. Enterprise only.`, + params: [ { - name: 'name', + name: 'cursor', type: 'string', - required: true, - description: 'Display name for the dev resource link', + required: false, + description: `Pagination cursor from previous response.`, }, { - name: 'url', + name: 'end_date', type: 'string', - required: true, - description: 'The URL of the external resource', + required: false, + description: `End date for analytics in YYYY-MM-DD format.`, }, - ], - }, - { - name: 'figma_dev_resource_update', - description: 'Updates an existing dev resource attached to a node in a Figma file.', - params: [ { name: 'file_key', type: 'string', required: true, - description: 'The unique key identifying the Figma file', + description: `The key of the library Figma file.`, }, { - name: 'dev_resource_id', + name: 'group_by', type: 'string', required: true, - description: 'The ID of the dev resource to update', - }, - { - name: 'name', - type: 'string', - required: false, - description: 'Updated display name for the dev resource', + description: `Dimension to group results by: style or team.`, }, { - name: 'url', + name: 'start_date', type: 'string', required: false, - description: 'Updated URL for the dev resource', + description: `Start date for analytics in YYYY-MM-DD format.`, }, ], }, { - name: 'figma_dev_resource_delete', - description: 'Permanently deletes a dev resource from a node in a Figma file.', + name: 'figma_library_analytics_style_usages_get', + description: `Returns a snapshot of how many times each style from a library is used across the organization. Enterprise only.`, params: [ { - name: 'file_key', + name: 'cursor', type: 'string', - required: true, - description: 'The unique key identifying the Figma file', + required: false, + description: `Pagination cursor from previous response.`, }, { - name: 'dev_resource_id', + name: 'file_key', type: 'string', required: true, - description: 'The ID of the dev resource to delete', + description: `The key of the library Figma file.`, }, ], }, { - name: 'figma_webhook_create', - description: - 'Creates a new webhook that sends events to the specified endpoint URL when Figma events occur in a team. Requires the `webhooks:write` scope.', + name: 'figma_library_analytics_variable_actions_get', + description: `Returns analytics data on variable actions from a library file. Enterprise only.`, params: [ { - name: 'team_id', + name: 'cursor', type: 'string', - required: true, - description: 'The ID of the Figma team to register the webhook for', + required: false, + description: `Pagination cursor from previous response.`, }, { - name: 'event_type', + name: 'end_date', type: 'string', - required: true, - description: - 'The event type that triggers the webhook (e.g., `FILE_UPDATE`, `FILE_VERSION_UPDATE`, `FILE_DELETE`, `LIBRARY_PUBLISH`, `FILE_COMMENT`)', + required: false, + description: `End date for analytics in YYYY-MM-DD format.`, }, { - name: 'endpoint', + name: 'file_key', type: 'string', required: true, - description: 'The HTTPS URL that receives webhook POST requests', + description: `The key of the library Figma file.`, }, { - name: 'passcode', + name: 'group_by', type: 'string', required: true, - description: 'A secret string included in each webhook payload for request verification', + description: `Dimension to group results by: variable or team.`, }, { - name: 'status', - type: 'string', - required: false, - description: 'Webhook status: `ACTIVE` or `PAUSED` (default: `ACTIVE`)', - }, - { - name: 'description', + name: 'start_date', type: 'string', required: false, - description: "A human-readable description of the webhook's purpose", + description: `Start date for analytics in YYYY-MM-DD format.`, }, ], }, { - name: 'figma_webhook_get', - description: - 'Returns details of a specific Figma webhook by its ID, including event type, endpoint, and status.', + name: 'figma_library_analytics_variable_usages_get', + description: `Returns a snapshot of how many times each variable from a library is used across the organization. Enterprise only.`, params: [ { - name: 'webhook_id', + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from previous response.`, + }, + { + name: 'file_key', type: 'string', required: true, - description: 'The ID of the webhook to retrieve', + description: `The key of the library Figma file.`, }, ], }, { - name: 'figma_webhook_update', - description: "Updates an existing Figma webhook's endpoint, passcode, status, or description.", + name: 'figma_me_get', + description: `Returns the authenticated user's information including name, email, and profile image URL.`, + params: [], + }, + { + name: 'figma_payments_get', + description: `Returns payment and plan information for a Figma user or resource, including subscription status and plan type.`, params: [ { - name: 'webhook_id', - type: 'string', - required: true, - description: 'The ID of the webhook to update', - }, - { - name: 'endpoint', + name: 'resource_id', type: 'string', required: false, - description: 'Updated HTTPS URL to receive webhook events', + description: `The ID of the plugin or widget resource.`, }, { - name: 'passcode', + name: 'resource_type', type: 'string', required: false, - description: 'Updated secret for verifying webhook payloads', + description: `The type of resource: plugin or widget.`, }, { - name: 'status', - type: 'string', - required: false, - description: 'Updated status: `ACTIVE` or `PAUSED`', - }, - { - name: 'description', + name: 'user_id', type: 'string', required: false, - description: 'Updated description for the webhook', + description: `The ID of the user to get payment info for.`, }, ], }, { - name: 'figma_webhook_delete', - description: - 'Permanently deletes a Figma webhook. This stops all future event deliveries for this webhook.', + name: 'figma_project_files_list', + description: `Returns all files in a Figma project, including file keys, names, thumbnails, and last modified timestamps.`, params: [ { - name: 'webhook_id', + name: 'branch_data', + type: 'boolean', + required: false, + description: `If true, includes branch metadata for each file.`, + }, + { + name: 'project_id', type: 'string', required: true, - description: 'The ID of the webhook to delete', + description: `The ID of the Figma project.`, }, ], }, { - name: 'figma_team_webhooks_list', - description: 'Returns all webhooks registered for a Figma team.', + name: 'figma_style_get', + description: `Returns metadata for a published style by its key, including name, description, style type, and containing file information.`, params: [ - { name: 'team_id', type: 'string', required: true, description: 'The ID of the Figma team' }, + { name: 'key', type: 'string', required: true, description: `The unique key of the style.` }, ], }, { - name: 'figma_webhook_requests_list', - description: - 'Returns the delivery history for a webhook, including request payloads, response codes, and timestamps.', - params: [ - { - name: 'webhook_id', - type: 'string', - required: true, - description: 'The ID of the webhook to fetch request history for', - }, - ], - }, - { - name: 'figma_payments_get', - description: - 'Returns payment and plan information for a Figma user or resource, including subscription status and plan type.', + name: 'figma_team_component_sets_list', + description: `Returns all published component sets in a Figma team library, with pagination support.`, params: [ { - name: 'user_id', - type: 'string', + name: 'after', + type: 'integer', required: false, - description: 'The ID of the user to check payment status for', + description: `Cursor for the next page of results.`, }, { - name: 'community_file_id', - type: 'string', + name: 'before', + type: 'integer', required: false, - description: 'The ID of a community file to check resource payment status', + description: `Cursor for the previous page of results.`, }, { - name: 'plugin_id', - type: 'string', + name: 'page_size', + type: 'integer', required: false, - description: 'The ID of a plugin to check payment status for', + description: `Number of component sets to return per page.`, }, + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { - name: 'figma_activity_logs_list', - description: - 'Returns activity log events for an organization. Includes events for file edits, permissions changes, and user actions. Enterprise only: requires organization admin permissions.', + name: 'figma_team_components_list', + description: `Returns all published components in a Figma team library, with pagination support.`, params: [ { - name: 'org_id', - type: 'string', - required: true, - description: 'The ID of the Figma organization', - }, - { - name: 'events', - type: 'string', - required: false, - description: 'Comma-separated list of event types to filter by', - }, - { - name: 'start_time', + name: 'after', type: 'integer', required: false, - description: 'Unix timestamp (seconds) for the start of the time range', + description: `Cursor for the next page of results.`, }, { - name: 'end_time', + name: 'before', type: 'integer', required: false, - description: 'Unix timestamp (seconds) for the end of the time range', + description: `Cursor for the previous page of results.`, }, { - name: 'limit', + name: 'page_size', type: 'integer', required: false, - description: 'Number of events to return per page', - }, - { - name: 'next_page', - type: 'string', - required: false, - description: 'Pagination cursor returned by the previous response', + description: `Number of components to return per page.`, }, + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { - name: 'figma_library_analytics_component_actions_get', - description: - 'Returns analytics data on component insertion, detachment, and usage actions from a library file. Enterprise only: requires the `library_analytics:read` scope.', + name: 'figma_team_get', + description: `Returns metadata about a Figma team, including its name and member count.`, + params: [ + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, + ], + }, + { + name: 'figma_team_projects_list', + description: `Returns all projects within a Figma team that the authenticated user has access to.`, + params: [ + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, + ], + }, + { + name: 'figma_team_styles_list', + description: `Returns all published styles in a Figma team library, with pagination support.`, params: [ { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the library file', - }, - { - name: 'group_by', - type: 'string', - required: true, - description: 'Dimension to group results by: `component` or `team`', - }, - { - name: 'start_date', - type: 'string', - required: false, - description: 'Start date for the analytics range (ISO 8601 format, e.g., `2024-01-01`)', - }, - { - name: 'end_date', - type: 'string', + name: 'after', + type: 'integer', required: false, - description: 'End date for the analytics range (ISO 8601 format)', + description: `Cursor for the next page of results.`, }, { - name: 'order', - type: 'string', + name: 'before', + type: 'integer', required: false, - description: 'Sort order for results: `asc` or `desc`', + description: `Cursor for the previous page of results.`, }, { - name: 'cursor', - type: 'string', + name: 'page_size', + type: 'integer', required: false, - description: 'Pagination cursor for the next page of results', + description: `Number of styles to return per page.`, }, + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { - name: 'figma_library_analytics_component_usages_get', - description: - 'Returns a snapshot of how many times each component from a library is used across the organization. Enterprise only: requires the `library_analytics:read` scope.', + name: 'figma_team_webhooks_list', + description: `Returns all webhooks registered for a Figma team.`, params: [ - { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the library file', - }, - { - name: 'group_by', - type: 'string', - required: true, - description: 'Dimension to group results by: `component` or `team`', - }, - { - name: 'cursor', - type: 'string', - required: false, - description: 'Pagination cursor for the next page of results', - }, + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { - name: 'figma_library_analytics_style_actions_get', - description: - 'Returns analytics data on style insertion and detachment actions from a library file. Enterprise only: requires the `library_analytics:read` scope.', + name: 'figma_webhook_create', + description: `Creates a new webhook that sends events to the specified endpoint URL when Figma events occur in a team.`, params: [ { - name: 'file_key', + name: 'description', type: 'string', - required: true, - description: 'The unique key identifying the library file', + required: false, + description: `Optional description for the webhook.`, }, { - name: 'group_by', + name: 'endpoint', type: 'string', required: true, - description: 'Dimension to group results by: `style` or `team`', + description: `The HTTPS URL to send webhook payloads to.`, }, { - name: 'start_date', + name: 'event_type', type: 'string', - required: false, - description: 'Start date for the analytics range (ISO 8601 format)', + required: true, + description: `The event type to subscribe to: FILE_UPDATE, FILE_DELETE, FILE_VERSION_UPDATE, FILE_COMMENT, LIBRARY_PUBLISH.`, }, { - name: 'end_date', + name: 'passcode', type: 'string', - required: false, - description: 'End date for the analytics range (ISO 8601 format)', + required: true, + description: `A passcode included in the webhook payload for verification.`, }, { - name: 'order', + name: 'status', type: 'string', required: false, - description: 'Sort order for results: `asc` or `desc`', + description: `Webhook status: ACTIVE or PAUSED.`, }, { - name: 'cursor', + name: 'team_id', type: 'string', - required: false, - description: 'Pagination cursor for the next page of results', + required: true, + description: `The ID of the team to subscribe to events for.`, }, ], }, { - name: 'figma_library_analytics_style_usages_get', - description: - 'Returns a snapshot of how many times each style from a library is used across the organization. Enterprise only: requires the `library_analytics:read` scope.', + name: 'figma_webhook_delete', + description: `Permanently deletes a Figma webhook. This stops all future event deliveries for this webhook.`, params: [ { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the library file', - }, - { - name: 'group_by', + name: 'webhook_id', type: 'string', required: true, - description: 'Dimension to group results by: `style` or `team`', - }, - { - name: 'cursor', - type: 'string', - required: false, - description: 'Pagination cursor for the next page of results', + description: `The ID of the webhook to delete.`, }, ], }, { - name: 'figma_library_analytics_variable_actions_get', - description: - 'Returns analytics data on variable actions from a library file. Enterprise only: requires the `library_analytics:read` scope.', + name: 'figma_webhook_get', + description: `Returns details of a specific Figma webhook by its ID, including event type, endpoint, and status.`, + params: [ + { name: 'webhook_id', type: 'string', required: true, description: `The ID of the webhook.` }, + ], + }, + { + name: 'figma_webhook_requests_list', + description: `Returns the delivery history for a webhook, including request payloads, response codes, and timestamps.`, + params: [ + { name: 'webhook_id', type: 'string', required: true, description: `The ID of the webhook.` }, + ], + }, + { + name: 'figma_webhook_update', + description: `Updates an existing Figma webhook's endpoint, passcode, status, or description.`, params: [ { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the library file', - }, - { - name: 'group_by', - type: 'string', - required: true, - description: 'Dimension to group results by: `variable` or `team`', - }, - { - name: 'start_date', + name: 'description', type: 'string', required: false, - description: 'Start date for the analytics range (ISO 8601 format)', + description: `Updated description for the webhook.`, }, { - name: 'end_date', + name: 'endpoint', type: 'string', required: false, - description: 'End date for the analytics range (ISO 8601 format)', + description: `New HTTPS URL to send webhook payloads to.`, }, { - name: 'order', + name: 'passcode', type: 'string', required: false, - description: 'Sort order for results: `asc` or `desc`', + description: `New passcode for webhook verification.`, }, { - name: 'cursor', + name: 'status', type: 'string', required: false, - description: 'Pagination cursor for the next page of results', + description: `Webhook status: ACTIVE or PAUSED.`, }, - ], - }, - { - name: 'figma_library_analytics_variable_usages_get', - description: - 'Returns a snapshot of how many times each variable from a library is used across the organization. Enterprise only: requires the `library_analytics:read` scope.', - params: [ { - name: 'file_key', - type: 'string', - required: true, - description: 'The unique key identifying the library file', - }, - { - name: 'group_by', + name: 'webhook_id', type: 'string', required: true, - description: 'Dimension to group results by: `variable` or `team`', - }, - { - name: 'cursor', - type: 'string', - required: false, - description: 'Pagination cursor for the next page of results', + description: `The ID of the webhook to update.`, }, ], }, diff --git a/src/data/agent-connectors/snowflakekeyauth.ts b/src/data/agent-connectors/snowflakekeyauth.ts index 720e93ae5..c4cd0607e 100644 --- a/src/data/agent-connectors/snowflakekeyauth.ts +++ b/src/data/agent-connectors/snowflakekeyauth.ts @@ -1,357 +1,349 @@ -// src/data/agent-connectors/snowflakekeyauth.ts import type { Tool } from '../../types/agent-connectors' export const tools: Tool[] = [ { name: 'snowflakekeyauth_cancel_query', - description: 'Cancel a running Snowflake SQL API statement by statement handle.', + description: `Cancel a running Snowflake SQL API statement by statement handle.`, params: [ { - name: 'statement_handle', + name: 'request_id', type: 'string', - required: true, - description: 'Snowflake statement handle to cancel', + required: false, + description: `Optional request ID used when the statement was submitted`, }, { - name: 'request_id', + name: 'statement_handle', type: 'string', - required: false, - description: 'Optional request ID used when the statement was submitted', + required: true, + description: `Snowflake statement handle to cancel`, }, ], }, { name: 'snowflakekeyauth_execute_query', - description: - 'Execute one or more SQL statements against Snowflake using the SQL API. Use semicolons to submit multiple statements.', + description: `Execute one or more SQL statements against Snowflake using the SQL API. Requires a valid Snowflake OAuth2 connection. Use semicolons to submit multiple statements.`, params: [ - { - name: 'statement', - type: 'string', - required: true, - description: - 'SQL statement to execute. Use semicolons to send multiple statements in one request.', - }, { name: 'async', type: 'boolean', required: false, - description: 'Execute statement asynchronously and return a statement handle', + description: `Execute statement asynchronously and return a statement handle`, }, { name: 'bindings', type: 'object', required: false, - description: "Bind variables object for '?' placeholders in the SQL statement", + description: `Bind variables object for '?' placeholders in the SQL statement`, }, { name: 'database', type: 'string', required: false, - description: 'Database to use when executing the statement', + description: `Database to use when executing the statement`, }, { name: 'nullable', type: 'boolean', required: false, - description: 'When false, SQL NULL values are returned as the string "null"', + description: `When false, SQL NULL values are returned as the string "null"`, }, { name: 'parameters', type: 'object', required: false, - description: 'Statement-level Snowflake parameters as a JSON object', + description: `Statement-level Snowflake parameters as a JSON object`, }, { name: 'request_id', type: 'string', required: false, - description: 'Unique request identifier (UUID) used for idempotent retries', + description: `Unique request identifier (UUID) used for idempotent retries`, }, { name: 'retry', type: 'boolean', required: false, - description: - 'Set true when resubmitting a previously sent request with the same request_id', + description: `Set true when resubmitting a previously sent request with the same request_id`, }, { name: 'role', type: 'string', required: false, - description: 'Role to use when executing the statement', + description: `Role to use when executing the statement`, }, { name: 'schema', type: 'string', required: false, - description: 'Schema to use when executing the statement', + description: `Schema to use when executing the statement`, + }, + { + name: 'statement', + type: 'string', + required: true, + description: `SQL statement to execute. Use semicolons to send multiple statements in one request.`, }, { name: 'timeout', type: 'integer', required: false, - description: 'Maximum number of seconds to wait for statement execution', + description: `Maximum number of seconds to wait for statement execution`, }, { name: 'warehouse', type: 'string', required: false, - description: 'Warehouse to use when executing the statement', + description: `Warehouse to use when executing the statement`, }, ], }, { name: 'snowflakekeyauth_get_columns', - description: 'Query INFORMATION_SCHEMA.COLUMNS for column metadata.', + description: `Query INFORMATION_SCHEMA.COLUMNS for column metadata.`, params: [ - { name: 'database', type: 'string', required: true, description: 'Database name' }, { name: 'column_name_like', type: 'string', required: false, - description: 'Optional column name pattern', - }, - { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, - { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, - { name: 'table', type: 'string', required: false, description: 'Optional table filter' }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + description: `Optional column name pattern`, + }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { name: 'table', type: 'string', required: false, description: `Optional table filter` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_get_query_partition', - description: 'Get a specific result partition for a Snowflake SQL API statement.', + description: `Get a specific result partition for a Snowflake SQL API statement.`, params: [ { name: 'partition', type: 'integer', required: true, - description: 'Partition index to fetch (0-based)', + description: `Partition index to fetch (0-based)`, }, { - name: 'statement_handle', + name: 'request_id', type: 'string', - required: true, - description: 'Snowflake statement handle returned by execute_query', + required: false, + description: `Optional request ID used when the statement was submitted`, }, { - name: 'request_id', + name: 'statement_handle', type: 'string', - required: false, - description: 'Optional request ID used when the statement was submitted', + required: true, + description: `Snowflake statement handle returned by Execute Query`, }, ], }, { name: 'snowflakekeyauth_get_query_status', - description: - 'Get Snowflake SQL API statement status and first partition result metadata by statement handle.', + description: `Get Snowflake SQL API statement status and first partition result metadata by statement handle.`, params: [ { - name: 'statement_handle', + name: 'request_id', type: 'string', - required: true, - description: 'Snowflake statement handle returned by execute_query', + required: false, + description: `Optional request ID used when the statement was submitted`, }, { - name: 'request_id', + name: 'statement_handle', type: 'string', - required: false, - description: 'Optional request ID used when the statement was submitted', + required: true, + description: `Snowflake statement handle returned by Execute Query`, }, ], }, { name: 'snowflakekeyauth_get_referential_constraints', - description: 'Query INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS.', + description: `Query INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS.`, params: [ - { name: 'database', type: 'string', required: true, description: 'Database name' }, - { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, - { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, - { name: 'table', type: 'string', required: false, description: 'Optional table filter' }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { name: 'table', type: 'string', required: false, description: `Optional table filter` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_get_schemata', - description: 'Query INFORMATION_SCHEMA.SCHEMATA for schema metadata.', + description: `Query INFORMATION_SCHEMA.SCHEMATA for schema metadata.`, params: [ - { name: 'database', type: 'string', required: true, description: 'Database name' }, - { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'schema_like', type: 'string', required: false, - description: 'Optional schema pattern', + description: `Optional schema pattern`, }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_get_table_constraints', - description: 'Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS.', + description: `Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS.`, params: [ - { name: 'database', type: 'string', required: true, description: 'Database name' }, { name: 'constraint_type', type: 'string', required: false, - description: 'Optional constraint type filter', - }, - { name: 'limit', type: 'integer', required: false, description: 'Maximum rows' }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, - { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, - { name: 'table', type: 'string', required: false, description: 'Optional table filter' }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + description: `Optional constraint type filter`, + }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { name: 'table', type: 'string', required: false, description: `Optional table filter` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_get_tables', - description: 'Query INFORMATION_SCHEMA.TABLES for table metadata in a Snowflake database.', + description: `Query INFORMATION_SCHEMA.TABLES for table metadata in a Snowflake database.`, params: [ - { name: 'database', type: 'string', required: true, description: 'Database name' }, - { name: 'limit', type: 'integer', required: false, description: 'Maximum number of rows' }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, - { name: 'schema', type: 'string', required: false, description: 'Optional schema filter' }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum number of rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, { name: 'table_name_like', type: 'string', required: false, - description: 'Optional table name pattern', + description: `Optional table name pattern`, }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_show_databases_schemas', - description: 'Run SHOW DATABASES or SHOW SCHEMAS.', + description: `Run SHOW DATABASES or SHOW SCHEMAS.`, params: [ - { name: 'object_type', type: 'string', required: true, description: 'Object type to show' }, { name: 'database_name', type: 'string', required: false, - description: 'Optional database scope for SHOW SCHEMAS', + description: `Optional database scope for SHOW SCHEMAS`, }, { name: 'like_pattern', type: 'string', required: false, - description: 'Optional LIKE pattern', + description: `Optional LIKE pattern`, }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'object_type', type: 'string', required: true, description: `Object type to show` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_show_grants', - description: 'Run SHOW GRANTS in common modes (to role, to user, of role, on object).', + description: `Run SHOW GRANTS in common modes (to role, to user, of role, on object).`, params: [ - { name: 'grant_view', type: 'string', required: true, description: 'SHOW GRANTS variant' }, + { name: 'grant_view', type: 'string', required: true, description: `SHOW GRANTS variant` }, { name: 'object_name', type: 'string', required: false, - description: 'Object name for on_object', + description: `Object name for on_object`, }, { name: 'object_type', type: 'string', required: false, - description: 'Object type for on_object', + description: `Object type for on_object`, }, - { name: 'role', type: 'string', required: false, description: 'Optional execution role' }, + { name: 'role', type: 'string', required: false, description: `Optional execution role` }, { name: 'role_name', type: 'string', required: false, - description: 'Role name (for to_role/of_role)', + description: `Role name (for to_role/of_role)`, }, { name: 'user_name', type: 'string', required: false, - description: 'User name (for to_user)', + description: `User name (for to_user)`, }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_show_imported_exported_keys', - description: - 'Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. Use fully-qualified scope (database_name + schema_name + table_name) for reliable execution.', + description: `Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. For reliable execution in this environment, use fully-qualified scope (database_name + schema_name + table_name).`, params: [ { - name: 'key_direction', + name: 'database_name', type: 'string', - required: true, - description: 'Which command to run', + required: false, + description: `Optional database name (recommended with schema_name)`, }, { - name: 'table_name', + name: 'key_direction', type: 'string', required: true, - description: - 'Table name (use with schema_name and database_name for fully-qualified scope)', + description: `Which command to run`, }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, { - name: 'database_name', + name: 'schema_name', type: 'string', required: false, - description: 'Optional database name (recommended with schema_name)', + description: `Optional schema name (recommended with database_name)`, }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, { - name: 'schema_name', + name: 'table_name', type: 'string', - required: false, - description: 'Optional schema name (recommended with database_name)', + required: true, + description: `Table name (use with schema_name and database_name for fully-qualified scope)`, }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_show_primary_keys', - description: - 'Run SHOW PRIMARY KEYS with optional scope. When using schema_name (or schema_name + table_name), database_name is required.', + description: `Run SHOW PRIMARY KEYS with optional scope. When using schema_name (or schema_name + table_name), database_name is required for fully-qualified scope.`, params: [ { name: 'database_name', type: 'string', required: false, - description: 'Optional database name for scope (required when schema_name is set)', + description: `Optional database name for scope (required when schema_name is set)`, }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'schema_name', type: 'string', required: false, - description: 'Optional schema name for scope', + description: `Optional schema name for scope`, }, { name: 'table_name', type: 'string', required: false, - description: 'Optional table name for scope', + description: `Optional table name for scope`, }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, { name: 'snowflakekeyauth_show_warehouses', - description: 'Run SHOW WAREHOUSES.', + description: `Run SHOW WAREHOUSES.`, params: [ { name: 'like_pattern', type: 'string', required: false, - description: 'Optional LIKE pattern', + description: `Optional LIKE pattern`, }, - { name: 'role', type: 'string', required: false, description: 'Optional role' }, - { name: 'warehouse', type: 'string', required: false, description: 'Optional warehouse' }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], }, ] From 5bb1c142084c8210744ae8302f670f685486ddf9 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 16:11:23 +0530 Subject: [PATCH 14/23] updated all providers --- .../reference/agent-connectors/affinity.mdx | 135 +- .../reference/agent-connectors/apifymcp.mdx | 191 +- .../docs/reference/agent-connectors/brave.mdx | 222 +- .../reference/agent-connectors/evertrace.mdx | 261 +- .../reference/agent-connectors/granola.mdx | 31 +- .../reference/agent-connectors/jiminny.mdx | 163 +- .../reference/agent-connectors/linkedin.mdx | 458 +-- .../reference/agent-connectors/outreach.mdx | 576 +--- .../reference/agent-connectors/pagerduty.mdx | 483 +-- .../reference/agent-connectors/supadata.mdx | 103 +- .../reference/agent-connectors/twitter.mdx | 868 +---- .../reference/agent-connectors/vercel.mdx | 568 +--- src/data/agent-connectors/affinity.ts | 303 ++ src/data/agent-connectors/airtable.ts | 3 + src/data/agent-connectors/apifymcp.ts | 260 ++ src/data/agent-connectors/apollo.ts | 340 ++ src/data/agent-connectors/asana.ts | 3 + src/data/agent-connectors/attention.ts | 3 + src/data/agent-connectors/attio.ts | 1119 +++++++ src/data/agent-connectors/bigquery.ts | 3 + src/data/agent-connectors/brave.ts | 644 ++++ src/data/agent-connectors/chorus.ts | 3 + src/data/agent-connectors/clari_copilot.ts | 3 + src/data/agent-connectors/clickup.ts | 3 + src/data/agent-connectors/confluence.ts | 3 + src/data/agent-connectors/discord.ts | 214 ++ src/data/agent-connectors/dropbox.ts | 3 + src/data/agent-connectors/evertrace.ts | 485 +++ src/data/agent-connectors/exa.ts | 376 +++ src/data/agent-connectors/fathom.ts | 3 + src/data/agent-connectors/freshdesk.ts | 439 +++ src/data/agent-connectors/github.ts | 331 ++ src/data/agent-connectors/gitlab.ts | 2805 +++++++++++++++++ src/data/agent-connectors/gmail.ts | 311 ++ src/data/agent-connectors/gong.ts | 720 +++++ src/data/agent-connectors/google_ads.ts | 3 + src/data/agent-connectors/googlecalendar.ts | 460 +++ src/data/agent-connectors/googledocs.ts | 119 + src/data/agent-connectors/googledrive.ts | 138 + src/data/agent-connectors/googleforms.ts | 77 + src/data/agent-connectors/googlemeet.ts | 3 + src/data/agent-connectors/googlesheets.ts | 221 ++ src/data/agent-connectors/googleslides.ts | 58 + src/data/agent-connectors/granola.ts | 58 + src/data/agent-connectors/granolamcp.ts | 142 + src/data/agent-connectors/harvestapi.ts | 763 +++++ src/data/agent-connectors/hubspot.ts | 355 +++ src/data/agent-connectors/intercom.ts | 3 + src/data/agent-connectors/jiminny.ts | 337 ++ src/data/agent-connectors/jira.ts | 3 + src/data/agent-connectors/linear.ts | 163 + src/data/agent-connectors/linkedin.ts | 939 ++++++ src/data/agent-connectors/microsoftexcel.ts | 3 + src/data/agent-connectors/microsoftteams.ts | 3 + src/data/agent-connectors/microsoftword.ts | 3 + src/data/agent-connectors/monday.ts | 3 + src/data/agent-connectors/notion.ts | 716 +++++ src/data/agent-connectors/onedrive.ts | 3 + src/data/agent-connectors/onenote.ts | 3 + src/data/agent-connectors/outlook.ts | 838 +++++ src/data/agent-connectors/outreach.ts | 1427 +++++++++ src/data/agent-connectors/pagerduty.ts | 1297 ++++++++ src/data/agent-connectors/phantombuster.ts | 622 ++++ src/data/agent-connectors/pipedrive.ts | 1676 ++++++++++ src/data/agent-connectors/salesforce.ts | 1199 +++++++ src/data/agent-connectors/servicenow.ts | 3 + src/data/agent-connectors/sharepoint.ts | 3 + src/data/agent-connectors/slack.ts | 462 +++ src/data/agent-connectors/snowflake.ts | 349 ++ src/data/agent-connectors/supadata.ts | 202 ++ src/data/agent-connectors/trello.ts | 3 + src/data/agent-connectors/twitter.ts | 1962 ++++++++++++ src/data/agent-connectors/vercel.ts | 1278 ++++++++ src/data/agent-connectors/vimeo.ts | 631 ++++ src/data/agent-connectors/youtube.ts | 1029 ++++++ src/data/agent-connectors/zendesk.ts | 442 +++ src/data/agent-connectors/zoom.ts | 3 + 77 files changed, 26451 insertions(+), 3987 deletions(-) create mode 100644 src/data/agent-connectors/affinity.ts create mode 100644 src/data/agent-connectors/airtable.ts create mode 100644 src/data/agent-connectors/apifymcp.ts create mode 100644 src/data/agent-connectors/apollo.ts create mode 100644 src/data/agent-connectors/asana.ts create mode 100644 src/data/agent-connectors/attention.ts create mode 100644 src/data/agent-connectors/attio.ts create mode 100644 src/data/agent-connectors/bigquery.ts create mode 100644 src/data/agent-connectors/brave.ts create mode 100644 src/data/agent-connectors/chorus.ts create mode 100644 src/data/agent-connectors/clari_copilot.ts create mode 100644 src/data/agent-connectors/clickup.ts create mode 100644 src/data/agent-connectors/confluence.ts create mode 100644 src/data/agent-connectors/discord.ts create mode 100644 src/data/agent-connectors/dropbox.ts create mode 100644 src/data/agent-connectors/evertrace.ts create mode 100644 src/data/agent-connectors/exa.ts create mode 100644 src/data/agent-connectors/fathom.ts create mode 100644 src/data/agent-connectors/freshdesk.ts create mode 100644 src/data/agent-connectors/github.ts create mode 100644 src/data/agent-connectors/gitlab.ts create mode 100644 src/data/agent-connectors/gmail.ts create mode 100644 src/data/agent-connectors/gong.ts create mode 100644 src/data/agent-connectors/google_ads.ts create mode 100644 src/data/agent-connectors/googlecalendar.ts create mode 100644 src/data/agent-connectors/googledocs.ts create mode 100644 src/data/agent-connectors/googledrive.ts create mode 100644 src/data/agent-connectors/googleforms.ts create mode 100644 src/data/agent-connectors/googlemeet.ts create mode 100644 src/data/agent-connectors/googlesheets.ts create mode 100644 src/data/agent-connectors/googleslides.ts create mode 100644 src/data/agent-connectors/granola.ts create mode 100644 src/data/agent-connectors/granolamcp.ts create mode 100644 src/data/agent-connectors/harvestapi.ts create mode 100644 src/data/agent-connectors/hubspot.ts create mode 100644 src/data/agent-connectors/intercom.ts create mode 100644 src/data/agent-connectors/jiminny.ts create mode 100644 src/data/agent-connectors/jira.ts create mode 100644 src/data/agent-connectors/linear.ts create mode 100644 src/data/agent-connectors/linkedin.ts create mode 100644 src/data/agent-connectors/microsoftexcel.ts create mode 100644 src/data/agent-connectors/microsoftteams.ts create mode 100644 src/data/agent-connectors/microsoftword.ts create mode 100644 src/data/agent-connectors/monday.ts create mode 100644 src/data/agent-connectors/notion.ts create mode 100644 src/data/agent-connectors/onedrive.ts create mode 100644 src/data/agent-connectors/onenote.ts create mode 100644 src/data/agent-connectors/outlook.ts create mode 100644 src/data/agent-connectors/outreach.ts create mode 100644 src/data/agent-connectors/pagerduty.ts create mode 100644 src/data/agent-connectors/phantombuster.ts create mode 100644 src/data/agent-connectors/pipedrive.ts create mode 100644 src/data/agent-connectors/salesforce.ts create mode 100644 src/data/agent-connectors/servicenow.ts create mode 100644 src/data/agent-connectors/sharepoint.ts create mode 100644 src/data/agent-connectors/slack.ts create mode 100644 src/data/agent-connectors/snowflake.ts create mode 100644 src/data/agent-connectors/supadata.ts create mode 100644 src/data/agent-connectors/trello.ts create mode 100644 src/data/agent-connectors/twitter.ts create mode 100644 src/data/agent-connectors/vercel.ts create mode 100644 src/data/agent-connectors/vimeo.ts create mode 100644 src/data/agent-connectors/youtube.ts create mode 100644 src/data/agent-connectors/zendesk.ts create mode 100644 src/data/agent-connectors/zoom.ts diff --git a/src/content/docs/reference/agent-connectors/affinity.mdx b/src/content/docs/reference/agent-connectors/affinity.mdx index 52c3bd240..af5f0b5a2 100644 --- a/src/content/docs/reference/agent-connectors/affinity.mdx +++ b/src/content/docs/reference/agent-connectors/affinity.mdx @@ -2,19 +2,19 @@ title: Affinity description: Connect to Affinity relationship intelligence CRM to manage deal flow, relationships, pipeline opportunities, and network connections for private capital firms including VC, PE, and investment banking. tableOfContents: true +sidebar: + label: Affinity head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/affinity'
@@ -30,127 +30,4 @@ Supports authentication: ## Tool list -## `affinity_add_to_list` - -Add a person or organization to an Affinity list by creating a new list entry. Use this to add a founder to a deal pipeline, add a company to a watchlist, or track a new contact in a relationship list. Provide either entity_id for persons/organizations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entity_id` | integer | Yes | ID of the person or organization to add to the list | -| `list_id` | integer | Yes | ID of the Affinity list to add the entity to | - -## `affinity_create_note` - -Create a note on a person, organization, or opportunity in Affinity. Notes support plain text content and can be attached to multiple entity types simultaneously. Use this to log meeting summaries, due diligence findings, or relationship context directly on a CRM record. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content` | string | Yes | Plain text content of the note | -| `opportunity_ids` | `array` | No | List of opportunity IDs to attach this note to | -| `organization_ids` | `array` | No | List of organization IDs to attach this note to | -| `person_ids` | `array` | No | List of person IDs to attach this note to | - -## `affinity_create_opportunity` - -Create a new deal or opportunity record in Affinity and add it to a pipeline list. Supports associating persons and organizations, setting the deal name, and assigning an owner. Ideal for logging inbound deals or sourcing new investment targets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | integer | Yes | ID of the Affinity list to add this opportunity to | -| `name` | string | Yes | Name of the opportunity or deal | -| `organization_ids` | `array` | No | List of Affinity organization IDs to associate with this opportunity | -| `person_ids` | `array` | No | List of Affinity person IDs to associate with this opportunity | - -## `affinity_get_opportunity` - -Retrieve full details of a deal or opportunity in Affinity including current stage, owner, associated persons and organizations, custom field values, and list membership. Use this before updating a deal or generating a deal memo. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `opportunity_id` | integer | Yes | Unique numeric ID of the opportunity to retrieve | - -## `affinity_get_organization` - -Retrieve an organization's full profile from Affinity including domain, team member connections, associated people, deal history, and interaction metadata. Use this for deep company diligence or to understand team relationships before an investment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `organization_id` | integer | Yes | Unique numeric ID of the organization to retrieve | -| `with_interaction_dates` | boolean | No | Include first and last interaction dates in the response | - -## `affinity_get_person` - -Retrieve a person's full profile from Affinity including contact information, email addresses, phone numbers, organization memberships, interaction history, and relationship score. Use this to deeply evaluate a contact before a meeting or investment decision. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `person_id` | integer | Yes | Unique numeric ID of the person to retrieve | -| `with_interaction_dates` | boolean | No | Include first and last interaction dates in the response | - -## `affinity_get_relationship_strength` - -Retrieve relationship strength scores between your team members and an external contact (person) in Affinity. Scores reflect email and meeting interaction frequency and recency. Use this to identify the best warm introduction path to a founder, LP, or co-investor. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `external_id` | integer | Yes | Affinity person ID of the external contact to evaluate relationship strength against | -| `internal_id` | integer | No | Affinity person ID of the internal team member (optional — omit to get scores for all team members) | - -## `affinity_list_lists` - -Retrieve all Affinity lists available in the workspace, including people lists, organization lists, and opportunity/deal pipeline lists. Returns list IDs, names, types, and owner information. Use this to discover list IDs before adding entries or filtering opportunities. - -## `affinity_list_notes` - -Retrieve notes associated with a specific person, organization, or opportunity in Affinity. Returns paginated note records including content, creator, and creation timestamp. Use this to review interaction history, meeting summaries, or due diligence logs on a CRM entity. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `opportunity_id` | integer | No | Filter notes by opportunity ID | -| `organization_id` | integer | No | Filter notes by organization ID | -| `page_size` | integer | No | Number of results to return per page (max 500) | -| `page_token` | string | No | Pagination token from a previous response to fetch the next page | -| `person_id` | integer | No | Filter notes by person ID | - -## `affinity_list_opportunities` - -List pipeline opportunities in Affinity with optional filters by list ID, owner, or stage. Returns paginated deal records including stage, value, associated people and organizations, and custom field values. Designed for deal flow monitoring and portfolio tracking. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | integer | No | Filter opportunities belonging to a specific Affinity list ID | -| `page_size` | integer | No | Number of results to return per page (max 500) | -| `page_token` | string | No | Pagination token from a previous response to fetch the next page | - -## `affinity_search_organizations` - -Search for companies and organizations in the Affinity network by name or domain. Returns a paginated list of matching organization records including team connections, domain info, and interaction metadata. Useful for deal sourcing and company diligence lookups. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_size` | integer | No | Number of results to return per page (max 500) | -| `page_token` | string | No | Pagination token from a previous response to fetch the next page | -| `term` | string | No | Search term to filter organizations by name or domain | -| `with_interaction_dates` | boolean | No | Include first and last interaction dates in the response | - -## `affinity_search_persons` - -Search for people in the Affinity network by name, email, or relationship strength. Returns a paginated list of matching person records including contact information and relationship metadata. Ideal for finding contacts before creating notes or evaluating deal connections. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_size` | integer | No | Number of results to return per page (max 500) | -| `page_token` | string | No | Pagination token from a previous response to fetch the next page | -| `term` | string | No | Search term to filter persons by name or email address | -| `with_interaction_dates` | boolean | No | Include first and last interaction dates in the response | - -## `affinity_update_opportunity` - -Update an existing deal or opportunity in Affinity. Supports renaming the deal, adding or removing associated persons and organizations. Use this to reflect changes in deal status, team assignment, or company involvement during a pipeline review. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | No | Updated name for the opportunity | -| `opportunity_id` | integer | Yes | Unique numeric ID of the opportunity to update | -| `organization_ids` | `array` | No | Updated list of Affinity organization IDs associated with this opportunity | -| `person_ids` | `array` | No | Updated list of Affinity person IDs associated with this opportunity | + diff --git a/src/content/docs/reference/agent-connectors/apifymcp.mdx b/src/content/docs/reference/agent-connectors/apifymcp.mdx index a86e52844..0497ce626 100644 --- a/src/content/docs/reference/agent-connectors/apifymcp.mdx +++ b/src/content/docs/reference/agent-connectors/apifymcp.mdx @@ -2,21 +2,19 @@ title: Apify MCP description: Connect to Apify MCP to run web scraping, browser automation, and data extraction Actors directly from your AI workflows. tableOfContents: true +sidebar: + label: Apify MCP head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' -import { SetupApifymcpSection } from '@components/templates' -import { UsageApifymcpSection } from '@components/templates' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/apifymcp'
@@ -30,183 +28,6 @@ import { UsageApifymcpSection } from '@components/templates' Supports authentication: -## Set up the agent connector - - - -## Usage - - - ## Tool list -## `apifymcp_call_actor` - -Call any Actor from the Apify Store. By default waits for completion and returns results with a dataset preview. Use async mode to start a run in the background and get a runId immediately. - -Workflow: - -1. Use apifymcp_fetch_actor_details with output: `{"inputSchema": true}` to get the Actor's exact input schema -2. Call this tool with the actor name and input matching that schema exactly -3. Use apifymcp_get_actor_output with the returned datasetId to fetch full results if needed - -For MCP server Actors, use format 'actorName:toolName' (e.g. 'apify/actors-mcp-server:fetch-apify-docs'). -Use dedicated Actor tools (e.g. apifymcp_rag_web_browser) when available instead of this tool. - -When NOT to use: - -- You don't know the Actor's input schema — use apifymcp_fetch_actor_details first - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor` | string | Yes | Actor ID or full name in 'username/name' format (e.g. 'apify/rag-web-browser'). For MCP server Actors use 'actorName:toolName' format. | -| `async` | boolean | No | If true, starts the run and returns immediately with a runId. Use only when the user explicitly asks to run in the background or does not need immediate results. | -| `callOptions` | `object` | No | Optional run configuration options | -| `input` | `object` | Yes | Input JSON to pass to the Actor. Must match the Actor's input schema exactly — use apifymcp_fetch_actor_details with output: `{"inputSchema": true}` first to get the required fields and types. | -| `previewOutput` | boolean | No | When true (default), includes preview items in the response. Set to false when you plan to fetch full results separately via apifymcp_get_actor_output — avoids duplicate data and saves tokens. | - -## `apifymcp_fetch_actor_details` - -Get detailed information about an Actor by its ID or full name (format: 'username/name', e.g. 'apify/rag-web-browser'). - -WARNING: Omitting the 'output' parameter returns ALL fields including the full README, which can be extremely token-heavy. Always pass 'output' with only the fields you need. To get the input schema before calling an Actor, use: `{"inputSchema": true}`. - -When to use: - -- You need an Actor's input schema before calling it — use output: `{"inputSchema": true}` -- User wants details about a specific Actor (pricing, description, README) -- You need to list MCP tools provided by an MCP server Actor — use output: `{"mcpTools": true}` - -When NOT to use: - -- You already have the input schema and are ready to run — use apifymcp_call_actor directly - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor` | string | Yes | Actor ID or full name in 'username/name' format (e.g. 'apify/rag-web-browser') | -| `output` | `object` | No | JSON object with boolean flags to control which fields are returned. Always specify this to avoid a large token-heavy response. Set only the fields you need to true. Available fields: description, inputSchema, mcpTools, metadata, outputSchema, pricing, rating, readme, stats. All default to true if omitted (very large response) except mcpTools. Example: `{"inputSchema": true}` | - -## `apifymcp_fetch_apify_docs` - -Fetch the full content of an Apify or Crawlee documentation page by its URL. Use this after finding a relevant page with apifymcp_search_apify_docs. - -When to use: - -- You have a documentation URL and need the complete page content -- User asks for detailed documentation on a specific Apify or Crawlee page - -When NOT to use: - -- You don't have a URL yet — use apifymcp_search_apify_docs first - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `url` | string | Yes | Full URL of the Apify or Crawlee documentation page (e.g. 'https://docs.apify.com/platform/actors') | - -## `apifymcp_get_actor_output` - -Retrieve output dataset items from a specific Actor run using its datasetId. Supports field selection (including dot notation) and pagination. - -When to use: - -- You have a datasetId from an Actor run and need the full results -- The preview from apifymcp_call_actor didn't include all needed fields -- You need to paginate through large datasets - -When NOT to use: - -- You don't have a datasetId yet — run an Actor with apifymcp_call_actor first - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `datasetId` | string | Yes | Actor output dataset ID to retrieve from | -| `fields` | string | No | Comma-separated list of fields to include. Supports dot notation for nested fields (e.g. 'crawl.httpStatusCode,metadata.url'). Note: dot-notation fields are returned as flat keys in the output — e.g. requesting 'crawl.httpStatusCode' returns `{"crawl.httpStatusCode": 200}`, not a nested object. | -| `limit` | number | No | Maximum number of items to return (default: 100) | -| `offset` | number | No | Number of items to skip for pagination (default: 0) | - -## `apifymcp_get_actor_run` - -Get detailed information about a specific Actor run by runId. Returns run metadata (status, timestamps), performance stats, and resource IDs (datasetId, keyValueStoreId, requestQueueId). - -When to use: - -- You have a runId from apifymcp_call_actor (async mode) and want to check its status -- User asks about details of a specific run started outside the current conversation - -When NOT to use: - -- The run was just started via apifymcp_call_actor in sync mode — results are already in the response -- You want the output data — use apifymcp_get_actor_output with the datasetId - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `runId` | string | Yes | The ID of the Actor run | - -## `apifymcp_rag_web_browser` - -Web browser for AI agents and RAG pipelines. Queries Google Search, scrapes the top N pages, and returns content as Markdown. Can also scrape a specific URL directly. - -When to use: - -- User wants current/immediate data (e.g. 'Get flight prices for tomorrow', 'What's the weather today?') -- User needs to fetch specific content now (e.g. 'Fetch news from CNN', 'Get product info from Amazon') -- User has time indicators like 'today', 'current', 'latest', 'recent', 'now' - -When NOT to use: - -- User needs repeated/scheduled scraping of a specific platform — search for a dedicated Actor using apifymcp_search_actors instead - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `maxResults` | integer | No | Maximum number of top Google Search results to scrape and return. Ignored when query is a direct URL. Higher values increase response time and compute cost significantly — keep low (1-3) for latency-sensitive use cases. Default: 3. | -| `outputFormats` | `array` | No | Output formats for the scraped page content. Options: 'markdown', 'text', 'html' (default: ['markdown']) | -| `query` | string | Yes | Google Search keywords or a specific URL to scrape. Supports advanced search operators. | - -## `apifymcp_search_actors` - -Search the Apify Store to FIND and DISCOVER what scraping tools/Actors exist for specific platforms or use cases. This tool provides INFORMATION about available Actors — it does NOT retrieve actual data or run any scraping tasks. - -When to use: - -- Find what scraping tools exist for a platform (e.g. 'What tools can scrape Instagram?') -- Discover available Actors for a use case (e.g. 'Find an Actor for Amazon products') -- Browse existing solutions before calling an Actor - -When NOT to use: - -- User wants immediate data retrieval — use apifymcp_rag_web_browser instead -- You already know the Actor ID — use apifymcp_fetch_actor_details or apifymcp_call_actor directly - -Always do at least two searches: first with broad keywords, then with more specific terms if needed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `keywords` | string | No | Space-separated keywords to search Actors in the Apify Store. Use 1-3 simple terms (e.g. 'Instagram posts', 'Amazon products'). Avoid generic terms like 'scraper' or 'crawler'. Omitting keywords or passing an empty string returns popular/general Actors — always provide keywords for relevant results. | -| `limit` | integer | No | Maximum number of Actors to return (1-100, default: 5) | -| `offset` | integer | No | Number of results to skip for pagination (default: 0) | - -## `apifymcp_search_apify_docs` - -Search Apify and Crawlee documentation using full-text search. Use keywords only, not full sentences. Select the documentation source explicitly via docSource. - -Sources: - -- 'apify': Platform docs, SDKs (JS, Python), CLI, REST API, Academy, Actor development -- 'crawlee-js': Crawlee JavaScript web scraping library -- 'crawlee-py': Crawlee Python web scraping library - -When to use: - -- User asks how to use Apify APIs, SDK, or platform features -- You need to look up Apify or Crawlee documentation - -When NOT to use: - -- You already have a documentation URL — use apifymcp_fetch_apify_docs directly - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `docSource` | string | No | Documentation source to search. Options: 'apify' (default), 'crawlee-js', 'crawlee-py' | -| `limit` | number | No | Maximum number of results to return (1-20, default: 5) | -| `offset` | number | No | Offset for pagination (default: 0) | -| `query` | string | Yes | Algolia full-text search query using keywords only (e.g. 'standby actor', 'proxy configuration'). Do not use full sentences. | + diff --git a/src/content/docs/reference/agent-connectors/brave.mdx b/src/content/docs/reference/agent-connectors/brave.mdx index 8a2023998..559f9cd78 100644 --- a/src/content/docs/reference/agent-connectors/brave.mdx +++ b/src/content/docs/reference/agent-connectors/brave.mdx @@ -2,19 +2,19 @@ title: Brave Search description: Connect to Brave Search to perform web, image, video, and news searches with privacy-focused results, plus AI-powered suggestions and spellcheck. tableOfContents: true +sidebar: + label: Brave Search head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/brave'
@@ -30,214 +30,4 @@ Supports authentication: ## Tool list -## `brave_chat_completions` - -Get AI-generated answers grounded in real-time Brave Search results using an OpenAI-compatible chat completions interface. Returns summarized, cited answers with source references and token usage statistics. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `country` | string | No | Target country code for search results used to ground the answer (e.g., us, gb). | -| `enable_citations` | boolean | No | Include inline citation markers in the response text. | -| `enable_entities` | boolean | No | Include entity information (people, places, organizations) in the response. | -| `enable_research` | boolean | No | Enable multi-search research mode for more comprehensive answers. | -| `language` | string | No | Language code for the response (e.g., en, fr, de). | -| `messages` | `array` | Yes | Array of conversation messages. Each message must have a 'role' (system, user, or assistant) and 'content' (string). | -| `model` | string | No | The model to use. Must be 'brave' to use Brave's search-grounded AI model. | -| `stream` | boolean | No | Whether to stream the response as server-sent events. | - -## `brave_image_search` - -Search for images using Brave Search. Returns image results with thumbnails, source URLs, dimensions, and metadata. Supports filtering by country, language, and safe search. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of image results to return (1–200). Defaults to 50. | -| `country` | string | No | Country code for localised results (e.g., us, gb, de), or ALL for no restriction. | -| `q` | string | Yes | The image search query string. | -| `safesearch` | string | No | Safe search filter level. Defaults to strict (drops all adult content). | -| `search_lang` | string | No | Language code for results (e.g., en, fr, de). | -| `spellcheck` | boolean | No | Whether to enable spellcheck on the query. Defaults to true. | - -## `brave_llm_context` - -Retrieve real-time web search results optimized as grounding context for LLMs. Returns curated snippets, source URLs, titles, and metadata specifically structured to maximize contextual relevance for AI-generated answers. Supports fine-grained token and snippet budgets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `context_threshold_mode` | string | No | Relevance filter aggressiveness for snippet selection. Defaults to balanced. | -| `count` | integer | No | Max number of search results to consider (1–50). Defaults to 20. | -| `country` | string | No | Country code for localised results (e.g., us, gb, de). Defaults to us. | -| `enable_local` | boolean | No | Enable location-aware recall for locally relevant results. | -| `freshness` | string | No | Filter results by publish date: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD. | -| `goggles` | string | No | Custom re-ranking rules via a Goggles URL or inline definition. | -| `maximum_number_of_snippets` | integer | No | Maximum total snippets across all URLs (1–100). Defaults to 50. | -| `maximum_number_of_snippets_per_url` | integer | No | Maximum snippets per URL (1–100). Defaults to 50. | -| `maximum_number_of_tokens` | integer | No | Approximate maximum total tokens across all snippets (1024–32768). Defaults to 8192. | -| `maximum_number_of_tokens_per_url` | integer | No | Maximum tokens per URL (512–8192). Defaults to 4096. | -| `maximum_number_of_urls` | integer | No | Maximum number of URLs to include in the grounding response (1–50). Defaults to 20. | -| `q` | string | Yes | The search query to retrieve grounding context for. Max 400 characters, 50 words. | -| `safesearch` | string | No | Safe search filter level. | -| `search_lang` | string | No | Language code for results (e.g., en, fr, de). Defaults to en. | - -## `brave_local_descriptions` - -Fetch AI-generated descriptions for locations using IDs from a Brave web search response. Returns natural language summaries describing the place, its atmosphere, and what visitors can expect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ids` | `array` | Yes | Array of location IDs (up to 20) obtained from the locations field in a Brave web search response. | - -## `brave_local_place_search` - -Search 200M+ Points of Interest (POIs) by geographic center and radius using Brave's Place Search API. Either 'location' (text name) OR both 'latitude' and 'longitude' (coordinates) must be provided. Supports an optional keyword query to filter results. Ideal for map applications and local discovery. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of POI results to return (1–50). Defaults to 20. | -| `country` | string | No | ISO 3166-1 alpha-2 country code (e.g., us, gb). Defaults to US. | -| `latitude` | number | No | Latitude of the search center point (-90 to +90). Required together with longitude as an alternative to location name. | -| `location` | string | No | Location name (e.g., 'san francisco ca united states'). Required unless latitude and longitude are both provided. | -| `longitude` | number | No | Longitude of the search center point (-180 to +180). Required together with latitude as an alternative to location name. | -| `q` | string | No | Optional keyword query to filter POIs (e.g., 'coffee shops', 'italian restaurants'). Omit for a general area snapshot. | -| `radius` | number | No | Search radius in meters from the center point. | -| `safesearch` | string | No | Safe search filter level. Defaults to strict. | -| `search_lang` | string | No | Language code for results (e.g., en, fr). Defaults to en. | -| `spellcheck` | boolean | No | Whether to enable spellcheck on the query. | -| `units` | string | No | Measurement system for distances in the response. | - -## `brave_local_pois` - -Fetch detailed Point of Interest (POI) data for up to 20 location IDs returned by a Brave web search response. Returns rich local business data including address, phone, hours, ratings, and reviews. Note: location IDs are ephemeral and expire after ~8 hours. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ids` | `array` | Yes | Array of location IDs (up to 20) obtained from the locations field in a Brave web search response. | - -## `brave_news_search` - -Search for news articles using Brave Search. Returns recent news results with titles, URLs, snippets, publication dates, and source information. Supports filtering by country, language, freshness, and custom re-ranking via Goggles. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of news results to return (1–50). Defaults to 20. | -| `country` | string | No | Country code for localised news (e.g., us, gb, de). | -| `extra_snippets` | boolean | No | Include additional excerpt snippets per article. Defaults to false. | -| `freshness` | string | No | Filter results by publish date: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD. | -| `goggles` | string | No | Custom re-ranking rules via a Goggles URL or inline definition. | -| `offset` | integer | No | Zero-based offset for pagination (0–9). Defaults to 0. | -| `q` | string | Yes | The news search query string. | -| `safesearch` | string | No | Safe search filter level. Defaults to strict. | -| `search_lang` | string | No | Language code for results (e.g., en, fr, de). | -| `spellcheck` | boolean | No | Whether to enable spellcheck on the query. Defaults to true. | -| `ui_lang` | string | No | User interface language locale for response strings (e.g., en-US). | - -## `brave_spellcheck` - -Check and correct spelling of a query using Brave Search's spellcheck engine. Returns suggested corrections for misspelled queries. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `country` | string | No | Country code for localised spellcheck (e.g., us, gb). | -| `lang` | string | No | Language code for spellcheck (e.g., en, fr, de). | -| `q` | string | Yes | The query string to spellcheck. | - -## `brave_suggest_search` - -Get autocomplete search suggestions from Brave Search for a given query prefix. Useful for query completion, exploring related search terms, and building search UIs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of suggestions to return (1–20). Defaults to 5. | -| `country` | string | No | Country code for localised suggestions (e.g., us, gb, de). | -| `lang` | string | No | Language code for suggestions (e.g., en, fr, de). | -| `q` | string | Yes | The partial query string to get suggestions for. | -| `rich` | boolean | No | Whether to return rich suggestions with additional metadata. | - -## `brave_summarizer_enrichments` - -Fetch enrichment data for a Brave AI summary key. Returns images, Q\&A pairs, entity details, and source references associated with the summary. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The opaque summarizer key returned in a Brave web search response when summary=true was set. | - -## `brave_summarizer_entity_info` - -Fetch detailed entity metadata for entities mentioned in a Brave AI summary. Returns structured information about people, places, organizations, and concepts referenced in the summary. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The opaque summarizer key returned in a Brave web search response when summary=true was set. | - -## `brave_summarizer_followups` - -Fetch suggested follow-up queries for a Brave AI summary key. Useful for building conversational search flows and helping users explore related topics. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The opaque summarizer key returned in a Brave web search response when summary=true was set. | - -## `brave_summarizer_search` - -Retrieve a full AI-generated summary for a summarizer key obtained from a Brave web search response (requires summary=true on the web search). Returns the complete summary with title, content, enrichments, follow-up queries, and entity details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entity_info` | integer | No | Set to 1 to include detailed entity metadata in the response. | -| `inline_references` | boolean | No | Add citation markers throughout the summary text pointing to sources. | -| `key` | string | Yes | The opaque summarizer key returned in a Brave web search response when summary=true was set. | - -## `brave_summarizer_summary` - -Fetch the complete AI-generated summary for a summarizer key. Returns the full summary content with optional inline citation markers and entity metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entity_info` | integer | No | Set to 1 to include detailed entity metadata in the response. | -| `inline_references` | boolean | No | Add citation markers throughout the summary text pointing to sources. | -| `key` | string | Yes | The opaque summarizer key returned in a Brave web search response when summary=true was set. | - -## `brave_summarizer_title` - -Fetch only the title component of a Brave AI summary for a given summarizer key. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `key` | string | Yes | The opaque summarizer key returned in a Brave web search response when summary=true was set. | - -## `brave_video_search` - -Search for videos using Brave Search. Returns video results with titles, URLs, thumbnails, durations, and publisher metadata. Supports filtering by country, language, freshness, and safe search. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of video results to return (1–50). Defaults to 20. | -| `country` | string | No | Country code for localised results (e.g., us, gb, de). | -| `freshness` | string | No | Filter results by upload date: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD. | -| `offset` | integer | No | Zero-based offset for pagination (0–9). Defaults to 0. | -| `q` | string | Yes | The video search query string. | -| `safesearch` | string | No | Safe search filter level. Defaults to moderate. | -| `search_lang` | string | No | Language code for results (e.g., en, fr, de). | -| `spellcheck` | boolean | No | Whether to enable spellcheck on the query. Defaults to true. | - -## `brave_web_search` - -Search the web using Brave Search's privacy-focused search engine. Returns real-time web results including titles, URLs, snippets, news, videos, images, locations, and rich data. Supports filtering by country, language, safe search, freshness, and custom re-ranking via Goggles. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of search results to return (1–20). Defaults to 20. | -| `country` | string | No | Country code for search results (e.g., us, gb, de). Defaults to US. | -| `extra_snippets` | boolean | No | Include up to 5 additional excerpt snippets per result. Defaults to false. | -| `freshness` | string | No | Filter results by publish date. Use pd (past day), pw (past week), pm (past month), py (past year), or a date range YYYY-MM-DDtoYYYY-MM-DD. | -| `goggles` | string | No | Custom re-ranking rules via a Goggles URL or inline definition to bias search results. | -| `offset` | integer | No | Zero-based offset for pagination of results (0–9). Defaults to 0. | -| `q` | string | Yes | Search query string. Max 400 characters, 50 words. | -| `result_filter` | string | No | Comma-separated list of result types to include in the response. | -| `safesearch` | string | No | Safe search filter level. Defaults to moderate. | -| `search_lang` | string | No | Language code for result content (e.g., en, fr, de). Defaults to en. | -| `spellcheck` | boolean | No | Whether to enable spellcheck on the query. Defaults to true. | -| `summary` | boolean | No | Enable summarizer key generation in the response. Use the returned key with the Summarizer endpoints. | -| `text_decorations` | boolean | No | Whether to include text decoration markers (bold tags) in result snippets. Defaults to true. | -| `ui_lang` | string | No | User interface language locale for response strings (e.g., en-US, fr-FR). | -| `units` | string | No | Measurement system for unit-bearing results. | + diff --git a/src/content/docs/reference/agent-connectors/evertrace.mdx b/src/content/docs/reference/agent-connectors/evertrace.mdx index 68fe6dfa2..0e322f36a 100644 --- a/src/content/docs/reference/agent-connectors/evertrace.mdx +++ b/src/content/docs/reference/agent-connectors/evertrace.mdx @@ -2,19 +2,19 @@ title: evertrace.ai description: Connect to evertrace.ai to search and manage talent signals, saved searches, and lists. Access rich professional profiles with scoring, experiences, and education data to power your recruiting and sourcing workflows. tableOfContents: true +sidebar: + label: evertrace.ai head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/evertrace'
@@ -30,253 +30,4 @@ Supports authentication: ## Tool list -## `evertrace_cities_list` - -Search available cities by name. Returns city name strings sorted by signal count. Use these values in signal filters for the city field. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | string | No | Number of results per page. | -| `page` | string | No | Page number for pagination. | -| `search` | string | No | Case-insensitive partial match on city name (e.g. "san fran"). Omit to list all cities sorted by signal count. | - -## `evertrace_companies_list` - -Search companies by name or look up by specific IDs. Returns company entity IDs (exe_\* format) needed for signal filtering by past_companies. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ids` | `array` | No | Look up specific companies by entity ID (exe_* format). | -| `limit` | string | No | Number of results per page. | -| `page` | string | No | Page number for pagination. | -| `search` | string | No | Case-insensitive partial match on company name (e.g. "google"). | - -## `evertrace_educations_list` - -Search education institutions by name or look up by specific IDs. Returns institution entity IDs (ede_\* format) needed for signal filtering by past_education. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ids` | `array` | No | Look up specific institutions by entity ID (ede_* format). | -| `limit` | string | No | Number of results per page. | -| `page` | string | No | Page number for pagination. | -| `search` | string | No | Case-insensitive partial match on institution name (e.g. "stanford"). | - -## `evertrace_list_entries_create` - -Add a signal to a list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | The list ID to add the signal to. | -| `signal_id` | string | Yes | The signal ID to add. | - -## `evertrace_list_entries_delete` - -Remove an entry from a list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entry_id` | string | Yes | The entry ID to remove. | -| `list_id` | string | Yes | The list ID. | - -## `evertrace_list_entries_get` - -Get a single list entry with its full signal profile. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `entry_id` | string | Yes | The entry ID. | -| `list_id` | string | Yes | The list ID. | - -## `evertrace_list_entries_list` - -List entries in a list with pagination, sorting, and filtering by screening/viewed status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | string | No | Number of results per page. | -| `list_id` | string | Yes | The list ID. | -| `page` | string | No | Page number for pagination. | -| `screened_by` | `array` | No | Filter by screening status. Prefix with "-" to exclude (e.g. ["-me", "-others"]). | -| `sort_by` | string | No | Sort field: "entry_created_at" (when added to list) or "signal_discovered_at" (when signal was discovered). | -| `sort_order` | string | No | Sort direction: "asc" (oldest first) or "desc" (newest first). | -| `viewed_by` | `array` | No | Filter by viewed status. Prefix with "-" to exclude (e.g. ["-me"]). | - -## `evertrace_lists_create` - -Create a new list. Provide user IDs in accesses to share the list with teammates. The creator is automatically granted access. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `accesses` | `array` | No | Array of user IDs to share this list with. Pass an empty array for private list. | -| `name` | string | Yes | Name of the new list. | - -## `evertrace_lists_delete` - -Permanently delete a list and all its entries. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The list ID to delete. | - -## `evertrace_lists_get` - -Get a list by ID with its entries, accesses, and creator information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The list ID. | - -## `evertrace_lists_list` - -List all lists the current user has access to in evertrace.ai. - -## `evertrace_lists_update` - -Rename a list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The list ID to update. | -| `name` | string | Yes | New name for the list. | - -## `evertrace_searches_create` - -Create a new saved search with filters. Each filter requires a key, operator, and value. Provide sharee user IDs to share the search with teammates. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `emoji` | string | No | Optional emoji for the saved search. | -| `filters` | `array` | Yes | Array of filter objects. Each filter has: key (e.g. "country", "industry", "score"), operator (e.g. "in"), and value (e.g. "India"). | -| `sharees` | `array` | Yes | Array of user IDs to share this search with. | -| `title` | string | Yes | Title of the saved search (max 50 characters). | -| `visited_at` | number | Yes | Epoch timestamp in milliseconds for when the search was last visited. | - -## `evertrace_searches_delete` - -Permanently delete a saved search. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The saved search ID to delete. | - -## `evertrace_searches_duplicate` - -Duplicate a saved search, creating a copy with the same filters and settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The saved search ID to duplicate. | - -## `evertrace_searches_get` - -Get a saved search by ID with its filters and sharees. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The saved search ID. | - -## `evertrace_searches_list` - -List all saved searches accessible to the current user in evertrace.ai. - -## `evertrace_searches_signals_list` - -List signals matching a saved search's filters with pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The saved search ID. | -| `limit` | string | No | Number of results per page. | -| `page` | string | No | Page number for pagination. | - -## `evertrace_searches_update` - -Update a saved search. All fields are optional — only provided fields are changed. If filters are provided, they replace all existing filters. If sharees are provided, they replace the full access list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `emoji` | string | No | New emoji for the saved search. | -| `filters` | `array` | No | Replaces all existing filters. Each filter has: key, operator, value. | -| `id` | string | Yes | The saved search ID to update. | -| `sharees` | `array` | No | Replaces the full sharee list with these user IDs. | -| `title` | string | No | New title for the saved search (max 50 characters). | -| `visited_at` | number | No | Epoch timestamp in milliseconds for when the search was last visited. | - -## `evertrace_signal_mark_viewed` - -Mark a signal as viewed by the current user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `signal_id` | string | Yes | The ID of the signal to mark as viewed. | - -## `evertrace_signal_screen` - -Screen a signal, marking it as reviewed by the current user. Screened signals are hidden from default views. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `signal_id` | string | Yes | The ID of the signal to screen. | - -## `evertrace_signal_unscreen` - -Unscreen a signal, making it visible again in default views. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `signal_id` | string | Yes | The ID of the signal to unscreen. | - -## `evertrace_signals_entries` - -Get all list entries for a signal. Shows which lists this signal has been added to. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The signal ID. | - -## `evertrace_signals_get` - -Get a single talent signal by ID with full profile details including experiences, educations, taggings, views, and screenings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The signal ID to retrieve. | - -## `evertrace_signals_list` - -Search and filter talent signals with pagination. Returns full signal profiles including experiences, educations, taggings, views, and screenings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `age` | `array` | No | Filter by age range buckets. Valid values: "Below 25", "25 to 29", "30 to 34", "35 to 39", "40 to 44", "45 to 49", "Above 49". | -| `city` | `array` | No | Filter by city name (e.g. ["San Francisco"]). Use evertrace_cities_list to search available cities. Prefix with "!" to exclude. | -| `country` | `array` | No | Filter by country name (e.g. ["United States"]). Prefix with "!" to exclude. | -| `created_after` | string | No | Epoch timestamp in milliseconds. Only returns signals discovered after this point. | -| `customer_focus` | `array` | No | Filter by target market. Valid values: "B2B", "B2C". | -| `education_level` | `array` | No | Filter by highest education level. Valid values: "Bachelor", "Master", "PhD or Above", "MBA", "No university degree". | -| `fullname` | string | No | Free-text search on person name (case-insensitive partial match). | -| `gender` | `array` | No | Filter by gender. Valid values: "man", "woman". | -| `industry` | `array` | No | Filter by industry vertical (e.g. ["Technology", "Healthcare"]). Prefix with "!" to exclude. | -| `limit` | string | No | Number of results per page. | -| `origin` | `array` | No | Filter by nationality/origin country (e.g. ["India"]). Prefix with "!" to exclude. | -| `page` | string | No | Page number for pagination. | -| `past_companies` | `array` | No | Filter by past employer using company entity IDs in exe_* format. Use evertrace_companies_list to look up IDs. | -| `past_education` | `array` | No | Filter by past education institution using IDs in ede_* format. Use evertrace_educations_list to look up IDs. | -| `profile_tags` | `array` | No | Filter by profile background tags. Valid values: "Serial Founder", "VC Backed Founder", "VC Backed Operator", "VC Investor", "YC Alumni", "Big Tech experience", "Big 4 experience", "Banking experience", "Consulting experience". | -| `region` | `array` | No | Filter by geographic region or US state (e.g. ["Europe", "California"]). Prefix with "!" to exclude. | -| `score` | string | No | Minimum score threshold (1–10). Acts as a >= filter. | -| `screened_by` | `array` | No | Filter by screening status. Use "me", "others", or user IDs. Prefix with "-" to exclude. | -| `source` | `array` | No | Filter by data source name. Values are dynamic per workspace. | -| `time_range` | `array` | No | Absolute date range as [from, to] in YYYY-MM-DD format (e.g. ["2026-01-01", "2026-03-01"]). Mutually exclusive with time_relative. | -| `time_relative` | string | No | Relative time window in days from today (e.g. "30", "60", "90") or epoch ms timestamp. Mutually exclusive with time_range. | -| `type` | `array` | No | Filter by signal type. Valid values: "New Company", "Stealth Position", "Left Position", "Investor Position", "Board Position", "New Position", "Promoted", "New Patent", "New Grant". | - -## `evertrace_signals_list_by_linkedin_id` - -Get all signals representing the same person, matched by LinkedIn ID. Useful for finding duplicate or historical signals for the same individual. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The signal ID to match LinkedIn ID from. | + diff --git a/src/content/docs/reference/agent-connectors/granola.mdx b/src/content/docs/reference/agent-connectors/granola.mdx index bdf75e832..38500780c 100644 --- a/src/content/docs/reference/agent-connectors/granola.mdx +++ b/src/content/docs/reference/agent-connectors/granola.mdx @@ -2,19 +2,19 @@ title: Granola description: Connect to Granola to access AI-generated meeting notes, summaries, transcripts, and attendee data from your workspace. Granola automatically records and summarises meetings so your team never misses key decisions or action items. tableOfContents: true +sidebar: + label: Granola head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/granola'
@@ -30,23 +30,4 @@ Supports authentication: ## Tool list -## `granola_note_get` - -Retrieve a single Granola meeting note by its ID. Returns the full note including title, owner, calendar event details, attendees, folder memberships, and AI-generated summary. Optionally include the full transcript with speaker labels and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Pass 'transcript' to include the full meeting transcript with speaker source and timestamps. | -| `note_id` | string | Yes | The unique identifier of the note to retrieve. Format: not_XXXXXXXXXXXXXX. | - -## `granola_notes_list` - -List all accessible meeting notes in the Granola workspace with pagination and date filtering. Returns note IDs, titles, owners, calendar event details, attendees, folder memberships, and AI-generated summaries. Only notes shared in workspace-wide folders are accessible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `created_after` | string | No | Filter notes created on or after this date. ISO 8601 format (e.g., 2024-01-01 or 2024-01-01T00:00:00Z). | -| `created_before` | string | No | Filter notes created before this date. ISO 8601 format (e.g., 2024-12-31 or 2024-12-31T23:59:59Z). | -| `cursor` | string | No | Pagination cursor from the previous response to fetch the next page of results. | -| `page_size` | integer | No | Number of notes to return per page (1–30). Defaults to 10. | -| `updated_after` | string | No | Filter notes updated after this date. ISO 8601 format (e.g., 2024-06-01 or 2024-06-01T00:00:00Z). | + diff --git a/src/content/docs/reference/agent-connectors/jiminny.mdx b/src/content/docs/reference/agent-connectors/jiminny.mdx index 5c4e17a4e..bc8718b2a 100644 --- a/src/content/docs/reference/agent-connectors/jiminny.mdx +++ b/src/content/docs/reference/agent-connectors/jiminny.mdx @@ -2,19 +2,19 @@ title: Jiminny description: Connect with Jiminny to access call recordings, transcripts, coaching insights, and conversation intelligence data. tableOfContents: true +sidebar: + label: Jiminny head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/jiminny'
@@ -30,155 +30,4 @@ Supports authentication: ## Tool list -## `jiminny_action_items_get` - -Retrieve the AI-generated action items for a given activity, returning a list of follow-up tasks identified from the conversation. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `activityId` | string | Yes | The UUID of the activity to retrieve action items for. | - -## `jiminny_activities_list` - -Retrieve completed and processed call and meeting activities with optional date range, update date range, status, and page filters. The time range must be less than six months and you must provide either fromDate/toDate or updatedFrom. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fromDate` | string | No | Filter activities that occurred after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate. | -| `page` | integer | No | Page number to return (page size is 500 activities). Default is 1. | -| `status` | string | No | Filter activities by status: in-progress, completed (for calls/meetings), received, sent, delivered (for SMS/Voice dialer). | -| `toDate` | string | No | Filter activities that occurred before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date. | -| `updatedFrom` | string | No | Filter activities updated after this UTC date-time (e.g. 2021-11-01 00:00:00). Must be before updatedTo. | -| `updatedTo` | string | No | Filter activities updated before this UTC date-time. Cannot be a future date. Defaults to current time. | - -## `jiminny_activity_upload` - -Upload a call or meeting recording file to Jiminny for transcription and analysis, returning the new activity ID on success. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `accountId` | string | No | An optional CRM Account ID to associate with this activity (max 100 characters). | -| `completedAt` | string | No | The date the activity was completed (format: YYYY-MM-DD). | -| `externalId` | string | No | An optional external identifier for this activity (max 191 characters). Must be unique per host user. | -| `hostUserEmail` | string | Yes | The email address of the host user. Must belong to the authenticated team. | -| `language` | string | Yes | The language locale of the activity (e.g. en_GB, en_US, fr_FR). | -| `leadId` | string | No | An optional CRM Lead ID to associate with this activity (max 180 characters). | -| `notifyForUploadCompletionByEmail` | boolean | No | Whether to notify the host user via email when the upload and processing is complete. | -| `opportunityId` | string | No | An optional CRM Opportunity ID to associate with this activity (max 100 characters). | -| `skipFullAnalysis` | boolean | No | Whether to skip the full AI analysis of the uploaded activity. | -| `title` | string | Yes | The title of the activity (max 250 characters). | - -## `jiminny_automated_call_scoring_list` - -Retrieve automated call scoring records with optional filters by user and date range, returning scores, activity types, and user details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fromDate` | string | No | Filter scoring records created after this UTC date-time (e.g. 2021-10-01 00:00:00). | -| `toDate` | string | No | Filter scoring records created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date. | -| `userId` | string | No | Optional UUID of the user to filter automated call scoring results by. | - -## `jiminny_coaching_feedback_list` - -Retrieve bulk coaching feedback records within a required date range, optionally filtered by coach or coachee, returning scores, activity IDs, and timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `coachId` | string | No | Optional UUID of the coach (manager) to filter coaching feedback by. | -| `coacheeId` | string | No | Optional UUID of the coachee (sales rep) to filter coaching feedback by. | -| `fromDate` | string | Yes | Filter coaching feedback records created after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate. | -| `toDate` | string | Yes | Filter coaching feedback records created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date. | - -## `jiminny_comments_list` - -Retrieve activity comment records with optional filters by user and date range, returning comment IDs, activity IDs, user IDs, and creation timestamps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fromDate` | string | No | Filter comments created after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate. | -| `toDate` | string | No | Filter comments created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date. | -| `userId` | string | No | Optional UUID of the user to filter comments by. | - -## `jiminny_listens_list` - -Retrieve listened (played) activity records within a date range, optionally filtered by user, showing who listened to which activities and when. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `fromDate` | string | Yes | Filter listened activities that occurred after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate. | -| `toDate` | string | Yes | Filter listened activities that occurred before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date. | -| `userId` | string | No | Optional UUID of the user to filter listened activities by. | - -## `jiminny_organization_get` - -Return the current authenticated Organization details including name, CRM integration, calendar type, and address. - -## `jiminny_questions_get` - -Retrieve questions detected in a specific activity, including their timestamps, speaker participant IDs, text, and whether they are engaging or insightful. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `activityId` | string | Yes | The UUID of the activity to retrieve detected questions for. | - -## `jiminny_summary_get` - -Get the AI-generated conversation summary for a given activity, returning the summary content text. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `activityId` | string | Yes | The UUID of the activity to retrieve the summary for. | - -## `jiminny_test_tool_xyz` - -Test. - -## `jiminny_topic_triggers_list` - -Retrieve all topic triggers configured for the authenticated team, returned as a hierarchy of themes, topics, and trigger keywords. - -## `jiminny_topic_triggers_matched_get` - -Retrieve all topic triggers that were matched within a specific activity, including the theme, topic, trigger keyword, timestamps, and matched text excerpt. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `activityId` | string | Yes | The UUID of the activity to retrieve matched topic triggers for. | - -## `jiminny_transcript_get` - -Retrieve transcription segments for a given activity, returning an array of timed speech segments with speaker participant IDs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `activityId` | string | Yes | The UUID of the activity to retrieve the transcription for. | - -## `jiminny_users_list` - -Retrieve all users belonging to the authenticated team, including their IDs, names, emails, statuses, team names, CRM IDs, and roles. - -## `jiminny_webhook_create` - -Create a webhook subscription that sends event payloads to a destination URL when a specified trigger occurs in Jiminny. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `external_id` | string | No | An optional external identifier for the webhook (max 191 characters). | -| `trigger` | string | Yes | The event trigger for the webhook. One of: coaching_feedback_completed, conversation_shared, conversation_exported, conversation_processed, conversation_played. | -| `url` | string | Yes | The destination URL to receive the webhook payload (max 191 characters). | - -## `jiminny_webhook_delete` - -Delete an existing webhook subscription by its UUID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | UUID of the webhook to delete. | - -## `jiminny_webhook_sample_get` - -Retrieve a sample webhook payload for a given trigger event type to understand the data structure that will be sent. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `trigger` | string | Yes | The webhook trigger event type to get a sample payload for. | + diff --git a/src/content/docs/reference/agent-connectors/linkedin.mdx b/src/content/docs/reference/agent-connectors/linkedin.mdx index 3a6024e7f..3779eea37 100644 --- a/src/content/docs/reference/agent-connectors/linkedin.mdx +++ b/src/content/docs/reference/agent-connectors/linkedin.mdx @@ -2,19 +2,19 @@ title: LinkedIn description: Connect to LinkedIn to manage user authentication, profile data, email, and professional identity via OAuth 2.0 tableOfContents: true +sidebar: + label: LinkedIn head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/linkedin'
@@ -30,450 +30,4 @@ Supports authentication: ## Tool list -## `linkedin_ad_account_create` - -Create a new LinkedIn ad account for running advertising campaigns. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `currency` | string | Yes | The currency code for the ad account (e.g. 'USD', 'EUR'). | -| `name` | string | Yes | The name of the new ad account. | -| `reference` | string | Yes | Reference URN for the account owner (e.g. organization URN 'urn:li:organization:12345'). | - -## `linkedin_ad_account_get` - -Get a LinkedIn ad account by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to retrieve. | - -## `linkedin_ad_account_update` - -Partially update a LinkedIn ad account's name or status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to update. | -| `name` | string | No | New name for the ad account. | -| `status` | string | No | New status for the ad account (e.g. ACTIVE, CANCELED). | - -## `linkedin_ad_account_users_list` - -List all users who have access to a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to list users for. | - -## `linkedin_ad_accounts_search` - -Search LinkedIn ad accounts by status or name. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | No | Filter by account name (partial match). | -| `status` | string | No | Filter by account status. One of: ACTIVE, CANCELED, DRAFT. | - -## `linkedin_ad_analytics_get` - -Get campaign analytics data for a LinkedIn ad campaign including impressions, clicks, and spend. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `campaigns` | string | Yes | The campaign URN to retrieve analytics for (e.g. 'urn:li:sponsoredCampaign:712345678'). | -| `date_range_end` | string | Yes | End date for the analytics period (YYYY-MM-DD format). | -| `date_range_start` | string | Yes | Start date for the analytics period (YYYY-MM-DD format). | -| `time_granularity` | string | Yes | Granularity of the analytics data. One of: DAILY, MONTHLY, ALL. | - -## `linkedin_asset_get` - -Get the status and details of an uploaded LinkedIn media asset. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `asset_id` | string | Yes | The ID of the media asset to retrieve. | - -## `linkedin_campaign_create` - -Create a new ad campaign within a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to create the campaign in. | -| `campaign_group_id` | string | Yes | The ID of the campaign group this campaign belongs to. | -| `cost_type` | string | Yes | The cost type for the campaign (e.g. 'CPM', 'CPC', 'CPV'). | -| `daily_budget_amount` | string | Yes | The daily budget amount as a decimal string (e.g. '100.00'). | -| `daily_budget_currency` | string | Yes | The currency code for the daily budget (e.g. 'USD', 'EUR'). | -| `name` | string | Yes | The name of the campaign. | -| `objective_type` | string | Yes | The objective type for the campaign (e.g. 'AWARENESS', 'WEBSITE_VISIT', 'LEAD_GENERATION'). | - -## `linkedin_campaign_delete` - -Delete a DRAFT LinkedIn ad campaign. Only campaigns in DRAFT status can be deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the campaign. | -| `campaign_id` | string | Yes | The ID of the DRAFT campaign to delete. | - -## `linkedin_campaign_get` - -Get a specific ad campaign by ID within a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the campaign. | -| `campaign_id` | string | Yes | The ID of the campaign to retrieve. | - -## `linkedin_campaign_group_create` - -Create a new campaign group within a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to create the campaign group in. | -| `name` | string | Yes | The name of the campaign group. | -| `status` | string | No | Status of the campaign group. One of: ACTIVE, ARCHIVED, CANCELED, DRAFT, PAUSED. Defaults to ACTIVE. | - -## `linkedin_campaign_group_get` - -Get a specific campaign group by ID within a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the campaign group. | -| `group_id` | string | Yes | The ID of the campaign group to retrieve. | - -## `linkedin_campaign_group_update` - -Partially update a LinkedIn campaign group's name or status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the campaign group. | -| `group_id` | string | Yes | The ID of the campaign group to update. | -| `name` | string | No | New name for the campaign group. | -| `status` | string | No | New status for the campaign group (e.g. ACTIVE, PAUSED, ARCHIVED). | - -## `linkedin_campaign_groups_list` - -List campaign groups for a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to list campaign groups for. | -| `count` | integer | No | Number of results to return per page. | -| `start` | integer | No | Offset for pagination. | -| `status` | string | No | Filter by campaign group status (e.g. ACTIVE, PAUSED, ARCHIVED). | - -## `linkedin_campaign_update` - -Partially update a LinkedIn ad campaign's name or status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the campaign. | -| `campaign_id` | string | Yes | The ID of the campaign to update. | -| `name` | string | No | New name for the campaign. | -| `status` | string | No | New status for the campaign (e.g. ACTIVE, PAUSED, ARCHIVED, CANCELED). | - -## `linkedin_campaigns_list` - -List ad campaigns for a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to list campaigns for. | -| `count` | integer | No | Number of results to return per page. | -| `start` | integer | No | Offset for pagination. | -| `status` | string | No | Filter by campaign status (e.g. ACTIVE, PAUSED, ARCHIVED, CANCELED, DRAFT). | - -## `linkedin_comment_delete` - -Delete a specific comment on a LinkedIn post. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor_urn` | string | Yes | The URN of the actor (person) deleting the comment. | -| `comment_id` | string | Yes | The ID of the comment to delete. | -| `entity_urn` | string | Yes | The URN of the post the comment belongs to. | - -## `linkedin_comment_get` - -Get a specific comment on a LinkedIn post by entity URN and comment ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `comment_id` | string | Yes | The ID of the comment to retrieve. | -| `entity_urn` | string | Yes | The URN of the post the comment belongs to. | - -## `linkedin_creative_create` - -Create a new ad creative for a LinkedIn ad campaign. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to create the creative in. | -| `campaign_id` | string | Yes | The campaign URN this creative belongs to (e.g. 'urn:li:sponsoredCampaign:712345678'). | -| `name` | string | Yes | The name of the creative. | -| `status` | string | No | Status of the creative. Defaults to ACTIVE. | - -## `linkedin_creative_get` - -Get a specific ad creative by ID within a LinkedIn ad account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the creative. | -| `creative_id` | string | Yes | The ID of the creative to retrieve. | - -## `linkedin_creative_update` - -Partially update a LinkedIn ad creative's name or status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account that owns the creative. | -| `creative_id` | string | Yes | The ID of the creative to update. | -| `name` | string | No | New name for the creative. | -| `status` | string | No | New status for the creative (e.g. ACTIVE, PAUSED, ARCHIVED). | - -## `linkedin_creatives_list` - -List ad creatives for a LinkedIn ad account, with optional filtering by campaign or status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | string | Yes | The ID of the ad account to list creatives for. | -| `campaign_id` | string | No | Filter creatives by campaign URN. | -| `count` | integer | No | Number of results to return per page. | -| `start` | integer | No | Offset for pagination. | -| `status` | string | No | Filter by creative status (e.g. ACTIVE, PAUSED, ARCHIVED). | - -## `linkedin_email_get` - -Retrieve the authenticated user's primary email address from LinkedIn. - -## `linkedin_job_posting_get` - -Get details of a specific LinkedIn job posting by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `job_id` | string | Yes | The ID of the job posting to retrieve. | - -## `linkedin_media_upload_register` - -Register a media asset upload with LinkedIn (step 1 of image/video upload). Returns an upload URL and asset ID to use for subsequent upload steps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `owner_urn` | string | Yes | The URN of the person or organization that owns the media (e.g. 'urn:li:person:{id}'). | -| `recipe` | string | Yes | The media recipe type. One of: feedshare-image, feedshare-video, messaging-attachment. | - -## `linkedin_member_search` - -Search LinkedIn members by keyword for at-mention typeahead (requires Marketing API access). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of results to return. | -| `keywords` | string | Yes | Keywords to search for members. | - -## `linkedin_message_create` - -Send a LinkedIn message via the Messaging API (requires LinkedIn Messaging API partner access). Uses /rest/messages endpoint. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body` | string | Yes | The text content of the message. | -| `recipients` | string | Yes | Comma-separated list of recipient person URNs (e.g. 'urn:li:person:abc123,urn:li:person:def456'). | -| `subject` | string | No | Optional subject line for the message. | - -## `linkedin_organization_access_control_list` - -List organizations where the authenticated user has admin access via the Organizational Entity ACLs API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `role_assignee_urn` | string | Yes | URN of the person whose org access to check, e.g. urn:li:person:{id}. | - -## `linkedin_organization_admins_get` - -List administrators of a LinkedIn organization page using the Organizational Entity ACLs API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Numeric LinkedIn organization ID. | - -## `linkedin_organization_by_vanity_get` - -Find a LinkedIn organization by its vanity name (the custom URL slug used in the company's LinkedIn URL). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `vanity_name` | string | Yes | The vanity name (URL slug) of the organization to look up. | - -## `linkedin_organization_followers_count` - -Get the follower count for a LinkedIn organization using its URL-encoded URN. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `organization_urn` | string | Yes | URL-encoded URN of the organization, e.g. urn%3Ali%3Aorganization%3A{id}. | - -## `linkedin_organization_get` - -Retrieve details of a LinkedIn organization (company page) by its numeric ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The numeric ID of the LinkedIn organization. | - -## `linkedin_organization_post_create` - -Create a UGC post on behalf of a LinkedIn organization. The post will appear on the organization's page. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `organization_id` | string | Yes | The numeric ID of the organization to post on behalf of. | -| `text` | string | Yes | The text content of the post. | -| `visibility` | string | No | Visibility of the post. PUBLIC or CONNECTIONS. | - -## `linkedin_organization_search` - -Search LinkedIn organizations by keyword using the company search API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of results to return. | -| `keywords` | string | Yes | Keywords to search for organizations. | - -## `linkedin_organizations_batch_get` - -Batch get multiple LinkedIn organizations by their numeric IDs. Works without admin access. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `ids` | string | Yes | Comma-separated list of organization IDs to retrieve (e.g. '12345,67890'). | - -## `linkedin_post_comment_create` - -Add a comment to a LinkedIn UGC post on behalf of a member. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor` | string | Yes | URN of the member leaving the comment, e.g. urn:li:person:{id}. | -| `text` | string | Yes | The text content of the comment. | -| `ugc_post_urn` | string | Yes | URL-encoded URN of the UGC post to comment on, e.g. urn%3Ali%3AugcPost%3A{id}. | - -## `linkedin_post_comments_list` - -List comments on a LinkedIn UGC post. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Maximum number of comments to return. | -| `start` | integer | No | Pagination start index (0-based offset). | -| `ugc_post_urn` | string | Yes | URL-encoded URN of the UGC post to retrieve comments for, e.g. urn%3Ali%3AugcPost%3A{id}. | - -## `linkedin_post_create` - -Create a UGC post on LinkedIn on behalf of the authenticated user or organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `author` | string | Yes | URN of the post author, e.g. urn:li:person:{id} or urn:li:organization:{id}. | -| `text` | string | Yes | The text content of the post. | -| `visibility` | string | No | Visibility of the post. Options: PUBLIC, CONNECTIONS. Defaults to PUBLIC. | - -## `linkedin_post_delete` - -Delete a UGC post from LinkedIn by its ID. This action is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | URL-encoded post URN, e.g. urn%3Ali%3AugcPost%3A12345. | - -## `linkedin_post_get` - -Get a specific LinkedIn post by its URL-encoded URN (e.g. urn%3Ali%3AugcPost%3A12345). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | URL-encoded post URN, e.g. urn%3Ali%3AugcPost%3A12345. | - -## `linkedin_post_like` - -Like a LinkedIn post on behalf of a person or organization. Uses the Reactions API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor_urn` | string | Yes | URN of the person or org liking the post, e.g. urn:li:person:{id}. | -| `entity_urn` | string | Yes | URN of the post to like, e.g. urn:li:ugcPost:{id} or urn:li:share:{id}. | - -## `linkedin_posts_list` - -List posts by a specific author (person or organization URN). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `author` | string | Yes | URL-encoded author URN, e.g. urn%3Ali%3Aperson%3A{id} or urn%3Ali%3Aorganization%3A{id}. | -| `count` | integer | No | Maximum number of results to return. | -| `start` | integer | No | Pagination start index (0-based offset). | - -## `linkedin_profile_get` - -Retrieve the current authenticated user's LinkedIn profile including first name, last name, ID, and profile picture. - -## `linkedin_reaction_create` - -Create a reaction (like, praise, empathy, etc.) on a LinkedIn post or comment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor_urn` | string | Yes | The URN of the person reacting (e.g. 'urn:li:person:abc123'). | -| `entity_urn` | string | Yes | The URN of the post or comment to react to. | -| `reaction_type` | string | Yes | The type of reaction. One of: LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT. | - -## `linkedin_reaction_delete` - -Delete a reaction from a LinkedIn post or comment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `actor_urn` | string | Yes | The URN of the person whose reaction is being deleted (e.g. 'urn:li:person:abc123'). | -| `entity_urn` | string | Yes | The URN of the post or comment the reaction was made on. | - -## `linkedin_reactions_list` - -List all reactions on a LinkedIn post or entity. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `count` | integer | No | Number of reactions to return per page. | -| `entity_urn` | string | Yes | The URN of the post or entity to list reactions for. | -| `start` | integer | No | Offset for pagination. | - -## `linkedin_share_create` - -Create a post on LinkedIn on behalf of a person or organization. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `owner` | string | Yes | URN of the share owner, e.g. urn:li:person:{id} or urn:li:organization:{id}. | -| `text` | string | Yes | The text content of the share. | -| `visibility_code` | string | No | Visibility of the share. Options: anyone, connectionsOnly. Defaults to anyone. | - -## `linkedin_social_metadata_get` - -Get engagement metadata (likes, comments, reaction counts) for a post or share by its URN. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `share_urn` | string | Yes | URL-encoded post/share URN, e.g. urn%3Ali%3AugcPost%3A12345. | - -## `linkedin_userinfo_get` - -Get the authenticated user's OpenID Connect userinfo including id, name, email, and profile picture. + diff --git a/src/content/docs/reference/agent-connectors/outreach.mdx b/src/content/docs/reference/agent-connectors/outreach.mdx index 0613c7ae0..b740911ee 100644 --- a/src/content/docs/reference/agent-connectors/outreach.mdx +++ b/src/content/docs/reference/agent-connectors/outreach.mdx @@ -2,19 +2,19 @@ title: Outreach description: Connect with Outreach to manage prospects, accounts, sequences, emails, calls, and sales engagement workflows. tableOfContents: true +sidebar: + label: Outreach head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/outreach'
@@ -30,568 +30,4 @@ Supports authentication: ## Tool list -## `outreach_accounts_create` - -Create a new account (company) in Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Description of the account | -| `domain` | string | No | Website domain of the account | -| `industry` | string | No | Industry of the account | -| `linkedin_url` | string | No | LinkedIn company page URL | -| `locality` | string | No | Location/city of the account | -| `name` | string | Yes | Name of the account (company) | -| `number_of_employees` | integer | No | Number of employees at the account | -| `owner_id` | integer | No | ID of the user (owner) to assign this account to | -| `tags` | `array` | No | Array of tags to apply to the account | -| `website_url` | string | No | Website URL of the account | - -## `outreach_accounts_delete` - -Permanently delete an account from Outreach by ID. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | integer | Yes | The unique identifier of the account to delete | - -## `outreach_accounts_get` - -Retrieve a single account by ID from Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | integer | Yes | The unique identifier of the account to retrieve | - -## `outreach_accounts_list` - -List all accounts in Outreach with optional filtering, sorting, and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_domain` | string | No | Filter accounts by domain | -| `filter_name` | string | No | Filter accounts by name | -| `page_offset` | integer | No | Offset for pagination (number of records to skip) | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order (e.g., '-createdAt') | - -## `outreach_accounts_update` - -Update an existing account in Outreach. Only provided fields will be changed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | integer | Yes | The unique identifier of the account to update | -| `description` | string | No | Updated description of the account | -| `domain` | string | No | Updated website domain | -| `industry` | string | No | Updated industry of the account | -| `name` | string | No | Updated name of the account | -| `number_of_employees` | integer | No | Updated number of employees | -| `owner_id` | integer | No | Updated owner user ID | -| `tags` | `array` | No | Updated array of tags | -| `website_url` | string | No | Updated website URL | - -## `outreach_calls_create` - -Log a call record in Outreach. Used to track inbound or outbound call activity against a prospect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `answered_at` | string | No | ISO 8601 datetime when the call was answered | -| `call_disposition_id` | integer | No | ID of the call disposition (outcome category) | -| `call_purpose_id` | integer | No | ID of the call purpose | -| `direction` | string | No | Direction of the call. Options: inbound, outbound | -| `duration` | integer | No | Duration of the call in seconds | -| `note` | string | No | Note or summary about the call | -| `outcome` | string | No | Outcome of the call (e.g., connected, no_answer, left_voicemail) | -| `prospect_id` | integer | No | ID of the prospect associated with this call | - -## `outreach_calls_get` - -Retrieve a single call record by ID from Outreach, including direction, outcome, note, recording URL, and related prospect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `call_id` | integer | Yes | The unique identifier of the call to retrieve | - -## `outreach_calls_list` - -List call records in Outreach with optional filtering by prospect, direction, or outcome. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_direction` | string | No | Filter calls by direction. Options: inbound, outbound | -| `filter_prospect_id` | integer | No | Filter calls by prospect ID | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_mailboxes_get` - -Retrieve a single mailbox by ID from Outreach, including its email address, sender name, and sync status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `mailbox_id` | integer | Yes | The unique identifier of the mailbox to retrieve | - -## `outreach_mailboxes_list` - -List all mailboxes (sender email addresses) configured in Outreach. Mailboxes are required when enrolling prospects in sequences. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_email` | string | No | Filter mailboxes by email address | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | - -## `outreach_mailings_get` - -Retrieve a single mailing by ID from Outreach, including its body, subject, state, and related prospect details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `mailing_id` | integer | Yes | The unique identifier of the mailing to retrieve | - -## `outreach_mailings_list` - -List mailings (emails sent or scheduled) in Outreach with optional filtering and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_prospect_id` | integer | No | Filter mailings by prospect ID | -| `filter_state` | string | No | Filter by mailing state. Options: bounced, delivered, delivering, drafted, failed, opened, placeholder, queued, replied, scheduled | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_opportunities_create` - -Create a new opportunity in Outreach to track sales deals. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | integer | No | ID of the account associated with this opportunity | -| `amount` | number | No | Monetary value of the opportunity | -| `close_date` | string | Yes | Expected close date for the opportunity in full ISO 8601 datetime format (YYYY-MM-DDTHH:MM:SS.000Z) | -| `name` | string | Yes | Name or title of the opportunity | -| `owner_id` | integer | No | ID of the user (owner) responsible for this opportunity | -| `probability` | integer | No | Probability of closing (0-100) | -| `prospect_id` | integer | No | ID of the prospect (primary contact) associated with this opportunity | -| `stage_id` | integer | No | ID of the opportunity stage | - -## `outreach_opportunities_delete` - -Permanently delete an opportunity from Outreach by ID. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `opportunity_id` | integer | Yes | The unique identifier of the opportunity to delete | - -## `outreach_opportunities_get` - -Retrieve a single opportunity by ID from Outreach, including its name, amount, close date, and stage. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `opportunity_id` | integer | Yes | The unique identifier of the opportunity to retrieve | - -## `outreach_opportunities_list` - -List opportunities in Outreach with optional filtering by name, prospect, or account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_name` | string | No | Filter opportunities by name | -| `filter_prospect_id` | integer | No | Filter by prospect ID | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_opportunities_update` - -Update an existing opportunity in Outreach. Only provided fields will be changed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `amount` | number | No | Updated monetary value of the opportunity | -| `close_date` | string | No | Updated expected close date (ISO 8601 format) | -| `name` | string | No | Updated name of the opportunity | -| `opportunity_id` | integer | Yes | The unique identifier of the opportunity to update | -| `owner_id` | integer | No | Updated owner user ID | -| `probability` | integer | No | Updated probability of closing (0-100) | -| `stage_id` | integer | No | Updated opportunity stage ID | - -## `outreach_prospects_create` - -Create a new prospect in Outreach. Provide at minimum a first name, last name, or email address. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | integer | No | ID of the account to associate with this prospect | -| `address_city` | string | No | City of the prospect's address | -| `address_country` | string | No | Country of the prospect's address | -| `address_state` | string | No | State of the prospect's address | -| `company` | string | No | Company name of the prospect | -| `emails` | `array` | No | Array of email addresses for the prospect | -| `first_name` | string | No | First name of the prospect | -| `github_url` | string | No | GitHub profile URL of the prospect | -| `last_name` | string | No | Last name of the prospect | -| `linkedin_url` | string | No | LinkedIn profile URL of the prospect | -| `owner_id` | integer | No | ID of the user (owner) to assign this prospect to | -| `phones` | `array` | No | Array of phone numbers for the prospect | -| `tags` | `array` | No | Array of tags to apply to the prospect | -| `title` | string | No | Job title of the prospect | -| `website_url` | string | No | Personal or company website URL of the prospect | - -## `outreach_prospects_delete` - -Permanently delete a prospect from Outreach by ID. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `prospect_id` | integer | Yes | The unique identifier of the prospect to delete | - -## `outreach_prospects_get` - -Retrieve a single prospect by ID from Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `prospect_id` | integer | Yes | The unique identifier of the prospect to retrieve | - -## `outreach_prospects_list` - -List all prospects in Outreach with optional filtering, sorting, and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_company` | string | No | Filter prospects by company name | -| `filter_email` | string | No | Filter prospects by email address | -| `filter_first_name` | string | No | Filter prospects by first name | -| `filter_last_name` | string | No | Filter prospects by last name | -| `page_offset` | integer | No | Offset for pagination (number of records to skip) | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order (e.g., '-createdAt') | - -## `outreach_prospects_update` - -Update an existing prospect in Outreach. Only provided fields will be changed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `account_id` | integer | No | ID of the account to associate with this prospect | -| `address_city` | string | No | City of the prospect's address | -| `address_country` | string | No | Country of the prospect's address | -| `address_state` | string | No | State of the prospect's address | -| `company` | string | No | Company name of the prospect | -| `emails` | `array` | No | Array of email addresses for the prospect | -| `first_name` | string | No | First name of the prospect | -| `last_name` | string | No | Last name of the prospect | -| `linkedin_url` | string | No | LinkedIn profile URL of the prospect | -| `owner_id` | integer | No | ID of the user (owner) to assign this prospect to | -| `phones` | `array` | No | Array of phone numbers for the prospect | -| `prospect_id` | integer | Yes | The unique identifier of the prospect to update | -| `tags` | `array` | No | Array of tags to apply to the prospect | -| `title` | string | No | Job title of the prospect | - -## `outreach_sequence_states_create` - -Enroll a prospect in a sequence by creating a sequence state. Requires a prospect ID, sequence ID, and mailbox ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `mailbox_id` | integer | Yes | ID of the mailbox to use for sending sequence emails | -| `prospect_id` | integer | Yes | ID of the prospect to enroll in the sequence | -| `sequence_id` | integer | Yes | ID of the sequence to enroll the prospect in | - -## `outreach_sequence_states_delete` - -Remove a prospect from a sequence by deleting the sequence state record. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sequence_state_id` | integer | Yes | The unique identifier of the sequence state to delete | - -## `outreach_sequence_states_get` - -Retrieve a single sequence state (enrollment record) by ID from Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sequence_state_id` | integer | Yes | The unique identifier of the sequence state to retrieve | - -## `outreach_sequence_states_list` - -List sequence states (enrollment records) in Outreach, showing which prospects are enrolled in which sequences. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_prospect_id` | integer | No | Filter by prospect ID | -| `filter_sequence_id` | integer | No | Filter by sequence ID | -| `filter_state` | string | No | Filter by state. Options: active, pending, finished, paused, disabled, failed, bounced, opted_out | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | - -## `outreach_sequence_steps_get` - -Retrieve a single sequence step by ID from Outreach, including its step order, action type, and associated sequence. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sequence_step_id` | integer | Yes | The unique identifier of the sequence step to retrieve | - -## `outreach_sequence_steps_list` - -List all sequence steps in Outreach. Sequence steps define the individual actions (emails, calls, tasks) within a sequence. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_sequence_id` | integer | No | Filter sequence steps by sequence ID | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | - -## `outreach_sequences_create` - -Create a new sequence in Outreach for automated sales engagement. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Description of the sequence | -| `name` | string | Yes | Name of the sequence | -| `owner_id` | integer | No | ID of the user (owner) to assign this sequence to | -| `sequence_type` | string | No | Type of the sequence. Options: 'date' or 'interval' | -| `tags` | `array` | No | Array of tags to apply to the sequence | - -## `outreach_sequences_delete` - -Permanently delete a sequence from Outreach by ID. This action cannot be undone and will remove all associated sequence steps. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sequence_id` | integer | Yes | The unique identifier of the sequence to delete | - -## `outreach_sequences_get` - -Retrieve a single sequence by ID from Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `sequence_id` | integer | Yes | The unique identifier of the sequence to retrieve | - -## `outreach_sequences_list` - -List all sequences in Outreach with optional filtering and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_enabled` | boolean | No | Filter by enabled status (true or false) | -| `filter_name` | string | No | Filter sequences by name | -| `page_offset` | integer | No | Offset for pagination (number of records to skip) | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_sequences_update` - -Update an existing sequence in Outreach. Use this to rename a sequence, change its description, or enable/disable it. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description of the sequence | -| `enabled` | boolean | No | Whether the sequence should be active/enabled | -| `name` | string | No | Updated name of the sequence | -| `sequence_id` | integer | Yes | The unique identifier of the sequence to update | -| `tags` | `array` | No | Updated array of tags for the sequence | - -## `outreach_stages_get` - -Retrieve a single opportunity stage by ID from Outreach, including its name, color, and order. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `stage_id` | integer | Yes | The unique identifier of the opportunity stage to retrieve | - -## `outreach_stages_list` - -List all opportunity stages (pipeline stages) configured in Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | - -## `outreach_tags_list` - -List all tags configured in Outreach that can be applied to prospects, accounts, and sequences. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_name` | string | No | Filter tags by name | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | - -## `outreach_tasks_complete` - -Mark an existing task as complete in Outreach. Only works for action_item and in_person tasks — call and email tasks cannot be completed this way. Use this instead of outreach_tasks_update to complete a task. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `completion_note` | string | No | Optional note to record when marking the task complete | -| `task_id` | integer | Yes | The unique identifier of the task to mark as complete | - -## `outreach_tasks_create` - -Create a new task in Outreach. Tasks can represent calls, emails, in-person meetings, or general action items. Both owner_id and prospect_id are required by the Outreach API. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `action` | string | Yes | Type of action for the task. Options: action_item, call, email, in_person | -| `due_at` | string | No | Due date/time for the task (ISO 8601 format) | -| `note` | string | No | Note or description for the task | -| `owner_id` | integer | Yes | ID of the user assigned to this task | -| `prospect_id` | integer | Yes | ID of the prospect associated with this task (subject). Required — must provide either prospect_id or account_id. | - -## `outreach_tasks_delete` - -Permanently delete a task from Outreach by ID. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `task_id` | integer | Yes | The unique identifier of the task to delete | - -## `outreach_tasks_get` - -Retrieve a single task by ID from Outreach, including its action type, due date, note, and associated prospect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `task_id` | integer | Yes | The unique identifier of the task to retrieve | - -## `outreach_tasks_list` - -List tasks in Outreach with optional filtering by state, action type, prospect, or due date. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_prospect_id` | integer | No | Filter tasks by prospect ID | -| `filter_state` | string | No | Filter tasks by state. Options: incomplete, complete | -| `filter_task_type` | string | No | Filter tasks by task type. Options: action_item, call, email, in_person | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_tasks_update` - -Update an existing task in Outreach. Supports changing action, note, and due date. To mark a task complete, use the outreach_tasks_complete tool instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `action` | string | No | Updated action type. Options: action_item, call, email, in_person | -| `due_at` | string | No | Updated due date/time for the task (ISO 8601 format) | -| `note` | string | No | Updated note or description for the task | -| `task_id` | integer | Yes | The unique identifier of the task to update | - -## `outreach_templates_create` - -Create a new email template in Outreach. Templates can be used in sequences and for manual email sends. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body_html` | string | No | HTML body content of the template | -| `name` | string | Yes | Name of the template | -| `owner_id` | integer | No | ID of the user who owns this template | -| `subject` | string | No | Email subject line of the template | -| `tags` | `array` | No | Array of tags to apply to the template | - -## `outreach_templates_delete` - -Permanently delete an email template from Outreach by ID. This action cannot be undone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `template_id` | integer | Yes | The unique identifier of the template to delete | - -## `outreach_templates_get` - -Retrieve a single email template by ID from Outreach, including its subject, body, and usage statistics. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `template_id` | integer | Yes | The unique identifier of the template to retrieve | - -## `outreach_templates_list` - -List email templates in Outreach with optional filtering by name. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_name` | string | No | Filter templates by name | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_templates_update` - -Update an existing email template in Outreach. Only provided fields will be changed. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body_html` | string | No | Updated HTML body content | -| `name` | string | No | Updated name of the template | -| `subject` | string | No | Updated email subject line | -| `tags` | `array` | No | Updated array of tags | -| `template_id` | integer | Yes | The unique identifier of the template to update | - -## `outreach_users_get` - -Retrieve a single Outreach user by ID, including their name, email, and role information. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `user_id` | integer | Yes | The unique identifier of the user to retrieve | - -## `outreach_users_list` - -List all users in the Outreach organization with optional filtering and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter_email` | string | No | Filter users by email address | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | -| `sort` | string | No | Sort field. Prefix with '-' for descending order | - -## `outreach_webhooks_create` - -Create a new webhook in Outreach to receive event notifications at a specified URL. Outreach will POST event payloads to the provided URL when subscribed events occur. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `action` | string | No | The event action to subscribe to (e.g., created, updated, deleted) | -| `resource_type` | string | No | The resource type to subscribe to events for (e.g., prospect, account, sequenceState) | -| `secret` | string | No | A secret string used to sign webhook payloads for verification | -| `url` | string | Yes | The HTTPS URL to receive webhook event payloads | - -## `outreach_webhooks_delete` - -Permanently delete a webhook from Outreach by ID. Outreach will stop sending event notifications to the associated URL. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | integer | Yes | The unique identifier of the webhook to delete | - -## `outreach_webhooks_get` - -Retrieve a single webhook configuration by ID from Outreach. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `webhook_id` | integer | Yes | The unique identifier of the webhook to retrieve | - -## `outreach_webhooks_list` - -List all webhooks configured in Outreach for receiving event notifications. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `page_offset` | integer | No | Offset for pagination | -| `page_size` | integer | No | Number of results per page (max 1000) | + diff --git a/src/content/docs/reference/agent-connectors/pagerduty.mdx b/src/content/docs/reference/agent-connectors/pagerduty.mdx index 4cc5f543c..cc3222095 100644 --- a/src/content/docs/reference/agent-connectors/pagerduty.mdx +++ b/src/content/docs/reference/agent-connectors/pagerduty.mdx @@ -2,19 +2,19 @@ title: PagerDuty description: Connect to PagerDuty to manage incidents, services, users, teams, escalation policies, schedules, and on-call rotations. tableOfContents: true +sidebar: + label: PagerDuty head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/pagerduty'
@@ -30,475 +30,4 @@ Supports authentication: ## Tool list -## `pagerduty_escalation_policies_list` - -List escalation policies in PagerDuty. Supports filtering by query, user, team, and includes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional resources to include. Options: services, teams, targets. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by name. | -| `sort_by` | string | No | Used to specify a field to sort the response on. Options: name, name:asc, name:desc. | -| `team_ids` | string | No | Comma-separated list of team IDs to filter escalation policies by. | -| `user_ids` | string | No | Comma-separated list of user IDs to filter escalation policies for. | - -## `pagerduty_escalation_policy_create` - -Create a new escalation policy in PagerDuty. Escalation policies define who gets notified and in what order when an incident is triggered. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | A description of the escalation policy. | -| `name` | string | Yes | The name of the escalation policy. | -| `num_loops` | integer | No | The number of times the escalation policy will repeat after reaching the end of its escalation rules. | -| `on_call_handoff_notifications` | string | No | Determines how on call handoff notifications will be sent for users on the escalation policy. Options: if_has_services, always. | -| `rule_escalation_delay_in_minutes` | integer | No | The number of minutes before an unacknowledged incident escalates to the next rule. | -| `target_id` | string | Yes | The ID of the user or schedule to notify in the first escalation rule. | -| `target_type` | string | No | The type of the first escalation rule target. Options: user_reference, schedule_reference. | - -## `pagerduty_escalation_policy_delete` - -Delete a PagerDuty escalation policy. The policy must not be in use by any services or schedules. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the escalation policy to delete. | - -## `pagerduty_escalation_policy_get` - -Get details of a specific PagerDuty escalation policy by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the escalation policy to retrieve. | -| `include` | string | No | Additional resources to include. Options: services, teams, targets. | - -## `pagerduty_escalation_policy_update` - -Update an existing PagerDuty escalation policy's name, description, or loop settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description of the escalation policy. | -| `id` | string | Yes | The ID of the escalation policy to update. | -| `name` | string | No | The updated name of the escalation policy. | -| `num_loops` | integer | No | The number of times the escalation policy will repeat after reaching the end. | -| `on_call_handoff_notifications` | string | No | Determines how on-call handoff notifications are sent. Options: if_has_services, always. | - -## `pagerduty_incident_create` - -Create a new incident in PagerDuty. Requires a title, service ID, and the email of the user creating the incident. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `body_details` | string | No | Additional details about the incident body (plain text). | -| `escalation_policy_id` | string | No | The ID of the escalation policy to assign to the incident. | -| `from_email` | string | Yes | The email address of the user creating the incident. Required by PagerDuty. | -| `incident_key` | string | No | A string that identifies the incident. Used for deduplication. | -| `priority_id` | string | No | The ID of the priority to assign to the incident. | -| `service_id` | string | Yes | The ID of the service the incident belongs to. | -| `title` | string | Yes | A brief description of the incident. | -| `urgency` | string | No | The urgency of the incident. Options: high, low. | - -## `pagerduty_incident_get` - -Get details of a specific PagerDuty incident by its ID, including status, assignments, services, and timeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the incident to retrieve. | - -## `pagerduty_incident_manage` - -Manage multiple PagerDuty incidents in bulk. Acknowledge, resolve, merge, or reassign multiple incidents at once. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `from_email` | string | Yes | The email address of the user performing the bulk action. Required by PagerDuty. | -| `incident_ids` | string | Yes | Comma-separated list of incident IDs to manage. | -| `status` | string | Yes | The status to apply to all specified incidents. Options: acknowledged, resolved. | - -## `pagerduty_incident_note_create` - -Add a note to a PagerDuty incident. Notes are visible to all responders on the incident. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `content` | string | Yes | The content of the note to add to the incident. | -| `from_email` | string | Yes | The email address of the user creating the note. Required by PagerDuty. | -| `id` | string | Yes | The ID of the incident to add a note to. | - -## `pagerduty_incident_update` - -Update an existing PagerDuty incident. Can change status, urgency, title, priority, escalation policy, or reassign it. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `assignee_id` | string | No | The ID of the user to assign the incident to. | -| `escalation_policy_id` | string | No | The ID of the escalation policy to assign to the incident. | -| `from_email` | string | Yes | The email address of the user making the update. Required by PagerDuty. | -| `id` | string | Yes | The ID of the incident to update. | -| `priority_id` | string | No | The ID of the priority to assign to the incident. | -| `resolution` | string | No | The resolution note for the incident (used when resolving). | -| `status` | string | No | The new status of the incident. Options: acknowledged, resolved. | -| `title` | string | No | A brief description of the incident. | -| `urgency` | string | No | The urgency of the incident. Options: high, low. | - -## `pagerduty_incidents_list` - -List existing incidents in PagerDuty. Supports filtering by status, urgency, service, team, assigned user, and date range. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `date_range` | string | No | When set to 'all', the since and until parameters and defaults are ignored. | -| `include` | string | No | Array of additional resources to include. Options: acknowledgers, agents, assignees, conference_bridge, escalation_policies, first_trigger_log_entries, responders, services, teams, users. | -| `limit` | integer | No | The number of results to return per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `service_ids` | string | No | Comma-separated list of service IDs to filter incidents by. | -| `since` | string | No | The start of the date range to search (ISO 8601 format). | -| `sort_by` | string | No | Used to specify a field you would like to sort the response on. Options: incident_number, created_at, resolved_at, urgency. | -| `statuses` | string | No | Comma-separated list of statuses to filter by. Options: triggered, acknowledged, resolved. | -| `team_ids` | string | No | Comma-separated list of team IDs to filter incidents by. | -| `until` | string | No | The end of the date range to search (ISO 8601 format). | -| `urgencies` | string | No | Comma-separated list of urgencies to filter by. Options: high, low. | -| `user_ids` | string | No | Comma-separated list of user IDs to filter incidents assigned to. | - -## `pagerduty_log_entries_list` - -List log entries across all incidents in PagerDuty. Log entries record actions taken on incidents including notifications, acknowledgements, and assignments. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional resources to include. Options: incidents, services, channels, teams. | -| `is_overview` | boolean | No | If true, only show log entries of type 'notify_log_entry'. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `since` | string | No | The start of the date range (ISO 8601). | -| `team_ids` | string | No | Comma-separated list of team IDs to filter log entries by. | -| `time_zone` | string | No | Time zone for the log entries (IANA format). | -| `until` | string | No | The end of the date range (ISO 8601). | - -## `pagerduty_log_entry_get` - -Get details of a specific PagerDuty log entry by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the log entry to retrieve. | -| `include` | string | No | Additional resources to include. Options: incidents, services, channels, teams. | -| `time_zone` | string | No | Time zone for the log entry (IANA format). | - -## `pagerduty_maintenance_window_create` - -Create a new maintenance window in PagerDuty. During a maintenance window, no incidents will be created for the associated services. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | A description of the maintenance window. | -| `end_time` | string | Yes | The end time of the maintenance window (ISO 8601 format). | -| `from_email` | string | Yes | The email address of the user creating the maintenance window. Required by PagerDuty. | -| `service_ids` | string | Yes | Comma-separated list of service IDs to include in the maintenance window. | -| `start_time` | string | Yes | The start time of the maintenance window (ISO 8601 format). | - -## `pagerduty_maintenance_window_delete` - -Delete a PagerDuty maintenance window. Only future and ongoing maintenance windows may be deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the maintenance window to delete. | - -## `pagerduty_maintenance_window_get` - -Get details of a specific PagerDuty maintenance window by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the maintenance window to retrieve. | -| `include` | string | No | Additional resources to include. Options: services, teams. | - -## `pagerduty_maintenance_window_update` - -Update an existing PagerDuty maintenance window's description, start time, or end time. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description of the maintenance window. | -| `end_time` | string | No | Updated end time of the maintenance window (ISO 8601 format). | -| `id` | string | Yes | The ID of the maintenance window to update. | -| `start_time` | string | No | Updated start time of the maintenance window (ISO 8601 format). | - -## `pagerduty_maintenance_windows_list` - -List maintenance windows in PagerDuty. Maintenance windows disable incident notifications for services during scheduled maintenance periods. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | string | No | Filter maintenance windows by time. Options: past, future, ongoing. | -| `include` | string | No | Additional resources to include. Options: services, teams. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by description. | -| `service_ids` | string | No | Comma-separated list of service IDs to filter maintenance windows by. | -| `team_ids` | string | No | Comma-separated list of team IDs to filter maintenance windows by. | - -## `pagerduty_notifications_list` - -List notifications sent for incidents in a given time range. Notifications are messages sent to users when incidents are triggered, acknowledged, or resolved. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `filter` | string | No | Filters the results by notification type. Options: sms_notification, email_notification, phone_notification, push_notification. | -| `include` | string | No | Additional resources to include. Options: users. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `since` | string | Yes | The start of the date range (ISO 8601). Required. | -| `time_zone` | string | No | Time zone for the notification data (IANA format). | -| `until` | string | Yes | The end of the date range (ISO 8601). Required. | - -## `pagerduty_oncalls_list` - -List who is on call right now or within a date range. Supports filtering by schedule, escalation policy, and user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `earliest` | boolean | No | When set to true, returns only the earliest on-call for each combination of escalation policy, escalation level, and user. | -| `escalation_policy_ids` | string | No | Comma-separated list of escalation policy IDs to filter by. | -| `include` | string | No | Additional resources to include. Options: users, schedules, escalation_policies. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `schedule_ids` | string | No | Comma-separated list of schedule IDs to filter by. | -| `since` | string | No | The start of the time range to retrieve on-call information (ISO 8601). | -| `time_zone` | string | No | Time zone for the on-call data (IANA format). | -| `until` | string | No | The end of the time range to retrieve on-call information (ISO 8601). | -| `user_ids` | string | No | Comma-separated list of user IDs to filter on-calls by. | - -## `pagerduty_priorities_list` - -List the priority options available for incidents in PagerDuty. Returns all configured priority levels. - -## `pagerduty_schedule_create` - -Create a new on-call schedule in PagerDuty with a single layer. Schedules determine who is on call at any given time. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | A description of the schedule. | -| `layer_name` | string | No | The name of the first schedule layer. | -| `layer_start` | string | Yes | The start time of the schedule layer (ISO 8601 format). | -| `name` | string | Yes | The name of the schedule. | -| `rotation_turn_length_seconds` | integer | No | The duration of each on-call rotation turn in seconds (e.g., 86400 = 1 day, 604800 = 1 week). | -| `rotation_virtual_start` | string | Yes | The effective start time of the rotation to align turn order (ISO 8601 format). | -| `time_zone` | string | Yes | The time zone of the schedule (IANA format, e.g., America/New_York). | -| `user_ids` | string | Yes | Comma-separated list of user IDs to include in the rotation. | - -## `pagerduty_schedule_delete` - -Delete a PagerDuty on-call schedule. The schedule must not be associated with any escalation policies. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the schedule to delete. | - -## `pagerduty_schedule_get` - -Get details of a specific PagerDuty on-call schedule by its ID, including layers and users. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the schedule to retrieve. | -| `since` | string | No | The start of the date range to show schedule entries for (ISO 8601). | -| `time_zone` | string | No | Time zone of the displayed schedule (IANA format). | -| `until` | string | No | The end of the date range to show schedule entries for (ISO 8601). | - -## `pagerduty_schedule_update` - -Update an existing PagerDuty on-call schedule's name, description, or time zone. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description of the schedule. | -| `id` | string | Yes | The ID of the schedule to update. | -| `name` | string | No | Updated name of the schedule. | -| `time_zone` | string | No | Updated time zone (IANA format, e.g., America/New_York). | - -## `pagerduty_schedules_list` - -List on-call schedules in PagerDuty. Supports filtering by query string and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional resources to include. Options: schedule_layers, teams, users. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by name. | - -## `pagerduty_service_create` - -Create a new service in PagerDuty. A service represents something you monitor and manage incidents for. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `acknowledgement_timeout` | integer | No | Time in seconds that an incident is automatically re-triggered after being acknowledged. Set to 0 to disable. | -| `alert_creation` | string | No | Whether a service creates only incidents or creates both incidents and alerts. Options: create_incidents, create_alerts_and_incidents. | -| `auto_resolve_timeout` | integer | No | Time in seconds that an incident is automatically resolved if left open. Set to 0 to disable. | -| `description` | string | No | The user-provided description of the service. | -| `escalation_policy_id` | string | Yes | The ID of the escalation policy to assign to this service. | -| `name` | string | Yes | The name of the service. | - -## `pagerduty_service_delete` - -Delete an existing PagerDuty service. This action is irreversible. Only services without open incidents may be deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the service to delete. | - -## `pagerduty_service_get` - -Get details of a specific PagerDuty service by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the service to retrieve. | -| `include` | string | No | Additional resources to include. Options: escalation_policies, teams, integrations. | - -## `pagerduty_service_update` - -Update an existing PagerDuty service. Can change name, description, escalation policy, timeouts, and alert creation settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `acknowledgement_timeout` | integer | No | Time in seconds that an incident is automatically re-triggered after being acknowledged. | -| `alert_creation` | string | No | Whether a service creates only incidents or also alerts. Options: create_incidents, create_alerts_and_incidents. | -| `auto_resolve_timeout` | integer | No | Time in seconds that an incident is automatically resolved if left open. | -| `description` | string | No | The user-provided description of the service. | -| `escalation_policy_id` | string | No | The ID of the escalation policy to assign to this service. | -| `id` | string | Yes | The ID of the service to update. | -| `name` | string | No | The name of the service. | -| `status` | string | No | The current state of the service. Options: active, warning, critical, maintenance, disabled. | - -## `pagerduty_services_list` - -List existing services in PagerDuty. Supports filtering by team, query string, and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional resources to include. Options: escalation_policies, teams, integrations, auto_pause_notifications_parameters. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by name. | -| `sort_by` | string | No | Sort results by this field. Options: name, name:asc, name:desc. | -| `team_ids` | string | No | Comma-separated list of team IDs to filter services by. | - -## `pagerduty_team_create` - -Create a new team in PagerDuty. Teams allow grouping of users and services. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | A description of the team. | -| `name` | string | Yes | The name of the team. | - -## `pagerduty_team_delete` - -Delete a PagerDuty team. The team must have no associated users, services, or escalation policies before it can be deleted. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the team to delete. | - -## `pagerduty_team_get` - -Get details of a specific PagerDuty team by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the team to retrieve. | - -## `pagerduty_team_update` - -Update an existing PagerDuty team's name or description. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Updated description of the team. | -| `id` | string | Yes | The ID of the team to update. | -| `name` | string | No | The updated name of the team. | - -## `pagerduty_teams_list` - -List teams in PagerDuty. Supports filtering by query string and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by name. | - -## `pagerduty_user_create` - -Create a new user in PagerDuty. Requires name, email, and the creating user's email in the From header. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `color` | string | No | The schedule color for the user. | -| `email` | string | Yes | The user's email address. | -| `from_email` | string | Yes | The email address of the admin creating this user. Required by PagerDuty. | -| `name` | string | Yes | The name of the user. | -| `role` | string | No | The user's role. Options: admin, limited_user, observer, owner, read_only_user, restricted_access, read_only_limited_user, user. | -| `time_zone` | string | No | The time zone of the user (IANA format, e.g., America/New_York). | - -## `pagerduty_user_delete` - -Delete a PagerDuty user. Users cannot be deleted if they are the only remaining account owner. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the user to delete. | - -## `pagerduty_user_get` - -Get details of a specific PagerDuty user by their ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | The ID of the user to retrieve. | -| `include` | string | No | Additional resources to include. Options: contact_methods, notification_rules, teams. | - -## `pagerduty_user_update` - -Update an existing PagerDuty user's profile including name, email, role, time zone, and color. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `color` | string | No | The schedule color for the user. | -| `email` | string | No | The user's updated email address. | -| `id` | string | Yes | The ID of the user to update. | -| `name` | string | No | The updated name of the user. | -| `role` | string | No | The user's role. Options: admin, limited_user, observer, owner, read_only_user, restricted_access, read_only_limited_user, user. | -| `time_zone` | string | No | The time zone of the user (IANA format, e.g., America/New_York). | - -## `pagerduty_users_list` - -List users in PagerDuty. Supports filtering by query, team, and includes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `include` | string | No | Additional resources to include. Options: contact_methods, notification_rules, teams. | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by name. | -| `team_ids` | string | No | Comma-separated list of team IDs to filter users by. | - -## `pagerduty_vendors_list` - -List available PagerDuty vendors (integration types). Vendors represent the services or monitoring tools that can be integrated with PagerDuty. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | The number of results per page. Maximum 100. | -| `offset` | integer | No | Offset to start pagination search results. | -| `query` | string | No | Filters the results by vendor name. | + diff --git a/src/content/docs/reference/agent-connectors/supadata.mdx b/src/content/docs/reference/agent-connectors/supadata.mdx index a286138b3..858539ebe 100644 --- a/src/content/docs/reference/agent-connectors/supadata.mdx +++ b/src/content/docs/reference/agent-connectors/supadata.mdx @@ -2,19 +2,19 @@ title: Supadata description: Connect with Supadata to extract transcripts, metadata, and structured content from YouTube, social media, and the web using AI. tableOfContents: true +sidebar: + label: Supadata head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/supadata'
@@ -30,95 +30,4 @@ Supports authentication: ## Tool list -## `supadata_metadata_get` - -Retrieve unified metadata for a video or media URL including title, description, author info, engagement stats, media details, and creation date. Supports YouTube, TikTok, Instagram, X (Twitter), Facebook, and more. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `url` | string | Yes | URL of the video or media to retrieve metadata for. | - -## `supadata_transcript_get` - -Extract transcripts from YouTube, TikTok, Instagram, X (Twitter), Facebook, or direct file URLs. Supports native captions, auto-generated captions, or AI-generated transcripts. Returns timestamped segments with speaker labels. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `chunkSize` | integer | No | Maximum number of characters per transcript segment chunk. | -| `lang` | string | No | ISO 639-1 language code for the transcript (e.g., en, fr, de). Defaults to the video's original language. | -| `mode` | string | No | Transcript generation mode: native (use existing captions, 1 credit), auto (native with AI fallback), or generate (AI-generated, 2 credits/minute). | -| `text` | boolean | No | Return plain text instead of timestamped segments. Defaults to false. | -| `url` | string | Yes | URL of the video or media file to transcribe. Supports YouTube, TikTok, Instagram, X, Facebook, or direct video/audio file URLs. | - -## `supadata_web_map` - -Discover and return all URLs found on a website. Useful for site structure analysis, link auditing, and building crawl lists. Costs 1 credit per request. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `url` | string | Yes | Base URL of the website to map. | - -## `supadata_web_scrape` - -Scrape a web page and return its content as clean Markdown. Ideal for extracting readable content from any URL while stripping away navigation and ads. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `lang` | string | No | ISO 639-1 language code to request content in a specific language (e.g., en, fr, de). | -| `noLinks` | boolean | No | Strip all hyperlinks from the Markdown output. Defaults to false. | -| `url` | string | Yes | URL of the web page to scrape. | - -## `supadata_youtube_channel_get` - -Retrieve metadata for a YouTube channel including name, description, subscriber count, video count, and thumbnails. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `channelId` | string | Yes | YouTube channel ID, handle (@username), or full channel URL. | - -## `supadata_youtube_playlist_get` - -Retrieve metadata and video list for a YouTube playlist including title, description, video count, and individual video details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `playlistId` | string | Yes | YouTube playlist ID or full playlist URL. | - -## `supadata_youtube_search` - -Search YouTube for videos, channels, or playlists. Returns results with titles, IDs, descriptions, thumbnails, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `lang` | string | No | ISO 639-1 language code to filter results by language (e.g., en, fr). | -| `limit` | integer | No | Maximum number of results to return. | -| `query` | string | Yes | Search query string to find videos, channels, or playlists on YouTube. | -| `type` | string | No | Type of results to return: video, channel, or playlist. | - -## `supadata_youtube_transcript_get` - -Retrieve the transcript for a YouTube video by video ID or URL. Returns timestamped segments with text content. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `lang` | string | No | ISO 639-1 language code for the transcript (e.g., en, fr, de). | -| `text` | boolean | No | Return plain text instead of timestamped segments. Defaults to false. | -| `videoId` | string | Yes | YouTube video ID or full YouTube URL to retrieve the transcript for. | - -## `supadata_youtube_transcript_translate` - -Retrieve and translate a YouTube video transcript into a target language. Returns translated timestamped segments. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `lang` | string | Yes | ISO 639-1 language code to translate the transcript into (e.g., en, fr, es). | -| `text` | boolean | No | Return plain text instead of timestamped segments. Defaults to false. | -| `videoId` | string | Yes | YouTube video ID or full YouTube URL to translate the transcript for. | - -## `supadata_youtube_video_get` - -Retrieve detailed metadata for a YouTube video including title, description, view count, like count, duration, tags, thumbnails, and channel info. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `videoId` | string | Yes | YouTube video ID or full YouTube URL. | + diff --git a/src/content/docs/reference/agent-connectors/twitter.mdx b/src/content/docs/reference/agent-connectors/twitter.mdx index dc13575e0..60547a37f 100644 --- a/src/content/docs/reference/agent-connectors/twitter.mdx +++ b/src/content/docs/reference/agent-connectors/twitter.mdx @@ -2,19 +2,19 @@ title: Twitter / X description: Connect to Twitter. Read and write Tweets, read users, manage follows, bookmarks, etc. tableOfContents: true +sidebar: + label: Twitter / X head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/twitter'
@@ -30,860 +30,4 @@ Supports authentication: , ` | Yes | List of event types to subscribe to, e.g. profile.updated, follows, spaces | -| `user_id` | string | Yes | Twitter user ID to subscribe to activities for | - -## `twitter_blocked_users_get` - -Retrieves the authenticated user's block list. The id parameter must be the authenticated user's ID. Use Get Authenticated User action first to obtain your user ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Authenticated user's Twitter ID — must match the authenticated user | -| `max_results` | integer | No | Max results per page (1-1000) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_bookmark_add` - -Adds a specified, existing, and accessible Tweet to a user's bookmarks. Success is indicated by the 'bookmarked' field in the response. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `tweet_id` | string | Yes | ID of the Tweet to bookmark | - -## `twitter_bookmark_remove` - -Removes a Tweet from the authenticated user's bookmarks. The Tweet must have been previously bookmarked by the user for the action to have an effect. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `tweet_id` | string | Yes | ID of the bookmarked tweet to remove | - -## `twitter_bookmarks_get` - -Retrieves Tweets bookmarked by the authenticated user. The provided User ID must match the authenticated user's ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `tweet_fields` | string | No | Comma-separated tweet fields | - -## `twitter_compliance_job_create` - -Creates a new compliance job to check the status of Tweet or user IDs. Upload IDs as a plain text file (one ID per line) to the upload_url received in the response. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `resumable` | boolean | No | Whether the job should be resumable | -| `type` | string | Yes | Type of compliance job | - -## `twitter_compliance_job_get` - -Retrieves status, download/upload URLs, and other details for an existing Twitter compliance job specified by its unique ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Compliance job ID | - -## `twitter_compliance_jobs_list` - -Returns a list of recent compliance jobs, filtered by type (tweets or users) and optionally by status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `status` | string | No | Filter by job status | -| `type` | string | Yes | Type of compliance jobs to list | - -## `twitter_dm_conversation_events_get` - -Fetches Direct Message (DM) events for a one-on-one conversation with a specified participant ID, ordered chronologically newest to oldest. Does not support group DMs. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dm_event_fields` | string | No | Comma-separated DM event fields | -| `event_types` | string | No | Filter by event types | -| `expansions` | string | No | Comma-separated expansions | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `participant_id` | string | Yes | User ID of the DM conversation participant | - -## `twitter_dm_conversation_retrieve` - -Retrieves Direct Message (DM) events for a specific conversation ID on Twitter. Useful for analyzing messages and participant activities. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dm_conversation_id` | string | Yes | DM conversation ID | -| `dm_event_fields` | string | No | Comma-separated DM event fields | -| `expansions` | string | No | Comma-separated expansions | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | - -## `twitter_dm_conversation_send` - -Sends a message with optional text and/or media attachments (using pre-uploaded media_ids) to a specified Twitter Direct Message conversation. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dm_conversation_id` | string | Yes | DM conversation ID to send the message to | -| `media_id` | string | No | Pre-uploaded media ID to attach | -| `text` | string | No | Message text | - -## `twitter_dm_delete` - -Permanently deletes a specific Twitter Direct Message (DM) event using its event_id, if the authenticated user sent it. This action is irreversible and does not delete entire conversations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `event_id` | string | Yes | ID of the DM event to delete | -| `participant_id` | string | Yes | User ID of the DM conversation participant | - -## `twitter_dm_event_get` - -Fetches a specific Direct Message (DM) event by its unique ID. Allows optional expansion of related data like users or tweets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dm_event_fields` | string | No | Comma-separated DM event fields | -| `event_id` | string | Yes | DM event ID | -| `expansions` | string | No | Comma-separated expansions | - -## `twitter_dm_events_get` - -Returns recent Direct Message events for the authenticated user, such as new messages or changes in conversation participants. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `dm_event_fields` | string | No | Comma-separated DM event fields | -| `event_types` | string | No | Filter by event types | -| `expansions` | string | No | Comma-separated expansions | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | - -## `twitter_dm_group_conversation_create` - -Creates a new group Direct Message (DM) conversation on Twitter. The conversation_type must be 'Group'. Include participant_ids and an initial message with text and optional media attachments using media_id (not media_url). Media must be uploaded first. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `message_media_ids` | `array` | No | Media IDs to attach to initial message | -| `message_text` | string | Yes | Initial message text | -| `participant_ids` | `array` | Yes | List of Twitter user IDs to include | - -## `twitter_dm_send` - -Sends a new Direct Message with text and/or media (media_id for attachments must be pre-uploaded) to a specified Twitter user. Creates a new DM and does not modify existing messages. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `media_id` | string | No | Pre-uploaded media ID to attach | -| `participant_id` | string | Yes | Twitter user ID of the DM recipient | -| `text` | string | No | Message text | - -## `twitter_followers_get` - -Retrieves a list of users who follow a specified public Twitter user ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID to get followers for | -| `max_results` | integer | No | Max results per page (1-1000) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_following_get` - -Retrieves users followed by a specific Twitter user, allowing pagination and customization of returned user and tweet data fields via expansions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `max_results` | integer | No | Max results per page (1-1000) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_full_archive_search` - -Searches the full archive of public Tweets from March 2006 onwards. Use start_time and end_time together for a defined time window. Requires Academic Research access. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `end_time` | string | No | ISO 8601 end time | -| `expansions` | string | No | Comma-separated expansions | -| `max_results` | integer | No | Max results per page (10-500) | -| `next_token` | string | No | Next page token | -| `query` | string | Yes | Search query using X search syntax | -| `since_id` | string | No | Minimum tweet ID | -| `start_time` | string | No | ISO 8601 start time e.g. 2021-01-01T00:00:00Z | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `until_id` | string | No | Maximum tweet ID | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_full_archive_search_counts` - -Returns a count of Tweets from the full archive that match a specified query, aggregated by day, hour, or minute. start_time must be before end_time if both are provided. since_id/until_id cannot be used with start_time/end_time. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `end_time` | string | No | ISO 8601 end time | -| `granularity` | string | No | Aggregation granularity | -| `next_token` | string | No | Next page token | -| `query` | string | Yes | Search query | -| `since_id` | string | No | Minimum tweet ID | -| `start_time` | string | No | ISO 8601 start time | -| `until_id` | string | No | Maximum tweet ID | - -## `twitter_list_create` - -Creates a new, empty List on X (formerly Twitter). The provided name must be unique for the authenticated user. Accounts are added separately. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | Description of the list | -| `name` | string | Yes | Unique name for the new list | -| `private` | boolean | No | Whether the list should be private | - -## `twitter_list_delete` - -Permanently deletes a specified Twitter List using its ID. The list must be owned by the authenticated user. This action is irreversible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | ID of the Twitter List to delete | - -## `twitter_list_follow` - -Allows the authenticated user to follow a specific Twitter List they are permitted to access, subscribing them to the list's timeline. This does not automatically follow individual list members. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `list_id` | string | Yes | ID of the list to follow | - -## `twitter_list_followers_get` - -Fetches a list of users who follow a specific Twitter List, identified by its ID. Ensure the authenticated user has access if the list is private. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter List ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_list_lookup` - -Returns metadata for a specific Twitter List, identified by its ID. Does not return list members. Can expand the owner's User object via the expansions parameter. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter List ID | -| `list_fields` | string | No | Comma-separated list fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_list_member_add` - -Adds a user to a specified Twitter List. The list must be owned by the authenticated user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `list_id` | string | Yes | ID of the Twitter List | -| `user_id` | string | Yes | ID of the user to add | - -## `twitter_list_member_remove` - -Removes a user from a Twitter List. The response is_member field will be false if removal was successful or the user was not a member. The updated list of members is not returned. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Twitter List ID | -| `user_id` | string | Yes | ID of the user to remove from the list | - -## `twitter_list_members_get` - -Fetches members of a specific Twitter List, identified by its unique ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter List ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_list_pin` - -Pins a specified List to the authenticated user's profile. The List must exist, the user must have access rights, and the pin limit (typically 5 Lists) must not be exceeded. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `list_id` | string | Yes | ID of the list to pin | - -## `twitter_list_timeline_get` - -Fetches the most recent Tweets posted by members of a specified Twitter List. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter List ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_list_unfollow` - -Enables a user to unfollow a specific Twitter List, which removes its tweets from their timeline and stops related notifications. Reports following: false on success, even if the user was not initially following the list. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `list_id` | string | Yes | ID of the list to unfollow | - -## `twitter_list_unpin` - -Unpins a List from the authenticated user's profile. The user ID is automatically retrieved if not provided. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `list_id` | string | Yes | ID of the list to unpin | - -## `twitter_list_update` - -Updates an existing Twitter List's name, description, or privacy status. Requires the List ID and at least one mutable property. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | New description | -| `id` | string | Yes | Twitter List ID to update | -| `name` | string | No | New name for the list | -| `private` | boolean | No | Set to true to make private, false for public | - -## `twitter_media_upload` - -Uploads media (images only) to X/Twitter using the v2 API. Only supports images (tweet_image, dm_image) and subtitle files. For GIFs, videos, or any file larger than ~5 MB, use twitter_media_upload_large instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `media` | string | Yes | Base64-encoded image data | -| `media_category` | string | No | Media category for use context | -| `media_type` | string | Yes | MIME type, e.g. image/jpeg or image/png | - -## `twitter_media_upload_append` - -Appends a data chunk to an ongoing media upload session on X/Twitter. Use during chunked media uploads to append each segment of media data in sequence. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `media_data` | string | Yes | Base64-encoded chunk data | -| `media_id` | string | Yes | Media ID from the INIT step | -| `segment_index` | integer | Yes | Zero-based index of the chunk segment | - -## `twitter_media_upload_base64` - -Uploads media to X/Twitter using base64-encoded data. Use when you have media content as a base64 string. Only supports images and subtitle files. For videos or GIFs, use twitter_media_upload_large. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `media_category` | string | No | Media category for use context | -| `media_data` | string | Yes | Base64-encoded media data | -| `media_type` | string | Yes | MIME type, e.g. image/jpeg | - -## `twitter_media_upload_init` - -Initializes a media upload session for X/Twitter. Returns a media_id for subsequent APPEND and FINALIZE commands. Required for uploading large files or when using the chunked upload workflow. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `additional_owners` | string | No | Comma-separated user IDs to also own the media | -| `media_category` | string | No | Media category for use context | -| `media_type` | string | Yes | MIME type, e.g. video/mp4 or image/gif | -| `total_bytes` | integer | Yes | Total size of the media file in bytes | - -## `twitter_media_upload_large` - -Uploads media files to X/Twitter. Automatically uses chunked upload for GIFs, videos, and images larger than 5 MB. Use for videos, GIFs, or any file larger than 5 MB. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `additional_owners` | string | No | Comma-separated user IDs to also own the media | -| `media_category` | string | No | Media category for use context | -| `media_data` | string | Yes | Base64-encoded media file data | -| `media_type` | string | Yes | MIME type, e.g. video/mp4 or image/gif | -| `total_bytes` | integer | Yes | Total size of the file in bytes | - -## `twitter_media_upload_status_get` - -Gets the status of a media upload for X/Twitter. Use to check the processing status of uploaded media, especially for videos and GIFs. Only needed if the FINALIZE command returned processing_info. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `media_id` | string | Yes | Media ID from the upload INIT step | - -## `twitter_muted_users_get` - -Returns user objects muted by the X user identified by the id path parameter. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `max_results` | integer | No | Max results per page (1-1000) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_openapi_spec_get` - -Fetches the OpenAPI specification (JSON) for Twitter's API v2. Used to programmatically understand the API's structure for developing client libraries or tools. - -## `twitter_post_analytics_get` - -Retrieves analytics data for specified Posts within a defined time range. Returns engagement metrics, impressions, and other analytics. Requires OAuth 2.0 with tweet.read and users.read scopes. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `end_time` | string | Yes | ISO 8601 end time | -| `start_time` | string | Yes | ISO 8601 start time | -| `tweet_ids` | string | Yes | Comma-separated list of Tweet IDs | - -## `twitter_post_create` - -Creates a Tweet on Twitter. The `text` field is required unless card_uri, media_media_ids, poll_options, or quote_tweet_id is provided. Supports media, polls, geo, and reply targeting. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `geo_place_id` | string | No | Place ID for geo tag | -| `media_media_ids` | `array` | No | Media IDs to attach | -| `poll_duration_minutes` | integer | No | Duration of poll in minutes | -| `poll_options` | `array` | No | Up to 4 poll options | -| `quote_tweet_id` | string | No | ID of the tweet to quote | -| `reply_in_reply_to_tweet_id` | string | No | ID of the tweet to reply to | -| `text` | string | No | Text content of the tweet | - -## `twitter_post_delete` - -Irreversibly deletes a specific Tweet by its ID. The Tweet may persist in third-party caches after deletion. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | ID of the Tweet to delete | - -## `twitter_post_like` - -Allows the authenticated user to like a specific, accessible Tweet. The authenticated user's ID is automatically determined from the OAuth token — you only need to provide the tweet_id. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `tweet_id` | string | Yes | ID of the Tweet to like | - -## `twitter_post_likers_get` - -Retrieves users who have liked the Post (Tweet) identified by the provided ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Tweet ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_post_lookup` - -Fetches comprehensive details for a single Tweet by its unique ID, provided the Tweet exists and is accessible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Tweet ID | -| `media_fields` | string | No | Comma-separated media fields | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_post_quotes_get` - -Retrieves Tweets that quote a specified Tweet. Requires a valid Tweet ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Tweet ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `tweet_fields` | string | No | Comma-separated tweet fields | - -## `twitter_post_retweet` - -Retweets a Tweet for the authenticated user. The user ID is automatically fetched from the authenticated session — you only need to provide the tweet_id. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `tweet_id` | string | Yes | ID of the Tweet to retweet | - -## `twitter_post_retweeters_get` - -Retrieves users who publicly retweeted a specified public Post ID, excluding Quote Tweets and retweets from private accounts. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Tweet ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_post_retweets_get` - -Retrieves Tweets that Retweeted a specified public or authenticated-user-accessible Tweet ID. Optionally customize the response with fields and expansions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Tweet ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `tweet_fields` | string | No | Comma-separated tweet fields | - -## `twitter_post_unlike` - -Allows an authenticated user to remove their like from a specific post. The action is idempotent and completes successfully even if the post was not liked. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `tweet_id` | string | Yes | ID of the Tweet to unlike | - -## `twitter_post_unretweet` - -Removes a user's retweet of a specified Post, if the user had previously retweeted it. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `source_tweet_id` | string | Yes | ID of the Tweet to unretweet | - -## `twitter_posts_lookup` - -Retrieves detailed information for one or more Posts (Tweets) identified by their unique IDs. Allows selection of specific fields and expansions. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `ids` | string | Yes | Comma-separated list of Tweet IDs (up to 100) | -| `media_fields` | string | No | Comma-separated media fields | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_recent_search` - -Searches Tweets from the last 7 days matching a query using X's search syntax. Ideal for real-time analysis, trend monitoring, or retrieving posts from specific users (e.g., from:username). Note: impression_count returns 0 for other users' tweets — use retweet_count, like_count, or quote_count for engagement filtering instead. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `end_time` | string | No | ISO 8601 end time | -| `expansions` | string | No | Comma-separated expansions | -| `max_results` | integer | No | Max results per page (10-100) | -| `media_fields` | string | No | Comma-separated media fields | -| `next_token` | string | No | Next page token | -| `query` | string | Yes | Search query using X search syntax, e.g. from:username -is:retweet | -| `since_id` | string | No | Minimum tweet ID | -| `start_time` | string | No | ISO 8601 start time | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `until_id` | string | No | Maximum tweet ID | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_recent_tweet_counts` - -Retrieves the count of Tweets matching a specified search query within the last 7 days, aggregated by 'minute', 'hour', or 'day'. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `end_time` | string | No | ISO 8601 end time | -| `granularity` | string | No | Aggregation granularity | -| `query` | string | Yes | Search query | -| `since_id` | string | No | Minimum tweet ID | -| `start_time` | string | No | ISO 8601 start time | -| `until_id` | string | No | Maximum tweet ID | - -## `twitter_reply_visibility_set` - -Hides or unhides an existing reply Tweet. Allows the authenticated user to hide or unhide a reply to a conversation they own. You can only hide replies to posts you authored. Requires tweet.moderate.write OAuth scope. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `hidden` | boolean | Yes | true to hide, false to unhide | -| `tweet_id` | string | Yes | ID of the reply tweet to hide or unhide | - -## `twitter_space_get` - -Retrieves details for a Twitter Space by its ID, allowing for customization and expansion of related data. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter Space ID | -| `space_fields` | string | No | Comma-separated space fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_space_posts_get` - -Retrieves Tweets that were shared/posted during a Twitter Space broadcast. Returns Tweets that participants explicitly shared during the Space session, NOT audio transcripts. Most Spaces have zero associated Tweets — empty results are normal. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter Space ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `tweet_fields` | string | No | Comma-separated tweet fields | - -## `twitter_space_ticket_buyers_get` - -Retrieves a list of users who purchased tickets for a specific, valid, and ticketed Twitter Space. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter Space ID | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_spaces_by_creator_get` - -Retrieves Twitter Spaces created by a list of specified User IDs, with options to customize returned data fields. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `space_fields` | string | No | Comma-separated space fields | -| `user_fields` | string | No | Comma-separated user fields | -| `user_ids` | string | Yes | Comma-separated list of user IDs to get spaces for | - -## `twitter_spaces_get` - -Fetches detailed information for one or more Twitter Spaces (live, scheduled, or ended) by their unique IDs. At least one Space ID must be provided. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `ids` | string | Yes | Comma-separated list of Space IDs | -| `space_fields` | string | No | Comma-separated space fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_spaces_search` - -Searches for Twitter Spaces by a textual query. Optionally filter by state (live, scheduled, all) to discover audio conversations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `max_results` | integer | No | Max results per page (1-100) | -| `query` | string | Yes | Text to search for in Space titles | -| `space_fields` | string | No | Comma-separated space fields | -| `state` | string | No | Filter by space state | - -## `twitter_tweet_label_stream` - -Stream real-time Tweet label events (apply/remove). Requires Enterprise access and App-Only OAuth 2.0 auth. Returns PublicTweetNotice or PublicTweetUnviewable events. 403 errors indicate missing Enterprise access or wrong auth type. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `backfill_minutes` | integer | No | Minutes of backfill to stream on reconnect (0-5) | -| `expansions` | string | No | Comma-separated expansions | -| `tweet_fields` | string | No | Comma-separated tweet fields | - -## `twitter_tweet_usage_get` - -Fetches Tweet usage statistics for a Project (e.g., consumption, caps, daily breakdowns for Project and Client Apps) to monitor API limits. Data can be retrieved for 1 to 90 days. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `days` | integer | No | Number of days to retrieve usage data for, default 7 | -| `usage_fields` | string | No | Comma-separated usage fields to include | - -## `twitter_user_follow` - -Allows an authenticated user to follow another user. Results in a pending request if the target user's tweets are protected. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `target_user_id` | string | Yes | ID of the user to follow | - -## `twitter_user_followed_lists_get` - -Returns metadata (not Tweets) for lists a specific Twitter user follows. Optionally includes expanded owner details. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `list_fields` | string | No | Comma-separated list fields | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_liked_tweets_get` - -Retrieves Tweets liked by a specified Twitter user, provided their liked tweets are public or accessible. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `max_results` | integer | No | Max results per page (5-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_list_memberships_get` - -Retrieves all Twitter Lists a specified user is a member of, including public Lists and private Lists the authenticated user is authorized to view. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `list_fields` | string | No | Comma-separated list fields | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_lookup` - -Retrieves detailed public information for a Twitter user by their ID. Optionally expand related data (e.g., pinned tweets) and specify particular user or tweet fields to return. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_lookup_by_username` - -Fetches public profile information for a valid and existing Twitter user by their username. Optionally expands related data like pinned Tweets. Results may be limited for protected profiles not followed by the authenticated user. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | -| `username` | string | Yes | Twitter username without the @ symbol, e.g. elonmusk | - -## `twitter_user_me` - -Returns profile information for the currently authenticated X user. Use this to get the authenticated user's ID before calling endpoints that require it. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields to return, e.g. created_at,description,public_metrics | - -## `twitter_user_mute` - -Mutes a target user on behalf of an authenticated user, preventing the target's Tweets and Retweets from appearing in the authenticated user's home timeline without notifying the target. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `target_user_id` | string | Yes | ID of the user to mute | - -## `twitter_user_owned_lists_get` - -Retrieves Lists created (owned) by a specific Twitter user, not Lists they follow or are subscribed to. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `list_fields` | string | No | Comma-separated list fields | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_pinned_lists_get` - -Retrieves the Lists a specific, existing Twitter user has pinned to their profile to highlight them. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Twitter user ID | -| `list_fields` | string | No | Comma-separated list fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_timeline_get` - -Retrieves the home timeline (reverse chronological feed) for the authenticated Twitter user. Returns tweets from accounts the user follows and the user's own tweets. CRITICAL: The id parameter MUST be the authenticated user's own numeric Twitter user ID. Use twitter_user_me to get your ID first. Cannot fetch another user's home timeline. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `exclude` | string | No | Comma-separated types to exclude: retweets,replies | -| `expansions` | string | No | Comma-separated expansions | -| `id` | string | Yes | Authenticated user's own numeric Twitter ID — must be your own ID | -| `max_results` | integer | No | Max results per page (1-100) | -| `pagination_token` | string | No | Pagination token for next page | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_user_unfollow` - -Allows the authenticated user to unfollow an existing Twitter user, which removes the follow relationship. The source user ID is automatically determined from the authenticated session. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `target_user_id` | string | Yes | ID of the user to unfollow | - -## `twitter_user_unmute` - -Unmutes a target user for the authenticated user, allowing them to see Tweets and notifications from the target user again. The source_user_id is automatically populated from the authenticated user's credentials. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id` | string | Yes | Authenticated user's Twitter ID | -| `target_user_id` | string | Yes | ID of the user to unmute | - -## `twitter_users_lookup` - -Retrieves detailed information for specified X (formerly Twitter) user IDs. Optionally customize returned fields and expand related entities like pinned tweets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `ids` | string | Yes | Comma-separated list of Twitter user IDs (up to 100) | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | - -## `twitter_users_lookup_by_username` - -Retrieves detailed information for 1 to 100 Twitter users by their usernames (each 1-15 alphanumeric characters/underscores). Allows customizable user/tweet fields and expansion of related data like pinned tweets. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `expansions` | string | No | Comma-separated expansions | -| `tweet_fields` | string | No | Comma-separated tweet fields | -| `user_fields` | string | No | Comma-separated user fields | -| `usernames` | string | Yes | Comma-separated list of Twitter usernames without @ symbols (up to 100) | + diff --git a/src/content/docs/reference/agent-connectors/vercel.mdx b/src/content/docs/reference/agent-connectors/vercel.mdx index b0bc61e20..1d5d5585a 100644 --- a/src/content/docs/reference/agent-connectors/vercel.mdx +++ b/src/content/docs/reference/agent-connectors/vercel.mdx @@ -2,19 +2,19 @@ title: Vercel description: Connect to Vercel. Access user profile, teams, projects, deployments, and environment settings. tableOfContents: true +sidebar: + label: Vercel head: - tag: style content: | .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- -import { Card, CardGrid, Tabs, TabItem, Badge, Steps, Aside, Code } from '@astrojs/starlight/components' -import { Accordion, AccordionItem } from 'accessible-astro-components' +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/vercel'
@@ -30,560 +30,4 @@ Supports authentication: ## Tool list -## `vercel_alias_create` - -Assigns an alias (custom domain) to a Vercel deployment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `alias` | string | Yes | The alias hostname to assign. | -| `deployment_id` | string | Yes | The deployment ID to assign the alias to. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_alias_delete` - -Removes an alias from a Vercel deployment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `alias_or_id` | string | Yes | The alias hostname or ID to delete. | -| `team_id` | string | No | Team ID if the alias belongs to a team. | - -## `vercel_alias_get` - -Returns information about a specific alias by its ID or hostname. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `alias_or_id` | string | Yes | The alias hostname or ID. | -| `team_id` | string | No | Team ID if the alias belongs to a team. | - -## `vercel_aliases_list` - -Returns all aliases for the authenticated user or team, with optional domain and deployment filtering. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | No | Filter aliases by domain. | -| `limit` | integer | No | Maximum number of aliases to return. | -| `since` | integer | No | Timestamp in ms for pagination. | -| `team_id` | string | No | Team ID to list aliases for. | - -## `vercel_check_create` - -Creates a new check on a Vercel deployment. Used by integrations to report status of external checks like test suites or audits. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `blocking` | boolean | Yes | If true, this check must pass before deployment is considered ready. | -| `deployment_id` | string | Yes | The deployment ID to create a check for. | -| `detailsUrl` | string | No | URL where users can view check details. | -| `name` | string | Yes | Display name for the check. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_check_update` - -Updates the status and conclusion of a deployment check. Used to report check results back to Vercel. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `check_id` | string | Yes | The check ID to update. | -| `conclusion` | string | No | Check conclusion: succeeded, failed, skipped, canceled. | -| `deployment_id` | string | Yes | The deployment ID the check belongs to. | -| `detailsUrl` | string | No | URL where users can view check details. | -| `status` | string | No | Check status: running, completed. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_checks_list` - -Returns all checks attached to a Vercel deployment (e.g. from third-party integrations). - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deployment_id` | string | Yes | The deployment ID to list checks for. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_deployment_aliases_list` - -Returns all aliases assigned to a specific Vercel deployment. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deployment_id` | string | Yes | The deployment ID to get aliases for. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_deployment_cancel` - -Cancels a Vercel deployment that is currently building or queued. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deployment_id` | string | Yes | The deployment ID to cancel. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_deployment_create` - -Creates a new Vercel deployment for a project, optionally from a Git ref or with inline files. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `git_source` | string | No | JSON object with Git source info, e.g. `{"type":"github","ref":"main","repoId":"123"}`. | -| `name` | string | Yes | The project name to deploy. | -| `target` | string | No | Deployment target: production or preview. Default is preview. | -| `team_id` | string | No | Team ID if deploying to a team project. | - -## `vercel_deployment_delete` - -Deletes a Vercel deployment by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deployment_id` | string | Yes | The deployment ID to delete. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_deployment_events_list` - -Returns build log events for a Vercel deployment. Useful for debugging build errors. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `deployment_id` | string | Yes | The deployment ID to get events for. | -| `limit` | integer | No | Maximum number of log events to return. | -| `since` | integer | No | Timestamp in ms to fetch events after. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_deployment_get` - -Returns details of a specific Vercel deployment by its ID or URL, including build status, target, and metadata. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id_or_url` | string | Yes | The deployment ID (dpl_xxx) or deployment URL. | -| `team_id` | string | No | Team ID if the deployment belongs to a team. | - -## `vercel_deployments_list` - -Returns a list of deployments for the authenticated user or a specific project/team, with filtering and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `from` | integer | No | Timestamp in ms for pagination cursor. | -| `limit` | integer | No | Maximum number of deployments to return. | -| `project_id` | string | No | Filter deployments by project ID or name. | -| `state` | string | No | Filter by deployment state: BUILDING, ERROR, INITIALIZING, QUEUED, READY, CANCELED. | -| `target` | string | No | Filter by target environment: production or preview. | -| `team_id` | string | No | Filter deployments by team ID. | - -## `vercel_dns_record_create` - -Creates a new DNS record for a domain managed by Vercel. Supports A, AAAA, CNAME, TXT, MX, SRV, and CAA records. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | Yes | The domain to create the DNS record for. | -| `mx_priority` | integer | No | Priority for MX records. | -| `name` | string | Yes | Subdomain name, or empty string for root domain. | -| `team_id` | string | No | Team ID if the domain belongs to a team. | -| `ttl` | integer | No | Time-to-live in seconds. Default is 60. | -| `type` | string | Yes | Record type: A, AAAA, CNAME, TXT, MX, SRV, CAA. | -| `value` | string | Yes | The record value (IP address, hostname, text, etc.). | - -## `vercel_dns_record_delete` - -Deletes a DNS record from a domain managed by Vercel. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | Yes | The domain the DNS record belongs to. | -| `record_id` | string | Yes | The ID of the DNS record to delete. | -| `team_id` | string | No | Team ID if the domain belongs to a team. | - -## `vercel_dns_records_list` - -Returns all DNS records for a domain managed by Vercel. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | Yes | The domain to list DNS records for. | -| `limit` | integer | No | Maximum number of records to return. | -| `since` | integer | No | Timestamp in ms for pagination. | -| `team_id` | string | No | Team ID if the domain belongs to a team. | - -## `vercel_domain_add` - -Adds a domain to the authenticated user or team's Vercel account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | Yes | The domain name to add. | -| `team_id` | string | No | Team ID to add the domain to. | - -## `vercel_domain_delete` - -Removes a domain from the authenticated user or team's Vercel account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | Yes | The domain name to delete. | -| `team_id` | string | No | Team ID if the domain belongs to a team. | - -## `vercel_domain_get` - -Returns information about a specific domain including verification status, nameservers, and registrar. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | Yes | The domain name to look up. | -| `team_id` | string | No | Team ID if the domain belongs to a team. | - -## `vercel_domains_list` - -Returns all domains registered or added to the authenticated user or team's Vercel account. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | Maximum number of domains to return. | -| `since` | integer | No | Timestamp in ms for pagination. | -| `team_id` | string | No | Team ID to list domains for. | - -## `vercel_edge_config_create` - -Creates a new Edge Config store for storing read-only configuration data close to users at the edge. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `slug` | string | Yes | A unique slug for the Edge Config store. | -| `team_id` | string | No | Team ID to create the Edge Config under. | - -## `vercel_edge_config_delete` - -Permanently deletes an Edge Config store and all its items. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID to delete. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_config_get` - -Returns details of a specific Edge Config store by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_config_item_get` - -Returns the value of a specific item from an Edge Config store by key. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `item_key` | string | Yes | The key of the item to retrieve. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_config_items_list` - -Returns all key-value items stored in an Edge Config store. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_config_items_update` - -Creates, updates, or deletes items in an Edge Config store using a list of patch operations. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `items` | string | Yes | JSON array of patch operations. Each item has 'operation' (create/update/upsert/delete), 'key', and optionally 'value'. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_config_token_create` - -Creates a new read token for an Edge Config store to be used in application code. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `label` | string | Yes | A descriptive label for the token. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_config_tokens_delete` - -Deletes one or more read tokens from an Edge Config store. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | -| `tokens` | string | Yes | JSON array of token IDs to delete. | - -## `vercel_edge_config_tokens_list` - -Returns all read tokens for an Edge Config store. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `edge_config_id` | string | Yes | The Edge Config store ID. | -| `team_id` | string | No | Team ID if the Edge Config belongs to a team. | - -## `vercel_edge_configs_list` - -Returns all Edge Config stores for the authenticated user or team. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | No | Team ID to list Edge Configs for. | - -## `vercel_env_var_create` - -Creates a new environment variable for a Vercel project with the specified key, value, and target environments. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id_or_name` | string | Yes | The project ID or name. | -| `key` | string | Yes | The environment variable key. | -| `target` | string | No | JSON array of targets: production, preview, development. Defaults to all. | -| `team_id` | string | No | Team ID if the project belongs to a team. | -| `type` | string | No | Variable type: plain or secret. Default is plain. | -| `value` | string | Yes | The environment variable value. | - -## `vercel_env_var_delete` - -Deletes an environment variable from a Vercel project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `env_id` | string | Yes | The environment variable ID to delete. | -| `id_or_name` | string | Yes | The project ID or name. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_env_var_update` - -Updates an existing environment variable for a Vercel project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `env_id` | string | Yes | The environment variable ID to update. | -| `id_or_name` | string | Yes | The project ID or name. | -| `target` | string | No | JSON array of new targets: production, preview, development. | -| `team_id` | string | No | Team ID if the project belongs to a team. | -| `value` | string | No | New value for the environment variable. | - -## `vercel_env_vars_list` - -Returns all environment variables for a Vercel project, including their targets (production, preview, development) and encryption status. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `decrypt` | boolean | No | If true, returns decrypted values for sensitive variables. | -| `id_or_name` | string | Yes | The project ID or name. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_project_create` - -Creates a new Vercel project with a given name, framework, and optional Git repository. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `framework` | string | No | Framework preset, e.g. nextjs, vite, gatsby, nuxtjs, create-react-app. | -| `git_repository` | string | No | JSON object with 'type' (github/gitlab/bitbucket) and 'repo' (owner/name) fields. | -| `name` | string | Yes | The name of the project. | -| `root_directory` | string | No | Root directory of the project within the repository. | -| `team_id` | string | No | Team ID to create the project under. | - -## `vercel_project_delete` - -Permanently deletes a Vercel project and all its deployments, domains, and environment variables. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id_or_name` | string | Yes | The project ID or name to delete. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_project_domain_add` - -Assigns a domain to a Vercel project with an optional redirect target. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `git_branch` | string | No | Git branch to associate this domain with for preview deployments. | -| `id_or_name` | string | Yes | The project ID or name. | -| `name` | string | Yes | The domain name to assign to the project. | -| `redirect` | string | No | Redirect target domain if this domain should redirect. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_project_domain_delete` - -Removes a domain assignment from a Vercel project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `domain` | string | Yes | The domain name to remove from the project. | -| `id_or_name` | string | Yes | The project ID or name. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_project_domains_list` - -Returns all domains assigned to a specific Vercel project. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id_or_name` | string | Yes | The project ID or name. | -| `production` | boolean | No | Filter to production domains only. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_project_get` - -Returns details of a specific Vercel project including its framework, Git repository, environment variables summary, and domains. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `id_or_name` | string | Yes | The project ID or name. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_project_update` - -Updates a Vercel project's name, framework, build command, output directory, or other settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `build_command` | string | No | Custom build command override. | -| `framework` | string | No | Framework preset to apply. | -| `id_or_name` | string | Yes | The project ID or name to update. | -| `install_command` | string | No | Custom install command override. | -| `name` | string | No | New project name. | -| `output_directory` | string | No | Custom output directory override. | -| `team_id` | string | No | Team ID if the project belongs to a team. | - -## `vercel_projects_list` - -Returns all projects for the authenticated user or team, with optional search and pagination. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `from` | integer | No | Timestamp in ms for pagination cursor. | -| `limit` | integer | No | Maximum number of projects to return. | -| `search` | string | No | Filter projects by name search query. | -| `team_id` | string | No | Team ID to list projects for. Omit for personal projects. | - -## `vercel_team_create` - -Creates a new Vercel team with the specified slug and optional name. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `name` | string | No | Display name for the team. | -| `slug` | string | Yes | A unique URL-friendly identifier for the team. | - -## `vercel_team_delete` - -Permanently deletes a Vercel team and all its associated resources. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | Yes | The team ID or slug to delete. | - -## `vercel_team_get` - -Returns details of a specific Vercel team by its ID or slug. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | Yes | The team ID or slug. | - -## `vercel_team_member_invite` - -Invites a user to a Vercel team by email address with a specified role. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `email` | string | Yes | Email address of the user to invite. | -| `role` | string | No | Role to assign: OWNER, MEMBER, VIEWER, DEVELOPER, BILLING. | -| `team_id` | string | Yes | The team ID or slug. | - -## `vercel_team_member_remove` - -Removes a member from a Vercel team by their user ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | Yes | The team ID or slug. | -| `user_id` | string | Yes | The user ID of the member to remove. | - -## `vercel_team_members_list` - -Returns all members of a Vercel team including their roles and join dates. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | Maximum number of members to return. | -| `role` | string | No | Filter by role: OWNER, MEMBER, VIEWER, DEVELOPER, BILLING. | -| `since` | integer | No | Timestamp in ms to fetch members joined after this time. | -| `team_id` | string | Yes | The team ID or slug. | - -## `vercel_team_update` - -Updates a Vercel team's name, slug, description, or other settings. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `description` | string | No | New description for the team. | -| `name` | string | No | New display name for the team. | -| `slug` | string | No | New URL-friendly slug for the team. | -| `team_id` | string | Yes | The team ID or slug to update. | - -## `vercel_teams_list` - -Returns all teams the authenticated user belongs to, with pagination support. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `limit` | integer | No | Maximum number of teams to return. | -| `since` | integer | No | Timestamp in milliseconds to fetch teams created after this time. | -| `until` | integer | No | Timestamp in milliseconds to fetch teams created before this time. | - -## `vercel_user_get` - -Returns the authenticated user's profile including name, email, username, and account details. - -## `vercel_webhook_create` - -Creates a new webhook that sends event notifications to the specified URL for Vercel deployment and project events. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `events` | string | Yes | JSON array of event types to subscribe to, e.g. ["deployment.created","deployment.succeeded"]. | -| `project_ids` | string | No | JSON array of project IDs to scope this webhook to. Omit for all projects. | -| `team_id` | string | No | Team ID to create the webhook for. | -| `url` | string | Yes | The HTTPS endpoint URL to receive webhook payloads. | - -## `vercel_webhook_delete` - -Permanently deletes a Vercel webhook. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | No | Team ID if the webhook belongs to a team. | -| `webhook_id` | string | Yes | The webhook ID to delete. | - -## `vercel_webhook_get` - -Returns details of a specific Vercel webhook by its ID. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | No | Team ID if the webhook belongs to a team. | -| `webhook_id` | string | Yes | The webhook ID. | - -## `vercel_webhooks_list` - -Returns all webhooks configured for the authenticated user or team. - -| Name | Type | Required | Description | -| --- | --- | --- | --- | -| `team_id` | string | No | Team ID to list webhooks for. | + diff --git a/src/data/agent-connectors/affinity.ts b/src/data/agent-connectors/affinity.ts new file mode 100644 index 000000000..1abcc0609 --- /dev/null +++ b/src/data/agent-connectors/affinity.ts @@ -0,0 +1,303 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'affinity_add_to_list', + description: `Add a person or organization to an Affinity list by creating a new list entry. Use this to add a founder to a deal pipeline, add a company to a watchlist, or track a new contact in a relationship list. Provide either entity_id for persons/organizations.`, + params: [ + { + name: 'entity_id', + type: 'integer', + required: true, + description: `ID of the person or organization to add to the list`, + }, + { + name: 'list_id', + type: 'integer', + required: true, + description: `ID of the Affinity list to add the entity to`, + }, + ], + }, + { + name: 'affinity_create_note', + description: `Create a note on a person, organization, or opportunity in Affinity. Notes support plain text content and can be attached to multiple entity types simultaneously. Use this to log meeting summaries, due diligence findings, or relationship context directly on a CRM record.`, + params: [ + { + name: 'content', + type: 'string', + required: true, + description: `Plain text content of the note`, + }, + { + name: 'opportunity_ids', + type: 'array', + required: false, + description: `List of opportunity IDs to attach this note to`, + }, + { + name: 'organization_ids', + type: 'array', + required: false, + description: `List of organization IDs to attach this note to`, + }, + { + name: 'person_ids', + type: 'array', + required: false, + description: `List of person IDs to attach this note to`, + }, + ], + }, + { + name: 'affinity_create_opportunity', + description: `Create a new deal or opportunity record in Affinity and add it to a pipeline list. Supports associating persons and organizations, setting the deal name, and assigning an owner. Ideal for logging inbound deals or sourcing new investment targets.`, + params: [ + { + name: 'list_id', + type: 'integer', + required: true, + description: `ID of the Affinity list to add this opportunity to`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Name of the opportunity or deal`, + }, + { + name: 'organization_ids', + type: 'array', + required: false, + description: `List of Affinity organization IDs to associate with this opportunity`, + }, + { + name: 'person_ids', + type: 'array', + required: false, + description: `List of Affinity person IDs to associate with this opportunity`, + }, + ], + }, + { + name: 'affinity_get_opportunity', + description: `Retrieve full details of a deal or opportunity in Affinity including current stage, owner, associated persons and organizations, custom field values, and list membership. Use this before updating a deal or generating a deal memo.`, + params: [ + { + name: 'opportunity_id', + type: 'integer', + required: true, + description: `Unique numeric ID of the opportunity to retrieve`, + }, + ], + }, + { + name: 'affinity_get_organization', + description: `Retrieve an organization's full profile from Affinity including domain, team member connections, associated people, deal history, and interaction metadata. Use this for deep company diligence or to understand team relationships before an investment.`, + params: [ + { + name: 'organization_id', + type: 'integer', + required: true, + description: `Unique numeric ID of the organization to retrieve`, + }, + { + name: 'with_interaction_dates', + type: 'boolean', + required: false, + description: `Include first and last interaction dates in the response`, + }, + ], + }, + { + name: 'affinity_get_person', + description: `Retrieve a person's full profile from Affinity including contact information, email addresses, phone numbers, organization memberships, interaction history, and relationship score. Use this to deeply evaluate a contact before a meeting or investment decision.`, + params: [ + { + name: 'person_id', + type: 'integer', + required: true, + description: `Unique numeric ID of the person to retrieve`, + }, + { + name: 'with_interaction_dates', + type: 'boolean', + required: false, + description: `Include first and last interaction dates in the response`, + }, + ], + }, + { + name: 'affinity_get_relationship_strength', + description: `Retrieve relationship strength scores between your team members and an external contact (person) in Affinity. Scores reflect email and meeting interaction frequency and recency. Use this to identify the best warm introduction path to a founder, LP, or co-investor.`, + params: [ + { + name: 'external_id', + type: 'integer', + required: true, + description: `Affinity person ID of the external contact to evaluate relationship strength against`, + }, + { + name: 'internal_id', + type: 'integer', + required: false, + description: `Affinity person ID of the internal team member (optional — omit to get scores for all team members)`, + }, + ], + }, + { + name: 'affinity_list_lists', + description: `Retrieve all Affinity lists available in the workspace, including people lists, organization lists, and opportunity/deal pipeline lists. Returns list IDs, names, types, and owner information. Use this to discover list IDs before adding entries or filtering opportunities.`, + params: [], + }, + { + name: 'affinity_list_notes', + description: `Retrieve notes associated with a specific person, organization, or opportunity in Affinity. Returns paginated note records including content, creator, and creation timestamp. Use this to review interaction history, meeting summaries, or due diligence logs on a CRM entity.`, + params: [ + { + name: 'opportunity_id', + type: 'integer', + required: false, + description: `Filter notes by opportunity ID`, + }, + { + name: 'organization_id', + type: 'integer', + required: false, + description: `Filter notes by organization ID`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results to return per page (max 500)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Pagination token from a previous response to fetch the next page`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter notes by person ID`, + }, + ], + }, + { + name: 'affinity_list_opportunities', + description: `List pipeline opportunities in Affinity with optional filters by list ID, owner, or stage. Returns paginated deal records including stage, value, associated people and organizations, and custom field values. Designed for deal flow monitoring and portfolio tracking.`, + params: [ + { + name: 'list_id', + type: 'integer', + required: false, + description: `Filter opportunities belonging to a specific Affinity list ID`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results to return per page (max 500)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Pagination token from a previous response to fetch the next page`, + }, + ], + }, + { + name: 'affinity_search_organizations', + description: `Search for companies and organizations in the Affinity network by name or domain. Returns a paginated list of matching organization records including team connections, domain info, and interaction metadata. Useful for deal sourcing and company diligence lookups.`, + params: [ + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results to return per page (max 500)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Pagination token from a previous response to fetch the next page`, + }, + { + name: 'term', + type: 'string', + required: false, + description: `Search term to filter organizations by name or domain`, + }, + { + name: 'with_interaction_dates', + type: 'boolean', + required: false, + description: `Include first and last interaction dates in the response`, + }, + ], + }, + { + name: 'affinity_search_persons', + description: `Search for people in the Affinity network by name, email, or relationship strength. Returns a paginated list of matching person records including contact information and relationship metadata. Ideal for finding contacts before creating notes or evaluating deal connections.`, + params: [ + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results to return per page (max 500)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Pagination token from a previous response to fetch the next page`, + }, + { + name: 'term', + type: 'string', + required: false, + description: `Search term to filter persons by name or email address`, + }, + { + name: 'with_interaction_dates', + type: 'boolean', + required: false, + description: `Include first and last interaction dates in the response`, + }, + ], + }, + { + name: 'affinity_update_opportunity', + description: `Update an existing deal or opportunity in Affinity. Supports renaming the deal, adding or removing associated persons and organizations. Use this to reflect changes in deal status, team assignment, or company involvement during a pipeline review.`, + params: [ + { + name: 'name', + type: 'string', + required: false, + description: `Updated name for the opportunity`, + }, + { + name: 'opportunity_id', + type: 'integer', + required: true, + description: `Unique numeric ID of the opportunity to update`, + }, + { + name: 'organization_ids', + type: 'array', + required: false, + description: `Updated list of Affinity organization IDs associated with this opportunity`, + }, + { + name: 'person_ids', + type: 'array', + required: false, + description: `Updated list of Affinity person IDs associated with this opportunity`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/airtable.ts b/src/data/agent-connectors/airtable.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/airtable.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/apifymcp.ts b/src/data/agent-connectors/apifymcp.ts new file mode 100644 index 000000000..3c31e2620 --- /dev/null +++ b/src/data/agent-connectors/apifymcp.ts @@ -0,0 +1,260 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'apifymcp_call_actor', + description: `Call any Actor from the Apify Store. By default waits for completion and returns results with a dataset preview. Use async mode to start a run in the background and get a runId immediately. + +Workflow: +1. Use apifymcp_fetch_actor_details with output: {"inputSchema": true} to get the Actor's exact input schema +2. Call this tool with the actor name and input matching that schema exactly +3. Use apifymcp_get_actor_output with the returned datasetId to fetch full results if needed + +For MCP server Actors, use format 'actorName:toolName' (e.g. 'apify/actors-mcp-server:fetch-apify-docs'). +Use dedicated Actor tools (e.g. apifymcp_rag_web_browser) when available instead of this tool. + +When NOT to use: +- You don't know the Actor's input schema — use apifymcp_fetch_actor_details first`, + params: [ + { + name: 'actor', + type: 'string', + required: true, + description: `Actor ID or full name in 'username/name' format (e.g. 'apify/rag-web-browser'). For MCP server Actors use 'actorName:toolName' format.`, + }, + { + name: 'async', + type: 'boolean', + required: false, + description: `If true, starts the run and returns immediately with a runId. Use only when the user explicitly asks to run in the background or does not need immediate results.`, + }, + { + name: 'callOptions', + type: 'object', + required: false, + description: `Optional run configuration options`, + }, + { + name: 'input', + type: 'object', + required: true, + description: `Input JSON to pass to the Actor. Must match the Actor's input schema exactly — use apifymcp_fetch_actor_details with output: {"inputSchema": true} first to get the required fields and types.`, + }, + { + name: 'previewOutput', + type: 'boolean', + required: false, + description: `When true (default), includes preview items in the response. Set to false when you plan to fetch full results separately via apifymcp_get_actor_output — avoids duplicate data and saves tokens.`, + }, + ], + }, + { + name: 'apifymcp_fetch_actor_details', + description: `Get detailed information about an Actor by its ID or full name (format: 'username/name', e.g. 'apify/rag-web-browser'). + +WARNING: Omitting the 'output' parameter returns ALL fields including the full README, which can be extremely token-heavy. Always pass 'output' with only the fields you need. To get the input schema before calling an Actor, use: {"inputSchema": true}. + +When to use: +- You need an Actor's input schema before calling it — use output: {"inputSchema": true} +- User wants details about a specific Actor (pricing, description, README) +- You need to list MCP tools provided by an MCP server Actor — use output: {"mcpTools": true} + +When NOT to use: +- You already have the input schema and are ready to run — use apifymcp_call_actor directly`, + params: [ + { + name: 'actor', + type: 'string', + required: true, + description: `Actor ID or full name in 'username/name' format (e.g. 'apify/rag-web-browser')`, + }, + { + name: 'output', + type: 'object', + required: false, + description: `JSON object with boolean flags to control which fields are returned. Always specify this to avoid a large token-heavy response. Set only the fields you need to true. Available fields: description, inputSchema, mcpTools, metadata, outputSchema, pricing, rating, readme, stats. All default to true if omitted (very large response) except mcpTools. Example: {"inputSchema": true}`, + }, + ], + }, + { + name: 'apifymcp_fetch_apify_docs', + description: `Fetch the full content of an Apify or Crawlee documentation page by its URL. Use this after finding a relevant page with apifymcp_search_apify_docs. + +When to use: +- You have a documentation URL and need the complete page content +- User asks for detailed documentation on a specific Apify or Crawlee page + +When NOT to use: +- You don't have a URL yet — use apifymcp_search_apify_docs first`, + params: [ + { + name: 'url', + type: 'string', + required: true, + description: `Full URL of the Apify or Crawlee documentation page (e.g. 'https://docs.apify.com/platform/actors')`, + }, + ], + }, + { + name: 'apifymcp_get_actor_output', + description: `Retrieve output dataset items from a specific Actor run using its datasetId. Supports field selection (including dot notation) and pagination. + +When to use: +- You have a datasetId from an Actor run and need the full results +- The preview from apifymcp_call_actor didn't include all needed fields +- You need to paginate through large datasets + +When NOT to use: +- You don't have a datasetId yet — run an Actor with apifymcp_call_actor first`, + params: [ + { + name: 'datasetId', + type: 'string', + required: true, + description: `Actor output dataset ID to retrieve from`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include. Supports dot notation for nested fields (e.g. 'crawl.httpStatusCode,metadata.url'). Note: dot-notation fields are returned as flat keys in the output — e.g. requesting 'crawl.httpStatusCode' returns {"crawl.httpStatusCode": 200}, not a nested object.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of items to return (default: 100)`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of items to skip for pagination (default: 0)`, + }, + ], + }, + { + name: 'apifymcp_get_actor_run', + description: `Get detailed information about a specific Actor run by runId. Returns run metadata (status, timestamps), performance stats, and resource IDs (datasetId, keyValueStoreId, requestQueueId). + +When to use: +- You have a runId from apifymcp_call_actor (async mode) and want to check its status +- User asks about details of a specific run started outside the current conversation + +When NOT to use: +- The run was just started via apifymcp_call_actor in sync mode — results are already in the response +- You want the output data — use apifymcp_get_actor_output with the datasetId`, + params: [ + { name: 'runId', type: 'string', required: true, description: `The ID of the Actor run` }, + ], + }, + { + name: 'apifymcp_rag_web_browser', + description: `Web browser for AI agents and RAG pipelines. Queries Google Search, scrapes the top N pages, and returns content as Markdown. Can also scrape a specific URL directly. + +When to use: +- User wants current/immediate data (e.g. 'Get flight prices for tomorrow', 'What's the weather today?') +- User needs to fetch specific content now (e.g. 'Fetch news from CNN', 'Get product info from Amazon') +- User has time indicators like 'today', 'current', 'latest', 'recent', 'now' + +When NOT to use: +- User needs repeated/scheduled scraping of a specific platform — search for a dedicated Actor using apifymcp_search_actors instead`, + params: [ + { + name: 'maxResults', + type: 'integer', + required: false, + description: `Maximum number of top Google Search results to scrape and return. Ignored when query is a direct URL. Higher values increase response time and compute cost significantly — keep low (1-3) for latency-sensitive use cases. Default: 3.`, + }, + { + name: 'outputFormats', + type: 'array', + required: false, + description: `Output formats for the scraped page content. Options: 'markdown', 'text', 'html' (default: ['markdown'])`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Google Search keywords or a specific URL to scrape. Supports advanced search operators.`, + }, + ], + }, + { + name: 'apifymcp_search_actors', + description: `Search the Apify Store to FIND and DISCOVER what scraping tools/Actors exist for specific platforms or use cases. This tool provides INFORMATION about available Actors — it does NOT retrieve actual data or run any scraping tasks. + +When to use: +- Find what scraping tools exist for a platform (e.g. 'What tools can scrape Instagram?') +- Discover available Actors for a use case (e.g. 'Find an Actor for Amazon products') +- Browse existing solutions before calling an Actor + +When NOT to use: +- User wants immediate data retrieval — use apifymcp_rag_web_browser instead +- You already know the Actor ID — use apifymcp_fetch_actor_details or apifymcp_call_actor directly + +Always do at least two searches: first with broad keywords, then with more specific terms if needed.`, + params: [ + { + name: 'keywords', + type: 'string', + required: false, + description: `Space-separated keywords to search Actors in the Apify Store. Use 1-3 simple terms (e.g. 'Instagram posts', 'Amazon products'). Avoid generic terms like 'scraper' or 'crawler'. Omitting keywords or passing an empty string returns popular/general Actors — always provide keywords for relevant results.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of Actors to return (1-100, default: 5)`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Number of results to skip for pagination (default: 0)`, + }, + ], + }, + { + name: 'apifymcp_search_apify_docs', + description: `Search Apify and Crawlee documentation using full-text search. Use keywords only, not full sentences. Select the documentation source explicitly via docSource. + +Sources: +- 'apify': Platform docs, SDKs (JS, Python), CLI, REST API, Academy, Actor development +- 'crawlee-js': Crawlee JavaScript web scraping library +- 'crawlee-py': Crawlee Python web scraping library + +When to use: +- User asks how to use Apify APIs, SDK, or platform features +- You need to look up Apify or Crawlee documentation + +When NOT to use: +- You already have a documentation URL — use apifymcp_fetch_apify_docs directly`, + params: [ + { + name: 'docSource', + type: 'string', + required: false, + description: `Documentation source to search. Options: 'apify' (default), 'crawlee-js', 'crawlee-py'`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of results to return (1-20, default: 5)`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Offset for pagination (default: 0)`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Algolia full-text search query using keywords only (e.g. 'standby actor', 'proxy configuration'). Do not use full sentences.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/apollo.ts b/src/data/agent-connectors/apollo.ts new file mode 100644 index 000000000..8399a7841 --- /dev/null +++ b/src/data/agent-connectors/apollo.ts @@ -0,0 +1,340 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'apollo_create_account', + description: `Create a new account (company) record in your Apollo CRM. Accounts represent organizations and can be linked to contacts. Check for duplicates before creating to avoid double entries.`, + params: [ + { + name: 'domain', + type: 'string', + required: false, + description: `Website domain of the company`, + }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `LinkedIn company page URL`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the company/account` }, + { + name: 'phone_number', + type: 'string', + required: false, + description: `Main phone number of the company`, + }, + { + name: 'raw_address', + type: 'string', + required: false, + description: `Physical address of the company`, + }, + ], + }, + { + name: 'apollo_create_contact', + description: `Create a new contact record in your Apollo CRM. The contact will appear in your Apollo contacts list and can be enrolled in sequences. Check for duplicates before creating to avoid double entries.`, + params: [ + { + name: 'account_id', + type: 'string', + required: false, + description: `Apollo account ID to associate this contact with`, + }, + { + name: 'email', + type: 'string', + required: false, + description: `Email address of the contact`, + }, + { + name: 'first_name', + type: 'string', + required: true, + description: `First name of the contact`, + }, + { + name: 'last_name', + type: 'string', + required: true, + description: `Last name of the contact`, + }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `LinkedIn profile URL of the contact`, + }, + { + name: 'organization_name', + type: 'string', + required: false, + description: `Company name the contact works at`, + }, + { + name: 'phone', + type: 'string', + required: false, + description: `Phone number of the contact`, + }, + { name: 'title', type: 'string', required: false, description: `Job title of the contact` }, + ], + }, + { + name: 'apollo_enrich_account', + description: `Enrich a company/account record with Apollo firmographic data using the company's website domain or name. Returns verified employee count, revenue estimates, industry, tech stack, funding rounds, and social profiles. Consumes Apollo credits per match.`, + params: [ + { + name: 'domain', + type: 'string', + required: false, + description: `Website domain of the company to enrich (e.g., acmecorp.com)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Company name to enrich (used if domain is not available)`, + }, + ], + }, + { + name: 'apollo_enrich_contact', + description: `Enrich a contact using Apollo's people matching engine. Provide an email address or name + company to retrieve a verified contact profile. Revealing personal emails or phone numbers consumes additional Apollo credits per successful match.`, + params: [ + { + name: 'email', + type: 'string', + required: false, + description: `Work email address of the contact to enrich`, + }, + { + name: 'first_name', + type: 'string', + required: false, + description: `First name of the contact to enrich`, + }, + { + name: 'last_name', + type: 'string', + required: false, + description: `Last name of the contact to enrich`, + }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `LinkedIn profile URL for precise matching`, + }, + { + name: 'organization_name', + type: 'string', + required: false, + description: `Company name to assist in matching`, + }, + { + name: 'reveal_personal_emails', + type: 'boolean', + required: false, + description: `Attempt to reveal personal email addresses (consumes extra Apollo credits)`, + }, + { + name: 'reveal_phone_number', + type: 'boolean', + required: false, + description: `Attempt to reveal direct phone numbers (consumes extra Apollo credits)`, + }, + ], + }, + { + name: 'apollo_get_account', + description: `Retrieve the full profile of a company account from Apollo by its ID. Returns detailed firmographic data including employee count, revenue estimates, industry, tech stack, funding information, and social profiles.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The Apollo account (organization) ID to retrieve`, + }, + ], + }, + { + name: 'apollo_get_contact', + description: `Retrieve the full profile of a contact from Apollo by their ID. Returns detailed professional information including email, phone, LinkedIn URL, employment history, education, and social profiles.`, + params: [ + { + name: 'contact_id', + type: 'string', + required: true, + description: `The Apollo contact ID to retrieve`, + }, + ], + }, + { + name: 'apollo_list_sequences', + description: `List available email sequences (Apollo Sequences / Emailer Campaigns) in your Apollo account. Supports filtering by name and pagination. Returns sequence ID, name, status, and step count.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (starts at 1)`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of sequences to return per page (max 100)`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Filter sequences by name (partial match)`, + }, + ], + }, + { + name: 'apollo_search_accounts', + description: `Search Apollo's company database using firmographic filters such as company name, industry, employee count range, revenue range, and location. Returns matching account records with company details.`, + params: [ + { + name: 'company_name', + type: 'string', + required: false, + description: `Filter accounts by company name (partial match supported)`, + }, + { + name: 'employee_ranges', + type: 'string', + required: false, + description: `Comma-separated employee count ranges (e.g., 1,10,11,50,51,200)`, + }, + { + name: 'industry', + type: 'string', + required: false, + description: `Filter accounts by industry vertical`, + }, + { + name: 'keywords', + type: 'string', + required: false, + description: `Keyword search across company name, description, and domain`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Filter accounts by headquarters city, state, or country`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (starts at 1)`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of accounts to return per page (max 100)`, + }, + ], + }, + { + name: 'apollo_search_contacts', + description: `Search contacts in your Apollo CRM using filters such as job title, company, and sort order. Returns matching contact records with professional details. Results are paginated.`, + params: [ + { + name: 'company_name', + type: 'string', + required: false, + description: `Filter contacts by company name`, + }, + { + name: 'industry', + type: 'string', + required: false, + description: `Filter contacts by their company's industry (e.g., Software, Healthcare)`, + }, + { + name: 'keywords', + type: 'string', + required: false, + description: `Full-text keyword search across contact name, title, company, and bio`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Filter contacts by city, state, or country`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (starts at 1)`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of contacts to return per page (max 100)`, + }, + { + name: 'seniority', + type: 'string', + required: false, + description: `Filter by seniority level (e.g., c_suite, vp, director, manager, senior, entry)`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Filter contacts by job title keywords (e.g., VP of Sales)`, + }, + ], + }, + { + name: 'apollo_update_contact', + description: `Update properties or CRM stage of an existing Apollo contact record by contact ID. Only the provided fields will be updated; omitted fields remain unchanged.`, + params: [ + { + name: 'contact_id', + type: 'string', + required: true, + description: `The Apollo contact ID to update`, + }, + { + name: 'contact_stage_id', + type: 'string', + required: false, + description: `Apollo CRM stage ID to move the contact to`, + }, + { + name: 'email', + type: 'string', + required: false, + description: `Updated email address for the contact`, + }, + { name: 'first_name', type: 'string', required: false, description: `Updated first name` }, + { name: 'last_name', type: 'string', required: false, description: `Updated last name` }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `Updated LinkedIn profile URL`, + }, + { + name: 'organization_name', + type: 'string', + required: false, + description: `Updated company name`, + }, + { name: 'phone', type: 'string', required: false, description: `Updated phone number` }, + { name: 'title', type: 'string', required: false, description: `Updated job title` }, + ], + }, +] diff --git a/src/data/agent-connectors/asana.ts b/src/data/agent-connectors/asana.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/asana.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/attention.ts b/src/data/agent-connectors/attention.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/attention.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/attio.ts b/src/data/agent-connectors/attio.ts new file mode 100644 index 000000000..3255ac18f --- /dev/null +++ b/src/data/agent-connectors/attio.ts @@ -0,0 +1,1119 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'attio_add_to_list', + description: `Add a record (contact, company, deal, or custom object) to a specific Attio list. Returns the newly created list entry with its entry ID, which can be used to remove it later. If the record is already in the list, a new entry is created.`, + params: [ + { + name: 'entry_values', + type: 'object', + required: false, + description: `Optional attribute values to set on the list entry itself (not the underlying record). Keys are attribute slugs, values are the data to set. Example: {"stage": "qualified"}`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `The UUID of the Attio list to add the record to. Use the List Lists tool (attio_list_lists) to retrieve available lists and their UUIDs.`, + }, + { + name: 'parent_object', + type: 'string', + required: true, + description: `The object type slug the record belongs to. Must match the object type the list is configured for — run attio_list_lists to check the list's parent object before adding.`, + }, + { + name: 'parent_record_id', + type: 'string', + required: true, + description: `The UUID of the record to add to the list. Must be a valid UUID — obtain this from search or list records results.`, + }, + ], + }, + { + name: 'attio_create_attribute', + description: `Creates a new attribute on an Attio object or list. Requires api_slug, title, type, description, is_required, is_unique, is_mct, and config. The config object varies by type — for most types pass an empty object {}. For select/multiselect, config can include options. For record-reference, config includes the target object.`, + params: [ + { + name: 'api_slug', + type: 'string', + required: true, + description: `Snake_case identifier for the new attribute. Must be unique within the object.`, + }, + { + name: 'config', + type: 'object', + required: true, + description: `Type-specific configuration object. For most types (text, number, date, checkbox, etc.) pass an empty object {}. For record-reference, pass {"relationship": {"object": "companies"}}.`, + }, + { + name: 'description', + type: 'string', + required: true, + description: `Human-readable description of what this attribute is used for.`, + }, + { + name: 'is_multiselect', + type: 'boolean', + required: true, + description: `Whether this attribute allows multiple values per record.`, + }, + { + name: 'is_required', + type: 'boolean', + required: true, + description: `Whether this attribute is required when creating records of this object type.`, + }, + { + name: 'is_unique', + type: 'boolean', + required: true, + description: `Whether values for this attribute must be unique across all records of this object type.`, + }, + { + name: 'object', + type: 'string', + required: true, + description: `Slug or UUID of the object to create the attribute on. Common slugs: people, companies, deals.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `Human-readable display title for the attribute.`, + }, + { + name: 'type', + type: 'string', + required: true, + description: `Data type of the attribute. Supported values: text, number, select, multiselect, status, date, timestamp, checkbox, currency, record-reference, actor-reference, location, domain, email-address, phone-number, interaction.`, + }, + ], + }, + { + name: 'attio_create_comment', + description: `Creates a new comment on a record in Attio. Requires author_id (workspace member UUID), content, record_object (e.g. people, companies, deals), and record_id. Optionally provide thread_id to reply to an existing thread. Format is always plaintext.`, + params: [ + { + name: 'author_id', + type: 'string', + required: true, + description: `UUID of the workspace member who is authoring the comment. Use the List Workspace Members tool to find member UUIDs.`, + }, + { + name: 'content', + type: 'string', + required: true, + description: `Plaintext content of the comment.`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `UUID of the record to attach the comment to.`, + }, + { + name: 'record_object', + type: 'string', + required: true, + description: `Object slug or UUID of the record to comment on. Common slugs: people, companies, deals.`, + }, + { + name: 'thread_id', + type: 'string', + required: false, + description: `UUID of an existing comment thread to reply to. Leave empty to start a new top-level comment.`, + }, + ], + }, + { + name: 'attio_create_company', + description: `Creates a new company record in Attio. Throws an error on conflicts of unique attributes like domains. Use Assert Company if you prefer to update on conflicts. Note: The logo_url attribute cannot currently be set via the API.`, + params: [ + { + name: 'values', + type: 'object', + required: true, + description: `Attribute values for the new company record.`, + }, + ], + }, + { + name: 'attio_create_deal', + description: `Creates a new deal record in Attio. Throws an error on conflicts of unique attributes. Provide at least one attribute value in the values field.`, + params: [ + { + name: 'values', + type: 'object', + required: true, + description: `Attribute values for the new deal record.`, + }, + ], + }, + { + name: 'attio_create_list', + description: `Creates a new list in Attio. Requires workspace_access (one of: full-access, read-and-write, read-only) and workspace_member_access array. After creation, add attributes using Create Attribute and records using Create Entry.`, + params: [ + { + name: 'api_slug', + type: 'string', + required: true, + description: `Snake_case identifier for the new list used in API access.`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Human-readable display name for the new list.`, + }, + { + name: 'parent_object', + type: 'string', + required: true, + description: `Object slug the list tracks. Must be a valid object slug such as people, companies, or deals.`, + }, + { + name: 'workspace_access', + type: 'string', + required: true, + description: `Access level for all workspace members. Must be one of: full-access, read-and-write, read-only. Use full-access to give all members full control.`, + }, + { + name: 'workspace_member_access', + type: 'array', + required: false, + description: `Optional array of per-member access overrides. Leave empty for uniform access via workspace_access. Each item: {"workspace_member_id": "uuid", "level": "full-access"}.`, + }, + ], + }, + { + name: 'attio_create_note', + description: `Create a note on an Attio record (person, company, deal, or custom object). Notes support plaintext or Markdown formatting. You can optionally backdate the note by specifying a created_at timestamp, or associate it with an existing meeting via meeting_id.`, + params: [ + { + name: 'content', + type: 'string', + required: true, + description: `Body of the note. Use plain text or Markdown depending on the format field. Line breaks are supported via \\n in plaintext mode.`, + }, + { + name: 'created_at', + type: 'string', + required: false, + description: `ISO 8601 timestamp for backdating the note. Defaults to the current time if not provided. Example: "2024-01-15T10:30:00Z"`, + }, + { + name: 'format', + type: 'string', + required: true, + description: `Format of the note content. Must be either "plaintext" or "markdown".`, + }, + { + name: 'meeting_id', + type: 'string', + required: false, + description: `UUID of an existing meeting to associate with this note. Optional.`, + }, + { + name: 'parent_object', + type: 'string', + required: true, + description: `The slug or UUID of the parent object the note will be attached to. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'parent_record_id', + type: 'string', + required: true, + description: `UUID of the parent record the note will be attached to.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `Plaintext title for the note. No formatting is allowed in the title.`, + }, + ], + }, + { + name: 'attio_create_object', + description: `Creates a new custom object in the Attio workspace. Use when you need an object type beyond the standard types (people, companies, deals, users, workspaces).`, + params: [ + { + name: 'api_slug', + type: 'string', + required: true, + description: `Snake_case identifier for the new object.`, + }, + { + name: 'plural_noun', + type: 'string', + required: true, + description: `Plural noun for the new object type.`, + }, + { + name: 'singular_noun', + type: 'string', + required: true, + description: `Singular noun for the new object type.`, + }, + ], + }, + { + name: 'attio_create_person', + description: `Creates a new person record in Attio. Throws an error on conflicts of unique attributes like email_addresses. Use Assert Person if you prefer to update on conflicts. Note: The avatar_url attribute cannot currently be set via the API.`, + params: [ + { + name: 'values', + type: 'object', + required: true, + description: `Attribute values for the new person record.`, + }, + ], + }, + { + name: 'attio_create_record', + description: `Create a new record in Attio for a given object type (e.g. people, companies, deals). Provide attribute values as a JSON object mapping attribute API slugs or IDs to their values. Throws an error if a unique attribute conflict is detected — use the Assert Record endpoint instead to upsert on conflict.`, + params: [ + { + name: 'object', + type: 'string', + required: true, + description: `The slug or UUID of the object type to create the record in. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'values', + type: 'object', + required: true, + description: `Attribute values for the new record. Keys are attribute API slugs or UUIDs; values are the data to set. For multi-value attributes, supply an array. Example for a person: {"name": [{"first_name": "Alice", "last_name": "Smith"}], "email_addresses": [{"email_address": "alice@example.com"}]}`, + }, + ], + }, + { + name: 'attio_create_task', + description: `Create a new task in Attio. Tasks can be linked to one or more records (people, companies, deals, etc.) and assigned to workspace members. Supports setting a deadline and initial completion status. Only plaintext format is supported for task content.`, + params: [ + { + name: 'assignees', + type: 'array', + required: false, + description: `Array of assignees for this task. Each item must have either referenced_actor_id (UUID) with referenced_actor_type set to workspace-member, or workspace_member_email_address. Example: [{"referenced_actor_type": "workspace-member", "referenced_actor_id": "d4a8e6f2-3b1c-4d5e-9f0a-1b2c3d4e5f6a"}]`, + }, + { + name: 'content', + type: 'string', + required: true, + description: `The text content of the task. Maximum 2000 characters. Only plaintext is supported.`, + }, + { + name: 'deadline_at', + type: 'string', + required: true, + description: `ISO 8601 datetime for the task deadline. Must include milliseconds and timezone, e.g. 2024-03-31T17:00:00.000Z.`, + }, + { + name: 'is_completed', + type: 'boolean', + required: false, + description: `Whether the task is already completed. Defaults to false.`, + }, + { + name: 'linked_records', + type: 'array', + required: false, + description: `Array of records to link this task to. Each item must have a target_object (slug or UUID) and either target_record_id (UUID) or an attribute-based match. Example: [{"target_object": "people", "target_record_id": "bf071e1f-6035-429d-b874-d83ea64ea13b"}]`, + }, + ], + }, + { + name: 'attio_delete_comment', + description: `Permanently deletes a comment by its comment_id. If the comment is at the head of a thread, all messages in the thread are also deleted.`, + params: [ + { + name: 'comment_id', + type: 'string', + required: true, + description: `The unique identifier of the comment to delete.`, + }, + ], + }, + { + name: 'attio_delete_company', + description: `Permanently deletes a company record from Attio by its record_id. This operation is irreversible.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the company record to delete.`, + }, + ], + }, + { + name: 'attio_delete_deal', + description: `Permanently deletes a deal record from Attio by its record_id. This operation is irreversible.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the deal record to delete.`, + }, + ], + }, + { + name: 'attio_delete_note', + description: `Permanently deletes a note from Attio by its note_id. This operation is irreversible.`, + params: [ + { + name: 'note_id', + type: 'string', + required: true, + description: `The unique identifier of the note to delete.`, + }, + ], + }, + { + name: 'attio_delete_person', + description: `Permanently deletes a person record from Attio by its record_id. This operation is irreversible.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the person record to delete.`, + }, + ], + }, + { + name: 'attio_delete_record', + description: `Permanently delete a record from Attio by its object type and record ID. This action is irreversible. Returns an empty response on success. Returns 404 if the record does not exist.`, + params: [ + { + name: 'object', + type: 'string', + required: true, + description: `The slug or UUID of the object type the record belongs to. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `The UUID of the record to delete.`, + }, + ], + }, + { + name: 'attio_delete_task', + description: `Permanently deletes a task from Attio by its task_id. This operation is irreversible.`, + params: [ + { + name: 'task_id', + type: 'string', + required: true, + description: `The unique identifier of the task to delete.`, + }, + ], + }, + { + name: 'attio_delete_user_record', + description: `Permanently deletes a user record from Attio by its record_id. This operation is irreversible.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the user record to delete.`, + }, + ], + }, + { + name: 'attio_delete_webhook', + description: `Permanently deletes a webhook by its webhook_id from Attio. This operation is irreversible.`, + params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: `The unique identifier of the webhook to delete.`, + }, + ], + }, + { + name: 'attio_delete_workspace_record', + description: `Permanently deletes a workspace record from Attio by its record_id. This operation is irreversible.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the workspace record to delete.`, + }, + ], + }, + { + name: 'attio_get_attribute', + description: `Retrieves details of a single attribute on an Attio object or list, including its type, slug, configuration, and metadata.`, + params: [ + { name: 'attribute', type: 'string', required: true, description: `Attribute slug or UUID.` }, + { name: 'object', type: 'string', required: true, description: `Object slug or UUID.` }, + ], + }, + { + name: 'attio_get_comment', + description: `Retrieves a single comment by its comment_id in Attio. Returns the comment's content, author, thread, and resolution status.`, + params: [ + { + name: 'comment_id', + type: 'string', + required: true, + description: `The unique identifier of the comment.`, + }, + ], + }, + { + name: 'attio_get_company', + description: `Retrieves a single company record by its record_id from Attio. Returns all attribute values with temporal and audit metadata.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the company record.`, + }, + ], + }, + { + name: 'attio_get_current_token_info', + description: `Identifies the current access token, the workspace it is linked to, and its permissions. Use to verify token validity or retrieve workspace information.`, + params: [], + }, + { + name: 'attio_get_deal', + description: `Retrieves a single deal record by its record_id from Attio. Returns all attribute values with temporal and audit metadata.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the deal record.`, + }, + ], + }, + { + name: 'attio_get_list', + description: `Retrieves details of a single list in the Attio workspace by its UUID or slug.`, + params: [ + { + name: 'list_id', + type: 'string', + required: true, + description: `The unique identifier or slug of the list.`, + }, + ], + }, + { + name: 'attio_get_list_entry', + description: `Retrieves a single list entry by its entry_id. Returns detailed information about a specific entry in an Attio list.`, + params: [ + { + name: 'entry_id', + type: 'string', + required: true, + description: `The unique identifier of the list entry.`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `The unique identifier or slug of the list.`, + }, + ], + }, + { + name: 'attio_get_note', + description: `Retrieves a single note by its note_id in Attio. Returns the note's title, content (plaintext and markdown), tags, and creator information.`, + params: [ + { + name: 'note_id', + type: 'string', + required: true, + description: `The unique identifier of the note.`, + }, + ], + }, + { + name: 'attio_get_object', + description: `Retrieves details of a single object by its slug or UUID in Attio.`, + params: [ + { name: 'object', type: 'string', required: true, description: `Object slug or UUID.` }, + ], + }, + { + name: 'attio_get_person', + description: `Retrieves a single person record by its record_id from Attio. Returns all attribute values with temporal and audit metadata.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the person record.`, + }, + ], + }, + { + name: 'attio_get_record', + description: `Retrieve a specific record from Attio by its object type and record ID. Returns the full record including all attribute values with their complete audit trail (created_by_actor, active_from, active_until). Supports people, companies, deals, and custom objects.`, + params: [ + { + name: 'object', + type: 'string', + required: true, + description: `The slug or UUID of the object type the record belongs to. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `The UUID of the record to retrieve.`, + }, + ], + }, + { + name: 'attio_get_record_attribute_values', + description: `Retrieves all values for a given attribute on a record in Attio. Can include historic values using show_historic parameter. Not available for COMINT or enriched attributes.`, + params: [ + { name: 'attribute', type: 'string', required: true, description: `Attribute slug or UUID.` }, + { name: 'object', type: 'string', required: true, description: `Object slug or UUID.` }, + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the record.`, + }, + { + name: 'show_historic', + type: 'boolean', + required: false, + description: `Whether to include historic values.`, + }, + ], + }, + { + name: 'attio_get_task', + description: `Retrieves a single task by its task_id in Attio. Returns the task's content, deadline, assignees, and linked records.`, + params: [ + { + name: 'task_id', + type: 'string', + required: true, + description: `The unique identifier of the task.`, + }, + ], + }, + { + name: 'attio_get_webhook', + description: `Retrieves a single webhook by its webhook_id in Attio. Returns the webhook's target URL, event subscriptions, status, and metadata.`, + params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: `The unique identifier of the webhook.`, + }, + ], + }, + { + name: 'attio_get_workspace_member', + description: `Retrieves a single workspace member by their workspace_member_id. Returns name, email, access level, and avatar information.`, + params: [ + { + name: 'workspace_member_id', + type: 'string', + required: true, + description: `The unique identifier of the workspace member.`, + }, + ], + }, + { + name: 'attio_get_workspace_record', + description: `Retrieves a single workspace record by its record_id from Attio. Returns all attribute values with temporal and audit metadata.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the workspace record.`, + }, + ], + }, + { + name: 'attio_list_attribute_options', + description: `Lists all select options for a select or multiselect attribute on an Attio object or list.`, + params: [ + { + name: 'attribute', + type: 'string', + required: true, + description: `Attribute slug or UUID of the select/multiselect attribute.`, + }, + { name: 'object', type: 'string', required: true, description: `Object slug or UUID.` }, + ], + }, + { + name: 'attio_list_attribute_statuses', + description: `Lists all statuses for a status attribute on an Attio object or list. Returns status IDs, titles, and configuration.`, + params: [ + { + name: 'attribute', + type: 'string', + required: true, + description: `Attribute slug or UUID of the status attribute.`, + }, + { name: 'object', type: 'string', required: true, description: `Object slug or UUID.` }, + ], + }, + { + name: 'attio_list_attributes', + description: `Lists the attribute schema for an Attio object or list, including slugs, types, and select/status configuration. Use to discover what attributes exist and their types before filtering or writing.`, + params: [ + { + name: 'object', + type: 'string', + required: true, + description: `Object slug or UUID to list attributes for.`, + }, + ], + }, + { + name: 'attio_list_companies', + description: `Lists company records in Attio with optional filtering and sorting. Use filter and sorts fields to narrow results. Returns paginated results.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter criteria for querying companies.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of records to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of records to skip for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Sorting criteria for the results.`, + }, + ], + }, + { + name: 'attio_list_deals', + description: `Lists deal records in Attio with optional filtering and sorting. Returns paginated results.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter criteria for querying deals.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of records to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of records to skip for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Sorting criteria for the results.`, + }, + ], + }, + { + name: 'attio_list_entries', + description: `Lists entries in a given Attio list with optional filtering and sorting. Returns records that belong to the specified list.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter criteria for querying entries.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of entries to return.`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `The unique identifier or slug of the list.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of entries to skip for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Sorting criteria for the results.`, + }, + ], + }, + { + name: 'attio_list_lists', + description: `Retrieve all CRM lists available in the Attio workspace, along with their entries for a specific record. Lists are used to track pipeline stages, outreach targets, or custom groupings of records. Optionally filter entries by a parent record ID and object type.`, + params: [ + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of list entries to return per list. Defaults to 20.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of list entries to skip for pagination. Defaults to 0.`, + }, + ], + }, + { + name: 'attio_list_meetings', + description: `Lists all meetings in the Attio workspace. Optionally filter by participants or linked records. This endpoint is in beta.`, + params: [ + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of results to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of results to skip for pagination.`, + }, + ], + }, + { + name: 'attio_list_notes', + description: `List notes in Attio. Optionally filter by a parent object and record to retrieve notes attached to a specific person, company, deal, or other object. Supports pagination via limit (max 50) and offset.`, + params: [ + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of notes to return. Default is 10, maximum is 50.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of notes to skip before returning results. Default is 0. Use with limit for pagination.`, + }, + { + name: 'parent_object', + type: 'string', + required: false, + description: `Filter notes by parent object slug or UUID. Examples: "people", "companies", "deals". Must be provided together with parent_record_id to filter by a specific record.`, + }, + { + name: 'parent_record_id', + type: 'string', + required: false, + description: `Filter notes by parent record UUID. Must be provided together with parent_object.`, + }, + ], + }, + { + name: 'attio_list_objects', + description: `Retrieves all available objects (both system-defined and user-defined) in the Attio workspace. Fundamental for understanding workspace structure.`, + params: [], + }, + { + name: 'attio_list_people', + description: `Lists person records in Attio with optional filtering and sorting. Use filter and sorts fields to narrow results. Returns paginated results.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter criteria for querying people.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of records to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of records to skip for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Sorting criteria for the results.`, + }, + ], + }, + { + name: 'attio_list_record_entries', + description: `Lists all entries across all lists for which a specific record is the parent in Attio. Returns list IDs, slugs, entry IDs, and creation timestamps.`, + params: [ + { name: 'object', type: 'string', required: true, description: `Object slug or UUID.` }, + { + name: 'record_id', + type: 'string', + required: true, + description: `The unique identifier of the parent record.`, + }, + ], + }, + { + name: 'attio_list_records', + description: `List and query records for a specific Attio object type (e.g. people, companies, deals). Supports filtering by attribute values, sorting, and pagination with limit and offset. Returns guaranteed up-to-date data unlike the Search Records endpoint.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter object to narrow results to a subset of records. Structure depends on the attributes of the target object. Example: {"email_addresses": {"email_address": {"$eq": "alice@example.com"}}}`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of records to return. Defaults to 500.`, + }, + { + name: 'object', + type: 'string', + required: true, + description: `The slug or UUID of the object type to list records for. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of records to skip before returning results. Defaults to 0. Use with limit for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Array of sort objects to order results. Each sort object specifies a direction ("asc" or "desc"), an attribute slug or ID, and an optional field. Example: [{"direction": "asc", "attribute": "name"}]`, + }, + ], + }, + { + name: 'attio_list_tasks', + description: `List tasks in Attio, optionally filtered by linked record. Returns tasks with their content, deadline, completion status, assignees, and linked records. Use record filters to retrieve tasks associated with a specific contact, company, or deal.`, + params: [ + { + name: 'is_completed', + type: 'boolean', + required: false, + description: `Filter tasks by completion status. Set to true to return only completed tasks, false for only incomplete tasks, or omit to return all tasks.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of tasks to return. Defaults to 20.`, + }, + { + name: 'linked_object', + type: 'string', + required: false, + description: `Filter tasks linked to records of this object type. Use with linked_record_id. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'linked_record_id', + type: 'string', + required: false, + description: `Filter tasks linked to this specific record UUID. Use with linked_object to specify the object type.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of tasks to skip for pagination. Defaults to 0.`, + }, + ], + }, + { + name: 'attio_list_threads', + description: `Lists threads of comments on a record or list entry in Attio. Returns all comment threads associated with a specific record or list entry.`, + params: [ + { + name: 'parent_object', + type: 'string', + required: true, + description: `Object slug of the parent record.`, + }, + { + name: 'parent_record_id', + type: 'string', + required: true, + description: `The unique identifier of the parent record.`, + }, + ], + }, + { + name: 'attio_list_user_records', + description: `Lists user records in Attio with optional filtering and sorting. Returns paginated results.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter criteria for querying user records.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of records to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of records to skip for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Sorting criteria for the results.`, + }, + ], + }, + { + name: 'attio_list_webhooks', + description: `Retrieves all webhooks in the Attio workspace. Returns webhook configurations, subscriptions, and statuses. Supports optional limit and offset pagination parameters.`, + params: [ + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of webhooks to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of webhooks to skip for pagination.`, + }, + ], + }, + { + name: 'attio_list_workspace_members', + description: `Lists all workspace members in the Attio workspace. Use to retrieve workspace member IDs needed for assigning owners or actor-reference attributes.`, + params: [], + }, + { + name: 'attio_list_workspace_records', + description: `Lists workspace records in Attio with optional filtering and sorting. Returns paginated results.`, + params: [ + { + name: 'filter', + type: 'object', + required: false, + description: `Filter criteria for querying workspace records.`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Maximum number of records to return.`, + }, + { + name: 'offset', + type: 'number', + required: false, + description: `Number of records to skip for pagination.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Sorting criteria for the results.`, + }, + ], + }, + { + name: 'attio_remove_from_list', + description: `Remove a specific entry from an Attio list by its entry ID. This deletes the list entry but does not delete the underlying record. Obtain the entry ID from the Add to List response or by querying list entries. Returns 404 if the entry does not exist.`, + params: [ + { + name: 'entry_id', + type: 'string', + required: true, + description: `The UUID of the list entry to remove. This is the entry ID returned when the record was added to the list, not the record ID itself.`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `The slug or UUID of the Attio list to remove the entry from.`, + }, + ], + }, + { + name: 'attio_search_records', + description: `Search for records in Attio for a given object type (people, companies, deals, or custom objects) using a fuzzy text query. Returns matching records with their IDs, labels, and key attributes.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page. Defaults to 20.`, + }, + { + name: 'object', + type: 'string', + required: true, + description: `The slug or UUID of the object type to search within. Common slugs: "people", "companies", "deals".`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Number of results to skip for pagination. Defaults to 0.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Fuzzy text search string matched against names, emails, domains, phone numbers, and social handles. Pass an empty string to return all records.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/bigquery.ts b/src/data/agent-connectors/bigquery.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/bigquery.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/brave.ts b/src/data/agent-connectors/brave.ts new file mode 100644 index 000000000..a15ac5e61 --- /dev/null +++ b/src/data/agent-connectors/brave.ts @@ -0,0 +1,644 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'brave_chat_completions', + description: `Get AI-generated answers grounded in real-time Brave Search results using an OpenAI-compatible chat completions interface. Returns summarized, cited answers with source references and token usage statistics.`, + params: [ + { + name: 'country', + type: 'string', + required: false, + description: `Target country code for search results used to ground the answer (e.g., us, gb).`, + }, + { + name: 'enable_citations', + type: 'boolean', + required: false, + description: `Include inline citation markers in the response text.`, + }, + { + name: 'enable_entities', + type: 'boolean', + required: false, + description: `Include entity information (people, places, organizations) in the response.`, + }, + { + name: 'enable_research', + type: 'boolean', + required: false, + description: `Enable multi-search research mode for more comprehensive answers.`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Language code for the response (e.g., en, fr, de).`, + }, + { + name: 'messages', + type: 'array', + required: true, + description: `Array of conversation messages. Each message must have a 'role' (system, user, or assistant) and 'content' (string).`, + }, + { + name: 'model', + type: 'string', + required: false, + description: `The model to use. Must be 'brave' to use Brave's search-grounded AI model.`, + }, + { + name: 'stream', + type: 'boolean', + required: false, + description: `Whether to stream the response as server-sent events.`, + }, + ], + }, + { + name: 'brave_image_search', + description: `Search for images using Brave Search. Returns image results with thumbnails, source URLs, dimensions, and metadata. Supports filtering by country, language, and safe search.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of image results to return (1–200). Defaults to 50.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code for localised results (e.g., us, gb, de), or ALL for no restriction.`, + }, + { name: 'q', type: 'string', required: true, description: `The image search query string.` }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe search filter level. Defaults to strict (drops all adult content).`, + }, + { + name: 'search_lang', + type: 'string', + required: false, + description: `Language code for results (e.g., en, fr, de).`, + }, + { + name: 'spellcheck', + type: 'boolean', + required: false, + description: `Whether to enable spellcheck on the query. Defaults to true.`, + }, + ], + }, + { + name: 'brave_llm_context', + description: `Retrieve real-time web search results optimized as grounding context for LLMs. Returns curated snippets, source URLs, titles, and metadata specifically structured to maximize contextual relevance for AI-generated answers. Supports fine-grained token and snippet budgets.`, + params: [ + { + name: 'context_threshold_mode', + type: 'string', + required: false, + description: `Relevance filter aggressiveness for snippet selection. Defaults to balanced.`, + }, + { + name: 'count', + type: 'integer', + required: false, + description: `Max number of search results to consider (1–50). Defaults to 20.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code for localised results (e.g., us, gb, de). Defaults to us.`, + }, + { + name: 'enable_local', + type: 'boolean', + required: false, + description: `Enable location-aware recall for locally relevant results.`, + }, + { + name: 'freshness', + type: 'string', + required: false, + description: `Filter results by publish date: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD.`, + }, + { + name: 'goggles', + type: 'string', + required: false, + description: `Custom re-ranking rules via a Goggles URL or inline definition.`, + }, + { + name: 'maximum_number_of_snippets', + type: 'integer', + required: false, + description: `Maximum total snippets across all URLs (1–100). Defaults to 50.`, + }, + { + name: 'maximum_number_of_snippets_per_url', + type: 'integer', + required: false, + description: `Maximum snippets per URL (1–100). Defaults to 50.`, + }, + { + name: 'maximum_number_of_tokens', + type: 'integer', + required: false, + description: `Approximate maximum total tokens across all snippets (1024–32768). Defaults to 8192.`, + }, + { + name: 'maximum_number_of_tokens_per_url', + type: 'integer', + required: false, + description: `Maximum tokens per URL (512–8192). Defaults to 4096.`, + }, + { + name: 'maximum_number_of_urls', + type: 'integer', + required: false, + description: `Maximum number of URLs to include in the grounding response (1–50). Defaults to 20.`, + }, + { + name: 'q', + type: 'string', + required: true, + description: `The search query to retrieve grounding context for. Max 400 characters, 50 words.`, + }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe search filter level.`, + }, + { + name: 'search_lang', + type: 'string', + required: false, + description: `Language code for results (e.g., en, fr, de). Defaults to en.`, + }, + ], + }, + { + name: 'brave_local_descriptions', + description: `Fetch AI-generated descriptions for locations using IDs from a Brave web search response. Returns natural language summaries describing the place, its atmosphere, and what visitors can expect.`, + params: [ + { + name: 'ids', + type: 'array', + required: true, + description: `Array of location IDs (up to 20) obtained from the locations field in a Brave web search response.`, + }, + ], + }, + { + name: 'brave_local_place_search', + description: `Search 200M+ Points of Interest (POIs) by geographic center and radius using Brave's Place Search API. Either 'location' (text name) OR both 'latitude' and 'longitude' (coordinates) must be provided. Supports an optional keyword query to filter results. Ideal for map applications and local discovery.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of POI results to return (1–50). Defaults to 20.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `ISO 3166-1 alpha-2 country code (e.g., us, gb). Defaults to US.`, + }, + { + name: 'latitude', + type: 'number', + required: false, + description: `Latitude of the search center point (-90 to +90). Required together with longitude as an alternative to location name.`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Location name (e.g., 'san francisco ca united states'). Required unless latitude and longitude are both provided.`, + }, + { + name: 'longitude', + type: 'number', + required: false, + description: `Longitude of the search center point (-180 to +180). Required together with latitude as an alternative to location name.`, + }, + { + name: 'q', + type: 'string', + required: false, + description: `Optional keyword query to filter POIs (e.g., 'coffee shops', 'italian restaurants'). Omit for a general area snapshot.`, + }, + { + name: 'radius', + type: 'number', + required: false, + description: `Search radius in meters from the center point.`, + }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe search filter level. Defaults to strict.`, + }, + { + name: 'search_lang', + type: 'string', + required: false, + description: `Language code for results (e.g., en, fr). Defaults to en.`, + }, + { + name: 'spellcheck', + type: 'boolean', + required: false, + description: `Whether to enable spellcheck on the query.`, + }, + { + name: 'units', + type: 'string', + required: false, + description: `Measurement system for distances in the response.`, + }, + ], + }, + { + name: 'brave_local_pois', + description: `Fetch detailed Point of Interest (POI) data for up to 20 location IDs returned by a Brave web search response. Returns rich local business data including address, phone, hours, ratings, and reviews. Note: location IDs are ephemeral and expire after ~8 hours.`, + params: [ + { + name: 'ids', + type: 'array', + required: true, + description: `Array of location IDs (up to 20) obtained from the locations field in a Brave web search response.`, + }, + ], + }, + { + name: 'brave_news_search', + description: `Search for news articles using Brave Search. Returns recent news results with titles, URLs, snippets, publication dates, and source information. Supports filtering by country, language, freshness, and custom re-ranking via Goggles.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of news results to return (1–50). Defaults to 20.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code for localised news (e.g., us, gb, de).`, + }, + { + name: 'extra_snippets', + type: 'boolean', + required: false, + description: `Include additional excerpt snippets per article. Defaults to false.`, + }, + { + name: 'freshness', + type: 'string', + required: false, + description: `Filter results by publish date: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD.`, + }, + { + name: 'goggles', + type: 'string', + required: false, + description: `Custom re-ranking rules via a Goggles URL or inline definition.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Zero-based offset for pagination (0–9). Defaults to 0.`, + }, + { name: 'q', type: 'string', required: true, description: `The news search query string.` }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe search filter level. Defaults to strict.`, + }, + { + name: 'search_lang', + type: 'string', + required: false, + description: `Language code for results (e.g., en, fr, de).`, + }, + { + name: 'spellcheck', + type: 'boolean', + required: false, + description: `Whether to enable spellcheck on the query. Defaults to true.`, + }, + { + name: 'ui_lang', + type: 'string', + required: false, + description: `User interface language locale for response strings (e.g., en-US).`, + }, + ], + }, + { + name: 'brave_spellcheck', + description: `Check and correct spelling of a query using Brave Search's spellcheck engine. Returns suggested corrections for misspelled queries.`, + params: [ + { + name: 'country', + type: 'string', + required: false, + description: `Country code for localised spellcheck (e.g., us, gb).`, + }, + { + name: 'lang', + type: 'string', + required: false, + description: `Language code for spellcheck (e.g., en, fr, de).`, + }, + { name: 'q', type: 'string', required: true, description: `The query string to spellcheck.` }, + ], + }, + { + name: 'brave_suggest_search', + description: `Get autocomplete search suggestions from Brave Search for a given query prefix. Useful for query completion, exploring related search terms, and building search UIs.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of suggestions to return (1–20). Defaults to 5.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code for localised suggestions (e.g., us, gb, de).`, + }, + { + name: 'lang', + type: 'string', + required: false, + description: `Language code for suggestions (e.g., en, fr, de).`, + }, + { + name: 'q', + type: 'string', + required: true, + description: `The partial query string to get suggestions for.`, + }, + { + name: 'rich', + type: 'boolean', + required: false, + description: `Whether to return rich suggestions with additional metadata.`, + }, + ], + }, + { + name: 'brave_summarizer_enrichments', + description: `Fetch enrichment data for a Brave AI summary key. Returns images, Q&A pairs, entity details, and source references associated with the summary.`, + params: [ + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, + ], + }, + { + name: 'brave_summarizer_entity_info', + description: `Fetch detailed entity metadata for entities mentioned in a Brave AI summary. Returns structured information about people, places, organizations, and concepts referenced in the summary.`, + params: [ + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, + ], + }, + { + name: 'brave_summarizer_followups', + description: `Fetch suggested follow-up queries for a Brave AI summary key. Useful for building conversational search flows and helping users explore related topics.`, + params: [ + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, + ], + }, + { + name: 'brave_summarizer_search', + description: `Retrieve a full AI-generated summary for a summarizer key obtained from a Brave web search response (requires summary=true on the web search). Returns the complete summary with title, content, enrichments, follow-up queries, and entity details.`, + params: [ + { + name: 'entity_info', + type: 'integer', + required: false, + description: `Set to 1 to include detailed entity metadata in the response.`, + }, + { + name: 'inline_references', + type: 'boolean', + required: false, + description: `Add citation markers throughout the summary text pointing to sources.`, + }, + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, + ], + }, + { + name: 'brave_summarizer_summary', + description: `Fetch the complete AI-generated summary for a summarizer key. Returns the full summary content with optional inline citation markers and entity metadata.`, + params: [ + { + name: 'entity_info', + type: 'integer', + required: false, + description: `Set to 1 to include detailed entity metadata in the response.`, + }, + { + name: 'inline_references', + type: 'boolean', + required: false, + description: `Add citation markers throughout the summary text pointing to sources.`, + }, + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, + ], + }, + { + name: 'brave_summarizer_title', + description: `Fetch only the title component of a Brave AI summary for a given summarizer key.`, + params: [ + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, + ], + }, + { + name: 'brave_video_search', + description: `Search for videos using Brave Search. Returns video results with titles, URLs, thumbnails, durations, and publisher metadata. Supports filtering by country, language, freshness, and safe search.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of video results to return (1–50). Defaults to 20.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code for localised results (e.g., us, gb, de).`, + }, + { + name: 'freshness', + type: 'string', + required: false, + description: `Filter results by upload date: pd (past day), pw (past week), pm (past month), py (past year), or YYYY-MM-DDtoYYYY-MM-DD.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Zero-based offset for pagination (0–9). Defaults to 0.`, + }, + { name: 'q', type: 'string', required: true, description: `The video search query string.` }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe search filter level. Defaults to moderate.`, + }, + { + name: 'search_lang', + type: 'string', + required: false, + description: `Language code for results (e.g., en, fr, de).`, + }, + { + name: 'spellcheck', + type: 'boolean', + required: false, + description: `Whether to enable spellcheck on the query. Defaults to true.`, + }, + ], + }, + { + name: 'brave_web_search', + description: `Search the web using Brave Search's privacy-focused search engine. Returns real-time web results including titles, URLs, snippets, news, videos, images, locations, and rich data. Supports filtering by country, language, safe search, freshness, and custom re-ranking via Goggles.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of search results to return (1–20). Defaults to 20.`, + }, + { + name: 'country', + type: 'string', + required: false, + description: `Country code for search results (e.g., us, gb, de). Defaults to US.`, + }, + { + name: 'extra_snippets', + type: 'boolean', + required: false, + description: `Include up to 5 additional excerpt snippets per result. Defaults to false.`, + }, + { + name: 'freshness', + type: 'string', + required: false, + description: `Filter results by publish date. Use pd (past day), pw (past week), pm (past month), py (past year), or a date range YYYY-MM-DDtoYYYY-MM-DD.`, + }, + { + name: 'goggles', + type: 'string', + required: false, + description: `Custom re-ranking rules via a Goggles URL or inline definition to bias search results.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Zero-based offset for pagination of results (0–9). Defaults to 0.`, + }, + { + name: 'q', + type: 'string', + required: true, + description: `Search query string. Max 400 characters, 50 words.`, + }, + { + name: 'result_filter', + type: 'string', + required: false, + description: `Comma-separated list of result types to include in the response.`, + }, + { + name: 'safesearch', + type: 'string', + required: false, + description: `Safe search filter level. Defaults to moderate.`, + }, + { + name: 'search_lang', + type: 'string', + required: false, + description: `Language code for result content (e.g., en, fr, de). Defaults to en.`, + }, + { + name: 'spellcheck', + type: 'boolean', + required: false, + description: `Whether to enable spellcheck on the query. Defaults to true.`, + }, + { + name: 'summary', + type: 'boolean', + required: false, + description: `Enable summarizer key generation in the response. Use the returned key with the Summarizer endpoints.`, + }, + { + name: 'text_decorations', + type: 'boolean', + required: false, + description: `Whether to include text decoration markers (bold tags) in result snippets. Defaults to true.`, + }, + { + name: 'ui_lang', + type: 'string', + required: false, + description: `User interface language locale for response strings (e.g., en-US, fr-FR).`, + }, + { + name: 'units', + type: 'string', + required: false, + description: `Measurement system for unit-bearing results.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/chorus.ts b/src/data/agent-connectors/chorus.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/chorus.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/clari_copilot.ts b/src/data/agent-connectors/clari_copilot.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/clari_copilot.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/clickup.ts b/src/data/agent-connectors/clickup.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/clickup.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/confluence.ts b/src/data/agent-connectors/confluence.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/confluence.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/discord.ts b/src/data/agent-connectors/discord.ts new file mode 100644 index 000000000..aef0f6cca --- /dev/null +++ b/src/data/agent-connectors/discord.ts @@ -0,0 +1,214 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'discord_get_current_user_application_entitlements', + description: `Retrieves entitlements for the current user for a given application. Use when you need to check what premium offerings or subscriptions the authenticated user has access to. Requires the applications.entitlements OAuth2 scope.`, + params: [ + { + name: 'application_id', + type: 'string', + required: true, + description: `The ID of the application to retrieve entitlements for.`, + }, + { + name: 'exclude_deleted', + type: 'boolean', + required: false, + description: `Whether to exclude deleted entitlements.`, + }, + { + name: 'exclude_ended', + type: 'boolean', + required: false, + description: `Whether to exclude ended entitlements.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of entitlements to return (1–100).`, + }, + ], + }, + { + name: 'discord_get_gateway', + description: `Retrieves a valid WebSocket (wss) URL for establishing a Gateway connection to Discord. Use when you need to connect to the Discord Gateway for real-time events. No authentication required.`, + params: [], + }, + { + name: 'discord_get_guild_template', + description: `Retrieves information about a Discord guild template using its unique template code. Use when you need to get details about a guild template for creating new servers.`, + params: [ + { + name: 'template_code', + type: 'string', + required: true, + description: `The unique code of the guild template.`, + }, + ], + }, + { + name: 'discord_get_guild_widget', + description: `Retrieves the guild widget in JSON format. Returns public information about a Discord guild's widget including online member count and invite URL. The widget must be enabled in the guild's server settings.`, + params: [ + { + name: 'guild_id', + type: 'string', + required: true, + description: `The ID of the Discord guild (server) to retrieve the widget for.`, + }, + ], + }, + { + name: 'discord_get_guild_widget_png', + description: `Retrieves a PNG image widget for a Discord guild. Returns a visual representation of the guild widget that can be embedded on external websites. The widget must be enabled in the guild's server settings.`, + params: [ + { + name: 'guild_id', + type: 'string', + required: true, + description: `The ID of the Discord guild (server) to retrieve the widget image for.`, + }, + { name: 'style', type: 'string', required: false, description: `Style of the widget image.` }, + ], + }, + { + name: 'discord_get_invite_deprecated', + description: `DEPRECATED: Use discord_resolve_invite instead. Retrieves information about a specific invite code including guild and channel details. This endpoint is deprecated — prefer the Resolve Invite tool for new integrations.`, + params: [ + { + name: 'invite_code', + type: 'string', + required: true, + description: `The unique invite code to look up.`, + }, + { + name: 'with_counts', + type: 'boolean', + required: false, + description: `Whether to include approximate member and presence counts.`, + }, + { + name: 'with_expiration', + type: 'boolean', + required: false, + description: `Whether to include the expiration date of the invite.`, + }, + ], + }, + { + name: 'discord_get_my_guild_member', + description: `Retrieves the guild member object for the currently authenticated user within a specified guild, provided they are a member of that guild. Requires the guilds.members.read OAuth2 scope.`, + params: [ + { + name: 'guild_id', + type: 'string', + required: true, + description: `The ID of the guild to retrieve the current user's member object from.`, + }, + ], + }, + { + name: 'discord_get_my_oauth2_authorization', + description: `Retrieves current OAuth2 authorization details for the application, including app info, granted scopes, token expiration date, and user data (contingent on scopes like 'identify'). Useful for verifying what access the current token has.`, + params: [], + }, + { + name: 'discord_get_my_user', + description: `Fetches comprehensive profile information for the currently authenticated Discord user, including username, avatar, discriminator, locale, and email if the 'email' OAuth2 scope is granted.`, + params: [], + }, + { + name: 'discord_get_openid_connect_userinfo', + description: `Retrieves OpenID Connect compliant user information for the authenticated user. Returns standardized OIDC claims (sub, email, nickname, picture, locale, etc.) following the OpenID Connect specification. Requires an OAuth2 access token with the 'openid' scope; additional fields require 'identify' and 'email' scopes.`, + params: [], + }, + { + name: 'discord_get_public_keys', + description: `Retrieves Discord OAuth2 public keys (JWKS). Use when you need to verify OAuth2 tokens or access public keys for cryptographic operations such as signature verification.`, + params: [], + }, + { + name: 'discord_get_user', + description: `Retrieve information about a Discord user. With OAuth Bearer token, use '@me' as user_id to return the authenticated user's information. With a Bot token, you can query any user by their ID. Returns username, avatar, discriminator, locale, premium status, and email (if email scope is granted).`, + params: [ + { + name: 'user_id', + type: 'string', + required: true, + description: `The ID of the user to retrieve. Use '@me' to get the authenticated user's information.`, + }, + ], + }, + { + name: 'discord_list_my_guilds', + description: `Lists the current user's guilds, returning partial data (id, name, icon, owner, permissions, features) for each. Primarily used for displaying server lists or verifying guild memberships. Requires the 'guilds' OAuth2 scope.`, + params: [ + { + name: 'after', + type: 'string', + required: false, + description: `Get guilds after this guild ID (for pagination).`, + }, + { + name: 'before', + type: 'string', + required: false, + description: `Get guilds before this guild ID (for pagination).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of guilds to return (1–200, default 200).`, + }, + { + name: 'with_counts', + type: 'boolean', + required: false, + description: `Whether to include approximate member and presence counts for each guild.`, + }, + ], + }, + { + name: 'discord_list_sticker_packs', + description: `Retrieves all available Discord Nitro sticker packs. Returns official Discord sticker packs including pack name, description, stickers, cover sticker, and banner asset.`, + params: [], + }, + { + name: 'discord_resolve_invite', + description: `Resolves and retrieves information about a Discord invite code, including the associated guild, channel, event, and inviter. Prefer this over the deprecated Get Invite tool for new integrations.`, + params: [ + { + name: 'guild_scheduled_event_id', + type: 'string', + required: false, + description: `Guild scheduled event ID to include event details in the response.`, + }, + { + name: 'invite_code', + type: 'string', + required: true, + description: `The unique invite code to resolve.`, + }, + { + name: 'with_counts', + type: 'boolean', + required: false, + description: `Whether to include approximate member and presence counts.`, + }, + { + name: 'with_expiration', + type: 'boolean', + required: false, + description: `Whether to include the expiration date of the invite.`, + }, + ], + }, + { + name: 'discord_retrieve_user_connections', + description: `Retrieves a list of the authenticated user's connected third-party accounts on Discord, such as Twitch, YouTube, GitHub, Steam, and others. Requires the 'connections' OAuth2 scope.`, + params: [], + }, +] diff --git a/src/data/agent-connectors/dropbox.ts b/src/data/agent-connectors/dropbox.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/dropbox.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/evertrace.ts b/src/data/agent-connectors/evertrace.ts new file mode 100644 index 000000000..cfe531eff --- /dev/null +++ b/src/data/agent-connectors/evertrace.ts @@ -0,0 +1,485 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'evertrace_cities_list', + description: `Search available cities by name. Returns city name strings sorted by signal count. Use these values in signal filters for the city field.`, + params: [ + { + name: 'limit', + type: 'string', + required: false, + description: `Number of results per page.`, + }, + { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, + { + name: 'search', + type: 'string', + required: false, + description: `Case-insensitive partial match on city name (e.g. "san fran"). Omit to list all cities sorted by signal count.`, + }, + ], + }, + { + name: 'evertrace_companies_list', + description: `Search companies by name or look up by specific IDs. Returns company entity IDs (exe_* format) needed for signal filtering by past_companies.`, + params: [ + { + name: 'ids', + type: 'array', + required: false, + description: `Look up specific companies by entity ID (exe_* format).`, + }, + { + name: 'limit', + type: 'string', + required: false, + description: `Number of results per page.`, + }, + { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, + { + name: 'search', + type: 'string', + required: false, + description: `Case-insensitive partial match on company name (e.g. "google").`, + }, + ], + }, + { + name: 'evertrace_educations_list', + description: `Search education institutions by name or look up by specific IDs. Returns institution entity IDs (ede_* format) needed for signal filtering by past_education.`, + params: [ + { + name: 'ids', + type: 'array', + required: false, + description: `Look up specific institutions by entity ID (ede_* format).`, + }, + { + name: 'limit', + type: 'string', + required: false, + description: `Number of results per page.`, + }, + { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, + { + name: 'search', + type: 'string', + required: false, + description: `Case-insensitive partial match on institution name (e.g. "stanford").`, + }, + ], + }, + { + name: 'evertrace_list_entries_create', + description: `Add a signal to a list.`, + params: [ + { + name: 'list_id', + type: 'string', + required: true, + description: `The list ID to add the signal to.`, + }, + { name: 'signal_id', type: 'string', required: true, description: `The signal ID to add.` }, + ], + }, + { + name: 'evertrace_list_entries_delete', + description: `Remove an entry from a list.`, + params: [ + { name: 'entry_id', type: 'string', required: true, description: `The entry ID to remove.` }, + { name: 'list_id', type: 'string', required: true, description: `The list ID.` }, + ], + }, + { + name: 'evertrace_list_entries_get', + description: `Get a single list entry with its full signal profile.`, + params: [ + { name: 'entry_id', type: 'string', required: true, description: `The entry ID.` }, + { name: 'list_id', type: 'string', required: true, description: `The list ID.` }, + ], + }, + { + name: 'evertrace_list_entries_list', + description: `List entries in a list with pagination, sorting, and filtering by screening/viewed status.`, + params: [ + { + name: 'limit', + type: 'string', + required: false, + description: `Number of results per page.`, + }, + { name: 'list_id', type: 'string', required: true, description: `The list ID.` }, + { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, + { + name: 'screened_by', + type: 'array', + required: false, + description: `Filter by screening status. Prefix with "-" to exclude (e.g. ["-me", "-others"]).`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Sort field: "entry_created_at" (when added to list) or "signal_discovered_at" (when signal was discovered).`, + }, + { + name: 'sort_order', + type: 'string', + required: false, + description: `Sort direction: "asc" (oldest first) or "desc" (newest first).`, + }, + { + name: 'viewed_by', + type: 'array', + required: false, + description: `Filter by viewed status. Prefix with "-" to exclude (e.g. ["-me"]).`, + }, + ], + }, + { + name: 'evertrace_lists_create', + description: `Create a new list. Provide user IDs in accesses to share the list with teammates. The creator is automatically granted access.`, + params: [ + { + name: 'accesses', + type: 'array', + required: false, + description: `Array of user IDs to share this list with. Pass an empty array for private list.`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the new list.` }, + ], + }, + { + name: 'evertrace_lists_delete', + description: `Permanently delete a list and all its entries.`, + params: [{ name: 'id', type: 'string', required: true, description: `The list ID to delete.` }], + }, + { + name: 'evertrace_lists_get', + description: `Get a list by ID with its entries, accesses, and creator information.`, + params: [{ name: 'id', type: 'string', required: true, description: `The list ID.` }], + }, + { + name: 'evertrace_lists_list', + description: `List all lists the current user has access to in evertrace.ai.`, + params: [], + }, + { + name: 'evertrace_lists_update', + description: `Rename a list.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The list ID to update.` }, + { name: 'name', type: 'string', required: true, description: `New name for the list.` }, + ], + }, + { + name: 'evertrace_searches_create', + description: `Create a new saved search with filters. Each filter requires a key, operator, and value. Provide sharee user IDs to share the search with teammates.`, + params: [ + { + name: 'emoji', + type: 'string', + required: false, + description: `Optional emoji for the saved search.`, + }, + { + name: 'filters', + type: 'array', + required: true, + description: `Array of filter objects. Each filter has: key (e.g. "country", "industry", "score"), operator (e.g. "in"), and value (e.g. "India").`, + }, + { + name: 'sharees', + type: 'array', + required: true, + description: `Array of user IDs to share this search with.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `Title of the saved search (max 50 characters).`, + }, + { + name: 'visited_at', + type: 'number', + required: true, + description: `Epoch timestamp in milliseconds for when the search was last visited.`, + }, + ], + }, + { + name: 'evertrace_searches_delete', + description: `Permanently delete a saved search.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The saved search ID to delete.` }, + ], + }, + { + name: 'evertrace_searches_duplicate', + description: `Duplicate a saved search, creating a copy with the same filters and settings.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The saved search ID to duplicate.`, + }, + ], + }, + { + name: 'evertrace_searches_get', + description: `Get a saved search by ID with its filters and sharees.`, + params: [{ name: 'id', type: 'string', required: true, description: `The saved search ID.` }], + }, + { + name: 'evertrace_searches_list', + description: `List all saved searches accessible to the current user in evertrace.ai.`, + params: [], + }, + { + name: 'evertrace_searches_signals_list', + description: `List signals matching a saved search's filters with pagination.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The saved search ID.` }, + { + name: 'limit', + type: 'string', + required: false, + description: `Number of results per page.`, + }, + { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, + ], + }, + { + name: 'evertrace_searches_update', + description: `Update a saved search. All fields are optional — only provided fields are changed. If filters are provided, they replace all existing filters. If sharees are provided, they replace the full access list.`, + params: [ + { + name: 'emoji', + type: 'string', + required: false, + description: `New emoji for the saved search.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Replaces all existing filters. Each filter has: key, operator, value.`, + }, + { name: 'id', type: 'string', required: true, description: `The saved search ID to update.` }, + { + name: 'sharees', + type: 'array', + required: false, + description: `Replaces the full sharee list with these user IDs.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `New title for the saved search (max 50 characters).`, + }, + { + name: 'visited_at', + type: 'number', + required: false, + description: `Epoch timestamp in milliseconds for when the search was last visited.`, + }, + ], + }, + { + name: 'evertrace_signal_mark_viewed', + description: `Mark a signal as viewed by the current user.`, + params: [ + { + name: 'signal_id', + type: 'string', + required: true, + description: `The ID of the signal to mark as viewed.`, + }, + ], + }, + { + name: 'evertrace_signal_screen', + description: `Screen a signal, marking it as reviewed by the current user. Screened signals are hidden from default views.`, + params: [ + { + name: 'signal_id', + type: 'string', + required: true, + description: `The ID of the signal to screen.`, + }, + ], + }, + { + name: 'evertrace_signal_unscreen', + description: `Unscreen a signal, making it visible again in default views.`, + params: [ + { + name: 'signal_id', + type: 'string', + required: true, + description: `The ID of the signal to unscreen.`, + }, + ], + }, + { + name: 'evertrace_signals_entries', + description: `Get all list entries for a signal. Shows which lists this signal has been added to.`, + params: [{ name: 'id', type: 'string', required: true, description: `The signal ID.` }], + }, + { + name: 'evertrace_signals_get', + description: `Get a single talent signal by ID with full profile details including experiences, educations, taggings, views, and screenings.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The signal ID to retrieve.` }, + ], + }, + { + name: 'evertrace_signals_list', + description: `Search and filter talent signals with pagination. Returns full signal profiles including experiences, educations, taggings, views, and screenings.`, + params: [ + { + name: 'age', + type: 'array', + required: false, + description: `Filter by age range buckets. Valid values: "Below 25", "25 to 29", "30 to 34", "35 to 39", "40 to 44", "45 to 49", "Above 49".`, + }, + { + name: 'city', + type: 'array', + required: false, + description: `Filter by city name (e.g. ["San Francisco"]). Use evertrace_cities_list to search available cities. Prefix with "!" to exclude.`, + }, + { + name: 'country', + type: 'array', + required: false, + description: `Filter by country name (e.g. ["United States"]). Prefix with "!" to exclude.`, + }, + { + name: 'created_after', + type: 'string', + required: false, + description: `Epoch timestamp in milliseconds. Only returns signals discovered after this point.`, + }, + { + name: 'customer_focus', + type: 'array', + required: false, + description: `Filter by target market. Valid values: "B2B", "B2C".`, + }, + { + name: 'education_level', + type: 'array', + required: false, + description: `Filter by highest education level. Valid values: "Bachelor", "Master", "PhD or Above", "MBA", "No university degree".`, + }, + { + name: 'fullname', + type: 'string', + required: false, + description: `Free-text search on person name (case-insensitive partial match).`, + }, + { + name: 'gender', + type: 'array', + required: false, + description: `Filter by gender. Valid values: "man", "woman".`, + }, + { + name: 'industry', + type: 'array', + required: false, + description: `Filter by industry vertical (e.g. ["Technology", "Healthcare"]). Prefix with "!" to exclude.`, + }, + { + name: 'limit', + type: 'string', + required: false, + description: `Number of results per page.`, + }, + { + name: 'origin', + type: 'array', + required: false, + description: `Filter by nationality/origin country (e.g. ["India"]). Prefix with "!" to exclude.`, + }, + { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, + { + name: 'past_companies', + type: 'array', + required: false, + description: `Filter by past employer using company entity IDs in exe_* format. Use evertrace_companies_list to look up IDs.`, + }, + { + name: 'past_education', + type: 'array', + required: false, + description: `Filter by past education institution using IDs in ede_* format. Use evertrace_educations_list to look up IDs.`, + }, + { + name: 'profile_tags', + type: 'array', + required: false, + description: `Filter by profile background tags. Valid values: "Serial Founder", "VC Backed Founder", "VC Backed Operator", "VC Investor", "YC Alumni", "Big Tech experience", "Big 4 experience", "Banking experience", "Consulting experience".`, + }, + { + name: 'region', + type: 'array', + required: false, + description: `Filter by geographic region or US state (e.g. ["Europe", "California"]). Prefix with "!" to exclude.`, + }, + { + name: 'score', + type: 'string', + required: false, + description: `Minimum score threshold (1–10). Acts as a >= filter.`, + }, + { + name: 'screened_by', + type: 'array', + required: false, + description: `Filter by screening status. Use "me", "others", or user IDs. Prefix with "-" to exclude.`, + }, + { + name: 'source', + type: 'array', + required: false, + description: `Filter by data source name. Values are dynamic per workspace.`, + }, + { + name: 'time_range', + type: 'array', + required: false, + description: `Absolute date range as [from, to] in YYYY-MM-DD format (e.g. ["2026-01-01", "2026-03-01"]). Mutually exclusive with time_relative.`, + }, + { + name: 'time_relative', + type: 'string', + required: false, + description: `Relative time window in days from today (e.g. "30", "60", "90") or epoch ms timestamp. Mutually exclusive with time_range.`, + }, + { + name: 'type', + type: 'array', + required: false, + description: `Filter by signal type. Valid values: "New Company", "Stealth Position", "Left Position", "Investor Position", "Board Position", "New Position", "Promoted", "New Patent", "New Grant".`, + }, + ], + }, + { + name: 'evertrace_signals_list_by_linkedin_id', + description: `Get all signals representing the same person, matched by LinkedIn ID. Useful for finding duplicate or historical signals for the same individual.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The signal ID to match LinkedIn ID from.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/exa.ts b/src/data/agent-connectors/exa.ts new file mode 100644 index 000000000..9da9b7513 --- /dev/null +++ b/src/data/agent-connectors/exa.ts @@ -0,0 +1,376 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'exa_answer', + description: `Get a natural language answer to a question by searching the web with Exa and synthesizing results. Returns a direct answer with citations to the source pages. Ideal for factual questions, current events, and research queries. Rate limit: 60 requests/minute.`, + params: [ + { + name: 'exclude_domains', + type: 'array', + required: false, + description: `JSON array of domains to exclude from answer sources.`, + }, + { + name: 'include_domains', + type: 'array', + required: false, + description: `JSON array of domains to restrict source search to. Example: ["reuters.com","bbc.com"]`, + }, + { + name: 'include_text', + type: 'boolean', + required: false, + description: `When true, also returns the source page text alongside the synthesized answer.`, + }, + { + name: 'num_results', + type: 'integer', + required: false, + description: `Number of web sources to use when generating the answer (1–20). More sources improves accuracy but costs more credits.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `The question or query to answer from web sources.`, + }, + ], + }, + { + name: 'exa_crawl', + description: `Crawl one or more web pages by URL and extract their content including full text, highlights, and AI-generated summaries. Useful for reading specific pages discovered via search. Rate limit: 60 requests/minute. Credit consumption depends on number of URLs.`, + params: [ + { + name: 'highlights_per_url', + type: 'integer', + required: false, + description: `Number of highlight sentences to return per URL when include_highlights is true. Defaults to 3.`, + }, + { + name: 'include_highlights', + type: 'boolean', + required: false, + description: `When true, returns the most relevant sentence-level highlights from each page.`, + }, + { + name: 'include_html_tags', + type: 'boolean', + required: false, + description: `When true, retains HTML tags in the extracted text. Defaults to false (plain text only).`, + }, + { + name: 'include_summary', + type: 'boolean', + required: false, + description: `When true, returns an AI-generated summary for each crawled page.`, + }, + { + name: 'max_characters', + type: 'integer', + required: false, + description: `Maximum characters of text to extract per page. Defaults to 5000.`, + }, + { + name: 'summary_query', + type: 'string', + required: false, + description: `Optional query to focus the AI summary on a specific aspect of the page.`, + }, + { + name: 'urls', + type: 'array', + required: true, + description: `JSON array of URLs to crawl and extract content from.`, + }, + ], + }, + { + name: 'exa_delete_webset', + description: `Delete an Exa Webset by its ID. This permanently removes the webset and all its collected items. This action cannot be undone.`, + params: [ + { + name: 'webset_id', + type: 'string', + required: true, + description: `The ID of the webset to delete.`, + }, + ], + }, + { + name: 'exa_find_similar', + description: `Find web pages similar to a given URL using Exa's neural similarity search. Useful for competitor research, finding related articles, or discovering similar companies. Optionally returns page text, highlights, or summaries. Rate limit: 60 requests/minute.`, + params: [ + { + name: 'end_published_date', + type: 'string', + required: false, + description: `Only return pages published before this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z`, + }, + { + name: 'exclude_domains', + type: 'array', + required: false, + description: `Array of domains to exclude from results.`, + }, + { + name: 'include_domains', + type: 'array', + required: false, + description: `Array of domains to restrict results to.`, + }, + { + name: 'include_text', + type: 'boolean', + required: false, + description: `When true, returns the full text content of each result page.`, + }, + { + name: 'max_characters', + type: 'integer', + required: false, + description: `Maximum characters of page text to return per result when include_text is true. Defaults to 3000.`, + }, + { + name: 'num_results', + type: 'integer', + required: false, + description: `Number of similar results to return (1–100). Defaults to 10.`, + }, + { + name: 'start_published_date', + type: 'string', + required: false, + description: `Only return pages published after this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The URL to find similar pages for.`, + }, + ], + }, + { + name: 'exa_get_webset', + description: `Get the status and details of an existing Exa Webset by its ID. Use this to poll the status of an async webset created with Create Webset. Returns metadata including status (created, running, completed, cancelled), progress, and configuration.`, + params: [ + { + name: 'webset_id', + type: 'string', + required: true, + description: `The ID of the webset to retrieve.`, + }, + ], + }, + { + name: 'exa_list_webset_items', + description: `List the collected URLs and items from a completed Exa Webset. Use this after polling Get Webset until its status is 'completed' to retrieve the discovered results.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of items to return per page. Defaults to 10.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from a previous response to fetch the next page of items.`, + }, + { + name: 'webset_id', + type: 'string', + required: true, + description: `The ID of the webset to retrieve items from.`, + }, + ], + }, + { + name: 'exa_list_websets', + description: `List all Exa Websets in your account with optional pagination. Returns a list of websets with their IDs, statuses, and configurations.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of websets to return per page. Defaults to 10.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from a previous response to fetch the next page.`, + }, + ], + }, + { + name: 'exa_research', + description: `Run in-depth research on a topic using Exa's neural search. Performs a semantic search and returns results with full page text and AI-generated summaries, providing structured multi-source research output. Best for comprehensive topic analysis. Rate limit: 60 requests/minute.`, + params: [ + { + name: 'category', + type: 'string', + required: false, + description: `Restrict research to a specific content category for more targeted results.`, + }, + { + name: 'exclude_domains', + type: 'array', + required: false, + description: `JSON array of domains to exclude from research results.`, + }, + { + name: 'include_domains', + type: 'array', + required: false, + description: `JSON array of domains to restrict research sources to. Useful to focus on authoritative sources.`, + }, + { + name: 'max_characters', + type: 'integer', + required: false, + description: `Maximum characters of text to extract per source page. Defaults to 5000.`, + }, + { + name: 'num_results', + type: 'integer', + required: false, + description: `Number of sources to gather for the research (1–20). More sources provide broader coverage.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `The research topic or question to investigate across the web.`, + }, + { + name: 'start_published_date', + type: 'string', + required: false, + description: `Only include sources published after this date. ISO 8601 format.`, + }, + { + name: 'summary_query', + type: 'string', + required: false, + description: `Optional focused question to guide the AI page summaries. Defaults to the main research query.`, + }, + ], + }, + { + name: 'exa_search', + description: `Search the web using Exa's AI-powered semantic or keyword search engine. Supports filtering by domain, date range, content category, and result type. Optionally returns page text, highlights, or summaries alongside search results. Rate limit: 60 requests/minute.`, + params: [ + { + name: 'category', + type: 'string', + required: false, + description: `Restrict results to a specific content category.`, + }, + { + name: 'end_published_date', + type: 'string', + required: false, + description: `Only return pages published before this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z`, + }, + { + name: 'exclude_domains', + type: 'array', + required: false, + description: `JSON array of domains to exclude from results. Example: ["reddit.com","quora.com"]`, + }, + { + name: 'include_domains', + type: 'array', + required: false, + description: `JSON array of domains to restrict results to. Example: ["techcrunch.com","wired.com"]`, + }, + { + name: 'include_text', + type: 'boolean', + required: false, + description: `When true, returns the full text content of each result page (up to max_characters).`, + }, + { + name: 'max_characters', + type: 'integer', + required: false, + description: `Maximum characters of page text to return per result when include_text is true. Defaults to 3000.`, + }, + { + name: 'num_results', + type: 'integer', + required: false, + description: `Number of results to return (1–100). Defaults to 10.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `The search query. For neural/auto type, natural language works best. For keyword type, use specific terms.`, + }, + { + name: 'start_published_date', + type: 'string', + required: false, + description: `Only return pages published after this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Search type: 'neural' for semantic AI search (best for natural language), 'keyword' for exact-match keyword search, 'auto' to let Exa decide.`, + }, + { + name: 'use_autoprompt', + type: 'boolean', + required: false, + description: `When true, Exa automatically rewrites the query to be more semantically effective.`, + }, + ], + }, + { + name: 'exa_websets', + description: `Execute a complex web query designed to discover and return large sets of URLs (up to thousands) matching specific criteria. Websets are ideal for lead generation, market research, competitor analysis, and large-scale data collection. Returns a webset ID — poll status with GET /websets/v0/websets/{id}. High credit consumption.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Target number of URLs to collect. Can range from hundreds to thousands. Higher counts take longer and consume more credits.`, + }, + { + name: 'entity_type', + type: 'string', + required: false, + description: `The type of entity to search for. Helps Exa understand what constitutes a valid result match.`, + }, + { + name: 'exclude_domains', + type: 'array', + required: false, + description: `JSON array of domains to exclude from webset results.`, + }, + { + name: 'external_id', + type: 'string', + required: false, + description: `Optional external identifier to tag this webset for reference in your system.`, + }, + { + name: 'include_domains', + type: 'array', + required: false, + description: `JSON array of domains to restrict webset sources to.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `The search query describing what kinds of pages or entities to find. Be specific and descriptive for best results.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/fathom.ts b/src/data/agent-connectors/fathom.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/fathom.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/freshdesk.ts b/src/data/agent-connectors/freshdesk.ts new file mode 100644 index 000000000..6bbb9bffe --- /dev/null +++ b/src/data/agent-connectors/freshdesk.ts @@ -0,0 +1,439 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'freshdesk_agent_create', + description: `Create a new agent in Freshdesk. Email is required and must be unique. Agent will receive invitation email to set up account. At least one role must be assigned.`, + params: [ + { + name: 'agent_type', + type: 'number', + required: false, + description: `Type of agent (1=Support Agent, 2=Field Agent, 3=Collaborator)`, + }, + { + name: 'email', + type: 'string', + required: true, + description: `Email address of the agent (must be unique)`, + }, + { + name: 'focus_mode', + type: 'boolean', + required: false, + description: `Focus mode setting for the agent`, + }, + { + name: 'group_ids', + type: 'array', + required: false, + description: `Array of group IDs to assign the agent to`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Language preference of the agent`, + }, + { name: 'name', type: 'string', required: false, description: `Full name of the agent` }, + { + name: 'occasional', + type: 'boolean', + required: false, + description: `Whether the agent is occasional (true) or full-time (false)`, + }, + { + name: 'role_ids', + type: 'array', + required: true, + description: `Array of role IDs to assign to the agent (at least one required)`, + }, + { + name: 'signature', + type: 'string', + required: false, + description: `Agent email signature in HTML format`, + }, + { + name: 'skill_ids', + type: 'array', + required: false, + description: `Array of skill IDs to assign to the agent`, + }, + { + name: 'ticket_scope', + type: 'number', + required: true, + description: `Ticket permission level (1=Global Access, 2=Group Access, 3=Restricted Access)`, + }, + { name: 'time_zone', type: 'string', required: false, description: `Time zone of the agent` }, + ], + }, + { + name: 'freshdesk_agent_delete', + description: `Delete an agent from Freshdesk. This action is irreversible and will remove the agent from the system. The agent will no longer have access to the helpdesk and all associated data will be permanently deleted.`, + params: [ + { + name: 'agent_id', + type: 'number', + required: true, + description: `ID of the agent to delete`, + }, + ], + }, + { + name: 'freshdesk_agents_list', + description: `Retrieve a list of agents from Freshdesk with filtering options. Returns agent details including IDs, contact information, roles, and availability status. Supports pagination with up to 100 agents per page.`, + params: [ + { + name: 'email', + type: 'string', + required: false, + description: `Filter agents by email address`, + }, + { + name: 'mobile', + type: 'string', + required: false, + description: `Filter agents by mobile number`, + }, + { + name: 'page', + type: 'number', + required: false, + description: `Page number for pagination (starts from 1)`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of agents per page (max 100)`, + }, + { + name: 'phone', + type: 'string', + required: false, + description: `Filter agents by phone number`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter agents by state (fulltime or occasional)`, + }, + ], + }, + { + name: 'freshdesk_contact_create', + description: `Create a new contact in Freshdesk. Email and name are required. Supports custom fields, company assignment, and contact segmentation.`, + params: [ + { name: 'address', type: 'string', required: false, description: `Address of the contact` }, + { + name: 'company_id', + type: 'number', + required: false, + description: `Company ID to associate with the contact`, + }, + { + name: 'custom_fields', + type: 'object', + required: false, + description: `Key-value pairs for custom field values`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Description about the contact`, + }, + { + name: 'email', + type: 'string', + required: true, + description: `Email address of the contact`, + }, + { + name: 'job_title', + type: 'string', + required: false, + description: `Job title of the contact`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Language preference of the contact`, + }, + { + name: 'mobile', + type: 'string', + required: false, + description: `Mobile number of the contact`, + }, + { name: 'name', type: 'string', required: true, description: `Full name of the contact` }, + { + name: 'phone', + type: 'string', + required: false, + description: `Phone number of the contact`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to associate with the contact`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone of the contact`, + }, + ], + }, + { + name: 'freshdesk_roles_list', + description: `Retrieve a list of all roles from Freshdesk. Returns role details including IDs, names, descriptions, default status, and timestamps. This endpoint provides information about the different permission levels and access controls available in the Freshdesk system.`, + params: [], + }, + { + name: 'freshdesk_ticket_create', + description: `Create a new ticket in Freshdesk. Requires either requester_id, email, facebook_id, phone, twitter_id, or unique_external_id to identify the requester.`, + params: [ + { + name: 'cc_emails', + type: 'array', + required: false, + description: `Array of email addresses to be added in CC`, + }, + { + name: 'custom_fields', + type: 'object', + required: false, + description: `Key-value pairs containing custom field names and values`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `HTML content of the ticket describing the issue`, + }, + { + name: 'email', + type: 'string', + required: false, + description: `Email address of the requester. If no contact exists, will be added as new contact.`, + }, + { + name: 'group_id', + type: 'number', + required: false, + description: `ID of the group to which the ticket has been assigned`, + }, + { name: 'name', type: 'string', required: false, description: `Name of the requester` }, + { + name: 'priority', + type: 'number', + required: false, + description: `Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent`, + }, + { + name: 'requester_id', + type: 'number', + required: false, + description: `User ID of the requester. For existing contacts, can be passed instead of email.`, + }, + { + name: 'responder_id', + type: 'number', + required: false, + description: `ID of the agent to whom the ticket has been assigned`, + }, + { + name: 'source', + type: 'number', + required: false, + description: `Channel through which ticket was created. 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedback Widget, 10=Outbound Email`, + }, + { + name: 'status', + type: 'number', + required: false, + description: `Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed`, + }, + { name: 'subject', type: 'string', required: false, description: `Subject of the ticket` }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to be associated with the ticket`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Helps categorize the ticket according to different kinds of issues`, + }, + ], + }, + { + name: 'freshdesk_ticket_get', + description: `Retrieve details of a specific ticket by ID. Includes ticket properties, conversations, and metadata.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include (stats, requester, company, conversations)`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `ID of the ticket to retrieve`, + }, + ], + }, + { + name: 'freshdesk_ticket_update', + description: `Update an existing ticket in Freshdesk. Note: Subject and description of outbound tickets cannot be updated.`, + params: [ + { + name: 'custom_fields', + type: 'object', + required: false, + description: `Key-value pairs containing custom field names and values`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `HTML content of the ticket (cannot be updated for outbound tickets)`, + }, + { + name: 'group_id', + type: 'number', + required: false, + description: `ID of the group to which the ticket has been assigned`, + }, + { name: 'name', type: 'string', required: false, description: `Name of the requester` }, + { + name: 'priority', + type: 'number', + required: false, + description: `Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent`, + }, + { + name: 'responder_id', + type: 'number', + required: false, + description: `ID of the agent to whom the ticket has been assigned`, + }, + { + name: 'status', + type: 'number', + required: false, + description: `Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `Subject of the ticket (cannot be updated for outbound tickets)`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to be associated with the ticket`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `ID of the ticket to update`, + }, + ], + }, + { + name: 'freshdesk_tickets_list', + description: `Retrieve a list of tickets with filtering and pagination. Supports filtering by status, priority, requester, and more. Returns 30 tickets per page by default.`, + params: [ + { name: 'company_id', type: 'number', required: false, description: `Filter by company ID` }, + { name: 'email', type: 'string', required: false, description: `Filter by requester email` }, + { + name: 'filter', + type: 'string', + required: false, + description: `Filter name (new_and_my_open, watching, spam, deleted)`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include (description, requester, company, stats)`, + }, + { + name: 'page', + type: 'number', + required: false, + description: `Page number for pagination (starts from 1)`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of tickets per page (max 100)`, + }, + { + name: 'requester_id', + type: 'number', + required: false, + description: `Filter by requester ID`, + }, + { + name: 'updated_since', + type: 'string', + required: false, + description: `Filter tickets updated since this timestamp (ISO 8601)`, + }, + ], + }, + { + name: 'freshdesk_tickets_reply', + description: `Add a public reply to a ticket conversation. The reply will be visible to the customer and will update the ticket status if specified.`, + params: [ + { + name: 'bcc_emails', + type: 'array', + required: false, + description: `Array of email addresses to BCC on the reply`, + }, + { name: 'body', type: 'string', required: true, description: `HTML content of the reply` }, + { + name: 'cc_emails', + type: 'array', + required: false, + description: `Array of email addresses to CC on the reply`, + }, + { + name: 'from_email', + type: 'string', + required: false, + description: `Email address to send the reply from`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `ID of the ticket to reply to`, + }, + { + name: 'user_id', + type: 'number', + required: false, + description: `ID of the agent sending the reply`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/github.ts b/src/data/agent-connectors/github.ts new file mode 100644 index 000000000..6ed0b3e69 --- /dev/null +++ b/src/data/agent-connectors/github.ts @@ -0,0 +1,331 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'github_file_contents_get', + description: `Get the contents of a file or directory from a GitHub repository. Returns Base64 encoded content for files.`, + params: [ + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { + name: 'path', + type: 'string', + required: true, + description: `The content path (file or directory path in the repository)`, + }, + { + name: 'ref', + type: 'string', + required: false, + description: `The name of the commit/branch/tag`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + ], + }, + { + name: 'github_file_create_update', + description: `Create a new file or update an existing file in a GitHub repository. Content must be Base64 encoded. Requires SHA when updating existing files.`, + params: [ + { + name: 'author', + type: 'object', + required: false, + description: `Author information object with name and email`, + }, + { name: 'branch', type: 'string', required: false, description: `The branch name` }, + { + name: 'committer', + type: 'object', + required: false, + description: `Committer information object with name and email`, + }, + { + name: 'content', + type: 'string', + required: true, + description: `The new file content (Base64 encoded)`, + }, + { + name: 'message', + type: 'string', + required: true, + description: `The commit message for this change`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { + name: 'path', + type: 'string', + required: true, + description: `The file path in the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { + name: 'sha', + type: 'string', + required: false, + description: `The blob SHA of the file being replaced (required when updating existing files)`, + }, + ], + }, + { + name: 'github_issue_create', + description: `Create a new issue in a repository. Requires push access to set assignees, milestones, and labels.`, + params: [ + { + name: 'assignees', + type: 'array', + required: false, + description: `GitHub usernames to assign to the issue`, + }, + { name: 'body', type: 'string', required: false, description: `The contents of the issue` }, + { + name: 'labels', + type: 'array', + required: false, + description: `Labels to associate with the issue`, + }, + { + name: 'milestone', + type: 'number', + required: false, + description: `Milestone number to associate with the issue`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { name: 'title', type: 'string', required: true, description: `The title of the issue` }, + { name: 'type', type: 'string', required: false, description: `The name of the issue type` }, + ], + }, + { + name: 'github_issues_list', + description: `List issues in a repository. Both issues and pull requests are returned as issues in the GitHub API.`, + params: [ + { name: 'assignee', type: 'string', required: false, description: `Filter by assigned user` }, + { name: 'creator', type: 'string', required: false, description: `Filter by issue creator` }, + { name: 'direction', type: 'string', required: false, description: `Sort order` }, + { + name: 'labels', + type: 'string', + required: false, + description: `Filter by comma-separated list of label names`, + }, + { + name: 'milestone', + type: 'string', + required: false, + description: `Filter by milestone number or state`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { + name: 'page', + type: 'number', + required: false, + description: `Page number of results to fetch`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of results per page (max 100)`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { + name: 'since', + type: 'string', + required: false, + description: `Show issues updated after this timestamp (ISO 8601 format)`, + }, + { name: 'sort', type: 'string', required: false, description: `Property to sort issues by` }, + { name: 'state', type: 'string', required: false, description: `Filter by issue state` }, + ], + }, + { + name: 'github_public_repos_list', + description: `List public repositories for a specified user. Does not require authentication.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort order` }, + { + name: 'page', + type: 'number', + required: false, + description: `Page number of results to fetch`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of results per page (max 100)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Property to sort repositories by`, + }, + { name: 'type', type: 'string', required: false, description: `Filter repositories by type` }, + { + name: 'username', + type: 'string', + required: true, + description: `The GitHub username to list repositories for`, + }, + ], + }, + { + name: 'github_pull_request_create', + description: `Create a new pull request in a repository. Requires write access to the head branch.`, + params: [ + { + name: 'base', + type: 'string', + required: true, + description: `The name of the branch you want the changes pulled into`, + }, + { + name: 'body', + type: 'string', + required: false, + description: `The contents of the pull request description`, + }, + { + name: 'draft', + type: 'boolean', + required: false, + description: `Indicates whether the pull request is a draft`, + }, + { + name: 'head', + type: 'string', + required: true, + description: `The name of the branch where your changes are implemented (format: user:branch)`, + }, + { + name: 'maintainer_can_modify', + type: 'boolean', + required: false, + description: `Indicates whether maintainers can modify the pull request`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { + name: 'title', + type: 'string', + required: false, + description: `The title of the pull request`, + }, + ], + }, + { + name: 'github_pull_requests_list', + description: `List pull requests in a repository with optional filtering by state, head, and base branches.`, + params: [ + { name: 'base', type: 'string', required: false, description: `Filter by base branch name` }, + { name: 'direction', type: 'string', required: false, description: `Sort order` }, + { + name: 'head', + type: 'string', + required: false, + description: `Filter by head branch (format: user:ref-name)`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { + name: 'page', + type: 'number', + required: false, + description: `Page number of results to fetch`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of results per page (max 100)`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Property to sort pull requests by`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter by pull request state`, + }, + ], + }, + { + name: 'github_repo_get', + description: `Get detailed information about a GitHub repository including metadata, settings, and statistics.`, + params: [ + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository (case-insensitive)`, + }, + { + name: 'repo', + type: 'string', + required: true, + description: `The name of the repository without the .git extension (case-insensitive)`, + }, + ], + }, + { + name: 'github_user_repos_list', + description: `List repositories for the authenticated user. Requires authentication.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort order` }, + { + name: 'page', + type: 'number', + required: false, + description: `Page number of results to fetch`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of results per page (max 100)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Property to sort repositories by`, + }, + { name: 'type', type: 'string', required: false, description: `Filter repositories by type` }, + ], + }, +] diff --git a/src/data/agent-connectors/gitlab.ts b/src/data/agent-connectors/gitlab.ts new file mode 100644 index 000000000..d5af3c90a --- /dev/null +++ b/src/data/agent-connectors/gitlab.ts @@ -0,0 +1,2805 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'gitlab_branch_create', + description: `Create a new branch in a GitLab repository.`, + params: [ + { + name: 'branch', + type: 'string', + required: true, + description: `The name of the new branch.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'ref', + type: 'string', + required: true, + description: `The source branch, tag, or commit SHA to branch from.`, + }, + ], + }, + { + name: 'gitlab_branch_delete', + description: `Delete a branch from a GitLab repository.`, + params: [ + { + name: 'branch', + type: 'string', + required: true, + description: `The name of the branch to delete.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_branch_get', + description: `Get details of a specific branch in a GitLab repository.`, + params: [ + { name: 'branch', type: 'string', required: true, description: `The name of the branch.` }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_branches_list', + description: `List repository branches for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'search', type: 'string', required: false, description: `Filter branches by name.` }, + ], + }, + { + name: 'gitlab_commit_comment_create', + description: `Add a comment to a specific commit.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'line', + type: 'integer', + required: false, + description: `Line number for an inline comment.`, + }, + { name: 'note', type: 'string', required: true, description: `The comment text.` }, + { + name: 'path', + type: 'string', + required: false, + description: `File path for an inline comment.`, + }, + { name: 'sha', type: 'string', required: true, description: `The commit SHA.` }, + ], + }, + { + name: 'gitlab_commit_comments_list', + description: `List comments on a specific commit.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'sha', type: 'string', required: true, description: `The commit SHA.` }, + ], + }, + { + name: 'gitlab_commit_diff_get', + description: `Get the diff of a specific commit.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'sha', type: 'string', required: true, description: `The commit SHA.` }, + ], + }, + { + name: 'gitlab_commit_get', + description: `Get details of a specific commit by its SHA.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'sha', type: 'string', required: true, description: `The commit SHA.` }, + ], + }, + { + name: 'gitlab_commits_list', + description: `List repository commits for a GitLab project.`, + params: [ + { + name: 'author', + type: 'string', + required: false, + description: `Filter commits by author name or email.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'path', + type: 'string', + required: false, + description: `Filter commits by file path.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'ref_name', + type: 'string', + required: false, + description: `The branch or tag name to list commits from.`, + }, + { + name: 'since', + type: 'string', + required: false, + description: `Only commits after this date are returned (ISO 8601 format).`, + }, + { + name: 'until', + type: 'string', + required: false, + description: `Only commits before this date are returned (ISO 8601 format).`, + }, + ], + }, + { + name: 'gitlab_compare_refs', + description: `Compare two refs (branches, tags, or commits) in a GitLab repository.`, + params: [ + { + name: 'from', + type: 'string', + required: true, + description: `The source branch, tag, or commit SHA to compare from.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'straight', + type: 'string', + required: false, + description: `Comparison method: 'true' for straight diff, 'false' for merge base.`, + }, + { + name: 'to', + type: 'string', + required: true, + description: `The target branch, tag, or commit SHA to compare to.`, + }, + ], + }, + { + name: 'gitlab_current_user_get', + description: `Get the currently authenticated user's profile.`, + params: [], + }, + { + name: 'gitlab_current_user_ssh_keys_list', + description: `List SSH keys for the currently authenticated user.`, + params: [], + }, + { + name: 'gitlab_deploy_key_create', + description: `Create a new deploy key for a GitLab project.`, + params: [ + { + name: 'can_push', + type: 'string', + required: false, + description: `If 'true', the deploy key has write access.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'key', type: 'string', required: true, description: `The SSH public key content.` }, + { + name: 'title', + type: 'string', + required: true, + description: `A descriptive title for the deploy key.`, + }, + ], + }, + { + name: 'gitlab_deploy_key_delete', + description: `Delete a deploy key from a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'key_id', + type: 'integer', + required: true, + description: `The numeric ID of the deploy key to delete.`, + }, + ], + }, + { + name: 'gitlab_deploy_keys_list', + description: `List deploy keys for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_file_create', + description: `Create a new file in a GitLab repository.`, + params: [ + { + name: 'author_email', + type: 'string', + required: false, + description: `The author's email for the commit.`, + }, + { + name: 'author_name', + type: 'string', + required: false, + description: `The author's name for the commit.`, + }, + { + name: 'branch', + type: 'string', + required: true, + description: `The branch to create the file on.`, + }, + { + name: 'commit_message', + type: 'string', + required: true, + description: `The commit message for creating this file.`, + }, + { + name: 'content', + type: 'string', + required: true, + description: `The file content (plain text or base64 encoded).`, + }, + { + name: 'encoding', + type: 'string', + required: false, + description: `The encoding type: 'text' or 'base64'.`, + }, + { + name: 'file_path', + type: 'string', + required: true, + description: `URL-encoded file path in the repository.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_file_delete', + description: `Delete a file from a GitLab repository.`, + params: [ + { + name: 'branch', + type: 'string', + required: true, + description: `The branch to delete the file from.`, + }, + { + name: 'commit_message', + type: 'string', + required: true, + description: `The commit message for deleting this file.`, + }, + { + name: 'file_path', + type: 'string', + required: true, + description: `URL-encoded file path in the repository.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_file_get', + description: `Get a file's content and metadata from a GitLab repository.`, + params: [ + { + name: 'file_path', + type: 'string', + required: true, + description: `URL-encoded file path in the repository.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'ref', + type: 'string', + required: true, + description: `The branch, tag, or commit SHA to get the file from.`, + }, + ], + }, + { + name: 'gitlab_file_update', + description: `Update an existing file in a GitLab repository.`, + params: [ + { + name: 'branch', + type: 'string', + required: true, + description: `The branch to update the file on.`, + }, + { + name: 'commit_message', + type: 'string', + required: true, + description: `The commit message for updating this file.`, + }, + { name: 'content', type: 'string', required: true, description: `The new file content.` }, + { + name: 'file_path', + type: 'string', + required: true, + description: `URL-encoded file path in the repository.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'last_commit_id', + type: 'string', + required: false, + description: `Last known file commit ID (for conflict detection).`, + }, + ], + }, + { + name: 'gitlab_global_search', + description: `Search globally across GitLab for projects, issues, merge requests, and more.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'scope', type: 'string', required: true, description: `The scope to search in.` }, + { name: 'search', type: 'string', required: true, description: `The search query string.` }, + ], + }, + { + name: 'gitlab_group_create', + description: `Create a new GitLab group or subgroup.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Optional group description.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the group.` }, + { + name: 'parent_id', + type: 'integer', + required: false, + description: `ID of the parent group (for subgroups).`, + }, + { + name: 'path', + type: 'string', + required: true, + description: `URL-friendly path slug for the group.`, + }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility level: private, internal, or public.`, + }, + ], + }, + { + name: 'gitlab_group_delete', + description: `Delete a GitLab group. This is an asynchronous operation (returns 202 Accepted).`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_group_get', + description: `Get a specific group by numeric ID or URL-encoded path.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_group_member_add', + description: `Add a member to a GitLab group.`, + params: [ + { + name: 'access_level', + type: 'integer', + required: true, + description: `Access level for the member. 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + { + name: 'user_id', + type: 'integer', + required: true, + description: `The numeric ID of the user to add.`, + }, + ], + }, + { + name: 'gitlab_group_member_remove', + description: `Remove a member from a GitLab group.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + { + name: 'user_id', + type: 'integer', + required: true, + description: `The numeric ID of the user to remove.`, + }, + ], + }, + { + name: 'gitlab_group_members_list', + description: `List members of a GitLab group.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'query', type: 'string', required: false, description: `Filter members by name.` }, + ], + }, + { + name: 'gitlab_group_projects_list', + description: `List projects belonging to a GitLab group.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'search', type: 'string', required: false, description: `Filter projects by name.` }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Filter by visibility level: public, internal, or private.`, + }, + ], + }, + { + name: 'gitlab_group_update', + description: `Update a GitLab group's settings.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated group description.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The group ID (numeric) or URL-encoded path.`, + }, + { name: 'name', type: 'string', required: false, description: `New name for the group.` }, + { + name: 'visibility', + type: 'string', + required: false, + description: `New visibility level: private, internal, or public.`, + }, + ], + }, + { + name: 'gitlab_groups_list', + description: `List groups accessible to the authenticated user.`, + params: [ + { + name: 'min_access_level', + type: 'integer', + required: false, + description: `Minimum access level filter (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner).`, + }, + { + name: 'owned', + type: 'string', + required: false, + description: `If 'true', limits to groups explicitly owned by the current user.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'search', type: 'string', required: false, description: `Search groups by name.` }, + ], + }, + { + name: 'gitlab_issue_create', + description: `Create a new issue in a GitLab project.`, + params: [ + { + name: 'assignee_ids', + type: 'string', + required: false, + description: `Comma-separated list of user IDs to assign.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Detailed description of the issue (Markdown supported).`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date for the issue in YYYY-MM-DD format.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'labels', + type: 'string', + required: false, + description: `Comma-separated list of label names to apply.`, + }, + { + name: 'milestone_id', + type: 'integer', + required: false, + description: `The ID of the milestone to assign.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the issue.` }, + ], + }, + { + name: 'gitlab_issue_delete', + description: `Delete an issue from a GitLab project (admin only).`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue within the project.`, + }, + ], + }, + { + name: 'gitlab_issue_get', + description: `Get a specific issue by its internal ID (IID).`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue within the project.`, + }, + ], + }, + { + name: 'gitlab_issue_labels_list', + description: `List labels for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + ], + }, + { + name: 'gitlab_issue_note_create', + description: `Add a comment to a specific issue.`, + params: [ + { + name: 'body', + type: 'string', + required: true, + description: `The comment text (Markdown supported).`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue.`, + }, + ], + }, + { + name: 'gitlab_issue_note_delete', + description: `Delete a comment on a specific issue.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue.`, + }, + { + name: 'note_id', + type: 'integer', + required: true, + description: `The ID of the note to delete.`, + }, + ], + }, + { + name: 'gitlab_issue_note_update', + description: `Update a comment on a specific issue.`, + params: [ + { + name: 'body', + type: 'string', + required: true, + description: `The updated comment text (Markdown supported).`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue.`, + }, + { + name: 'note_id', + type: 'integer', + required: true, + description: `The ID of the note to update.`, + }, + ], + }, + { + name: 'gitlab_issue_notes_list', + description: `List comments (notes) on a specific issue.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + ], + }, + { + name: 'gitlab_issue_update', + description: `Update an existing issue in a GitLab project.`, + params: [ + { + name: 'assignee_ids', + type: 'string', + required: false, + description: `Comma-separated list of user IDs to assign.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the issue.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issue_iid', + type: 'integer', + required: true, + description: `The internal ID of the issue within the project.`, + }, + { + name: 'labels', + type: 'string', + required: false, + description: `Comma-separated list of label names.`, + }, + { + name: 'state_event', + type: 'string', + required: false, + description: `State transition: 'close' to close, 'reopen' to reopen.`, + }, + { name: 'title', type: 'string', required: false, description: `New title for the issue.` }, + ], + }, + { + name: 'gitlab_issues_list', + description: `List issues for a GitLab project.`, + params: [ + { + name: 'assignee_id', + type: 'integer', + required: false, + description: `Filter issues by assignee user ID.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'labels', + type: 'string', + required: false, + description: `Filter issues by comma-separated label names.`, + }, + { + name: 'milestone', + type: 'string', + required: false, + description: `Filter issues by milestone title.`, + }, + { + name: 'order_by', + type: 'string', + required: false, + description: `Order issues by field (created_at, updated_at, priority).`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Search issues by title or description.`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order: asc or desc.` }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter issues by state: opened, closed, or all.`, + }, + ], + }, + { + name: 'gitlab_job_artifacts_download', + description: `Download the artifacts archive of a specific CI/CD job.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'job_id', + type: 'integer', + required: true, + description: `The numeric ID of the job.`, + }, + ], + }, + { + name: 'gitlab_job_cancel', + description: `Cancel a specific CI/CD job.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'job_id', + type: 'integer', + required: true, + description: `The numeric ID of the job to cancel.`, + }, + ], + }, + { + name: 'gitlab_job_get', + description: `Get details of a specific CI/CD job.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'job_id', + type: 'integer', + required: true, + description: `The numeric ID of the job.`, + }, + ], + }, + { + name: 'gitlab_job_log_get', + description: `Get the log (trace) output of a specific CI/CD job.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'job_id', + type: 'integer', + required: true, + description: `The numeric ID of the job.`, + }, + ], + }, + { + name: 'gitlab_job_retry', + description: `Retry a specific CI/CD job.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'job_id', + type: 'integer', + required: true, + description: `The numeric ID of the job to retry.`, + }, + ], + }, + { + name: 'gitlab_jobs_list', + description: `List all jobs for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'scope', + type: 'string', + required: false, + description: `Filter jobs by scope/status.`, + }, + ], + }, + { + name: 'gitlab_label_create', + description: `Create a new label in a GitLab project.`, + params: [ + { + name: 'color', + type: 'string', + required: true, + description: `The color for the label in hex format (e.g. #FF0000).`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional description for the label.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the label.` }, + ], + }, + { + name: 'gitlab_merge_request_approvals_get', + description: `Get the approval state of a specific merge request.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_request_approve', + description: `Approve a merge request.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_request_commits_list', + description: `List commits in a specific merge request.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_request_create', + description: `Create a new merge request in a GitLab project.`, + params: [ + { + name: 'assignee_id', + type: 'integer', + required: false, + description: `The numeric ID of the user to assign.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Description for the merge request (Markdown supported).`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'labels', + type: 'string', + required: false, + description: `Comma-separated list of label names.`, + }, + { + name: 'remove_source_branch', + type: 'string', + required: false, + description: `If 'true', removes the source branch after merging.`, + }, + { + name: 'source_branch', + type: 'string', + required: true, + description: `The source branch name.`, + }, + { + name: 'squash', + type: 'string', + required: false, + description: `If 'true', squashes all commits into one on merge.`, + }, + { + name: 'target_branch', + type: 'string', + required: true, + description: `The target branch name.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `The title of the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_request_diff_get', + description: `Get the diffs of a specific merge request.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_request_get', + description: `Get a specific merge request by its internal ID (IID).`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request within the project.`, + }, + ], + }, + { + name: 'gitlab_merge_request_merge', + description: `Merge an approved merge request in a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_commit_message', + type: 'string', + required: false, + description: `Custom merge commit message.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + { + name: 'should_remove_source_branch', + type: 'string', + required: false, + description: `If 'true', removes the source branch after merging.`, + }, + { + name: 'squash', + type: 'string', + required: false, + description: `If 'true', squashes all commits into one.`, + }, + ], + }, + { + name: 'gitlab_merge_request_note_create', + description: `Add a comment to a specific merge request.`, + params: [ + { + name: 'body', + type: 'string', + required: true, + description: `The comment text (Markdown supported).`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_request_notes_list', + description: `List comments on a specific merge request.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + ], + }, + { + name: 'gitlab_merge_request_update', + description: `Update an existing merge request in a GitLab project.`, + params: [ + { + name: 'assignee_id', + type: 'integer', + required: false, + description: `The numeric ID of the user to assign.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description for the merge request.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'labels', + type: 'string', + required: false, + description: `Comma-separated list of label names.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, + { + name: 'state_event', + type: 'string', + required: false, + description: `State transition: 'close' to close, 'reopen' to reopen.`, + }, + { + name: 'target_branch', + type: 'string', + required: false, + description: `New target branch name.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `New title for the merge request.`, + }, + ], + }, + { + name: 'gitlab_merge_requests_list', + description: `List merge requests for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'labels', + type: 'string', + required: false, + description: `Filter by comma-separated label names.`, + }, + { + name: 'order_by', + type: 'string', + required: false, + description: `Order MRs by field (created_at, updated_at, title).`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Search MRs by title or description.`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order: asc or desc.` }, + { + name: 'source_branch', + type: 'string', + required: false, + description: `Filter by source branch name.`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter by state: opened, closed, locked, merged, or all.`, + }, + { + name: 'target_branch', + type: 'string', + required: false, + description: `Filter by target branch name.`, + }, + ], + }, + { + name: 'gitlab_milestone_create', + description: `Create a new milestone in a GitLab project.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Optional description for the milestone.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date for the milestone in YYYY-MM-DD format.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for the milestone in YYYY-MM-DD format.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the milestone.` }, + ], + }, + { + name: 'gitlab_milestone_delete', + description: `Delete a milestone from a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'milestone_id', + type: 'integer', + required: true, + description: `The numeric ID of the milestone.`, + }, + ], + }, + { + name: 'gitlab_milestone_get', + description: `Get a specific project milestone.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'milestone_id', + type: 'integer', + required: true, + description: `The numeric ID of the milestone.`, + }, + ], + }, + { + name: 'gitlab_milestone_update', + description: `Update an existing milestone in a GitLab project.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated description for the milestone.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Updated due date in YYYY-MM-DD format.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'milestone_id', + type: 'integer', + required: true, + description: `The numeric ID of the milestone.`, + }, + { + name: 'state_event', + type: 'string', + required: false, + description: `State transition: 'close' to close, 'activate' to reopen.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `New title for the milestone.`, + }, + ], + }, + { + name: 'gitlab_milestones_list', + description: `List milestones for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Filter milestones by title.`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter milestones by state: active or closed.`, + }, + ], + }, + { + name: 'gitlab_namespaces_list', + description: `List namespaces available to the current user (personal namespaces and groups).`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Filter namespaces by name.`, + }, + ], + }, + { + name: 'gitlab_pipeline_cancel', + description: `Cancel a running pipeline.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `The numeric ID of the pipeline to cancel.`, + }, + ], + }, + { + name: 'gitlab_pipeline_create', + description: `Trigger a new CI/CD pipeline for a specific branch or tag. Note: GitLab.com requires identity verification on the account before pipelines can be triggered via API. Ensure the authenticated user has verified their identity at gitlab.com/-/profile/verify.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'ref', + type: 'string', + required: true, + description: `The branch or tag name to run the pipeline on.`, + }, + { + name: 'variables', + type: 'string', + required: false, + description: `JSON array of pipeline variables, each with 'key' and 'value' fields.`, + }, + ], + }, + { + name: 'gitlab_pipeline_delete', + description: `Delete a pipeline from a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `The numeric ID of the pipeline to delete.`, + }, + ], + }, + { + name: 'gitlab_pipeline_get', + description: `Get details of a specific pipeline.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `The numeric ID of the pipeline.`, + }, + ], + }, + { + name: 'gitlab_pipeline_jobs_list', + description: `List jobs for a specific pipeline.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `The numeric ID of the pipeline.`, + }, + { name: 'scope', type: 'string', required: false, description: `Filter jobs by scope.` }, + ], + }, + { + name: 'gitlab_pipeline_retry', + description: `Retry a failed pipeline.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `The numeric ID of the pipeline to retry.`, + }, + ], + }, + { + name: 'gitlab_pipelines_list', + description: `List pipelines for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'ref', + type: 'string', + required: false, + description: `Filter pipelines by branch or tag name.`, + }, + { + name: 'sha', + type: 'string', + required: false, + description: `Filter pipelines by commit SHA.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter by pipeline status.`, + }, + ], + }, + { + name: 'gitlab_project_create', + description: `Create a new GitLab project.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `A short description of the project.`, + }, + { + name: 'initialize_with_readme', + type: 'string', + required: false, + description: `If 'true', initializes the repository with a README.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the project.` }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility level: private, internal, or public. Defaults to private.`, + }, + ], + }, + { + name: 'gitlab_project_delete', + description: `Delete a GitLab project. This is an asynchronous operation (returns 202 Accepted).`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject').`, + }, + ], + }, + { + name: 'gitlab_project_fork', + description: `Fork a GitLab project into a namespace.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path to fork.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The name for the forked project.`, + }, + { + name: 'namespace_id', + type: 'integer', + required: false, + description: `The ID of the namespace to fork the project into.`, + }, + { + name: 'path', + type: 'string', + required: false, + description: `The URL path (slug) for the forked project. Must be unique in the target namespace. If omitted, GitLab uses the source project path which may already be taken.`, + }, + ], + }, + { + name: 'gitlab_project_forks_list', + description: `List forks of a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + ], + }, + { + name: 'gitlab_project_get', + description: `Get a specific project by numeric ID or URL-encoded namespace/project path.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject').`, + }, + ], + }, + { + name: 'gitlab_project_member_add', + description: `Add a member to a GitLab project with a specified access level.`, + params: [ + { + name: 'access_level', + type: 'integer', + required: true, + description: `Access level for the member. 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'user_id', + type: 'integer', + required: true, + description: `The numeric ID of the user to add.`, + }, + ], + }, + { + name: 'gitlab_project_member_remove', + description: `Remove a member from a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'user_id', + type: 'integer', + required: true, + description: `The numeric ID of the user to remove.`, + }, + ], + }, + { + name: 'gitlab_project_members_list', + description: `List members of a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'query', type: 'string', required: false, description: `Filter members by name.` }, + ], + }, + { + name: 'gitlab_project_search', + description: `Search within a specific GitLab project for issues, merge requests, commits, code, and more.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'ref', + type: 'string', + required: false, + description: `The branch or tag name to search (for blobs or commits scope).`, + }, + { + name: 'scope', + type: 'string', + required: true, + description: `The scope to search in within the project.`, + }, + { name: 'search', type: 'string', required: true, description: `The search query string.` }, + ], + }, + { + name: 'gitlab_project_snippet_create', + description: `Create a new snippet in a GitLab project.`, + params: [ + { + name: 'content', + type: 'string', + required: true, + description: `The content of the snippet.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional description for the snippet.`, + }, + { + name: 'file_name', + type: 'string', + required: true, + description: `The filename for the snippet.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the snippet.` }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility level: private, internal, or public.`, + }, + ], + }, + { + name: 'gitlab_project_snippet_get', + description: `Get a specific snippet from a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'snippet_id', + type: 'integer', + required: true, + description: `The numeric ID of the snippet.`, + }, + ], + }, + { + name: 'gitlab_project_snippets_list', + description: `List all snippets in a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + ], + }, + { + name: 'gitlab_project_star', + description: `Star a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_project_unstar', + description: `Unstar a GitLab project. Returns 200 with project data if successfully unstarred, or 304 if the project was not starred.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_project_update', + description: `Update an existing GitLab project's settings.`, + params: [ + { + name: 'default_branch', + type: 'string', + required: false, + description: `The default branch name for the project.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `A short description of the project.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject').`, + }, + { name: 'name', type: 'string', required: false, description: `New name for the project.` }, + { + name: 'visibility', + type: 'string', + required: false, + description: `New visibility level: private, internal, or public.`, + }, + ], + }, + { + name: 'gitlab_project_variable_create', + description: `Create a new CI/CD variable for a GitLab project.`, + params: [ + { + name: 'environment_scope', + type: 'string', + required: false, + description: `The environment scope for this variable (default '*').`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'key', type: 'string', required: true, description: `The variable key name.` }, + { + name: 'masked', + type: 'string', + required: false, + description: `If 'true', masks the variable in job logs.`, + }, + { + name: 'protected', + type: 'string', + required: false, + description: `If 'true', the variable is only available on protected branches/tags.`, + }, + { name: 'value', type: 'string', required: true, description: `The value of the variable.` }, + { + name: 'variable_type', + type: 'string', + required: false, + description: `The variable type: env_var (default) or file.`, + }, + ], + }, + { + name: 'gitlab_project_variable_delete', + description: `Delete a CI/CD variable from a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'key', + type: 'string', + required: true, + description: `The variable key name to delete.`, + }, + ], + }, + { + name: 'gitlab_project_variable_get', + description: `Get a specific CI/CD variable for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'key', type: 'string', required: true, description: `The variable key name.` }, + ], + }, + { + name: 'gitlab_project_variable_update', + description: `Update an existing CI/CD variable for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'key', + type: 'string', + required: true, + description: `The variable key name to update.`, + }, + { + name: 'masked', + type: 'string', + required: false, + description: `If 'true', masks the variable in job logs.`, + }, + { + name: 'protected', + type: 'string', + required: false, + description: `If 'true', the variable is only available on protected branches/tags.`, + }, + { + name: 'value', + type: 'string', + required: true, + description: `The new value of the variable.`, + }, + ], + }, + { + name: 'gitlab_project_variables_list', + description: `List all CI/CD variables for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_project_webhook_create', + description: `Create a new webhook for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'issues_events', + type: 'string', + required: false, + description: `If 'true', trigger the webhook on issue events.`, + }, + { + name: 'merge_requests_events', + type: 'string', + required: false, + description: `If 'true', trigger on merge request events.`, + }, + { + name: 'pipeline_events', + type: 'string', + required: false, + description: `If 'true', trigger on pipeline events.`, + }, + { + name: 'push_events', + type: 'string', + required: false, + description: `If 'true', trigger the webhook on push events.`, + }, + { + name: 'token', + type: 'string', + required: false, + description: `Secret token to validate webhook payloads.`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The URL to send webhook payloads to.`, + }, + ], + }, + { + name: 'gitlab_project_webhook_delete', + description: `Delete a webhook from a GitLab project.`, + params: [ + { + name: 'hook_id', + type: 'integer', + required: true, + description: `The numeric ID of the webhook to delete.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_project_webhook_get', + description: `Get a specific webhook for a GitLab project.`, + params: [ + { + name: 'hook_id', + type: 'integer', + required: true, + description: `The numeric ID of the webhook.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_project_webhook_update', + description: `Update an existing webhook for a GitLab project.`, + params: [ + { + name: 'hook_id', + type: 'integer', + required: true, + description: `The numeric ID of the webhook to update.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_requests_events', + type: 'string', + required: false, + description: `If 'true', trigger on merge request events.`, + }, + { + name: 'pipeline_events', + type: 'string', + required: false, + description: `If 'true', trigger on pipeline events.`, + }, + { + name: 'push_events', + type: 'string', + required: false, + description: `If 'true', trigger on push events.`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The new URL to send webhook payloads to.`, + }, + ], + }, + { + name: 'gitlab_project_webhooks_list', + description: `List all webhooks configured for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + ], + }, + { + name: 'gitlab_projects_list', + description: `List all projects accessible to the authenticated user. Supports filtering by search, ownership, membership, and visibility.`, + params: [ + { + name: 'membership', + type: 'string', + required: false, + description: `If 'true', limits by projects where the user is a member.`, + }, + { + name: 'order_by', + type: 'string', + required: false, + description: `Order projects by a field (e.g. id, name, created_at).`, + }, + { + name: 'owned', + type: 'string', + required: false, + description: `If 'true', limits by projects explicitly owned by the current user.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Search query to filter projects by name.`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort order: 'asc' or 'desc'.`, + }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Filter by visibility level: public, internal, or private.`, + }, + ], + }, + { + name: 'gitlab_release_create', + description: `Create a new release in a GitLab project.`, + params: [ + { + name: 'description', + type: 'string', + required: true, + description: `Release notes in Markdown format.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'name', type: 'string', required: true, description: `The release name.` }, + { + name: 'ref', + type: 'string', + required: false, + description: `The branch or commit to create the tag from (only if tag does not exist).`, + }, + { + name: 'tag_name', + type: 'string', + required: true, + description: `The tag name for the release.`, + }, + ], + }, + { + name: 'gitlab_release_delete', + description: `Delete a release from a GitLab project. Returns the deleted release object.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'tag_name', + type: 'string', + required: true, + description: `The tag name of the release to delete.`, + }, + ], + }, + { + name: 'gitlab_release_get', + description: `Get a specific release by tag name.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'tag_name', + type: 'string', + required: true, + description: `The tag name for the release.`, + }, + ], + }, + { + name: 'gitlab_release_update', + description: `Update an existing release in a GitLab project.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated release notes in Markdown format.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'name', type: 'string', required: false, description: `Updated release name.` }, + { + name: 'tag_name', + type: 'string', + required: true, + description: `The tag name of the release to update.`, + }, + ], + }, + { + name: 'gitlab_releases_list', + description: `List releases for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + ], + }, + { + name: 'gitlab_repository_tree_list', + description: `List files and directories in a GitLab repository.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'path', + type: 'string', + required: false, + description: `Folder path to list files from.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'recursive', + type: 'string', + required: false, + description: `If 'true', lists files recursively.`, + }, + { + name: 'ref', + type: 'string', + required: false, + description: `The branch, tag, or commit SHA to list files from.`, + }, + ], + }, + { + name: 'gitlab_ssh_key_add', + description: `Add an SSH key for the currently authenticated user.`, + params: [ + { name: 'key', type: 'string', required: true, description: `The SSH public key content.` }, + { + name: 'title', + type: 'string', + required: true, + description: `A descriptive title for the SSH key.`, + }, + ], + }, + { + name: 'gitlab_tag_create', + description: `Create a new tag in a GitLab repository.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'message', + type: 'string', + required: false, + description: `Message for an annotated tag.`, + }, + { + name: 'ref', + type: 'string', + required: true, + description: `The commit SHA, branch name, or another tag name to create the tag from.`, + }, + { + name: 'release_description', + type: 'string', + required: false, + description: `Release notes for the tag.`, + }, + { name: 'tag_name', type: 'string', required: true, description: `The name of the new tag.` }, + ], + }, + { + name: 'gitlab_tag_delete', + description: `Delete a tag from a GitLab repository.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'tag_name', + type: 'string', + required: true, + description: `The name of the tag to delete.`, + }, + ], + }, + { + name: 'gitlab_tag_get', + description: `Get details of a specific repository tag.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'tag_name', type: 'string', required: true, description: `The name of the tag.` }, + ], + }, + { + name: 'gitlab_tags_list', + description: `List repository tags for a GitLab project.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'order_by', + type: 'string', + required: false, + description: `Order tags by field (name, updated, version).`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { name: 'search', type: 'string', required: false, description: `Filter tags by name.` }, + { name: 'sort', type: 'string', required: false, description: `Sort order: asc or desc.` }, + ], + }, + { + name: 'gitlab_user_get', + description: `Get a specific user by ID.`, + params: [{ name: 'id', type: 'integer', required: true, description: `The ID of the user.` }], + }, + { + name: 'gitlab_user_projects_list', + description: `List projects owned by a specific user.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'user_id', + type: 'integer', + required: true, + description: `The numeric ID of the user whose projects to list.`, + }, + ], + }, + { + name: 'gitlab_users_list', + description: `List users. Supports filtering by search term, username, and active status.`, + params: [ + { + name: 'active', + type: 'string', + required: false, + description: `Filter by active status. Use 'true' or 'false'.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination.`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results per page (max 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Search users by name or email.`, + }, + { + name: 'username', + type: 'string', + required: false, + description: `Filter by exact username.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/gmail.ts b/src/data/agent-connectors/gmail.ts new file mode 100644 index 000000000..d2aa2a699 --- /dev/null +++ b/src/data/agent-connectors/gmail.ts @@ -0,0 +1,311 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'gmail_fetch_mails', + description: `Fetch emails from a connected Gmail account using search filters. Requires a valid Gmail OAuth2 connection.`, + params: [ + { + name: 'format', + type: 'string', + required: false, + description: `Format of the returned message.`, + }, + { + name: 'include_spam_trash', + type: 'boolean', + required: false, + description: `Whether to fetch emails from spam and trash folders`, + }, + { + name: 'label_ids', + type: 'array', + required: false, + description: `Gmail label IDs to filter messages`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of emails to fetch`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Page token for pagination`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query string using Gmail's search syntax (e.g., 'is:unread from:user@example.com')`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_get_attachment_by_id', + description: `Retrieve a specific attachment from a Gmail message using the message ID and attachment ID.`, + params: [ + { + name: 'attachment_id', + type: 'string', + required: true, + description: `Unique Gmail attachment ID`, + }, + { + name: 'file_name', + type: 'string', + required: false, + description: `Preferred filename to use when saving/returning the attachment`, + }, + { + name: 'message_id', + type: 'string', + required: true, + description: `Unique Gmail message ID that contains the attachment`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_get_contacts', + description: `Fetch a list of contacts from the connected Gmail account. Supports pagination and field filtering.`, + params: [ + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of contacts to fetch`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token to retrieve the next page of results`, + }, + { + name: 'person_fields', + type: 'array', + required: false, + description: `Fields to include for each person`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_get_message_by_id', + description: `Retrieve a specific Gmail message using its message ID. Optionally control the format of the returned data.`, + params: [ + { + name: 'format', + type: 'string', + required: false, + description: `Format of the returned message.`, + }, + { + name: 'message_id', + type: 'string', + required: true, + description: `Unique Gmail message ID`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_get_thread_by_id', + description: `Retrieve a specific Gmail thread by thread ID. Optionally control message format and metadata headers. Requires a valid Gmail OAuth2 connection with read access.`, + params: [ + { + name: 'format', + type: 'string', + required: false, + description: `Format of messages in the returned thread.`, + }, + { + name: 'metadata_headers', + type: 'array', + required: false, + description: `Specific email headers to include when format is metadata`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { name: 'thread_id', type: 'string', required: true, description: `Unique Gmail thread ID` }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_list_drafts', + description: `List draft emails from a connected Gmail account. Requires a valid Gmail OAuth2 connection.`, + params: [ + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of drafts to fetch`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Page token for pagination`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_list_threads', + description: `List threads in a connected Gmail account using optional search and label filters. Requires a valid Gmail OAuth2 connection with read access.`, + params: [ + { + name: 'include_spam_trash', + type: 'boolean', + required: false, + description: `Whether to include threads from Spam and Trash`, + }, + { + name: 'label_ids', + type: 'array', + required: false, + description: `Gmail label IDs to filter threads (threads must match all labels)`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of threads to return`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Page token for pagination`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query string using Gmail search syntax (for example, 'is:unread from:user@example.com')`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'gmail_search_people', + description: `Search people or contacts in the connected Google account using a query. Requires a valid Google OAuth2 connection with People API scopes.`, + params: [ + { + name: 'other_contacts', + type: 'boolean', + required: false, + description: `Whether to include people not in the user's contacts (from 'Other Contacts').`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of people to return.`, + }, + { + name: 'person_fields', + type: 'array', + required: false, + description: `Fields to retrieve for each person.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Text query to search people (e.g., name, email address).`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/gong.ts b/src/data/agent-connectors/gong.ts new file mode 100644 index 000000000..b48ce75cf --- /dev/null +++ b/src/data/agent-connectors/gong.ts @@ -0,0 +1,720 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'gong_call_outcomes_list', + description: `List all call outcome options configured in the Gong account. Returns outcome definitions such as name and ID that can be applied to calls to indicate the result of a conversation.`, + params: [], + }, + { + name: 'gong_calls_create', + description: `Create (register) a new call in Gong. This adds a call record with metadata such as title, scheduled start time, participants, and direction. After creation, Gong returns a media upload URL that can be used to upload the call recording separately.`, + params: [ + { + name: 'actual_start', + type: 'string', + required: true, + description: `The actual date and time the call started (ISO 8601 format, e.g., 2024-06-15T14:00:00Z).`, + }, + { + name: 'call_provider_code', + type: 'string', + required: false, + description: `The telephony or conferencing system used (e.g., 'zoom', 'webex', 'ringcentral').`, + }, + { + name: 'client_unique_id', + type: 'string', + required: false, + description: `A unique identifier for this call in your system, used to prevent duplicate uploads.`, + }, + { + name: 'direction', + type: 'string', + required: false, + description: `Direction of the call: 'Inbound' or 'Outbound'.`, + }, + { + name: 'disposition', + type: 'string', + required: false, + description: `Outcome of the call (e.g., 'Connected', 'No Answer', 'Left Voicemail').`, + }, + { + name: 'duration', + type: 'integer', + required: false, + description: `Duration of the call in seconds.`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Primary language spoken on the call as a BCP-47 language tag (e.g., 'en-US', 'es-ES').`, + }, + { + name: 'parties', + type: 'array', + required: false, + description: `Array of participant objects. Each participant should include emailAddress, name, speakerId, and userId fields.`, + }, + { + name: 'purpose', + type: 'string', + required: false, + description: `Purpose or topic of the call (e.g., 'Discovery', 'Demo', 'QBR').`, + }, + { + name: 'scheduled_end', + type: 'string', + required: false, + description: `Scheduled end time for the call (ISO 8601 format).`, + }, + { + name: 'scheduled_start', + type: 'string', + required: false, + description: `Scheduled start time for the call (ISO 8601 format).`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Title or subject of the call.`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Workspace ID to associate this call with a specific Gong workspace.`, + }, + ], + }, + { + name: 'gong_calls_get', + description: `Retrieve extensive details for one or more Gong calls by their IDs. Returns enriched call data including participants, interaction stats, topics discussed, and CRM associations.`, + params: [ + { + name: 'call_ids', + type: 'array', + required: true, + description: `Array of Gong call IDs to retrieve extensive details for.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, + { + name: 'from_date_time', + type: 'string', + required: false, + description: `Start of the date-time range to filter calls (ISO 8601 format).`, + }, + { + name: 'to_date_time', + type: 'string', + required: false, + description: `End of the date-time range to filter calls (ISO 8601 format).`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to restrict the results to a specific Gong workspace.`, + }, + ], + }, + { + name: 'gong_calls_list', + description: `List Gong calls with optional filters for date range, workspace, and specific call IDs. Returns a page of calls with metadata such as title, duration, participants, and direction.`, + params: [ + { + name: 'call_ids', + type: 'string', + required: false, + description: `Comma-separated list of specific call IDs to retrieve.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, + { + name: 'from_date_time', + type: 'string', + required: false, + description: `Start of the date-time range for filtering calls (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).`, + }, + { + name: 'to_date_time', + type: 'string', + required: false, + description: `End of the date-time range for filtering calls (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to restrict results to a specific Gong workspace.`, + }, + ], + }, + { + name: 'gong_calls_transcript_get', + description: `Retrieve transcripts for one or more Gong calls by their IDs. Returns speaker-attributed, sentence-level transcript segments with timing offsets for each call.`, + params: [ + { + name: 'call_ids', + type: 'array', + required: true, + description: `Array of Gong call IDs whose transcripts to retrieve.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, + { + name: 'from_date_time', + type: 'string', + required: false, + description: `Start of the date-time range to filter calls (ISO 8601 format).`, + }, + { + name: 'to_date_time', + type: 'string', + required: false, + description: `End of the date-time range to filter calls (ISO 8601 format).`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to restrict the results to a specific Gong workspace.`, + }, + ], + }, + { + name: 'gong_coaching_get', + description: `Get coaching data from Gong, including coaching sessions and feedback provided by managers to their team members. Supports cursor-based pagination for large result sets.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, + ], + }, + { + name: 'gong_engage_digital_interactions_create', + description: `Add a digital interaction event (such as a web visit, content engagement, or other digital touchpoint) to a Gong Engage prospect's activity timeline.`, + params: [ + { + name: 'crm_account_id', + type: 'string', + required: false, + description: `The CRM account ID associated with this interaction.`, + }, + { + name: 'crm_contact_id', + type: 'string', + required: false, + description: `The CRM contact ID associated with this interaction.`, + }, + { + name: 'event_name', + type: 'string', + required: true, + description: `Name of the digital interaction event (e.g., 'Visited Pricing Page', 'Downloaded Whitepaper').`, + }, + { + name: 'event_timestamp', + type: 'string', + required: true, + description: `Timestamp when the digital interaction occurred (ISO 8601 format).`, + }, + { + name: 'prospect_email', + type: 'string', + required: false, + description: `Email address of the prospect who performed this digital interaction.`, + }, + { + name: 'url', + type: 'string', + required: false, + description: `URL associated with the digital interaction (e.g., the page visited or content accessed).`, + }, + ], + }, + { + name: 'gong_engage_email_activity_report', + description: `Report email engagement events (opens, clicks, bounces, unsubscribes) to Gong Engage so they appear in the activity timeline for a prospect.`, + params: [ + { + name: 'email_id', + type: 'string', + required: true, + description: `External identifier for the email message that was engaged with.`, + }, + { + name: 'event_timestamp', + type: 'string', + required: true, + description: `Timestamp when the engagement event occurred (ISO 8601 format).`, + }, + { + name: 'event_type', + type: 'string', + required: true, + description: `The type of email engagement event to report.`, + }, + { + name: 'link_url', + type: 'string', + required: false, + description: `For EMAIL_LINK_CLICKED events, the URL of the link that was clicked.`, + }, + { + name: 'prospect_email', + type: 'string', + required: true, + description: `Email address of the prospect who triggered this engagement event.`, + }, + ], + }, + { + name: 'gong_engage_flow_content_override', + description: `Override field placeholder values in a Gong Engage flow for specific prospects, allowing personalized content without modifying the base flow template.`, + params: [ + { + name: 'field_values', + type: 'object', + required: true, + description: `Key-value pairs of field placeholder names and their override values to substitute into the flow content.`, + }, + { + name: 'flow_instance_id', + type: 'string', + required: true, + description: `The unique ID of the flow instance to override content for. Retrieve from the Get Flows for Prospects endpoint.`, + }, + ], + }, + { + name: 'gong_engage_flow_folders_list', + description: `List all Gong Engage flow folders available to a user, including company folders, personal folders, and folders shared with the specified user.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, + { + name: 'flow_owner_email', + type: 'string', + required: true, + description: `Email address of the Gong user whose flow folders to retrieve. Returns company folders plus personal and shared folders for this user.`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to filter flow folders by a specific workspace.`, + }, + ], + }, + { + name: 'gong_engage_flows_list', + description: `List all Gong Engage flows available to a user, including company flows, personal flows, and flows shared with the specified user.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, + { + name: 'flow_owner_email', + type: 'string', + required: true, + description: `Email address of the Gong user whose flows to retrieve. Returns company flows plus personal and shared flows for this user.`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to filter flows by a specific workspace.`, + }, + ], + }, + { + name: 'gong_engage_prospects_assign', + description: `Assign up to 200 CRM prospects (contacts or leads) to a specific Gong Engage flow.`, + params: [ + { + name: 'crm_prospect_ids', + type: 'array', + required: true, + description: `Array of CRM prospect IDs (contacts or leads) to assign to the flow. Maximum 200 per request.`, + }, + { + name: 'flow_id', + type: 'string', + required: true, + description: `The unique ID of the Gong Engage flow to assign the prospects to.`, + }, + { + name: 'flow_instance_owner_email', + type: 'string', + required: true, + description: `Email address of the Gong user who will own the flow to-dos and be responsible for this flow instance.`, + }, + ], + }, + { + name: 'gong_engage_prospects_assign_cool_off_override', + description: `Assign CRM prospects to a Gong Engage flow while overriding the cool-off period restriction that would normally prevent re-enrollment.`, + params: [ + { + name: 'crm_prospect_ids', + type: 'array', + required: true, + description: `Array of CRM prospect IDs (contacts or leads) to assign to the flow, bypassing the cool-off period. Maximum 200 per request.`, + }, + { + name: 'flow_id', + type: 'string', + required: true, + description: `The unique ID of the Gong Engage flow to assign the prospects to.`, + }, + { + name: 'flow_instance_owner_email', + type: 'string', + required: false, + description: `Email address of the Gong user who will own the flow to-dos and be responsible for this flow instance.`, + }, + ], + }, + { + name: 'gong_engage_prospects_bulk_assign', + description: `Asynchronously bulk assign CRM prospects to a Gong Engage flow; returns an assignment ID that can be used to poll the operation status.`, + params: [ + { + name: 'crm_prospect_ids', + type: 'array', + required: true, + description: `Array of CRM prospect IDs (contacts or leads) to bulk assign to the flow.`, + }, + { + name: 'flow_id', + type: 'string', + required: true, + description: `The unique ID of the Gong Engage flow to assign the prospects to.`, + }, + { + name: 'flow_instance_owner_email', + type: 'string', + required: false, + description: `Email address of the Gong user who will own the flow to-dos and be responsible for this flow instance.`, + }, + ], + }, + { + name: 'gong_engage_prospects_bulk_assign_status', + description: `Retrieve the status and result of a previously submitted bulk prospect-to-flow assignment operation using its assignment ID.`, + params: [ + { + name: 'assignment_id', + type: 'string', + required: true, + description: `The unique ID of the bulk assignment operation to check, returned from the Bulk Assign Prospects to Flow request.`, + }, + ], + }, + { + name: 'gong_engage_prospects_flows_list', + description: `List all Gong Engage flows currently assigned to a given set of CRM prospects (contacts or leads).`, + params: [ + { + name: 'crm_prospect_ids', + type: 'array', + required: true, + description: `Array of CRM prospect IDs (contacts or leads) to look up flow assignments for. Maximum 200 prospects per request.`, + }, + ], + }, + { + name: 'gong_engage_prospects_unassign', + description: `Unassign CRM prospects (contacts or leads) from a specific Gong Engage flow using their CRM IDs, removing them from the flow sequence.`, + params: [ + { + name: 'crm_prospect_ids', + type: 'array', + required: true, + description: `Array of CRM prospect IDs (contacts or leads) to remove from the flow.`, + }, + { + name: 'flow_id', + type: 'string', + required: true, + description: `The unique ID of the Gong Engage flow to unassign the prospects from.`, + }, + ], + }, + { + name: 'gong_engage_prospects_unassign_by_instance', + description: `Unassign prospects from a Gong Engage flow using flow instance IDs rather than CRM prospect IDs.`, + params: [ + { + name: 'flow_instance_ids', + type: 'array', + required: true, + description: `Array of flow instance IDs identifying the specific prospect-flow enrollments to remove.`, + }, + ], + }, + { + name: 'gong_engage_task_complete', + description: `Mark a specific Gong Engage task as completed.`, + params: [ + { + name: 'completion_notes', + type: 'string', + required: false, + description: `Optional notes about how the task was completed.`, + }, + { + name: 'task_id', + type: 'string', + required: true, + description: `The unique ID of the Gong Engage task to mark as completed.`, + }, + ], + }, + { + name: 'gong_engage_task_skip', + description: `Skip a specific Gong Engage task, indicating it should not be performed for this prospect.`, + params: [ + { + name: 'skip_reason', + type: 'string', + required: false, + description: `Optional reason for skipping this task.`, + }, + { + name: 'task_id', + type: 'string', + required: true, + description: `The unique ID of the Gong Engage task to skip.`, + }, + ], + }, + { + name: 'gong_engage_tasks_list', + description: `List Gong Engage tasks for a specified user, such as call tasks, email tasks, LinkedIn tasks, and other follow-up actions.`, + params: [ + { + name: 'assignee_email', + type: 'string', + required: true, + description: `Email address of the Gong user whose tasks to retrieve.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, + { + name: 'from_date', + type: 'string', + required: false, + description: `Start date for filtering tasks (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).`, + }, + { + name: 'to_date', + type: 'string', + required: false, + description: `End date for filtering tasks (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, + }, + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to filter tasks by a specific workspace.`, + }, + ], + }, + { + name: 'gong_engage_users_list', + description: `List all active Gong users in the organization, useful for finding user emails to use as flow owners or assignees in Gong Engage.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, + { + name: 'include_avatars', + type: 'boolean', + required: false, + description: `Whether to include avatar URLs in the response.`, + }, + ], + }, + { + name: 'gong_engage_workspaces_list', + description: `List all company workspaces in Gong, which can be used to scope Gong Engage flows and tasks to specific business units or teams.`, + params: [], + }, + { + name: 'gong_library_folder_content_get', + description: `Get the content of a specific Gong library folder by its folder ID. Returns calls, clips, and other media items stored inside the folder.`, + params: [ + { + name: 'folder_id', + type: 'string', + required: true, + description: `The unique identifier of the library folder whose content should be retrieved.`, + }, + ], + }, + { + name: 'gong_library_folders_list', + description: `List all library folders in the Gong account. Returns folder names, IDs, and hierarchy information. Optionally filter by workspace to retrieve folders scoped to a specific business unit.`, + params: [ + { + name: 'workspace_id', + type: 'string', + required: false, + description: `Optional workspace ID to filter library folders belonging to a specific Gong workspace.`, + }, + ], + }, + { + name: 'gong_scorecards_list', + description: `List all scorecard settings configured in the Gong account. Returns scorecard definitions including name, questions, and associated criteria used for call review and coaching.`, + params: [], + }, + { + name: 'gong_stats_interaction', + description: `Get aggregated interaction statistics for Gong calls within a date range. Returns metrics such as talk ratio, longest monologue, patience, question rate, and interactivity for each participant. Optionally filter by specific call IDs.`, + params: [ + { + name: 'call_ids', + type: 'array', + required: false, + description: `Optional array of specific Gong call IDs to filter the statistics.`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, + { + name: 'from_date_time', + type: 'string', + required: true, + description: `Start of the date range for retrieving interaction statistics (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).`, + }, + { + name: 'to_date_time', + type: 'string', + required: true, + description: `End of the date range for retrieving interaction statistics (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, + }, + ], + }, + { + name: 'gong_stats_user_actions', + description: `Get user activity and scorecard statistics for Gong calls within a date range. Returns aggregated scorecard metrics and activity data per user. Optionally filter by specific user IDs.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, + { + name: 'from_date_time', + type: 'string', + required: true, + description: `Start of the date range for retrieving scorecard statistics (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).`, + }, + { + name: 'to_date_time', + type: 'string', + required: true, + description: `End of the date range for retrieving scorecard statistics (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, + }, + { + name: 'user_ids', + type: 'array', + required: false, + description: `Optional array of Gong user IDs to filter scorecard statistics for specific users.`, + }, + ], + }, + { + name: 'gong_trackers_list', + description: `List all tracker (keyword tracker) settings configured in the Gong account. Returns tracker definitions including name, tracked phrases, and associated categories used for monitoring conversation topics.`, + params: [], + }, + { + name: 'gong_users_get', + description: `Get detailed user information for specific Gong users using an extensive filter. Filter by user IDs or by a creation date range. Returns full user profiles including settings, roles, and manager details.`, + params: [ + { + name: 'created_from_date_time', + type: 'string', + required: false, + description: `Return users created on or after this date-time (ISO 8601 format, e.g., 2024-01-01T00:00:00Z).`, + }, + { + name: 'created_to_date_time', + type: 'string', + required: false, + description: `Return users created on or before this date-time (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, + { + name: 'user_ids', + type: 'array', + required: false, + description: `Array of Gong user IDs to retrieve detailed information for.`, + }, + ], + }, + { + name: 'gong_users_list', + description: `List all users in the Gong account. Returns user profiles including name, email, title, and manager information. Supports cursor-based pagination and optionally includes avatar URLs.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, + { + name: 'include_avatars', + type: 'boolean', + required: false, + description: `Whether to include avatar image URLs in the response.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/google_ads.ts b/src/data/agent-connectors/google_ads.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/google_ads.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/googlecalendar.ts b/src/data/agent-connectors/googlecalendar.ts new file mode 100644 index 000000000..a90b06e61 --- /dev/null +++ b/src/data/agent-connectors/googlecalendar.ts @@ -0,0 +1,460 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'googlecalendar_create_event', + description: `Create a new event in a connected Google Calendar account. Supports meeting links, recurrence, attendees, and more.`, + params: [ + { + name: 'attendees_emails', + type: 'array', + required: false, + description: `Attendee email addresses`, + }, + { + name: 'calendar_id', + type: 'string', + required: false, + description: `Calendar ID to create the event in`, + }, + { + name: 'create_meeting_room', + type: 'boolean', + required: false, + description: `Generate a Google Meet link for this event`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional event description`, + }, + { + name: 'event_duration_hour', + type: 'integer', + required: false, + description: `Duration of event in hours`, + }, + { + name: 'event_duration_minutes', + type: 'integer', + required: false, + description: `Duration of event in minutes`, + }, + { + name: 'event_type', + type: 'string', + required: false, + description: `Event type for display purposes`, + }, + { + name: 'guests_can_invite_others', + type: 'boolean', + required: false, + description: `Allow guests to invite others`, + }, + { + name: 'guests_can_modify', + type: 'boolean', + required: false, + description: `Allow guests to modify the event`, + }, + { + name: 'guests_can_see_other_guests', + type: 'boolean', + required: false, + description: `Allow guests to see each other`, + }, + { name: 'location', type: 'string', required: false, description: `Location of the event` }, + { + name: 'recurrence', + type: 'array', + required: false, + description: `Recurrence rules (iCalendar RRULE format)`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'send_updates', + type: 'boolean', + required: false, + description: `Send update notifications to attendees`, + }, + { + name: 'start_datetime', + type: 'string', + required: true, + description: `Event start time in RFC3339 format`, + }, + { name: 'summary', type: 'string', required: true, description: `Event title/summary` }, + { + name: 'timezone', + type: 'string', + required: false, + description: `Timezone for the event (IANA time zone identifier)`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'transparency', + type: 'string', + required: false, + description: `Calendar transparency (free/busy)`, + }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility of the event`, + }, + ], + }, + { + name: 'googlecalendar_delete_event', + description: `Delete an event from a connected Google Calendar account. Requires the calendar ID and event ID.`, + params: [ + { + name: 'calendar_id', + type: 'string', + required: false, + description: `The ID of the calendar from which the event should be deleted`, + }, + { + name: 'event_id', + type: 'string', + required: true, + description: `The ID of the calendar event to delete`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googlecalendar_get_event_by_id', + description: `Retrieve a specific calendar event by its ID using optional filtering and list parameters.`, + params: [ + { + name: 'calendar_id', + type: 'string', + required: false, + description: `The calendar ID to search in`, + }, + { + name: 'event_id', + type: 'string', + required: true, + description: `The unique identifier of the calendar event to fetch`, + }, + { + name: 'event_types', + type: 'array', + required: false, + description: `Filter by Google event types`, + }, + { name: 'query', type: 'string', required: false, description: `Free text search query` }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'show_deleted', + type: 'boolean', + required: false, + description: `Include deleted events in results`, + }, + { + name: 'single_events', + type: 'boolean', + required: false, + description: `Expand recurring events into instances`, + }, + { + name: 'time_max', + type: 'string', + required: false, + description: `Upper bound for event start time (RFC3339)`, + }, + { + name: 'time_min', + type: 'string', + required: false, + description: `Lower bound for event start time (RFC3339)`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'updated_min', + type: 'string', + required: false, + description: `Filter events updated after this time (RFC3339)`, + }, + ], + }, + { + name: 'googlecalendar_list_calendars', + description: `List all accessible Google Calendar calendars for the authenticated user. Supports filters and pagination.`, + params: [ + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of calendars to fetch`, + }, + { + name: 'min_access_role', + type: 'string', + required: false, + description: `Minimum access role to include in results`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token to retrieve the next page of results`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'show_deleted', + type: 'boolean', + required: false, + description: `Include deleted calendars in the list`, + }, + { + name: 'show_hidden', + type: 'boolean', + required: false, + description: `Include calendars that are hidden from the calendar list`, + }, + { + name: 'sync_token', + type: 'string', + required: false, + description: `Token to get updates since the last sync`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googlecalendar_list_events', + description: `List events from a connected Google Calendar account with filtering options. Requires a valid Google Calendar OAuth2 connection.`, + params: [ + { + name: 'calendar_id', + type: 'string', + required: false, + description: `Calendar ID to list events from`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of events to fetch`, + }, + { + name: 'order_by', + type: 'string', + required: false, + description: `Order of events in the result`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Page token for pagination`, + }, + { name: 'query', type: 'string', required: false, description: `Free text search query` }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'single_events', + type: 'boolean', + required: false, + description: `Expand recurring events into single events`, + }, + { + name: 'time_max', + type: 'string', + required: false, + description: `Upper bound for event start time (RFC3339 timestamp)`, + }, + { + name: 'time_min', + type: 'string', + required: false, + description: `Lower bound for event start time (RFC3339 timestamp)`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googlecalendar_update_event', + description: `Update an existing event in a connected Google Calendar account. Only provided fields will be updated. Supports updating time, attendees, location, meeting links, and more.`, + params: [ + { + name: 'attendees_emails', + type: 'array', + required: false, + description: `Attendee email addresses`, + }, + { + name: 'calendar_id', + type: 'string', + required: true, + description: `Calendar ID containing the event`, + }, + { + name: 'create_meeting_room', + type: 'boolean', + required: false, + description: `Generate a Google Meet link for this event`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional event description`, + }, + { + name: 'end_datetime', + type: 'string', + required: false, + description: `Event end time in RFC3339 format`, + }, + { + name: 'event_duration_hour', + type: 'integer', + required: false, + description: `Duration of event in hours`, + }, + { + name: 'event_duration_minutes', + type: 'integer', + required: false, + description: `Duration of event in minutes`, + }, + { + name: 'event_id', + type: 'string', + required: true, + description: `The ID of the calendar event to update`, + }, + { + name: 'event_type', + type: 'string', + required: false, + description: `Event type for display purposes`, + }, + { + name: 'guests_can_invite_others', + type: 'boolean', + required: false, + description: `Allow guests to invite others`, + }, + { + name: 'guests_can_modify', + type: 'boolean', + required: false, + description: `Allow guests to modify the event`, + }, + { + name: 'guests_can_see_other_guests', + type: 'boolean', + required: false, + description: `Allow guests to see each other`, + }, + { name: 'location', type: 'string', required: false, description: `Location of the event` }, + { + name: 'recurrence', + type: 'array', + required: false, + description: `Recurrence rules (iCalendar RRULE format)`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'send_updates', + type: 'boolean', + required: false, + description: `Send update notifications to attendees`, + }, + { + name: 'start_datetime', + type: 'string', + required: false, + description: `Event start time in RFC3339 format`, + }, + { name: 'summary', type: 'string', required: false, description: `Event title/summary` }, + { + name: 'timezone', + type: 'string', + required: false, + description: `Timezone for the event (IANA time zone identifier)`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'transparency', + type: 'string', + required: false, + description: `Calendar transparency (free/busy)`, + }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility of the event`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/googledocs.ts b/src/data/agent-connectors/googledocs.ts new file mode 100644 index 000000000..36d1137d6 --- /dev/null +++ b/src/data/agent-connectors/googledocs.ts @@ -0,0 +1,119 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'googledocs_create_document', + description: `Create a new blank Google Doc with an optional title. Returns the new document's ID and metadata.`, + params: [ + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { name: 'title', type: 'string', required: false, description: `Title of the new document` }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googledocs_list_documents', + description: `List all Google Docs documents in the user's Drive. Optionally search by document name. Returns document IDs, names, and metadata with pagination support.`, + params: [ + { + name: 'order_by', + type: 'string', + required: false, + description: `Sort order for results. Examples: modifiedTime desc, name asc, createdTime desc`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of documents to return per page (max 1000, default 100)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for retrieving the next page of results. Use the nextPageToken from a previous response.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Drive search query to filter documents. Defaults to all Google Docs. To search by name, use: mimeType = 'application/vnd.google-apps.document' and trashed = false and name contains 'report'`, + }, + ], + }, + { + name: 'googledocs_read_document', + description: `Read the complete content and structure of a Google Doc including text, formatting, tables, and metadata.`, + params: [ + { + name: 'document_id', + type: 'string', + required: true, + description: `The ID of the Google Doc to read`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'suggestions_view_mode', + type: 'string', + required: false, + description: `How suggestions are rendered in the response`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googledocs_update_document', + description: `Update the content of an existing Google Doc using batch update requests. Supports inserting and deleting text, formatting, tables, and other document elements.`, + params: [ + { + name: 'document_id', + type: 'string', + required: true, + description: `The ID of the Google Doc to update`, + }, + { + name: 'requests', + type: 'array', + required: true, + description: `Array of update requests to apply to the document`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'write_control', + type: 'object', + required: false, + description: `Optional write control for revision management`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/googledrive.ts b/src/data/agent-connectors/googledrive.ts new file mode 100644 index 000000000..00eef29dd --- /dev/null +++ b/src/data/agent-connectors/googledrive.ts @@ -0,0 +1,138 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'googledrive_get_file_metadata', + description: `Retrieve metadata for a specific file in Google Drive by its file ID. Returns name, MIME type, size, creation time, and more.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Fields to include in the response`, + }, + { + name: 'file_id', + type: 'string', + required: true, + description: `The ID of the file to retrieve metadata for`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'supports_all_drives', + type: 'boolean', + required: false, + description: `Support shared drives`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googledrive_search_content', + description: `Search inside the content of files stored in Google Drive using full-text search. Finds files where the body text matches the search term.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Fields to include in the response`, + }, + { + name: 'mime_type', + type: 'string', + required: false, + description: `Filter results by MIME type`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of files to return per page`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for the next page of results`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'search_term', + type: 'string', + required: true, + description: `Text to search for inside file contents`, + }, + { + name: 'supports_all_drives', + type: 'boolean', + required: false, + description: `Include shared drives in results`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googledrive_search_files', + description: `Search for files and folders in Google Drive using query filters like name, type, owner, and parent folder.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Fields to include in the response`, + }, + { name: 'order_by', type: 'string', required: false, description: `Sort order for results` }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of files to return per page`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for the next page of results`, + }, + { name: 'query', type: 'string', required: false, description: `Drive search query string` }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'supports_all_drives', + type: 'boolean', + required: false, + description: `Include shared drives in results`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/googleforms.ts b/src/data/agent-connectors/googleforms.ts new file mode 100644 index 000000000..1636e5a4c --- /dev/null +++ b/src/data/agent-connectors/googleforms.ts @@ -0,0 +1,77 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'googleforms_create_form', + description: `Create a new Google Form with a title and optional document title. Returns the new form's ID and metadata.`, + params: [ + { + name: 'document_title', + type: 'string', + required: false, + description: `The title of the document shown in Google Drive (defaults to the form title if not provided)`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `The title of the form shown to respondents`, + }, + ], + }, + { + name: 'googleforms_get_form', + description: `Get the structure and metadata of a Google Form including its title, description, and all questions.`, + params: [ + { + name: 'form_id', + type: 'string', + required: true, + description: `The ID of the Google Form to retrieve`, + }, + ], + }, + { + name: 'googleforms_get_response', + description: `Get a single response submitted to a Google Form by its response ID. Returns the respondent's answers for all questions.`, + params: [ + { name: 'form_id', type: 'string', required: true, description: `The ID of the Google Form` }, + { + name: 'response_id', + type: 'string', + required: true, + description: `The ID of the specific response to retrieve`, + }, + ], + }, + { + name: 'googleforms_list_responses', + description: `List all responses submitted to a Google Form. Returns response IDs, submission timestamps, and answer values for each respondent.`, + params: [ + { + name: 'filter', + type: 'string', + required: false, + description: `Filter responses by submission time. Format: timestamp > 2026-01-01T00:00:00Z`, + }, + { + name: 'form_id', + type: 'string', + required: true, + description: `The ID of the Google Form to list responses for`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of responses to return (max 5000)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for retrieving the next page of results`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/googlemeet.ts b/src/data/agent-connectors/googlemeet.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/googlemeet.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/googlesheets.ts b/src/data/agent-connectors/googlesheets.ts new file mode 100644 index 000000000..b455c37cb --- /dev/null +++ b/src/data/agent-connectors/googlesheets.ts @@ -0,0 +1,221 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'googlesheets_append_values', + description: `Append rows of data to a Google Sheets spreadsheet. Data is added after the last row with existing content in the specified range.`, + params: [ + { + name: 'insert_data_option', + type: 'string', + required: false, + description: `How the input data should be inserted. Options: INSERT_ROWS (inserts new rows), OVERWRITE (overwrites existing data). Default: OVERWRITE`, + }, + { + name: 'range', + type: 'string', + required: true, + description: `The A1 notation range to append data to (e.g. Sheet1!A1)`, + }, + { + name: 'spreadsheet_id', + type: 'string', + required: true, + description: `The ID of the spreadsheet to append data to`, + }, + { + name: 'value_input_option', + type: 'string', + required: false, + description: `How input data should be interpreted. Options: RAW (literal values), USER_ENTERED (as if typed in UI, parses formulas/dates). Default: USER_ENTERED`, + }, + { + name: 'values', + type: 'array', + required: true, + description: `2D array of values to append. Each inner array is a row.`, + }, + ], + }, + { + name: 'googlesheets_clear_values', + description: `Clear all values in a specified range of a Google Sheets spreadsheet. Formatting is preserved; only the cell values are cleared.`, + params: [ + { + name: 'range', + type: 'string', + required: true, + description: `The A1 notation range to clear (e.g. Sheet1!A1:D10)`, + }, + { + name: 'spreadsheet_id', + type: 'string', + required: true, + description: `The ID of the spreadsheet to clear values in`, + }, + ], + }, + { + name: 'googlesheets_create_spreadsheet', + description: `Create a new Google Sheets spreadsheet with an optional title and initial sheet configuration. Returns the new spreadsheet ID and metadata.`, + params: [ + { name: 'locale', type: 'string', required: false, description: `Locale of the spreadsheet` }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'sheets', + type: 'array', + required: false, + description: `Initial sheets to include in the spreadsheet`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone for the spreadsheet`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Title of the new spreadsheet`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googlesheets_get_values', + description: `Returns only the cell values from a specific range in a Google Sheet — no metadata, no formatting, just the data. For full spreadsheet metadata and formatting, use googlesheets_read_spreadsheet instead.`, + params: [ + { + name: 'major_dimension', + type: 'string', + required: false, + description: `Whether values are returned by rows or columns`, + }, + { + name: 'range', + type: 'string', + required: true, + description: `Cell range to read in A1 notation`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'spreadsheet_id', + type: 'string', + required: true, + description: `The ID of the Google Sheet`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'value_render_option', + type: 'string', + required: false, + description: `How values should be rendered in the response`, + }, + ], + }, + { + name: 'googlesheets_read_spreadsheet', + description: `Returns everything about a spreadsheet — including spreadsheet metadata, sheet properties, cell values, formatting, themes, and pixel sizes. If you only need cell values, use googlesheets_get_values instead.`, + params: [ + { + name: 'include_grid_data', + type: 'boolean', + required: false, + description: `Include cell data in the response`, + }, + { + name: 'ranges', + type: 'string', + required: false, + description: `Cell range to read in A1 notation`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'spreadsheet_id', + type: 'string', + required: true, + description: `The ID of the Google Sheet to read`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googlesheets_update_values', + description: `Update cell values in a specific range of a Google Sheet. Supports writing single cells or multiple rows and columns at once.`, + params: [ + { + name: 'include_values_in_response', + type: 'boolean', + required: false, + description: `Return the updated cell values in the response`, + }, + { + name: 'range', + type: 'string', + required: true, + description: `Cell range to update in A1 notation`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'spreadsheet_id', + type: 'string', + required: true, + description: `The ID of the Google Sheet to update`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'value_input_option', + type: 'string', + required: false, + description: `How input values should be interpreted`, + }, + { + name: 'values', + type: 'array', + required: true, + description: `2D array of values to write to the range`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/googleslides.ts b/src/data/agent-connectors/googleslides.ts new file mode 100644 index 000000000..00af55a58 --- /dev/null +++ b/src/data/agent-connectors/googleslides.ts @@ -0,0 +1,58 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'googleslides_create_presentation', + description: `Create a new Google Slides presentation with an optional title.`, + params: [ + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Title of the new presentation`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'googleslides_read_presentation', + description: `Read the complete structure and content of a Google Slides presentation including slides, text, images, shapes, and metadata.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Fields to include in the response`, + }, + { + name: 'presentation_id', + type: 'string', + required: true, + description: `The ID of the Google Slides presentation to read`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/granola.ts b/src/data/agent-connectors/granola.ts new file mode 100644 index 000000000..75d5ff6ac --- /dev/null +++ b/src/data/agent-connectors/granola.ts @@ -0,0 +1,58 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'granola_note_get', + description: `Retrieve a single Granola meeting note by its ID. Returns the full note including title, owner, calendar event details, attendees, folder memberships, and AI-generated summary. Optionally include the full transcript with speaker labels and timestamps.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Pass 'transcript' to include the full meeting transcript with speaker source and timestamps.`, + }, + { + name: 'note_id', + type: 'string', + required: true, + description: `The unique identifier of the note to retrieve. Format: not_XXXXXXXXXXXXXX.`, + }, + ], + }, + { + name: 'granola_notes_list', + description: `List all accessible meeting notes in the Granola workspace with pagination and date filtering. Returns note IDs, titles, owners, calendar event details, attendees, folder memberships, and AI-generated summaries. Only notes shared in workspace-wide folders are accessible.`, + params: [ + { + name: 'created_after', + type: 'string', + required: false, + description: `Filter notes created on or after this date. ISO 8601 format (e.g., 2024-01-01 or 2024-01-01T00:00:00Z).`, + }, + { + name: 'created_before', + type: 'string', + required: false, + description: `Filter notes created before this date. ISO 8601 format (e.g., 2024-12-31 or 2024-12-31T23:59:59Z).`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from the previous response to fetch the next page of results.`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of notes to return per page (1–30). Defaults to 10.`, + }, + { + name: 'updated_after', + type: 'string', + required: false, + description: `Filter notes updated after this date. ISO 8601 format (e.g., 2024-06-01 or 2024-06-01T00:00:00Z).`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/granolamcp.ts b/src/data/agent-connectors/granolamcp.ts new file mode 100644 index 000000000..5f0700190 --- /dev/null +++ b/src/data/agent-connectors/granolamcp.ts @@ -0,0 +1,142 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'granolamcp_get_meeting_transcript', + description: `Get the full transcript for a specific Granola meeting by ID. Returns only the verbatim transcript content, not summaries or notes. +Use this when the user needs exact quotes, specific wording, or wants to review what was literally said in a meeting. For summarized content or action items, use query_granola_meetings or list_meetings/get_meetings instead.`, + params: [ + { name: 'meeting_id', type: 'string', required: true, description: `Meeting UUID` }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for tool execution`, + }, + ], + }, + { + name: 'granolamcp_get_meetings', + description: `Get detailed meeting information for one or more Granola meetings by ID. Returns private notes, AI-generated summary, attendees, and metadata. +Use this when you already have specific meeting IDs (e.g. from list_meetings results). For open-ended questions about meeting content, use query_granola_meetings instead.`, + params: [ + { + name: 'meeting_ids', + type: 'array', + required: true, + description: `Array of meeting UUIDs (max 10)`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for tool execution`, + }, + ], + }, + { + name: 'granolamcp_list_meetings', + description: `List the user's Granola meeting notes within a time range. Returns meeting titles and metadata. + +IMPORTANT: For short-term questions about recent meeting details, prefer using query_granola_meetings instead. + +When to use: +- User asks to list their meetings +- User asks about action items, decisions, or summaries from meetings over a longer or specific date range +- User asks about content from their meeting transcripts +- User references 'Granola notes' or 'meeting notes' or 'transcripts' + +When NOT to use: +- User is asking about upcoming calendar events or scheduling +- User wants to create/modify calendar invites + +Use get_meetings to retrieve detailed meeting content after identifying relevant meetings.`, + params: [ + { + name: 'custom_end', + type: 'string', + required: false, + description: `ISO date for custom range end (required if time_range is 'custom')`, + }, + { + name: 'custom_start', + type: 'string', + required: false, + description: `ISO date for custom range start (required if time_range is 'custom')`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'time_range', + type: 'string', + required: false, + description: `Time range to query meetings from`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for tool execution`, + }, + ], + }, + { + name: 'granolamcp_query_granola_meetings', + description: `Query Granola about the user's meetings using natural language. Returns a tailored response with inline citation links in mark (e.g. [[0]](url)) that reference source meeting notes. + +IMPORTANT: The response includes numbered citation links to specific Granola meeting notes. These citations MUST be preserved in your response to the user — they provide transparency and allow the user to verify information by clicking through to the original notes. + +When to use: +- User asks about what was discussed, decided, or action-items from meetings +- User asks about follow-ups, todos, or commitments from recent meetings +- User references 'Granola notes' or 'meeting notes' + +When NOT to use: +- User is asking about calendar scheduling or upcoming events +- User explicitly asks for a specific meeting by ID (use get_meetings instead) + +Prioritize using query_granola_meetings over list_meetings/get_meetings for open-ended or natural language queries about meeting content.`, + params: [ + { + name: 'document_ids', + type: 'array', + required: false, + description: `Optional list of specific meeting IDs to limit context to`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `The query to run on Granola meeting notes`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for tool execution`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/harvestapi.ts b/src/data/agent-connectors/harvestapi.ts new file mode 100644 index 000000000..b90d28a23 --- /dev/null +++ b/src/data/agent-connectors/harvestapi.ts @@ -0,0 +1,763 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'harvestapi_bulk_scrape_profiles', + description: `Batch scrape multiple LinkedIn profiles in a single request using the HarvestAPI Apify scraper. Accepts a JSON array of LinkedIn profile URLs. Pricing: $4 per 1,000 profiles, $10 per 1,000 with email. Requires an Apify API token from https://console.apify.com/settings/integrations.`, + params: [ + { + name: 'apify_token', + type: 'string', + required: true, + description: `Your Apify API token from https://console.apify.com/settings/integrations.`, + }, + { + name: 'find_email', + type: 'boolean', + required: false, + description: `When true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4.`, + }, + { + name: 'profile_urls', + type: 'array', + required: true, + description: `JSON array of LinkedIn profile URLs to scrape in bulk.`, + }, + ], + }, + { + name: 'harvestapi_get_ad', + description: `Retrieve details of a specific LinkedIn ad by ad ID or URL.`, + params: [ + { + name: 'ad_id', + type: 'string', + required: false, + description: `The unique identifier of the LinkedIn Ad.`, + }, + { name: 'url', type: 'string', required: false, description: `The URL of the LinkedIn Ad.` }, + ], + }, + { + name: 'harvestapi_get_comment_reactions', + description: `Retrieve reactions on a specific LinkedIn comment by its URL.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { name: 'url', type: 'string', required: true, description: `URL of the LinkedIn comment.` }, + ], + }, + { + name: 'harvestapi_get_company', + description: `Retrieve the Harvest company (account) information for the authenticated user, including company name, base URI, plan type, clock format, currency, and weekly capacity settings.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `Your Harvest account ID, returned during OAuth as the Harvest-Account-Id header.`, + }, + ], + }, + { + name: 'harvestapi_get_company_posts', + description: `Retrieve posts published by a LinkedIn company page. Returns paginated post content, engagement metrics, and timestamps.`, + params: [ + { + name: 'company', + type: 'string', + required: false, + description: `LinkedIn company URL. Provide this or company_universal_name.`, + }, + { + name: 'company_universal_name', + type: 'string', + required: false, + description: `LinkedIn company universal name (slug from company URL).`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + ], + }, + { + name: 'harvestapi_get_group', + description: `Retrieve details of a LinkedIn group including name, description, member count, and activity by URL or group ID.`, + params: [ + { + name: 'group_id', + type: 'string', + required: false, + description: `LinkedIn group ID. Provide this or url.`, + }, + { + name: 'url', + type: 'string', + required: false, + description: `LinkedIn group URL. Provide this or group_id.`, + }, + ], + }, + { + name: 'harvestapi_get_post', + description: `Retrieve a specific LinkedIn post by its URL. Returns full post content, author details, and engagement metrics.`, + params: [ + { name: 'url', type: 'string', required: true, description: `The LinkedIn post URL.` }, + ], + }, + { + name: 'harvestapi_get_post_comments', + description: `Retrieve all comments on a LinkedIn post by its URL. Returns comment text, author details, and timestamps.`, + params: [ + { + name: 'post', + type: 'string', + required: true, + description: `The LinkedIn post URL to retrieve comments for.`, + }, + ], + }, + { + name: 'harvestapi_get_post_reactions', + description: `Retrieve all reactions on a LinkedIn post by its URL. Returns reaction type and reactor profile details.`, + params: [ + { + name: 'post', + type: 'string', + required: true, + description: `The LinkedIn post URL to retrieve reactions for.`, + }, + ], + }, + { + name: 'harvestapi_get_profile_comments', + description: `Retrieve comments made by a LinkedIn profile. Returns paginated results with comment content and timestamps.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Required for pages > 1. Use token from previous page response.`, + }, + { + name: 'posted_limit', + type: 'string', + required: false, + description: `Filter by maximum posted date. Options: '24h', 'week', 'month'.`, + }, + { + name: 'profile', + type: 'string', + required: false, + description: `URL of the LinkedIn profile.`, + }, + { + name: 'profile_id', + type: 'string', + required: false, + description: `Profile ID of the LinkedIn profile. Faster than URL lookup.`, + }, + ], + }, + { + name: 'harvestapi_get_profile_posts', + description: `Retrieve posts made by a specific LinkedIn profile. Returns paginated post content, engagement data, and timestamps.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'profile', + type: 'string', + required: false, + description: `LinkedIn profile URL. Provide this or profile_id.`, + }, + { + name: 'profile_id', + type: 'string', + required: false, + description: `LinkedIn profile ID. Provide this or profile.`, + }, + { + name: 'profile_public_identifier', + type: 'string', + required: false, + description: `LinkedIn public identifier (slug from profile URL).`, + }, + ], + }, + { + name: 'harvestapi_get_profile_reactions', + description: `Retrieve reactions made by a LinkedIn profile. Returns paginated results.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Required for pages > 1. Use token from previous page response.`, + }, + { + name: 'profile', + type: 'string', + required: false, + description: `URL of the LinkedIn profile.`, + }, + { + name: 'profile_id', + type: 'string', + required: false, + description: `Profile ID of the LinkedIn profile. Faster than URL lookup.`, + }, + ], + }, + { + name: 'harvestapi_scrape_company', + description: `Scrape a LinkedIn company page for overview, headcount, employee count range, follower count, locations, specialities, industries, and funding data. Provide one of: company_url, universal_name, or search (company name).`, + params: [ + { + name: 'company_url', + type: 'string', + required: false, + description: `Full LinkedIn company page URL. Provide this, universal_name, or search.`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Company name to look up on LinkedIn. Returns the most relevant result. Provide this, company_url, or universal_name.`, + }, + { + name: 'universal_name', + type: 'string', + required: false, + description: `Company universal name from the LinkedIn URL slug. Provide this, company_url, or search.`, + }, + ], + }, + { + name: 'harvestapi_scrape_job', + description: `Retrieve full job listing details from LinkedIn by job URL or job ID. Returns title, company, description, requirements, salary, location, workplace type, employment type, applicant count, and application details. Provide one of: job_url or job_id.`, + params: [ + { + name: 'job_id', + type: 'string', + required: false, + description: `LinkedIn numeric job ID from the posting URL. Provide this or job_url.`, + }, + { + name: 'job_url', + type: 'string', + required: false, + description: `Full LinkedIn job posting URL. Provide this or job_id.`, + }, + ], + }, + { + name: 'harvestapi_scrape_profile', + description: `Scrape a LinkedIn profile by URL or public identifier, returning contact details, employment history, education, skills, and more. Provide either profile_url or public_identifier. Use main=true for a simplified profile at fewer credits. Optionally find email with find_email=true (costs extra credits). Processing time ~2.6s (main) or ~4.9s (full).`, + params: [ + { + name: 'find_email', + type: 'boolean', + required: false, + description: `When true, attempts to find the profile's email address via SMTP verification. Costs extra credits.`, + }, + { + name: 'include_about_profile', + type: 'boolean', + required: false, + description: `When true, includes the 'About' section of the LinkedIn profile in the response.`, + }, + { + name: 'main', + type: 'boolean', + required: false, + description: `When true, returns a simplified profile with fewer fields. Charges fewer credits than a full scrape.`, + }, + { + name: 'profile_id', + type: 'string', + required: false, + description: `LinkedIn numeric profile ID. Can be used instead of profile_url or public_identifier.`, + }, + { + name: 'profile_url', + type: 'string', + required: false, + description: `Full LinkedIn profile URL. Provide this or public_identifier or profile_id.`, + }, + { + name: 'public_identifier', + type: 'string', + required: false, + description: `LinkedIn profile public identifier (the slug in the URL). Provide this or profile_url or profile_id.`, + }, + { + name: 'skip_smtp', + type: 'boolean', + required: false, + description: `When true, skips SMTP verification when finding email. Faster but less accurate.`, + }, + ], + }, + { + name: 'harvestapi_search_ads', + description: `Search the LinkedIn Ad Library for ads by keyword, advertiser, country, and date range. Useful for competitive research and ad intelligence.`, + params: [ + { + name: 'account_owner', + type: 'string', + required: false, + description: `LinkedIn company URL of the advertiser.`, + }, + { + name: 'countries', + type: 'string', + required: false, + description: `Country codes to filter ads by, comma-separated. e.g. 'US,GB'.`, + }, + { + name: 'date_option', + type: 'string', + required: false, + description: `Predefined date filter option.`, + }, + { + name: 'enddate', + type: 'string', + required: false, + description: `End date for ad search in YYYY-MM-DD format.`, + }, + { + name: 'keyword', + type: 'string', + required: false, + description: `Keyword to search for in ads.`, + }, + { + name: 'startdate', + type: 'string', + required: false, + description: `Start date for ad search in YYYY-MM-DD format.`, + }, + ], + }, + { + name: 'harvestapi_search_companies', + description: `Search LinkedIn for companies using keyword, location, and company size filters. Returns paginated results with company name, description, and LinkedIn URL.`, + params: [ + { + name: 'company_size', + type: 'string', + required: false, + description: `Company size range filter e.g. '1-10', '11-50', '51-200'.`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Location to filter companies by.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Keyword to search for companies.`, + }, + ], + }, + { + name: 'harvestapi_search_geo', + description: `Search for LinkedIn geo IDs by location name. Returns matching geographic location IDs used for filtering people and job searches by location.`, + params: [ + { + name: 'search', + type: 'string', + required: true, + description: `Location name to search for geo IDs.`, + }, + ], + }, + { + name: 'harvestapi_search_groups', + description: `Search LinkedIn groups by keyword. Returns paginated results with group name, description, and member count.`, + params: [ + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'search', + type: 'string', + required: true, + description: `Keyword to search for groups.`, + }, + ], + }, + { + name: 'harvestapi_search_jobs', + description: `Search LinkedIn job listings by keyword, location, company, workplace type, employment type, experience level, and salary. Returns paginated job listings with title, company, location, and LinkedIn URL.`, + params: [ + { + name: 'company_id', + type: 'string', + required: false, + description: `Filter by LinkedIn company ID(s), comma-separated.`, + }, + { + name: 'easy_apply', + type: 'boolean', + required: false, + description: `When true, filter to jobs with LinkedIn Easy Apply only.`, + }, + { + name: 'employment_type', + type: 'string', + required: false, + description: `Filter by employment type. Accepted values: full-time, part-time, contract, temporary, internship (comma-separated).`, + }, + { + name: 'experience_level', + type: 'string', + required: false, + description: `Filter by experience level. Accepted values: internship, entry, associate, mid-senior, director, executive (comma-separated).`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Filter by job location text (city, country, or region).`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'posted_limit', + type: 'string', + required: false, + description: `Filter by recency of posting. Accepted values: 24h, week, month.`, + }, + { + name: 'salary', + type: 'string', + required: false, + description: `Minimum salary filter. Accepted values: 40k+, 60k+, 80k+, 100k+, 120k+, 140k+, 160k+, 180k+, 200k+.`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Job title or keyword to search for.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Sort results by relevance or date.`, + }, + { + name: 'workplace_type', + type: 'string', + required: false, + description: `Filter by workplace type. Accepted values: office, hybrid, remote (comma-separated).`, + }, + ], + }, + { + name: 'harvestapi_search_leads', + description: `Search LinkedIn for leads using advanced filters including company, job title, location, seniority, industry, and experience. Supports LinkedIn Sales Navigator URLs.`, + params: [ + { + name: 'company_headcount', + type: 'string', + required: false, + description: `Filter by company size e.g. '1-10', '11-50', '51-200'.`, + }, + { + name: 'current_companies', + type: 'string', + required: false, + description: `Filter by current company IDs or URLs (max 50, comma-separated).`, + }, + { + name: 'current_job_titles', + type: 'string', + required: false, + description: `Filter by current job titles (max 70, comma-separated).`, + }, + { + name: 'first_names', + type: 'string', + required: false, + description: `Filter by first names (max 70, comma-separated).`, + }, + { + name: 'geo_ids', + type: 'string', + required: false, + description: `LinkedIn Geo IDs for location filtering. Overrides locations.`, + }, + { + name: 'industry_ids', + type: 'string', + required: false, + description: `Filter by industry IDs (max 70, comma-separated).`, + }, + { + name: 'last_names', + type: 'string', + required: false, + description: `Filter by last names (max 70, comma-separated).`, + }, + { + name: 'locations', + type: 'string', + required: false, + description: `Location text filter (max 70, comma-separated).`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1, max: 100).`, + }, + { + name: 'past_companies', + type: 'string', + required: false, + description: `Filter by past company IDs or URLs (max 50, comma-separated).`, + }, + { + name: 'past_job_titles', + type: 'string', + required: false, + description: `Filter by past job titles (max 70, comma-separated).`, + }, + { + name: 'recently_changed_jobs', + type: 'boolean', + required: false, + description: `Filter for people who recently changed jobs.`, + }, + { + name: 'sales_nav_url', + type: 'string', + required: false, + description: `LinkedIn Sales Navigator URL to use as search override.`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Search query supporting LinkedIn operators.`, + }, + { + name: 'seniority_level_ids', + type: 'string', + required: false, + description: `Filter by seniority level IDs (comma-separated).`, + }, + { + name: 'years_of_experience_ids', + type: 'string', + required: false, + description: `Filter by years of total experience IDs.`, + }, + ], + }, + { + name: 'harvestapi_search_people', + description: `Search LinkedIn for people using filters such as job title, current company, location, and industry. Uses LinkedIn Lead Search for unmasked results. Returns paginated profiles with name, title, location, and LinkedIn URL. All parameters are optional and comma-separated for multiple values.`, + params: [ + { + name: 'company_headcount', + type: 'string', + required: false, + description: `Company headcount range filter, comma-separated (e.g. '1-10,11-50').`, + }, + { + name: 'current_companies', + type: 'string', + required: false, + description: `Current company IDs or LinkedIn URLs, comma-separated (max 50).`, + }, + { + name: 'current_job_titles', + type: 'string', + required: false, + description: `Current job titles, comma-separated (max 70). e.g. 'CTO,VP Engineering'`, + }, + { + name: 'first_names', + type: 'string', + required: false, + description: `First names to filter by, comma-separated (max 70).`, + }, + { + name: 'industry_ids', + type: 'string', + required: false, + description: `LinkedIn industry IDs, comma-separated (max 70).`, + }, + { + name: 'last_names', + type: 'string', + required: false, + description: `Last names to filter by, comma-separated (max 70).`, + }, + { + name: 'locations', + type: 'string', + required: false, + description: `Location text, comma-separated (max 70). e.g. 'San Francisco,New York'`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1, max: 100).`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Fuzzy keyword search across name, title, and company. Supports LinkedIn search operators.`, + }, + { + name: 'seniority_level_ids', + type: 'string', + required: false, + description: `LinkedIn seniority level IDs, comma-separated.`, + }, + ], + }, + { + name: 'harvestapi_search_posts', + description: `Search LinkedIn posts by keyword, company, profile, or group. Supports filtering by post age and sorting. Returns paginated results with post content, author, and engagement data.`, + params: [ + { + name: 'authors_company', + type: 'string', + required: false, + description: `Filter posts by the author's current company URL.`, + }, + { + name: 'company', + type: 'string', + required: false, + description: `LinkedIn company URL to filter posts by.`, + }, + { + name: 'company_id', + type: 'string', + required: false, + description: `LinkedIn company ID to filter posts by.`, + }, + { + name: 'group', + type: 'string', + required: false, + description: `LinkedIn group URL to filter posts by.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'posted_limit', + type: 'string', + required: false, + description: `Filter by post age. e.g. 'past-24h', 'past-week', 'past-month'.`, + }, + { + name: 'profile', + type: 'string', + required: false, + description: `LinkedIn profile URL to filter posts by.`, + }, + { + name: 'profile_id', + type: 'string', + required: false, + description: `LinkedIn profile ID to filter posts by.`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Keyword to search for in posts.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Sort results by 'relevance' or 'date'.`, + }, + ], + }, + { + name: 'harvestapi_search_services', + description: `Search LinkedIn profiles offering services by name, location, or geo ID. Returns paginated results.`, + params: [ + { + name: 'geo_id', + type: 'string', + required: false, + description: `Filter by LinkedIn Geo ID. Overrides the location parameter.`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Filter by location text.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, + { + name: 'search', + type: 'string', + required: true, + description: `Search profiles by service name or keyword.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/hubspot.ts b/src/data/agent-connectors/hubspot.ts new file mode 100644 index 000000000..7de4fee12 --- /dev/null +++ b/src/data/agent-connectors/hubspot.ts @@ -0,0 +1,355 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + 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: '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: '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: 'domain', type: 'string', required: false, description: `Company website domain` }, + { + name: 'industry', + type: 'string', + required: false, + description: `Industry type of the company`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Company name (required, serves as primary identifier)`, + }, + { + 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` }, + ], + }, + { + 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: '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: 'company', + type: 'string', + required: false, + description: `Company name where the contact works`, + }, + { + name: 'email', + type: 'string', + required: true, + description: `Primary email address for the contact (required, serves as unique identifier)`, + }, + { + 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_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: 'hubspot_contact_update', + description: `Update an existing contact in HubSpot CRM by contact ID. Allows updating contact properties like name, email, company, phone, and lifecycle stage.`, + params: [ + { + name: 'contact_id', + type: 'string', + required: true, + description: `ID of the contact to update`, + }, + { + name: 'props', + type: 'object', + required: false, + description: `Object containing properties like first name, last name, email, company, phone, and job title to update all these should be provided inside props as a JSON object, this is required`, + }, + ], + }, + { + 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: '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: 'hubspot_deal_create', + description: `Create a new deal in HubSpot CRM. Requires dealname, amount, and dealstage. Supports additional properties like pipeline, close date, and deal type.`, + params: [ + { + name: 'amount', + type: 'number', + required: true, + description: `Deal amount/value (required)`, + }, + { + name: 'closedate', + type: 'string', + required: false, + description: `Expected close date (YYYY-MM-DD format)`, + }, + { + 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: '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: 'pipeline', type: 'string', required: false, description: `Deal pipeline` }, + ], + }, + { + name: 'hubspot_deal_update', + description: `Update an existing deal in HubSpot CRM by deal ID. Allows updating deal properties like name, amount, stage, pipeline, close date, and priority.`, + params: [ + { name: 'deal_id', type: 'string', required: true, description: `ID of the deal to update` }, + { + name: 'good_deal', + type: 'boolean', + required: false, + description: `Boolean flag indicating if this is a good deal`, + }, + { + name: 'properties', + type: 'object', + required: true, + description: `Object containing deal properties to update`, + }, + ], + }, + { + 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`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/intercom.ts b/src/data/agent-connectors/intercom.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/intercom.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/jiminny.ts b/src/data/agent-connectors/jiminny.ts new file mode 100644 index 000000000..8cdd7cc3b --- /dev/null +++ b/src/data/agent-connectors/jiminny.ts @@ -0,0 +1,337 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'jiminny_action_items_get', + description: `Retrieve the AI-generated action items for a given activity, returning a list of follow-up tasks identified from the conversation.`, + params: [ + { + name: 'activityId', + type: 'string', + required: true, + description: `The UUID of the activity to retrieve action items for.`, + }, + ], + }, + { + name: 'jiminny_activities_list', + description: `Retrieve completed and processed call and meeting activities with optional date range, update date range, status, and page filters. The time range must be less than six months and you must provide either fromDate/toDate or updatedFrom.`, + params: [ + { + name: 'fromDate', + type: 'string', + required: false, + description: `Filter activities that occurred after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate.`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number to return (page size is 500 activities). Default is 1.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter activities by status: in-progress, completed (for calls/meetings), received, sent, delivered (for SMS/Voice dialer).`, + }, + { + name: 'toDate', + type: 'string', + required: false, + description: `Filter activities that occurred before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date.`, + }, + { + name: 'updatedFrom', + type: 'string', + required: false, + description: `Filter activities updated after this UTC date-time (e.g. 2021-11-01 00:00:00). Must be before updatedTo.`, + }, + { + name: 'updatedTo', + type: 'string', + required: false, + description: `Filter activities updated before this UTC date-time. Cannot be a future date. Defaults to current time.`, + }, + ], + }, + { + name: 'jiminny_activity_upload', + description: `Upload a call or meeting recording file to Jiminny for transcription and analysis, returning the new activity ID on success.`, + params: [ + { + name: 'accountId', + type: 'string', + required: false, + description: `An optional CRM Account ID to associate with this activity (max 100 characters).`, + }, + { + name: 'completedAt', + type: 'string', + required: false, + description: `The date the activity was completed (format: YYYY-MM-DD).`, + }, + { + name: 'externalId', + type: 'string', + required: false, + description: `An optional external identifier for this activity (max 191 characters). Must be unique per host user.`, + }, + { + name: 'hostUserEmail', + type: 'string', + required: true, + description: `The email address of the host user. Must belong to the authenticated team.`, + }, + { + name: 'language', + type: 'string', + required: true, + description: `The language locale of the activity (e.g. en_GB, en_US, fr_FR).`, + }, + { + name: 'leadId', + type: 'string', + required: false, + description: `An optional CRM Lead ID to associate with this activity (max 180 characters).`, + }, + { + name: 'notifyForUploadCompletionByEmail', + type: 'boolean', + required: false, + description: `Whether to notify the host user via email when the upload and processing is complete.`, + }, + { + name: 'opportunityId', + type: 'string', + required: false, + description: `An optional CRM Opportunity ID to associate with this activity (max 100 characters).`, + }, + { + name: 'skipFullAnalysis', + type: 'boolean', + required: false, + description: `Whether to skip the full AI analysis of the uploaded activity.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `The title of the activity (max 250 characters).`, + }, + ], + }, + { + name: 'jiminny_automated_call_scoring_list', + description: `Retrieve automated call scoring records with optional filters by user and date range, returning scores, activity types, and user details.`, + params: [ + { + name: 'fromDate', + type: 'string', + required: false, + description: `Filter scoring records created after this UTC date-time (e.g. 2021-10-01 00:00:00).`, + }, + { + name: 'toDate', + type: 'string', + required: false, + description: `Filter scoring records created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date.`, + }, + { + name: 'userId', + type: 'string', + required: false, + description: `Optional UUID of the user to filter automated call scoring results by.`, + }, + ], + }, + { + name: 'jiminny_coaching_feedback_list', + description: `Retrieve bulk coaching feedback records within a required date range, optionally filtered by coach or coachee, returning scores, activity IDs, and timestamps.`, + params: [ + { + name: 'coachId', + type: 'string', + required: false, + description: `Optional UUID of the coach (manager) to filter coaching feedback by.`, + }, + { + name: 'coacheeId', + type: 'string', + required: false, + description: `Optional UUID of the coachee (sales rep) to filter coaching feedback by.`, + }, + { + name: 'fromDate', + type: 'string', + required: true, + description: `Filter coaching feedback records created after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate.`, + }, + { + name: 'toDate', + type: 'string', + required: true, + description: `Filter coaching feedback records created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date.`, + }, + ], + }, + { + name: 'jiminny_comments_list', + description: `Retrieve activity comment records with optional filters by user and date range, returning comment IDs, activity IDs, user IDs, and creation timestamps.`, + params: [ + { + name: 'fromDate', + type: 'string', + required: false, + description: `Filter comments created after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate.`, + }, + { + name: 'toDate', + type: 'string', + required: false, + description: `Filter comments created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date.`, + }, + { + name: 'userId', + type: 'string', + required: false, + description: `Optional UUID of the user to filter comments by.`, + }, + ], + }, + { + name: 'jiminny_listens_list', + description: `Retrieve listened (played) activity records within a date range, optionally filtered by user, showing who listened to which activities and when.`, + params: [ + { + name: 'fromDate', + type: 'string', + required: true, + description: `Filter listened activities that occurred after this UTC date-time (e.g. 2021-10-01 00:00:00). Must be before toDate.`, + }, + { + name: 'toDate', + type: 'string', + required: true, + description: `Filter listened activities that occurred before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date.`, + }, + { + name: 'userId', + type: 'string', + required: false, + description: `Optional UUID of the user to filter listened activities by.`, + }, + ], + }, + { + name: 'jiminny_organization_get', + description: `Return the current authenticated Organization details including name, CRM integration, calendar type, and address.`, + params: [], + }, + { + name: 'jiminny_questions_get', + description: `Retrieve questions detected in a specific activity, including their timestamps, speaker participant IDs, text, and whether they are engaging or insightful.`, + params: [ + { + name: 'activityId', + type: 'string', + required: true, + description: `The UUID of the activity to retrieve detected questions for.`, + }, + ], + }, + { + name: 'jiminny_summary_get', + description: `Get the AI-generated conversation summary for a given activity, returning the summary content text.`, + params: [ + { + name: 'activityId', + type: 'string', + required: true, + description: `The UUID of the activity to retrieve the summary for.`, + }, + ], + }, + { + name: 'jiminny_test_tool_xyz', + description: `Test.`, + params: [], + }, + { + name: 'jiminny_topic_triggers_list', + description: `Retrieve all topic triggers configured for the authenticated team, returned as a hierarchy of themes, topics, and trigger keywords.`, + params: [], + }, + { + name: 'jiminny_topic_triggers_matched_get', + description: `Retrieve all topic triggers that were matched within a specific activity, including the theme, topic, trigger keyword, timestamps, and matched text excerpt.`, + params: [ + { + name: 'activityId', + type: 'string', + required: true, + description: `The UUID of the activity to retrieve matched topic triggers for.`, + }, + ], + }, + { + name: 'jiminny_transcript_get', + description: `Retrieve transcription segments for a given activity, returning an array of timed speech segments with speaker participant IDs.`, + params: [ + { + name: 'activityId', + type: 'string', + required: true, + description: `The UUID of the activity to retrieve the transcription for.`, + }, + ], + }, + { + name: 'jiminny_users_list', + description: `Retrieve all users belonging to the authenticated team, including their IDs, names, emails, statuses, team names, CRM IDs, and roles.`, + params: [], + }, + { + name: 'jiminny_webhook_create', + description: `Create a webhook subscription that sends event payloads to a destination URL when a specified trigger occurs in Jiminny.`, + params: [ + { + name: 'external_id', + type: 'string', + required: false, + description: `An optional external identifier for the webhook (max 191 characters).`, + }, + { + name: 'trigger', + type: 'string', + required: true, + description: `The event trigger for the webhook. One of: coaching_feedback_completed, conversation_shared, conversation_exported, conversation_processed, conversation_played.`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The destination URL to receive the webhook payload (max 191 characters).`, + }, + ], + }, + { + name: 'jiminny_webhook_delete', + description: `Delete an existing webhook subscription by its UUID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `UUID of the webhook to delete.` }, + ], + }, + { + name: 'jiminny_webhook_sample_get', + description: `Retrieve a sample webhook payload for a given trigger event type to understand the data structure that will be sent.`, + params: [ + { + name: 'trigger', + type: 'string', + required: true, + description: `The webhook trigger event type to get a sample payload for.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/jira.ts b/src/data/agent-connectors/jira.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/jira.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/linear.ts b/src/data/agent-connectors/linear.ts new file mode 100644 index 000000000..6586f0b29 --- /dev/null +++ b/src/data/agent-connectors/linear.ts @@ -0,0 +1,163 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'linear_graphql_query', + description: `Execute a custom GraphQL query or mutation against the Linear API. Allows running any valid GraphQL operation with variables support for advanced use cases.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `The GraphQL query or mutation to execute`, + }, + { + name: 'variables', + type: 'object', + required: false, + description: `Variables to pass to the GraphQL query`, + }, + ], + }, + { + name: 'linear_issue_create', + description: `Create a new issue in Linear using the issueCreate mutation. Requires a team ID and title at minimum.`, + params: [ + { + name: 'assigneeId', + type: 'string', + required: false, + description: `ID of the user to assign the issue to`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Description of the issue`, + }, + { + name: 'estimate', + type: 'string', + required: false, + description: `Story point estimate for the issue`, + }, + { + name: 'labelIds', + type: 'array', + required: false, + description: `Array of label IDs to apply to the issue`, + }, + { + name: 'priority', + type: 'string', + required: false, + description: `Priority level of the issue (1-4, where 1 is urgent)`, + }, + { + name: 'projectId', + type: 'string', + required: false, + description: `ID of the project to associate the issue with`, + }, + { + name: 'stateId', + type: 'string', + required: false, + description: `ID of the workflow state to set`, + }, + { + name: 'teamId', + type: 'string', + required: true, + description: `ID of the team to create the issue in`, + }, + { name: 'title', type: 'string', required: true, description: `Title of the issue` }, + ], + }, + { + name: 'linear_issue_update', + description: `Update an existing issue in Linear. You can update title, description, priority, state, and assignee.`, + params: [ + { + name: 'assigneeId', + type: 'string', + required: false, + description: `ID of the user to assign the issue to`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `New description for the issue`, + }, + { name: 'issueId', type: 'string', required: true, description: `ID of the issue to update` }, + { + name: 'priority', + type: 'string', + required: false, + description: `Priority level of the issue (1-4, where 1 is urgent)`, + }, + { + name: 'stateId', + type: 'string', + required: false, + description: `ID of the workflow state to set`, + }, + { name: 'title', type: 'string', required: false, description: `New title for the issue` }, + ], + }, + { + name: 'linear_issues_list', + description: `List issues in Linear using the issues query with simple filtering and pagination support.`, + params: [ + { + name: 'after', + type: 'string', + required: false, + description: `Cursor for pagination (returns issues after this cursor)`, + }, + { + name: 'assignee', + type: 'string', + required: false, + description: `Filter by assignee email (e.g., 'user@example.com')`, + }, + { + name: 'before', + type: 'string', + required: false, + description: `Cursor for pagination (returns issues before this cursor)`, + }, + { + name: 'first', + type: 'integer', + required: false, + description: `Number of issues to return (pagination)`, + }, + { + name: 'labels', + type: 'array', + required: false, + description: `Filter by label names (array of strings)`, + }, + { + name: 'priority', + type: 'string', + required: false, + description: `Filter by priority level (1=Urgent, 2=High, 3=Medium, 4=Low)`, + }, + { + name: 'project', + type: 'string', + required: false, + description: `Filter by project name (e.g., 'Q4 Goals')`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter by state name (e.g., 'In Progress', 'Done')`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/linkedin.ts b/src/data/agent-connectors/linkedin.ts new file mode 100644 index 000000000..1869762ea --- /dev/null +++ b/src/data/agent-connectors/linkedin.ts @@ -0,0 +1,939 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'linkedin_ad_account_create', + description: `Create a new LinkedIn ad account for running advertising campaigns.`, + params: [ + { + name: 'currency', + type: 'string', + required: true, + description: `The currency code for the ad account (e.g. 'USD', 'EUR').`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `The name of the new ad account.`, + }, + { + name: 'reference', + type: 'string', + required: true, + description: `Reference URN for the account owner (e.g. organization URN 'urn:li:organization:12345').`, + }, + ], + }, + { + name: 'linkedin_ad_account_get', + description: `Get a LinkedIn ad account by its ID.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to retrieve.`, + }, + ], + }, + { + name: 'linkedin_ad_account_update', + description: `Partially update a LinkedIn ad account's name or status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `New name for the ad account.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `New status for the ad account (e.g. ACTIVE, CANCELED).`, + }, + ], + }, + { + name: 'linkedin_ad_account_users_list', + description: `List all users who have access to a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to list users for.`, + }, + ], + }, + { + name: 'linkedin_ad_accounts_search', + description: `Search LinkedIn ad accounts by status or name.`, + params: [ + { + name: 'name', + type: 'string', + required: false, + description: `Filter by account name (partial match).`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter by account status. One of: ACTIVE, CANCELED, DRAFT.`, + }, + ], + }, + { + name: 'linkedin_ad_analytics_get', + description: `Get campaign analytics data for a LinkedIn ad campaign including impressions, clicks, and spend.`, + params: [ + { + name: 'campaigns', + type: 'string', + required: true, + description: `The campaign URN to retrieve analytics for (e.g. 'urn:li:sponsoredCampaign:712345678').`, + }, + { + name: 'date_range_end', + type: 'string', + required: true, + description: `End date for the analytics period (YYYY-MM-DD format).`, + }, + { + name: 'date_range_start', + type: 'string', + required: true, + description: `Start date for the analytics period (YYYY-MM-DD format).`, + }, + { + name: 'time_granularity', + type: 'string', + required: true, + description: `Granularity of the analytics data. One of: DAILY, MONTHLY, ALL.`, + }, + ], + }, + { + name: 'linkedin_asset_get', + description: `Get the status and details of an uploaded LinkedIn media asset.`, + params: [ + { + name: 'asset_id', + type: 'string', + required: true, + description: `The ID of the media asset to retrieve.`, + }, + ], + }, + { + name: 'linkedin_campaign_create', + description: `Create a new ad campaign within a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to create the campaign in.`, + }, + { + name: 'campaign_group_id', + type: 'string', + required: true, + description: `The ID of the campaign group this campaign belongs to.`, + }, + { + name: 'cost_type', + type: 'string', + required: true, + description: `The cost type for the campaign (e.g. 'CPM', 'CPC', 'CPV').`, + }, + { + name: 'daily_budget_amount', + type: 'string', + required: true, + description: `The daily budget amount as a decimal string (e.g. '100.00').`, + }, + { + name: 'daily_budget_currency', + type: 'string', + required: true, + description: `The currency code for the daily budget (e.g. 'USD', 'EUR').`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the campaign.` }, + { + name: 'objective_type', + type: 'string', + required: true, + description: `The objective type for the campaign (e.g. 'AWARENESS', 'WEBSITE_VISIT', 'LEAD_GENERATION').`, + }, + ], + }, + { + name: 'linkedin_campaign_delete', + description: `Delete a DRAFT LinkedIn ad campaign. Only campaigns in DRAFT status can be deleted.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the campaign.`, + }, + { + name: 'campaign_id', + type: 'string', + required: true, + description: `The ID of the DRAFT campaign to delete.`, + }, + ], + }, + { + name: 'linkedin_campaign_get', + description: `Get a specific ad campaign by ID within a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the campaign.`, + }, + { + name: 'campaign_id', + type: 'string', + required: true, + description: `The ID of the campaign to retrieve.`, + }, + ], + }, + { + name: 'linkedin_campaign_group_create', + description: `Create a new campaign group within a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to create the campaign group in.`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `The name of the campaign group.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Status of the campaign group. One of: ACTIVE, ARCHIVED, CANCELED, DRAFT, PAUSED. Defaults to ACTIVE.`, + }, + ], + }, + { + name: 'linkedin_campaign_group_get', + description: `Get a specific campaign group by ID within a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the campaign group.`, + }, + { + name: 'group_id', + type: 'string', + required: true, + description: `The ID of the campaign group to retrieve.`, + }, + ], + }, + { + name: 'linkedin_campaign_group_update', + description: `Partially update a LinkedIn campaign group's name or status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the campaign group.`, + }, + { + name: 'group_id', + type: 'string', + required: true, + description: `The ID of the campaign group to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `New name for the campaign group.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `New status for the campaign group (e.g. ACTIVE, PAUSED, ARCHIVED).`, + }, + ], + }, + { + name: 'linkedin_campaign_groups_list', + description: `List campaign groups for a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to list campaign groups for.`, + }, + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return per page.`, + }, + { name: 'start', type: 'integer', required: false, description: `Offset for pagination.` }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter by campaign group status (e.g. ACTIVE, PAUSED, ARCHIVED).`, + }, + ], + }, + { + name: 'linkedin_campaign_update', + description: `Partially update a LinkedIn ad campaign's name or status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the campaign.`, + }, + { + name: 'campaign_id', + type: 'string', + required: true, + description: `The ID of the campaign to update.`, + }, + { name: 'name', type: 'string', required: false, description: `New name for the campaign.` }, + { + name: 'status', + type: 'string', + required: false, + description: `New status for the campaign (e.g. ACTIVE, PAUSED, ARCHIVED, CANCELED).`, + }, + ], + }, + { + name: 'linkedin_campaigns_list', + description: `List ad campaigns for a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to list campaigns for.`, + }, + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return per page.`, + }, + { name: 'start', type: 'integer', required: false, description: `Offset for pagination.` }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter by campaign status (e.g. ACTIVE, PAUSED, ARCHIVED, CANCELED, DRAFT).`, + }, + ], + }, + { + name: 'linkedin_comment_delete', + description: `Delete a specific comment on a LinkedIn post.`, + params: [ + { + name: 'actor_urn', + type: 'string', + required: true, + description: `The URN of the actor (person) deleting the comment.`, + }, + { + name: 'comment_id', + type: 'string', + required: true, + description: `The ID of the comment to delete.`, + }, + { + name: 'entity_urn', + type: 'string', + required: true, + description: `The URN of the post the comment belongs to.`, + }, + ], + }, + { + name: 'linkedin_comment_get', + description: `Get a specific comment on a LinkedIn post by entity URN and comment ID.`, + params: [ + { + name: 'comment_id', + type: 'string', + required: true, + description: `The ID of the comment to retrieve.`, + }, + { + name: 'entity_urn', + type: 'string', + required: true, + description: `The URN of the post the comment belongs to.`, + }, + ], + }, + { + name: 'linkedin_creative_create', + description: `Create a new ad creative for a LinkedIn ad campaign.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to create the creative in.`, + }, + { + name: 'campaign_id', + type: 'string', + required: true, + description: `The campaign URN this creative belongs to (e.g. 'urn:li:sponsoredCampaign:712345678').`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the creative.` }, + { + name: 'status', + type: 'string', + required: false, + description: `Status of the creative. Defaults to ACTIVE.`, + }, + ], + }, + { + name: 'linkedin_creative_get', + description: `Get a specific ad creative by ID within a LinkedIn ad account.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the creative.`, + }, + { + name: 'creative_id', + type: 'string', + required: true, + description: `The ID of the creative to retrieve.`, + }, + ], + }, + { + name: 'linkedin_creative_update', + description: `Partially update a LinkedIn ad creative's name or status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account that owns the creative.`, + }, + { + name: 'creative_id', + type: 'string', + required: true, + description: `The ID of the creative to update.`, + }, + { name: 'name', type: 'string', required: false, description: `New name for the creative.` }, + { + name: 'status', + type: 'string', + required: false, + description: `New status for the creative (e.g. ACTIVE, PAUSED, ARCHIVED).`, + }, + ], + }, + { + name: 'linkedin_creatives_list', + description: `List ad creatives for a LinkedIn ad account, with optional filtering by campaign or status.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `The ID of the ad account to list creatives for.`, + }, + { + name: 'campaign_id', + type: 'string', + required: false, + description: `Filter creatives by campaign URN.`, + }, + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return per page.`, + }, + { name: 'start', type: 'integer', required: false, description: `Offset for pagination.` }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter by creative status (e.g. ACTIVE, PAUSED, ARCHIVED).`, + }, + ], + }, + { + name: 'linkedin_email_get', + description: `Retrieve the authenticated user's primary email address from LinkedIn.`, + params: [], + }, + { + name: 'linkedin_job_posting_get', + description: `Get details of a specific LinkedIn job posting by its ID.`, + params: [ + { + name: 'job_id', + type: 'string', + required: true, + description: `The ID of the job posting to retrieve.`, + }, + ], + }, + { + name: 'linkedin_media_upload_register', + description: `Register a media asset upload with LinkedIn (step 1 of image/video upload). Returns an upload URL and asset ID to use for subsequent upload steps.`, + params: [ + { + name: 'owner_urn', + type: 'string', + required: true, + description: `The URN of the person or organization that owns the media (e.g. 'urn:li:person:{id}').`, + }, + { + name: 'recipe', + type: 'string', + required: true, + description: `The media recipe type. One of: feedshare-image, feedshare-video, messaging-attachment.`, + }, + ], + }, + { + name: 'linkedin_member_search', + description: `Search LinkedIn members by keyword for at-mention typeahead (requires Marketing API access).`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return.`, + }, + { + name: 'keywords', + type: 'string', + required: true, + description: `Keywords to search for members.`, + }, + ], + }, + { + name: 'linkedin_message_create', + description: `Send a LinkedIn message via the Messaging API (requires LinkedIn Messaging API partner access). Uses /rest/messages endpoint.`, + params: [ + { + name: 'body', + type: 'string', + required: true, + description: `The text content of the message.`, + }, + { + name: 'recipients', + type: 'string', + required: true, + description: `Comma-separated list of recipient person URNs (e.g. 'urn:li:person:abc123,urn:li:person:def456').`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `Optional subject line for the message.`, + }, + ], + }, + { + name: 'linkedin_organization_access_control_list', + description: `List organizations where the authenticated user has admin access via the Organizational Entity ACLs API.`, + params: [ + { + name: 'role_assignee_urn', + type: 'string', + required: true, + description: `URN of the person whose org access to check, e.g. urn:li:person:{id}.`, + }, + ], + }, + { + name: 'linkedin_organization_admins_get', + description: `List administrators of a LinkedIn organization page using the Organizational Entity ACLs API.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Numeric LinkedIn organization ID.`, + }, + ], + }, + { + name: 'linkedin_organization_by_vanity_get', + description: `Find a LinkedIn organization by its vanity name (the custom URL slug used in the company's LinkedIn URL).`, + params: [ + { + name: 'vanity_name', + type: 'string', + required: true, + description: `The vanity name (URL slug) of the organization to look up.`, + }, + ], + }, + { + name: 'linkedin_organization_followers_count', + description: `Get the follower count for a LinkedIn organization using its URL-encoded URN.`, + params: [ + { + name: 'organization_urn', + type: 'string', + required: true, + description: `URL-encoded URN of the organization, e.g. urn%3Ali%3Aorganization%3A{id}.`, + }, + ], + }, + { + name: 'linkedin_organization_get', + description: `Retrieve details of a LinkedIn organization (company page) by its numeric ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The numeric ID of the LinkedIn organization.`, + }, + ], + }, + { + name: 'linkedin_organization_post_create', + description: `Create a UGC post on behalf of a LinkedIn organization. The post will appear on the organization's page.`, + params: [ + { + name: 'organization_id', + type: 'string', + required: true, + description: `The numeric ID of the organization to post on behalf of.`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `The text content of the post.`, + }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility of the post. PUBLIC or CONNECTIONS.`, + }, + ], + }, + { + name: 'linkedin_organization_search', + description: `Search LinkedIn organizations by keyword using the company search API.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return.`, + }, + { + name: 'keywords', + type: 'string', + required: true, + description: `Keywords to search for organizations.`, + }, + ], + }, + { + name: 'linkedin_organizations_batch_get', + description: `Batch get multiple LinkedIn organizations by their numeric IDs. Works without admin access.`, + params: [ + { + name: 'ids', + type: 'string', + required: true, + description: `Comma-separated list of organization IDs to retrieve (e.g. '12345,67890').`, + }, + ], + }, + { + name: 'linkedin_post_comment_create', + description: `Add a comment to a LinkedIn UGC post on behalf of a member.`, + params: [ + { + name: 'actor', + type: 'string', + required: true, + description: `URN of the member leaving the comment, e.g. urn:li:person:{id}.`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `The text content of the comment.`, + }, + { + name: 'ugc_post_urn', + type: 'string', + required: true, + description: `URL-encoded URN of the UGC post to comment on, e.g. urn%3Ali%3AugcPost%3A{id}.`, + }, + ], + }, + { + name: 'linkedin_post_comments_list', + description: `List comments on a LinkedIn UGC post.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Maximum number of comments to return.`, + }, + { + name: 'start', + type: 'integer', + required: false, + description: `Pagination start index (0-based offset).`, + }, + { + name: 'ugc_post_urn', + type: 'string', + required: true, + description: `URL-encoded URN of the UGC post to retrieve comments for, e.g. urn%3Ali%3AugcPost%3A{id}.`, + }, + ], + }, + { + name: 'linkedin_post_create', + description: `Create a UGC post on LinkedIn on behalf of the authenticated user or organization.`, + params: [ + { + name: 'author', + type: 'string', + required: true, + description: `URN of the post author, e.g. urn:li:person:{id} or urn:li:organization:{id}.`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `The text content of the post.`, + }, + { + name: 'visibility', + type: 'string', + required: false, + description: `Visibility of the post. Options: PUBLIC, CONNECTIONS. Defaults to PUBLIC.`, + }, + ], + }, + { + name: 'linkedin_post_delete', + description: `Delete a UGC post from LinkedIn by its ID. This action is irreversible.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `URL-encoded post URN, e.g. urn%3Ali%3AugcPost%3A12345.`, + }, + ], + }, + { + name: 'linkedin_post_get', + description: `Get a specific LinkedIn post by its URL-encoded URN (e.g. urn%3Ali%3AugcPost%3A12345).`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `URL-encoded post URN, e.g. urn%3Ali%3AugcPost%3A12345.`, + }, + ], + }, + { + name: 'linkedin_post_like', + description: `Like a LinkedIn post on behalf of a person or organization. Uses the Reactions API.`, + params: [ + { + name: 'actor_urn', + type: 'string', + required: true, + description: `URN of the person or org liking the post, e.g. urn:li:person:{id}.`, + }, + { + name: 'entity_urn', + type: 'string', + required: true, + description: `URN of the post to like, e.g. urn:li:ugcPost:{id} or urn:li:share:{id}.`, + }, + ], + }, + { + name: 'linkedin_posts_list', + description: `List posts by a specific author (person or organization URN).`, + params: [ + { + name: 'author', + type: 'string', + required: true, + description: `URL-encoded author URN, e.g. urn%3Ali%3Aperson%3A{id} or urn%3Ali%3Aorganization%3A{id}.`, + }, + { + name: 'count', + type: 'integer', + required: false, + description: `Maximum number of results to return.`, + }, + { + name: 'start', + type: 'integer', + required: false, + description: `Pagination start index (0-based offset).`, + }, + ], + }, + { + name: 'linkedin_profile_get', + description: `Retrieve the current authenticated user's LinkedIn profile including first name, last name, ID, and profile picture.`, + params: [], + }, + { + name: 'linkedin_reaction_create', + description: `Create a reaction (like, praise, empathy, etc.) on a LinkedIn post or comment.`, + params: [ + { + name: 'actor_urn', + type: 'string', + required: true, + description: `The URN of the person reacting (e.g. 'urn:li:person:abc123').`, + }, + { + name: 'entity_urn', + type: 'string', + required: true, + description: `The URN of the post or comment to react to.`, + }, + { + name: 'reaction_type', + type: 'string', + required: true, + description: `The type of reaction. One of: LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT.`, + }, + ], + }, + { + name: 'linkedin_reaction_delete', + description: `Delete a reaction from a LinkedIn post or comment.`, + params: [ + { + name: 'actor_urn', + type: 'string', + required: true, + description: `The URN of the person whose reaction is being deleted (e.g. 'urn:li:person:abc123').`, + }, + { + name: 'entity_urn', + type: 'string', + required: true, + description: `The URN of the post or comment the reaction was made on.`, + }, + ], + }, + { + name: 'linkedin_reactions_list', + description: `List all reactions on a LinkedIn post or entity.`, + params: [ + { + name: 'count', + type: 'integer', + required: false, + description: `Number of reactions to return per page.`, + }, + { + name: 'entity_urn', + type: 'string', + required: true, + description: `The URN of the post or entity to list reactions for.`, + }, + { name: 'start', type: 'integer', required: false, description: `Offset for pagination.` }, + ], + }, + { + name: 'linkedin_share_create', + description: `Create a post on LinkedIn on behalf of a person or organization.`, + params: [ + { + name: 'owner', + type: 'string', + required: true, + description: `URN of the share owner, e.g. urn:li:person:{id} or urn:li:organization:{id}.`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `The text content of the share.`, + }, + { + name: 'visibility_code', + type: 'string', + required: false, + description: `Visibility of the share. Options: anyone, connectionsOnly. Defaults to anyone.`, + }, + ], + }, + { + name: 'linkedin_social_metadata_get', + description: `Get engagement metadata (likes, comments, reaction counts) for a post or share by its URN.`, + params: [ + { + name: 'share_urn', + type: 'string', + required: true, + description: `URL-encoded post/share URN, e.g. urn%3Ali%3AugcPost%3A12345.`, + }, + ], + }, + { + name: 'linkedin_userinfo_get', + description: `Get the authenticated user's OpenID Connect userinfo including id, name, email, and profile picture.`, + params: [], + }, +] diff --git a/src/data/agent-connectors/microsoftexcel.ts b/src/data/agent-connectors/microsoftexcel.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/microsoftexcel.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/microsoftteams.ts b/src/data/agent-connectors/microsoftteams.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/microsoftteams.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/microsoftword.ts b/src/data/agent-connectors/microsoftword.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/microsoftword.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/monday.ts b/src/data/agent-connectors/monday.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/monday.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/notion.ts b/src/data/agent-connectors/notion.ts new file mode 100644 index 000000000..e07416612 --- /dev/null +++ b/src/data/agent-connectors/notion.ts @@ -0,0 +1,716 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'notion_block_delete', + description: `Delete (archive) a Notion block by its ID. This also deletes all child blocks within it.`, + params: [ + { + name: 'block_id', + type: 'string', + required: true, + description: `The ID of the block to delete`, + }, + ], + }, + { + name: 'notion_block_update', + description: `Update the text content of an existing Notion block. Supports paragraph, heading, list item, quote, callout, and code blocks.`, + params: [ + { + name: 'block_id', + type: 'string', + required: true, + description: `The ID of the block to update`, + }, + { + name: 'language', + type: 'string', + required: false, + description: `Programming language for code blocks`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `New text content for the block`, + }, + { + name: 'type', + type: 'string', + required: true, + description: `The block type (must match the existing block type)`, + }, + ], + }, + { + name: 'notion_comment_create', + description: `Create a comment in Notion. Provide a comment object with rich_text content and either a parent object (with page_id) for a page-level comment or a discussion_id to reply in an existing thread.`, + params: [ + { + name: 'comment', + type: 'object', + required: true, + description: `Comment object containing a rich_text array. Example: {"rich_text":[{"type":"text","text":{"content":"Hello"}}]}`, + }, + { + name: 'discussion_id', + type: 'string', + required: false, + description: `Existing discussion thread ID to reply to.`, + }, + { + name: 'notion_version', + type: 'string', + required: false, + description: `Optional override for the Notion-Version header (e.g., 2022-06-28).`, + }, + { + name: 'parent', + type: 'object', + required: false, + description: `Parent object for a new top-level comment. Shape: {"page_id":""}.`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Internal override for schema version.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Internal override for tool implementation version.`, + }, + ], + }, + { + name: 'notion_comment_retrieve', + description: `Retrieve a single Notion comment by its \`comment_id\`. LLM tip: you typically obtain \`comment_id\` from the response of creating a comment or by first listing comments for a page/block and selecting the desired item’s \`id\`.`, + params: [ + { + name: 'comment_id', + type: 'string', + required: true, + description: `The identifier of the comment to retrieve (hyphenated UUID). Obtain it from Create-Comment responses or from a prior List-Comments call.`, + }, + { + name: 'notion_version', + type: 'string', + required: false, + description: `Optional Notion-Version header override (e.g., 2022-06-28).`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Internal override for schema version.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Internal override for tool implementation version.`, + }, + ], + }, + { + name: 'notion_comments_fetch', + description: `Fetch comments for a given Notion block. Provide a \`block_id\` (the target page/block ID, hyphenated UUID). Supports pagination via \`start_cursor\` and \`page_size\` (1–100). LLM tip: extract \`block_id\` from a Notion URL’s trailing 32-char id, then insert hyphens (8-4-4-4-12).`, + params: [ + { + name: 'block_id', + type: 'string', + required: true, + description: `Target Notion block (or page) ID to fetch comments for. Use a hyphenated UUID.`, + }, + { + name: 'notion_version', + type: 'string', + required: false, + description: `Optional Notion-Version header override (e.g., 2022-06-28).`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of comments to return (1–100).`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Internal override for schema version.`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor to fetch the next page of results.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Internal override for tool implementation version.`, + }, + ], + }, + { + name: 'notion_data_fetch', + description: `Fetch data from Notion using the workspace search API (/search). Supports pagination via start_cursor.`, + params: [ + { + name: 'page_size', + type: 'integer', + required: false, + description: `Max number of results to return (1–100)`, + }, + { name: 'query', type: 'string', required: false, description: `Text query used by /search` }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor for pagination; pass the previous response's next_cursor`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + ], + }, + { + name: 'notion_data_source_fetch', + description: `Retrieve a Notion database's schema, title, and properties using the Notion 2025-09-03 API. Unlike notion_database_fetch, this returns a data_sources array — each entry contains a data_source_id required by notion_data_source_query and notion_data_source_insert_row. Use this as the first step when working with merged, synced, or multi-source databases. For standard single-source databases, notion_database_fetch is sufficient. LLM guidance: extract data_sources[0].id (or the relevant source) from the response and pass it to the query or insert tools.`, + params: [ + { + name: 'database_id', + type: 'string', + required: true, + description: `The target database ID in UUID format with hyphens.`, + }, + ], + }, + { + name: 'notion_data_source_insert_row', + description: `Create a new row (page) in a Notion data source using the 2025-09-03 API. Required for merged, synced, or multi-source databases — these require parent.data_source_id instead of parent.database_id which the older notion_database_insert_row uses. Provide the data_source_id from notion_data_source_fetch (data_sources[].id) and a properties object mapping column names to Notion property value shapes. Optionally attach child blocks (page content), an icon, or a cover image. LLM guidance: step 1 — call notion_data_source_fetch to get the data_source_id; step 2 — build the properties object using exact column names from the schema (use 'title' key for title-type fields); step 3 — call this tool.`, + params: [ + { + name: 'child_blocks', + type: 'array', + required: false, + description: `Optional array of Notion blocks to append as page content.`, + }, + { + name: 'cover', + type: 'object', + required: false, + description: `Optional page cover object. Example: {"type":"external","external":{"url":"https://example.com/cover.jpg"}}`, + }, + { + name: 'data_source_id', + type: 'string', + required: true, + description: `The ID of the data source to insert a row into. Retrieve from notion_database_fetch response under data_sources[].id.`, + }, + { + name: 'icon', + type: 'object', + required: false, + description: `Optional page icon object. Example: {"type":"emoji","emoji":"📝"}`, + }, + { + name: 'properties', + type: 'object', + required: true, + description: `Object mapping column names (or property ids) to property values. Example: {"title": {"title": [{"text": {"content": "Task A"}}]}, "Status": {"select": {"name": "Todo"}}}`, + }, + ], + }, + { + name: 'notion_data_source_query', + description: `Query rows (pages) from a Notion data source using the 2025-09-03 API. Required for merged, synced, or multi-source databases — these cannot be queried via notion_database_query as that tool uses the older /databases/{id}/query endpoint which does not support multiple data sources. Provide the data_source_id obtained from notion_data_source_fetch (data_sources[].id). Supports filtering by property values, sorting, and cursor-based pagination. LLM guidance: step 1 — call notion_data_source_fetch with the database_id to retrieve the data_source_id; step 2 — pass that id here along with an optional filter, sorts, and page_size.`, + params: [ + { + name: 'data_source_id', + type: 'string', + required: true, + description: `The ID of the data source to query. Retrieve from notion_database_fetch response under data_sources[].id.`, + }, + { + name: 'filter', + type: 'object', + required: false, + description: `Notion filter object to narrow results. Example: {"property": "Status", "select": {"equals": "Done"}}. Supports compound filters with 'and'/'or' arrays.`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of rows to return (1-100).`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Order the results. Each item must include either property or timestamp, plus direction.`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor to fetch the next page of results.`, + }, + ], + }, + { + name: 'notion_database_create', + description: `Create a new database in Notion under a parent page. Provide a parent object with page_id, a database title (rich_text array), and a properties object that defines the database schema (columns).`, + params: [ + { + name: 'parent', + type: 'object', + required: true, + description: `Parent object specifying the page under which the database is created. Example: {"page_id": "2561ab6c-418b-8072-beec-c4779fa811cf"}`, + }, + { + name: 'properties', + type: 'object', + required: true, + description: `Database schema object defining properties (columns). Example: {"Name": {"title": {}}, "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Doing"}, {"name": "Done"}]}}}`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Internal override for schema version.`, + }, + { + name: 'title', + type: 'array', + required: true, + description: `Database title as a Notion rich_text array.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Internal override for tool implementation version.`, + }, + ], + }, + { + name: 'notion_database_fetch', + description: `Retrieve a Notion database's full definition, including title, properties, and schema. Required: database_id (hyphenated UUID). LLM tip: Extract the last 32 characters from a Notion database URL, then insert hyphens (8-4-4-4-12).`, + params: [ + { + name: 'database_id', + type: 'string', + required: true, + description: `The target database ID in UUID format with hyphens.`, + }, + ], + }, + { + name: 'notion_database_insert_row', + description: `Insert a new row (page) into a Notion database. Required: \`database_id\` (hyphenated UUID) and \`properties\` (object mapping database column names to Notion **property values**). Optional: \`child_blocks\` (content blocks), \`icon\` (page icon object), and \`cover\` (page cover object). + +LLM guidance: +- \`properties\` must use **property values** (not schema). Example: + { + "title": { "title": [ { "text": { "content": "Task A" } } ] }, + "Status": { "select": { "name": "Todo" } }, + "Due": { "date": { "start": "2025-09-01" } } + } +- Use the **exact property key** as defined in the database (case‑sensitive), or the property **id\`. +- \`icon\` example (emoji): {"type":"emoji","emoji":"📝"} +- \`cover\` example (external): {"type":"external","external":{"url":"https://example.com/image.jpg"}} +- Runtime note: the executor/host should synthesize \`parent = {"database_id": database_id}\` before sending to Notion.`, + params: [ + { + name: '_parent', + type: 'object', + required: false, + description: `Computed by host: \`{ "database_id": "" }\`. Do not supply manually.`, + }, + { + name: 'child_blocks', + type: 'array', + required: false, + description: `Optional array of Notion blocks to append as page content (paragraph, heading, to_do, etc.).`, + }, + { + name: 'cover', + type: 'object', + required: false, + description: `Optional page cover object. Example external: {"type":"external","external":{"url":"https://example.com/cover.jpg"}}.`, + }, + { + name: 'database_id', + type: 'string', + required: true, + description: `Target database ID (hyphenated UUID).`, + }, + { + name: 'icon', + type: 'object', + required: false, + description: `Optional page icon object. Examples: {"type":"emoji","emoji":"📝"} or {"type":"external","external":{"url":"https://..."}}.`, + }, + { + name: 'properties', + type: 'object', + required: true, + description: `Object mapping **column names (or property ids)** to **property values**. + +️ **CRITICAL: Property Identification Rules:** +- For title fields: ALWAYS use 'title' as the property key (not 'Name' or display names) +- For other properties: Use exact property names from database schema (case-sensitive) +- DO NOT use URL-encoded property IDs with special characters + + **Recommended Workflow:** +1. Call fetch_database first to see exact property names +2. Use 'title' for title-type properties +3. Match other property names exactly as shown in schema + +Example: +{ + "title": { "title": [ { "text": { "content": "Task A" } } ] }, + "Status": { "select": { "name": "Todo" } }, + "Due": { "date": { "start": "2025-09-01" } } +}`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version override.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version override.`, + }, + ], + }, + { + name: 'notion_database_property_retrieve', + description: `Query a Notion database and return only specific properties by supplying one or more property IDs. Use when you need page rows but want to limit the returned properties to reduce payload. Provide the database_id and an array of filter_properties (each item is a property id like "title")`, + params: [ + { + name: 'database_id', + type: 'string', + required: true, + description: `Target database ID (hyphenated UUID).`, + }, + { + name: 'property_id', + type: 'string', + required: false, + description: `property ID to filter results by a specific property. get the property id by querying database.`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version override.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version override.`, + }, + ], + }, + { + name: 'notion_database_query', + description: `Query a Notion database for rows (pages) using the 2022-06-28 API. Works for standard single-source databases. NOTE: If you encounter an 'Invalid request URL' error or are working with a merged, synced, or multi-source database, use the newer data source tools instead — call notion_data_source_fetch with the database_id to get the data_source_id, then call notion_data_source_query with that id. Provide database_id (hyphenated UUID). Optional: filter (Notion filter object), page_size (default 10), start_cursor for pagination, and sorts. LLM guidance: extract the last 32 characters from a Notion database URL and insert hyphens (8-4-4-4-12) to form database_id. Sort rules: each sort item MUST include either property OR timestamp (last_edited_time/created_time), not both.`, + params: [ + { + name: 'database_id', + type: 'string', + required: true, + description: `Target database ID (hyphenated UUID).`, + }, + { + name: 'filter', + type: 'object', + required: false, + description: `Notion filter object to narrow results. Example: {"property": "Status", "select": {"equals": "Done"}}. Supports compound filters with 'and'/'or' arrays.`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of rows to return (1–100).`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version override.`, + }, + { + name: 'sorts', + type: 'array', + required: false, + description: `Order the results. Each item must include either property or timestamp, plus direction.`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor to fetch the next page of results.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version override.`, + }, + ], + }, + { + name: 'notion_database_update', + description: `Update a Notion database's title, description, or property schema.`, + params: [ + { + name: 'database_id', + type: 'string', + required: true, + description: `The ID of the database to update`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `New description for the database`, + }, + { + name: 'properties', + type: 'object', + required: false, + description: `Property schema updates (add, rename, or reconfigure columns)`, + }, + { name: 'title', type: 'string', required: false, description: `New title for the database` }, + ], + }, + { + name: 'notion_page_content_append', + description: `Append blocks to a Notion page or block. IMPORTANT: This tool uses a simplified block format — do NOT pass raw Notion API block objects. Each block takes a 'type' and a 'text' string (plain text only). The tool internally converts these into the Notion API format. Supported types: paragraph, heading_1, heading_2, heading_3, bulleted_list_item, numbered_list_item, code, quote, callout, divider. For code blocks, add a 'language' field. Dividers require only the 'type' field. Example: [{"type": "heading_1", "text": "My Title"}, {"type": "paragraph", "text": "Some content"}, {"type": "code", "text": "print('hi')", "language": "python"}, {"type": "divider"}].`, + params: [ + { + name: 'block_id', + type: 'string', + required: true, + description: `The ID of the page or block to append content to`, + }, + { + name: 'blocks', + type: 'array', + required: true, + description: `Array of blocks to append. Each block uses a simplified format with 'type' and 'text' fields — NOT the raw Notion API format. Do not pass Notion block objects with rich_text arrays.`, + }, + ], + }, + { + name: 'notion_page_content_get', + description: `Retrieve the content (blocks) of a Notion page or block. Returns all child blocks with their type and text content.`, + params: [ + { + name: 'block_id', + type: 'string', + required: true, + description: `The ID of the page or block whose children to retrieve`, + }, + { + name: 'page_size', + type: 'number', + required: false, + description: `Number of blocks to return (max 100)`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response`, + }, + ], + }, + { + name: 'notion_page_create', + description: `Create a page in Notion either inside a database (as a row) or as a child of a page. Use exactly one parent mode: provide database_id to create a database row (page with properties) OR provide parent_page_id to create a child page. When creating in a database, properties must use Notion property value shapes and the title property key must be "title" (not the display name). Children (content blocks), icon, and cover are optional. The executor should synthesize the Notion parent object from the chosen parent input. + +Target rules: +- Use database_id OR parent_page_id (not both) +- If database_id is provided → properties are required +- If parent_page_id is provided → properties are optional`, + params: [ + { + name: '_parent', + type: 'object', + required: false, + description: `Computed by the executor: {"database_id": "..."} OR {"page_id": "..."} derived from database_id/parent_page_id.`, + }, + { + name: 'child_blocks', + type: 'array', + required: false, + description: `Optional blocks to add as page content (children).`, + }, + { + name: 'cover', + type: 'object', + required: false, + description: `Optional page cover object.`, + }, + { + name: 'database_id', + type: 'string', + required: false, + description: `Create a page as a new row in this database (hyphenated UUID). Extract from the database URL (last 32 chars → hyphenate 8-4-4-4-12).`, + }, + { name: 'icon', type: 'object', required: false, description: `Optional page icon object.` }, + { + name: 'notion_version', + type: 'string', + required: false, + description: `Optional Notion-Version header override.`, + }, + { + name: 'parent_page_id', + type: 'string', + required: false, + description: `Create a child page under this page (hyphenated UUID). Extract from the parent page URL.`, + }, + { + name: 'properties', + type: 'object', + required: false, + description: `For database rows, supply property values keyed by property name (or id). For title properties, the key must be "title". + +Example (database row): +{ + "title": { "title": [ { "text": { "content": "Task A" } } ] }, + "Status": { "select": { "name": "Todo" } }, + "Due": { "date": { "start": "2025-09-01" } } +}`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version override.`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version override.`, + }, + ], + }, + { + name: 'notion_page_get', + description: `Retrieve a Notion page by its ID. Returns the page properties, metadata, and parent information.`, + params: [ + { + name: 'page_id', + type: 'string', + required: true, + description: `The ID of the Notion page to retrieve`, + }, + ], + }, + { + name: 'notion_page_search', + description: `Search Notion pages by text query. Returns matching pages with their titles, IDs, and metadata. Optionally sort by last_edited_time or created_time, and paginate with start_cursor.`, + params: [ + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of pages to return (1–100).`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Text to search for across Notion pages.`, + }, + { + name: 'sort_direction', + type: 'string', + required: false, + description: `Direction to sort results.`, + }, + { + name: 'sort_timestamp', + type: 'string', + required: false, + description: `Timestamp field to sort results by.`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor to fetch the next page of results.`, + }, + ], + }, + { + name: 'notion_page_update', + description: `Update a Notion page's properties, archive/unarchive it, or change its icon and cover.`, + params: [ + { + name: 'archived', + type: 'boolean', + required: false, + description: `Set to true to archive (delete) the page, false to unarchive it`, + }, + { name: 'cover', type: 'object', required: false, description: `Page cover image to set` }, + { name: 'icon', type: 'object', required: false, description: `Page icon to set` }, + { + name: 'page_id', + type: 'string', + required: true, + description: `The ID of the Notion page to update`, + }, + { + name: 'properties', + type: 'object', + required: false, + description: `Page properties to update using Notion property value shapes`, + }, + ], + }, + { + name: 'notion_user_list', + description: `List all users in the Notion workspace including people and bots.`, + params: [ + { + name: 'page_size', + type: 'number', + required: false, + description: `Number of users to return (max 100)`, + }, + { + name: 'start_cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/onedrive.ts b/src/data/agent-connectors/onedrive.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/onedrive.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/onenote.ts b/src/data/agent-connectors/onenote.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/onenote.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/outlook.ts b/src/data/agent-connectors/outlook.ts new file mode 100644 index 000000000..fb4f67de9 --- /dev/null +++ b/src/data/agent-connectors/outlook.ts @@ -0,0 +1,838 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'outlook_create_calendar_event', + description: `Create a new calendar event in the user's Outlook calendar. Supports attendees, recurrence, reminders, online meetings, multiple locations, and event properties.`, + params: [ + { + name: 'attendees_optional', + type: 'string', + required: false, + description: `Array of email addresses for optional attendees`, + }, + { + name: 'attendees_required', + type: 'string', + required: false, + description: `Array of email addresses for required attendees`, + }, + { + name: 'attendees_resource', + type: 'string', + required: false, + description: `Array of email addresses for resources (meeting rooms, equipment)`, + }, + { name: 'body_content', type: 'string', required: false, description: `No description.` }, + { name: 'body_contentType', type: 'string', required: false, description: `No description.` }, + { name: 'end_datetime', type: 'string', required: true, description: `No description.` }, + { name: 'end_timezone', type: 'string', required: true, description: `No description.` }, + { + name: 'hideAttendees', + type: 'boolean', + required: false, + description: `When true, each attendee only sees themselves`, + }, + { + name: 'importance', + type: 'string', + required: false, + description: `Event importance level`, + }, + { name: 'isAllDay', type: 'boolean', required: false, description: `Mark as all-day event` }, + { + name: 'isOnlineMeeting', + type: 'boolean', + required: false, + description: `Create an online meeting (Teams/Skype)`, + }, + { + name: 'isReminderOn', + type: 'boolean', + required: false, + description: `Enable or disable reminder`, + }, + { name: 'location', type: 'string', required: false, description: `No description.` }, + { + name: 'locations', + type: 'string', + required: false, + description: `JSON array of location objects with displayName, address, coordinates`, + }, + { + name: 'onlineMeetingProvider', + type: 'string', + required: false, + description: `Online meeting provider`, + }, + { + name: 'recurrence_days_of_week', + type: 'string', + required: false, + description: `Days of week for weekly recurrence (comma-separated)`, + }, + { + name: 'recurrence_end_date', + type: 'string', + required: false, + description: `End date for recurrence (YYYY-MM-DD), required if range_type is endDate`, + }, + { + name: 'recurrence_interval', + type: 'integer', + required: false, + description: `How often the event recurs (e.g., every 2 weeks = 2)`, + }, + { + name: 'recurrence_occurrences', + type: 'integer', + required: false, + description: `Number of occurrences, required if range_type is numbered`, + }, + { + name: 'recurrence_range_type', + type: 'string', + required: false, + description: `How the recurrence ends`, + }, + { + name: 'recurrence_start_date', + type: 'string', + required: false, + description: `Start date for recurrence (YYYY-MM-DD)`, + }, + { + name: 'recurrence_type', + type: 'string', + required: false, + description: `Recurrence pattern type`, + }, + { + name: 'reminderMinutesBeforeStart', + type: 'integer', + required: false, + description: `Minutes before event start to show reminder`, + }, + { + name: 'sensitivity', + type: 'string', + required: false, + description: `Event sensitivity/privacy level`, + }, + { name: 'showAs', type: 'string', required: false, description: `Free/busy status` }, + { name: 'start_datetime', type: 'string', required: true, description: `No description.` }, + { name: 'start_timezone', type: 'string', required: true, description: `No description.` }, + { name: 'subject', type: 'string', required: true, description: `No description.` }, + ], + }, + { + name: 'outlook_create_contact', + description: `Create a new contact in the user's mailbox with name, email addresses, and phone numbers.`, + params: [ + { + name: 'businessPhones', + type: 'array', + required: false, + description: `Array of business phone numbers`, + }, + { name: 'companyName', type: 'string', required: false, description: `Company name` }, + { + name: 'emailAddresses', + type: 'array', + required: false, + description: `Array of email address objects with 'address' and optional 'name' fields`, + }, + { + name: 'givenName', + type: 'string', + required: true, + description: `First name of the contact`, + }, + { name: 'jobTitle', type: 'string', required: false, description: `Job title` }, + { name: 'mobilePhone', type: 'string', required: false, description: `Mobile phone number` }, + { name: 'surname', type: 'string', required: true, description: `Last name of the contact` }, + ], + }, + { + name: 'outlook_delete_calendar_event', + description: `Delete a calendar event by ID.`, + params: [{ name: 'event_id', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'outlook_get_attachment', + description: `Download a specific attachment from an Outlook email message by attachment ID. Returns the full attachment including base64-encoded file content in the contentBytes field. Use List Attachments to get the attachment ID first.`, + params: [ + { + name: 'attachment_id', + type: 'string', + required: true, + description: `The ID of the attachment to download.`, + }, + { + name: 'message_id', + type: 'string', + required: true, + description: `The ID of the message containing the attachment.`, + }, + ], + }, + { + name: 'outlook_get_calendar_event', + description: `Retrieve an existing calendar event by ID from the user's Outlook calendar.`, + params: [{ name: 'event_id', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'outlook_get_message', + description: `Retrieve a specific email message by ID from the user's Outlook mailbox, including full body content, sender, recipients, attachments info, and metadata.`, + params: [ + { + name: 'message_id', + type: 'string', + required: true, + description: `The ID of the message to retrieve.`, + }, + ], + }, + { + name: 'outlook_list_attachments', + description: `List all attachments on a specific Outlook email message. Returns attachment metadata including ID, name, size, and content type. Use the attachment ID with Get Attachment to download the file content.`, + params: [ + { + name: 'message_id', + type: 'string', + required: true, + description: `The ID of the message to list attachments for.`, + }, + ], + }, + { + name: 'outlook_list_calendar_events', + description: `List calendar events from the user's Outlook calendar with filtering, sorting, pagination, and field selection.`, + params: [ + { + name: 'filter', + type: 'string', + required: false, + description: `OData filter expression to filter events (e.g., startsWith(subject,'All'))`, + }, + { + name: 'orderby', + type: 'string', + required: false, + description: `OData orderby expression to sort events (e.g., start/dateTime desc)`, + }, + { + name: 'select', + type: 'string', + required: false, + description: `Comma-separated list of properties to include in the response`, + }, + { + name: 'skip', + type: 'number', + required: false, + description: `Number of events to skip for pagination`, + }, + { + name: 'top', + type: 'number', + required: false, + description: `Maximum number of events to return`, + }, + ], + }, + { + name: 'outlook_list_contacts', + description: `List all contacts in the user's mailbox with support for filtering, pagination, and field selection.`, + params: [ + { + name: '$filter', + type: 'string', + required: false, + description: `Filter expression to narrow results (e.g., "emailAddresses/any(a:a/address eq 'user@example.com')")`, + }, + { + name: '$orderby', + type: 'string', + required: false, + description: `Property to sort by (e.g., "displayName")`, + }, + { + name: '$select', + type: 'string', + required: false, + description: `Comma-separated list of properties to return (e.g., "displayName,emailAddresses,phoneNumbers")`, + }, + { + name: '$skip', + type: 'integer', + required: false, + description: `Number of contacts to skip for pagination`, + }, + { + name: '$top', + type: 'integer', + required: false, + description: `Number of contacts to return (default: 10)`, + }, + ], + }, + { + name: 'outlook_list_messages', + description: `List all messages in the user's mailbox with support for filtering, pagination, and field selection. Returns 10 messages by default.`, + params: [ + { + name: '$filter', + type: 'string', + required: false, + description: `Filter expression to narrow results (e.g., "from/emailAddress/address eq 'user@example.com'")`, + }, + { + name: '$orderby', + type: 'string', + required: false, + description: `Property to sort by (e.g., "receivedDateTime desc")`, + }, + { + name: '$select', + type: 'string', + required: false, + description: `Comma-separated list of properties to return (e.g., "subject,from,receivedDateTime")`, + }, + { + name: '$skip', + type: 'integer', + required: false, + description: `Number of messages to skip for pagination`, + }, + { + name: '$top', + type: 'integer', + required: false, + description: `Number of messages to return (1-1000, default: 10)`, + }, + ], + }, + { + name: 'outlook_mailbox_settings_get', + description: `Retrieve the mailbox settings for the signed-in user. Returns automatic replies (out-of-office) configuration, language, timezone, working hours, date/time format, and delegate meeting message delivery preferences.`, + params: [], + }, + { + name: 'outlook_mailbox_settings_update', + description: `Update mailbox settings for the signed-in user. Supports configuring automatic replies (out-of-office), language, timezone, working hours, date/time format, and delegate meeting message delivery preferences. Only fields provided will be updated.`, + params: [ + { + name: 'automaticRepliesSetting', + type: 'object', + required: false, + description: `Configuration for automatic replies (out-of-office). Set status, internal/external reply messages, and optional scheduled time window.`, + }, + { + name: 'dateFormat', + type: 'string', + required: false, + description: `Preferred date format string for the mailbox (e.g., 'MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy-MM-dd').`, + }, + { + name: 'delegateMeetingMessageDeliveryOptions', + type: 'string', + required: false, + description: `Controls how meeting messages are delivered when a delegate is configured.`, + }, + { + name: 'language', + type: 'object', + required: false, + description: `Language and locale for the mailbox. Object with locale (e.g., 'en-US') and displayName.`, + }, + { + name: 'timeFormat', + type: 'string', + required: false, + description: `Preferred time format string for the mailbox (e.g., 'hh:mm tt' for 12-hour, 'HH:mm' for 24-hour).`, + }, + { + name: 'timeZone', + type: 'string', + required: false, + description: `Preferred time zone for the mailbox (e.g., 'UTC', 'Pacific Standard Time', 'Eastern Standard Time').`, + }, + { + name: 'workingHours', + type: 'object', + required: false, + description: `Working hours configuration including days of week, start/end times, and time zone.`, + }, + ], + }, + { + name: 'outlook_reply_to_message', + description: `Reply to an existing email message. The reply is automatically sent to the original sender and saved in the Sent Items folder.`, + params: [ + { name: 'comment', type: 'string', required: true, description: `Reply message content` }, + { + name: 'messageId', + type: 'string', + required: true, + description: `The unique identifier of the message to reply to`, + }, + ], + }, + { + name: 'outlook_search_messages', + description: `Search messages by keywords across subject, body, sender, and other fields. Returns matching messages with support for pagination.`, + params: [ + { + name: '$select', + type: 'string', + required: false, + description: `Comma-separated list of properties to return (e.g., "subject,from,receivedDateTime")`, + }, + { + name: '$skip', + type: 'integer', + required: false, + description: `Number of messages to skip for pagination`, + }, + { + name: '$top', + type: 'integer', + required: false, + description: `Number of messages to return (1-1000, default: 10)`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Search query string (searches across subject, body, from, to)`, + }, + ], + }, + { + name: 'outlook_send_message', + description: `Send an email message using Microsoft Graph API. The message is saved in the Sent Items folder by default.`, + params: [ + { + name: 'bccRecipients', + type: 'array', + required: false, + description: `Array of email addresses to BCC`, + }, + { name: 'body', type: 'string', required: true, description: `Body content of the email` }, + { + name: 'bodyType', + type: 'string', + required: false, + description: `Content type of the body (Text or HTML)`, + }, + { + name: 'ccRecipients', + type: 'array', + required: false, + description: `Array of email addresses to CC`, + }, + { + name: 'saveToSentItems', + type: 'boolean', + required: false, + description: `Save the message in Sent Items folder (default: true)`, + }, + { name: 'subject', type: 'string', required: true, description: `Subject line of the email` }, + { + name: 'toRecipients', + type: 'array', + required: true, + description: `Array of email addresses to send to`, + }, + ], + }, + { + name: 'outlook_todo_lists_create', + description: `Create a new Microsoft To Do task list.`, + params: [ + { + name: 'display_name', + type: 'string', + required: true, + description: `The name of the task list.`, + }, + ], + }, + { + name: 'outlook_todo_lists_delete', + description: `Permanently delete a Microsoft To Do task list and all its tasks.`, + params: [ + { + name: 'list_id', + type: 'string', + required: true, + description: `The ID of the task list to delete.`, + }, + ], + }, + { + name: 'outlook_todo_lists_get', + description: `Get a specific Microsoft To Do task list by ID.`, + params: [ + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, + ], + }, + { + name: 'outlook_todo_lists_list', + description: `List all Microsoft To Do task lists for the current user.`, + params: [], + }, + { + name: 'outlook_todo_lists_update', + description: `Rename a Microsoft To Do task list.`, + params: [ + { + name: 'display_name', + type: 'string', + required: true, + description: `The new name for the task list.`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `The ID of the task list to update.`, + }, + ], + }, + { + name: 'outlook_todo_tasks_create', + description: `Create a new task in a Microsoft To Do task list with optional body, due date, importance, and reminder.`, + params: [ + { + name: 'body', + type: 'string', + required: false, + description: `The body/notes of the task (plain text).`, + }, + { + name: 'categories', + type: 'array', + required: false, + description: `Array of category names to assign to the task.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date in YYYY-MM-DD format (e.g. "2026-04-15").`, + }, + { + name: 'due_time_zone', + type: 'string', + required: false, + description: `Time zone for the due date (e.g. "UTC", "America/New_York"). Defaults to UTC.`, + }, + { + name: 'importance', + type: 'string', + required: false, + description: `The importance of the task: low, normal, or high.`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `The ID of the task list to add the task to.`, + }, + { + name: 'reminder_date_time', + type: 'string', + required: false, + description: `Reminder date and time in ISO 8601 format (e.g. "2026-04-15T09:00:00").`, + }, + { + name: 'reminder_time_zone', + type: 'string', + required: false, + description: `Time zone for the reminder (e.g. "UTC"). Defaults to UTC.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `The status of the task: notStarted, inProgress, completed, waitingOnOthers, or deferred.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the task.` }, + ], + }, + { + name: 'outlook_todo_tasks_delete', + description: `Permanently delete a task from a Microsoft To Do task list.`, + params: [ + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, + { + name: 'task_id', + type: 'string', + required: true, + description: `The ID of the task to delete.`, + }, + ], + }, + { + name: 'outlook_todo_tasks_get', + description: `Get a specific task from a Microsoft To Do task list.`, + params: [ + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, + { name: 'task_id', type: 'string', required: true, description: `The ID of the task.` }, + ], + }, + { + name: 'outlook_todo_tasks_list', + description: `List all tasks in a Microsoft To Do task list with optional filtering and pagination.`, + params: [ + { + name: '$filter', + type: 'string', + required: false, + description: `OData filter expression (e.g. "status eq 'notStarted'").`, + }, + { + name: '$orderby', + type: 'string', + required: false, + description: `Property to sort by (e.g. "createdDateTime desc").`, + }, + { + name: '$skip', + type: 'integer', + required: false, + description: `Number of tasks to skip for pagination.`, + }, + { + name: '$top', + type: 'integer', + required: false, + description: `Number of tasks to return (default: 10).`, + }, + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, + ], + }, + { + name: 'outlook_todo_tasks_update', + description: `Update a task in a Microsoft To Do task list. Only provided fields are changed.`, + params: [ + { + name: 'body', + type: 'string', + required: false, + description: `New body/notes for the task (plain text).`, + }, + { + name: 'categories', + type: 'array', + required: false, + description: `Array of category names to assign to the task.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date in YYYY-MM-DD format.`, + }, + { + name: 'due_time_zone', + type: 'string', + required: false, + description: `Time zone for the due date. Defaults to UTC.`, + }, + { + name: 'importance', + type: 'string', + required: false, + description: `The importance: low, normal, or high.`, + }, + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, + { + name: 'status', + type: 'string', + required: false, + description: `The status: notStarted, inProgress, completed, waitingOnOthers, or deferred.`, + }, + { + name: 'task_id', + type: 'string', + required: true, + description: `The ID of the task to update.`, + }, + { name: 'title', type: 'string', required: false, description: `New title for the task.` }, + ], + }, + { + name: 'outlook_update_calendar_event', + description: `Update an existing Outlook calendar event. Only provided fields will be updated. Supports time, attendees, location, reminders, online meetings, recurrence, and event properties.`, + params: [ + { + name: 'attendees_optional', + type: 'string', + required: false, + description: `Comma-separated optional attendee emails`, + }, + { + name: 'attendees_required', + type: 'string', + required: false, + description: `Comma-separated required attendee emails`, + }, + { + name: 'attendees_resource', + type: 'string', + required: false, + description: `Comma-separated resource emails (meeting rooms, equipment)`, + }, + { + name: 'body_content', + type: 'string', + required: false, + description: `Event description/body`, + }, + { + name: 'body_contentType', + type: 'string', + required: false, + description: `Content type of body`, + }, + { + name: 'categories', + type: 'string', + required: false, + description: `Comma-separated categories`, + }, + { + name: 'end_datetime', + type: 'string', + required: false, + description: `Event end time in RFC3339 format`, + }, + { + name: 'end_timezone', + type: 'string', + required: false, + description: `Timezone for end time`, + }, + { + name: 'event_id', + type: 'string', + required: true, + description: `The ID of the calendar event to update`, + }, + { + name: 'hideAttendees', + type: 'boolean', + required: false, + description: `When true, each attendee only sees themselves`, + }, + { + name: 'importance', + type: 'string', + required: false, + description: `Event importance level`, + }, + { name: 'isAllDay', type: 'boolean', required: false, description: `Mark as all-day event` }, + { + name: 'isOnlineMeeting', + type: 'boolean', + required: false, + description: `Create an online meeting (Teams/Skype)`, + }, + { + name: 'isReminderOn', + type: 'boolean', + required: false, + description: `Enable or disable reminder`, + }, + { + name: 'location', + type: 'string', + required: false, + description: `Physical or virtual location`, + }, + { + name: 'locations', + type: 'string', + required: false, + description: `JSON array of location objects with displayName, address, coordinates`, + }, + { + name: 'onlineMeetingProvider', + type: 'string', + required: false, + description: `Online meeting provider`, + }, + { + name: 'recurrence_days_of_week', + type: 'string', + required: false, + description: `Days of week for weekly recurrence (comma-separated)`, + }, + { + name: 'recurrence_end_date', + type: 'string', + required: false, + description: `End date for recurrence (YYYY-MM-DD)`, + }, + { + name: 'recurrence_interval', + type: 'integer', + required: false, + description: `How often the event recurs (e.g., every 2 weeks = 2)`, + }, + { + name: 'recurrence_occurrences', + type: 'integer', + required: false, + description: `Number of occurrences`, + }, + { + name: 'recurrence_range_type', + type: 'string', + required: false, + description: `How the recurrence ends`, + }, + { + name: 'recurrence_start_date', + type: 'string', + required: false, + description: `Start date for recurrence (YYYY-MM-DD)`, + }, + { + name: 'recurrence_type', + type: 'string', + required: false, + description: `Recurrence pattern type`, + }, + { + name: 'reminderMinutesBeforeStart', + type: 'integer', + required: false, + description: `Minutes before event start to show reminder`, + }, + { + name: 'sensitivity', + type: 'string', + required: false, + description: `Event sensitivity/privacy level`, + }, + { name: 'showAs', type: 'string', required: false, description: `Free/busy status` }, + { + name: 'start_datetime', + type: 'string', + required: false, + description: `Event start time in RFC3339 format`, + }, + { + name: 'start_timezone', + type: 'string', + required: false, + description: `Timezone for start time`, + }, + { name: 'subject', type: 'string', required: false, description: `Event title/summary` }, + ], + }, +] diff --git a/src/data/agent-connectors/outreach.ts b/src/data/agent-connectors/outreach.ts new file mode 100644 index 000000000..6b00f6171 --- /dev/null +++ b/src/data/agent-connectors/outreach.ts @@ -0,0 +1,1427 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'outreach_accounts_create', + description: `Create a new account (company) in Outreach.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Description of the account`, + }, + { + name: 'domain', + type: 'string', + required: false, + description: `Website domain of the account`, + }, + { name: 'industry', type: 'string', required: false, description: `Industry of the account` }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `LinkedIn company page URL`, + }, + { + name: 'locality', + type: 'string', + required: false, + description: `Location/city of the account`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Name of the account (company)`, + }, + { + name: 'number_of_employees', + type: 'integer', + required: false, + description: `Number of employees at the account`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user (owner) to assign this account to`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to apply to the account`, + }, + { + name: 'website_url', + type: 'string', + required: false, + description: `Website URL of the account`, + }, + ], + }, + { + name: 'outreach_accounts_delete', + description: `Permanently delete an account from Outreach by ID. This action cannot be undone.`, + params: [ + { + name: 'account_id', + type: 'integer', + required: true, + description: `The unique identifier of the account to delete`, + }, + ], + }, + { + name: 'outreach_accounts_get', + description: `Retrieve a single account by ID from Outreach.`, + params: [ + { + name: 'account_id', + type: 'integer', + required: true, + description: `The unique identifier of the account to retrieve`, + }, + ], + }, + { + name: 'outreach_accounts_list', + description: `List all accounts in Outreach with optional filtering, sorting, and pagination.`, + params: [ + { + name: 'filter_domain', + type: 'string', + required: false, + description: `Filter accounts by domain`, + }, + { + name: 'filter_name', + type: 'string', + required: false, + description: `Filter accounts by name`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination (number of records to skip)`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order (e.g., '-createdAt')`, + }, + ], + }, + { + name: 'outreach_accounts_update', + description: `Update an existing account in Outreach. Only provided fields will be changed.`, + params: [ + { + name: 'account_id', + type: 'integer', + required: true, + description: `The unique identifier of the account to update`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the account`, + }, + { name: 'domain', type: 'string', required: false, description: `Updated website domain` }, + { + name: 'industry', + type: 'string', + required: false, + description: `Updated industry of the account`, + }, + { name: 'name', type: 'string', required: false, description: `Updated name of the account` }, + { + name: 'number_of_employees', + type: 'integer', + required: false, + description: `Updated number of employees`, + }, + { name: 'owner_id', type: 'integer', required: false, description: `Updated owner user ID` }, + { name: 'tags', type: 'array', required: false, description: `Updated array of tags` }, + { name: 'website_url', type: 'string', required: false, description: `Updated website URL` }, + ], + }, + { + name: 'outreach_calls_create', + description: `Log a call record in Outreach. Used to track inbound or outbound call activity against a prospect.`, + params: [ + { + name: 'answered_at', + type: 'string', + required: false, + description: `ISO 8601 datetime when the call was answered`, + }, + { + name: 'call_disposition_id', + type: 'integer', + required: false, + description: `ID of the call disposition (outcome category)`, + }, + { + name: 'call_purpose_id', + type: 'integer', + required: false, + description: `ID of the call purpose`, + }, + { + name: 'direction', + type: 'string', + required: false, + description: `Direction of the call. Options: inbound, outbound`, + }, + { + name: 'duration', + type: 'integer', + required: false, + description: `Duration of the call in seconds`, + }, + { + name: 'note', + type: 'string', + required: false, + description: `Note or summary about the call`, + }, + { + name: 'outcome', + type: 'string', + required: false, + description: `Outcome of the call (e.g., connected, no_answer, left_voicemail)`, + }, + { + name: 'prospect_id', + type: 'integer', + required: false, + description: `ID of the prospect associated with this call`, + }, + ], + }, + { + name: 'outreach_calls_get', + description: `Retrieve a single call record by ID from Outreach, including direction, outcome, note, recording URL, and related prospect.`, + params: [ + { + name: 'call_id', + type: 'integer', + required: true, + description: `The unique identifier of the call to retrieve`, + }, + ], + }, + { + name: 'outreach_calls_list', + description: `List call records in Outreach with optional filtering by prospect, direction, or outcome.`, + params: [ + { + name: 'filter_direction', + type: 'string', + required: false, + description: `Filter calls by direction. Options: inbound, outbound`, + }, + { + name: 'filter_prospect_id', + type: 'integer', + required: false, + description: `Filter calls by prospect ID`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_mailboxes_get', + description: `Retrieve a single mailbox by ID from Outreach, including its email address, sender name, and sync status.`, + params: [ + { + name: 'mailbox_id', + type: 'integer', + required: true, + description: `The unique identifier of the mailbox to retrieve`, + }, + ], + }, + { + name: 'outreach_mailboxes_list', + description: `List all mailboxes (sender email addresses) configured in Outreach. Mailboxes are required when enrolling prospects in sequences.`, + params: [ + { + name: 'filter_email', + type: 'string', + required: false, + description: `Filter mailboxes by email address`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + ], + }, + { + name: 'outreach_mailings_get', + description: `Retrieve a single mailing by ID from Outreach, including its body, subject, state, and related prospect details.`, + params: [ + { + name: 'mailing_id', + type: 'integer', + required: true, + description: `The unique identifier of the mailing to retrieve`, + }, + ], + }, + { + name: 'outreach_mailings_list', + description: `List mailings (emails sent or scheduled) in Outreach with optional filtering and pagination.`, + params: [ + { + name: 'filter_prospect_id', + type: 'integer', + required: false, + description: `Filter mailings by prospect ID`, + }, + { + name: 'filter_state', + type: 'string', + required: false, + description: `Filter by mailing state. Options: bounced, delivered, delivering, drafted, failed, opened, placeholder, queued, replied, scheduled`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_opportunities_create', + description: `Create a new opportunity in Outreach to track sales deals.`, + params: [ + { + name: 'account_id', + type: 'integer', + required: false, + description: `ID of the account associated with this opportunity`, + }, + { + name: 'amount', + type: 'number', + required: false, + description: `Monetary value of the opportunity`, + }, + { + name: 'close_date', + type: 'string', + required: true, + description: `Expected close date for the opportunity in full ISO 8601 datetime format (YYYY-MM-DDTHH:MM:SS.000Z)`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Name or title of the opportunity`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user (owner) responsible for this opportunity`, + }, + { + name: 'probability', + type: 'integer', + required: false, + description: `Probability of closing (0-100)`, + }, + { + name: 'prospect_id', + type: 'integer', + required: false, + description: `ID of the prospect (primary contact) associated with this opportunity`, + }, + { + name: 'stage_id', + type: 'integer', + required: false, + description: `ID of the opportunity stage`, + }, + ], + }, + { + name: 'outreach_opportunities_delete', + description: `Permanently delete an opportunity from Outreach by ID. This action cannot be undone.`, + params: [ + { + name: 'opportunity_id', + type: 'integer', + required: true, + description: `The unique identifier of the opportunity to delete`, + }, + ], + }, + { + name: 'outreach_opportunities_get', + description: `Retrieve a single opportunity by ID from Outreach, including its name, amount, close date, and stage.`, + params: [ + { + name: 'opportunity_id', + type: 'integer', + required: true, + description: `The unique identifier of the opportunity to retrieve`, + }, + ], + }, + { + name: 'outreach_opportunities_list', + description: `List opportunities in Outreach with optional filtering by name, prospect, or account.`, + params: [ + { + name: 'filter_name', + type: 'string', + required: false, + description: `Filter opportunities by name`, + }, + { + name: 'filter_prospect_id', + type: 'integer', + required: false, + description: `Filter by prospect ID`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_opportunities_update', + description: `Update an existing opportunity in Outreach. Only provided fields will be changed.`, + params: [ + { + name: 'amount', + type: 'number', + required: false, + description: `Updated monetary value of the opportunity`, + }, + { + name: 'close_date', + type: 'string', + required: false, + description: `Updated expected close date (ISO 8601 format)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the opportunity`, + }, + { + name: 'opportunity_id', + type: 'integer', + required: true, + description: `The unique identifier of the opportunity to update`, + }, + { name: 'owner_id', type: 'integer', required: false, description: `Updated owner user ID` }, + { + name: 'probability', + type: 'integer', + required: false, + description: `Updated probability of closing (0-100)`, + }, + { + name: 'stage_id', + type: 'integer', + required: false, + description: `Updated opportunity stage ID`, + }, + ], + }, + { + name: 'outreach_prospects_create', + description: `Create a new prospect in Outreach. Provide at minimum a first name, last name, or email address.`, + params: [ + { + name: 'account_id', + type: 'integer', + required: false, + description: `ID of the account to associate with this prospect`, + }, + { + name: 'address_city', + type: 'string', + required: false, + description: `City of the prospect's address`, + }, + { + name: 'address_country', + type: 'string', + required: false, + description: `Country of the prospect's address`, + }, + { + name: 'address_state', + type: 'string', + required: false, + description: `State of the prospect's address`, + }, + { + name: 'company', + type: 'string', + required: false, + description: `Company name of the prospect`, + }, + { + name: 'emails', + type: 'array', + required: false, + description: `Array of email addresses for the prospect`, + }, + { + name: 'first_name', + type: 'string', + required: false, + description: `First name of the prospect`, + }, + { + name: 'github_url', + type: 'string', + required: false, + description: `GitHub profile URL of the prospect`, + }, + { + name: 'last_name', + type: 'string', + required: false, + description: `Last name of the prospect`, + }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `LinkedIn profile URL of the prospect`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user (owner) to assign this prospect to`, + }, + { + name: 'phones', + type: 'array', + required: false, + description: `Array of phone numbers for the prospect`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to apply to the prospect`, + }, + { name: 'title', type: 'string', required: false, description: `Job title of the prospect` }, + { + name: 'website_url', + type: 'string', + required: false, + description: `Personal or company website URL of the prospect`, + }, + ], + }, + { + name: 'outreach_prospects_delete', + description: `Permanently delete a prospect from Outreach by ID. This action cannot be undone.`, + params: [ + { + name: 'prospect_id', + type: 'integer', + required: true, + description: `The unique identifier of the prospect to delete`, + }, + ], + }, + { + name: 'outreach_prospects_get', + description: `Retrieve a single prospect by ID from Outreach.`, + params: [ + { + name: 'prospect_id', + type: 'integer', + required: true, + description: `The unique identifier of the prospect to retrieve`, + }, + ], + }, + { + name: 'outreach_prospects_list', + description: `List all prospects in Outreach with optional filtering, sorting, and pagination.`, + params: [ + { + name: 'filter_company', + type: 'string', + required: false, + description: `Filter prospects by company name`, + }, + { + name: 'filter_email', + type: 'string', + required: false, + description: `Filter prospects by email address`, + }, + { + name: 'filter_first_name', + type: 'string', + required: false, + description: `Filter prospects by first name`, + }, + { + name: 'filter_last_name', + type: 'string', + required: false, + description: `Filter prospects by last name`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination (number of records to skip)`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order (e.g., '-createdAt')`, + }, + ], + }, + { + name: 'outreach_prospects_update', + description: `Update an existing prospect in Outreach. Only provided fields will be changed.`, + params: [ + { + name: 'account_id', + type: 'integer', + required: false, + description: `ID of the account to associate with this prospect`, + }, + { + name: 'address_city', + type: 'string', + required: false, + description: `City of the prospect's address`, + }, + { + name: 'address_country', + type: 'string', + required: false, + description: `Country of the prospect's address`, + }, + { + name: 'address_state', + type: 'string', + required: false, + description: `State of the prospect's address`, + }, + { + name: 'company', + type: 'string', + required: false, + description: `Company name of the prospect`, + }, + { + name: 'emails', + type: 'array', + required: false, + description: `Array of email addresses for the prospect`, + }, + { + name: 'first_name', + type: 'string', + required: false, + description: `First name of the prospect`, + }, + { + name: 'last_name', + type: 'string', + required: false, + description: `Last name of the prospect`, + }, + { + name: 'linkedin_url', + type: 'string', + required: false, + description: `LinkedIn profile URL of the prospect`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user (owner) to assign this prospect to`, + }, + { + name: 'phones', + type: 'array', + required: false, + description: `Array of phone numbers for the prospect`, + }, + { + name: 'prospect_id', + type: 'integer', + required: true, + description: `The unique identifier of the prospect to update`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to apply to the prospect`, + }, + { name: 'title', type: 'string', required: false, description: `Job title of the prospect` }, + ], + }, + { + name: 'outreach_sequence_states_create', + description: `Enroll a prospect in a sequence by creating a sequence state. Requires a prospect ID, sequence ID, and mailbox ID.`, + params: [ + { + name: 'mailbox_id', + type: 'integer', + required: true, + description: `ID of the mailbox to use for sending sequence emails`, + }, + { + name: 'prospect_id', + type: 'integer', + required: true, + description: `ID of the prospect to enroll in the sequence`, + }, + { + name: 'sequence_id', + type: 'integer', + required: true, + description: `ID of the sequence to enroll the prospect in`, + }, + ], + }, + { + name: 'outreach_sequence_states_delete', + description: `Remove a prospect from a sequence by deleting the sequence state record. This action cannot be undone.`, + params: [ + { + name: 'sequence_state_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence state to delete`, + }, + ], + }, + { + name: 'outreach_sequence_states_get', + description: `Retrieve a single sequence state (enrollment record) by ID from Outreach.`, + params: [ + { + name: 'sequence_state_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence state to retrieve`, + }, + ], + }, + { + name: 'outreach_sequence_states_list', + description: `List sequence states (enrollment records) in Outreach, showing which prospects are enrolled in which sequences.`, + params: [ + { + name: 'filter_prospect_id', + type: 'integer', + required: false, + description: `Filter by prospect ID`, + }, + { + name: 'filter_sequence_id', + type: 'integer', + required: false, + description: `Filter by sequence ID`, + }, + { + name: 'filter_state', + type: 'string', + required: false, + description: `Filter by state. Options: active, pending, finished, paused, disabled, failed, bounced, opted_out`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + ], + }, + { + name: 'outreach_sequence_steps_get', + description: `Retrieve a single sequence step by ID from Outreach, including its step order, action type, and associated sequence.`, + params: [ + { + name: 'sequence_step_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence step to retrieve`, + }, + ], + }, + { + name: 'outreach_sequence_steps_list', + description: `List all sequence steps in Outreach. Sequence steps define the individual actions (emails, calls, tasks) within a sequence.`, + params: [ + { + name: 'filter_sequence_id', + type: 'integer', + required: false, + description: `Filter sequence steps by sequence ID`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + ], + }, + { + name: 'outreach_sequences_create', + description: `Create a new sequence in Outreach for automated sales engagement.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Description of the sequence`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the sequence` }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user (owner) to assign this sequence to`, + }, + { + name: 'sequence_type', + type: 'string', + required: false, + description: `Type of the sequence. Options: 'date' or 'interval'`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to apply to the sequence`, + }, + ], + }, + { + name: 'outreach_sequences_delete', + description: `Permanently delete a sequence from Outreach by ID. This action cannot be undone and will remove all associated sequence steps.`, + params: [ + { + name: 'sequence_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence to delete`, + }, + ], + }, + { + name: 'outreach_sequences_get', + description: `Retrieve a single sequence by ID from Outreach.`, + params: [ + { + name: 'sequence_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence to retrieve`, + }, + ], + }, + { + name: 'outreach_sequences_list', + description: `List all sequences in Outreach with optional filtering and pagination.`, + params: [ + { + name: 'filter_enabled', + type: 'boolean', + required: false, + description: `Filter by enabled status (true or false)`, + }, + { + name: 'filter_name', + type: 'string', + required: false, + description: `Filter sequences by name`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination (number of records to skip)`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_sequences_update', + description: `Update an existing sequence in Outreach. Use this to rename a sequence, change its description, or enable/disable it.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the sequence`, + }, + { + name: 'enabled', + type: 'boolean', + required: false, + description: `Whether the sequence should be active/enabled`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the sequence`, + }, + { + name: 'sequence_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence to update`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Updated array of tags for the sequence`, + }, + ], + }, + { + name: 'outreach_stages_get', + description: `Retrieve a single opportunity stage by ID from Outreach, including its name, color, and order.`, + params: [ + { + name: 'stage_id', + type: 'integer', + required: true, + description: `The unique identifier of the opportunity stage to retrieve`, + }, + ], + }, + { + name: 'outreach_stages_list', + description: `List all opportunity stages (pipeline stages) configured in Outreach.`, + params: [ + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + ], + }, + { + name: 'outreach_tags_list', + description: `List all tags configured in Outreach that can be applied to prospects, accounts, and sequences.`, + params: [ + { name: 'filter_name', type: 'string', required: false, description: `Filter tags by name` }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + ], + }, + { + name: 'outreach_tasks_complete', + description: `Mark an existing task as complete in Outreach. Only works for action_item and in_person tasks — call and email tasks cannot be completed this way. Use this instead of outreach_tasks_update to complete a task.`, + params: [ + { + name: 'completion_note', + type: 'string', + required: false, + description: `Optional note to record when marking the task complete`, + }, + { + name: 'task_id', + type: 'integer', + required: true, + description: `The unique identifier of the task to mark as complete`, + }, + ], + }, + { + name: 'outreach_tasks_create', + description: `Create a new task in Outreach. Tasks can represent calls, emails, in-person meetings, or general action items. Both owner_id and prospect_id are required by the Outreach API.`, + params: [ + { + name: 'action', + type: 'string', + required: true, + description: `Type of action for the task. Options: action_item, call, email, in_person`, + }, + { + name: 'due_at', + type: 'string', + required: false, + description: `Due date/time for the task (ISO 8601 format)`, + }, + { + name: 'note', + type: 'string', + required: false, + description: `Note or description for the task`, + }, + { + name: 'owner_id', + type: 'integer', + required: true, + description: `ID of the user assigned to this task`, + }, + { + name: 'prospect_id', + type: 'integer', + required: true, + description: `ID of the prospect associated with this task (subject). Required — must provide either prospect_id or account_id.`, + }, + ], + }, + { + name: 'outreach_tasks_delete', + description: `Permanently delete a task from Outreach by ID. This action cannot be undone.`, + params: [ + { + name: 'task_id', + type: 'integer', + required: true, + description: `The unique identifier of the task to delete`, + }, + ], + }, + { + name: 'outreach_tasks_get', + description: `Retrieve a single task by ID from Outreach, including its action type, due date, note, and associated prospect.`, + params: [ + { + name: 'task_id', + type: 'integer', + required: true, + description: `The unique identifier of the task to retrieve`, + }, + ], + }, + { + name: 'outreach_tasks_list', + description: `List tasks in Outreach with optional filtering by state, action type, prospect, or due date.`, + params: [ + { + name: 'filter_prospect_id', + type: 'integer', + required: false, + description: `Filter tasks by prospect ID`, + }, + { + name: 'filter_state', + type: 'string', + required: false, + description: `Filter tasks by state. Options: incomplete, complete`, + }, + { + name: 'filter_task_type', + type: 'string', + required: false, + description: `Filter tasks by task type. Options: action_item, call, email, in_person`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_tasks_update', + description: `Update an existing task in Outreach. Supports changing action, note, and due date. To mark a task complete, use the outreach_tasks_complete tool instead.`, + params: [ + { + name: 'action', + type: 'string', + required: false, + description: `Updated action type. Options: action_item, call, email, in_person`, + }, + { + name: 'due_at', + type: 'string', + required: false, + description: `Updated due date/time for the task (ISO 8601 format)`, + }, + { + name: 'note', + type: 'string', + required: false, + description: `Updated note or description for the task`, + }, + { + name: 'task_id', + type: 'integer', + required: true, + description: `The unique identifier of the task to update`, + }, + ], + }, + { + name: 'outreach_templates_create', + description: `Create a new email template in Outreach. Templates can be used in sequences and for manual email sends.`, + params: [ + { + name: 'body_html', + type: 'string', + required: false, + description: `HTML body content of the template`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the template` }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this template`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `Email subject line of the template`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Array of tags to apply to the template`, + }, + ], + }, + { + name: 'outreach_templates_delete', + description: `Permanently delete an email template from Outreach by ID. This action cannot be undone.`, + params: [ + { + name: 'template_id', + type: 'integer', + required: true, + description: `The unique identifier of the template to delete`, + }, + ], + }, + { + name: 'outreach_templates_get', + description: `Retrieve a single email template by ID from Outreach, including its subject, body, and usage statistics.`, + params: [ + { + name: 'template_id', + type: 'integer', + required: true, + description: `The unique identifier of the template to retrieve`, + }, + ], + }, + { + name: 'outreach_templates_list', + description: `List email templates in Outreach with optional filtering by name.`, + params: [ + { + name: 'filter_name', + type: 'string', + required: false, + description: `Filter templates by name`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_templates_update', + description: `Update an existing email template in Outreach. Only provided fields will be changed.`, + params: [ + { + name: 'body_html', + type: 'string', + required: false, + description: `Updated HTML body content`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the template`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `Updated email subject line`, + }, + { name: 'tags', type: 'array', required: false, description: `Updated array of tags` }, + { + name: 'template_id', + type: 'integer', + required: true, + description: `The unique identifier of the template to update`, + }, + ], + }, + { + name: 'outreach_users_get', + description: `Retrieve a single Outreach user by ID, including their name, email, and role information.`, + params: [ + { + name: 'user_id', + type: 'integer', + required: true, + description: `The unique identifier of the user to retrieve`, + }, + ], + }, + { + name: 'outreach_users_list', + description: `List all users in the Outreach organization with optional filtering and pagination.`, + params: [ + { + name: 'filter_email', + type: 'string', + required: false, + description: `Filter users by email address`, + }, + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with '-' for descending order`, + }, + ], + }, + { + name: 'outreach_webhooks_create', + description: `Create a new webhook in Outreach to receive event notifications at a specified URL. Outreach will POST event payloads to the provided URL when subscribed events occur.`, + params: [ + { + name: 'action', + type: 'string', + required: false, + description: `The event action to subscribe to (e.g., created, updated, deleted)`, + }, + { + name: 'resource_type', + type: 'string', + required: false, + description: `The resource type to subscribe to events for (e.g., prospect, account, sequenceState)`, + }, + { + name: 'secret', + type: 'string', + required: false, + description: `A secret string used to sign webhook payloads for verification`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The HTTPS URL to receive webhook event payloads`, + }, + ], + }, + { + name: 'outreach_webhooks_delete', + description: `Permanently delete a webhook from Outreach by ID. Outreach will stop sending event notifications to the associated URL.`, + params: [ + { + name: 'webhook_id', + type: 'integer', + required: true, + description: `The unique identifier of the webhook to delete`, + }, + ], + }, + { + name: 'outreach_webhooks_get', + description: `Retrieve a single webhook configuration by ID from Outreach.`, + params: [ + { + name: 'webhook_id', + type: 'integer', + required: true, + description: `The unique identifier of the webhook to retrieve`, + }, + ], + }, + { + name: 'outreach_webhooks_list', + description: `List all webhooks configured in Outreach for receiving event notifications.`, + params: [ + { + name: 'page_offset', + type: 'integer', + required: false, + description: `Offset for pagination`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Number of results per page (max 1000)`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/pagerduty.ts b/src/data/agent-connectors/pagerduty.ts new file mode 100644 index 000000000..11280834e --- /dev/null +++ b/src/data/agent-connectors/pagerduty.ts @@ -0,0 +1,1297 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'pagerduty_escalation_policies_list', + description: `List escalation policies in PagerDuty. Supports filtering by query, user, team, and includes.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: services, teams, targets.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by name.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Used to specify a field to sort the response on. Options: name, name:asc, name:desc.`, + }, + { + name: 'team_ids', + type: 'string', + required: false, + description: `Comma-separated list of team IDs to filter escalation policies by.`, + }, + { + name: 'user_ids', + type: 'string', + required: false, + description: `Comma-separated list of user IDs to filter escalation policies for.`, + }, + ], + }, + { + name: 'pagerduty_escalation_policy_create', + description: `Create a new escalation policy in PagerDuty. Escalation policies define who gets notified and in what order when an incident is triggered.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `A description of the escalation policy.`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `The name of the escalation policy.`, + }, + { + name: 'num_loops', + type: 'integer', + required: false, + description: `The number of times the escalation policy will repeat after reaching the end of its escalation rules.`, + }, + { + name: 'on_call_handoff_notifications', + type: 'string', + required: false, + description: `Determines how on call handoff notifications will be sent for users on the escalation policy. Options: if_has_services, always.`, + }, + { + name: 'rule_escalation_delay_in_minutes', + type: 'integer', + required: false, + description: `The number of minutes before an unacknowledged incident escalates to the next rule.`, + }, + { + name: 'target_id', + type: 'string', + required: true, + description: `The ID of the user or schedule to notify in the first escalation rule.`, + }, + { + name: 'target_type', + type: 'string', + required: false, + description: `The type of the first escalation rule target. Options: user_reference, schedule_reference.`, + }, + ], + }, + { + name: 'pagerduty_escalation_policy_delete', + description: `Delete a PagerDuty escalation policy. The policy must not be in use by any services or schedules.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the escalation policy to delete.`, + }, + ], + }, + { + name: 'pagerduty_escalation_policy_get', + description: `Get details of a specific PagerDuty escalation policy by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the escalation policy to retrieve.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: services, teams, targets.`, + }, + ], + }, + { + name: 'pagerduty_escalation_policy_update', + description: `Update an existing PagerDuty escalation policy's name, description, or loop settings.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the escalation policy.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the escalation policy to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The updated name of the escalation policy.`, + }, + { + name: 'num_loops', + type: 'integer', + required: false, + description: `The number of times the escalation policy will repeat after reaching the end.`, + }, + { + name: 'on_call_handoff_notifications', + type: 'string', + required: false, + description: `Determines how on-call handoff notifications are sent. Options: if_has_services, always.`, + }, + ], + }, + { + name: 'pagerduty_incident_create', + description: `Create a new incident in PagerDuty. Requires a title, service ID, and the email of the user creating the incident.`, + params: [ + { + name: 'body_details', + type: 'string', + required: false, + description: `Additional details about the incident body (plain text).`, + }, + { + name: 'escalation_policy_id', + type: 'string', + required: false, + description: `The ID of the escalation policy to assign to the incident.`, + }, + { + name: 'from_email', + type: 'string', + required: true, + description: `The email address of the user creating the incident. Required by PagerDuty.`, + }, + { + name: 'incident_key', + type: 'string', + required: false, + description: `A string that identifies the incident. Used for deduplication.`, + }, + { + name: 'priority_id', + type: 'string', + required: false, + description: `The ID of the priority to assign to the incident.`, + }, + { + name: 'service_id', + type: 'string', + required: true, + description: `The ID of the service the incident belongs to.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `A brief description of the incident.`, + }, + { + name: 'urgency', + type: 'string', + required: false, + description: `The urgency of the incident. Options: high, low.`, + }, + ], + }, + { + name: 'pagerduty_incident_get', + description: `Get details of a specific PagerDuty incident by its ID, including status, assignments, services, and timeline.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the incident to retrieve.`, + }, + ], + }, + { + name: 'pagerduty_incident_manage', + description: `Manage multiple PagerDuty incidents in bulk. Acknowledge, resolve, merge, or reassign multiple incidents at once.`, + params: [ + { + name: 'from_email', + type: 'string', + required: true, + description: `The email address of the user performing the bulk action. Required by PagerDuty.`, + }, + { + name: 'incident_ids', + type: 'string', + required: true, + description: `Comma-separated list of incident IDs to manage.`, + }, + { + name: 'status', + type: 'string', + required: true, + description: `The status to apply to all specified incidents. Options: acknowledged, resolved.`, + }, + ], + }, + { + name: 'pagerduty_incident_note_create', + description: `Add a note to a PagerDuty incident. Notes are visible to all responders on the incident.`, + params: [ + { + name: 'content', + type: 'string', + required: true, + description: `The content of the note to add to the incident.`, + }, + { + name: 'from_email', + type: 'string', + required: true, + description: `The email address of the user creating the note. Required by PagerDuty.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the incident to add a note to.`, + }, + ], + }, + { + name: 'pagerduty_incident_update', + description: `Update an existing PagerDuty incident. Can change status, urgency, title, priority, escalation policy, or reassign it.`, + params: [ + { + name: 'assignee_id', + type: 'string', + required: false, + description: `The ID of the user to assign the incident to.`, + }, + { + name: 'escalation_policy_id', + type: 'string', + required: false, + description: `The ID of the escalation policy to assign to the incident.`, + }, + { + name: 'from_email', + type: 'string', + required: true, + description: `The email address of the user making the update. Required by PagerDuty.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the incident to update.`, + }, + { + name: 'priority_id', + type: 'string', + required: false, + description: `The ID of the priority to assign to the incident.`, + }, + { + name: 'resolution', + type: 'string', + required: false, + description: `The resolution note for the incident (used when resolving).`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `The new status of the incident. Options: acknowledged, resolved.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `A brief description of the incident.`, + }, + { + name: 'urgency', + type: 'string', + required: false, + description: `The urgency of the incident. Options: high, low.`, + }, + ], + }, + { + name: 'pagerduty_incidents_list', + description: `List existing incidents in PagerDuty. Supports filtering by status, urgency, service, team, assigned user, and date range.`, + params: [ + { + name: 'date_range', + type: 'string', + required: false, + description: `When set to 'all', the since and until parameters and defaults are ignored.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Array of additional resources to include. Options: acknowledgers, agents, assignees, conference_bridge, escalation_policies, first_trigger_log_entries, responders, services, teams, users.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results to return per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'service_ids', + type: 'string', + required: false, + description: `Comma-separated list of service IDs to filter incidents by.`, + }, + { + name: 'since', + type: 'string', + required: false, + description: `The start of the date range to search (ISO 8601 format).`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Used to specify a field you would like to sort the response on. Options: incident_number, created_at, resolved_at, urgency.`, + }, + { + name: 'statuses', + type: 'string', + required: false, + description: `Comma-separated list of statuses to filter by. Options: triggered, acknowledged, resolved.`, + }, + { + name: 'team_ids', + type: 'string', + required: false, + description: `Comma-separated list of team IDs to filter incidents by.`, + }, + { + name: 'until', + type: 'string', + required: false, + description: `The end of the date range to search (ISO 8601 format).`, + }, + { + name: 'urgencies', + type: 'string', + required: false, + description: `Comma-separated list of urgencies to filter by. Options: high, low.`, + }, + { + name: 'user_ids', + type: 'string', + required: false, + description: `Comma-separated list of user IDs to filter incidents assigned to.`, + }, + ], + }, + { + name: 'pagerduty_log_entries_list', + description: `List log entries across all incidents in PagerDuty. Log entries record actions taken on incidents including notifications, acknowledgements, and assignments.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: incidents, services, channels, teams.`, + }, + { + name: 'is_overview', + type: 'boolean', + required: false, + description: `If true, only show log entries of type 'notify_log_entry'.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'since', + type: 'string', + required: false, + description: `The start of the date range (ISO 8601).`, + }, + { + name: 'team_ids', + type: 'string', + required: false, + description: `Comma-separated list of team IDs to filter log entries by.`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone for the log entries (IANA format).`, + }, + { + name: 'until', + type: 'string', + required: false, + description: `The end of the date range (ISO 8601).`, + }, + ], + }, + { + name: 'pagerduty_log_entry_get', + description: `Get details of a specific PagerDuty log entry by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the log entry to retrieve.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: incidents, services, channels, teams.`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone for the log entry (IANA format).`, + }, + ], + }, + { + name: 'pagerduty_maintenance_window_create', + description: `Create a new maintenance window in PagerDuty. During a maintenance window, no incidents will be created for the associated services.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `A description of the maintenance window.`, + }, + { + name: 'end_time', + type: 'string', + required: true, + description: `The end time of the maintenance window (ISO 8601 format).`, + }, + { + name: 'from_email', + type: 'string', + required: true, + description: `The email address of the user creating the maintenance window. Required by PagerDuty.`, + }, + { + name: 'service_ids', + type: 'string', + required: true, + description: `Comma-separated list of service IDs to include in the maintenance window.`, + }, + { + name: 'start_time', + type: 'string', + required: true, + description: `The start time of the maintenance window (ISO 8601 format).`, + }, + ], + }, + { + name: 'pagerduty_maintenance_window_delete', + description: `Delete a PagerDuty maintenance window. Only future and ongoing maintenance windows may be deleted.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the maintenance window to delete.`, + }, + ], + }, + { + name: 'pagerduty_maintenance_window_get', + description: `Get details of a specific PagerDuty maintenance window by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the maintenance window to retrieve.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: services, teams.`, + }, + ], + }, + { + name: 'pagerduty_maintenance_window_update', + description: `Update an existing PagerDuty maintenance window's description, start time, or end time.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the maintenance window.`, + }, + { + name: 'end_time', + type: 'string', + required: false, + description: `Updated end time of the maintenance window (ISO 8601 format).`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the maintenance window to update.`, + }, + { + name: 'start_time', + type: 'string', + required: false, + description: `Updated start time of the maintenance window (ISO 8601 format).`, + }, + ], + }, + { + name: 'pagerduty_maintenance_windows_list', + description: `List maintenance windows in PagerDuty. Maintenance windows disable incident notifications for services during scheduled maintenance periods.`, + params: [ + { + name: 'filter', + type: 'string', + required: false, + description: `Filter maintenance windows by time. Options: past, future, ongoing.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: services, teams.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by description.`, + }, + { + name: 'service_ids', + type: 'string', + required: false, + description: `Comma-separated list of service IDs to filter maintenance windows by.`, + }, + { + name: 'team_ids', + type: 'string', + required: false, + description: `Comma-separated list of team IDs to filter maintenance windows by.`, + }, + ], + }, + { + name: 'pagerduty_notifications_list', + description: `List notifications sent for incidents in a given time range. Notifications are messages sent to users when incidents are triggered, acknowledged, or resolved.`, + params: [ + { + name: 'filter', + type: 'string', + required: false, + description: `Filters the results by notification type. Options: sms_notification, email_notification, phone_notification, push_notification.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: users.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'since', + type: 'string', + required: true, + description: `The start of the date range (ISO 8601). Required.`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone for the notification data (IANA format).`, + }, + { + name: 'until', + type: 'string', + required: true, + description: `The end of the date range (ISO 8601). Required.`, + }, + ], + }, + { + name: 'pagerduty_oncalls_list', + description: `List who is on call right now or within a date range. Supports filtering by schedule, escalation policy, and user.`, + params: [ + { + name: 'earliest', + type: 'boolean', + required: false, + description: `When set to true, returns only the earliest on-call for each combination of escalation policy, escalation level, and user.`, + }, + { + name: 'escalation_policy_ids', + type: 'string', + required: false, + description: `Comma-separated list of escalation policy IDs to filter by.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: users, schedules, escalation_policies.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'schedule_ids', + type: 'string', + required: false, + description: `Comma-separated list of schedule IDs to filter by.`, + }, + { + name: 'since', + type: 'string', + required: false, + description: `The start of the time range to retrieve on-call information (ISO 8601).`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone for the on-call data (IANA format).`, + }, + { + name: 'until', + type: 'string', + required: false, + description: `The end of the time range to retrieve on-call information (ISO 8601).`, + }, + { + name: 'user_ids', + type: 'string', + required: false, + description: `Comma-separated list of user IDs to filter on-calls by.`, + }, + ], + }, + { + name: 'pagerduty_priorities_list', + description: `List the priority options available for incidents in PagerDuty. Returns all configured priority levels.`, + params: [], + }, + { + name: 'pagerduty_schedule_create', + description: `Create a new on-call schedule in PagerDuty with a single layer. Schedules determine who is on call at any given time.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `A description of the schedule.`, + }, + { + name: 'layer_name', + type: 'string', + required: false, + description: `The name of the first schedule layer.`, + }, + { + name: 'layer_start', + type: 'string', + required: true, + description: `The start time of the schedule layer (ISO 8601 format).`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the schedule.` }, + { + name: 'rotation_turn_length_seconds', + type: 'integer', + required: false, + description: `The duration of each on-call rotation turn in seconds (e.g., 86400 = 1 day, 604800 = 1 week).`, + }, + { + name: 'rotation_virtual_start', + type: 'string', + required: true, + description: `The effective start time of the rotation to align turn order (ISO 8601 format).`, + }, + { + name: 'time_zone', + type: 'string', + required: true, + description: `The time zone of the schedule (IANA format, e.g., America/New_York).`, + }, + { + name: 'user_ids', + type: 'string', + required: true, + description: `Comma-separated list of user IDs to include in the rotation.`, + }, + ], + }, + { + name: 'pagerduty_schedule_delete', + description: `Delete a PagerDuty on-call schedule. The schedule must not be associated with any escalation policies.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the schedule to delete.`, + }, + ], + }, + { + name: 'pagerduty_schedule_get', + description: `Get details of a specific PagerDuty on-call schedule by its ID, including layers and users.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the schedule to retrieve.`, + }, + { + name: 'since', + type: 'string', + required: false, + description: `The start of the date range to show schedule entries for (ISO 8601).`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Time zone of the displayed schedule (IANA format).`, + }, + { + name: 'until', + type: 'string', + required: false, + description: `The end of the date range to show schedule entries for (ISO 8601).`, + }, + ], + }, + { + name: 'pagerduty_schedule_update', + description: `Update an existing PagerDuty on-call schedule's name, description, or time zone.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the schedule.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the schedule to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the schedule.`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `Updated time zone (IANA format, e.g., America/New_York).`, + }, + ], + }, + { + name: 'pagerduty_schedules_list', + description: `List on-call schedules in PagerDuty. Supports filtering by query string and pagination.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: schedule_layers, teams, users.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by name.`, + }, + ], + }, + { + name: 'pagerduty_service_create', + description: `Create a new service in PagerDuty. A service represents something you monitor and manage incidents for.`, + params: [ + { + name: 'acknowledgement_timeout', + type: 'integer', + required: false, + description: `Time in seconds that an incident is automatically re-triggered after being acknowledged. Set to 0 to disable.`, + }, + { + name: 'alert_creation', + type: 'string', + required: false, + description: `Whether a service creates only incidents or creates both incidents and alerts. Options: create_incidents, create_alerts_and_incidents.`, + }, + { + name: 'auto_resolve_timeout', + type: 'integer', + required: false, + description: `Time in seconds that an incident is automatically resolved if left open. Set to 0 to disable.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `The user-provided description of the service.`, + }, + { + name: 'escalation_policy_id', + type: 'string', + required: true, + description: `The ID of the escalation policy to assign to this service.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the service.` }, + ], + }, + { + name: 'pagerduty_service_delete', + description: `Delete an existing PagerDuty service. This action is irreversible. Only services without open incidents may be deleted.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the service to delete.`, + }, + ], + }, + { + name: 'pagerduty_service_get', + description: `Get details of a specific PagerDuty service by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the service to retrieve.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: escalation_policies, teams, integrations.`, + }, + ], + }, + { + name: 'pagerduty_service_update', + description: `Update an existing PagerDuty service. Can change name, description, escalation policy, timeouts, and alert creation settings.`, + params: [ + { + name: 'acknowledgement_timeout', + type: 'integer', + required: false, + description: `Time in seconds that an incident is automatically re-triggered after being acknowledged.`, + }, + { + name: 'alert_creation', + type: 'string', + required: false, + description: `Whether a service creates only incidents or also alerts. Options: create_incidents, create_alerts_and_incidents.`, + }, + { + name: 'auto_resolve_timeout', + type: 'integer', + required: false, + description: `Time in seconds that an incident is automatically resolved if left open.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `The user-provided description of the service.`, + }, + { + name: 'escalation_policy_id', + type: 'string', + required: false, + description: `The ID of the escalation policy to assign to this service.`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the service to update.`, + }, + { name: 'name', type: 'string', required: false, description: `The name of the service.` }, + { + name: 'status', + type: 'string', + required: false, + description: `The current state of the service. Options: active, warning, critical, maintenance, disabled.`, + }, + ], + }, + { + name: 'pagerduty_services_list', + description: `List existing services in PagerDuty. Supports filtering by team, query string, and pagination.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: escalation_policies, teams, integrations, auto_pause_notifications_parameters.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by name.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Sort results by this field. Options: name, name:asc, name:desc.`, + }, + { + name: 'team_ids', + type: 'string', + required: false, + description: `Comma-separated list of team IDs to filter services by.`, + }, + ], + }, + { + name: 'pagerduty_team_create', + description: `Create a new team in PagerDuty. Teams allow grouping of users and services.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `A description of the team.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the team.` }, + ], + }, + { + name: 'pagerduty_team_delete', + description: `Delete a PagerDuty team. The team must have no associated users, services, or escalation policies before it can be deleted.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The ID of the team to delete.` }, + ], + }, + { + name: 'pagerduty_team_get', + description: `Get details of a specific PagerDuty team by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the team to retrieve.`, + }, + ], + }, + { + name: 'pagerduty_team_update', + description: `Update an existing PagerDuty team's name or description.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the team.`, + }, + { name: 'id', type: 'string', required: true, description: `The ID of the team to update.` }, + { + name: 'name', + type: 'string', + required: false, + description: `The updated name of the team.`, + }, + ], + }, + { + name: 'pagerduty_teams_list', + description: `List teams in PagerDuty. Supports filtering by query string and pagination.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by name.`, + }, + ], + }, + { + name: 'pagerduty_user_create', + description: `Create a new user in PagerDuty. Requires name, email, and the creating user's email in the From header.`, + params: [ + { + name: 'color', + type: 'string', + required: false, + description: `The schedule color for the user.`, + }, + { name: 'email', type: 'string', required: true, description: `The user's email address.` }, + { + name: 'from_email', + type: 'string', + required: true, + description: `The email address of the admin creating this user. Required by PagerDuty.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the user.` }, + { + name: 'role', + type: 'string', + required: false, + description: `The user's role. Options: admin, limited_user, observer, owner, read_only_user, restricted_access, read_only_limited_user, user.`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `The time zone of the user (IANA format, e.g., America/New_York).`, + }, + ], + }, + { + name: 'pagerduty_user_delete', + description: `Delete a PagerDuty user. Users cannot be deleted if they are the only remaining account owner.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The ID of the user to delete.` }, + ], + }, + { + name: 'pagerduty_user_get', + description: `Get details of a specific PagerDuty user by their ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the user to retrieve.`, + }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: contact_methods, notification_rules, teams.`, + }, + ], + }, + { + name: 'pagerduty_user_update', + description: `Update an existing PagerDuty user's profile including name, email, role, time zone, and color.`, + params: [ + { + name: 'color', + type: 'string', + required: false, + description: `The schedule color for the user.`, + }, + { + name: 'email', + type: 'string', + required: false, + description: `The user's updated email address.`, + }, + { name: 'id', type: 'string', required: true, description: `The ID of the user to update.` }, + { + name: 'name', + type: 'string', + required: false, + description: `The updated name of the user.`, + }, + { + name: 'role', + type: 'string', + required: false, + description: `The user's role. Options: admin, limited_user, observer, owner, read_only_user, restricted_access, read_only_limited_user, user.`, + }, + { + name: 'time_zone', + type: 'string', + required: false, + description: `The time zone of the user (IANA format, e.g., America/New_York).`, + }, + ], + }, + { + name: 'pagerduty_users_list', + description: `List users in PagerDuty. Supports filtering by query, team, and includes.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include. Options: contact_methods, notification_rules, teams.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by name.`, + }, + { + name: 'team_ids', + type: 'string', + required: false, + description: `Comma-separated list of team IDs to filter users by.`, + }, + ], + }, + { + name: 'pagerduty_vendors_list', + description: `List available PagerDuty vendors (integration types). Vendors represent the services or monitoring tools that can be integrated with PagerDuty.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `The number of results per page. Maximum 100.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Offset to start pagination search results.`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Filters the results by vendor name.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/phantombuster.ts b/src/data/agent-connectors/phantombuster.ts new file mode 100644 index 000000000..334b50642 --- /dev/null +++ b/src/data/agent-connectors/phantombuster.ts @@ -0,0 +1,622 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'phantombuster_agent_delete', + description: `Permanently delete a PhantomBuster agent and all its associated data. This action is irreversible.`, + params: [ + { + name: 'agentId', + type: 'string', + required: true, + description: `The unique identifier of the agent to permanently delete.`, + }, + ], + }, + { + name: 'phantombuster_agent_fetch', + description: `Retrieve details of a specific PhantomBuster agent by its ID. Returns agent name, script, schedule, launch type, argument configuration, and current status.`, + params: [ + { + name: 'agentId', + type: 'string', + required: true, + description: `The unique identifier of the agent to retrieve.`, + }, + ], + }, + { + name: 'phantombuster_agent_fetch_output', + description: `Get the output of the most recent container of an agent. Designed for incremental data retrieval — use fromOutputPos to fetch only new output since the last call.`, + params: [ + { + name: 'fromOutputPos', + type: 'number', + required: false, + description: `Start output from this byte position (for incremental fetching).`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `ID of the agent to fetch output from.`, + }, + { + name: 'prevContainerId', + type: 'string', + required: false, + description: `Retrieve output from the container after this previous container ID.`, + }, + { + name: 'prevRuntimeEventIndex', + type: 'number', + required: false, + description: `Return runtime events starting from this index.`, + }, + { + name: 'prevStatus', + type: 'string', + required: false, + description: `Previously retrieved status from user-side (for delta detection).`, + }, + ], + }, + { + name: 'phantombuster_agent_launch', + description: `Launch a PhantomBuster automation agent asynchronously. Starts the agent execution immediately and returns a container ID to track progress. Use the Get Container Output or Get Container Result tools to retrieve results.`, + params: [ + { + name: 'agentId', + type: 'string', + required: true, + description: `The unique identifier of the agent to launch.`, + }, + { + name: 'arguments', + type: 'object', + required: false, + description: `JSON object of input arguments to pass to the agent for this execution.`, + }, + { + name: 'output', + type: 'string', + required: false, + description: `Output mode for the launch response.`, + }, + { + name: 'saveArguments', + type: 'boolean', + required: false, + description: `Whether to persist the provided arguments as the agent's default arguments for future launches.`, + }, + ], + }, + { + name: 'phantombuster_agent_launch_soon', + description: `Schedule a PhantomBuster agent to launch within a specified number of minutes. Useful for delayed execution without setting up a full recurring schedule.`, + params: [ + { + name: 'argument', + type: 'object', + required: false, + description: `Input arguments to pass to the agent for this execution (object or JSON string).`, + }, + { name: 'id', type: 'string', required: true, description: `ID of the agent to schedule.` }, + { + name: 'minutes', + type: 'integer', + required: true, + description: `Number of minutes from now after which the agent will launch.`, + }, + { + name: 'saveArgument', + type: 'boolean', + required: false, + description: `If true, saves the provided argument as the agent's default for future launches.`, + }, + ], + }, + { + name: 'phantombuster_agent_save', + description: `Create a new PhantomBuster agent or update an existing one. Supports configuring the script, schedule, proxy, notifications, execution limits, and launch arguments. Pass an ID to update; omit to create.`, + params: [ + { + name: 'argument', + type: 'object', + required: false, + description: `Default launch argument for the agent (object or JSON string).`, + }, + { + name: 'branch', + type: 'string', + required: false, + description: `Script branch to use (e.g., main, staging).`, + }, + { + name: 'executionTimeLimit', + type: 'number', + required: false, + description: `Maximum execution time in seconds before the agent is killed.`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `ID of the agent to update. Omit to create a new agent.`, + }, + { + name: 'launchType', + type: 'string', + required: false, + description: `How the agent is launched.`, + }, + { + name: 'maxParallelism', + type: 'number', + required: false, + description: `Maximum number of concurrent executions allowed for this agent.`, + }, + { + name: 'maxRetryNumber', + type: 'number', + required: false, + description: `Maximum number of retries before aborting on failure.`, + }, + { name: 'name', type: 'string', required: false, description: `Display name for the agent.` }, + { + name: 'proxyAddress', + type: 'string', + required: false, + description: `HTTP proxy address or proxy pool name.`, + }, + { + name: 'proxyPassword', + type: 'string', + required: false, + description: `Proxy authentication password.`, + }, + { + name: 'proxyType', + type: 'string', + required: false, + description: `Proxy configuration type.`, + }, + { + name: 'proxyUsername', + type: 'string', + required: false, + description: `Proxy authentication username.`, + }, + { + name: 'script', + type: 'string', + required: false, + description: `Script slug or name to assign to this agent.`, + }, + ], + }, + { + name: 'phantombuster_agent_stop', + description: `Stop a currently running PhantomBuster agent execution. Gracefully halts the agent and saves any partial results collected up to that point.`, + params: [ + { + name: 'agentId', + type: 'string', + required: true, + description: `The unique identifier of the agent to stop.`, + }, + ], + }, + { + name: 'phantombuster_agents_fetch_all', + description: `Retrieve all automation agents in the PhantomBuster organization. Returns agent IDs, names, associated scripts, schedules, and current status.`, + params: [], + }, + { + name: 'phantombuster_agents_fetch_deleted', + description: `Retrieve all deleted agents in the PhantomBuster organization. Returns agent IDs, names, creation timestamps, deletion timestamps, and who deleted each agent.`, + params: [], + }, + { + name: 'phantombuster_agents_unschedule_all', + description: `Disable automatic launch for ALL agents in the current PhantomBuster organization. Agents will remain but will only run when launched manually.`, + params: [], + }, + { + name: 'phantombuster_ai_completions', + description: `Get an AI text completion from PhantomBuster's AI service. Supports multiple models including GPT-4o and GPT-4.1-mini. Optionally request structured JSON output via a response schema.`, + params: [ + { + name: 'messages', + type: 'array', + required: true, + description: `Array of conversation messages. Each must have a role (system, assistant, or user) and content string.`, + }, + { + name: 'model', + type: 'string', + required: false, + description: `AI model to use for the completion.`, + }, + { + name: 'temperature', + type: 'number', + required: false, + description: `Sampling temperature (0–2). Lower = more deterministic, higher = more creative.`, + }, + ], + }, + { + name: 'phantombuster_branch_create', + description: `Create a new script branch in the current PhantomBuster organization.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Name for the new branch. Only letters, numbers, underscores, and hyphens allowed. Max 50 characters.`, + }, + ], + }, + { + name: 'phantombuster_branch_delete', + description: `Permanently delete a branch by ID from the current PhantomBuster organization.`, + params: [ + { name: 'id', type: 'string', required: true, description: `ID of the branch to delete.` }, + ], + }, + { + name: 'phantombuster_branch_release', + description: `Release (promote to production) specified scripts on a branch in the current PhantomBuster organization.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Name of the branch to release.`, + }, + { + name: 'scriptIds', + type: 'array', + required: true, + description: `Array of script IDs to release on this branch.`, + }, + ], + }, + { + name: 'phantombuster_branches_fetch_all', + description: `Retrieve all branches associated with the current PhantomBuster organization.`, + params: [], + }, + { + name: 'phantombuster_container_attach', + description: `Attach to a running PhantomBuster container and stream its console output in real-time. Returns a live stream of log lines as the agent executes.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `ID of the running container to attach to.`, + }, + ], + }, + { + name: 'phantombuster_container_fetch', + description: `Retrieve a single PhantomBuster container by its ID. Returns status, timestamps, launch type, exit code, and optionally the full output, result object, and runtime events.`, + params: [ + { name: 'id', type: 'string', required: true, description: `ID of the container to fetch.` }, + { + name: 'withNewerAndOlderContainerId', + type: 'boolean', + required: false, + description: `Set to true to include the IDs of the next and previous containers for this agent.`, + }, + { + name: 'withOutput', + type: 'boolean', + required: false, + description: `Set to true to include the container's console output.`, + }, + { + name: 'withResultObject', + type: 'boolean', + required: false, + description: `Set to true to include the container's result object.`, + }, + { + name: 'withRuntimeEvents', + type: 'boolean', + required: false, + description: `Set to true to include runtime events (progress, notifications, etc.).`, + }, + ], + }, + { + name: 'phantombuster_container_fetch_output', + description: `Retrieve the console output and execution logs of a specific PhantomBuster container (agent run). Useful for monitoring execution progress, debugging errors, and viewing step-by-step agent activity.`, + params: [ + { + name: 'containerId', + type: 'string', + required: true, + description: `The unique identifier of the container whose output to retrieve.`, + }, + ], + }, + { + name: 'phantombuster_container_fetch_result', + description: `Retrieve the final result object of a completed PhantomBuster container (agent run). Returns the structured data extracted or produced by the agent, such as scraped profiles, leads, or exported records.`, + params: [ + { + name: 'containerId', + type: 'string', + required: true, + description: `The unique identifier of the container whose result to retrieve.`, + }, + ], + }, + { + name: 'phantombuster_containers_fetch_all', + description: `Retrieve all execution containers (past runs) for a specific PhantomBuster agent. Returns container IDs, status, launch type, exit codes, timestamps, and runtime events for each execution.`, + params: [ + { + name: 'agentId', + type: 'string', + required: true, + description: `The unique identifier of the agent whose containers to retrieve.`, + }, + ], + }, + { + name: 'phantombuster_leads_delete_many', + description: `Permanently delete multiple leads from PhantomBuster organization storage by their IDs.`, + params: [ + { name: 'ids', type: 'array', required: true, description: `Array of lead IDs to delete.` }, + ], + }, + { + name: 'phantombuster_leads_fetch_by_list', + description: `Fetch paginated leads belonging to a specific lead list in PhantomBuster organization storage.`, + params: [ + { + name: 'includeTotalCount', + type: 'boolean', + required: false, + description: `Include the total count of leads in the response.`, + }, + { + name: 'listId', + type: 'string', + required: true, + description: `ID of the lead list to fetch leads from.`, + }, + { + name: 'paginationOffset', + type: 'integer', + required: false, + description: `Offset for pagination.`, + }, + { + name: 'paginationOrder', + type: 'string', + required: false, + description: `Sort order for pagination.`, + }, + { + name: 'paginationSize', + type: 'integer', + required: false, + description: `Number of leads per page.`, + }, + ], + }, + { + name: 'phantombuster_leads_save', + description: `Save a single lead to PhantomBuster organization storage.`, + params: [ + { name: 'lead', type: 'object', required: true, description: `Lead data object to save.` }, + ], + }, + { + name: 'phantombuster_leads_save_many', + description: `Save multiple leads at once to PhantomBuster organization storage.`, + params: [ + { + name: 'leads', + type: 'array', + required: true, + description: `Array of lead objects to save.`, + }, + ], + }, + { + name: 'phantombuster_list_delete', + description: `Permanently delete a lead list from PhantomBuster organization storage by its ID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `ID of the lead list to delete.` }, + ], + }, + { + name: 'phantombuster_list_fetch', + description: `Retrieve a specific lead list from PhantomBuster organization storage by its ID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `ID of the lead list to fetch.` }, + ], + }, + { + name: 'phantombuster_lists_fetch_all', + description: `Retrieve all lead lists in the PhantomBuster organization's storage.`, + params: [], + }, + { + name: 'phantombuster_location_ip', + description: `Retrieve the country associated with an IPv4 or IPv6 address using PhantomBuster's geolocation service.`, + params: [ + { + name: 'ip', + type: 'string', + required: true, + description: `IPv4 or IPv6 address to look up.`, + }, + ], + }, + { + name: 'phantombuster_org_export_agent_usage', + description: `Export a CSV file containing agent usage metrics for the current PhantomBuster organization over a specified number of days (max 6 months).`, + params: [ + { + name: 'days', + type: 'string', + required: true, + description: `Number of days of usage data to export. Maximum is ~180 days (6 months).`, + }, + ], + }, + { + name: 'phantombuster_org_export_container_usage', + description: `Export a CSV file containing container usage metrics for the current PhantomBuster organization. Optionally filter to a specific agent.`, + params: [ + { + name: 'agentId', + type: 'string', + required: false, + description: `Filter the export to a specific agent ID.`, + }, + { + name: 'days', + type: 'string', + required: true, + description: `Number of days of usage data to export. Maximum is ~180 days (6 months).`, + }, + ], + }, + { + name: 'phantombuster_org_fetch', + description: `Retrieve details of the current PhantomBuster organization including plan, billing, timezone, proxy config, and CRM integrations.`, + params: [ + { + name: 'withCrmIntegrations', + type: 'boolean', + required: false, + description: `Include the organization's CRM integrations.`, + }, + { + name: 'withCustomPrompts', + type: 'boolean', + required: false, + description: `Include the organization's custom prompts.`, + }, + { + name: 'withGlobalObject', + type: 'boolean', + required: false, + description: `Include the organization's global object in the response.`, + }, + { + name: 'withProxies', + type: 'boolean', + required: false, + description: `Include the organization's proxy pool configuration.`, + }, + ], + }, + { + name: 'phantombuster_org_fetch_agent_groups', + description: `Retrieve the agent groups and their ordering for the current PhantomBuster organization.`, + params: [], + }, + { + name: 'phantombuster_org_fetch_resources', + description: `Retrieve the current PhantomBuster organization's resource usage and limits. Returns daily and monthly usage for execution time, mail, captcha, AI credits, SERP credits, storage, and agent count.`, + params: [], + }, + { + name: 'phantombuster_org_fetch_running_containers', + description: `List all currently executing containers across the PhantomBuster organization. Returns container IDs, associated agent IDs/names, creation timestamps, launch types, and script slugs.`, + params: [], + }, + { + name: 'phantombuster_org_save_agent_groups', + description: `Update the agent groups and their ordering for the current PhantomBuster organization. The order of groups and agents within groups is preserved as provided.`, + params: [ + { + name: 'agentGroups', + type: 'array', + required: true, + description: `Array of agent groups. Each item is either an agent ID string or an object with id, name, and agents array.`, + }, + ], + }, + { + name: 'phantombuster_org_save_crm_contact', + description: `Save a new contact to the organization's connected CRM (HubSpot). Requires a CRM integration to be configured in the PhantomBuster organization settings.`, + params: [ + { + name: 'company', + type: 'string', + required: false, + description: `Company the contact works at.`, + }, + { + name: 'crmName', + type: 'string', + required: true, + description: `The CRM to save the contact to.`, + }, + { name: 'email', type: 'string', required: false, description: `Contact's email address.` }, + { name: 'firstname', type: 'string', required: true, description: `Contact's first name.` }, + { name: 'jobtitle', type: 'string', required: false, description: `Contact's job title.` }, + { name: 'lastname', type: 'string', required: true, description: `Contact's last name.` }, + { + name: 'pb_linkedin_profile_url', + type: 'string', + required: true, + description: `LinkedIn profile URL of the contact.`, + }, + { name: 'phone', type: 'string', required: false, description: `Contact's phone number.` }, + ], + }, + { + name: 'phantombuster_script_fetch', + description: `Retrieve a specific PhantomBuster script by ID including its manifest, argument schema, output types, and optionally the full source code.`, + params: [ + { + name: 'branch', + type: 'string', + required: false, + description: `Branch of the script to fetch.`, + }, + { name: 'id', type: 'string', required: true, description: `ID of the script to fetch.` }, + { + name: 'withCode', + type: 'boolean', + required: false, + description: `Set to true to include the script's source code in the response.`, + }, + ], + }, + { + name: 'phantombuster_scripts_fetch_all', + description: `Retrieve all scripts associated with the current PhantomBuster user. Returns script IDs, names, slugs, descriptions, branches, and manifest details.`, + params: [ + { + name: 'branch', + type: 'string', + required: false, + description: `Filter scripts by branch name.`, + }, + { + name: 'exclude', + type: 'string', + required: false, + description: `Exclude modules or non-modules from results.`, + }, + { + name: 'org', + type: 'string', + required: false, + description: `Filter scripts by organization.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/pipedrive.ts b/src/data/agent-connectors/pipedrive.ts new file mode 100644 index 000000000..48bef667b --- /dev/null +++ b/src/data/agent-connectors/pipedrive.ts @@ -0,0 +1,1676 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'pipedrive_activities_list', + description: `Retrieve a list of activities from Pipedrive. Filter by owner, deal, person, organization, completion status, and date range.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'deal_id', + type: 'integer', + required: false, + description: `Filter activities by deal ID.`, + }, + { + name: 'done', + type: 'boolean', + required: false, + description: `Filter by completion status: true for done, false for undone.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of activities to return per page (max 500).`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `Filter activities by organization ID.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `Filter activities by owner user ID.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter activities by person ID.`, + }, + { + name: 'updated_since', + type: 'string', + required: false, + description: `Filter activities updated after this RFC3339 datetime.`, + }, + ], + }, + { + name: 'pipedrive_activity_create', + description: `Create a new activity in Pipedrive such as a call, meeting, email, or task. Associate it with a deal, person, or organization.`, + params: [ + { + name: 'deal_id', + type: 'integer', + required: false, + description: `ID of the deal to associate this activity with.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Due date of the activity in YYYY-MM-DD format.`, + }, + { + name: 'due_time', + type: 'string', + required: false, + description: `Due time of the activity in HH:MM format.`, + }, + { + name: 'note', + type: 'string', + required: false, + description: `Note or description for the activity.`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `ID of the organization to associate this activity with.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user responsible for this activity.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `ID of the person to associate this activity with.`, + }, + { + name: 'subject', + type: 'string', + required: true, + description: `Subject/title of the activity.`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Type of activity (e.g., call, meeting, email, task, deadline, lunch).`, + }, + ], + }, + { + name: 'pipedrive_activity_delete', + description: `Delete an activity from Pipedrive by its ID. After 30 days it will be permanently removed.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the activity to delete.`, + }, + ], + }, + { + name: 'pipedrive_activity_update', + description: `Update an existing activity in Pipedrive. Modify subject, type, due date/time, note, completion status, or associations.`, + params: [ + { + name: 'deal_id', + type: 'integer', + required: false, + description: `ID of the deal to associate this activity with.`, + }, + { + name: 'done', + type: 'boolean', + required: false, + description: `Mark the activity as done (true) or undone (false).`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Updated due date in YYYY-MM-DD format.`, + }, + { + name: 'due_time', + type: 'string', + required: false, + description: `Updated due time in HH:MM format.`, + }, + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the activity to update.`, + }, + { + name: 'note', + type: 'string', + required: false, + description: `Updated note or description for the activity.`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `Updated subject/title of the activity.`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Updated type of activity (e.g., call, meeting, email, task).`, + }, + ], + }, + { + name: 'pipedrive_deal_create', + description: `Create a new deal in Pipedrive with a title, value, currency, pipeline, stage, associated person and organization.`, + params: [ + { + name: 'currency', + type: 'string', + required: false, + description: `Currency code for the deal value (e.g., USD, EUR).`, + }, + { + name: 'expected_close_date', + type: 'string', + required: false, + description: `Expected close date in YYYY-MM-DD format.`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `ID of the organization to associate with this deal.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this deal.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `ID of the person to associate with this deal.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: false, + description: `ID of the pipeline to place this deal in.`, + }, + { + name: 'stage_id', + type: 'integer', + required: false, + description: `ID of the pipeline stage for this deal.`, + }, + { name: 'title', type: 'string', required: true, description: `Title of the deal.` }, + { + name: 'value', + type: 'number', + required: false, + description: `Monetary value of the deal.`, + }, + ], + }, + { + name: 'pipedrive_deal_delete', + description: `Delete a deal from Pipedrive by its ID. This action marks the deal as deleted.`, + params: [ + { name: 'id', type: 'integer', required: true, description: `The ID of the deal to delete.` }, + ], + }, + { + name: 'pipedrive_deal_get', + description: `Retrieve details of a specific deal in Pipedrive by its ID, including title, value, status, pipeline stage, associated person and organization.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the deal to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_deal_update', + description: `Update an existing deal in Pipedrive. Modify title, value, status, pipeline stage, associated person, organization, or close date.`, + params: [ + { + name: 'currency', + type: 'string', + required: false, + description: `Currency code for the deal value (e.g., USD, EUR).`, + }, + { + name: 'expected_close_date', + type: 'string', + required: false, + description: `Expected close date in YYYY-MM-DD format.`, + }, + { name: 'id', type: 'integer', required: true, description: `The ID of the deal to update.` }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `ID of the organization to associate with this deal.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this deal.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `ID of the person to associate with this deal.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: false, + description: `ID of the pipeline for this deal.`, + }, + { + name: 'stage_id', + type: 'integer', + required: false, + description: `ID of the pipeline stage for this deal.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Status of the deal: open, won, or lost.`, + }, + { name: 'title', type: 'string', required: false, description: `New title for the deal.` }, + { + name: 'value', + type: 'number', + required: false, + description: `Monetary value of the deal.`, + }, + ], + }, + { + name: 'pipedrive_deals_list', + description: `Retrieve a list of deals from Pipedrive. Filter by owner, person, organization, pipeline, stage, and status with cursor-based pagination.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'filter_id', + type: 'integer', + required: false, + description: `ID of a saved filter to apply.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of deals to return per page (max 500).`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `Filter deals by organization ID.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `Filter deals by owner user ID.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter deals by person ID.`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: false, + description: `Filter deals by pipeline ID.`, + }, + { + name: 'stage_id', + type: 'integer', + required: false, + description: `Filter deals by stage ID.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter deals by status: open, won, lost, or all_not_deleted.`, + }, + ], + }, + { + name: 'pipedrive_deals_search', + description: `Search for deals in Pipedrive by a search term across title and other fields. Supports filtering by person, organization, and status.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'exact_match', + type: 'boolean', + required: false, + description: `When true, only results with exact case-insensitive match are returned.`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to search in (e.g., title,notes,custom_fields).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of results per page (max 500).`, + }, + { + name: 'organization_id', + type: 'integer', + required: false, + description: `Filter results by organization ID.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter results by person ID.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Filter by deal status: open, won, or lost.`, + }, + { + name: 'term', + type: 'string', + required: true, + description: `Search term to find matching deals. Minimum 2 characters.`, + }, + ], + }, + { + name: 'pipedrive_file_delete', + description: `Delete a file from Pipedrive by its ID.`, + params: [ + { name: 'id', type: 'integer', required: true, description: `The ID of the file to delete.` }, + ], + }, + { + name: 'pipedrive_file_get', + description: `Retrieve metadata of a specific file in Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the file to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_files_list', + description: `Retrieve a list of files attached to Pipedrive records with pagination and sorting.`, + params: [ + { name: 'limit', type: 'integer', required: false, description: `Number of files per page.` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Field and direction to sort by (e.g., id DESC, add_time ASC).`, + }, + { name: 'start', type: 'integer', required: false, description: `Pagination start offset.` }, + ], + }, + { + name: 'pipedrive_goal_create', + description: `Create a new goal in Pipedrive to track team or individual performance metrics.`, + params: [ + { + name: 'assignee_id', + type: 'integer', + required: true, + description: `ID of the user or team assigned to this goal.`, + }, + { + name: 'assignee_type', + type: 'string', + required: true, + description: `Type of assignee: person or team.`, + }, + { + name: 'duration_end', + type: 'string', + required: true, + description: `Goal end date in YYYY-MM-DD format.`, + }, + { + name: 'duration_start', + type: 'string', + required: true, + description: `Goal start date in YYYY-MM-DD format.`, + }, + { + name: 'interval', + type: 'string', + required: true, + description: `Goal tracking interval: weekly, monthly, quarterly, or yearly.`, + }, + { name: 'target', type: 'number', required: true, description: `Target value for the goal.` }, + { name: 'title', type: 'string', required: true, description: `Title of the goal.` }, + { + name: 'tracking_metric', + type: 'string', + required: true, + description: `What to track: count or sum.`, + }, + { + name: 'type_name', + type: 'string', + required: true, + description: `Goal type: deals_won, deals_progressed, activities_completed, activities_added, or revenue_forecast.`, + }, + ], + }, + { + name: 'pipedrive_goal_delete', + description: `Delete a goal from Pipedrive by its ID.`, + params: [ + { name: 'id', type: 'string', required: true, description: `The ID of the goal to delete.` }, + ], + }, + { + name: 'pipedrive_goal_update', + description: `Update an existing goal in Pipedrive. Modify title, assignee, target, interval, or duration.`, + params: [ + { + name: 'assignee_id', + type: 'integer', + required: false, + description: `Updated assignee user or team ID.`, + }, + { + name: 'assignee_type', + type: 'string', + required: false, + description: `Updated assignee type: person or team.`, + }, + { + name: 'duration_end', + type: 'string', + required: false, + description: `Updated goal end date in YYYY-MM-DD format.`, + }, + { + name: 'duration_start', + type: 'string', + required: false, + description: `Updated goal start date in YYYY-MM-DD format.`, + }, + { name: 'id', type: 'string', required: true, description: `The ID of the goal to update.` }, + { + name: 'interval', + type: 'string', + required: false, + description: `Updated tracking interval: weekly, monthly, quarterly, or yearly.`, + }, + { name: 'target', type: 'number', required: false, description: `Updated target value.` }, + { name: 'title', type: 'string', required: false, description: `Updated title of the goal.` }, + ], + }, + { + name: 'pipedrive_goals_find', + description: `Search and filter goals in Pipedrive by type, title, assignee, and time period.`, + params: [ + { + name: 'assignee_id', + type: 'integer', + required: false, + description: `Filter goals by assignee user or team ID.`, + }, + { + name: 'assignee_type', + type: 'string', + required: false, + description: `Type of assignee: person or team.`, + }, + { + name: 'is_active', + type: 'boolean', + required: false, + description: `Filter by active status: true for active, false for inactive.`, + }, + { + name: 'period_end', + type: 'string', + required: false, + description: `Goal period end date in YYYY-MM-DD format.`, + }, + { + name: 'period_start', + type: 'string', + required: false, + description: `Goal period start date in YYYY-MM-DD format.`, + }, + { name: 'title', type: 'string', required: false, description: `Filter goals by title.` }, + { + name: 'type_name', + type: 'string', + required: false, + description: `Filter by goal type: deals_won, deals_progressed, activities_completed, activities_added, revenue_forecast.`, + }, + ], + }, + { + name: 'pipedrive_lead_create', + description: `Create a new lead in Pipedrive with a title and optional associations to a person or organization.`, + params: [ + { + name: 'organization_id', + type: 'integer', + required: false, + description: `ID of the organization to associate this lead with.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this lead.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `ID of the person to associate this lead with.`, + }, + { name: 'title', type: 'string', required: true, description: `Title of the lead.` }, + ], + }, + { + name: 'pipedrive_lead_delete', + description: `Delete a lead from Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The UUID of the lead to delete.`, + }, + ], + }, + { + name: 'pipedrive_lead_get', + description: `Retrieve details of a specific lead in Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The UUID of the lead to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_lead_update', + description: `Update an existing lead in Pipedrive. Modify title, owner, person, organization, or status.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The UUID of the lead to update.`, + }, + { + name: 'is_archived', + type: 'boolean', + required: false, + description: `Whether to archive this lead.`, + }, + { + name: 'organization_id', + type: 'integer', + required: false, + description: `ID of the organization to associate this lead with.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this lead.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `ID of the person to associate this lead with.`, + }, + { name: 'title', type: 'string', required: false, description: `Updated title of the lead.` }, + ], + }, + { + name: 'pipedrive_leads_list', + description: `Retrieve a list of leads from Pipedrive with pagination. Filter by owner, person, or organization.`, + params: [ + { + name: 'filter_id', + type: 'integer', + required: false, + description: `ID of a saved filter to apply.`, + }, + { name: 'limit', type: 'integer', required: false, description: `Number of leads per page.` }, + { + name: 'organization_id', + type: 'integer', + required: false, + description: `Filter leads by organization ID.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `Filter leads by owner user ID.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter leads by person ID.`, + }, + { name: 'start', type: 'integer', required: false, description: `Pagination start offset.` }, + ], + }, + { + name: 'pipedrive_leads_search', + description: `Search for leads in Pipedrive by title, notes, or custom fields.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'exact_match', + type: 'boolean', + required: false, + description: `When true, only exact case-insensitive matches are returned.`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated fields to search in (e.g., title,notes,custom_fields).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of results per page (max 500).`, + }, + { + name: 'organization_id', + type: 'integer', + required: false, + description: `Filter results by organization ID.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter results by person ID.`, + }, + { + name: 'term', + type: 'string', + required: true, + description: `Search term. Minimum 2 characters.`, + }, + ], + }, + { + name: 'pipedrive_note_create', + description: `Create a new note in Pipedrive and associate it with a deal, person, organization, or lead.`, + params: [ + { name: 'content', type: 'string', required: true, description: `HTML content of the note.` }, + { + name: 'deal_id', + type: 'integer', + required: false, + description: `ID of the deal to attach this note to.`, + }, + { + name: 'lead_id', + type: 'string', + required: false, + description: `UUID of the lead to attach this note to.`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `ID of the organization to attach this note to.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `ID of the person to attach this note to.`, + }, + ], + }, + { + name: 'pipedrive_note_delete', + description: `Delete a note from Pipedrive by its ID.`, + params: [ + { name: 'id', type: 'integer', required: true, description: `The ID of the note to delete.` }, + ], + }, + { + name: 'pipedrive_note_update', + description: `Update the content of an existing note in Pipedrive.`, + params: [ + { + name: 'content', + type: 'string', + required: true, + description: `Updated HTML content of the note.`, + }, + { name: 'id', type: 'integer', required: true, description: `The ID of the note to update.` }, + ], + }, + { + name: 'pipedrive_notes_list', + description: `Retrieve a list of notes from Pipedrive. Filter by deal, person, organization, lead, or date range.`, + params: [ + { + name: 'deal_id', + type: 'integer', + required: false, + description: `Filter notes by deal ID.`, + }, + { + name: 'lead_id', + type: 'string', + required: false, + description: `Filter notes by lead UUID.`, + }, + { name: 'limit', type: 'integer', required: false, description: `Number of notes per page.` }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `Filter notes by organization ID.`, + }, + { + name: 'person_id', + type: 'integer', + required: false, + description: `Filter notes by person ID.`, + }, + { name: 'start', type: 'integer', required: false, description: `Pagination start offset.` }, + { + name: 'user_id', + type: 'integer', + required: false, + description: `Filter notes by the user who created them.`, + }, + ], + }, + { + name: 'pipedrive_organization_create', + description: `Create a new organization (company) in Pipedrive with a name, address, and optional owner.`, + params: [ + { + name: 'address', + type: 'string', + required: false, + description: `Physical address of the organization.`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the organization.` }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this organization.`, + }, + ], + }, + { + name: 'pipedrive_organization_delete', + description: `Delete an organization from Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the organization to delete.`, + }, + ], + }, + { + name: 'pipedrive_organization_get', + description: `Retrieve details of a specific organization in Pipedrive by its ID, including name, address, and associated deals and contacts.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the organization to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_organization_update', + description: `Update an existing organization in Pipedrive. Modify name, address, or owner.`, + params: [ + { + name: 'address', + type: 'string', + required: false, + description: `Updated physical address of the organization.`, + }, + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the organization to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the organization.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this organization.`, + }, + ], + }, + { + name: 'pipedrive_organizations_list', + description: `Retrieve a list of organizations (companies) from Pipedrive with cursor-based pagination and optional filtering.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'filter_id', + type: 'integer', + required: false, + description: `ID of a saved filter to apply.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of organizations to return per page (max 500).`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `Filter organizations by owner user ID.`, + }, + ], + }, + { + name: 'pipedrive_organizations_search', + description: `Search for organizations in Pipedrive by a search term across name, address, and custom fields.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'exact_match', + type: 'boolean', + required: false, + description: `When true, only exact case-insensitive matches are returned.`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated fields to search in (e.g., name,address,custom_fields).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of results per page (max 500).`, + }, + { + name: 'term', + type: 'string', + required: true, + description: `Search term. Minimum 2 characters.`, + }, + ], + }, + { + name: 'pipedrive_person_create', + description: `Create a new person (contact) in Pipedrive with name, email, phone, and optional organization association.`, + params: [ + { + name: 'email', + type: 'string', + required: false, + description: `Email address of the person.`, + }, + { name: 'name', type: 'string', required: true, description: `Full name of the person.` }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `ID of the organization to associate this person with.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this person record.`, + }, + { + name: 'phone', + type: 'string', + required: false, + description: `Phone number of the person.`, + }, + ], + }, + { + name: 'pipedrive_person_delete', + description: `Delete a person (contact) from Pipedrive by their ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the person to delete.`, + }, + ], + }, + { + name: 'pipedrive_person_get', + description: `Retrieve details of a specific person (contact) in Pipedrive by their ID, including name, emails, phones, and associated organization.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the person to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_person_update', + description: `Update an existing person (contact) in Pipedrive. Modify name, email, phone, organization, or owner.`, + params: [ + { + name: 'email', + type: 'string', + required: false, + description: `Updated email address of the person.`, + }, + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the person to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated full name of the person.`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `ID of the organization to associate this person with.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this person record.`, + }, + { + name: 'phone', + type: 'string', + required: false, + description: `Updated phone number of the person.`, + }, + ], + }, + { + name: 'pipedrive_persons_list', + description: `Retrieve a list of persons (contacts) from Pipedrive. Filter by owner, organization, or deal with cursor-based pagination.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'deal_id', + type: 'integer', + required: false, + description: `Filter persons by associated deal ID.`, + }, + { + name: 'filter_id', + type: 'integer', + required: false, + description: `ID of a saved filter to apply.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of persons to return per page (max 500).`, + }, + { + name: 'org_id', + type: 'integer', + required: false, + description: `Filter persons by organization ID.`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `Filter persons by owner user ID.`, + }, + ], + }, + { + name: 'pipedrive_persons_search', + description: `Search for persons (contacts) in Pipedrive by name, email, phone, or custom fields.`, + params: [ + { + name: 'exact_match', + type: 'boolean', + required: false, + description: `When true, only results with exact case-insensitive match are returned.`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to search in (e.g., name,email,phone,custom_fields).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of results per page (max 500).`, + }, + { + name: 'organization_id', + type: 'integer', + required: false, + description: `Filter results by organization ID.`, + }, + { + name: 'term', + type: 'string', + required: true, + description: `Search term to find matching persons. Minimum 2 characters.`, + }, + ], + }, + { + name: 'pipedrive_pipeline_create', + description: `Create a new sales pipeline in Pipedrive with a name and optional deal probability setting.`, + params: [ + { + name: 'is_deal_probability_enabled', + type: 'boolean', + required: false, + description: `Whether deal probability is enabled for this pipeline.`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the pipeline.` }, + ], + }, + { + name: 'pipedrive_pipeline_delete', + description: `Delete a sales pipeline from Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the pipeline to delete.`, + }, + ], + }, + { + name: 'pipedrive_pipeline_get', + description: `Retrieve details of a specific sales pipeline in Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the pipeline to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_pipeline_update', + description: `Update an existing sales pipeline in Pipedrive. Modify name or deal probability settings.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the pipeline to update.`, + }, + { + name: 'is_deal_probability_enabled', + type: 'boolean', + required: false, + description: `Whether deal probability is enabled for this pipeline.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the pipeline.`, + }, + ], + }, + { + name: 'pipedrive_pipelines_list', + description: `Retrieve all sales pipelines from Pipedrive with their stages and configuration.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of pipelines per page (max 500).`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Field to sort results by: id, update_time, or add_time.`, + }, + { + name: 'sort_direction', + type: 'string', + required: false, + description: `Sort direction: asc or desc.`, + }, + ], + }, + { + name: 'pipedrive_product_create', + description: `Create a new product in Pipedrive with name, price, description, and other attributes.`, + params: [ + { name: 'code', type: 'string', required: false, description: `Product code or SKU.` }, + { + name: 'description', + type: 'string', + required: false, + description: `Description of the product.`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the product.` }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `ID of the user who owns this product.`, + }, + { + name: 'tax', + type: 'number', + required: false, + description: `Tax rate for this product (percentage).`, + }, + { + name: 'unit', + type: 'string', + required: false, + description: `Unit of measurement for this product.`, + }, + ], + }, + { + name: 'pipedrive_product_delete', + description: `Delete a product from Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the product to delete.`, + }, + ], + }, + { + name: 'pipedrive_product_get', + description: `Retrieve details of a specific product in Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the product to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_product_update', + description: `Update an existing product in Pipedrive. Modify name, code, description, unit, tax, or owner.`, + params: [ + { + name: 'code', + type: 'string', + required: false, + description: `Updated product code or SKU.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the product.`, + }, + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the product to update.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name of the product.`, + }, + { name: 'owner_id', type: 'integer', required: false, description: `Updated owner user ID.` }, + { + name: 'tax', + type: 'number', + required: false, + description: `Updated tax rate (percentage).`, + }, + { + name: 'unit', + type: 'string', + required: false, + description: `Updated unit of measurement.`, + }, + ], + }, + { + name: 'pipedrive_products_list', + description: `Retrieve a list of products from Pipedrive with cursor-based pagination and optional filtering.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'filter_id', + type: 'integer', + required: false, + description: `ID of a saved filter to apply.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of products per page (max 500).`, + }, + { + name: 'owner_id', + type: 'integer', + required: false, + description: `Filter products by owner user ID.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Field to sort by (e.g., id, update_time, add_time, name).`, + }, + { + name: 'sort_direction', + type: 'string', + required: false, + description: `Sort direction: asc or desc.`, + }, + ], + }, + { + name: 'pipedrive_products_search', + description: `Search for products in Pipedrive by name, code, or custom fields.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'exact_match', + type: 'boolean', + required: false, + description: `When true, only exact case-insensitive matches are returned.`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated fields to search in (e.g., name,code,description).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of results per page (max 500).`, + }, + { + name: 'term', + type: 'string', + required: true, + description: `Search term. Minimum 2 characters.`, + }, + ], + }, + { + name: 'pipedrive_stage_create', + description: `Create a new stage in a Pipedrive pipeline with a name and optional deal probability settings.`, + params: [ + { + name: 'days_to_rotten', + type: 'integer', + required: false, + description: `Number of days a deal stays in this stage before it's marked as rotten.`, + }, + { + name: 'deal_probability', + type: 'integer', + required: false, + description: `Deal success probability for this stage (0-100).`, + }, + { + name: 'is_deal_rot_enabled', + type: 'boolean', + required: false, + description: `Whether rotten flag is enabled for deals in this stage.`, + }, + { name: 'name', type: 'string', required: true, description: `Name of the stage.` }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `ID of the pipeline this stage belongs to.`, + }, + ], + }, + { + name: 'pipedrive_stage_delete', + description: `Delete a pipeline stage from Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the stage to delete.`, + }, + ], + }, + { + name: 'pipedrive_stage_get', + description: `Retrieve details of a specific pipeline stage in Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the stage to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_stage_update', + description: `Update an existing pipeline stage in Pipedrive. Modify name, pipeline, deal probability, or rotten settings.`, + params: [ + { + name: 'days_to_rotten', + type: 'integer', + required: false, + description: `Number of days before a deal is marked as rotten.`, + }, + { + name: 'deal_probability', + type: 'integer', + required: false, + description: `Deal success probability for this stage (0-100).`, + }, + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the stage to update.`, + }, + { + name: 'is_deal_rot_enabled', + type: 'boolean', + required: false, + description: `Whether rotten flag is enabled for deals in this stage.`, + }, + { name: 'name', type: 'string', required: false, description: `Updated name of the stage.` }, + { + name: 'pipeline_id', + type: 'integer', + required: false, + description: `ID of the pipeline this stage belongs to.`, + }, + ], + }, + { + name: 'pipedrive_stages_list', + description: `Retrieve all stages in Pipedrive. Filter by pipeline ID with cursor-based pagination.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor for pagination from a previous response.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of stages per page (max 500).`, + }, + { + name: 'pipeline_id', + type: 'integer', + required: false, + description: `Filter stages by pipeline ID.`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Field to sort by (e.g., id, update_time, add_time).`, + }, + { + name: 'sort_direction', + type: 'string', + required: false, + description: `Sort direction: asc or desc.`, + }, + ], + }, + { + name: 'pipedrive_user_get', + description: `Retrieve details of a specific user in Pipedrive by their ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the user to retrieve.`, + }, + ], + }, + { + name: 'pipedrive_user_me', + description: `Retrieve the profile of the currently authenticated user in Pipedrive.`, + params: [], + }, + { + name: 'pipedrive_users_find', + description: `Search for Pipedrive users by name or email address.`, + params: [ + { + name: 'search_by_email', + type: 'boolean', + required: false, + description: `When true, the search term is matched against email addresses instead of names.`, + }, + { + name: 'term', + type: 'string', + required: true, + description: `Search term to match against user name or email.`, + }, + ], + }, + { + name: 'pipedrive_users_list', + description: `Retrieve all users in the Pipedrive company account.`, + params: [], + }, + { + name: 'pipedrive_webhook_create', + description: `Create a new webhook in Pipedrive to receive real-time notifications when objects are created, updated, or deleted.`, + params: [ + { + name: 'event_action', + type: 'string', + required: true, + description: `Action to trigger the webhook: added, updated, deleted, or * for all.`, + }, + { + name: 'event_object', + type: 'string', + required: true, + description: `Object type to watch: deal, person, organization, activity, lead, note, pipeline, product, stage, user, or * for all.`, + }, + { + name: 'http_auth_password', + type: 'string', + required: false, + description: `Password for HTTP Basic Auth on the subscription URL.`, + }, + { + name: 'http_auth_user', + type: 'string', + required: false, + description: `Username for HTTP Basic Auth on the subscription URL.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Display name for this webhook.`, + }, + { + name: 'subscription_url', + type: 'string', + required: true, + description: `The URL to send webhook notifications to.`, + }, + { + name: 'version', + type: 'string', + required: false, + description: `Webhook payload version: 1 or 2.`, + }, + ], + }, + { + name: 'pipedrive_webhook_delete', + description: `Delete a webhook from Pipedrive by its ID.`, + params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the webhook to delete.`, + }, + ], + }, + { + name: 'pipedrive_webhooks_list', + description: `Retrieve all webhooks configured in the Pipedrive account.`, + params: [], + }, +] diff --git a/src/data/agent-connectors/salesforce.ts b/src/data/agent-connectors/salesforce.ts new file mode 100644 index 000000000..4146f811f --- /dev/null +++ b/src/data/agent-connectors/salesforce.ts @@ -0,0 +1,1199 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'salesforce_account_create', + description: `Create a new Account in Salesforce. Supports standard fields`, + params: [ + { + name: 'AccountNumber', + type: 'string', + required: false, + description: `Account number for the organization`, + }, + { name: 'AnnualRevenue', type: 'number', required: false, description: `Annual revenue` }, + { name: 'BillingCity', type: 'string', required: false, description: `Billing city` }, + { name: 'BillingCountry', type: 'string', required: false, description: `Billing country` }, + { + name: 'BillingPostalCode', + type: 'string', + required: false, + description: `Billing postal code`, + }, + { + name: 'BillingState', + type: 'string', + required: false, + description: `Billing state/province`, + }, + { name: 'BillingStreet', type: 'string', required: false, description: `Billing street` }, + { name: 'Description', type: 'string', required: false, description: `Description` }, + { name: 'Industry', type: 'string', required: false, description: `Industry` }, + { name: 'Name', type: 'string', required: true, description: `Account Name` }, + { + name: 'NumberOfEmployees', + type: 'integer', + required: false, + description: `Number of employees`, + }, + { + name: 'OwnerId', + type: 'string', + required: false, + description: `Record owner (User/Queue Id)`, + }, + { name: 'Phone', type: 'string', required: false, description: `Main phone number` }, + { name: 'RecordTypeId', type: 'string', required: false, description: `Record Type Id` }, + { name: 'Website', type: 'string', required: false, description: `Website URL` }, + ], + }, + { + name: 'salesforce_account_delete', + description: `Delete an existing Account from Salesforce by account ID. This is a destructive operation that permanently removes the account record.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to delete`, + }, + ], + }, + { + name: 'salesforce_account_get', + description: `Retrieve details of a specific account from Salesforce by account ID. Returns account properties and associated data.`, + params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to retrieve`, + }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, + ], + }, + { + name: 'salesforce_account_update', + description: `Update an existing Account in Salesforce by account ID. Allows updating account properties like name, phone, website, industry, billing information, and more.`, + params: [ + { + name: 'AccountNumber', + type: 'string', + required: false, + description: `Account number for the organization`, + }, + { + name: 'AccountSource', + type: 'string', + required: false, + description: `Lead source for this account`, + }, + { name: 'AnnualRevenue', type: 'number', required: false, description: `Annual revenue` }, + { name: 'BillingCity', type: 'string', required: false, description: `Billing city` }, + { name: 'BillingCountry', type: 'string', required: false, description: `Billing country` }, + { + name: 'BillingGeocodeAccuracy', + type: 'string', + required: false, + description: `Billing geocode accuracy`, + }, + { + name: 'BillingLatitude', + type: 'number', + required: false, + description: `Billing address latitude`, + }, + { + name: 'BillingLongitude', + type: 'number', + required: false, + description: `Billing address longitude`, + }, + { + name: 'BillingPostalCode', + type: 'string', + required: false, + description: `Billing postal code`, + }, + { + name: 'BillingState', + type: 'string', + required: false, + description: `Billing state/province`, + }, + { name: 'BillingStreet', type: 'string', required: false, description: `Billing street` }, + { + name: 'CleanStatus', + type: 'string', + required: false, + description: `Data.com clean status`, + }, + { name: 'Description', type: 'string', required: false, description: `Description` }, + { name: 'DunsNumber', type: 'string', required: false, description: `D-U-N-S Number` }, + { name: 'Fax', type: 'string', required: false, description: `Fax number` }, + { name: 'Industry', type: 'string', required: false, description: `Industry` }, + { name: 'Jigsaw', type: 'string', required: false, description: `Data.com key` }, + { + name: 'JigsawCompanyId', + type: 'string', + required: false, + description: `Jigsaw company ID`, + }, + { name: 'NaicsCode', type: 'string', required: false, description: `NAICS code` }, + { name: 'NaicsDesc', type: 'string', required: false, description: `NAICS description` }, + { name: 'Name', type: 'string', required: false, description: `Account Name` }, + { + name: 'NumberOfEmployees', + type: 'integer', + required: false, + description: `Number of employees`, + }, + { + name: 'OwnerId', + type: 'string', + required: false, + description: `Record owner (User/Queue Id)`, + }, + { name: 'Ownership', type: 'string', required: false, description: `Ownership type` }, + { name: 'ParentId', type: 'string', required: false, description: `Parent Account Id` }, + { name: 'Phone', type: 'string', required: false, description: `Main phone number` }, + { name: 'Rating', type: 'string', required: false, description: `Account rating` }, + { name: 'RecordTypeId', type: 'string', required: false, description: `Record Type Id` }, + { name: 'ShippingCity', type: 'string', required: false, description: `Shipping city` }, + { name: 'ShippingCountry', type: 'string', required: false, description: `Shipping country` }, + { + name: 'ShippingGeocodeAccuracy', + type: 'string', + required: false, + description: `Shipping geocode accuracy`, + }, + { + name: 'ShippingLatitude', + type: 'number', + required: false, + description: `Shipping address latitude`, + }, + { + name: 'ShippingLongitude', + type: 'number', + required: false, + description: `Shipping address longitude`, + }, + { + name: 'ShippingPostalCode', + type: 'string', + required: false, + description: `Shipping postal code`, + }, + { + name: 'ShippingState', + type: 'string', + required: false, + description: `Shipping state/province`, + }, + { name: 'ShippingStreet', type: 'string', required: false, description: `Shipping street` }, + { name: 'Sic', type: 'string', required: false, description: `SIC code` }, + { name: 'SicDesc', type: 'string', required: false, description: `SIC description` }, + { name: 'Site', type: 'string', required: false, description: `Account site or location` }, + { name: 'TickerSymbol', type: 'string', required: false, description: `Stock ticker symbol` }, + { name: 'Tradestyle', type: 'string', required: false, description: `Trade style name` }, + { name: 'Type', type: 'string', required: false, description: `Account type` }, + { name: 'Website', type: 'string', required: false, description: `Website URL` }, + { + name: 'YearStarted', + type: 'string', + required: false, + description: `Year the company started`, + }, + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to update`, + }, + ], + }, + { + name: 'salesforce_accounts_list', + description: `Retrieve a list of accounts from Salesforce using a pre-built SOQL query. Returns basic account information.`, + params: [ + { + name: 'limit', + type: 'number', + required: true, + description: `Number of results to return per page`, + }, + ], + }, + { + name: 'salesforce_chatter_comment_create', + description: `Add a comment to a Salesforce Chatter post (feed element).`, + params: [ + { + name: 'feed_element_id', + type: 'string', + required: true, + description: `The ID of the Chatter post to comment on`, + }, + { name: 'text', type: 'string', required: true, description: `The text body of the comment` }, + ], + }, + { + name: 'salesforce_chatter_comment_delete', + description: `Delete a comment from a Salesforce Chatter post.`, + params: [ + { + name: 'comment_id', + type: 'string', + required: true, + description: `The ID of the Chatter comment to delete`, + }, + ], + }, + { + name: 'salesforce_chatter_comments_list', + description: `List all comments on a Salesforce Chatter post (feed element).`, + params: [ + { + name: 'feed_element_id', + type: 'string', + required: true, + description: `The ID of the Chatter post to list comments for`, + }, + { + name: 'page', + type: 'string', + required: false, + description: `Page token for retrieving the next page of results`, + }, + { + name: 'page_size', + type: 'number', + required: false, + description: `Number of comments to return per page (default: 25, max: 100)`, + }, + ], + }, + { + name: 'salesforce_chatter_post_create', + description: `Create a new post (feed element) on a Salesforce Chatter feed. Use 'me' as subject_id to post to the current user's feed.`, + params: [ + { + name: 'is_rich_text', + type: 'boolean', + required: false, + description: `If true, the text body will be treated as HTML rich text. Default is false (plain text).`, + }, + { + name: 'message_segments', + type: 'array', + required: false, + description: `Advanced: provide raw Salesforce message segments array for full rich text control (bold, italic, links, mentions, etc.). When provided, overrides 'text' and 'is_rich_text'. Each segment must have a 'type' field (Text, MarkupBegin, MarkupEnd, Mention, Link). MarkupBegin/End use markupType: Bold, Italic, Underline, Paragraph, etc.`, + }, + { + name: 'subject_id', + type: 'string', + required: false, + description: `The ID of the subject (user, record, or group) to post to. Use 'me' for the current user's feed.`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `The text body of the Chatter post`, + }, + ], + }, + { + name: 'salesforce_chatter_post_delete', + description: `Delete a Salesforce Chatter post (feed element) by its ID.`, + params: [ + { + name: 'feed_element_id', + type: 'string', + required: true, + description: `The ID of the Chatter post to delete`, + }, + ], + }, + { + name: 'salesforce_chatter_post_get', + description: `Retrieve a specific Salesforce Chatter post (feed element) by its ID.`, + params: [ + { + name: 'feed_element_id', + type: 'string', + required: true, + description: `The ID of the Chatter feed element (post) to retrieve.`, + }, + ], + }, + { + name: 'salesforce_chatter_posts_search', + description: `Search Salesforce Chatter posts (feed elements) by keyword across all feeds.`, + params: [ + { + name: 'page', + type: 'string', + required: false, + description: `Page token for retrieving the next page of results`, + }, + { + name: 'page_size', + type: 'number', + required: false, + description: `Number of results to return per page (default: 25, max: 100)`, + }, + { + name: 'q', + type: 'string', + required: true, + description: `Search query string to find matching Chatter posts`, + }, + ], + }, + { + name: 'salesforce_chatter_user_feed_list', + description: `Retrieve feed elements (posts) from a Salesforce user's Chatter news feed. Use 'me' as the user ID to get the current user's feed.`, + params: [ + { + name: 'page', + type: 'string', + required: false, + description: `Page token for retrieving the next page of results. Use the value from the previous response's nextPageToken.`, + }, + { + name: 'page_size', + type: 'number', + required: false, + description: `Number of feed elements to return per page (default: 25, max: 100)`, + }, + { + name: 'sort_param', + type: 'string', + required: false, + description: `Sort order for feed elements. Options: LastModifiedDateDesc (default), CreatedDateDesc, MostRecentActivity`, + }, + { + name: 'user_id', + type: 'string', + required: true, + description: `The ID of the user whose Chatter feed to retrieve. Use 'me' for the current user.`, + }, + ], + }, + { + name: 'salesforce_composite', + description: `Execute multiple Salesforce REST API requests in a single call using the Composite API. Allows for efficient batch operations and related data retrieval.`, + params: [ + { + name: 'composite_request', + type: 'string', + required: true, + description: `JSON string containing composite request with multiple sub-requests`, + }, + ], + }, + { + name: 'salesforce_contact_create', + description: `Create a new contact in Salesforce. Allows setting contact properties like name, email, phone, account association, and other standard fields.`, + params: [ + { + name: 'AccountId', + type: 'string', + required: false, + description: `Salesforce Account Id associated with this contact`, + }, + { + name: 'Department', + type: 'string', + required: false, + description: `Department of the contact`, + }, + { + name: 'Description', + type: 'string', + required: false, + description: `Free-form description`, + }, + { + name: 'Email', + type: 'string', + required: false, + description: `Email address of the contact`, + }, + { + name: 'FirstName', + type: 'string', + required: false, + description: `First name of the contact`, + }, + { + name: 'LastName', + type: 'string', + required: true, + description: `Last name of the contact (required)`, + }, + { + name: 'LeadSource', + type: 'string', + required: false, + description: `Lead source for the contact`, + }, + { name: 'MailingCity', type: 'string', required: false, description: `Mailing city` }, + { name: 'MailingCountry', type: 'string', required: false, description: `Mailing country` }, + { + name: 'MailingPostalCode', + type: 'string', + required: false, + description: `Mailing postal code`, + }, + { + name: 'MailingState', + type: 'string', + required: false, + description: `Mailing state/province`, + }, + { name: 'MailingStreet', type: 'string', required: false, description: `Mailing street` }, + { + name: 'MobilePhone', + type: 'string', + required: false, + description: `Mobile phone of the contact`, + }, + { + name: 'Phone', + type: 'string', + required: false, + description: `Phone number of the contact`, + }, + { name: 'Title', type: 'string', required: false, description: `Job title of the contact` }, + ], + }, + { + name: 'salesforce_contact_get', + description: `Retrieve details of a specific contact from Salesforce 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: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, + ], + }, + { + name: 'salesforce_dashboard_clone', + description: `Clone an existing dashboard in Salesforce. Creates a copy of the source dashboard in the specified folder.`, + params: [ + { + name: 'folderId', + type: 'string', + required: true, + description: `Folder to place the cloned dashboard`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Name for the cloned dashboard`, + }, + { + name: 'source_dashboard_id', + type: 'string', + required: true, + description: `ID of the dashboard to clone`, + }, + ], + }, + { + name: 'salesforce_dashboard_get', + description: `Retrieve dashboard data and results from Salesforce by dashboard ID. Returns dashboard component data and results from all underlying reports.`, + params: [ + { + name: 'dashboard_id', + type: 'string', + required: true, + description: `ID of the dashboard to retrieve`, + }, + { + name: 'filter1', + type: 'string', + required: false, + description: `First dashboard filter value (DashboardFilterOption ID)`, + }, + { + name: 'filter2', + type: 'string', + required: false, + description: `Second dashboard filter value (DashboardFilterOption ID)`, + }, + { + name: 'filter3', + type: 'string', + required: false, + description: `Third dashboard filter value (DashboardFilterOption ID)`, + }, + ], + }, + { + name: 'salesforce_dashboard_metadata_get', + description: `Retrieve metadata for a Salesforce dashboard, including dashboard components, filters, layout, and the running user.`, + params: [ + { + name: 'dashboard_id', + type: 'string', + required: true, + description: `The unique ID of the Salesforce dashboard`, + }, + ], + }, + { + name: 'salesforce_dashboard_update', + description: `Update a Salesforce dashboard. Supports renaming, moving to a folder, and saving sticky filters. Use GET dashboard first to find filter IDs.`, + params: [ + { + name: 'dashboard_id', + type: 'string', + required: true, + description: `ID of the dashboard to update`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Dashboard filters to save (array)`, + }, + { + name: 'folderId', + type: 'string', + required: false, + description: `Folder to move the dashboard to`, + }, + { name: 'name', type: 'string', required: false, description: `New name for the dashboard` }, + ], + }, + { + name: 'salesforce_global_describe', + description: `Retrieve metadata about all available SObjects in the Salesforce organization. Returns list of all objects with basic information.`, + params: [], + }, + { + name: 'salesforce_limits_get', + description: `Retrieve organization limits information from Salesforce. Returns API usage limits, data storage limits, and other organizational constraints.`, + params: [], + }, + { + name: 'salesforce_object_describe', + description: `Retrieve detailed metadata about a specific SObject in Salesforce. Returns fields, relationships, and other object metadata.`, + params: [ + { + name: 'sobject', + type: 'string', + required: true, + description: `SObject API name to describe`, + }, + ], + }, + { + name: 'salesforce_opportunities_list', + description: `Retrieve a list of opportunities from Salesforce using a pre-built SOQL query. Returns basic opportunity information.`, + params: [ + { + name: 'limit', + type: 'number', + required: false, + description: `Number of results to return per page`, + }, + ], + }, + { + name: 'salesforce_opportunity_create', + description: `Create a new opportunity in Salesforce. Allows setting opportunity properties like name, amount, stage, close date, and account association.`, + params: [ + { name: 'AccountId', type: 'string', required: false, description: `Associated Account Id` }, + { name: 'Amount', type: 'number', required: false, description: `Opportunity amount` }, + { name: 'CampaignId', type: 'string', required: false, description: `Related Campaign Id` }, + { + name: 'CloseDate', + type: 'string', + required: true, + description: `Expected close date (YYYY-MM-DD, required)`, + }, + { + name: 'Custom_Field__c', + type: 'string', + required: false, + description: `Example custom field (replace with your org’s custom field API name)`, + }, + { + name: 'Description', + type: 'string', + required: false, + description: `Opportunity description`, + }, + { + name: 'ForecastCategoryName', + type: 'string', + required: false, + description: `Forecast category name`, + }, + { name: 'LeadSource', type: 'string', required: false, description: `Lead source` }, + { name: 'Name', type: 'string', required: true, description: `Opportunity name (required)` }, + { + name: 'NextStep', + type: 'string', + required: false, + description: `Next step in the sales process`, + }, + { + name: 'OwnerId', + type: 'string', + required: false, + description: `Record owner (User/Queue Id)`, + }, + { + name: 'PricebookId', + type: 'string', + required: false, + description: `Associated Price Book Id`, + }, + { + name: 'Probability', + type: 'number', + required: false, + description: `Probability percentage (0–100)`, + }, + { + name: 'RecordTypeId', + type: 'string', + required: false, + description: `Record Type Id for Opportunity`, + }, + { + name: 'StageName', + type: 'string', + required: true, + description: `Current sales stage (required)`, + }, + { name: 'Type', type: 'string', required: false, description: `Opportunity type` }, + ], + }, + { + name: 'salesforce_opportunity_get', + description: `Retrieve details of a specific opportunity from Salesforce by opportunity ID. Returns opportunity properties and associated data.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, + { + name: 'opportunity_id', + type: 'string', + required: true, + description: `ID of the opportunity to retrieve`, + }, + ], + }, + { + name: 'salesforce_opportunity_update', + description: `Update an existing opportunity in Salesforce by opportunity ID. Allows updating opportunity properties like name, amount, stage, and close date.`, + params: [ + { name: 'AccountId', type: 'string', required: false, description: `Associated Account Id` }, + { name: 'Amount', type: 'number', required: false, description: `Opportunity amount` }, + { name: 'CampaignId', type: 'string', required: false, description: `Related Campaign Id` }, + { + name: 'CloseDate', + type: 'string', + required: false, + description: `Expected close date (YYYY-MM-DD)`, + }, + { + name: 'Description', + type: 'string', + required: false, + description: `Opportunity description`, + }, + { + name: 'ForecastCategoryName', + type: 'string', + required: false, + description: `Forecast category name`, + }, + { name: 'LeadSource', type: 'string', required: false, description: `Lead source` }, + { name: 'Name', type: 'string', required: false, description: `Opportunity name` }, + { + name: 'NextStep', + type: 'string', + required: false, + description: `Next step in the sales process`, + }, + { + name: 'OwnerId', + type: 'string', + required: false, + description: `Record owner (User/Queue Id)`, + }, + { + name: 'Pricebook2Id', + type: 'string', + required: false, + description: `Associated Price Book Id`, + }, + { + name: 'Probability', + type: 'number', + required: false, + description: `Probability percentage (0–100)`, + }, + { + name: 'RecordTypeId', + type: 'string', + required: false, + description: `Record Type Id for Opportunity`, + }, + { name: 'StageName', type: 'string', required: false, description: `Current sales stage` }, + { name: 'Type', type: 'string', required: false, description: `Opportunity type` }, + { + name: 'opportunity_id', + type: 'string', + required: true, + description: `ID of the opportunity to update`, + }, + ], + }, + { + name: 'salesforce_query_next_page', + description: `Fetch the next page of results from a previous SOQL query. Use the nextRecordsUrl returned when a query response has done=false.`, + params: [ + { + name: 'cursor', + type: 'string', + required: true, + description: `The record cursor from a previous SOQL query response. Extract the cursor ID from the nextRecordsUrl (e.g. '01gxx0000002GJm-2000' from '/services/data/v66.0/query/01gxx0000002GJm-2000')`, + }, + ], + }, + { + name: 'salesforce_query_soql', + description: `Execute SOQL queries against Salesforce data. Supports complex queries with joins, filters, and aggregations.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `SOQL query string to execute`, + }, + ], + }, + { + name: 'salesforce_report_create', + description: `Create a new report in Salesforce using the Analytics API. Minimal verified version with only confirmed working fields.`, + params: [ + { + name: 'aggregates', + type: 'string', + required: false, + description: `Aggregates configuration (JSON array)`, + }, + { + name: 'chart', + type: 'string', + required: false, + description: `Chart configuration (JSON object)`, + }, + { name: 'description', type: 'string', required: false, description: `Report description` }, + { + name: 'detailColumns', + type: 'string', + required: false, + description: `Detail columns (JSON array of field names)`, + }, + { + name: 'folderId', + type: 'string', + required: false, + description: `Folder ID where report will be stored`, + }, + { + name: 'groupingsAcross', + type: 'string', + required: false, + description: `Column groupings (JSON array)`, + }, + { + name: 'groupingsDown', + type: 'string', + required: false, + description: `Row groupings (JSON array)`, + }, + { name: 'name', type: 'string', required: true, description: `Report name` }, + { name: 'reportBooleanFilter', type: 'string', required: false, description: `Filter logic` }, + { + name: 'reportFilters', + type: 'string', + required: false, + description: `Report filters (JSON array)`, + }, + { + name: 'reportFormat', + type: 'string', + required: false, + description: `Report format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings)`, + }, + { + name: 'reportType', + type: 'string', + required: true, + description: `The report type's API name from your Salesforce org (e.g. Opportunity, AccountList). Find valid values in Setup > Report Types`, + }, + { + name: 'scope', + type: 'string', + required: false, + description: `Report scope. organization (all records) or team (current user's team records)`, + }, + ], + }, + { + name: 'salesforce_report_delete', + description: `Delete an existing report from Salesforce by report ID. This is a destructive operation that permanently removes the report and cannot be undone.`, + params: [ + { + name: 'report_id', + type: 'string', + required: true, + description: `ID of the report to delete`, + }, + ], + }, + { + name: 'salesforce_report_metadata_get', + description: `Retrieve report, report type, and related metadata for a Salesforce report. Returns information about report structure, fields, groupings, and configuration.`, + params: [ + { + name: 'report_id', + type: 'string', + required: true, + description: `The unique ID of the Salesforce report`, + }, + ], + }, + { + name: 'salesforce_report_update', + description: `Update an existing report in Salesforce by report ID. Minimal verified version with only confirmed working fields. Only updates fields that are provided.`, + params: [ + { + name: 'aggregates', + type: 'string', + required: false, + description: `Aggregates configuration (JSON array)`, + }, + { + name: 'chart', + type: 'string', + required: false, + description: `Chart configuration (JSON object)`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated report description`, + }, + { + name: 'detailColumns', + type: 'string', + required: false, + description: `Detail columns (JSON array of field names)`, + }, + { + name: 'folderId', + type: 'string', + required: false, + description: `Move report to different folder`, + }, + { + name: 'groupingsAcross', + type: 'string', + required: false, + description: `Column groupings (JSON array)`, + }, + { + name: 'groupingsDown', + type: 'string', + required: false, + description: `Row groupings (JSON array)`, + }, + { name: 'name', type: 'string', required: false, description: `Updated report name` }, + { name: 'reportBooleanFilter', type: 'string', required: false, description: `Filter logic` }, + { + name: 'reportFilters', + type: 'string', + required: false, + description: `Report filters (JSON array)`, + }, + { + name: 'reportFormat', + type: 'string', + required: false, + description: `Report format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings)`, + }, + { + name: 'report_id', + type: 'string', + required: true, + description: `ID of the report to update`, + }, + { + name: 'scope', + type: 'string', + required: false, + description: `Report scope. organization (all records) or team (current user's team records)`, + }, + ], + }, + { + name: 'salesforce_search_parameterized', + description: `Execute parameterized searches against Salesforce data. Provides simplified search interface with predefined parameters.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to return`, + }, + { name: 'search_text', type: 'string', required: true, description: `Text to search for` }, + { name: 'sobject', type: 'string', required: true, description: `SObject type to search in` }, + ], + }, + { + name: 'salesforce_search_sosl', + description: `Execute SOSL searches against Salesforce data. Performs full-text search across multiple objects and fields.`, + params: [ + { + name: 'search_query', + type: 'string', + required: true, + description: `SOSL search query string to execute`, + }, + ], + }, + { + name: 'salesforce_sobject_create', + description: `Create a new record for any Salesforce SObject type (Account, Contact, Lead, Opportunity, custom objects, etc.). Provide the object type and fields as a dynamic object.`, + params: [ + { + name: 'fields', + type: 'object', + required: true, + description: `Object containing field names and values to set on the new record`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)`, + }, + ], + }, + { + name: 'salesforce_sobject_delete', + description: `Delete a record from any Salesforce SObject type by ID. This is a destructive operation that permanently removes the record.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `ID of the record to delete`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)`, + }, + ], + }, + { + name: 'salesforce_sobject_get', + description: `Retrieve a record from any Salesforce SObject type by ID. Optionally specify which fields to return.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `ID of the record to retrieve`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)`, + }, + ], + }, + { + name: 'salesforce_sobject_update', + description: `Update an existing record for any Salesforce SObject type by ID. Only the fields provided will be updated.`, + params: [ + { + name: 'fields', + type: 'object', + required: true, + description: `Object containing field names and values to update on the record`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `ID of the record to update`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)`, + }, + ], + }, + { + name: 'salesforce_soql_execute', + description: `Execute custom SOQL queries against Salesforce data. Supports complex queries with joins, filters, aggregations, and custom field selection.`, + params: [ + { + name: 'soql_query', + type: 'string', + required: true, + description: `SOQL query string to execute`, + }, + ], + }, + { + name: 'salesforce_tooling_query_execute', + description: `Execute SOQL queries against Salesforce Tooling API to access metadata objects like ApexClass, ApexTrigger, CustomObject, and development metadata. Use this for querying metadata rather than data objects.`, + params: [ + { + name: 'soql_query', + type: 'string', + required: true, + description: `SOQL query string to execute against Tooling API`, + }, + ], + }, + { + name: 'salesforce_tooling_sobject_create', + description: `Create a new metadata record for any Salesforce Tooling API object type (ApexClass, ApexTrigger, CustomField, etc.). Supports both simple and nested field structures. For CustomField, use FullName and Metadata properties.`, + params: [ + { + name: 'fields', + type: 'object', + required: true, + description: `Object containing field names and values to set on the new metadata record. Supports nested structures for complex metadata types.`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)`, + }, + ], + }, + { + name: 'salesforce_tooling_sobject_delete', + description: `Delete a metadata record from any Salesforce Tooling API object type by ID. This is a destructive operation that permanently removes the metadata.`, + params: [ + { + name: 'record_id', + type: 'string', + required: true, + description: `ID of the metadata record to delete`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)`, + }, + ], + }, + { + name: 'salesforce_tooling_sobject_describe', + description: `Retrieve detailed metadata schema for a specific Tooling API object type. Returns fields, relationships, and other metadata properties.`, + params: [ + { + name: 'sobject', + type: 'string', + required: true, + description: `Tooling API object name to describe`, + }, + ], + }, + { + name: 'salesforce_tooling_sobject_get', + description: `Retrieve a metadata record from any Salesforce Tooling API object type by ID. Optionally specify which fields to return.`, + params: [ + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `ID of the metadata record to retrieve`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)`, + }, + ], + }, + { + name: 'salesforce_tooling_sobject_update', + description: `Update an existing metadata record for any Salesforce Tooling API object type by ID. Supports both simple and nested field structures. Only the fields provided will be updated.`, + params: [ + { + name: 'fields', + type: 'object', + required: true, + description: `Object containing field names and values to update on the metadata record. Supports nested structures for complex metadata types.`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `ID of the metadata record to update`, + }, + { + name: 'sobject_type', + type: 'string', + required: true, + description: `The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/servicenow.ts b/src/data/agent-connectors/servicenow.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/servicenow.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/sharepoint.ts b/src/data/agent-connectors/sharepoint.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/sharepoint.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/slack.ts b/src/data/agent-connectors/slack.ts new file mode 100644 index 000000000..80da80f99 --- /dev/null +++ b/src/data/agent-connectors/slack.ts @@ -0,0 +1,462 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'slack_add_reaction', + description: `Add an emoji reaction to a message in Slack. Requires a valid Slack OAuth2 connection with reactions:write scope.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID or channel name where the message exists`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Emoji name to react with (without colons)`, + }, + { + name: 'timestamp', + type: 'string', + required: true, + description: `Timestamp of the message to add reaction to`, + }, + ], + }, + { + name: 'slack_create_channel', + description: `Creates a new public or private channel in a Slack workspace. Requires a valid Slack OAuth2 connection with channels:manage scope for public channels or groups:write scope for private channels.`, + params: [ + { + name: 'is_private', + type: 'boolean', + required: false, + description: `Create a private channel instead of public`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Name of the channel to create (without # prefix)`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Encoded team ID to create channel in (if using org tokens)`, + }, + ], + }, + { + name: 'slack_delete_message', + description: `Deletes a message from a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM where the message was sent`, + }, + { + name: 'ts', + type: 'string', + required: true, + description: `Timestamp of the message to delete`, + }, + ], + }, + { + name: 'slack_fetch_conversation_history', + description: `Fetches conversation history from a Slack channel or direct message with pagination support. Requires a valid Slack OAuth2 connection with channels:history scope.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Paginate through collections by cursor for pagination`, + }, + { + name: 'latest', + type: 'string', + required: false, + description: `End of time range of messages to include in results`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of messages to return (1-1000, default 100)`, + }, + { + name: 'oldest', + type: 'string', + required: false, + description: `Start of time range of messages to include in results`, + }, + ], + }, + { + name: 'slack_get_conversation_info', + description: `Retrieve information about a Slack channel, including metadata, settings, and member count. Requires a valid Slack OAuth2 connection with channels:read scope.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM`, + }, + { + name: 'include_locale', + type: 'boolean', + required: false, + description: `Set to true to include the locale for this conversation`, + }, + { + name: 'include_num_members', + type: 'boolean', + required: false, + description: `Set to true to include the member count for the conversation`, + }, + ], + }, + { + name: 'slack_get_conversation_replies', + description: `Retrieve replies to a specific message thread in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with channels:history or groups:history scope.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM`, + }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor for retrieving next page of results`, + }, + { + name: 'inclusive', + type: 'boolean', + required: false, + description: `Include messages with latest or oldest timestamp in results`, + }, + { + name: 'latest', + type: 'string', + required: false, + description: `End of time range of messages to include in results`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of messages to return (default 100, max 1000)`, + }, + { + name: 'oldest', + type: 'string', + required: false, + description: `Start of time range of messages to include in results`, + }, + { + name: 'ts', + type: 'string', + required: true, + description: `Timestamp of the parent message to get replies for`, + }, + ], + }, + { + name: 'slack_get_user_info', + description: `Retrieves detailed information about a specific Slack user, including profile data, status, and workspace information. Requires a valid Slack OAuth2 connection with users:read scope.`, + params: [ + { + name: 'include_locale', + type: 'boolean', + required: false, + description: `Set to true to include locale information for the user`, + }, + { + name: 'user', + type: 'string', + required: true, + description: `User ID to get information about`, + }, + ], + }, + { + name: 'slack_get_user_presence', + description: `Gets the current presence status of a Slack user (active, away, etc.). Indicates whether the user is currently online and available. Requires a valid Slack OAuth2 connection with users:read scope.`, + params: [ + { + name: 'user', + type: 'string', + required: true, + description: `User ID to check presence for`, + }, + ], + }, + { + name: 'slack_invite_users_to_channel', + description: `Invites one or more users to a Slack channel. Requires a valid Slack OAuth2 connection with channels:write scope for public channels or groups:write for private channels.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID or channel name (#general) to invite users to`, + }, + { + name: 'users', + type: 'string', + required: true, + description: `Comma-separated list of user IDs to invite to the channel`, + }, + ], + }, + { + name: 'slack_join_conversation', + description: `Joins an existing Slack channel. The authenticated user will become a member of the channel. Requires a valid Slack OAuth2 connection with channels:write scope for public channels.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID or channel name (#general) to join`, + }, + ], + }, + { + name: 'slack_leave_conversation', + description: `Leaves a Slack channel. The authenticated user will be removed from the channel and will no longer receive messages from it. Requires a valid Slack OAuth2 connection with channels:write scope for public channels or groups:write for private channels.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID or channel name (#general) to leave`, + }, + ], + }, + { + name: 'slack_list_channels', + description: `List all public and private channels in a Slack workspace that the authenticated user has access to. Requires a valid Slack OAuth2 connection with channels:read, groups:read, mpim:read, and/or im:read scopes depending on conversation types needed.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor for retrieving next page of results`, + }, + { + name: 'exclude_archived', + type: 'boolean', + required: false, + description: `Exclude archived channels from the list`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of channels to return (default 100, max 1000)`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Encoded team ID to list channels for (optional)`, + }, + { + name: 'types', + type: 'string', + required: false, + description: `Mix and match channel types (public_channel, private_channel, mpim, im)`, + }, + ], + }, + { + name: 'slack_list_users', + description: `Lists all users in a Slack workspace, including information about their status, profile, and presence. Requires a valid Slack OAuth2 connection with users:read scope.`, + params: [ + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor for fetching additional pages of users`, + }, + { + name: 'include_locale', + type: 'boolean', + required: false, + description: `Set to true to include locale information for each user`, + }, + { + name: 'limit', + type: 'number', + required: false, + description: `Number of users to return (1-1000)`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Encoded team ID to list users for (if using org tokens)`, + }, + ], + }, + { + name: 'slack_lookup_user_by_email', + description: `Find a user by their registered email address in a Slack workspace. Requires a valid Slack OAuth2 connection with users:read.email scope. Cannot be used by custom bot users.`, + params: [ + { + name: 'email', + type: 'string', + required: true, + description: `Email address to search for users by`, + }, + ], + }, + { + name: 'slack_pin_message', + description: `Pin a message to a Slack channel. Pinned messages are highlighted and easily accessible to channel members. Requires a valid Slack OAuth2 connection with pins:write scope.`, + params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID or channel name where the message exists`, + }, + { + name: 'timestamp', + type: 'string', + required: true, + description: `Timestamp of the message to pin`, + }, + ], + }, + { + name: 'slack_send_message', + description: `Sends a message to a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.`, + params: [ + { + name: 'attachments', + type: 'string', + required: false, + description: `JSON-encoded array of attachment objects for additional message formatting`, + }, + { + name: 'blocks', + type: 'string', + required: false, + description: `JSON-encoded array of Block Kit block elements for rich message formatting`, + }, + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM`, + }, + { + name: 'reply_broadcast', + type: 'boolean', + required: false, + description: `Used in conjunction with thread_ts to broadcast reply to channel`, + }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Optional schema version to use for tool execution`, + }, + { name: 'text', type: 'string', required: true, description: `Message text content` }, + { + name: 'thread_ts', + type: 'string', + required: false, + description: `Timestamp of parent message to reply in thread`, + }, + { + name: 'tool_version', + type: 'string', + required: false, + description: `Optional tool version to use for execution`, + }, + { + name: 'unfurl_links', + type: 'boolean', + required: false, + description: `Enable or disable link previews`, + }, + { + name: 'unfurl_media', + type: 'boolean', + required: false, + description: `Enable or disable media link previews`, + }, + ], + }, + { + name: 'slack_set_user_status', + description: `Set the user's custom status with text and emoji. This appears in their profile and can include an expiration time. Requires a valid Slack OAuth2 connection with users.profile:write scope.`, + params: [ + { + name: 'status_emoji', + type: 'string', + required: false, + description: `Emoji to display with status (without colons)`, + }, + { + name: 'status_expiration', + type: 'integer', + required: false, + description: `Unix timestamp when status should expire`, + }, + { + name: 'status_text', + type: 'string', + required: false, + description: `Status text to display`, + }, + ], + }, + { + name: 'slack_update_message', + description: `Updates/edits a previously sent message in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.`, + params: [ + { + name: 'attachments', + type: 'string', + required: false, + description: `JSON-encoded array of attachment objects for additional message formatting`, + }, + { + name: 'blocks', + type: 'string', + required: false, + description: `JSON-encoded array of Block Kit block elements for rich message formatting`, + }, + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM where the message was sent`, + }, + { name: 'text', type: 'string', required: false, description: `New message text content` }, + { + name: 'ts', + type: 'string', + required: true, + description: `Timestamp of the message to update`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/snowflake.ts b/src/data/agent-connectors/snowflake.ts new file mode 100644 index 000000000..bd3ea0287 --- /dev/null +++ b/src/data/agent-connectors/snowflake.ts @@ -0,0 +1,349 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'snowflake_cancel_query', + description: `Cancel a running Snowflake SQL API statement by statement handle.`, + params: [ + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, + { + name: 'statement_handle', + type: 'string', + required: true, + description: `Snowflake statement handle to cancel`, + }, + ], + }, + { + name: 'snowflake_execute_query', + description: `Execute one or more SQL statements against Snowflake using the SQL API. Requires a valid Snowflake OAuth2 connection. Use semicolons to submit multiple statements.`, + params: [ + { + name: 'async', + type: 'boolean', + required: false, + description: `Execute statement asynchronously and return a statement handle`, + }, + { + name: 'bindings', + type: 'object', + required: false, + description: `Bind variables object for '?' placeholders in the SQL statement`, + }, + { + name: 'database', + type: 'string', + required: false, + description: `Database to use when executing the statement`, + }, + { + name: 'nullable', + type: 'boolean', + required: false, + description: `When false, SQL NULL values are returned as the string "null"`, + }, + { + name: 'parameters', + type: 'object', + required: false, + description: `Statement-level Snowflake parameters as a JSON object`, + }, + { + name: 'request_id', + type: 'string', + required: false, + description: `Unique request identifier (UUID) used for idempotent retries`, + }, + { + name: 'retry', + type: 'boolean', + required: false, + description: `Set true when resubmitting a previously sent request with the same request_id`, + }, + { + name: 'role', + type: 'string', + required: false, + description: `Role to use when executing the statement`, + }, + { + name: 'schema', + type: 'string', + required: false, + description: `Schema to use when executing the statement`, + }, + { + name: 'statement', + type: 'string', + required: true, + description: `SQL statement to execute. Use semicolons to send multiple statements in one request.`, + }, + { + name: 'timeout', + type: 'integer', + required: false, + description: `Maximum number of seconds to wait for statement execution`, + }, + { + name: 'warehouse', + type: 'string', + required: false, + description: `Warehouse to use when executing the statement`, + }, + ], + }, + { + name: 'snowflake_get_columns', + description: `Query INFORMATION_SCHEMA.COLUMNS for column metadata.`, + params: [ + { + name: 'column_name_like', + type: 'string', + required: false, + description: `Optional column name pattern`, + }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { name: 'table', type: 'string', required: false, description: `Optional table filter` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_get_query_partition', + description: `Get a specific result partition for a Snowflake SQL API statement.`, + params: [ + { + name: 'partition', + type: 'integer', + required: true, + description: `Partition index to fetch (0-based)`, + }, + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, + { + name: 'statement_handle', + type: 'string', + required: true, + description: `Snowflake statement handle returned by Execute Query`, + }, + ], + }, + { + name: 'snowflake_get_query_status', + description: `Get Snowflake SQL API statement status and first partition result metadata by statement handle.`, + params: [ + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, + { + name: 'statement_handle', + type: 'string', + required: true, + description: `Snowflake statement handle returned by Execute Query`, + }, + ], + }, + { + name: 'snowflake_get_referential_constraints', + description: `Query INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS.`, + params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { name: 'table', type: 'string', required: false, description: `Optional table filter` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_get_schemata', + description: `Query INFORMATION_SCHEMA.SCHEMATA for schema metadata.`, + params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { + name: 'schema_like', + type: 'string', + required: false, + description: `Optional schema pattern`, + }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_get_table_constraints', + description: `Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS.`, + params: [ + { + name: 'constraint_type', + type: 'string', + required: false, + description: `Optional constraint type filter`, + }, + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { name: 'table', type: 'string', required: false, description: `Optional table filter` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_get_tables', + description: `Query INFORMATION_SCHEMA.TABLES for table metadata in a Snowflake database.`, + params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, + { name: 'limit', type: 'integer', required: false, description: `Maximum number of rows` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, + { + name: 'table_name_like', + type: 'string', + required: false, + description: `Optional table name pattern`, + }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_show_databases_schemas', + description: `Run SHOW DATABASES or SHOW SCHEMAS.`, + params: [ + { + name: 'database_name', + type: 'string', + required: false, + description: `Optional database scope for SHOW SCHEMAS`, + }, + { + name: 'like_pattern', + type: 'string', + required: false, + description: `Optional LIKE pattern`, + }, + { name: 'object_type', type: 'string', required: true, description: `Object type to show` }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_show_grants', + description: `Run SHOW GRANTS in common modes (to role, to user, of role, on object).`, + params: [ + { name: 'grant_view', type: 'string', required: true, description: `SHOW GRANTS variant` }, + { + name: 'object_name', + type: 'string', + required: false, + description: `Object name for on_object`, + }, + { + name: 'object_type', + type: 'string', + required: false, + description: `Object type for on_object`, + }, + { name: 'role', type: 'string', required: false, description: `Optional execution role` }, + { + name: 'role_name', + type: 'string', + required: false, + description: `Role name (for to_role/of_role)`, + }, + { + name: 'user_name', + type: 'string', + required: false, + description: `User name (for to_user)`, + }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_show_imported_exported_keys', + description: `Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. For reliable execution in this environment, use fully-qualified scope (database_name + schema_name + table_name).`, + params: [ + { + name: 'database_name', + type: 'string', + required: false, + description: `Optional database name (recommended with schema_name)`, + }, + { + name: 'key_direction', + type: 'string', + required: true, + description: `Which command to run`, + }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { + name: 'schema_name', + type: 'string', + required: false, + description: `Optional schema name (recommended with database_name)`, + }, + { + name: 'table_name', + type: 'string', + required: true, + description: `Table name (use with schema_name and database_name for fully-qualified scope)`, + }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_show_primary_keys', + description: `Run SHOW PRIMARY KEYS with optional scope. When using schema_name (or schema_name + table_name), database_name is required for fully-qualified scope.`, + params: [ + { + name: 'database_name', + type: 'string', + required: false, + description: `Optional database name for scope (required when schema_name is set)`, + }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { + name: 'schema_name', + type: 'string', + required: false, + description: `Optional schema name for scope`, + }, + { + name: 'table_name', + type: 'string', + required: false, + description: `Optional table name for scope`, + }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, + { + name: 'snowflake_show_warehouses', + description: `Run SHOW WAREHOUSES.`, + params: [ + { + name: 'like_pattern', + type: 'string', + required: false, + description: `Optional LIKE pattern`, + }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, + { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, + ], + }, +] diff --git a/src/data/agent-connectors/supadata.ts b/src/data/agent-connectors/supadata.ts new file mode 100644 index 000000000..12342429f --- /dev/null +++ b/src/data/agent-connectors/supadata.ts @@ -0,0 +1,202 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'supadata_metadata_get', + description: `Retrieve unified metadata for a video or media URL including title, description, author info, engagement stats, media details, and creation date. Supports YouTube, TikTok, Instagram, X (Twitter), Facebook, and more.`, + params: [ + { + name: 'url', + type: 'string', + required: true, + description: `URL of the video or media to retrieve metadata for.`, + }, + ], + }, + { + name: 'supadata_transcript_get', + description: `Extract transcripts from YouTube, TikTok, Instagram, X (Twitter), Facebook, or direct file URLs. Supports native captions, auto-generated captions, or AI-generated transcripts. Returns timestamped segments with speaker labels.`, + params: [ + { + name: 'chunkSize', + type: 'integer', + required: false, + description: `Maximum number of characters per transcript segment chunk.`, + }, + { + name: 'lang', + type: 'string', + required: false, + description: `ISO 639-1 language code for the transcript (e.g., en, fr, de). Defaults to the video's original language.`, + }, + { + name: 'mode', + type: 'string', + required: false, + description: `Transcript generation mode: native (use existing captions, 1 credit), auto (native with AI fallback), or generate (AI-generated, 2 credits/minute).`, + }, + { + name: 'text', + type: 'boolean', + required: false, + description: `Return plain text instead of timestamped segments. Defaults to false.`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `URL of the video or media file to transcribe. Supports YouTube, TikTok, Instagram, X, Facebook, or direct video/audio file URLs.`, + }, + ], + }, + { + name: 'supadata_web_map', + description: `Discover and return all URLs found on a website. Useful for site structure analysis, link auditing, and building crawl lists. Costs 1 credit per request.`, + params: [ + { + name: 'url', + type: 'string', + required: true, + description: `Base URL of the website to map.`, + }, + ], + }, + { + name: 'supadata_web_scrape', + description: `Scrape a web page and return its content as clean Markdown. Ideal for extracting readable content from any URL while stripping away navigation and ads.`, + params: [ + { + name: 'lang', + type: 'string', + required: false, + description: `ISO 639-1 language code to request content in a specific language (e.g., en, fr, de).`, + }, + { + name: 'noLinks', + type: 'boolean', + required: false, + description: `Strip all hyperlinks from the Markdown output. Defaults to false.`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `URL of the web page to scrape.`, + }, + ], + }, + { + name: 'supadata_youtube_channel_get', + description: `Retrieve metadata for a YouTube channel including name, description, subscriber count, video count, and thumbnails.`, + params: [ + { + name: 'channelId', + type: 'string', + required: true, + description: `YouTube channel ID, handle (@username), or full channel URL.`, + }, + ], + }, + { + name: 'supadata_youtube_playlist_get', + description: `Retrieve metadata and video list for a YouTube playlist including title, description, video count, and individual video details.`, + params: [ + { + name: 'playlistId', + type: 'string', + required: true, + description: `YouTube playlist ID or full playlist URL.`, + }, + ], + }, + { + name: 'supadata_youtube_search', + description: `Search YouTube for videos, channels, or playlists. Returns results with titles, IDs, descriptions, thumbnails, and metadata.`, + params: [ + { + name: 'lang', + type: 'string', + required: false, + description: `ISO 639-1 language code to filter results by language (e.g., en, fr).`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Search query string to find videos, channels, or playlists on YouTube.`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Type of results to return: video, channel, or playlist.`, + }, + ], + }, + { + name: 'supadata_youtube_transcript_get', + description: `Retrieve the transcript for a YouTube video by video ID or URL. Returns timestamped segments with text content.`, + params: [ + { + name: 'lang', + type: 'string', + required: false, + description: `ISO 639-1 language code for the transcript (e.g., en, fr, de).`, + }, + { + name: 'text', + type: 'boolean', + required: false, + description: `Return plain text instead of timestamped segments. Defaults to false.`, + }, + { + name: 'videoId', + type: 'string', + required: true, + description: `YouTube video ID or full YouTube URL to retrieve the transcript for.`, + }, + ], + }, + { + name: 'supadata_youtube_transcript_translate', + description: `Retrieve and translate a YouTube video transcript into a target language. Returns translated timestamped segments.`, + params: [ + { + name: 'lang', + type: 'string', + required: true, + description: `ISO 639-1 language code to translate the transcript into (e.g., en, fr, es).`, + }, + { + name: 'text', + type: 'boolean', + required: false, + description: `Return plain text instead of timestamped segments. Defaults to false.`, + }, + { + name: 'videoId', + type: 'string', + required: true, + description: `YouTube video ID or full YouTube URL to translate the transcript for.`, + }, + ], + }, + { + name: 'supadata_youtube_video_get', + description: `Retrieve detailed metadata for a YouTube video including title, description, view count, like count, duration, tags, thumbnails, and channel info.`, + params: [ + { + name: 'videoId', + type: 'string', + required: true, + description: `YouTube video ID or full YouTube URL.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/trello.ts b/src/data/agent-connectors/trello.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/trello.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] diff --git a/src/data/agent-connectors/twitter.ts b/src/data/agent-connectors/twitter.ts new file mode 100644 index 000000000..342f72bc8 --- /dev/null +++ b/src/data/agent-connectors/twitter.ts @@ -0,0 +1,1962 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'twitter_activity_subscription_create', + description: `Creates a subscription for an X activity event. Use when you need to monitor specific user activities like profile updates, follows, or spaces events.`, + params: [ + { + name: 'event_types', + type: 'array', + required: true, + description: `List of event types to subscribe to, e.g. profile.updated, follows, spaces`, + }, + { + name: 'user_id', + type: 'string', + required: true, + description: `Twitter user ID to subscribe to activities for`, + }, + ], + }, + { + name: 'twitter_blocked_users_get', + description: `Retrieves the authenticated user's block list. The id parameter must be the authenticated user's ID. Use Get Authenticated User action first to obtain your user ID.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID — must match the authenticated user`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-1000)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_bookmark_add', + description: `Adds a specified, existing, and accessible Tweet to a user's bookmarks. Success is indicated by the 'bookmarked' field in the response.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'tweet_id', + type: 'string', + required: true, + description: `ID of the Tweet to bookmark`, + }, + ], + }, + { + name: 'twitter_bookmark_remove', + description: `Removes a Tweet from the authenticated user's bookmarks. The Tweet must have been previously bookmarked by the user for the action to have an effect.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'tweet_id', + type: 'string', + required: true, + description: `ID of the bookmarked tweet to remove`, + }, + ], + }, + { + name: 'twitter_bookmarks_get', + description: `Retrieves Tweets bookmarked by the authenticated user. The provided User ID must match the authenticated user's ID.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + ], + }, + { + name: 'twitter_compliance_job_create', + description: `Creates a new compliance job to check the status of Tweet or user IDs. Upload IDs as a plain text file (one ID per line) to the upload_url received in the response.`, + params: [ + { + name: 'resumable', + type: 'boolean', + required: false, + description: `Whether the job should be resumable`, + }, + { name: 'type', type: 'string', required: true, description: `Type of compliance job` }, + ], + }, + { + name: 'twitter_compliance_job_get', + description: `Retrieves status, download/upload URLs, and other details for an existing Twitter compliance job specified by its unique ID.`, + params: [{ name: 'id', type: 'string', required: true, description: `Compliance job ID` }], + }, + { + name: 'twitter_compliance_jobs_list', + description: `Returns a list of recent compliance jobs, filtered by type (tweets or users) and optionally by status.`, + params: [ + { name: 'status', type: 'string', required: false, description: `Filter by job status` }, + { + name: 'type', + type: 'string', + required: true, + description: `Type of compliance jobs to list`, + }, + ], + }, + { + name: 'twitter_dm_conversation_events_get', + description: `Fetches Direct Message (DM) events for a one-on-one conversation with a specified participant ID, ordered chronologically newest to oldest. Does not support group DMs.`, + params: [ + { + name: 'dm_event_fields', + type: 'string', + required: false, + description: `Comma-separated DM event fields`, + }, + { + name: 'event_types', + type: 'string', + required: false, + description: `Filter by event types`, + }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'participant_id', + type: 'string', + required: true, + description: `User ID of the DM conversation participant`, + }, + ], + }, + { + name: 'twitter_dm_conversation_retrieve', + description: `Retrieves Direct Message (DM) events for a specific conversation ID on Twitter. Useful for analyzing messages and participant activities.`, + params: [ + { + name: 'dm_conversation_id', + type: 'string', + required: true, + description: `DM conversation ID`, + }, + { + name: 'dm_event_fields', + type: 'string', + required: false, + description: `Comma-separated DM event fields`, + }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + ], + }, + { + name: 'twitter_dm_conversation_send', + description: `Sends a message with optional text and/or media attachments (using pre-uploaded media_ids) to a specified Twitter Direct Message conversation.`, + params: [ + { + name: 'dm_conversation_id', + type: 'string', + required: true, + description: `DM conversation ID to send the message to`, + }, + { + name: 'media_id', + type: 'string', + required: false, + description: `Pre-uploaded media ID to attach`, + }, + { name: 'text', type: 'string', required: false, description: `Message text` }, + ], + }, + { + name: 'twitter_dm_delete', + description: `Permanently deletes a specific Twitter Direct Message (DM) event using its event_id, if the authenticated user sent it. This action is irreversible and does not delete entire conversations.`, + params: [ + { + name: 'event_id', + type: 'string', + required: true, + description: `ID of the DM event to delete`, + }, + { + name: 'participant_id', + type: 'string', + required: true, + description: `User ID of the DM conversation participant`, + }, + ], + }, + { + name: 'twitter_dm_event_get', + description: `Fetches a specific Direct Message (DM) event by its unique ID. Allows optional expansion of related data like users or tweets.`, + params: [ + { + name: 'dm_event_fields', + type: 'string', + required: false, + description: `Comma-separated DM event fields`, + }, + { name: 'event_id', type: 'string', required: true, description: `DM event ID` }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + ], + }, + { + name: 'twitter_dm_events_get', + description: `Returns recent Direct Message events for the authenticated user, such as new messages or changes in conversation participants.`, + params: [ + { + name: 'dm_event_fields', + type: 'string', + required: false, + description: `Comma-separated DM event fields`, + }, + { + name: 'event_types', + type: 'string', + required: false, + description: `Filter by event types`, + }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + ], + }, + { + name: 'twitter_dm_group_conversation_create', + description: `Creates a new group Direct Message (DM) conversation on Twitter. The conversation_type must be 'Group'. Include participant_ids and an initial message with text and optional media attachments using media_id (not media_url). Media must be uploaded first.`, + params: [ + { + name: 'message_media_ids', + type: 'array', + required: false, + description: `Media IDs to attach to initial message`, + }, + { name: 'message_text', type: 'string', required: true, description: `Initial message text` }, + { + name: 'participant_ids', + type: 'array', + required: true, + description: `List of Twitter user IDs to include`, + }, + ], + }, + { + name: 'twitter_dm_send', + description: `Sends a new Direct Message with text and/or media (media_id for attachments must be pre-uploaded) to a specified Twitter user. Creates a new DM and does not modify existing messages.`, + params: [ + { + name: 'media_id', + type: 'string', + required: false, + description: `Pre-uploaded media ID to attach`, + }, + { + name: 'participant_id', + type: 'string', + required: true, + description: `Twitter user ID of the DM recipient`, + }, + { name: 'text', type: 'string', required: false, description: `Message text` }, + ], + }, + { + name: 'twitter_followers_get', + description: `Retrieves a list of users who follow a specified public Twitter user ID.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `Twitter user ID to get followers for`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-1000)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_following_get', + description: `Retrieves users followed by a specific Twitter user, allowing pagination and customization of returned user and tweet data fields via expansions.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-1000)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_full_archive_search', + description: `Searches the full archive of public Tweets from March 2006 onwards. Use start_time and end_time together for a defined time window. Requires Academic Research access.`, + params: [ + { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (10-500)`, + }, + { name: 'next_token', type: 'string', required: false, description: `Next page token` }, + { + name: 'query', + type: 'string', + required: true, + description: `Search query using X search syntax`, + }, + { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, + { + name: 'start_time', + type: 'string', + required: false, + description: `ISO 8601 start time e.g. 2021-01-01T00:00:00Z`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { name: 'until_id', type: 'string', required: false, description: `Maximum tweet ID` }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_full_archive_search_counts', + description: `Returns a count of Tweets from the full archive that match a specified query, aggregated by day, hour, or minute. start_time must be before end_time if both are provided. since_id/until_id cannot be used with start_time/end_time.`, + params: [ + { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, + { + name: 'granularity', + type: 'string', + required: false, + description: `Aggregation granularity`, + }, + { name: 'next_token', type: 'string', required: false, description: `Next page token` }, + { name: 'query', type: 'string', required: true, description: `Search query` }, + { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, + { name: 'start_time', type: 'string', required: false, description: `ISO 8601 start time` }, + { name: 'until_id', type: 'string', required: false, description: `Maximum tweet ID` }, + ], + }, + { + name: 'twitter_list_create', + description: `Creates a new, empty List on X (formerly Twitter). The provided name must be unique for the authenticated user. Accounts are added separately.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `Description of the list`, + }, + { name: 'name', type: 'string', required: true, description: `Unique name for the new list` }, + { + name: 'private', + type: 'boolean', + required: false, + description: `Whether the list should be private`, + }, + ], + }, + { + name: 'twitter_list_delete', + description: `Permanently deletes a specified Twitter List using its ID. The list must be owned by the authenticated user. This action is irreversible.`, + params: [ + { + name: 'list_id', + type: 'string', + required: true, + description: `ID of the Twitter List to delete`, + }, + ], + }, + { + name: 'twitter_list_follow', + description: `Allows the authenticated user to follow a specific Twitter List they are permitted to access, subscribing them to the list's timeline. This does not automatically follow individual list members.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { name: 'list_id', type: 'string', required: true, description: `ID of the list to follow` }, + ], + }, + { + name: 'twitter_list_followers_get', + description: `Fetches a list of users who follow a specific Twitter List, identified by its ID. Ensure the authenticated user has access if the list is private.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_list_lookup', + description: `Returns metadata for a specific Twitter List, identified by its ID. Does not return list members. Can expand the owner's User object via the expansions parameter.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, + { + name: 'list_fields', + type: 'string', + required: false, + description: `Comma-separated list fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_list_member_add', + description: `Adds a user to a specified Twitter List. The list must be owned by the authenticated user.`, + params: [ + { name: 'list_id', type: 'string', required: true, description: `ID of the Twitter List` }, + { name: 'user_id', type: 'string', required: true, description: `ID of the user to add` }, + ], + }, + { + name: 'twitter_list_member_remove', + description: `Removes a user from a Twitter List. The response is_member field will be false if removal was successful or the user was not a member. The updated list of members is not returned.`, + params: [ + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, + { + name: 'user_id', + type: 'string', + required: true, + description: `ID of the user to remove from the list`, + }, + ], + }, + { + name: 'twitter_list_members_get', + description: `Fetches members of a specific Twitter List, identified by its unique ID.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_list_pin', + description: `Pins a specified List to the authenticated user's profile. The List must exist, the user must have access rights, and the pin limit (typically 5 Lists) must not be exceeded.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { name: 'list_id', type: 'string', required: true, description: `ID of the list to pin` }, + ], + }, + { + name: 'twitter_list_timeline_get', + description: `Fetches the most recent Tweets posted by members of a specified Twitter List.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_list_unfollow', + description: `Enables a user to unfollow a specific Twitter List, which removes its tweets from their timeline and stops related notifications. Reports following: false on success, even if the user was not initially following the list.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'list_id', + type: 'string', + required: true, + description: `ID of the list to unfollow`, + }, + ], + }, + { + name: 'twitter_list_unpin', + description: `Unpins a List from the authenticated user's profile. The user ID is automatically retrieved if not provided.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { name: 'list_id', type: 'string', required: true, description: `ID of the list to unpin` }, + ], + }, + { + name: 'twitter_list_update', + description: `Updates an existing Twitter List's name, description, or privacy status. Requires the List ID and at least one mutable property.`, + params: [ + { name: 'description', type: 'string', required: false, description: `New description` }, + { name: 'id', type: 'string', required: true, description: `Twitter List ID to update` }, + { name: 'name', type: 'string', required: false, description: `New name for the list` }, + { + name: 'private', + type: 'boolean', + required: false, + description: `Set to true to make private, false for public`, + }, + ], + }, + { + name: 'twitter_media_upload', + description: `Uploads media (images only) to X/Twitter using the v2 API. Only supports images (tweet_image, dm_image) and subtitle files. For GIFs, videos, or any file larger than ~5 MB, use twitter_media_upload_large instead.`, + params: [ + { name: 'media', type: 'string', required: true, description: `Base64-encoded image data` }, + { + name: 'media_category', + type: 'string', + required: false, + description: `Media category for use context`, + }, + { + name: 'media_type', + type: 'string', + required: true, + description: `MIME type, e.g. image/jpeg or image/png`, + }, + ], + }, + { + name: 'twitter_media_upload_append', + description: `Appends a data chunk to an ongoing media upload session on X/Twitter. Use during chunked media uploads to append each segment of media data in sequence.`, + params: [ + { + name: 'media_data', + type: 'string', + required: true, + description: `Base64-encoded chunk data`, + }, + { + name: 'media_id', + type: 'string', + required: true, + description: `Media ID from the INIT step`, + }, + { + name: 'segment_index', + type: 'integer', + required: true, + description: `Zero-based index of the chunk segment`, + }, + ], + }, + { + name: 'twitter_media_upload_base64', + description: `Uploads media to X/Twitter using base64-encoded data. Use when you have media content as a base64 string. Only supports images and subtitle files. For videos or GIFs, use twitter_media_upload_large.`, + params: [ + { + name: 'media_category', + type: 'string', + required: false, + description: `Media category for use context`, + }, + { + name: 'media_data', + type: 'string', + required: true, + description: `Base64-encoded media data`, + }, + { + name: 'media_type', + type: 'string', + required: true, + description: `MIME type, e.g. image/jpeg`, + }, + ], + }, + { + name: 'twitter_media_upload_init', + description: `Initializes a media upload session for X/Twitter. Returns a media_id for subsequent APPEND and FINALIZE commands. Required for uploading large files or when using the chunked upload workflow.`, + params: [ + { + name: 'additional_owners', + type: 'string', + required: false, + description: `Comma-separated user IDs to also own the media`, + }, + { + name: 'media_category', + type: 'string', + required: false, + description: `Media category for use context`, + }, + { + name: 'media_type', + type: 'string', + required: true, + description: `MIME type, e.g. video/mp4 or image/gif`, + }, + { + name: 'total_bytes', + type: 'integer', + required: true, + description: `Total size of the media file in bytes`, + }, + ], + }, + { + name: 'twitter_media_upload_large', + description: `Uploads media files to X/Twitter. Automatically uses chunked upload for GIFs, videos, and images larger than 5 MB. Use for videos, GIFs, or any file larger than 5 MB.`, + params: [ + { + name: 'additional_owners', + type: 'string', + required: false, + description: `Comma-separated user IDs to also own the media`, + }, + { + name: 'media_category', + type: 'string', + required: false, + description: `Media category for use context`, + }, + { + name: 'media_data', + type: 'string', + required: true, + description: `Base64-encoded media file data`, + }, + { + name: 'media_type', + type: 'string', + required: true, + description: `MIME type, e.g. video/mp4 or image/gif`, + }, + { + name: 'total_bytes', + type: 'integer', + required: true, + description: `Total size of the file in bytes`, + }, + ], + }, + { + name: 'twitter_media_upload_status_get', + description: `Gets the status of a media upload for X/Twitter. Use to check the processing status of uploaded media, especially for videos and GIFs. Only needed if the FINALIZE command returned processing_info.`, + params: [ + { + name: 'media_id', + type: 'string', + required: true, + description: `Media ID from the upload INIT step`, + }, + ], + }, + { + name: 'twitter_muted_users_get', + description: `Returns user objects muted by the X user identified by the id path parameter.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-1000)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_openapi_spec_get', + description: `Fetches the OpenAPI specification (JSON) for Twitter's API v2. Used to programmatically understand the API's structure for developing client libraries or tools.`, + params: [], + }, + { + name: 'twitter_post_analytics_get', + description: `Retrieves analytics data for specified Posts within a defined time range. Returns engagement metrics, impressions, and other analytics. Requires OAuth 2.0 with tweet.read and users.read scopes.`, + params: [ + { name: 'end_time', type: 'string', required: true, description: `ISO 8601 end time` }, + { name: 'start_time', type: 'string', required: true, description: `ISO 8601 start time` }, + { + name: 'tweet_ids', + type: 'string', + required: true, + description: `Comma-separated list of Tweet IDs`, + }, + ], + }, + { + name: 'twitter_post_create', + description: `Creates a Tweet on Twitter. The \`text\` field is required unless card_uri, media_media_ids, poll_options, or quote_tweet_id is provided. Supports media, polls, geo, and reply targeting.`, + params: [ + { + name: 'geo_place_id', + type: 'string', + required: false, + description: `Place ID for geo tag`, + }, + { + name: 'media_media_ids', + type: 'array', + required: false, + description: `Media IDs to attach`, + }, + { + name: 'poll_duration_minutes', + type: 'integer', + required: false, + description: `Duration of poll in minutes`, + }, + { name: 'poll_options', type: 'array', required: false, description: `Up to 4 poll options` }, + { + name: 'quote_tweet_id', + type: 'string', + required: false, + description: `ID of the tweet to quote`, + }, + { + name: 'reply_in_reply_to_tweet_id', + type: 'string', + required: false, + description: `ID of the tweet to reply to`, + }, + { name: 'text', type: 'string', required: false, description: `Text content of the tweet` }, + ], + }, + { + name: 'twitter_post_delete', + description: `Irreversibly deletes a specific Tweet by its ID. The Tweet may persist in third-party caches after deletion.`, + params: [ + { name: 'id', type: 'string', required: true, description: `ID of the Tweet to delete` }, + ], + }, + { + name: 'twitter_post_like', + description: `Allows the authenticated user to like a specific, accessible Tweet. The authenticated user's ID is automatically determined from the OAuth token — you only need to provide the tweet_id.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { name: 'tweet_id', type: 'string', required: true, description: `ID of the Tweet to like` }, + ], + }, + { + name: 'twitter_post_likers_get', + description: `Retrieves users who have liked the Post (Tweet) identified by the provided ID.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_post_lookup', + description: `Fetches comprehensive details for a single Tweet by its unique ID, provided the Tweet exists and is accessible.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, + { + name: 'media_fields', + type: 'string', + required: false, + description: `Comma-separated media fields`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_post_quotes_get', + description: `Retrieves Tweets that quote a specified Tweet. Requires a valid Tweet ID.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + ], + }, + { + name: 'twitter_post_retweet', + description: `Retweets a Tweet for the authenticated user. The user ID is automatically fetched from the authenticated session — you only need to provide the tweet_id.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'tweet_id', + type: 'string', + required: true, + description: `ID of the Tweet to retweet`, + }, + ], + }, + { + name: 'twitter_post_retweeters_get', + description: `Retrieves users who publicly retweeted a specified public Post ID, excluding Quote Tweets and retweets from private accounts.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_post_retweets_get', + description: `Retrieves Tweets that Retweeted a specified public or authenticated-user-accessible Tweet ID. Optionally customize the response with fields and expansions.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + ], + }, + { + name: 'twitter_post_unlike', + description: `Allows an authenticated user to remove their like from a specific post. The action is idempotent and completes successfully even if the post was not liked.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'tweet_id', + type: 'string', + required: true, + description: `ID of the Tweet to unlike`, + }, + ], + }, + { + name: 'twitter_post_unretweet', + description: `Removes a user's retweet of a specified Post, if the user had previously retweeted it.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'source_tweet_id', + type: 'string', + required: true, + description: `ID of the Tweet to unretweet`, + }, + ], + }, + { + name: 'twitter_posts_lookup', + description: `Retrieves detailed information for one or more Posts (Tweets) identified by their unique IDs. Allows selection of specific fields and expansions.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'ids', + type: 'string', + required: true, + description: `Comma-separated list of Tweet IDs (up to 100)`, + }, + { + name: 'media_fields', + type: 'string', + required: false, + description: `Comma-separated media fields`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_recent_search', + description: `Searches Tweets from the last 7 days matching a query using X's search syntax. Ideal for real-time analysis, trend monitoring, or retrieving posts from specific users (e.g., from:username). Note: impression_count returns 0 for other users' tweets — use retweet_count, like_count, or quote_count for engagement filtering instead.`, + params: [ + { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (10-100)`, + }, + { + name: 'media_fields', + type: 'string', + required: false, + description: `Comma-separated media fields`, + }, + { name: 'next_token', type: 'string', required: false, description: `Next page token` }, + { + name: 'query', + type: 'string', + required: true, + description: `Search query using X search syntax, e.g. from:username -is:retweet`, + }, + { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, + { name: 'start_time', type: 'string', required: false, description: `ISO 8601 start time` }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { name: 'until_id', type: 'string', required: false, description: `Maximum tweet ID` }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_recent_tweet_counts', + description: `Retrieves the count of Tweets matching a specified search query within the last 7 days, aggregated by 'minute', 'hour', or 'day'.`, + params: [ + { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, + { + name: 'granularity', + type: 'string', + required: false, + description: `Aggregation granularity`, + }, + { name: 'query', type: 'string', required: true, description: `Search query` }, + { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, + { name: 'start_time', type: 'string', required: false, description: `ISO 8601 start time` }, + { name: 'until_id', type: 'string', required: false, description: `Maximum tweet ID` }, + ], + }, + { + name: 'twitter_reply_visibility_set', + description: `Hides or unhides an existing reply Tweet. Allows the authenticated user to hide or unhide a reply to a conversation they own. You can only hide replies to posts you authored. Requires tweet.moderate.write OAuth scope.`, + params: [ + { + name: 'hidden', + type: 'boolean', + required: true, + description: `true to hide, false to unhide`, + }, + { + name: 'tweet_id', + type: 'string', + required: true, + description: `ID of the reply tweet to hide or unhide`, + }, + ], + }, + { + name: 'twitter_space_get', + description: `Retrieves details for a Twitter Space by its ID, allowing for customization and expansion of related data.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, + { + name: 'space_fields', + type: 'string', + required: false, + description: `Comma-separated space fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_space_posts_get', + description: `Retrieves Tweets that were shared/posted during a Twitter Space broadcast. Returns Tweets that participants explicitly shared during the Space session, NOT audio transcripts. Most Spaces have zero associated Tweets — empty results are normal.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + ], + }, + { + name: 'twitter_space_ticket_buyers_get', + description: `Retrieves a list of users who purchased tickets for a specific, valid, and ticketed Twitter Space.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_spaces_by_creator_get', + description: `Retrieves Twitter Spaces created by a list of specified User IDs, with options to customize returned data fields.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'space_fields', + type: 'string', + required: false, + description: `Comma-separated space fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + { + name: 'user_ids', + type: 'string', + required: true, + description: `Comma-separated list of user IDs to get spaces for`, + }, + ], + }, + { + name: 'twitter_spaces_get', + description: `Fetches detailed information for one or more Twitter Spaces (live, scheduled, or ended) by their unique IDs. At least one Space ID must be provided.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'ids', + type: 'string', + required: true, + description: `Comma-separated list of Space IDs`, + }, + { + name: 'space_fields', + type: 'string', + required: false, + description: `Comma-separated space fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_spaces_search', + description: `Searches for Twitter Spaces by a textual query. Optionally filter by state (live, scheduled, all) to discover audio conversations.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Text to search for in Space titles`, + }, + { + name: 'space_fields', + type: 'string', + required: false, + description: `Comma-separated space fields`, + }, + { name: 'state', type: 'string', required: false, description: `Filter by space state` }, + ], + }, + { + name: 'twitter_tweet_label_stream', + description: `Stream real-time Tweet label events (apply/remove). Requires Enterprise access and App-Only OAuth 2.0 auth. Returns PublicTweetNotice or PublicTweetUnviewable events. 403 errors indicate missing Enterprise access or wrong auth type.`, + params: [ + { + name: 'backfill_minutes', + type: 'integer', + required: false, + description: `Minutes of backfill to stream on reconnect (0-5)`, + }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + ], + }, + { + name: 'twitter_tweet_usage_get', + description: `Fetches Tweet usage statistics for a Project (e.g., consumption, caps, daily breakdowns for Project and Client Apps) to monitor API limits. Data can be retrieved for 1 to 90 days.`, + params: [ + { + name: 'days', + type: 'integer', + required: false, + description: `Number of days to retrieve usage data for, default 7`, + }, + { + name: 'usage_fields', + type: 'string', + required: false, + description: `Comma-separated usage fields to include`, + }, + ], + }, + { + name: 'twitter_user_follow', + description: `Allows an authenticated user to follow another user. Results in a pending request if the target user's tweets are protected.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'target_user_id', + type: 'string', + required: true, + description: `ID of the user to follow`, + }, + ], + }, + { + name: 'twitter_user_followed_lists_get', + description: `Returns metadata (not Tweets) for lists a specific Twitter user follows. Optionally includes expanded owner details.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'list_fields', + type: 'string', + required: false, + description: `Comma-separated list fields`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_liked_tweets_get', + description: `Retrieves Tweets liked by a specified Twitter user, provided their liked tweets are public or accessible.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (5-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_list_memberships_get', + description: `Retrieves all Twitter Lists a specified user is a member of, including public Lists and private Lists the authenticated user is authorized to view.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'list_fields', + type: 'string', + required: false, + description: `Comma-separated list fields`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_lookup', + description: `Retrieves detailed public information for a Twitter user by their ID. Optionally expand related data (e.g., pinned tweets) and specify particular user or tweet fields to return.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_lookup_by_username', + description: `Fetches public profile information for a valid and existing Twitter user by their username. Optionally expands related data like pinned Tweets. Results may be limited for protected profiles not followed by the authenticated user.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + { + name: 'username', + type: 'string', + required: true, + description: `Twitter username without the @ symbol, e.g. elonmusk`, + }, + ], + }, + { + name: 'twitter_user_me', + description: `Returns profile information for the currently authenticated X user. Use this to get the authenticated user's ID before calling endpoints that require it.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields to return, e.g. created_at,description,public_metrics`, + }, + ], + }, + { + name: 'twitter_user_mute', + description: `Mutes a target user on behalf of an authenticated user, preventing the target's Tweets and Retweets from appearing in the authenticated user's home timeline without notifying the target.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'target_user_id', + type: 'string', + required: true, + description: `ID of the user to mute`, + }, + ], + }, + { + name: 'twitter_user_owned_lists_get', + description: `Retrieves Lists created (owned) by a specific Twitter user, not Lists they follow or are subscribed to.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'list_fields', + type: 'string', + required: false, + description: `Comma-separated list fields`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_pinned_lists_get', + description: `Retrieves the Lists a specific, existing Twitter user has pinned to their profile to highlight them.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, + { + name: 'list_fields', + type: 'string', + required: false, + description: `Comma-separated list fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_timeline_get', + description: `Retrieves the home timeline (reverse chronological feed) for the authenticated Twitter user. Returns tweets from accounts the user follows and the user's own tweets. CRITICAL: The id parameter MUST be the authenticated user's own numeric Twitter user ID. Use twitter_user_me to get your ID first. Cannot fetch another user's home timeline.`, + params: [ + { + name: 'exclude', + type: 'string', + required: false, + description: `Comma-separated types to exclude: retweets,replies`, + }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's own numeric Twitter ID — must be your own ID`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Max results per page (1-100)`, + }, + { + name: 'pagination_token', + type: 'string', + required: false, + description: `Pagination token for next page`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_user_unfollow', + description: `Allows the authenticated user to unfollow an existing Twitter user, which removes the follow relationship. The source user ID is automatically determined from the authenticated session.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'target_user_id', + type: 'string', + required: true, + description: `ID of the user to unfollow`, + }, + ], + }, + { + name: 'twitter_user_unmute', + description: `Unmutes a target user for the authenticated user, allowing them to see Tweets and notifications from the target user again. The source_user_id is automatically populated from the authenticated user's credentials.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's Twitter ID`, + }, + { + name: 'target_user_id', + type: 'string', + required: true, + description: `ID of the user to unmute`, + }, + ], + }, + { + name: 'twitter_users_lookup', + description: `Retrieves detailed information for specified X (formerly Twitter) user IDs. Optionally customize returned fields and expand related entities like pinned tweets.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'ids', + type: 'string', + required: true, + description: `Comma-separated list of Twitter user IDs (up to 100)`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + ], + }, + { + name: 'twitter_users_lookup_by_username', + description: `Retrieves detailed information for 1 to 100 Twitter users by their usernames (each 1-15 alphanumeric characters/underscores). Allows customizable user/tweet fields and expansion of related data like pinned tweets.`, + params: [ + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, + { + name: 'tweet_fields', + type: 'string', + required: false, + description: `Comma-separated tweet fields`, + }, + { + name: 'user_fields', + type: 'string', + required: false, + description: `Comma-separated user fields`, + }, + { + name: 'usernames', + type: 'string', + required: true, + description: `Comma-separated list of Twitter usernames without @ symbols (up to 100)`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/vercel.ts b/src/data/agent-connectors/vercel.ts new file mode 100644 index 000000000..ddb09a171 --- /dev/null +++ b/src/data/agent-connectors/vercel.ts @@ -0,0 +1,1278 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'vercel_alias_create', + description: `Assigns an alias (custom domain) to a Vercel deployment.`, + params: [ + { + name: 'alias', + type: 'string', + required: true, + description: `The alias hostname to assign.`, + }, + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to assign the alias to.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_alias_delete', + description: `Removes an alias from a Vercel deployment.`, + params: [ + { + name: 'alias_or_id', + type: 'string', + required: true, + description: `The alias hostname or ID to delete.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the alias belongs to a team.`, + }, + ], + }, + { + name: 'vercel_alias_get', + description: `Returns information about a specific alias by its ID or hostname.`, + params: [ + { + name: 'alias_or_id', + type: 'string', + required: true, + description: `The alias hostname or ID.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the alias belongs to a team.`, + }, + ], + }, + { + name: 'vercel_aliases_list', + description: `Returns all aliases for the authenticated user or team, with optional domain and deployment filtering.`, + params: [ + { name: 'domain', type: 'string', required: false, description: `Filter aliases by domain.` }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of aliases to return.`, + }, + { + name: 'since', + type: 'integer', + required: false, + description: `Timestamp in ms for pagination.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to list aliases for.`, + }, + ], + }, + { + name: 'vercel_check_create', + description: `Creates a new check on a Vercel deployment. Used by integrations to report status of external checks like test suites or audits.`, + params: [ + { + name: 'blocking', + type: 'boolean', + required: true, + description: `If true, this check must pass before deployment is considered ready.`, + }, + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to create a check for.`, + }, + { + name: 'detailsUrl', + type: 'string', + required: false, + description: `URL where users can view check details.`, + }, + { name: 'name', type: 'string', required: true, description: `Display name for the check.` }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_check_update', + description: `Updates the status and conclusion of a deployment check. Used to report check results back to Vercel.`, + params: [ + { name: 'check_id', type: 'string', required: true, description: `The check ID to update.` }, + { + name: 'conclusion', + type: 'string', + required: false, + description: `Check conclusion: succeeded, failed, skipped, canceled.`, + }, + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID the check belongs to.`, + }, + { + name: 'detailsUrl', + type: 'string', + required: false, + description: `URL where users can view check details.`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Check status: running, completed.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_checks_list', + description: `Returns all checks attached to a Vercel deployment (e.g. from third-party integrations).`, + params: [ + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to list checks for.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_deployment_aliases_list', + description: `Returns all aliases assigned to a specific Vercel deployment.`, + params: [ + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to get aliases for.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_deployment_cancel', + description: `Cancels a Vercel deployment that is currently building or queued.`, + params: [ + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to cancel.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_deployment_create', + description: `Creates a new Vercel deployment for a project, optionally from a Git ref or with inline files.`, + params: [ + { + name: 'git_source', + type: 'string', + required: false, + description: `JSON object with Git source info, e.g. {"type":"github","ref":"main","repoId":"123"}.`, + }, + { name: 'name', type: 'string', required: true, description: `The project name to deploy.` }, + { + name: 'target', + type: 'string', + required: false, + description: `Deployment target: production or preview. Default is preview.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if deploying to a team project.`, + }, + ], + }, + { + name: 'vercel_deployment_delete', + description: `Deletes a Vercel deployment by its ID.`, + params: [ + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to delete.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_deployment_events_list', + description: `Returns build log events for a Vercel deployment. Useful for debugging build errors.`, + params: [ + { + name: 'deployment_id', + type: 'string', + required: true, + description: `The deployment ID to get events for.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of log events to return.`, + }, + { + name: 'since', + type: 'integer', + required: false, + description: `Timestamp in ms to fetch events after.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_deployment_get', + description: `Returns details of a specific Vercel deployment by its ID or URL, including build status, target, and metadata.`, + params: [ + { + name: 'id_or_url', + type: 'string', + required: true, + description: `The deployment ID (dpl_xxx) or deployment URL.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the deployment belongs to a team.`, + }, + ], + }, + { + name: 'vercel_deployments_list', + description: `Returns a list of deployments for the authenticated user or a specific project/team, with filtering and pagination.`, + params: [ + { + name: 'from', + type: 'integer', + required: false, + description: `Timestamp in ms for pagination cursor.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of deployments to return.`, + }, + { + name: 'project_id', + type: 'string', + required: false, + description: `Filter deployments by project ID or name.`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter by deployment state: BUILDING, ERROR, INITIALIZING, QUEUED, READY, CANCELED.`, + }, + { + name: 'target', + type: 'string', + required: false, + description: `Filter by target environment: production or preview.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Filter deployments by team ID.`, + }, + ], + }, + { + name: 'vercel_dns_record_create', + description: `Creates a new DNS record for a domain managed by Vercel. Supports A, AAAA, CNAME, TXT, MX, SRV, and CAA records.`, + params: [ + { + name: 'domain', + type: 'string', + required: true, + description: `The domain to create the DNS record for.`, + }, + { + name: 'mx_priority', + type: 'integer', + required: false, + description: `Priority for MX records.`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Subdomain name, or empty string for root domain.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the domain belongs to a team.`, + }, + { + name: 'ttl', + type: 'integer', + required: false, + description: `Time-to-live in seconds. Default is 60.`, + }, + { + name: 'type', + type: 'string', + required: true, + description: `Record type: A, AAAA, CNAME, TXT, MX, SRV, CAA.`, + }, + { + name: 'value', + type: 'string', + required: true, + description: `The record value (IP address, hostname, text, etc.).`, + }, + ], + }, + { + name: 'vercel_dns_record_delete', + description: `Deletes a DNS record from a domain managed by Vercel.`, + params: [ + { + name: 'domain', + type: 'string', + required: true, + description: `The domain the DNS record belongs to.`, + }, + { + name: 'record_id', + type: 'string', + required: true, + description: `The ID of the DNS record to delete.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the domain belongs to a team.`, + }, + ], + }, + { + name: 'vercel_dns_records_list', + description: `Returns all DNS records for a domain managed by Vercel.`, + params: [ + { + name: 'domain', + type: 'string', + required: true, + description: `The domain to list DNS records for.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of records to return.`, + }, + { + name: 'since', + type: 'integer', + required: false, + description: `Timestamp in ms for pagination.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the domain belongs to a team.`, + }, + ], + }, + { + name: 'vercel_domain_add', + description: `Adds a domain to the authenticated user or team's Vercel account.`, + params: [ + { name: 'name', type: 'string', required: true, description: `The domain name to add.` }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to add the domain to.`, + }, + ], + }, + { + name: 'vercel_domain_delete', + description: `Removes a domain from the authenticated user or team's Vercel account.`, + params: [ + { name: 'domain', type: 'string', required: true, description: `The domain name to delete.` }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the domain belongs to a team.`, + }, + ], + }, + { + name: 'vercel_domain_get', + description: `Returns information about a specific domain including verification status, nameservers, and registrar.`, + params: [ + { + name: 'domain', + type: 'string', + required: true, + description: `The domain name to look up.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the domain belongs to a team.`, + }, + ], + }, + { + name: 'vercel_domains_list', + description: `Returns all domains registered or added to the authenticated user or team's Vercel account.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of domains to return.`, + }, + { + name: 'since', + type: 'integer', + required: false, + description: `Timestamp in ms for pagination.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to list domains for.`, + }, + ], + }, + { + name: 'vercel_edge_config_create', + description: `Creates a new Edge Config store for storing read-only configuration data close to users at the edge.`, + params: [ + { + name: 'slug', + type: 'string', + required: true, + description: `A unique slug for the Edge Config store.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to create the Edge Config under.`, + }, + ], + }, + { + name: 'vercel_edge_config_delete', + description: `Permanently deletes an Edge Config store and all its items.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID to delete.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_config_get', + description: `Returns details of a specific Edge Config store by its ID.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_config_item_get', + description: `Returns the value of a specific item from an Edge Config store by key.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'item_key', + type: 'string', + required: true, + description: `The key of the item to retrieve.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_config_items_list', + description: `Returns all key-value items stored in an Edge Config store.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_config_items_update', + description: `Creates, updates, or deletes items in an Edge Config store using a list of patch operations.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'items', + type: 'string', + required: true, + description: `JSON array of patch operations. Each item has 'operation' (create/update/upsert/delete), 'key', and optionally 'value'.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_config_token_create', + description: `Creates a new read token for an Edge Config store to be used in application code.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'label', + type: 'string', + required: true, + description: `A descriptive label for the token.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_config_tokens_delete', + description: `Deletes one or more read tokens from an Edge Config store.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + { + name: 'tokens', + type: 'string', + required: true, + description: `JSON array of token IDs to delete.`, + }, + ], + }, + { + name: 'vercel_edge_config_tokens_list', + description: `Returns all read tokens for an Edge Config store.`, + params: [ + { + name: 'edge_config_id', + type: 'string', + required: true, + description: `The Edge Config store ID.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, + ], + }, + { + name: 'vercel_edge_configs_list', + description: `Returns all Edge Config stores for the authenticated user or team.`, + params: [ + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to list Edge Configs for.`, + }, + ], + }, + { + name: 'vercel_env_var_create', + description: `Creates a new environment variable for a Vercel project with the specified key, value, and target environments.`, + params: [ + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { name: 'key', type: 'string', required: true, description: `The environment variable key.` }, + { + name: 'target', + type: 'string', + required: false, + description: `JSON array of targets: production, preview, development. Defaults to all.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Variable type: plain or secret. Default is plain.`, + }, + { + name: 'value', + type: 'string', + required: true, + description: `The environment variable value.`, + }, + ], + }, + { + name: 'vercel_env_var_delete', + description: `Deletes an environment variable from a Vercel project.`, + params: [ + { + name: 'env_id', + type: 'string', + required: true, + description: `The environment variable ID to delete.`, + }, + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_env_var_update', + description: `Updates an existing environment variable for a Vercel project.`, + params: [ + { + name: 'env_id', + type: 'string', + required: true, + description: `The environment variable ID to update.`, + }, + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'target', + type: 'string', + required: false, + description: `JSON array of new targets: production, preview, development.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + { + name: 'value', + type: 'string', + required: false, + description: `New value for the environment variable.`, + }, + ], + }, + { + name: 'vercel_env_vars_list', + description: `Returns all environment variables for a Vercel project, including their targets (production, preview, development) and encryption status.`, + params: [ + { + name: 'decrypt', + type: 'boolean', + required: false, + description: `If true, returns decrypted values for sensitive variables.`, + }, + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_project_create', + description: `Creates a new Vercel project with a given name, framework, and optional Git repository.`, + params: [ + { + name: 'framework', + type: 'string', + required: false, + description: `Framework preset, e.g. nextjs, vite, gatsby, nuxtjs, create-react-app.`, + }, + { + name: 'git_repository', + type: 'string', + required: false, + description: `JSON object with 'type' (github/gitlab/bitbucket) and 'repo' (owner/name) fields.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the project.` }, + { + name: 'root_directory', + type: 'string', + required: false, + description: `Root directory of the project within the repository.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to create the project under.`, + }, + ], + }, + { + name: 'vercel_project_delete', + description: `Permanently deletes a Vercel project and all its deployments, domains, and environment variables.`, + params: [ + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name to delete.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_project_domain_add', + description: `Assigns a domain to a Vercel project with an optional redirect target.`, + params: [ + { + name: 'git_branch', + type: 'string', + required: false, + description: `Git branch to associate this domain with for preview deployments.`, + }, + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `The domain name to assign to the project.`, + }, + { + name: 'redirect', + type: 'string', + required: false, + description: `Redirect target domain if this domain should redirect.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_project_domain_delete', + description: `Removes a domain assignment from a Vercel project.`, + params: [ + { + name: 'domain', + type: 'string', + required: true, + description: `The domain name to remove from the project.`, + }, + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_project_domains_list', + description: `Returns all domains assigned to a specific Vercel project.`, + params: [ + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'production', + type: 'boolean', + required: false, + description: `Filter to production domains only.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_project_get', + description: `Returns details of a specific Vercel project including its framework, Git repository, environment variables summary, and domains.`, + params: [ + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_project_update', + description: `Updates a Vercel project's name, framework, build command, output directory, or other settings.`, + params: [ + { + name: 'build_command', + type: 'string', + required: false, + description: `Custom build command override.`, + }, + { + name: 'framework', + type: 'string', + required: false, + description: `Framework preset to apply.`, + }, + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name to update.`, + }, + { + name: 'install_command', + type: 'string', + required: false, + description: `Custom install command override.`, + }, + { name: 'name', type: 'string', required: false, description: `New project name.` }, + { + name: 'output_directory', + type: 'string', + required: false, + description: `Custom output directory override.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the project belongs to a team.`, + }, + ], + }, + { + name: 'vercel_projects_list', + description: `Returns all projects for the authenticated user or team, with optional search and pagination.`, + params: [ + { + name: 'from', + type: 'integer', + required: false, + description: `Timestamp in ms for pagination cursor.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of projects to return.`, + }, + { + name: 'search', + type: 'string', + required: false, + description: `Filter projects by name search query.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to list projects for. Omit for personal projects.`, + }, + ], + }, + { + name: 'vercel_team_create', + description: `Creates a new Vercel team with the specified slug and optional name.`, + params: [ + { name: 'name', type: 'string', required: false, description: `Display name for the team.` }, + { + name: 'slug', + type: 'string', + required: true, + description: `A unique URL-friendly identifier for the team.`, + }, + ], + }, + { + name: 'vercel_team_delete', + description: `Permanently deletes a Vercel team and all its associated resources.`, + params: [ + { + name: 'team_id', + type: 'string', + required: true, + description: `The team ID or slug to delete.`, + }, + ], + }, + { + name: 'vercel_team_get', + description: `Returns details of a specific Vercel team by its ID or slug.`, + params: [ + { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, + ], + }, + { + name: 'vercel_team_member_invite', + description: `Invites a user to a Vercel team by email address with a specified role.`, + params: [ + { + name: 'email', + type: 'string', + required: true, + description: `Email address of the user to invite.`, + }, + { + name: 'role', + type: 'string', + required: false, + description: `Role to assign: OWNER, MEMBER, VIEWER, DEVELOPER, BILLING.`, + }, + { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, + ], + }, + { + name: 'vercel_team_member_remove', + description: `Removes a member from a Vercel team by their user ID.`, + params: [ + { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, + { + name: 'user_id', + type: 'string', + required: true, + description: `The user ID of the member to remove.`, + }, + ], + }, + { + name: 'vercel_team_members_list', + description: `Returns all members of a Vercel team including their roles and join dates.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of members to return.`, + }, + { + name: 'role', + type: 'string', + required: false, + description: `Filter by role: OWNER, MEMBER, VIEWER, DEVELOPER, BILLING.`, + }, + { + name: 'since', + type: 'integer', + required: false, + description: `Timestamp in ms to fetch members joined after this time.`, + }, + { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, + ], + }, + { + name: 'vercel_team_update', + description: `Updates a Vercel team's name, slug, description, or other settings.`, + params: [ + { + name: 'description', + type: 'string', + required: false, + description: `New description for the team.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `New display name for the team.`, + }, + { + name: 'slug', + type: 'string', + required: false, + description: `New URL-friendly slug for the team.`, + }, + { + name: 'team_id', + type: 'string', + required: true, + description: `The team ID or slug to update.`, + }, + ], + }, + { + name: 'vercel_teams_list', + description: `Returns all teams the authenticated user belongs to, with pagination support.`, + params: [ + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of teams to return.`, + }, + { + name: 'since', + type: 'integer', + required: false, + description: `Timestamp in milliseconds to fetch teams created after this time.`, + }, + { + name: 'until', + type: 'integer', + required: false, + description: `Timestamp in milliseconds to fetch teams created before this time.`, + }, + ], + }, + { + name: 'vercel_user_get', + description: `Returns the authenticated user's profile including name, email, username, and account details.`, + params: [], + }, + { + name: 'vercel_webhook_create', + description: `Creates a new webhook that sends event notifications to the specified URL for Vercel deployment and project events.`, + params: [ + { + name: 'events', + type: 'string', + required: true, + description: `JSON array of event types to subscribe to, e.g. ["deployment.created","deployment.succeeded"].`, + }, + { + name: 'project_ids', + type: 'string', + required: false, + description: `JSON array of project IDs to scope this webhook to. Omit for all projects.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to create the webhook for.`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The HTTPS endpoint URL to receive webhook payloads.`, + }, + ], + }, + { + name: 'vercel_webhook_delete', + description: `Permanently deletes a Vercel webhook.`, + params: [ + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the webhook belongs to a team.`, + }, + { + name: 'webhook_id', + type: 'string', + required: true, + description: `The webhook ID to delete.`, + }, + ], + }, + { + name: 'vercel_webhook_get', + description: `Returns details of a specific Vercel webhook by its ID.`, + params: [ + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the webhook belongs to a team.`, + }, + { name: 'webhook_id', type: 'string', required: true, description: `The webhook ID.` }, + ], + }, + { + name: 'vercel_webhooks_list', + description: `Returns all webhooks configured for the authenticated user or team.`, + params: [ + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID to list webhooks for.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/vimeo.ts b/src/data/agent-connectors/vimeo.ts new file mode 100644 index 000000000..a77ef6da2 --- /dev/null +++ b/src/data/agent-connectors/vimeo.ts @@ -0,0 +1,631 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'vimeo_categories_list', + description: `Retrieve all top-level Vimeo content categories (e.g., Animation, Documentary, Music). Requires public scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of categories per page`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for categories` }, + ], + }, + { + name: 'vimeo_channel_videos_list', + description: `Retrieve all videos in a specific Vimeo channel. Requires public scope.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `Vimeo channel ID or slug`, + }, + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'filter', type: 'string', required: false, description: `Filter videos by type` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter channel videos`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for videos` }, + ], + }, + { + name: 'vimeo_channels_list', + description: `Retrieve a list of Vimeo channels. Can list all public channels or channels the authenticated user follows/manages. Requires public scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'filter', type: 'string', required: false, description: `Filter channels by type` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of channels per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter channels by name`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for channels` }, + ], + }, + { + name: 'vimeo_folder_create', + description: `Create a new folder (project) in the authenticated user's Vimeo account for organizing private video content. Requires create scope.`, + params: [ + { name: 'name', type: 'string', required: true, description: `Name of the new folder` }, + { + name: 'parent_folder_uri', + type: 'string', + required: false, + description: `URI of the parent folder to nest this folder inside`, + }, + ], + }, + { + name: 'vimeo_folder_video_add', + description: `Move or add a video into a Vimeo folder (project). Requires edit scope.`, + params: [ + { + name: 'folder_id', + type: 'string', + required: true, + description: `Folder (project) ID to add the video to`, + }, + { + name: 'video_id', + type: 'string', + required: true, + description: `Video ID to add to the folder`, + }, + ], + }, + { + name: 'vimeo_folder_videos_list', + description: `Retrieve all videos inside a specific Vimeo folder (project). Requires private scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'filter', type: 'string', required: false, description: `Filter videos by type` }, + { + name: 'folder_id', + type: 'string', + required: true, + description: `Folder (project) ID to list videos from`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter videos by name`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for videos` }, + ], + }, + { + name: 'vimeo_folders_list', + description: `Retrieve all folders (projects) owned by the authenticated Vimeo user for organizing private video libraries. Requires private scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of folders per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter folders by name`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for folders` }, + ], + }, + { + name: 'vimeo_following_list', + description: `Retrieve a list of Vimeo users that the authenticated user is following. Requires private scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { + name: 'filter', + type: 'string', + required: false, + description: `Filter following list by type`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of users per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter following list by name`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order` }, + ], + }, + { + name: 'vimeo_liked_videos_list', + description: `Retrieve all videos liked by the authenticated Vimeo user. Requires private scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { + name: 'filter', + type: 'string', + required: false, + description: `Filter liked videos by type`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for liked videos` }, + ], + }, + { + name: 'vimeo_me_get', + description: `Retrieve the authenticated Vimeo user's profile including account type, bio, location, stats, and links. Requires a valid Vimeo OAuth2 connection.`, + params: [], + }, + { + name: 'vimeo_my_videos_list', + description: `Retrieve all videos uploaded by the authenticated Vimeo user. Supports filtering, sorting, and pagination. Requires private scope.`, + params: [ + { + name: 'containing_uri', + type: 'string', + required: false, + description: `Filter videos that contain a specific URI`, + }, + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'filter', type: 'string', required: false, description: `Filter videos by type` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter videos by title or description`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort order for video results`, + }, + ], + }, + { + name: 'vimeo_showcase_create', + description: `Create a new showcase (album) on Vimeo for organizing videos. Supports privacy, password protection, branding, and embed settings. Requires create scope.`, + params: [ + { + name: 'brand_color', + type: 'string', + required: false, + description: `Hex color code for showcase branding`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Description of the showcase`, + }, + { + name: 'hide_nav', + type: 'boolean', + required: false, + description: `Whether to hide Vimeo navigation in the showcase`, + }, + { + name: 'hide_upcoming', + type: 'boolean', + required: false, + description: `Whether to hide upcoming live events in the showcase`, + }, + { name: 'name', type: 'string', required: true, description: `Name/title of the showcase` }, + { + name: 'password', + type: 'string', + required: false, + description: `Password for the showcase when privacy is set to 'password'`, + }, + { + name: 'privacy', + type: 'string', + required: false, + description: `Privacy setting for the showcase`, + }, + { + name: 'review_mode', + type: 'boolean', + required: false, + description: `Enable review mode for the showcase`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Default sort for videos in the showcase`, + }, + ], + }, + { + name: 'vimeo_showcase_video_add', + description: `Add a video to a Vimeo showcase. Requires edit scope and ownership of both the showcase and the video.`, + params: [ + { + name: 'album_id', + type: 'string', + required: true, + description: `Showcase (album) ID to add the video to`, + }, + { + name: 'video_id', + type: 'string', + required: true, + description: `Video ID to add to the showcase`, + }, + ], + }, + { + name: 'vimeo_showcase_videos_list', + description: `Retrieve all videos in a specific Vimeo showcase. Requires private scope.`, + params: [ + { name: 'album_id', type: 'string', required: true, description: `Showcase (album) ID` }, + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for videos` }, + ], + }, + { + name: 'vimeo_showcases_list', + description: `Retrieve all showcases (formerly albums) owned by the authenticated Vimeo user. Requires private scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of showcases per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter showcases by name`, + }, + { name: 'sort', type: 'string', required: false, description: `Sort order for showcases` }, + ], + }, + { + name: 'vimeo_user_follow', + description: `Follow a Vimeo user on behalf of the authenticated user. Requires interact scope.`, + params: [ + { + name: 'follow_user_id', + type: 'string', + required: true, + description: `Vimeo user ID to follow`, + }, + ], + }, + { + name: 'vimeo_user_get', + description: `Retrieve public profile information for any Vimeo user by their user ID or username. Requires public scope.`, + params: [ + { name: 'user_id', type: 'string', required: true, description: `Vimeo user ID or username` }, + ], + }, + { + name: 'vimeo_user_videos_list', + description: `Retrieve all public videos uploaded by a specific Vimeo user. Supports filtering and pagination. Requires public scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { + name: 'filter', + type: 'string', + required: false, + description: `Filter results by video type`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { + name: 'query', + type: 'string', + required: false, + description: `Search query to filter videos`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort order for video results`, + }, + { name: 'user_id', type: 'string', required: true, description: `Vimeo user ID or username` }, + ], + }, + { + name: 'vimeo_video_comment_add', + description: `Post a comment on a Vimeo video on behalf of the authenticated user. Requires interact scope.`, + params: [ + { name: 'text', type: 'string', required: true, description: `Comment text to post` }, + { + name: 'video_id', + type: 'string', + required: true, + description: `Vimeo video ID to comment on`, + }, + ], + }, + { + name: 'vimeo_video_comments_list', + description: `Retrieve all comments posted on a specific Vimeo video. Requires public scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of comments per page`, + }, + { + name: 'video_id', + type: 'string', + required: true, + description: `Vimeo video ID to list comments from`, + }, + ], + }, + { + name: 'vimeo_video_delete', + description: `Permanently delete a Vimeo video. This action is irreversible. Requires delete scope and ownership of the video.`, + params: [ + { name: 'video_id', type: 'string', required: true, description: `Vimeo video ID to delete` }, + ], + }, + { + name: 'vimeo_video_edit', + description: `Update the metadata of an existing Vimeo video including title, description, privacy settings, tags, and content rating. Requires edit scope.`, + params: [ + { + name: 'content_rating', + type: 'string', + required: false, + description: `Content rating of the video`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `New description for the video`, + }, + { + name: 'license', + type: 'string', + required: false, + description: `Creative Commons license to apply`, + }, + { name: 'name', type: 'string', required: false, description: `New title for the video` }, + { + name: 'password', + type: 'string', + required: false, + description: `Password for the video when privacy view is set to 'password'`, + }, + { + name: 'privacy_add', + type: 'boolean', + required: false, + description: `Whether users can add the video to their showcases or channels`, + }, + { + name: 'privacy_comments', + type: 'string', + required: false, + description: `Who can comment on the video`, + }, + { + name: 'privacy_download', + type: 'boolean', + required: false, + description: `Whether users can download the video`, + }, + { + name: 'privacy_embed', + type: 'string', + required: false, + description: `Who can embed the video`, + }, + { + name: 'privacy_view', + type: 'string', + required: false, + description: `Who can view the video`, + }, + { name: 'video_id', type: 'string', required: true, description: `Vimeo video ID to edit` }, + ], + }, + { + name: 'vimeo_video_get', + description: `Retrieve detailed information about a specific Vimeo video including metadata, privacy settings, stats, and embed details. Requires a valid Vimeo OAuth2 connection.`, + params: [{ name: 'video_id', type: 'string', required: true, description: `Vimeo video ID` }], + }, + { + name: 'vimeo_video_like', + description: `Like a Vimeo video on behalf of the authenticated user. Use PUT /me/likes/{video_id} to like. Requires interact scope.`, + params: [ + { name: 'video_id', type: 'string', required: true, description: `Vimeo video ID to like` }, + ], + }, + { + name: 'vimeo_video_tags_list', + description: `Retrieve all tags applied to a specific Vimeo video. Requires public scope.`, + params: [ + { + name: 'video_id', + type: 'string', + required: true, + description: `Vimeo video ID to list tags from`, + }, + ], + }, + { + name: 'vimeo_videos_search', + description: `Search for public videos on Vimeo using keywords and filters. Returns paginated video results with metadata. Requires a valid Vimeo OAuth2 connection with public scope.`, + params: [ + { + name: 'direction', + type: 'string', + required: false, + description: `Sort direction for results`, + }, + { + name: 'filter', + type: 'string', + required: false, + description: `Filter results by video type`, + }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number of results to return`, + }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of results to return per page`, + }, + { name: 'query', type: 'string', required: true, description: `Search query keywords` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort order for search results`, + }, + ], + }, + { + name: 'vimeo_watchlater_add', + description: `Add a video to the authenticated user's Vimeo Watch Later queue. Requires interact scope.`, + params: [ + { + name: 'video_id', + type: 'string', + required: true, + description: `Vimeo video ID to add to Watch Later`, + }, + ], + }, + { + name: 'vimeo_watchlater_list', + description: `Retrieve all videos in the authenticated user's Vimeo Watch Later queue. Requires private scope.`, + params: [ + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'filter', type: 'string', required: false, description: `Filter by video type` }, + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of videos per page`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort order for watch later videos`, + }, + ], + }, + { + name: 'vimeo_webhook_create', + description: `Register a new webhook endpoint to receive real-time Vimeo event notifications. Supports events for video uploads, transcoding, privacy changes, and comments. Requires private scope.`, + params: [ + { + name: 'event_types', + type: 'array', + required: true, + description: `List of event types that will trigger this webhook`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `HTTPS URL that Vimeo will send webhook POST requests to`, + }, + ], + }, + { + name: 'vimeo_webhook_delete', + description: `Delete a registered Vimeo webhook endpoint so it no longer receives event notifications. Requires private scope.`, + params: [ + { name: 'webhook_id', type: 'string', required: true, description: `Webhook ID to delete` }, + ], + }, + { + name: 'vimeo_webhooks_list', + description: `Retrieve all webhooks registered for the authenticated Vimeo application. Requires private scope.`, + params: [ + { name: 'page', type: 'integer', required: false, description: `Page number of results` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Number of webhooks per page`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/youtube.ts b/src/data/agent-connectors/youtube.ts new file mode 100644 index 000000000..08921c703 --- /dev/null +++ b/src/data/agent-connectors/youtube.ts @@ -0,0 +1,1029 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'youtube_analytics_group_create', + description: `Create a YouTube Analytics group to organize videos, playlists, channels, or assets for collective analytics reporting.`, + params: [ + { + name: 'item_type', + type: 'string', + required: true, + description: `Type of items the group will contain`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID. For content partners only.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `Title of the analytics group`, + }, + ], + }, + { + name: 'youtube_analytics_group_item_insert', + description: `Add a video, playlist, or channel to a YouTube Analytics group.`, + params: [ + { + name: 'group_id', + type: 'string', + required: true, + description: `ID of the Analytics group to add the item to`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID. For content partners only.`, + }, + { + name: 'resource_id', + type: 'string', + required: true, + description: `ID of the resource (video ID, channel ID, or playlist ID)`, + }, + { + name: 'resource_kind', + type: 'string', + required: true, + description: `Type of the resource`, + }, + ], + }, + { + name: 'youtube_analytics_group_items_delete', + description: `Remove an item (video, channel, or playlist) from a YouTube Analytics group.`, + params: [ + { name: 'id', type: 'string', required: true, description: `ID of the group item to remove` }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + ], + }, + { + name: 'youtube_analytics_group_items_list', + description: `Retrieve a list of items (videos, playlists, channels, or assets) that belong to a YouTube Analytics group.`, + params: [ + { + name: 'group_id', + type: 'string', + required: true, + description: `ID of the group whose items to retrieve`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + ], + }, + { + name: 'youtube_analytics_groups_delete', + description: `Delete a YouTube Analytics group. This removes the group but does not delete the videos, channels, or playlists within it.`, + params: [ + { + name: 'group_id', + type: 'string', + required: true, + description: `ID of the Analytics group to delete`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + ], + }, + { + name: 'youtube_analytics_groups_list', + description: `Retrieve a list of YouTube Analytics groups for a channel or content owner. Specify either id or mine to filter results.`, + params: [ + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of group IDs to retrieve`, + }, + { + name: 'mine', + type: 'boolean', + required: false, + description: `If true, return only groups owned by the authenticated user. Required if id is not set.`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for retrieving the next page of results`, + }, + ], + }, + { + name: 'youtube_analytics_groups_update', + description: `Update the title of an existing YouTube Analytics group.`, + params: [ + { + name: 'group_id', + type: 'string', + required: true, + description: `ID of the Analytics group to update`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID. For content partners only.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `New title for the Analytics group`, + }, + ], + }, + { + name: 'youtube_analytics_query', + description: `Query YouTube Analytics data to retrieve metrics like views, watch time, subscribers, revenue, etc. for channels or content owners.`, + params: [ + { + name: 'currency', + type: 'string', + required: false, + description: `Currency for monetary metrics (ISO 4217 code, e.g., USD)`, + }, + { + name: 'dimensions', + type: 'string', + required: false, + description: `Comma-separated list of dimensions to group results by (e.g., day,country,video)`, + }, + { + name: 'end_date', + type: 'string', + required: true, + description: `End date for the analytics report in YYYY-MM-DD format`, + }, + { + name: 'filters', + type: 'string', + required: false, + description: `Filter expression to narrow results (e.g., country==US, video==VIDEO_ID)`, + }, + { + name: 'ids', + type: 'string', + required: true, + description: `Channel or content owner ID. Format: channel==CHANNEL_ID or contentOwner==CONTENT_OWNER_ID`, + }, + { + name: 'include_historical_channel_data', + type: 'boolean', + required: false, + description: `Include historical channel data recorded before the channel was linked to a content owner`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of rows to return in the response (maximum value: 200)`, + }, + { + name: 'metrics', + type: 'string', + required: true, + description: `Comma-separated list of metrics to retrieve (e.g., views,estimatedMinutesWatched,likes,subscribersGained)`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Comma-separated list of columns to sort by. Prefix with - for descending order (e.g., -views)`, + }, + { + name: 'start_date', + type: 'string', + required: true, + description: `Start date for the analytics report in YYYY-MM-DD format`, + }, + { + name: 'start_index', + type: 'integer', + required: false, + description: `1-based index of the first row to return (for pagination)`, + }, + ], + }, + { + name: 'youtube_captions_list', + description: `Retrieve a list of caption tracks for a YouTube video. The part parameter is fixed to 'snippet'. Requires youtube.force-ssl scope.`, + params: [ + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of caption track IDs to filter results`, + }, + { + name: 'video_id', + type: 'string', + required: true, + description: `ID of the video to list captions for`, + }, + ], + }, + { + name: 'youtube_channels_list', + description: `Retrieve information about one or more YouTube channels including subscriber count, video count, and channel metadata. You must provide exactly one filter: id, mine, for_handle, for_username, or managed_by_me. Requires a valid YouTube OAuth2 connection.`, + params: [ + { + name: 'for_handle', + type: 'string', + required: false, + description: `YouTube channel handle to look up (e.g., @MrBeast). Use instead of id, mine, or for_username.`, + }, + { + name: 'for_username', + type: 'string', + required: false, + description: `YouTube username of the channel to look up (legacy). Use instead of id, mine, or for_handle.`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of YouTube channel IDs. Use instead of mine, for_handle, or for_username.`, + }, + { + name: 'managed_by_me', + type: 'boolean', + required: false, + description: `Return channels managed by the authenticated user (content partners only). Use instead of id, mine, for_handle, or for_username.`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of results to return (0-50, default: 5)`, + }, + { + name: 'mine', + type: 'boolean', + required: false, + description: `Return the authenticated user's channel. Use instead of id, for_handle, or for_username.`, + }, + { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of channel resource parts to include in the response`, + }, + ], + }, + { + name: 'youtube_comment_threads_insert', + description: `Post a new top-level comment on a YouTube video. Requires youtube.force-ssl scope.`, + params: [ + { name: 'text', type: 'string', required: true, description: `Text of the comment` }, + { + name: 'video_id', + type: 'string', + required: true, + description: `ID of the video to comment on`, + }, + ], + }, + { + name: 'youtube_comment_threads_list', + description: `Retrieve top-level comment threads for a YouTube video or channel. You must provide exactly one filter: video_id, all_threads_related_to_channel_id, or id. Each thread includes the top-level comment and optionally its replies. Requires a valid YouTube OAuth2 connection.`, + params: [ + { + name: 'all_threads_related_to_channel_id', + type: 'string', + required: false, + description: `Return all comment threads associated with a specific channel. Use instead of video_id or id.`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of comment thread IDs to retrieve. Use instead of video_id or all_threads_related_to_channel_id.`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of comment threads to return (1-100, default: 20)`, + }, + { + name: 'order', + type: 'string', + required: false, + description: `Sort order for comment threads`, + }, + { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of comment thread resource parts to include`, + }, + { + name: 'search_terms', + type: 'string', + required: false, + description: `Limit results to comments containing these search terms`, + }, + { + name: 'video_id', + type: 'string', + required: false, + description: `YouTube video ID to fetch comment threads for. Use instead of all_threads_related_to_channel_id or id.`, + }, + ], + }, + { + name: 'youtube_comments_list', + description: `Retrieve a list of replies to a specific YouTube comment thread. You must provide exactly one filter: parent_id or id. The part parameter is fixed to 'snippet'. Requires youtube.readonly scope.`, + params: [ + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of comment IDs to retrieve. Use instead of parent_id.`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of replies to return (1-100, default: 20). Cannot be used with id filter.`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for pagination to retrieve the next page of replies. Cannot be used with id filter.`, + }, + { + name: 'parent_id', + type: 'string', + required: false, + description: `ID of the comment thread (top-level comment) to list replies for. Use instead of id.`, + }, + { + name: 'text_format', + type: 'string', + required: false, + description: `Format of the comment text in the response`, + }, + ], + }, + { + name: 'youtube_playlist_delete', + description: `Permanently delete a YouTube playlist. This action cannot be undone. Requires youtube scope.`, + params: [ + { + name: 'playlist_id', + type: 'string', + required: true, + description: `ID of the playlist to delete`, + }, + ], + }, + { + name: 'youtube_playlist_insert', + description: `Create a new YouTube playlist for the authenticated user. Requires youtube scope.`, + params: [ + { + name: 'default_language', + type: 'string', + required: false, + description: `Default language of the playlist`, + }, + { name: 'description', type: 'string', required: false, description: `Playlist description` }, + { name: 'privacy_status', type: 'string', required: false, description: `Privacy setting` }, + { name: 'tags', type: 'array', required: false, description: `Tags for the playlist` }, + { name: 'title', type: 'string', required: true, description: `Playlist title` }, + ], + }, + { + name: 'youtube_playlist_items_delete', + description: `Remove a video from a YouTube playlist by its playlist item ID. Requires youtube scope.`, + params: [ + { + name: 'playlist_item_id', + type: 'string', + required: true, + description: `ID of the playlist item to remove (not the video ID)`, + }, + ], + }, + { + name: 'youtube_playlist_items_insert', + description: `Add a video to a YouTube playlist at an optional position. Requires youtube scope.`, + params: [ + { + name: 'note', + type: 'string', + required: false, + description: `Optional note for this playlist item`, + }, + { + name: 'playlist_id', + type: 'string', + required: true, + description: `Playlist to add the video to`, + }, + { + name: 'position', + type: 'integer', + required: false, + description: `Zero-based position in the playlist. Omit to add at end.`, + }, + { name: 'video_id', type: 'string', required: true, description: `YouTube video ID to add` }, + ], + }, + { + name: 'youtube_playlist_items_list', + description: `Retrieve a list of videos in a YouTube playlist. Returns playlist items with video details, positions, and metadata. Requires a valid YouTube OAuth2 connection.`, + params: [ + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of playlist items to return (0-50, default: 5)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for pagination to retrieve the next page`, + }, + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of playlist item resource parts to include`, + }, + { + name: 'playlist_id', + type: 'string', + required: true, + description: `YouTube playlist ID to retrieve items from`, + }, + { + name: 'video_id', + type: 'string', + required: false, + description: `Filter results to items containing a specific video`, + }, + ], + }, + { + name: 'youtube_playlist_update', + description: `Update an existing YouTube playlist's title, description, privacy status, or default language. Requires youtube scope.`, + params: [ + { + name: 'default_language', + type: 'string', + required: false, + description: `Language of the playlist`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `New playlist description`, + }, + { + name: 'playlist_id', + type: 'string', + required: true, + description: `ID of the playlist to update`, + }, + { + name: 'privacy_status', + type: 'string', + required: false, + description: `New privacy setting`, + }, + { name: 'title', type: 'string', required: false, description: `New playlist title` }, + ], + }, + { + name: 'youtube_playlists_list', + description: `Retrieve a list of YouTube playlists for a channel or the authenticated user. You must provide exactly one filter: channel_id, id, or mine. Requires a valid YouTube OAuth2 connection.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: false, + description: `Return playlists for a specific channel. Use instead of id or mine.`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of playlist IDs to retrieve. Use instead of channel_id or mine.`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of playlists to return (0-50, default: 5)`, + }, + { + name: 'mine', + type: 'boolean', + required: false, + description: `Return playlists owned by the authenticated user. Use instead of channel_id or id.`, + }, + { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of playlist resource parts to include`, + }, + ], + }, + { + name: 'youtube_reporting_create_job', + description: `Create a YouTube reporting job to schedule daily generation of a specific report type. Once created, YouTube will generate the report daily.`, + params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Human-readable name for the reporting job`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the job is being created`, + }, + { + name: 'report_type_id', + type: 'string', + required: true, + description: `ID of the report type to generate (e.g., channel_basic_a2, channel_demographics_a1)`, + }, + ], + }, + { + name: 'youtube_reporting_jobs_delete', + description: `Delete a scheduled YouTube Reporting API job. Stopping a job means new reports will no longer be generated.`, + params: [ + { + name: 'job_id', + type: 'string', + required: true, + description: `ID of the reporting job to delete`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + ], + }, + { + name: 'youtube_reporting_list_jobs', + description: `List all YouTube Reporting API jobs scheduled for a channel or content owner.`, + params: [ + { + name: 'include_system_managed', + type: 'boolean', + required: false, + description: `If true, include system-managed reporting jobs in the response`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of jobs to return per page`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for retrieving the next page of results`, + }, + ], + }, + { + name: 'youtube_reporting_list_report_types', + description: `List all YouTube Reporting API report types available for a channel or content owner (e.g., channel_basic_a2, channel_demographics_a1).`, + params: [ + { + name: 'include_system_managed', + type: 'boolean', + required: false, + description: `If true, include system-managed report types in the response`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of report types to return per page`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for retrieving the next page of results`, + }, + ], + }, + { + name: 'youtube_reporting_list_reports', + description: `List reports that have been generated for a YouTube reporting job. Each report is a downloadable CSV file.`, + params: [ + { + name: 'created_after', + type: 'string', + required: false, + description: `Only return reports created after this timestamp (RFC3339 format, e.g., 2024-01-01T00:00:00Z)`, + }, + { + name: 'job_id', + type: 'string', + required: true, + description: `ID of the reporting job whose reports to list`, + }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the request is being made`, + }, + { + name: 'page_size', + type: 'integer', + required: false, + description: `Maximum number of reports to return per page`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for retrieving the next page of results`, + }, + { + name: 'start_time_at_or_after', + type: 'string', + required: false, + description: `Only return reports whose data start time is at or after this timestamp (RFC3339 format)`, + }, + { + name: 'start_time_before', + type: 'string', + required: false, + description: `Only return reports whose data start time is before this timestamp (RFC3339 format)`, + }, + ], + }, + { + name: 'youtube_search', + description: `Search for videos, channels, and playlists on YouTube. Returns a list of resources matching the search query. The part parameter is fixed to 'snippet'. Requires a valid YouTube OAuth2 connection.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: false, + description: `Restrict search results to a specific channel`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of results to return (0-50, default: 10)`, + }, + { + name: 'order', + type: 'string', + required: false, + description: `Sort order for search results`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for pagination to retrieve the next page of results`, + }, + { + name: 'published_after', + type: 'string', + required: false, + description: `Filter results to resources published after this date (RFC 3339 format)`, + }, + { + name: 'published_before', + type: 'string', + required: false, + description: `Filter results to resources published before this date (RFC 3339 format)`, + }, + { name: 'q', type: 'string', required: false, description: `Search query keywords` }, + { + name: 'safe_search', + type: 'string', + required: false, + description: `Safe search filter level`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Restrict results to a specific resource type`, + }, + { + name: 'video_duration', + type: 'string', + required: false, + description: `Filter videos by duration (only applies when type is 'video')`, + }, + ], + }, + { + name: 'youtube_subscriptions_delete', + description: `Unsubscribe the authenticated user from a YouTube channel using the subscription ID. Requires youtube scope.`, + params: [ + { + name: 'subscription_id', + type: 'string', + required: true, + description: `ID of the subscription to delete`, + }, + ], + }, + { + name: 'youtube_subscriptions_insert', + description: `Subscribe the authenticated user to a YouTube channel. Requires youtube scope.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: true, + description: `ID of the YouTube channel to subscribe to`, + }, + ], + }, + { + name: 'youtube_subscriptions_list', + description: `Retrieve a list of YouTube channel subscriptions for the authenticated user or a specific channel. You must provide exactly one filter: channel_id, id, mine, my_recent_subscribers, or my_subscribers. Requires a valid YouTube OAuth2 connection with youtube.readonly scope.`, + params: [ + { + name: 'channel_id', + type: 'string', + required: false, + description: `Return subscriptions for a specific channel. Use instead of id, mine, my_recent_subscribers, or my_subscribers.`, + }, + { + name: 'for_channel_id', + type: 'string', + required: false, + description: `Filter subscriptions to specific channels (comma-separated channel IDs)`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of subscription IDs to retrieve. Use instead of channel_id, mine, my_recent_subscribers, or my_subscribers.`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of subscriptions to return (0-50, default: 5)`, + }, + { + name: 'mine', + type: 'boolean', + required: false, + description: `Return subscriptions for the authenticated user. Use instead of channel_id, id, my_recent_subscribers, or my_subscribers.`, + }, + { + name: 'my_recent_subscribers', + type: 'boolean', + required: false, + description: `Return the authenticated user's recent subscribers. Use instead of channel_id, id, mine, or my_subscribers.`, + }, + { + name: 'my_subscribers', + type: 'boolean', + required: false, + description: `Return the authenticated user's subscribers. Use instead of channel_id, id, mine, or my_recent_subscribers.`, + }, + { + name: 'order', + type: 'string', + required: false, + description: `Sort order for subscriptions`, + }, + { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of subscription resource parts to include`, + }, + ], + }, + { + name: 'youtube_video_categories_list', + description: `Retrieve a list of YouTube video categories available in a given region or by ID. You must provide exactly one filter: id or region_code. The part parameter is fixed to 'snippet'. Useful for setting the category when updating a video. Requires youtube.readonly scope.`, + params: [ + { + name: 'hl', + type: 'string', + required: false, + description: `Language for the category names in the response (BCP-47)`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of category IDs to retrieve. Use instead of region_code.`, + }, + { + name: 'region_code', + type: 'string', + required: false, + description: `ISO 3166-1 alpha-2 country code to retrieve categories available in that region. Use instead of id.`, + }, + ], + }, + { + name: 'youtube_videos_delete', + description: `Permanently delete a YouTube video. This action cannot be undone. Requires youtube scope.`, + params: [ + { + name: 'video_id', + type: 'string', + required: true, + description: `ID of the video to delete`, + }, + ], + }, + { + name: 'youtube_videos_get_rating', + description: `Retrieve the authenticated user's rating (like, dislike, or none) for one or more YouTube videos. The part parameter is fixed to 'id'. Requires youtube.readonly scope.`, + params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Comma-separated list of YouTube video IDs to get ratings for`, + }, + ], + }, + { + name: 'youtube_videos_list', + description: `Retrieve detailed information about one or more YouTube videos including statistics, snippet, content details, and status. You must provide exactly one filter: id, chart, or my_rating. Requires a valid YouTube OAuth2 connection.`, + params: [ + { + name: 'chart', + type: 'string', + required: false, + description: `Retrieve a chart of the most popular videos. Use instead of id or my_rating.`, + }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of YouTube video IDs. Use instead of chart or my_rating.`, + }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of results to return when using chart filter (1-50, default: 5)`, + }, + { + name: 'my_rating', + type: 'string', + required: false, + description: `Filter videos by the authenticated user's rating. Use instead of id or chart.`, + }, + { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of video resource parts to include in the response`, + }, + { + name: 'region_code', + type: 'string', + required: false, + description: `ISO 3166-1 alpha-2 country code to filter trending videos by region`, + }, + { + name: 'video_category_id', + type: 'string', + required: false, + description: `Filter most popular videos by category ID`, + }, + ], + }, + { + name: 'youtube_videos_rate', + description: `Like, dislike, or remove a rating from a YouTube video on behalf of the authenticated user. Requires youtube scope with youtube.force-ssl.`, + params: [ + { + name: 'rating', + type: 'string', + required: true, + description: `Rating to apply to the video`, + }, + { name: 'video_id', type: 'string', required: true, description: `YouTube video ID to rate` }, + ], + }, + { + name: 'youtube_videos_update', + description: `Update metadata for an existing YouTube video. When updating snippet, both title and category_id are required together. Requires youtube scope.`, + params: [ + { + name: 'category_id', + type: 'string', + required: false, + description: `YouTube video category ID. Required together with title when updating snippet.`, + }, + { + name: 'default_language', + type: 'string', + required: false, + description: `Language of the video`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `New video description`, + }, + { + name: 'embeddable', + type: 'boolean', + required: false, + description: `Whether the video can be embedded`, + }, + { name: 'license', type: 'string', required: false, description: `Video license` }, + { + name: 'privacy_status', + type: 'string', + required: false, + description: `New privacy setting`, + }, + { + name: 'public_stats_viewable', + type: 'boolean', + required: false, + description: `Whether stats are publicly visible`, + }, + { name: 'tags', type: 'array', required: false, description: `Video tags` }, + { + name: 'title', + type: 'string', + required: false, + description: `New video title. Required together with category_id when updating snippet.`, + }, + { + name: 'video_id', + type: 'string', + required: true, + description: `ID of the video to update`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/zendesk.ts b/src/data/agent-connectors/zendesk.ts new file mode 100644 index 000000000..4459ab847 --- /dev/null +++ b/src/data/agent-connectors/zendesk.ts @@ -0,0 +1,442 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'zendesk_groups_list', + description: `List all groups in Zendesk. Groups are used to organize agents and route tickets.`, + params: [ + { name: 'page', type: 'number', required: false, description: `Page number for pagination` }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of groups per page (max 100)`, + }, + ], + }, + { + name: 'zendesk_organization_get', + description: `Retrieve details of a specific Zendesk organization by ID. Returns organization name, domain names, tags, notes, shared ticket settings, and custom fields.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Additional related data to include (e.g., lookup_relationship_fields)`, + }, + { + name: 'organization_id', + type: 'number', + required: true, + description: `The ID of the organization to retrieve`, + }, + ], + }, + { + name: 'zendesk_organizations_list', + description: `List all organizations in Zendesk with pagination support.`, + params: [ + { name: 'page', type: 'number', required: false, description: `Page number for pagination` }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of organizations per page (max 100)`, + }, + ], + }, + { + name: 'zendesk_search_tickets', + description: `Search Zendesk tickets using a query string. Supports Zendesk's search syntax (e.g., 'type:ticket status:open'). Zendesk limits search results to 1,000 total — the maximum valid page is floor(1000 / per_page) (e.g., per_page=100 → max page 10, per_page=25 → max page 40). Stop paginating when next_page is null or you reach the max page; requesting beyond the limit returns a 400 error.`, + params: [ + { + name: 'page', + type: 'number', + required: false, + description: `Page number for pagination. Max valid page = floor(1000 / per_page). Do not exceed this — Zendesk returns a 400 error beyond the 1,000 result limit.`, + }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of results per page (max 100). Determines the max page ceiling: floor(1000 / per_page). Higher values mean fewer pages but a lower max page number.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `Search query string using Zendesk search syntax (e.g., 'type:ticket status:open assignee:me')`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Field to sort results by (updated_at, created_at, priority, status, ticket_type)`, + }, + { + name: 'sort_order', + type: 'string', + required: false, + description: `Sort direction: asc or desc (default: desc)`, + }, + ], + }, + { + name: 'zendesk_side_conversation_get', + description: `Retrieve a specific side conversation on a Zendesk ticket by its ID. Returns the side conversation's state, subject, participants, preview text, and timestamps. Requires the Collaboration add-on.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history of the side conversation.`, + }, + { + name: 'side_conversation_id', + type: 'string', + required: true, + description: `The ID of the side conversation to retrieve`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the parent ticket`, + }, + ], + }, + { + name: 'zendesk_side_conversations_list', + description: `List all side conversations on a Zendesk ticket. Returns side conversations including their state, subject, participants, and preview text. Requires the Collaboration add-on.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history for each side conversation.`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket whose side conversations to list`, + }, + ], + }, + { + name: 'zendesk_ticket_comments_list', + description: `Retrieve all comments (public replies and internal notes) for a specific Zendesk ticket. Returns comment body, author, timestamps, and attachments.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Sideloads to include. Accepts 'users' to list email CCs.`, + }, + { + name: 'include_inline_images', + type: 'boolean', + required: false, + description: `When true, inline images are listed as attachments (default: false)`, + }, + { + name: 'sort_order', + type: 'string', + required: false, + description: `Sort direction for comments: asc or desc (default: asc)`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket whose comments to list`, + }, + ], + }, + { + name: 'zendesk_ticket_create', + description: `Create a new support ticket in Zendesk. Requires a comment/description and optionally a subject, priority, assignee, and tags.`, + params: [ + { + name: 'assignee_email', + type: 'string', + required: false, + description: `Email of the agent to assign the ticket to`, + }, + { + name: 'comment_body', + type: 'string', + required: true, + description: `The description or first comment of the ticket`, + }, + { + name: 'priority', + type: 'string', + required: false, + description: `Ticket priority: urgent, high, normal, or low`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Ticket status: new, open, pending, hold, solved, or closed`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `The subject/title of the ticket`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `List of tags to apply to the ticket`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Ticket type: problem, incident, question, or task`, + }, + ], + }, + { + name: 'zendesk_ticket_get', + description: `Retrieve details of a specific Zendesk ticket by ID. Returns ticket properties including status, priority, subject, requester, assignee, and timestamps.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Comma-separated list of sideloads to include (e.g., users, groups, organizations)`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket to retrieve`, + }, + ], + }, + { + name: 'zendesk_ticket_reply', + description: `Add a public reply or internal note to a Zendesk ticket. Set public to false for internal notes visible only to agents.`, + params: [ + { + name: 'body', + type: 'string', + required: true, + description: `The reply message content (plain text, markdown supported)`, + }, + { + name: 'public', + type: 'boolean', + required: false, + description: `Whether the comment is public (true) or an internal note (false). Defaults to true.`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket to reply to`, + }, + ], + }, + { + name: 'zendesk_ticket_update', + description: `Update an existing Zendesk ticket. Change status, priority, assignee, subject, tags, or any other writable ticket field.`, + params: [ + { + name: 'assignee_email', + type: 'string', + required: false, + description: `Email of the agent to assign the ticket to`, + }, + { + name: 'assignee_id', + type: 'number', + required: false, + description: `ID of the agent to assign the ticket to`, + }, + { + name: 'group_id', + type: 'number', + required: false, + description: `ID of the group to assign the ticket to`, + }, + { + name: 'priority', + type: 'string', + required: false, + description: `Ticket priority: urgent, high, normal, or low`, + }, + { + name: 'status', + type: 'string', + required: false, + description: `Ticket status: new, open, pending, hold, solved, or closed`, + }, + { + name: 'subject', + type: 'string', + required: false, + description: `New subject/title for the ticket`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `List of tags to set on the ticket (replaces existing tags)`, + }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket to update`, + }, + { + name: 'type', + type: 'string', + required: false, + description: `Ticket type: problem, incident, question, or task`, + }, + ], + }, + { + name: 'zendesk_tickets_list', + description: `List tickets in Zendesk with sorting and pagination. Returns tickets for the authenticated agent's account.`, + params: [ + { name: 'page', type: 'number', required: false, description: `Page number for pagination` }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of tickets per page (max 100)`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Field to sort by: created_at, updated_at, priority, status, ticket_type`, + }, + { + name: 'sort_order', + type: 'string', + required: false, + description: `Sort direction: asc or desc (default: desc)`, + }, + ], + }, + { + name: 'zendesk_user_create', + description: `Create a new user in Zendesk. Can create end-users (customers), agents, or admins. Email is required for end-users.`, + params: [ + { + name: 'email', + type: 'string', + required: false, + description: `Primary email address of the user`, + }, + { name: 'name', type: 'string', required: true, description: `Full name of the user` }, + { + name: 'organization_id', + type: 'number', + required: false, + description: `ID of the organization to associate the user with`, + }, + { + name: 'phone', + type: 'string', + required: false, + description: `Primary phone number (E.164 format, e.g. +15551234567)`, + }, + { + name: 'role', + type: 'string', + required: false, + description: `User role: end-user, agent, or admin. Defaults to end-user.`, + }, + { + name: 'verified', + type: 'boolean', + required: false, + description: `Whether the user's identity is verified. Defaults to false.`, + }, + ], + }, + { + name: 'zendesk_user_get', + description: `Retrieve details of a specific Zendesk user by ID. Returns user profile including name, email, role, organization, and account status.`, + params: [ + { + name: 'include', + type: 'string', + required: false, + description: `Comma-separated list of sideloads to include`, + }, + { + name: 'user_id', + type: 'number', + required: true, + description: `The ID of the user to retrieve`, + }, + ], + }, + { + name: 'zendesk_users_list', + description: `List users in Zendesk. Filter by role (end-user, agent, admin) with pagination support.`, + params: [ + { name: 'page', type: 'number', required: false, description: `Page number for pagination` }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of users per page (max 100)`, + }, + { + name: 'role', + type: 'string', + required: false, + description: `Filter by role: end-user, agent, or admin`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Field to sort by. Prefix with - for descending (e.g. -created_at)`, + }, + ], + }, + { + name: 'zendesk_views_list', + description: `List ticket views in Zendesk. Views are saved filters for organizing tickets by status, assignee, tags, and more.`, + params: [ + { + name: 'access', + type: 'string', + required: false, + description: `Filter by access level: personal, shared, or account`, + }, + { name: 'page', type: 'number', required: false, description: `Page number for pagination` }, + { + name: 'per_page', + type: 'number', + required: false, + description: `Number of views per page (max 100)`, + }, + { + name: 'sort_by', + type: 'string', + required: false, + description: `Field to sort by: title, updated_at, created_at, or position`, + }, + { + name: 'sort_order', + type: 'string', + required: false, + description: `Sort direction: asc or desc`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/zoom.ts b/src/data/agent-connectors/zoom.ts new file mode 100644 index 000000000..8d3406c61 --- /dev/null +++ b/src/data/agent-connectors/zoom.ts @@ -0,0 +1,3 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [] From e8df73e03d398a53ed899924a2460ed92eb54a28 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 18:03:49 +0530 Subject: [PATCH 15/23] fix: resolve post-rebase build errors and restore dev server --- .../templates/agent-connectors/index.ts | 6 +-- .../reference/agent-connectors/discord.mdx | 43 ------------------- .../docs/reference/agent-connectors/figma.mdx | 11 ----- .../reference/agent-connectors/gitlab.mdx | 38 ---------------- .../reference/agent-connectors/pipedrive.mdx | 31 ------------- 5 files changed, 2 insertions(+), 127 deletions(-) delete mode 100644 src/content/docs/reference/agent-connectors/discord.mdx delete mode 100644 src/content/docs/reference/agent-connectors/gitlab.mdx delete mode 100644 src/content/docs/reference/agent-connectors/pipedrive.mdx diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts index 2eba989d1..62c7bed03 100644 --- a/src/components/templates/agent-connectors/index.ts +++ b/src/components/templates/agent-connectors/index.ts @@ -12,7 +12,7 @@ export { default as SetupDropboxSection } from './_setup-dropbox.mdx' export { default as SetupExaSection } from './_setup-exa.mdx' export { default as SetupFigmaSection } from './_setup-figma.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' export { default as SetupGongSection } from './_setup-gong.mdx' export { default as SetupGoogleAdsSection } from './_setup-google-ads.mdx' @@ -37,7 +37,7 @@ export { default as SetupOnedriveSection } from './_setup-onedrive.mdx' export { default as SetupOnenoteSection } from './_setup-onenote.mdx' export { default as SetupOutlookSection } from './_setup-outlook.mdx' export { default as SetupPhantombusterSection } from './_setup-phantombuster.mdx' -export { default as SetupPipedriveSection } from './_setup-pipedrive.mdx' + export { default as SetupSalesforceSection } from './_setup-salesforce.mdx' export { default as SetupServicenowSection } from './_setup-servicenow.mdx' export { default as SetupSharepointSection } from './_setup-sharepoint.mdx' @@ -59,8 +59,6 @@ export { default as UsageChorusSection } from './_usage-chorus.mdx' export { default as UsageClariCopilotSection } from './_usage-clari_copilot.mdx' export { default as UsageClickupSection } from './_usage-clickup.mdx' export { default as UsageConfluenceSection } from './_usage-confluence.mdx' -export { default as UsageBraveSearchSection } from './_usage-brave-search.mdx' -export { default as UsageDiscordSection } from './_usage-discord.mdx' export { default as UsageDropboxSection } from './_usage-dropbox.mdx' export { default as UsageExaSection } from './_usage-exa.mdx' export { default as UsageFathomSection } from './_usage-fathom.mdx' diff --git a/src/content/docs/reference/agent-connectors/discord.mdx b/src/content/docs/reference/agent-connectors/discord.mdx deleted file mode 100644 index 60fd3eb53..000000000 --- a/src/content/docs/reference/agent-connectors/discord.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Discord -description: Connect to Discord. Read user profile, guilds, roles, manage bots, and perform interactions. -tableOfContents: true -sidebar: - label: Discord -head: - - tag: style - content: | - .sl-markdown-content h2 { - font-size: var(--sl-text-xl); - } ---- - -import { Badge } from '@astrojs/starlight/components' -import ToolList from '@/components/ToolList.astro' -import { tools } from '@/data/agent-connectors/discord' -import { SetupDiscordSection } from '@components/templates' -import { UsageDiscordSection } from '@components/templates' - -
-
- Connect to Discord. Read user profile, guilds, roles, manage bots, and perform interactions. -
-
- Discord logo -
-
- -Supports authentication: - - -## Set up the agent connector - - - -## Usage - - - -## Tool list - - diff --git a/src/content/docs/reference/agent-connectors/figma.mdx b/src/content/docs/reference/agent-connectors/figma.mdx index 0f763632e..5a731205b 100644 --- a/src/content/docs/reference/agent-connectors/figma.mdx +++ b/src/content/docs/reference/agent-connectors/figma.mdx @@ -18,8 +18,6 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/figma' -import { SetupFigmaSection } from '@components/templates' -import { UsageFigmaSection } from '@components/templates'
@@ -32,15 +30,6 @@ import { UsageFigmaSection } from '@components/templates' Supports authentication: - -## Set up the agent connector - - - -## Usage - - - ## Tool list diff --git a/src/content/docs/reference/agent-connectors/gitlab.mdx b/src/content/docs/reference/agent-connectors/gitlab.mdx deleted file mode 100644 index 1f4b6a307..000000000 --- a/src/content/docs/reference/agent-connectors/gitlab.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: GitLab -description: Connect to GitLab to manage repositories, issues, merge requests, pipelines, CI/CD, users, groups, and DevOps workflows. -tableOfContents: true -sidebar: - label: GitLab -head: - - tag: style - content: | - .sl-markdown-content h2 { - font-size: var(--sl-text-xl); - } ---- - -import { Badge } from '@astrojs/starlight/components' -import ToolList from '@/components/ToolList.astro' -import { tools } from '@/data/agent-connectors/gitlab' -import { SetupGitlabSection } from '@components/templates' - -
-
- Connect to GitLab to manage repositories, issues, merge requests, pipelines, CI/CD, users, groups, and DevOps workflows. -
-
- GitLab logo -
-
- -Supports authentication: - - -## Set up the agent connector - - - -## Tool list - - diff --git a/src/content/docs/reference/agent-connectors/pipedrive.mdx b/src/content/docs/reference/agent-connectors/pipedrive.mdx deleted file mode 100644 index 765bb232f..000000000 --- a/src/content/docs/reference/agent-connectors/pipedrive.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Pipedrive -description: Connect to Pipedrive CRM. Manage deals, contacts, organizations, activities, leads, and notes to streamline your sales pipeline. -tableOfContents: true -sidebar: - label: Pipedrive -head: - - tag: style - content: | - .sl-markdown-content h2 { - font-size: var(--sl-text-xl); - } ---- - -import { Badge } from '@astrojs/starlight/components' -import ToolList from '@/components/ToolList.astro' -import { tools } from '@/data/agent-connectors/pipedrive' -import { SetupPipedriveSection } from '@components/templates' - -Connect to Pipedrive CRM. Manage deals, contacts, organizations, activities, leads, and notes to streamline your sales pipeline. - -Supports authentication: - - -## Set up the agent connector - - - -## Tool list - - From f2f002bfee59a614e7b95c9487973f392c02a383 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 18:21:50 +0530 Subject: [PATCH 16/23] fix: add missing Setup section imports after rebase conflict resolution --- src/content/docs/reference/agent-connectors/googledocs.mdx | 1 + src/content/docs/reference/agent-connectors/googledrive.mdx | 1 + src/content/docs/reference/agent-connectors/googleforms.mdx | 1 + src/content/docs/reference/agent-connectors/googlemeet.mdx | 1 + src/content/docs/reference/agent-connectors/googlesheets.mdx | 1 + src/content/docs/reference/agent-connectors/microsoftexcel.mdx | 1 + src/content/docs/reference/agent-connectors/microsoftteams.mdx | 1 + src/content/docs/reference/agent-connectors/microsoftword.mdx | 1 + 8 files changed, 8 insertions(+) diff --git a/src/content/docs/reference/agent-connectors/googledocs.mdx b/src/content/docs/reference/agent-connectors/googledocs.mdx index 469c4fea1..f84619571 100644 --- a/src/content/docs/reference/agent-connectors/googledocs.mdx +++ b/src/content/docs/reference/agent-connectors/googledocs.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googledocs' import { UsageGoogledocsSection } from '@components/templates' +import { SetupGoogleDocsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/googledrive.mdx b/src/content/docs/reference/agent-connectors/googledrive.mdx index 646df4aa4..755df5d59 100644 --- a/src/content/docs/reference/agent-connectors/googledrive.mdx +++ b/src/content/docs/reference/agent-connectors/googledrive.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googledrive' import { UsageGoogledriveSection } from '@components/templates' +import { SetupGoogleDriveSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/googleforms.mdx b/src/content/docs/reference/agent-connectors/googleforms.mdx index 3f786612a..14b63aec3 100644 --- a/src/content/docs/reference/agent-connectors/googleforms.mdx +++ b/src/content/docs/reference/agent-connectors/googleforms.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googleforms' import { UsageGoogleformsSection } from '@components/templates' +import { SetupGoogleFormsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/googlemeet.mdx b/src/content/docs/reference/agent-connectors/googlemeet.mdx index 8e22f3bb3..eae1dc208 100644 --- a/src/content/docs/reference/agent-connectors/googlemeet.mdx +++ b/src/content/docs/reference/agent-connectors/googlemeet.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googlemeet' import { UsageGooglemeetSection } from '@components/templates' +import { SetupGoogleMeetsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/googlesheets.mdx b/src/content/docs/reference/agent-connectors/googlesheets.mdx index d3ad73228..4dbc83089 100644 --- a/src/content/docs/reference/agent-connectors/googlesheets.mdx +++ b/src/content/docs/reference/agent-connectors/googlesheets.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googlesheets' import { UsageGooglesheetsSection } from '@components/templates' +import { SetupGoogleSheetsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftexcel.mdx b/src/content/docs/reference/agent-connectors/microsoftexcel.mdx index 237a31859..bb544658d 100644 --- a/src/content/docs/reference/agent-connectors/microsoftexcel.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftexcel.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/microsoftexcel' import { UsageMicrosoftexcelSection } from '@components/templates' +import { SetupMicrosoftExcelSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftteams.mdx b/src/content/docs/reference/agent-connectors/microsoftteams.mdx index 7220dc7f9..a4d2a4831 100644 --- a/src/content/docs/reference/agent-connectors/microsoftteams.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftteams.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/microsoftteams' import { UsageMicrosoftteamsSection } from '@components/templates' +import { SetupMicrosoftTeamsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftword.mdx b/src/content/docs/reference/agent-connectors/microsoftword.mdx index c341e1e22..0e97d0f87 100644 --- a/src/content/docs/reference/agent-connectors/microsoftword.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftword.mdx @@ -16,6 +16,7 @@ import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/microsoftword' import { UsageMicrosoftwordSection } from '@components/templates' +import { SetupMicrosoftWordSection } from '@components/templates'
From d1a46425fc544beb9cce1c6c8ea8a248aa0a6fb4 Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 18:39:37 +0530 Subject: [PATCH 17/23] =?UTF-8?q?feat(provider-catalog):=20sort=20tool=20p?= =?UTF-8?q?arams=20=E2=80=94=20required=20first,=20then=20optional,=20both?= =?UTF-8?q?=20alphabetically?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/sync-agent-connectors.js | 7 +- .../templates/agent-connectors/index.ts | 5 +- .../reference/agent-connectors/affinity.mdx | 2 +- .../reference/agent-connectors/apifymcp.mdx | 12 +- .../docs/reference/agent-connectors/asana.mdx | 2 +- .../agent-connectors/clari_copilot.mdx | 2 +- .../reference/agent-connectors/discord.mdx | 43 ++ .../reference/agent-connectors/evertrace.mdx | 6 +- .../docs/reference/agent-connectors/exa.mdx | 2 + .../reference/agent-connectors/fathom.mdx | 2 +- .../docs/reference/agent-connectors/figma.mdx | 14 +- .../reference/agent-connectors/freshdesk.mdx | 2 +- .../reference/agent-connectors/gitlab.mdx | 38 ++ .../docs/reference/agent-connectors/gong.mdx | 2 +- .../reference/agent-connectors/google_ads.mdx | 2 +- .../reference/agent-connectors/googledocs.mdx | 4 +- .../agent-connectors/googledrive.mdx | 4 +- .../agent-connectors/googleforms.mdx | 2 +- .../reference/agent-connectors/googlemeet.mdx | 4 +- .../agent-connectors/googlesheets.mdx | 4 +- .../agent-connectors/googleslides.mdx | 2 +- .../reference/agent-connectors/granola.mdx | 2 +- .../reference/agent-connectors/granolamcp.mdx | 2 + .../reference/agent-connectors/harvestapi.mdx | 2 +- .../reference/agent-connectors/intercom.mdx | 2 +- .../docs/reference/agent-connectors/jira.mdx | 2 +- .../reference/agent-connectors/linear.mdx | 2 +- .../agent-connectors/microsoftexcel.mdx | 2 +- .../agent-connectors/microsoftteams.mdx | 2 +- .../agent-connectors/microsoftword.mdx | 2 +- .../reference/agent-connectors/monday.mdx | 2 +- .../agent-connectors/phantombuster.mdx | 2 +- .../reference/agent-connectors/pipedrive.mdx | 31 ++ .../reference/agent-connectors/salesforce.mdx | 2 +- .../reference/agent-connectors/supadata.mdx | 2 +- .../docs/reference/agent-connectors/vimeo.mdx | 2 +- .../reference/agent-connectors/youtube.mdx | 2 +- .../docs/reference/agent-connectors/zoom.mdx | 2 +- src/data/agent-connectors/affinity.ts | 12 +- src/data/agent-connectors/apifymcp.ts | 36 +- src/data/agent-connectors/apollo.ts | 26 +- src/data/agent-connectors/attio.ts | 96 ++-- src/data/agent-connectors/brave.ts | 80 ++-- src/data/agent-connectors/discord.ts | 12 +- src/data/agent-connectors/evertrace.ts | 18 +- src/data/agent-connectors/exa.ts | 84 ++-- src/data/agent-connectors/figma.ts | 244 +++++----- src/data/agent-connectors/freshdesk.ts | 88 ++-- src/data/agent-connectors/github.ts | 154 +++--- src/data/agent-connectors/gitlab.ts | 444 +++++++++--------- src/data/agent-connectors/gmail.ts | 38 +- src/data/agent-connectors/gong.ts | 120 ++--- src/data/agent-connectors/googlecalendar.ts | 62 +-- src/data/agent-connectors/googledrive.ts | 24 +- src/data/agent-connectors/googleforms.ts | 24 +- src/data/agent-connectors/googlesheets.ts | 90 ++-- src/data/agent-connectors/googleslides.ts | 12 +- src/data/agent-connectors/granola.ts | 12 +- src/data/agent-connectors/granolamcp.ts | 12 +- src/data/agent-connectors/harvestapi.ts | 38 +- src/data/agent-connectors/hubspot.ts | 48 +- src/data/agent-connectors/jiminny.ts | 72 +-- src/data/agent-connectors/linear.ts | 16 +- src/data/agent-connectors/linkedin.ts | 48 +- src/data/agent-connectors/notion.ts | 108 ++--- src/data/agent-connectors/outlook.ts | 94 ++-- src/data/agent-connectors/outreach.ts | 148 +++--- src/data/agent-connectors/pagerduty.ts | 234 ++++----- src/data/agent-connectors/phantombuster.ts | 66 +-- src/data/agent-connectors/pipedrive.ts | 186 ++++---- src/data/agent-connectors/salesforce.ts | 172 +++---- src/data/agent-connectors/slack.ts | 74 +-- src/data/agent-connectors/snowflake.ts | 76 +-- src/data/agent-connectors/snowflakekeyauth.ts | 76 +-- src/data/agent-connectors/supadata.ts | 60 +-- src/data/agent-connectors/twitter.ts | 306 ++++++------ src/data/agent-connectors/vercel.ts | 158 +++---- src/data/agent-connectors/vimeo.ts | 24 +- src/data/agent-connectors/youtube.ts | 244 +++++----- src/data/agent-connectors/zendesk.ts | 122 ++--- 80 files changed, 2233 insertions(+), 2049 deletions(-) create mode 100644 src/content/docs/reference/agent-connectors/discord.mdx create mode 100644 src/content/docs/reference/agent-connectors/gitlab.mdx create mode 100644 src/content/docs/reference/agent-connectors/pipedrive.mdx diff --git a/scripts/sync-agent-connectors.js b/scripts/sync-agent-connectors.js index 22a99df47..4c23d5580 100644 --- a/scripts/sync-agent-connectors.js +++ b/scripts/sync-agent-connectors.js @@ -533,8 +533,13 @@ function generateTsDataFile(provider, tools) { const name = tool.name || 'unnamed_tool' const description = escapeTemplateLiteral(tool.description || 'No description available.') const inputSchema = tool.input_schema || {} - const properties = Object.entries(inputSchema.properties || {}) const required = inputSchema.required || [] + const properties = Object.entries(inputSchema.properties || {}).sort(([a], [b]) => { + const aReq = required.includes(a) + const bReq = required.includes(b) + if (aReq !== bReq) return aReq ? -1 : 1 + return a.localeCompare(b) + }) lines.push(' {') lines.push(` name: '${name}',`) diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts index 62c7bed03..4b31499b0 100644 --- a/src/components/templates/agent-connectors/index.ts +++ b/src/components/templates/agent-connectors/index.ts @@ -12,7 +12,7 @@ export { default as SetupDropboxSection } from './_setup-dropbox.mdx' export { default as SetupExaSection } from './_setup-exa.mdx' export { default as SetupFigmaSection } from './_setup-figma.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' export { default as SetupGongSection } from './_setup-gong.mdx' export { default as SetupGoogleAdsSection } from './_setup-google-ads.mdx' @@ -37,7 +37,7 @@ export { default as SetupOnedriveSection } from './_setup-onedrive.mdx' export { default as SetupOnenoteSection } from './_setup-onenote.mdx' export { default as SetupOutlookSection } from './_setup-outlook.mdx' export { default as SetupPhantombusterSection } from './_setup-phantombuster.mdx' - +export { default as SetupPipedriveSection } from './_setup-pipedrive.mdx' export { default as SetupSalesforceSection } from './_setup-salesforce.mdx' export { default as SetupServicenowSection } from './_setup-servicenow.mdx' export { default as SetupSharepointSection } from './_setup-sharepoint.mdx' @@ -59,6 +59,7 @@ export { default as UsageChorusSection } from './_usage-chorus.mdx' export { default as UsageClariCopilotSection } from './_usage-clari_copilot.mdx' export { default as UsageClickupSection } from './_usage-clickup.mdx' export { default as UsageConfluenceSection } from './_usage-confluence.mdx' +export { default as UsageDiscordSection } from './_usage-discord.mdx' export { default as UsageDropboxSection } from './_usage-dropbox.mdx' export { default as UsageExaSection } from './_usage-exa.mdx' export { default as UsageFathomSection } from './_usage-fathom.mdx' diff --git a/src/content/docs/reference/agent-connectors/affinity.mdx b/src/content/docs/reference/agent-connectors/affinity.mdx index af5f0b5a2..6f4155a83 100644 --- a/src/content/docs/reference/agent-connectors/affinity.mdx +++ b/src/content/docs/reference/agent-connectors/affinity.mdx @@ -21,7 +21,7 @@ import { tools } from '@/data/agent-connectors/affinity' Connect to Affinity relationship intelligence CRM to manage deal flow, relationships, pipeline opportunities, and network connections for private capital firms including VC, PE, and investment banking.
- Affinity logo + Affinity logo
diff --git a/src/content/docs/reference/agent-connectors/apifymcp.mdx b/src/content/docs/reference/agent-connectors/apifymcp.mdx index 0497ce626..a408a6616 100644 --- a/src/content/docs/reference/agent-connectors/apifymcp.mdx +++ b/src/content/docs/reference/agent-connectors/apifymcp.mdx @@ -15,19 +15,29 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/apifymcp' +import { SetupApifymcpSection } from '@components/templates' +import { UsageApifymcpSection } from '@components/templates'
Connect to Apify MCP to run web scraping, browser automation, and data extraction Actors directly from your AI workflows.
- Apify MCP logo + Apify MCP logo
Supports authentication: +## Set up the agent connector + + + +## Usage + + + ## Tool list diff --git a/src/content/docs/reference/agent-connectors/asana.mdx b/src/content/docs/reference/agent-connectors/asana.mdx index cccc8f98d..79a3ee1cf 100644 --- a/src/content/docs/reference/agent-connectors/asana.mdx +++ b/src/content/docs/reference/agent-connectors/asana.mdx @@ -23,7 +23,7 @@ import { UsageAsanaSection } from '@components/templates' Connect to Asana. Manage tasks, projects, teams, and workflow automation
- Asana logo + Asana logo
diff --git a/src/content/docs/reference/agent-connectors/clari_copilot.mdx b/src/content/docs/reference/agent-connectors/clari_copilot.mdx index 5029d29ef..f17dfc2d5 100644 --- a/src/content/docs/reference/agent-connectors/clari_copilot.mdx +++ b/src/content/docs/reference/agent-connectors/clari_copilot.mdx @@ -22,7 +22,7 @@ import { UsageClariCopilotSection } from '@components/templates' Connect to Clari Copilot for sales call transcripts, analytics, call data, and insights.
- Clari Copilot logo + Clari Copilot logo
diff --git a/src/content/docs/reference/agent-connectors/discord.mdx b/src/content/docs/reference/agent-connectors/discord.mdx new file mode 100644 index 000000000..0ea96f27f --- /dev/null +++ b/src/content/docs/reference/agent-connectors/discord.mdx @@ -0,0 +1,43 @@ +--- +title: Discord +description: Connect to Discord. Read user profile, guilds, roles, manage bots, and perform interactions. +tableOfContents: true +sidebar: + label: Discord +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } +--- + +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/discord' +import { SetupDiscordSection } from '@components/templates' +import { UsageDiscordSection } from '@components/templates' + +
+
+ Connect to Discord. Read user profile, guilds, roles, manage bots, and perform interactions. +
+
+ Discord logo +
+
+ +Supports authentication: + + +## Set up the agent connector + + + +## Usage + + + +## Tool list + + diff --git a/src/content/docs/reference/agent-connectors/evertrace.mdx b/src/content/docs/reference/agent-connectors/evertrace.mdx index 0e322f36a..d2acb77cc 100644 --- a/src/content/docs/reference/agent-connectors/evertrace.mdx +++ b/src/content/docs/reference/agent-connectors/evertrace.mdx @@ -1,9 +1,9 @@ --- -title: evertrace.ai +title: Evertrace.ai description: Connect to evertrace.ai to search and manage talent signals, saved searches, and lists. Access rich professional profiles with scoring, experiences, and education data to power your recruiting and sourcing workflows. tableOfContents: true sidebar: - label: evertrace.ai + label: Evertrace.ai head: - tag: style content: | @@ -21,7 +21,7 @@ import { tools } from '@/data/agent-connectors/evertrace' Connect to evertrace.ai to search and manage talent signals, saved searches, and lists. Access rich professional profiles with scoring, experiences, and education data to power your recruiting and sourcing workflows.
- evertrace.ai logo + Evertrace.ai logo
diff --git a/src/content/docs/reference/agent-connectors/exa.mdx b/src/content/docs/reference/agent-connectors/exa.mdx index 4bdb644ce..2bfd4cad2 100644 --- a/src/content/docs/reference/agent-connectors/exa.mdx +++ b/src/content/docs/reference/agent-connectors/exa.mdx @@ -2,6 +2,8 @@ title: Exa description: Connect to Exa to perform AI-powered semantic web search, crawl websites for structured content, get natural language answers from the web, run in-depth research, and execute large-scale URL discovery with Websets. tableOfContents: true +sidebar: + label: Exa head: - tag: style content: | diff --git a/src/content/docs/reference/agent-connectors/fathom.mdx b/src/content/docs/reference/agent-connectors/fathom.mdx index aba613c97..20ceeac38 100644 --- a/src/content/docs/reference/agent-connectors/fathom.mdx +++ b/src/content/docs/reference/agent-connectors/fathom.mdx @@ -22,7 +22,7 @@ import { UsageFathomSection } from '@components/templates' Connect to Fathom AI meeting assistant. Record, transcribe, and summarize meetings with AI-powered insights
- Fathom logo + Fathom logo
diff --git a/src/content/docs/reference/agent-connectors/figma.mdx b/src/content/docs/reference/agent-connectors/figma.mdx index 5a731205b..c0ff201ba 100644 --- a/src/content/docs/reference/agent-connectors/figma.mdx +++ b/src/content/docs/reference/agent-connectors/figma.mdx @@ -10,14 +10,13 @@ head: .sl-markdown-content h2 { font-size: var(--sl-text-xl); } - table td:first-child, table th:first-child { - white-space: nowrap; - } --- import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/figma' +import { SetupFigmaSection } from '@components/templates' +import { UsageFigmaSection } from '@components/templates'
@@ -30,6 +29,15 @@ import { tools } from '@/data/agent-connectors/figma' Supports authentication: + +## Set up the agent connector + + + +## Usage + + + ## Tool list diff --git a/src/content/docs/reference/agent-connectors/freshdesk.mdx b/src/content/docs/reference/agent-connectors/freshdesk.mdx index c5e0fa76e..54cbc44ef 100644 --- a/src/content/docs/reference/agent-connectors/freshdesk.mdx +++ b/src/content/docs/reference/agent-connectors/freshdesk.mdx @@ -22,7 +22,7 @@ import { UsageFreshdeskSection } from '@components/templates' Connect to Freshdesk. Manage tickets, contacts, companies, and customer support workflows
- Freshdesk logo + Freshdesk logo
diff --git a/src/content/docs/reference/agent-connectors/gitlab.mdx b/src/content/docs/reference/agent-connectors/gitlab.mdx new file mode 100644 index 000000000..1f4b6a307 --- /dev/null +++ b/src/content/docs/reference/agent-connectors/gitlab.mdx @@ -0,0 +1,38 @@ +--- +title: GitLab +description: Connect to GitLab to manage repositories, issues, merge requests, pipelines, CI/CD, users, groups, and DevOps workflows. +tableOfContents: true +sidebar: + label: GitLab +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } +--- + +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/gitlab' +import { SetupGitlabSection } from '@components/templates' + +
+
+ Connect to GitLab to manage repositories, issues, merge requests, pipelines, CI/CD, users, groups, and DevOps workflows. +
+
+ GitLab logo +
+
+ +Supports authentication: + + +## Set up the agent connector + + + +## Tool list + + diff --git a/src/content/docs/reference/agent-connectors/gong.mdx b/src/content/docs/reference/agent-connectors/gong.mdx index c66b6d145..338d575c8 100644 --- a/src/content/docs/reference/agent-connectors/gong.mdx +++ b/src/content/docs/reference/agent-connectors/gong.mdx @@ -23,7 +23,7 @@ import { UsageGongSection } from '@components/templates' Connect with Gong to sync calls, transcripts, insights, coaching and CRM activity
- Gong logo + Gong logo
diff --git a/src/content/docs/reference/agent-connectors/google_ads.mdx b/src/content/docs/reference/agent-connectors/google_ads.mdx index 1fc740b01..e575e05e1 100644 --- a/src/content/docs/reference/agent-connectors/google_ads.mdx +++ b/src/content/docs/reference/agent-connectors/google_ads.mdx @@ -23,7 +23,7 @@ import { UsageGoogleAdsSection } from '@components/templates' Connect to Google Ads to manage advertising campaigns, analyze performance metrics, and optimize ad spending across Google's advertising platform
- Google Ads logo + Google Ads logo
diff --git a/src/content/docs/reference/agent-connectors/googledocs.mdx b/src/content/docs/reference/agent-connectors/googledocs.mdx index f84619571..ad23cdb16 100644 --- a/src/content/docs/reference/agent-connectors/googledocs.mdx +++ b/src/content/docs/reference/agent-connectors/googledocs.mdx @@ -15,15 +15,15 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googledocs' -import { UsageGoogledocsSection } from '@components/templates' import { SetupGoogleDocsSection } from '@components/templates' +import { UsageGoogledocsSection } from '@components/templates'
Connect to Google Docs. Create, edit, and collaborate on documents
- Google Docs logo + Google Docs logo
diff --git a/src/content/docs/reference/agent-connectors/googledrive.mdx b/src/content/docs/reference/agent-connectors/googledrive.mdx index 755df5d59..d242e67e6 100644 --- a/src/content/docs/reference/agent-connectors/googledrive.mdx +++ b/src/content/docs/reference/agent-connectors/googledrive.mdx @@ -15,15 +15,15 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googledrive' -import { UsageGoogledriveSection } from '@components/templates' import { SetupGoogleDriveSection } from '@components/templates' +import { UsageGoogledriveSection } from '@components/templates'
Connect to Google Drive. Manage files, folders, and sharing permissions
- Google Drive logo + Google Drive logo
diff --git a/src/content/docs/reference/agent-connectors/googleforms.mdx b/src/content/docs/reference/agent-connectors/googleforms.mdx index 14b63aec3..f5a195902 100644 --- a/src/content/docs/reference/agent-connectors/googleforms.mdx +++ b/src/content/docs/reference/agent-connectors/googleforms.mdx @@ -15,8 +15,8 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googleforms' -import { UsageGoogleformsSection } from '@components/templates' import { SetupGoogleFormsSection } from '@components/templates' +import { UsageGoogleformsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/googlemeet.mdx b/src/content/docs/reference/agent-connectors/googlemeet.mdx index eae1dc208..e1fb1a026 100644 --- a/src/content/docs/reference/agent-connectors/googlemeet.mdx +++ b/src/content/docs/reference/agent-connectors/googlemeet.mdx @@ -15,15 +15,15 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googlemeet' -import { UsageGooglemeetSection } from '@components/templates' import { SetupGoogleMeetsSection } from '@components/templates' +import { UsageGooglemeetSection } from '@components/templates'
Connect to Google Meet. Create and manage video meetings with powerful collaboration features
- Google Meet logo + Google Meet logo
diff --git a/src/content/docs/reference/agent-connectors/googlesheets.mdx b/src/content/docs/reference/agent-connectors/googlesheets.mdx index 4dbc83089..7bcb7d762 100644 --- a/src/content/docs/reference/agent-connectors/googlesheets.mdx +++ b/src/content/docs/reference/agent-connectors/googlesheets.mdx @@ -15,15 +15,15 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/googlesheets' -import { UsageGooglesheetsSection } from '@components/templates' import { SetupGoogleSheetsSection } from '@components/templates' +import { UsageGooglesheetsSection } from '@components/templates'
Connect to Google Sheets. Create, edit, and analyze spreadsheets with powerful data management capabilities
- Google Sheets logo + Google Sheets logo
diff --git a/src/content/docs/reference/agent-connectors/googleslides.mdx b/src/content/docs/reference/agent-connectors/googleslides.mdx index 0f0578a15..eca3deeaf 100644 --- a/src/content/docs/reference/agent-connectors/googleslides.mdx +++ b/src/content/docs/reference/agent-connectors/googleslides.mdx @@ -23,7 +23,7 @@ import { UsageGoogleslidesSection } from '@components/templates' Connect to Google Slides to create, read, and modify presentations programmatically.
- Google Slides logo + Google Slides logo
diff --git a/src/content/docs/reference/agent-connectors/granola.mdx b/src/content/docs/reference/agent-connectors/granola.mdx index 38500780c..a54dba533 100644 --- a/src/content/docs/reference/agent-connectors/granola.mdx +++ b/src/content/docs/reference/agent-connectors/granola.mdx @@ -21,7 +21,7 @@ import { tools } from '@/data/agent-connectors/granola' Connect to Granola to access AI-generated meeting notes, summaries, transcripts, and attendee data from your workspace. Granola automatically records and summarises meetings so your team never misses key decisions or action items.
- Granola logo + Granola logo
diff --git a/src/content/docs/reference/agent-connectors/granolamcp.mdx b/src/content/docs/reference/agent-connectors/granolamcp.mdx index de42b6f20..e7f33e92c 100644 --- a/src/content/docs/reference/agent-connectors/granolamcp.mdx +++ b/src/content/docs/reference/agent-connectors/granolamcp.mdx @@ -2,6 +2,8 @@ title: Granola MCP description: Connect to Granola MCP using OAuth 2.1 with MCP discovery and dynamic client registration. tableOfContents: true +sidebar: + label: Granola MCP head: - tag: style content: | diff --git a/src/content/docs/reference/agent-connectors/harvestapi.mdx b/src/content/docs/reference/agent-connectors/harvestapi.mdx index 5816dd698..b42178be2 100644 --- a/src/content/docs/reference/agent-connectors/harvestapi.mdx +++ b/src/content/docs/reference/agent-connectors/harvestapi.mdx @@ -23,7 +23,7 @@ import { UsageHarvestapiSection } from '@components/templates' Connect to HarvestAPI to scrape LinkedIn profiles, companies, and job listings, and search for people and jobs using LinkedIn data. Enables AI agents to access real-time LinkedIn data for recruiting, sales prospecting, and market research. Pay-as-you-go credit model.
- HarvestAPI logo + HarvestAPI logo
diff --git a/src/content/docs/reference/agent-connectors/intercom.mdx b/src/content/docs/reference/agent-connectors/intercom.mdx index db08c72a4..22ac1b33d 100644 --- a/src/content/docs/reference/agent-connectors/intercom.mdx +++ b/src/content/docs/reference/agent-connectors/intercom.mdx @@ -23,7 +23,7 @@ import { UsageIntercomSection } from '@components/templates' Connect to Intercom. Send messages, manage conversations, and interact with users and contacts.
- Intercom logo + Intercom logo
diff --git a/src/content/docs/reference/agent-connectors/jira.mdx b/src/content/docs/reference/agent-connectors/jira.mdx index 631e66242..9649f6e98 100644 --- a/src/content/docs/reference/agent-connectors/jira.mdx +++ b/src/content/docs/reference/agent-connectors/jira.mdx @@ -23,7 +23,7 @@ import { UsageJiraSection } from '@components/templates' Connect to Jira. Manage issues, projects, workflows, and agile development processes
- Jira logo + Jira logo
diff --git a/src/content/docs/reference/agent-connectors/linear.mdx b/src/content/docs/reference/agent-connectors/linear.mdx index 8f94ac258..f3d446c36 100644 --- a/src/content/docs/reference/agent-connectors/linear.mdx +++ b/src/content/docs/reference/agent-connectors/linear.mdx @@ -23,7 +23,7 @@ import { UsageLinearSection } from '@components/templates' Connect to Linear. Manage issues, projects, sprints, and development workflows
- Linear logo + Linear logo
diff --git a/src/content/docs/reference/agent-connectors/microsoftexcel.mdx b/src/content/docs/reference/agent-connectors/microsoftexcel.mdx index bb544658d..79d6ea343 100644 --- a/src/content/docs/reference/agent-connectors/microsoftexcel.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftexcel.mdx @@ -15,8 +15,8 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/microsoftexcel' -import { UsageMicrosoftexcelSection } from '@components/templates' import { SetupMicrosoftExcelSection } from '@components/templates' +import { UsageMicrosoftexcelSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftteams.mdx b/src/content/docs/reference/agent-connectors/microsoftteams.mdx index a4d2a4831..ce432e8ba 100644 --- a/src/content/docs/reference/agent-connectors/microsoftteams.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftteams.mdx @@ -15,8 +15,8 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/microsoftteams' -import { UsageMicrosoftteamsSection } from '@components/templates' import { SetupMicrosoftTeamsSection } from '@components/templates' +import { UsageMicrosoftteamsSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/microsoftword.mdx b/src/content/docs/reference/agent-connectors/microsoftword.mdx index 0e97d0f87..e403c4889 100644 --- a/src/content/docs/reference/agent-connectors/microsoftword.mdx +++ b/src/content/docs/reference/agent-connectors/microsoftword.mdx @@ -15,8 +15,8 @@ head: import { Badge } from '@astrojs/starlight/components' import ToolList from '@/components/ToolList.astro' import { tools } from '@/data/agent-connectors/microsoftword' -import { UsageMicrosoftwordSection } from '@components/templates' import { SetupMicrosoftWordSection } from '@components/templates' +import { UsageMicrosoftwordSection } from '@components/templates'
diff --git a/src/content/docs/reference/agent-connectors/monday.mdx b/src/content/docs/reference/agent-connectors/monday.mdx index 8acd13247..330afd3de 100644 --- a/src/content/docs/reference/agent-connectors/monday.mdx +++ b/src/content/docs/reference/agent-connectors/monday.mdx @@ -23,7 +23,7 @@ import { UsageMondaySection } from '@components/templates' Connect to Monday.com. Manage boards, tasks, workflows, teams, and project collaboration
- Monday.com logo + Monday.com logo
diff --git a/src/content/docs/reference/agent-connectors/phantombuster.mdx b/src/content/docs/reference/agent-connectors/phantombuster.mdx index e2a962e8f..04d2911a2 100644 --- a/src/content/docs/reference/agent-connectors/phantombuster.mdx +++ b/src/content/docs/reference/agent-connectors/phantombuster.mdx @@ -23,7 +23,7 @@ import { UsagePhantombusterSection } from '@components/templates' Connect to PhantomBuster to automate web scraping and data extraction workflows. Launch, monitor, and manage automation agents that extract data from LinkedIn, Instagram, Twitter, and hundreds of other platforms.
- PhantomBuster logo + PhantomBuster logo
diff --git a/src/content/docs/reference/agent-connectors/pipedrive.mdx b/src/content/docs/reference/agent-connectors/pipedrive.mdx new file mode 100644 index 000000000..765bb232f --- /dev/null +++ b/src/content/docs/reference/agent-connectors/pipedrive.mdx @@ -0,0 +1,31 @@ +--- +title: Pipedrive +description: Connect to Pipedrive CRM. Manage deals, contacts, organizations, activities, leads, and notes to streamline your sales pipeline. +tableOfContents: true +sidebar: + label: Pipedrive +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } +--- + +import { Badge } from '@astrojs/starlight/components' +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/pipedrive' +import { SetupPipedriveSection } from '@components/templates' + +Connect to Pipedrive CRM. Manage deals, contacts, organizations, activities, leads, and notes to streamline your sales pipeline. + +Supports authentication: + + +## Set up the agent connector + + + +## Tool list + + diff --git a/src/content/docs/reference/agent-connectors/salesforce.mdx b/src/content/docs/reference/agent-connectors/salesforce.mdx index 442e786c5..fdafd568c 100644 --- a/src/content/docs/reference/agent-connectors/salesforce.mdx +++ b/src/content/docs/reference/agent-connectors/salesforce.mdx @@ -23,7 +23,7 @@ import { UsageSalesforceSection } from '@components/templates' Connect to Salesforce CRM. Manage leads, opportunities, accounts, and customer relationships
- Salesforce logo + Salesforce logo
diff --git a/src/content/docs/reference/agent-connectors/supadata.mdx b/src/content/docs/reference/agent-connectors/supadata.mdx index 858539ebe..95961ff06 100644 --- a/src/content/docs/reference/agent-connectors/supadata.mdx +++ b/src/content/docs/reference/agent-connectors/supadata.mdx @@ -21,7 +21,7 @@ import { tools } from '@/data/agent-connectors/supadata' Connect with Supadata to extract transcripts, metadata, and structured content from YouTube, social media, and the web using AI.
- Supadata logo + Supadata logo
diff --git a/src/content/docs/reference/agent-connectors/vimeo.mdx b/src/content/docs/reference/agent-connectors/vimeo.mdx index 52664d6aa..c021a0901 100644 --- a/src/content/docs/reference/agent-connectors/vimeo.mdx +++ b/src/content/docs/reference/agent-connectors/vimeo.mdx @@ -22,7 +22,7 @@ import { SetupVimeoSection } from '@components/templates' Connect to Vimeo API v3.4. Upload and manage videos, organize content into showcases and folders, manage channels, handle comments, likes, and webhooks.
- Vimeo logo + Vimeo logo
diff --git a/src/content/docs/reference/agent-connectors/youtube.mdx b/src/content/docs/reference/agent-connectors/youtube.mdx index ba3af7a1f..6087737cb 100644 --- a/src/content/docs/reference/agent-connectors/youtube.mdx +++ b/src/content/docs/reference/agent-connectors/youtube.mdx @@ -22,7 +22,7 @@ import { SetupYoutubeSection } from '@components/templates' Connect to YouTube to access channel details, analytics, and upload or manage videos via OAuth 2.0
- YouTube logo + YouTube logo
diff --git a/src/content/docs/reference/agent-connectors/zoom.mdx b/src/content/docs/reference/agent-connectors/zoom.mdx index 504cd0cf1..9ebb89d76 100644 --- a/src/content/docs/reference/agent-connectors/zoom.mdx +++ b/src/content/docs/reference/agent-connectors/zoom.mdx @@ -23,7 +23,7 @@ import { UsageZoomSection } from '@components/templates' Connect to Zoom. Schedule meetings, manage recordings, and handle video conferencing workflows
- Zoom logo + Zoom logo
diff --git a/src/data/agent-connectors/affinity.ts b/src/data/agent-connectors/affinity.ts index 1abcc0609..6dba1abb3 100644 --- a/src/data/agent-connectors/affinity.ts +++ b/src/data/agent-connectors/affinity.ts @@ -274,18 +274,18 @@ export const tools: Tool[] = [ name: 'affinity_update_opportunity', description: `Update an existing deal or opportunity in Affinity. Supports renaming the deal, adding or removing associated persons and organizations. Use this to reflect changes in deal status, team assignment, or company involvement during a pipeline review.`, params: [ - { - name: 'name', - type: 'string', - required: false, - description: `Updated name for the opportunity`, - }, { name: 'opportunity_id', type: 'integer', required: true, description: `Unique numeric ID of the opportunity to update`, }, + { + name: 'name', + type: 'string', + required: false, + description: `Updated name for the opportunity`, + }, { name: 'organization_ids', type: 'array', diff --git a/src/data/agent-connectors/apifymcp.ts b/src/data/agent-connectors/apifymcp.ts index 3c31e2620..a05211cab 100644 --- a/src/data/agent-connectors/apifymcp.ts +++ b/src/data/agent-connectors/apifymcp.ts @@ -22,6 +22,12 @@ When NOT to use: required: true, description: `Actor ID or full name in 'username/name' format (e.g. 'apify/rag-web-browser'). For MCP server Actors use 'actorName:toolName' format.`, }, + { + name: 'input', + type: 'object', + required: true, + description: `Input JSON to pass to the Actor. Must match the Actor's input schema exactly — use apifymcp_fetch_actor_details with output: {"inputSchema": true} first to get the required fields and types.`, + }, { name: 'async', type: 'boolean', @@ -34,12 +40,6 @@ When NOT to use: required: false, description: `Optional run configuration options`, }, - { - name: 'input', - type: 'object', - required: true, - description: `Input JSON to pass to the Actor. Must match the Actor's input schema exactly — use apifymcp_fetch_actor_details with output: {"inputSchema": true} first to get the required fields and types.`, - }, { name: 'previewOutput', type: 'boolean', @@ -160,6 +160,12 @@ When to use: When NOT to use: - User needs repeated/scheduled scraping of a specific platform — search for a dedicated Actor using apifymcp_search_actors instead`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Google Search keywords or a specific URL to scrape. Supports advanced search operators.`, + }, { name: 'maxResults', type: 'integer', @@ -172,12 +178,6 @@ When NOT to use: required: false, description: `Output formats for the scraped page content. Options: 'markdown', 'text', 'html' (default: ['markdown'])`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Google Search keywords or a specific URL to scrape. Supports advanced search operators.`, - }, ], }, { @@ -231,6 +231,12 @@ When to use: When NOT to use: - You already have a documentation URL — use apifymcp_fetch_apify_docs directly`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Algolia full-text search query using keywords only (e.g. 'standby actor', 'proxy configuration'). Do not use full sentences.`, + }, { name: 'docSource', type: 'string', @@ -249,12 +255,6 @@ When NOT to use: required: false, description: `Offset for pagination (default: 0)`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Algolia full-text search query using keywords only (e.g. 'standby actor', 'proxy configuration'). Do not use full sentences.`, - }, ], }, ] diff --git a/src/data/agent-connectors/apollo.ts b/src/data/agent-connectors/apollo.ts index 8399a7841..ddadc10a9 100644 --- a/src/data/agent-connectors/apollo.ts +++ b/src/data/agent-connectors/apollo.ts @@ -5,6 +5,7 @@ export const tools: Tool[] = [ name: 'apollo_create_account', description: `Create a new account (company) record in your Apollo CRM. Accounts represent organizations and can be linked to contacts. Check for duplicates before creating to avoid double entries.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the company/account` }, { name: 'domain', type: 'string', @@ -17,7 +18,6 @@ export const tools: Tool[] = [ required: false, description: `LinkedIn company page URL`, }, - { name: 'name', type: 'string', required: true, description: `Name of the company/account` }, { name: 'phone_number', type: 'string', @@ -36,18 +36,6 @@ export const tools: Tool[] = [ name: 'apollo_create_contact', description: `Create a new contact record in your Apollo CRM. The contact will appear in your Apollo contacts list and can be enrolled in sequences. Check for duplicates before creating to avoid double entries.`, params: [ - { - name: 'account_id', - type: 'string', - required: false, - description: `Apollo account ID to associate this contact with`, - }, - { - name: 'email', - type: 'string', - required: false, - description: `Email address of the contact`, - }, { name: 'first_name', type: 'string', @@ -60,6 +48,18 @@ export const tools: Tool[] = [ required: true, description: `Last name of the contact`, }, + { + name: 'account_id', + type: 'string', + required: false, + description: `Apollo account ID to associate this contact with`, + }, + { + name: 'email', + type: 'string', + required: false, + description: `Email address of the contact`, + }, { name: 'linkedin_url', type: 'string', diff --git a/src/data/agent-connectors/attio.ts b/src/data/agent-connectors/attio.ts index 3255ac18f..7ab1b0028 100644 --- a/src/data/agent-connectors/attio.ts +++ b/src/data/agent-connectors/attio.ts @@ -5,12 +5,6 @@ export const tools: Tool[] = [ name: 'attio_add_to_list', description: `Add a record (contact, company, deal, or custom object) to a specific Attio list. Returns the newly created list entry with its entry ID, which can be used to remove it later. If the record is already in the list, a new entry is created.`, params: [ - { - name: 'entry_values', - type: 'object', - required: false, - description: `Optional attribute values to set on the list entry itself (not the underlying record). Keys are attribute slugs, values are the data to set. Example: {"stage": "qualified"}`, - }, { name: 'list_id', type: 'string', @@ -29,6 +23,12 @@ export const tools: Tool[] = [ required: true, description: `The UUID of the record to add to the list. Must be a valid UUID — obtain this from search or list records results.`, }, + { + name: 'entry_values', + type: 'object', + required: false, + description: `Optional attribute values to set on the list entry itself (not the underlying record). Keys are attribute slugs, values are the data to set. Example: {"stage": "qualified"}`, + }, ], }, { @@ -197,24 +197,12 @@ export const tools: Tool[] = [ required: true, description: `Body of the note. Use plain text or Markdown depending on the format field. Line breaks are supported via \\n in plaintext mode.`, }, - { - name: 'created_at', - type: 'string', - required: false, - description: `ISO 8601 timestamp for backdating the note. Defaults to the current time if not provided. Example: "2024-01-15T10:30:00Z"`, - }, { name: 'format', type: 'string', required: true, description: `Format of the note content. Must be either "plaintext" or "markdown".`, }, - { - name: 'meeting_id', - type: 'string', - required: false, - description: `UUID of an existing meeting to associate with this note. Optional.`, - }, { name: 'parent_object', type: 'string', @@ -233,6 +221,18 @@ export const tools: Tool[] = [ required: true, description: `Plaintext title for the note. No formatting is allowed in the title.`, }, + { + name: 'created_at', + type: 'string', + required: false, + description: `ISO 8601 timestamp for backdating the note. Defaults to the current time if not provided. Example: "2024-01-15T10:30:00Z"`, + }, + { + name: 'meeting_id', + type: 'string', + required: false, + description: `UUID of an existing meeting to associate with this note. Optional.`, + }, ], }, { @@ -293,12 +293,6 @@ export const tools: Tool[] = [ name: 'attio_create_task', description: `Create a new task in Attio. Tasks can be linked to one or more records (people, companies, deals, etc.) and assigned to workspace members. Supports setting a deadline and initial completion status. Only plaintext format is supported for task content.`, params: [ - { - name: 'assignees', - type: 'array', - required: false, - description: `Array of assignees for this task. Each item must have either referenced_actor_id (UUID) with referenced_actor_type set to workspace-member, or workspace_member_email_address. Example: [{"referenced_actor_type": "workspace-member", "referenced_actor_id": "d4a8e6f2-3b1c-4d5e-9f0a-1b2c3d4e5f6a"}]`, - }, { name: 'content', type: 'string', @@ -311,6 +305,12 @@ export const tools: Tool[] = [ required: true, description: `ISO 8601 datetime for the task deadline. Must include milliseconds and timezone, e.g. 2024-03-31T17:00:00.000Z.`, }, + { + name: 'assignees', + type: 'array', + required: false, + description: `Array of assignees for this task. Each item must have either referenced_actor_id (UUID) with referenced_actor_type set to workspace-member, or workspace_member_email_address. Example: [{"referenced_actor_type": "workspace-member", "referenced_actor_id": "d4a8e6f2-3b1c-4d5e-9f0a-1b2c3d4e5f6a"}]`, + }, { name: 'is_completed', type: 'boolean', @@ -749,6 +749,12 @@ export const tools: Tool[] = [ name: 'attio_list_entries', description: `Lists entries in a given Attio list with optional filtering and sorting. Returns records that belong to the specified list.`, params: [ + { + name: 'list_id', + type: 'string', + required: true, + description: `The unique identifier or slug of the list.`, + }, { name: 'filter', type: 'object', @@ -761,12 +767,6 @@ export const tools: Tool[] = [ required: false, description: `Maximum number of entries to return.`, }, - { - name: 'list_id', - type: 'string', - required: true, - description: `The unique identifier or slug of the list.`, - }, { name: 'offset', type: 'number', @@ -899,6 +899,12 @@ export const tools: Tool[] = [ name: 'attio_list_records', description: `List and query records for a specific Attio object type (e.g. people, companies, deals). Supports filtering by attribute values, sorting, and pagination with limit and offset. Returns guaranteed up-to-date data unlike the Search Records endpoint.`, params: [ + { + name: 'object', + type: 'string', + required: true, + description: `The slug or UUID of the object type to list records for. Common slugs: "people", "companies", "deals".`, + }, { name: 'filter', type: 'object', @@ -911,12 +917,6 @@ export const tools: Tool[] = [ required: false, description: `Maximum number of records to return. Defaults to 500.`, }, - { - name: 'object', - type: 'string', - required: true, - description: `The slug or UUID of the object type to list records for. Common slugs: "people", "companies", "deals".`, - }, { name: 'offset', type: 'number', @@ -1090,30 +1090,30 @@ export const tools: Tool[] = [ name: 'attio_search_records', description: `Search for records in Attio for a given object type (people, companies, deals, or custom objects) using a fuzzy text query. Returns matching records with their IDs, labels, and key attributes.`, params: [ - { - name: 'limit', - type: 'integer', - required: false, - description: `Maximum number of results to return per page. Defaults to 20.`, - }, { name: 'object', type: 'string', required: true, description: `The slug or UUID of the object type to search within. Common slugs: "people", "companies", "deals".`, }, - { - name: 'offset', - type: 'integer', - required: false, - description: `Number of results to skip for pagination. Defaults to 0.`, - }, { name: 'query', type: 'string', required: true, description: `Fuzzy text search string matched against names, emails, domains, phone numbers, and social handles. Pass an empty string to return all records.`, }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of results to return per page. Defaults to 20.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Number of results to skip for pagination. Defaults to 0.`, + }, ], }, ] diff --git a/src/data/agent-connectors/brave.ts b/src/data/agent-connectors/brave.ts index a15ac5e61..65f20da32 100644 --- a/src/data/agent-connectors/brave.ts +++ b/src/data/agent-connectors/brave.ts @@ -5,6 +5,12 @@ export const tools: Tool[] = [ name: 'brave_chat_completions', description: `Get AI-generated answers grounded in real-time Brave Search results using an OpenAI-compatible chat completions interface. Returns summarized, cited answers with source references and token usage statistics.`, params: [ + { + name: 'messages', + type: 'array', + required: true, + description: `Array of conversation messages. Each message must have a 'role' (system, user, or assistant) and 'content' (string).`, + }, { name: 'country', type: 'string', @@ -35,12 +41,6 @@ export const tools: Tool[] = [ required: false, description: `Language code for the response (e.g., en, fr, de).`, }, - { - name: 'messages', - type: 'array', - required: true, - description: `Array of conversation messages. Each message must have a 'role' (system, user, or assistant) and 'content' (string).`, - }, { name: 'model', type: 'string', @@ -59,6 +59,7 @@ export const tools: Tool[] = [ name: 'brave_image_search', description: `Search for images using Brave Search. Returns image results with thumbnails, source URLs, dimensions, and metadata. Supports filtering by country, language, and safe search.`, params: [ + { name: 'q', type: 'string', required: true, description: `The image search query string.` }, { name: 'count', type: 'integer', @@ -71,7 +72,6 @@ export const tools: Tool[] = [ required: false, description: `Country code for localised results (e.g., us, gb, de), or ALL for no restriction.`, }, - { name: 'q', type: 'string', required: true, description: `The image search query string.` }, { name: 'safesearch', type: 'string', @@ -96,6 +96,12 @@ export const tools: Tool[] = [ name: 'brave_llm_context', description: `Retrieve real-time web search results optimized as grounding context for LLMs. Returns curated snippets, source URLs, titles, and metadata specifically structured to maximize contextual relevance for AI-generated answers. Supports fine-grained token and snippet budgets.`, params: [ + { + name: 'q', + type: 'string', + required: true, + description: `The search query to retrieve grounding context for. Max 400 characters, 50 words.`, + }, { name: 'context_threshold_mode', type: 'string', @@ -162,12 +168,6 @@ export const tools: Tool[] = [ required: false, description: `Maximum number of URLs to include in the grounding response (1–50). Defaults to 20.`, }, - { - name: 'q', - type: 'string', - required: true, - description: `The search query to retrieve grounding context for. Max 400 characters, 50 words.`, - }, { name: 'safesearch', type: 'string', @@ -282,6 +282,7 @@ export const tools: Tool[] = [ name: 'brave_news_search', description: `Search for news articles using Brave Search. Returns recent news results with titles, URLs, snippets, publication dates, and source information. Supports filtering by country, language, freshness, and custom re-ranking via Goggles.`, params: [ + { name: 'q', type: 'string', required: true, description: `The news search query string.` }, { name: 'count', type: 'integer', @@ -318,7 +319,6 @@ export const tools: Tool[] = [ required: false, description: `Zero-based offset for pagination (0–9). Defaults to 0.`, }, - { name: 'q', type: 'string', required: true, description: `The news search query string.` }, { name: 'safesearch', type: 'string', @@ -349,6 +349,7 @@ export const tools: Tool[] = [ name: 'brave_spellcheck', description: `Check and correct spelling of a query using Brave Search's spellcheck engine. Returns suggested corrections for misspelled queries.`, params: [ + { name: 'q', type: 'string', required: true, description: `The query string to spellcheck.` }, { name: 'country', type: 'string', @@ -361,13 +362,18 @@ export const tools: Tool[] = [ required: false, description: `Language code for spellcheck (e.g., en, fr, de).`, }, - { name: 'q', type: 'string', required: true, description: `The query string to spellcheck.` }, ], }, { name: 'brave_suggest_search', description: `Get autocomplete search suggestions from Brave Search for a given query prefix. Useful for query completion, exploring related search terms, and building search UIs.`, params: [ + { + name: 'q', + type: 'string', + required: true, + description: `The partial query string to get suggestions for.`, + }, { name: 'count', type: 'integer', @@ -386,12 +392,6 @@ export const tools: Tool[] = [ required: false, description: `Language code for suggestions (e.g., en, fr, de).`, }, - { - name: 'q', - type: 'string', - required: true, - description: `The partial query string to get suggestions for.`, - }, { name: 'rich', type: 'boolean', @@ -440,6 +440,12 @@ export const tools: Tool[] = [ name: 'brave_summarizer_search', description: `Retrieve a full AI-generated summary for a summarizer key obtained from a Brave web search response (requires summary=true on the web search). Returns the complete summary with title, content, enrichments, follow-up queries, and entity details.`, params: [ + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, { name: 'entity_info', type: 'integer', @@ -452,18 +458,18 @@ export const tools: Tool[] = [ required: false, description: `Add citation markers throughout the summary text pointing to sources.`, }, - { - name: 'key', - type: 'string', - required: true, - description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, - }, ], }, { name: 'brave_summarizer_summary', description: `Fetch the complete AI-generated summary for a summarizer key. Returns the full summary content with optional inline citation markers and entity metadata.`, params: [ + { + name: 'key', + type: 'string', + required: true, + description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, + }, { name: 'entity_info', type: 'integer', @@ -476,12 +482,6 @@ export const tools: Tool[] = [ required: false, description: `Add citation markers throughout the summary text pointing to sources.`, }, - { - name: 'key', - type: 'string', - required: true, - description: `The opaque summarizer key returned in a Brave web search response when summary=true was set.`, - }, ], }, { @@ -500,6 +500,7 @@ export const tools: Tool[] = [ name: 'brave_video_search', description: `Search for videos using Brave Search. Returns video results with titles, URLs, thumbnails, durations, and publisher metadata. Supports filtering by country, language, freshness, and safe search.`, params: [ + { name: 'q', type: 'string', required: true, description: `The video search query string.` }, { name: 'count', type: 'integer', @@ -524,7 +525,6 @@ export const tools: Tool[] = [ required: false, description: `Zero-based offset for pagination (0–9). Defaults to 0.`, }, - { name: 'q', type: 'string', required: true, description: `The video search query string.` }, { name: 'safesearch', type: 'string', @@ -549,6 +549,12 @@ export const tools: Tool[] = [ name: 'brave_web_search', description: `Search the web using Brave Search's privacy-focused search engine. Returns real-time web results including titles, URLs, snippets, news, videos, images, locations, and rich data. Supports filtering by country, language, safe search, freshness, and custom re-ranking via Goggles.`, params: [ + { + name: 'q', + type: 'string', + required: true, + description: `Search query string. Max 400 characters, 50 words.`, + }, { name: 'count', type: 'integer', @@ -585,12 +591,6 @@ export const tools: Tool[] = [ required: false, description: `Zero-based offset for pagination of results (0–9). Defaults to 0.`, }, - { - name: 'q', - type: 'string', - required: true, - description: `Search query string. Max 400 characters, 50 words.`, - }, { name: 'result_filter', type: 'string', diff --git a/src/data/agent-connectors/discord.ts b/src/data/agent-connectors/discord.ts index aef0f6cca..824aa3357 100644 --- a/src/data/agent-connectors/discord.ts +++ b/src/data/agent-connectors/discord.ts @@ -180,18 +180,18 @@ export const tools: Tool[] = [ name: 'discord_resolve_invite', description: `Resolves and retrieves information about a Discord invite code, including the associated guild, channel, event, and inviter. Prefer this over the deprecated Get Invite tool for new integrations.`, params: [ - { - name: 'guild_scheduled_event_id', - type: 'string', - required: false, - description: `Guild scheduled event ID to include event details in the response.`, - }, { name: 'invite_code', type: 'string', required: true, description: `The unique invite code to resolve.`, }, + { + name: 'guild_scheduled_event_id', + type: 'string', + required: false, + description: `Guild scheduled event ID to include event details in the response.`, + }, { name: 'with_counts', type: 'boolean', diff --git a/src/data/agent-connectors/evertrace.ts b/src/data/agent-connectors/evertrace.ts index cfe531eff..c4c8b43ff 100644 --- a/src/data/agent-connectors/evertrace.ts +++ b/src/data/agent-connectors/evertrace.ts @@ -103,13 +103,13 @@ export const tools: Tool[] = [ name: 'evertrace_list_entries_list', description: `List entries in a list with pagination, sorting, and filtering by screening/viewed status.`, params: [ + { name: 'list_id', type: 'string', required: true, description: `The list ID.` }, { name: 'limit', type: 'string', required: false, description: `Number of results per page.`, }, - { name: 'list_id', type: 'string', required: true, description: `The list ID.` }, { name: 'page', type: 'string', required: false, description: `Page number for pagination.` }, { name: 'screened_by', @@ -141,13 +141,13 @@ export const tools: Tool[] = [ name: 'evertrace_lists_create', description: `Create a new list. Provide user IDs in accesses to share the list with teammates. The creator is automatically granted access.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the new list.` }, { name: 'accesses', type: 'array', required: false, description: `Array of user IDs to share this list with. Pass an empty array for private list.`, }, - { name: 'name', type: 'string', required: true, description: `Name of the new list.` }, ], }, { @@ -177,12 +177,6 @@ export const tools: Tool[] = [ name: 'evertrace_searches_create', description: `Create a new saved search with filters. Each filter requires a key, operator, and value. Provide sharee user IDs to share the search with teammates.`, params: [ - { - name: 'emoji', - type: 'string', - required: false, - description: `Optional emoji for the saved search.`, - }, { name: 'filters', type: 'array', @@ -207,6 +201,12 @@ export const tools: Tool[] = [ required: true, description: `Epoch timestamp in milliseconds for when the search was last visited.`, }, + { + name: 'emoji', + type: 'string', + required: false, + description: `Optional emoji for the saved search.`, + }, ], }, { @@ -256,6 +256,7 @@ export const tools: Tool[] = [ name: 'evertrace_searches_update', description: `Update a saved search. All fields are optional — only provided fields are changed. If filters are provided, they replace all existing filters. If sharees are provided, they replace the full access list.`, params: [ + { name: 'id', type: 'string', required: true, description: `The saved search ID to update.` }, { name: 'emoji', type: 'string', @@ -268,7 +269,6 @@ export const tools: Tool[] = [ required: false, description: `Replaces all existing filters. Each filter has: key, operator, value.`, }, - { name: 'id', type: 'string', required: true, description: `The saved search ID to update.` }, { name: 'sharees', type: 'array', diff --git a/src/data/agent-connectors/exa.ts b/src/data/agent-connectors/exa.ts index 9da9b7513..2fbe73f73 100644 --- a/src/data/agent-connectors/exa.ts +++ b/src/data/agent-connectors/exa.ts @@ -5,6 +5,12 @@ export const tools: Tool[] = [ name: 'exa_answer', description: `Get a natural language answer to a question by searching the web with Exa and synthesizing results. Returns a direct answer with citations to the source pages. Ideal for factual questions, current events, and research queries. Rate limit: 60 requests/minute.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `The question or query to answer from web sources.`, + }, { name: 'exclude_domains', type: 'array', @@ -29,18 +35,18 @@ export const tools: Tool[] = [ required: false, description: `Number of web sources to use when generating the answer (1–20). More sources improves accuracy but costs more credits.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `The question or query to answer from web sources.`, - }, ], }, { name: 'exa_crawl', description: `Crawl one or more web pages by URL and extract their content including full text, highlights, and AI-generated summaries. Useful for reading specific pages discovered via search. Rate limit: 60 requests/minute. Credit consumption depends on number of URLs.`, params: [ + { + name: 'urls', + type: 'array', + required: true, + description: `JSON array of URLs to crawl and extract content from.`, + }, { name: 'highlights_per_url', type: 'integer', @@ -77,12 +83,6 @@ export const tools: Tool[] = [ required: false, description: `Optional query to focus the AI summary on a specific aspect of the page.`, }, - { - name: 'urls', - type: 'array', - required: true, - description: `JSON array of URLs to crawl and extract content from.`, - }, ], }, { @@ -101,6 +101,12 @@ export const tools: Tool[] = [ name: 'exa_find_similar', description: `Find web pages similar to a given URL using Exa's neural similarity search. Useful for competitor research, finding related articles, or discovering similar companies. Optionally returns page text, highlights, or summaries. Rate limit: 60 requests/minute.`, params: [ + { + name: 'url', + type: 'string', + required: true, + description: `The URL to find similar pages for.`, + }, { name: 'end_published_date', type: 'string', @@ -143,12 +149,6 @@ export const tools: Tool[] = [ required: false, description: `Only return pages published after this date. ISO 8601 format: YYYY-MM-DDTHH:MM:SS.000Z`, }, - { - name: 'url', - type: 'string', - required: true, - description: `The URL to find similar pages for.`, - }, ], }, { @@ -167,6 +167,12 @@ export const tools: Tool[] = [ name: 'exa_list_webset_items', description: `List the collected URLs and items from a completed Exa Webset. Use this after polling Get Webset until its status is 'completed' to retrieve the discovered results.`, params: [ + { + name: 'webset_id', + type: 'string', + required: true, + description: `The ID of the webset to retrieve items from.`, + }, { name: 'count', type: 'integer', @@ -179,12 +185,6 @@ export const tools: Tool[] = [ required: false, description: `Pagination cursor from a previous response to fetch the next page of items.`, }, - { - name: 'webset_id', - type: 'string', - required: true, - description: `The ID of the webset to retrieve items from.`, - }, ], }, { @@ -209,6 +209,12 @@ export const tools: Tool[] = [ name: 'exa_research', description: `Run in-depth research on a topic using Exa's neural search. Performs a semantic search and returns results with full page text and AI-generated summaries, providing structured multi-source research output. Best for comprehensive topic analysis. Rate limit: 60 requests/minute.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `The research topic or question to investigate across the web.`, + }, { name: 'category', type: 'string', @@ -239,12 +245,6 @@ export const tools: Tool[] = [ required: false, description: `Number of sources to gather for the research (1–20). More sources provide broader coverage.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `The research topic or question to investigate across the web.`, - }, { name: 'start_published_date', type: 'string', @@ -263,6 +263,12 @@ export const tools: Tool[] = [ name: 'exa_search', description: `Search the web using Exa's AI-powered semantic or keyword search engine. Supports filtering by domain, date range, content category, and result type. Optionally returns page text, highlights, or summaries alongside search results. Rate limit: 60 requests/minute.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `The search query. For neural/auto type, natural language works best. For keyword type, use specific terms.`, + }, { name: 'category', type: 'string', @@ -305,12 +311,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results to return (1–100). Defaults to 10.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `The search query. For neural/auto type, natural language works best. For keyword type, use specific terms.`, - }, { name: 'start_published_date', type: 'string', @@ -335,6 +335,12 @@ export const tools: Tool[] = [ name: 'exa_websets', description: `Execute a complex web query designed to discover and return large sets of URLs (up to thousands) matching specific criteria. Websets are ideal for lead generation, market research, competitor analysis, and large-scale data collection. Returns a webset ID — poll status with GET /websets/v0/websets/{id}. High credit consumption.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `The search query describing what kinds of pages or entities to find. Be specific and descriptive for best results.`, + }, { name: 'count', type: 'integer', @@ -365,12 +371,6 @@ export const tools: Tool[] = [ required: false, description: `JSON array of domains to restrict webset sources to.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `The search query describing what kinds of pages or entities to find. Be specific and descriptive for best results.`, - }, ], }, ] diff --git a/src/data/agent-connectors/figma.ts b/src/data/agent-connectors/figma.ts index 0055e1db1..a13661a7e 100644 --- a/src/data/agent-connectors/figma.ts +++ b/src/data/agent-connectors/figma.ts @@ -101,18 +101,18 @@ export const tools: Tool[] = [ required: true, description: `The ID of the comment to get reactions for.`, }, - { - name: 'cursor', - type: 'string', - required: false, - description: `Pagination cursor for next page of results.`, - }, { name: 'file_key', type: 'string', required: true, description: `The unique key of the Figma file.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor for next page of results.`, + }, ], }, { @@ -233,12 +233,6 @@ export const tools: Tool[] = [ name: 'figma_file_comment_create', description: `Posts a new comment on a Figma file. Can be placed at a specific canvas position or anchored to a specific node.`, params: [ - { - name: 'client_meta', - type: 'string', - required: false, - description: `JSON string specifying position or node anchor for the comment, e.g. {"node_id":"1:2","node_offset":{"x":0,"y":0}}.`, - }, { name: 'file_key', type: 'string', @@ -251,6 +245,12 @@ export const tools: Tool[] = [ required: true, description: `The text content of the comment.`, }, + { + name: 'client_meta', + type: 'string', + required: false, + description: `JSON string specifying position or node anchor for the comment, e.g. {"node_id":"1:2","node_offset":{"x":0,"y":0}}.`, + }, ], }, { @@ -275,18 +275,18 @@ export const tools: Tool[] = [ name: 'figma_file_comments_list', description: `Returns all comments left on a Figma file, including their text, author, position, and resolved status.`, params: [ - { - name: 'as_md', - type: 'boolean', - required: false, - description: `If true, returns comment text as Markdown.`, - }, { name: 'file_key', type: 'string', required: true, description: `The unique key of the Figma file.`, }, + { + name: 'as_md', + type: 'boolean', + required: false, + description: `If true, returns comment text as Markdown.`, + }, ], }, { @@ -317,18 +317,18 @@ export const tools: Tool[] = [ name: 'figma_file_get', description: `Returns a Figma file's full document tree including all nodes, components, styles, and metadata.`, params: [ - { - name: 'depth', - type: 'integer', - required: false, - description: `Depth of the document tree to return (1-4). Lower depth returns faster.`, - }, { name: 'file_key', type: 'string', required: true, description: `The unique key of the Figma file (found in the file URL).`, }, + { + name: 'depth', + type: 'integer', + required: false, + description: `Depth of the document tree to return (1-4). Lower depth returns faster.`, + }, { name: 'version', type: 'string', @@ -359,18 +359,18 @@ export const tools: Tool[] = [ required: true, description: `The unique key of the Figma file.`, }, - { - name: 'format', - type: 'string', - required: false, - description: `Image format: jpg, png, svg, or pdf. Default is png.`, - }, { name: 'ids', type: 'string', required: true, description: `Comma-separated list of node IDs to render.`, }, + { + name: 'format', + type: 'string', + required: false, + description: `Image format: jpg, png, svg, or pdf. Default is png.`, + }, { name: 'scale', type: 'number', @@ -389,12 +389,6 @@ export const tools: Tool[] = [ name: 'figma_file_nodes_get', description: `Returns specific nodes from a Figma file by their node IDs, along with their children and associated styles and components.`, params: [ - { - name: 'depth', - type: 'integer', - required: false, - description: `Depth of the document tree to return for each node.`, - }, { name: 'file_key', type: 'string', @@ -407,6 +401,12 @@ export const tools: Tool[] = [ required: true, description: `Comma-separated list of node IDs to retrieve.`, }, + { + name: 'depth', + type: 'integer', + required: false, + description: `Depth of the document tree to return for each node.`, + }, { name: 'version', type: 'string', @@ -473,6 +473,12 @@ export const tools: Tool[] = [ name: 'figma_file_versions_list', description: `Returns the version history of a Figma file, including version IDs, labels, descriptions, and creation timestamps.`, params: [ + { + name: 'file_key', + type: 'string', + required: true, + description: `The unique key of the Figma file.`, + }, { name: 'after', type: 'string', @@ -485,12 +491,6 @@ export const tools: Tool[] = [ required: false, description: `Return versions created before this version ID (for pagination).`, }, - { - name: 'file_key', - type: 'string', - required: true, - description: `The unique key of the Figma file.`, - }, { name: 'page_size', type: 'integer', @@ -503,18 +503,6 @@ export const tools: Tool[] = [ name: 'figma_library_analytics_component_actions_get', description: `Returns analytics data on component insertion, detachment, and usage actions from a library file. Enterprise only.`, params: [ - { - name: 'cursor', - type: 'string', - required: false, - description: `Pagination cursor from previous response.`, - }, - { - name: 'end_date', - type: 'string', - required: false, - description: `End date for analytics in YYYY-MM-DD format.`, - }, { name: 'file_key', type: 'string', @@ -527,6 +515,18 @@ export const tools: Tool[] = [ required: true, description: `Dimension to group results by: component or team.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from previous response.`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for analytics in YYYY-MM-DD format.`, + }, { name: 'start_date', type: 'string', @@ -539,36 +539,24 @@ export const tools: Tool[] = [ name: 'figma_library_analytics_component_usages_get', description: `Returns a snapshot of how many times each component from a library is used across the organization. Enterprise only.`, params: [ - { - name: 'cursor', - type: 'string', - required: false, - description: `Pagination cursor from previous response.`, - }, { name: 'file_key', type: 'string', required: true, description: `The key of the library Figma file.`, }, - ], - }, - { - name: 'figma_library_analytics_style_actions_get', - description: `Returns analytics data on style insertion and detachment actions from a library file. Enterprise only.`, - params: [ { name: 'cursor', type: 'string', required: false, description: `Pagination cursor from previous response.`, }, - { - name: 'end_date', - type: 'string', - required: false, - description: `End date for analytics in YYYY-MM-DD format.`, - }, + ], + }, + { + name: 'figma_library_analytics_style_actions_get', + description: `Returns analytics data on style insertion and detachment actions from a library file. Enterprise only.`, + params: [ { name: 'file_key', type: 'string', @@ -581,6 +569,18 @@ export const tools: Tool[] = [ required: true, description: `Dimension to group results by: style or team.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from previous response.`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for analytics in YYYY-MM-DD format.`, + }, { name: 'start_date', type: 'string', @@ -593,36 +593,24 @@ export const tools: Tool[] = [ name: 'figma_library_analytics_style_usages_get', description: `Returns a snapshot of how many times each style from a library is used across the organization. Enterprise only.`, params: [ - { - name: 'cursor', - type: 'string', - required: false, - description: `Pagination cursor from previous response.`, - }, { name: 'file_key', type: 'string', required: true, description: `The key of the library Figma file.`, }, - ], - }, - { - name: 'figma_library_analytics_variable_actions_get', - description: `Returns analytics data on variable actions from a library file. Enterprise only.`, - params: [ { name: 'cursor', type: 'string', required: false, description: `Pagination cursor from previous response.`, }, - { - name: 'end_date', - type: 'string', - required: false, - description: `End date for analytics in YYYY-MM-DD format.`, - }, + ], + }, + { + name: 'figma_library_analytics_variable_actions_get', + description: `Returns analytics data on variable actions from a library file. Enterprise only.`, + params: [ { name: 'file_key', type: 'string', @@ -635,6 +623,18 @@ export const tools: Tool[] = [ required: true, description: `Dimension to group results by: variable or team.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from previous response.`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for analytics in YYYY-MM-DD format.`, + }, { name: 'start_date', type: 'string', @@ -647,18 +647,18 @@ export const tools: Tool[] = [ name: 'figma_library_analytics_variable_usages_get', description: `Returns a snapshot of how many times each variable from a library is used across the organization. Enterprise only.`, params: [ - { - name: 'cursor', - type: 'string', - required: false, - description: `Pagination cursor from previous response.`, - }, { name: 'file_key', type: 'string', required: true, description: `The key of the library Figma file.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Pagination cursor from previous response.`, + }, ], }, { @@ -694,18 +694,18 @@ export const tools: Tool[] = [ name: 'figma_project_files_list', description: `Returns all files in a Figma project, including file keys, names, thumbnails, and last modified timestamps.`, params: [ - { - name: 'branch_data', - type: 'boolean', - required: false, - description: `If true, includes branch metadata for each file.`, - }, { name: 'project_id', type: 'string', required: true, description: `The ID of the Figma project.`, }, + { + name: 'branch_data', + type: 'boolean', + required: false, + description: `If true, includes branch metadata for each file.`, + }, ], }, { @@ -719,6 +719,7 @@ export const tools: Tool[] = [ name: 'figma_team_component_sets_list', description: `Returns all published component sets in a Figma team library, with pagination support.`, params: [ + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, { name: 'after', type: 'integer', @@ -737,13 +738,13 @@ export const tools: Tool[] = [ required: false, description: `Number of component sets to return per page.`, }, - { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { name: 'figma_team_components_list', description: `Returns all published components in a Figma team library, with pagination support.`, params: [ + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, { name: 'after', type: 'integer', @@ -762,7 +763,6 @@ export const tools: Tool[] = [ required: false, description: `Number of components to return per page.`, }, - { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { @@ -783,6 +783,7 @@ export const tools: Tool[] = [ name: 'figma_team_styles_list', description: `Returns all published styles in a Figma team library, with pagination support.`, params: [ + { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, { name: 'after', type: 'integer', @@ -801,7 +802,6 @@ export const tools: Tool[] = [ required: false, description: `Number of styles to return per page.`, }, - { name: 'team_id', type: 'string', required: true, description: `The ID of the Figma team.` }, ], }, { @@ -815,12 +815,6 @@ export const tools: Tool[] = [ name: 'figma_webhook_create', description: `Creates a new webhook that sends events to the specified endpoint URL when Figma events occur in a team.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `Optional description for the webhook.`, - }, { name: 'endpoint', type: 'string', @@ -840,16 +834,22 @@ export const tools: Tool[] = [ description: `A passcode included in the webhook payload for verification.`, }, { - name: 'status', + name: 'team_id', + type: 'string', + required: true, + description: `The ID of the team to subscribe to events for.`, + }, + { + name: 'description', type: 'string', required: false, - description: `Webhook status: ACTIVE or PAUSED.`, + description: `Optional description for the webhook.`, }, { - name: 'team_id', + name: 'status', type: 'string', - required: true, - description: `The ID of the team to subscribe to events for.`, + required: false, + description: `Webhook status: ACTIVE or PAUSED.`, }, ], }, @@ -883,6 +883,12 @@ export const tools: Tool[] = [ name: 'figma_webhook_update', description: `Updates an existing Figma webhook's endpoint, passcode, status, or description.`, params: [ + { + name: 'webhook_id', + type: 'string', + required: true, + description: `The ID of the webhook to update.`, + }, { name: 'description', type: 'string', @@ -907,12 +913,6 @@ export const tools: Tool[] = [ required: false, description: `Webhook status: ACTIVE or PAUSED.`, }, - { - name: 'webhook_id', - type: 'string', - required: true, - description: `The ID of the webhook to update.`, - }, ], }, ] diff --git a/src/data/agent-connectors/freshdesk.ts b/src/data/agent-connectors/freshdesk.ts index 6bbb9bffe..76602da18 100644 --- a/src/data/agent-connectors/freshdesk.ts +++ b/src/data/agent-connectors/freshdesk.ts @@ -5,18 +5,30 @@ export const tools: Tool[] = [ name: 'freshdesk_agent_create', description: `Create a new agent in Freshdesk. Email is required and must be unique. Agent will receive invitation email to set up account. At least one role must be assigned.`, params: [ - { - name: 'agent_type', - type: 'number', - required: false, - description: `Type of agent (1=Support Agent, 2=Field Agent, 3=Collaborator)`, - }, { name: 'email', type: 'string', required: true, description: `Email address of the agent (must be unique)`, }, + { + name: 'role_ids', + type: 'array', + required: true, + description: `Array of role IDs to assign to the agent (at least one required)`, + }, + { + name: 'ticket_scope', + type: 'number', + required: true, + description: `Ticket permission level (1=Global Access, 2=Group Access, 3=Restricted Access)`, + }, + { + name: 'agent_type', + type: 'number', + required: false, + description: `Type of agent (1=Support Agent, 2=Field Agent, 3=Collaborator)`, + }, { name: 'focus_mode', type: 'boolean', @@ -42,12 +54,6 @@ export const tools: Tool[] = [ required: false, description: `Whether the agent is occasional (true) or full-time (false)`, }, - { - name: 'role_ids', - type: 'array', - required: true, - description: `Array of role IDs to assign to the agent (at least one required)`, - }, { name: 'signature', type: 'string', @@ -60,12 +66,6 @@ export const tools: Tool[] = [ required: false, description: `Array of skill IDs to assign to the agent`, }, - { - name: 'ticket_scope', - type: 'number', - required: true, - description: `Ticket permission level (1=Global Access, 2=Group Access, 3=Restricted Access)`, - }, { name: 'time_zone', type: 'string', required: false, description: `Time zone of the agent` }, ], }, @@ -127,6 +127,13 @@ export const tools: Tool[] = [ name: 'freshdesk_contact_create', description: `Create a new contact in Freshdesk. Email and name are required. Supports custom fields, company assignment, and contact segmentation.`, params: [ + { + name: 'email', + type: 'string', + required: true, + description: `Email address of the contact`, + }, + { name: 'name', type: 'string', required: true, description: `Full name of the contact` }, { name: 'address', type: 'string', required: false, description: `Address of the contact` }, { name: 'company_id', @@ -146,12 +153,6 @@ export const tools: Tool[] = [ required: false, description: `Description about the contact`, }, - { - name: 'email', - type: 'string', - required: true, - description: `Email address of the contact`, - }, { name: 'job_title', type: 'string', @@ -170,7 +171,6 @@ export const tools: Tool[] = [ required: false, description: `Mobile number of the contact`, }, - { name: 'name', type: 'string', required: true, description: `Full name of the contact` }, { name: 'phone', type: 'string', @@ -280,24 +280,30 @@ export const tools: Tool[] = [ name: 'freshdesk_ticket_get', description: `Retrieve details of a specific ticket by ID. Includes ticket properties, conversations, and metadata.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Additional resources to include (stats, requester, company, conversations)`, - }, { name: 'ticket_id', type: 'number', required: true, description: `ID of the ticket to retrieve`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional resources to include (stats, requester, company, conversations)`, + }, ], }, { name: 'freshdesk_ticket_update', description: `Update an existing ticket in Freshdesk. Note: Subject and description of outbound tickets cannot be updated.`, params: [ + { + name: 'ticket_id', + type: 'number', + required: true, + description: `ID of the ticket to update`, + }, { name: 'custom_fields', type: 'object', @@ -347,12 +353,6 @@ export const tools: Tool[] = [ required: false, description: `Array of tags to be associated with the ticket`, }, - { - name: 'ticket_id', - type: 'number', - required: true, - description: `ID of the ticket to update`, - }, ], }, { @@ -403,13 +403,19 @@ export const tools: Tool[] = [ name: 'freshdesk_tickets_reply', description: `Add a public reply to a ticket conversation. The reply will be visible to the customer and will update the ticket status if specified.`, params: [ + { name: 'body', type: 'string', required: true, description: `HTML content of the reply` }, + { + name: 'ticket_id', + type: 'number', + required: true, + description: `ID of the ticket to reply to`, + }, { name: 'bcc_emails', type: 'array', required: false, description: `Array of email addresses to BCC on the reply`, }, - { name: 'body', type: 'string', required: true, description: `HTML content of the reply` }, { name: 'cc_emails', type: 'array', @@ -422,12 +428,6 @@ export const tools: Tool[] = [ required: false, description: `Email address to send the reply from`, }, - { - name: 'ticket_id', - type: 'number', - required: true, - description: `ID of the ticket to reply to`, - }, { name: 'user_id', type: 'number', diff --git a/src/data/agent-connectors/github.ts b/src/data/agent-connectors/github.ts index 6ed0b3e69..3de987915 100644 --- a/src/data/agent-connectors/github.ts +++ b/src/data/agent-connectors/github.ts @@ -1,6 +1,50 @@ import type { Tool } from '../../types/agent-connectors' export const tools: Tool[] = [ + { + name: 'github_branch_create', + description: `Create a new branch in a GitHub repository. Requires the SHA of the commit to branch from (typically the HEAD of main).`, + params: [ + { + name: 'branch_name', + type: 'string', + required: true, + description: `Name of the new branch to create`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { + name: 'sha', + type: 'string', + required: true, + description: `The SHA of the commit to branch from. Use the HEAD SHA of the base branch (e.g. main).`, + }, + ], + }, + { + name: 'github_branch_get', + description: `Get details of a specific branch in a GitHub repository. Returns the branch name, latest commit SHA, and protection status.`, + params: [ + { + name: 'branch', + type: 'string', + required: true, + description: `The name of the branch to retrieve`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + ], + }, { name: 'github_file_contents_get', description: `Get the contents of a file or directory from a GitHub repository. Returns Base64 encoded content for files.`, @@ -17,32 +61,19 @@ export const tools: Tool[] = [ required: true, description: `The content path (file or directory path in the repository)`, }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'ref', type: 'string', required: false, description: `The name of the commit/branch/tag`, }, - { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, ], }, { name: 'github_file_create_update', description: `Create a new file or update an existing file in a GitHub repository. Content must be Base64 encoded. Requires SHA when updating existing files.`, params: [ - { - name: 'author', - type: 'object', - required: false, - description: `Author information object with name and email`, - }, - { name: 'branch', type: 'string', required: false, description: `The branch name` }, - { - name: 'committer', - type: 'object', - required: false, - description: `Committer information object with name and email`, - }, { name: 'content', type: 'string', @@ -68,6 +99,19 @@ export const tools: Tool[] = [ description: `The file path in the repository`, }, { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { + name: 'author', + type: 'object', + required: false, + description: `Author information object with name and email`, + }, + { name: 'branch', type: 'string', required: false, description: `The branch name` }, + { + name: 'committer', + type: 'object', + required: false, + description: `Committer information object with name and email`, + }, { name: 'sha', type: 'string', @@ -80,6 +124,14 @@ export const tools: Tool[] = [ name: 'github_issue_create', description: `Create a new issue in a repository. Requires push access to set assignees, milestones, and labels.`, params: [ + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, + { name: 'title', type: 'string', required: true, description: `The title of the issue` }, { name: 'assignees', type: 'array', @@ -99,14 +151,6 @@ export const tools: Tool[] = [ required: false, description: `Milestone number to associate with the issue`, }, - { - name: 'owner', - type: 'string', - required: true, - description: `The account owner of the repository`, - }, - { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, - { name: 'title', type: 'string', required: true, description: `The title of the issue` }, { name: 'type', type: 'string', required: false, description: `The name of the issue type` }, ], }, @@ -114,6 +158,13 @@ export const tools: Tool[] = [ name: 'github_issues_list', description: `List issues in a repository. Both issues and pull requests are returned as issues in the GitHub API.`, params: [ + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'assignee', type: 'string', required: false, description: `Filter by assigned user` }, { name: 'creator', type: 'string', required: false, description: `Filter by issue creator` }, { name: 'direction', type: 'string', required: false, description: `Sort order` }, @@ -129,12 +180,6 @@ export const tools: Tool[] = [ required: false, description: `Filter by milestone number or state`, }, - { - name: 'owner', - type: 'string', - required: true, - description: `The account owner of the repository`, - }, { name: 'page', type: 'number', @@ -147,7 +192,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 100)`, }, - { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'since', type: 'string', @@ -162,6 +206,12 @@ export const tools: Tool[] = [ name: 'github_public_repos_list', description: `List public repositories for a specified user. Does not require authentication.`, params: [ + { + name: 'username', + type: 'string', + required: true, + description: `The GitHub username to list repositories for`, + }, { name: 'direction', type: 'string', required: false, description: `Sort order` }, { name: 'page', @@ -182,12 +232,6 @@ export const tools: Tool[] = [ description: `Property to sort repositories by`, }, { name: 'type', type: 'string', required: false, description: `Filter repositories by type` }, - { - name: 'username', - type: 'string', - required: true, - description: `The GitHub username to list repositories for`, - }, ], }, { @@ -200,6 +244,19 @@ export const tools: Tool[] = [ required: true, description: `The name of the branch you want the changes pulled into`, }, + { + name: 'head', + type: 'string', + required: true, + description: `The name of the branch where your changes are implemented (format: user:branch)`, + }, + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'body', type: 'string', @@ -212,25 +269,12 @@ export const tools: Tool[] = [ required: false, description: `Indicates whether the pull request is a draft`, }, - { - name: 'head', - type: 'string', - required: true, - description: `The name of the branch where your changes are implemented (format: user:branch)`, - }, { name: 'maintainer_can_modify', type: 'boolean', required: false, description: `Indicates whether maintainers can modify the pull request`, }, - { - name: 'owner', - type: 'string', - required: true, - description: `The account owner of the repository`, - }, - { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'title', type: 'string', @@ -243,6 +287,13 @@ export const tools: Tool[] = [ name: 'github_pull_requests_list', description: `List pull requests in a repository with optional filtering by state, head, and base branches.`, params: [ + { + name: 'owner', + type: 'string', + required: true, + description: `The account owner of the repository`, + }, + { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'base', type: 'string', required: false, description: `Filter by base branch name` }, { name: 'direction', type: 'string', required: false, description: `Sort order` }, { @@ -251,12 +302,6 @@ export const tools: Tool[] = [ required: false, description: `Filter by head branch (format: user:ref-name)`, }, - { - name: 'owner', - type: 'string', - required: true, - description: `The account owner of the repository`, - }, { name: 'page', type: 'number', @@ -269,7 +314,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 100)`, }, - { name: 'repo', type: 'string', required: true, description: `The name of the repository` }, { name: 'sort', type: 'string', diff --git a/src/data/agent-connectors/gitlab.ts b/src/data/agent-connectors/gitlab.ts index d5af3c90a..2c3b0d803 100644 --- a/src/data/agent-connectors/gitlab.ts +++ b/src/data/agent-connectors/gitlab.ts @@ -91,20 +91,20 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { name: 'note', type: 'string', required: true, description: `The comment text.` }, + { name: 'sha', type: 'string', required: true, description: `The commit SHA.` }, { name: 'line', type: 'integer', required: false, description: `Line number for an inline comment.`, }, - { name: 'note', type: 'string', required: true, description: `The comment text.` }, { name: 'path', type: 'string', required: false, description: `File path for an inline comment.`, }, - { name: 'sha', type: 'string', required: true, description: `The commit SHA.` }, ], }, { @@ -150,18 +150,18 @@ export const tools: Tool[] = [ name: 'gitlab_commits_list', description: `List repository commits for a GitLab project.`, params: [ - { - name: 'author', - type: 'string', - required: false, - description: `Filter commits by author name or email.`, - }, { name: 'id', type: 'string', required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'author', + type: 'string', + required: false, + description: `Filter commits by author name or email.`, + }, { name: 'page', type: 'integer', @@ -216,18 +216,18 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, - { - name: 'straight', - type: 'string', - required: false, - description: `Comparison method: 'true' for straight diff, 'false' for merge base.`, - }, { name: 'to', type: 'string', required: true, description: `The target branch, tag, or commit SHA to compare to.`, }, + { + name: 'straight', + type: 'string', + required: false, + description: `Comparison method: 'true' for straight diff, 'false' for merge base.`, + }, ], }, { @@ -244,12 +244,6 @@ export const tools: Tool[] = [ name: 'gitlab_deploy_key_create', description: `Create a new deploy key for a GitLab project.`, params: [ - { - name: 'can_push', - type: 'string', - required: false, - description: `If 'true', the deploy key has write access.`, - }, { name: 'id', type: 'string', @@ -263,6 +257,12 @@ export const tools: Tool[] = [ required: true, description: `A descriptive title for the deploy key.`, }, + { + name: 'can_push', + type: 'string', + required: false, + description: `If 'true', the deploy key has write access.`, + }, ], }, { @@ -299,18 +299,6 @@ export const tools: Tool[] = [ name: 'gitlab_file_create', description: `Create a new file in a GitLab repository.`, params: [ - { - name: 'author_email', - type: 'string', - required: false, - description: `The author's email for the commit.`, - }, - { - name: 'author_name', - type: 'string', - required: false, - description: `The author's name for the commit.`, - }, { name: 'branch', type: 'string', @@ -329,12 +317,6 @@ export const tools: Tool[] = [ required: true, description: `The file content (plain text or base64 encoded).`, }, - { - name: 'encoding', - type: 'string', - required: false, - description: `The encoding type: 'text' or 'base64'.`, - }, { name: 'file_path', type: 'string', @@ -347,6 +329,24 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'author_email', + type: 'string', + required: false, + description: `The author's email for the commit.`, + }, + { + name: 'author_name', + type: 'string', + required: false, + description: `The author's name for the commit.`, + }, + { + name: 'encoding', + type: 'string', + required: false, + description: `The encoding type: 'text' or 'base64'.`, + }, ], }, { @@ -444,6 +444,8 @@ export const tools: Tool[] = [ name: 'gitlab_global_search', description: `Search globally across GitLab for projects, issues, merge requests, and more.`, params: [ + { name: 'scope', type: 'string', required: true, description: `The scope to search in.` }, + { name: 'search', type: 'string', required: true, description: `The search query string.` }, { name: 'page', type: 'integer', @@ -456,33 +458,31 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 100).`, }, - { name: 'scope', type: 'string', required: true, description: `The scope to search in.` }, - { name: 'search', type: 'string', required: true, description: `The search query string.` }, ], }, { name: 'gitlab_group_create', description: `Create a new GitLab group or subgroup.`, params: [ + { name: 'name', type: 'string', required: true, description: `The name of the group.` }, + { + name: 'path', + type: 'string', + required: true, + description: `URL-friendly path slug for the group.`, + }, { name: 'description', type: 'string', required: false, description: `Optional group description.`, }, - { name: 'name', type: 'string', required: true, description: `The name of the group.` }, { name: 'parent_id', type: 'integer', required: false, description: `ID of the parent group (for subgroups).`, }, - { - name: 'path', - type: 'string', - required: true, - description: `URL-friendly path slug for the group.`, - }, { name: 'visibility', type: 'string', @@ -617,18 +617,18 @@ export const tools: Tool[] = [ name: 'gitlab_group_update', description: `Update a GitLab group's settings.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `Updated group description.`, - }, { name: 'id', type: 'string', required: true, description: `The group ID (numeric) or URL-encoded path.`, }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated group description.`, + }, { name: 'name', type: 'string', required: false, description: `New name for the group.` }, { name: 'visibility', @@ -673,6 +673,13 @@ export const tools: Tool[] = [ name: 'gitlab_issue_create', description: `Create a new issue in a GitLab project.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the issue.` }, { name: 'assignee_ids', type: 'string', @@ -691,12 +698,6 @@ export const tools: Tool[] = [ required: false, description: `Due date for the issue in YYYY-MM-DD format.`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The project ID (numeric) or URL-encoded path.`, - }, { name: 'labels', type: 'string', @@ -709,7 +710,6 @@ export const tools: Tool[] = [ required: false, description: `The ID of the milestone to assign.`, }, - { name: 'title', type: 'string', required: true, description: `The title of the issue.` }, ], }, { @@ -884,18 +884,6 @@ export const tools: Tool[] = [ name: 'gitlab_issue_update', description: `Update an existing issue in a GitLab project.`, params: [ - { - name: 'assignee_ids', - type: 'string', - required: false, - description: `Comma-separated list of user IDs to assign.`, - }, - { - name: 'description', - type: 'string', - required: false, - description: `Updated description of the issue.`, - }, { name: 'id', type: 'string', @@ -908,6 +896,18 @@ export const tools: Tool[] = [ required: true, description: `The internal ID of the issue within the project.`, }, + { + name: 'assignee_ids', + type: 'string', + required: false, + description: `Comma-separated list of user IDs to assign.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the issue.`, + }, { name: 'labels', type: 'string', @@ -927,18 +927,18 @@ export const tools: Tool[] = [ name: 'gitlab_issues_list', description: `List issues for a GitLab project.`, params: [ - { - name: 'assignee_id', - type: 'integer', - required: false, - description: `Filter issues by assignee user ID.`, - }, { name: 'id', type: 'string', required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'assignee_id', + type: 'integer', + required: false, + description: `Filter issues by assignee user ID.`, + }, { name: 'labels', type: 'string', @@ -1114,12 +1114,6 @@ export const tools: Tool[] = [ required: true, description: `The color for the label in hex format (e.g. #FF0000).`, }, - { - name: 'description', - type: 'string', - required: false, - description: `Optional description for the label.`, - }, { name: 'id', type: 'string', @@ -1127,6 +1121,12 @@ export const tools: Tool[] = [ description: `The project ID (numeric) or URL-encoded path.`, }, { name: 'name', type: 'string', required: true, description: `The name of the label.` }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional description for the label.`, + }, ], }, { @@ -1187,6 +1187,30 @@ export const tools: Tool[] = [ name: 'gitlab_merge_request_create', description: `Create a new merge request in a GitLab project.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'source_branch', + type: 'string', + required: true, + description: `The source branch name.`, + }, + { + name: 'target_branch', + type: 'string', + required: true, + description: `The target branch name.`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `The title of the merge request.`, + }, { name: 'assignee_id', type: 'integer', @@ -1199,12 +1223,6 @@ export const tools: Tool[] = [ required: false, description: `Description for the merge request (Markdown supported).`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The project ID (numeric) or URL-encoded path.`, - }, { name: 'labels', type: 'string', @@ -1217,30 +1235,12 @@ export const tools: Tool[] = [ required: false, description: `If 'true', removes the source branch after merging.`, }, - { - name: 'source_branch', - type: 'string', - required: true, - description: `The source branch name.`, - }, { name: 'squash', type: 'string', required: false, description: `If 'true', squashes all commits into one on merge.`, }, - { - name: 'target_branch', - type: 'string', - required: true, - description: `The target branch name.`, - }, - { - name: 'title', - type: 'string', - required: true, - description: `The title of the merge request.`, - }, ], }, { @@ -1289,18 +1289,18 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, - { - name: 'merge_commit_message', - type: 'string', - required: false, - description: `Custom merge commit message.`, - }, { name: 'merge_request_iid', type: 'integer', required: true, description: `The internal ID of the merge request.`, }, + { + name: 'merge_commit_message', + type: 'string', + required: false, + description: `Custom merge commit message.`, + }, { name: 'should_remove_source_branch', type: 'string', @@ -1373,6 +1373,18 @@ export const tools: Tool[] = [ name: 'gitlab_merge_request_update', description: `Update an existing merge request in a GitLab project.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { + name: 'merge_request_iid', + type: 'integer', + required: true, + description: `The internal ID of the merge request.`, + }, { name: 'assignee_id', type: 'integer', @@ -1385,24 +1397,12 @@ export const tools: Tool[] = [ required: false, description: `Updated description for the merge request.`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The project ID (numeric) or URL-encoded path.`, - }, { name: 'labels', type: 'string', required: false, description: `Comma-separated list of label names.`, }, - { - name: 'merge_request_iid', - type: 'integer', - required: true, - description: `The internal ID of the merge request.`, - }, { name: 'state_event', type: 'string', @@ -1488,6 +1488,13 @@ export const tools: Tool[] = [ name: 'gitlab_milestone_create', description: `Create a new milestone in a GitLab project.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the milestone.` }, { name: 'description', type: 'string', @@ -1500,19 +1507,12 @@ export const tools: Tool[] = [ required: false, description: `Due date for the milestone in YYYY-MM-DD format.`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The project ID (numeric) or URL-encoded path.`, - }, { name: 'start_date', type: 'string', required: false, description: `Start date for the milestone in YYYY-MM-DD format.`, }, - { name: 'title', type: 'string', required: true, description: `The title of the milestone.` }, ], }, { @@ -1555,18 +1555,6 @@ export const tools: Tool[] = [ name: 'gitlab_milestone_update', description: `Update an existing milestone in a GitLab project.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `Updated description for the milestone.`, - }, - { - name: 'due_date', - type: 'string', - required: false, - description: `Updated due date in YYYY-MM-DD format.`, - }, { name: 'id', type: 'string', @@ -1579,6 +1567,18 @@ export const tools: Tool[] = [ required: true, description: `The numeric ID of the milestone.`, }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description for the milestone.`, + }, + { + name: 'due_date', + type: 'string', + required: false, + description: `Updated due date in YYYY-MM-DD format.`, + }, { name: 'state_event', type: 'string', @@ -1741,6 +1741,12 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `The numeric ID of the pipeline.`, + }, { name: 'page', type: 'integer', @@ -1753,12 +1759,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 100).`, }, - { - name: 'pipeline_id', - type: 'integer', - required: true, - description: `The numeric ID of the pipeline.`, - }, { name: 'scope', type: 'string', required: false, description: `Filter jobs by scope.` }, ], }, @@ -1826,6 +1826,7 @@ export const tools: Tool[] = [ name: 'gitlab_project_create', description: `Create a new GitLab project.`, params: [ + { name: 'name', type: 'string', required: true, description: `The name of the project.` }, { name: 'description', type: 'string', @@ -1838,7 +1839,6 @@ export const tools: Tool[] = [ required: false, description: `If 'true', initializes the repository with a README.`, }, - { name: 'name', type: 'string', required: true, description: `The name of the project.` }, { name: 'visibility', type: 'string', @@ -2002,6 +2002,13 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'scope', + type: 'string', + required: true, + description: `The scope to search in within the project.`, + }, + { name: 'search', type: 'string', required: true, description: `The search query string.` }, { name: 'page', type: 'integer', @@ -2020,13 +2027,6 @@ export const tools: Tool[] = [ required: false, description: `The branch or tag name to search (for blobs or commits scope).`, }, - { - name: 'scope', - type: 'string', - required: true, - description: `The scope to search in within the project.`, - }, - { name: 'search', type: 'string', required: true, description: `The search query string.` }, ], }, { @@ -2039,12 +2039,6 @@ export const tools: Tool[] = [ required: true, description: `The content of the snippet.`, }, - { - name: 'description', - type: 'string', - required: false, - description: `Optional description for the snippet.`, - }, { name: 'file_name', type: 'string', @@ -2058,6 +2052,12 @@ export const tools: Tool[] = [ description: `The project ID (numeric) or URL-encoded path.`, }, { name: 'title', type: 'string', required: true, description: `The title of the snippet.` }, + { + name: 'description', + type: 'string', + required: false, + description: `Optional description for the snippet.`, + }, { name: 'visibility', type: 'string', @@ -2136,6 +2136,12 @@ export const tools: Tool[] = [ name: 'gitlab_project_update', description: `Update an existing GitLab project's settings.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject').`, + }, { name: 'default_branch', type: 'string', @@ -2148,12 +2154,6 @@ export const tools: Tool[] = [ required: false, description: `A short description of the project.`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The project ID (numeric) or URL-encoded path (e.g. 'namespace%2Fproject').`, - }, { name: 'name', type: 'string', required: false, description: `New name for the project.` }, { name: 'visibility', @@ -2167,12 +2167,6 @@ export const tools: Tool[] = [ name: 'gitlab_project_variable_create', description: `Create a new CI/CD variable for a GitLab project.`, params: [ - { - name: 'environment_scope', - type: 'string', - required: false, - description: `The environment scope for this variable (default '*').`, - }, { name: 'id', type: 'string', @@ -2180,6 +2174,13 @@ export const tools: Tool[] = [ description: `The project ID (numeric) or URL-encoded path.`, }, { name: 'key', type: 'string', required: true, description: `The variable key name.` }, + { name: 'value', type: 'string', required: true, description: `The value of the variable.` }, + { + name: 'environment_scope', + type: 'string', + required: false, + description: `The environment scope for this variable (default '*').`, + }, { name: 'masked', type: 'string', @@ -2192,7 +2193,6 @@ export const tools: Tool[] = [ required: false, description: `If 'true', the variable is only available on protected branches/tags.`, }, - { name: 'value', type: 'string', required: true, description: `The value of the variable.` }, { name: 'variable_type', type: 'string', @@ -2248,6 +2248,12 @@ export const tools: Tool[] = [ required: true, description: `The variable key name to update.`, }, + { + name: 'value', + type: 'string', + required: true, + description: `The new value of the variable.`, + }, { name: 'masked', type: 'string', @@ -2260,12 +2266,6 @@ export const tools: Tool[] = [ required: false, description: `If 'true', the variable is only available on protected branches/tags.`, }, - { - name: 'value', - type: 'string', - required: true, - description: `The new value of the variable.`, - }, ], }, { @@ -2290,6 +2290,12 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'url', + type: 'string', + required: true, + description: `The URL to send webhook payloads to.`, + }, { name: 'issues_events', type: 'string', @@ -2320,12 +2326,6 @@ export const tools: Tool[] = [ required: false, description: `Secret token to validate webhook payloads.`, }, - { - name: 'url', - type: 'string', - required: true, - description: `The URL to send webhook payloads to.`, - }, ], }, { @@ -2380,6 +2380,12 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, + { + name: 'url', + type: 'string', + required: true, + description: `The new URL to send webhook payloads to.`, + }, { name: 'merge_requests_events', type: 'string', @@ -2398,12 +2404,6 @@ export const tools: Tool[] = [ required: false, description: `If 'true', trigger on push events.`, }, - { - name: 'url', - type: 'string', - required: true, - description: `The new URL to send webhook payloads to.`, - }, ], }, { @@ -2489,18 +2489,18 @@ export const tools: Tool[] = [ description: `The project ID (numeric) or URL-encoded path.`, }, { name: 'name', type: 'string', required: true, description: `The release name.` }, - { - name: 'ref', - type: 'string', - required: false, - description: `The branch or commit to create the tag from (only if tag does not exist).`, - }, { name: 'tag_name', type: 'string', required: true, description: `The tag name for the release.`, }, + { + name: 'ref', + type: 'string', + required: false, + description: `The branch or commit to create the tag from (only if tag does not exist).`, + }, ], }, { @@ -2543,25 +2543,25 @@ export const tools: Tool[] = [ name: 'gitlab_release_update', description: `Update an existing release in a GitLab project.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `Updated release notes in Markdown format.`, - }, { name: 'id', type: 'string', required: true, description: `The project ID (numeric) or URL-encoded path.`, }, - { name: 'name', type: 'string', required: false, description: `Updated release name.` }, { name: 'tag_name', type: 'string', required: true, description: `The tag name of the release to update.`, }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated release notes in Markdown format.`, + }, + { name: 'name', type: 'string', required: false, description: `Updated release name.` }, ], }, { @@ -2653,25 +2653,25 @@ export const tools: Tool[] = [ required: true, description: `The project ID (numeric) or URL-encoded path.`, }, - { - name: 'message', - type: 'string', - required: false, - description: `Message for an annotated tag.`, - }, { name: 'ref', type: 'string', required: true, description: `The commit SHA, branch name, or another tag name to create the tag from.`, }, + { name: 'tag_name', type: 'string', required: true, description: `The name of the new tag.` }, + { + name: 'message', + type: 'string', + required: false, + description: `Message for an annotated tag.`, + }, { name: 'release_description', type: 'string', required: false, description: `Release notes for the tag.`, }, - { name: 'tag_name', type: 'string', required: true, description: `The name of the new tag.` }, ], }, { @@ -2746,6 +2746,12 @@ export const tools: Tool[] = [ name: 'gitlab_user_projects_list', description: `List projects owned by a specific user.`, params: [ + { + name: 'user_id', + type: 'integer', + required: true, + description: `The numeric ID of the user whose projects to list.`, + }, { name: 'page', type: 'integer', @@ -2758,12 +2764,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 100).`, }, - { - name: 'user_id', - type: 'integer', - required: true, - description: `The numeric ID of the user whose projects to list.`, - }, ], }, { diff --git a/src/data/agent-connectors/gmail.ts b/src/data/agent-connectors/gmail.ts index d2aa2a699..a5ffd0a9c 100644 --- a/src/data/agent-connectors/gmail.ts +++ b/src/data/agent-connectors/gmail.ts @@ -65,18 +65,18 @@ export const tools: Tool[] = [ required: true, description: `Unique Gmail attachment ID`, }, - { - name: 'file_name', - type: 'string', - required: false, - description: `Preferred filename to use when saving/returning the attachment`, - }, { name: 'message_id', type: 'string', required: true, description: `Unique Gmail message ID that contains the attachment`, }, + { + name: 'file_name', + type: 'string', + required: false, + description: `Preferred filename to use when saving/returning the attachment`, + }, { name: 'schema_version', type: 'string', @@ -131,18 +131,18 @@ export const tools: Tool[] = [ name: 'gmail_get_message_by_id', description: `Retrieve a specific Gmail message using its message ID. Optionally control the format of the returned data.`, params: [ - { - name: 'format', - type: 'string', - required: false, - description: `Format of the returned message.`, - }, { name: 'message_id', type: 'string', required: true, description: `Unique Gmail message ID`, }, + { + name: 'format', + type: 'string', + required: false, + description: `Format of the returned message.`, + }, { name: 'schema_version', type: 'string', @@ -161,6 +161,7 @@ export const tools: Tool[] = [ name: 'gmail_get_thread_by_id', description: `Retrieve a specific Gmail thread by thread ID. Optionally control message format and metadata headers. Requires a valid Gmail OAuth2 connection with read access.`, params: [ + { name: 'thread_id', type: 'string', required: true, description: `Unique Gmail thread ID` }, { name: 'format', type: 'string', @@ -179,7 +180,6 @@ export const tools: Tool[] = [ required: false, description: `Optional schema version to use for tool execution`, }, - { name: 'thread_id', type: 'string', required: true, description: `Unique Gmail thread ID` }, { name: 'tool_version', type: 'string', @@ -270,6 +270,12 @@ export const tools: Tool[] = [ name: 'gmail_search_people', description: `Search people or contacts in the connected Google account using a query. Requires a valid Google OAuth2 connection with People API scopes.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Text query to search people (e.g., name, email address).`, + }, { name: 'other_contacts', type: 'boolean', @@ -288,12 +294,6 @@ export const tools: Tool[] = [ required: false, description: `Fields to retrieve for each person.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Text query to search people (e.g., name, email address).`, - }, { name: 'schema_version', type: 'string', diff --git a/src/data/agent-connectors/gong.ts b/src/data/agent-connectors/gong.ts index b48ce75cf..3e1b5327f 100644 --- a/src/data/agent-connectors/gong.ts +++ b/src/data/agent-connectors/gong.ts @@ -214,18 +214,6 @@ export const tools: Tool[] = [ name: 'gong_engage_digital_interactions_create', description: `Add a digital interaction event (such as a web visit, content engagement, or other digital touchpoint) to a Gong Engage prospect's activity timeline.`, params: [ - { - name: 'crm_account_id', - type: 'string', - required: false, - description: `The CRM account ID associated with this interaction.`, - }, - { - name: 'crm_contact_id', - type: 'string', - required: false, - description: `The CRM contact ID associated with this interaction.`, - }, { name: 'event_name', type: 'string', @@ -238,6 +226,18 @@ export const tools: Tool[] = [ required: true, description: `Timestamp when the digital interaction occurred (ISO 8601 format).`, }, + { + name: 'crm_account_id', + type: 'string', + required: false, + description: `The CRM account ID associated with this interaction.`, + }, + { + name: 'crm_contact_id', + type: 'string', + required: false, + description: `The CRM contact ID associated with this interaction.`, + }, { name: 'prospect_email', type: 'string', @@ -274,18 +274,18 @@ export const tools: Tool[] = [ required: true, description: `The type of email engagement event to report.`, }, - { - name: 'link_url', - type: 'string', - required: false, - description: `For EMAIL_LINK_CLICKED events, the URL of the link that was clicked.`, - }, { name: 'prospect_email', type: 'string', required: true, description: `Email address of the prospect who triggered this engagement event.`, }, + { + name: 'link_url', + type: 'string', + required: false, + description: `For EMAIL_LINK_CLICKED events, the URL of the link that was clicked.`, + }, ], }, { @@ -310,18 +310,18 @@ export const tools: Tool[] = [ name: 'gong_engage_flow_folders_list', description: `List all Gong Engage flow folders available to a user, including company folders, personal folders, and folders shared with the specified user.`, params: [ - { - name: 'cursor', - type: 'string', - required: false, - description: `Cursor value from a previous API response for paginating to the next page of results.`, - }, { name: 'flow_owner_email', type: 'string', required: true, description: `Email address of the Gong user whose flow folders to retrieve. Returns company folders plus personal and shared folders for this user.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, { name: 'workspace_id', type: 'string', @@ -334,18 +334,18 @@ export const tools: Tool[] = [ name: 'gong_engage_flows_list', description: `List all Gong Engage flows available to a user, including company flows, personal flows, and flows shared with the specified user.`, params: [ - { - name: 'cursor', - type: 'string', - required: false, - description: `Cursor value from a previous API response for paginating to the next page of results.`, - }, { name: 'flow_owner_email', type: 'string', required: true, description: `Email address of the Gong user whose flows to retrieve. Returns company flows plus personal and shared flows for this user.`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous API response for paginating to the next page of results.`, + }, { name: 'workspace_id', type: 'string', @@ -484,36 +484,36 @@ export const tools: Tool[] = [ name: 'gong_engage_task_complete', description: `Mark a specific Gong Engage task as completed.`, params: [ - { - name: 'completion_notes', - type: 'string', - required: false, - description: `Optional notes about how the task was completed.`, - }, { name: 'task_id', type: 'string', required: true, description: `The unique ID of the Gong Engage task to mark as completed.`, }, + { + name: 'completion_notes', + type: 'string', + required: false, + description: `Optional notes about how the task was completed.`, + }, ], }, { name: 'gong_engage_task_skip', description: `Skip a specific Gong Engage task, indicating it should not be performed for this prospect.`, params: [ - { - name: 'skip_reason', - type: 'string', - required: false, - description: `Optional reason for skipping this task.`, - }, { name: 'task_id', type: 'string', required: true, description: `The unique ID of the Gong Engage task to skip.`, }, + { + name: 'skip_reason', + type: 'string', + required: false, + description: `Optional reason for skipping this task.`, + }, ], }, { @@ -608,18 +608,6 @@ export const tools: Tool[] = [ name: 'gong_stats_interaction', description: `Get aggregated interaction statistics for Gong calls within a date range. Returns metrics such as talk ratio, longest monologue, patience, question rate, and interactivity for each participant. Optionally filter by specific call IDs.`, params: [ - { - name: 'call_ids', - type: 'array', - required: false, - description: `Optional array of specific Gong call IDs to filter the statistics.`, - }, - { - name: 'cursor', - type: 'string', - required: false, - description: `Cursor value from a previous response for paginating to the next page of results.`, - }, { name: 'from_date_time', type: 'string', @@ -632,18 +620,24 @@ export const tools: Tool[] = [ required: true, description: `End of the date range for retrieving interaction statistics (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, }, - ], - }, - { - name: 'gong_stats_user_actions', - description: `Get user activity and scorecard statistics for Gong calls within a date range. Returns aggregated scorecard metrics and activity data per user. Optionally filter by specific user IDs.`, - params: [ + { + name: 'call_ids', + type: 'array', + required: false, + description: `Optional array of specific Gong call IDs to filter the statistics.`, + }, { name: 'cursor', type: 'string', required: false, description: `Cursor value from a previous response for paginating to the next page of results.`, }, + ], + }, + { + name: 'gong_stats_user_actions', + description: `Get user activity and scorecard statistics for Gong calls within a date range. Returns aggregated scorecard metrics and activity data per user. Optionally filter by specific user IDs.`, + params: [ { name: 'from_date_time', type: 'string', @@ -656,6 +650,12 @@ export const tools: Tool[] = [ required: true, description: `End of the date range for retrieving scorecard statistics (ISO 8601 format, e.g., 2024-12-31T23:59:59Z).`, }, + { + name: 'cursor', + type: 'string', + required: false, + description: `Cursor value from a previous response for paginating to the next page of results.`, + }, { name: 'user_ids', type: 'array', diff --git a/src/data/agent-connectors/googlecalendar.ts b/src/data/agent-connectors/googlecalendar.ts index a90b06e61..954bb95bb 100644 --- a/src/data/agent-connectors/googlecalendar.ts +++ b/src/data/agent-connectors/googlecalendar.ts @@ -5,6 +5,13 @@ export const tools: Tool[] = [ name: 'googlecalendar_create_event', description: `Create a new event in a connected Google Calendar account. Supports meeting links, recurrence, attendees, and more.`, params: [ + { + name: 'start_datetime', + type: 'string', + required: true, + description: `Event start time in RFC3339 format`, + }, + { name: 'summary', type: 'string', required: true, description: `Event title/summary` }, { name: 'attendees_emails', type: 'array', @@ -84,13 +91,6 @@ export const tools: Tool[] = [ required: false, description: `Send update notifications to attendees`, }, - { - name: 'start_datetime', - type: 'string', - required: true, - description: `Event start time in RFC3339 format`, - }, - { name: 'summary', type: 'string', required: true, description: `Event title/summary` }, { name: 'timezone', type: 'string', @@ -121,18 +121,18 @@ export const tools: Tool[] = [ name: 'googlecalendar_delete_event', description: `Delete an event from a connected Google Calendar account. Requires the calendar ID and event ID.`, params: [ - { - name: 'calendar_id', - type: 'string', - required: false, - description: `The ID of the calendar from which the event should be deleted`, - }, { name: 'event_id', type: 'string', required: true, description: `The ID of the calendar event to delete`, }, + { + name: 'calendar_id', + type: 'string', + required: false, + description: `The ID of the calendar from which the event should be deleted`, + }, { name: 'schema_version', type: 'string', @@ -151,18 +151,18 @@ export const tools: Tool[] = [ name: 'googlecalendar_get_event_by_id', description: `Retrieve a specific calendar event by its ID using optional filtering and list parameters.`, params: [ - { - name: 'calendar_id', - type: 'string', - required: false, - description: `The calendar ID to search in`, - }, { name: 'event_id', type: 'string', required: true, description: `The unique identifier of the calendar event to fetch`, }, + { + name: 'calendar_id', + type: 'string', + required: false, + description: `The calendar ID to search in`, + }, { name: 'event_types', type: 'array', @@ -333,18 +333,24 @@ export const tools: Tool[] = [ name: 'googlecalendar_update_event', description: `Update an existing event in a connected Google Calendar account. Only provided fields will be updated. Supports updating time, attendees, location, meeting links, and more.`, params: [ - { - name: 'attendees_emails', - type: 'array', - required: false, - description: `Attendee email addresses`, - }, { name: 'calendar_id', type: 'string', required: true, description: `Calendar ID containing the event`, }, + { + name: 'event_id', + type: 'string', + required: true, + description: `The ID of the calendar event to update`, + }, + { + name: 'attendees_emails', + type: 'array', + required: false, + description: `Attendee email addresses`, + }, { name: 'create_meeting_room', type: 'boolean', @@ -375,12 +381,6 @@ export const tools: Tool[] = [ required: false, description: `Duration of event in minutes`, }, - { - name: 'event_id', - type: 'string', - required: true, - description: `The ID of the calendar event to update`, - }, { name: 'event_type', type: 'string', diff --git a/src/data/agent-connectors/googledrive.ts b/src/data/agent-connectors/googledrive.ts index 00eef29dd..13c207f7c 100644 --- a/src/data/agent-connectors/googledrive.ts +++ b/src/data/agent-connectors/googledrive.ts @@ -5,18 +5,18 @@ export const tools: Tool[] = [ name: 'googledrive_get_file_metadata', description: `Retrieve metadata for a specific file in Google Drive by its file ID. Returns name, MIME type, size, creation time, and more.`, params: [ - { - name: 'fields', - type: 'string', - required: false, - description: `Fields to include in the response`, - }, { name: 'file_id', type: 'string', required: true, description: `The ID of the file to retrieve metadata for`, }, + { + name: 'fields', + type: 'string', + required: false, + description: `Fields to include in the response`, + }, { name: 'schema_version', type: 'string', @@ -41,6 +41,12 @@ export const tools: Tool[] = [ name: 'googledrive_search_content', description: `Search inside the content of files stored in Google Drive using full-text search. Finds files where the body text matches the search term.`, params: [ + { + name: 'search_term', + type: 'string', + required: true, + description: `Text to search for inside file contents`, + }, { name: 'fields', type: 'string', @@ -71,12 +77,6 @@ export const tools: Tool[] = [ required: false, description: `Optional schema version to use for tool execution`, }, - { - name: 'search_term', - type: 'string', - required: true, - description: `Text to search for inside file contents`, - }, { name: 'supports_all_drives', type: 'boolean', diff --git a/src/data/agent-connectors/googleforms.ts b/src/data/agent-connectors/googleforms.ts index 1636e5a4c..7b96daecc 100644 --- a/src/data/agent-connectors/googleforms.ts +++ b/src/data/agent-connectors/googleforms.ts @@ -5,18 +5,18 @@ export const tools: Tool[] = [ name: 'googleforms_create_form', description: `Create a new Google Form with a title and optional document title. Returns the new form's ID and metadata.`, params: [ - { - name: 'document_title', - type: 'string', - required: false, - description: `The title of the document shown in Google Drive (defaults to the form title if not provided)`, - }, { name: 'title', type: 'string', required: true, description: `The title of the form shown to respondents`, }, + { + name: 'document_title', + type: 'string', + required: false, + description: `The title of the document shown in Google Drive (defaults to the form title if not provided)`, + }, ], }, { @@ -48,18 +48,18 @@ export const tools: Tool[] = [ name: 'googleforms_list_responses', description: `List all responses submitted to a Google Form. Returns response IDs, submission timestamps, and answer values for each respondent.`, params: [ - { - name: 'filter', - type: 'string', - required: false, - description: `Filter responses by submission time. Format: timestamp > 2026-01-01T00:00:00Z`, - }, { name: 'form_id', type: 'string', required: true, description: `The ID of the Google Form to list responses for`, }, + { + name: 'filter', + type: 'string', + required: false, + description: `Filter responses by submission time. Format: timestamp > 2026-01-01T00:00:00Z`, + }, { name: 'page_size', type: 'integer', diff --git a/src/data/agent-connectors/googlesheets.ts b/src/data/agent-connectors/googlesheets.ts index b455c37cb..37aa52ea6 100644 --- a/src/data/agent-connectors/googlesheets.ts +++ b/src/data/agent-connectors/googlesheets.ts @@ -5,12 +5,6 @@ export const tools: Tool[] = [ name: 'googlesheets_append_values', description: `Append rows of data to a Google Sheets spreadsheet. Data is added after the last row with existing content in the specified range.`, params: [ - { - name: 'insert_data_option', - type: 'string', - required: false, - description: `How the input data should be inserted. Options: INSERT_ROWS (inserts new rows), OVERWRITE (overwrites existing data). Default: OVERWRITE`, - }, { name: 'range', type: 'string', @@ -23,18 +17,24 @@ export const tools: Tool[] = [ required: true, description: `The ID of the spreadsheet to append data to`, }, - { - name: 'value_input_option', - type: 'string', - required: false, - description: `How input data should be interpreted. Options: RAW (literal values), USER_ENTERED (as if typed in UI, parses formulas/dates). Default: USER_ENTERED`, - }, { name: 'values', type: 'array', required: true, description: `2D array of values to append. Each inner array is a row.`, }, + { + name: 'insert_data_option', + type: 'string', + required: false, + description: `How the input data should be inserted. Options: INSERT_ROWS (inserts new rows), OVERWRITE (overwrites existing data). Default: OVERWRITE`, + }, + { + name: 'value_input_option', + type: 'string', + required: false, + description: `How input data should be interpreted. Options: RAW (literal values), USER_ENTERED (as if typed in UI, parses formulas/dates). Default: USER_ENTERED`, + }, ], }, { @@ -97,28 +97,28 @@ export const tools: Tool[] = [ description: `Returns only the cell values from a specific range in a Google Sheet — no metadata, no formatting, just the data. For full spreadsheet metadata and formatting, use googlesheets_read_spreadsheet instead.`, params: [ { - name: 'major_dimension', + name: 'range', type: 'string', - required: false, - description: `Whether values are returned by rows or columns`, + required: true, + description: `Cell range to read in A1 notation`, }, { - name: 'range', + name: 'spreadsheet_id', type: 'string', required: true, - description: `Cell range to read in A1 notation`, + description: `The ID of the Google Sheet`, }, { - name: 'schema_version', + name: 'major_dimension', type: 'string', required: false, - description: `Optional schema version to use for tool execution`, + description: `Whether values are returned by rows or columns`, }, { - name: 'spreadsheet_id', + name: 'schema_version', type: 'string', - required: true, - description: `The ID of the Google Sheet`, + required: false, + description: `Optional schema version to use for tool execution`, }, { name: 'tool_version', @@ -138,6 +138,12 @@ export const tools: Tool[] = [ name: 'googlesheets_read_spreadsheet', description: `Returns everything about a spreadsheet — including spreadsheet metadata, sheet properties, cell values, formatting, themes, and pixel sizes. If you only need cell values, use googlesheets_get_values instead.`, params: [ + { + name: 'spreadsheet_id', + type: 'string', + required: true, + description: `The ID of the Google Sheet to read`, + }, { name: 'include_grid_data', type: 'boolean', @@ -156,12 +162,6 @@ export const tools: Tool[] = [ required: false, description: `Optional schema version to use for tool execution`, }, - { - name: 'spreadsheet_id', - type: 'string', - required: true, - description: `The ID of the Google Sheet to read`, - }, { name: 'tool_version', type: 'string', @@ -174,12 +174,6 @@ export const tools: Tool[] = [ name: 'googlesheets_update_values', description: `Update cell values in a specific range of a Google Sheet. Supports writing single cells or multiple rows and columns at once.`, params: [ - { - name: 'include_values_in_response', - type: 'boolean', - required: false, - description: `Return the updated cell values in the response`, - }, { name: 'range', type: 'string', @@ -187,16 +181,28 @@ export const tools: Tool[] = [ description: `Cell range to update in A1 notation`, }, { - name: 'schema_version', + name: 'spreadsheet_id', type: 'string', + required: true, + description: `The ID of the Google Sheet to update`, + }, + { + name: 'values', + type: 'array', + required: true, + description: `2D array of values to write to the range`, + }, + { + name: 'include_values_in_response', + type: 'boolean', required: false, - description: `Optional schema version to use for tool execution`, + description: `Return the updated cell values in the response`, }, { - name: 'spreadsheet_id', + name: 'schema_version', type: 'string', - required: true, - description: `The ID of the Google Sheet to update`, + required: false, + description: `Optional schema version to use for tool execution`, }, { name: 'tool_version', @@ -210,12 +216,6 @@ export const tools: Tool[] = [ required: false, description: `How input values should be interpreted`, }, - { - name: 'values', - type: 'array', - required: true, - description: `2D array of values to write to the range`, - }, ], }, ] diff --git a/src/data/agent-connectors/googleslides.ts b/src/data/agent-connectors/googleslides.ts index 00af55a58..af26afd7a 100644 --- a/src/data/agent-connectors/googleslides.ts +++ b/src/data/agent-connectors/googleslides.ts @@ -29,18 +29,18 @@ export const tools: Tool[] = [ name: 'googleslides_read_presentation', description: `Read the complete structure and content of a Google Slides presentation including slides, text, images, shapes, and metadata.`, params: [ - { - name: 'fields', - type: 'string', - required: false, - description: `Fields to include in the response`, - }, { name: 'presentation_id', type: 'string', required: true, description: `The ID of the Google Slides presentation to read`, }, + { + name: 'fields', + type: 'string', + required: false, + description: `Fields to include in the response`, + }, { name: 'schema_version', type: 'string', diff --git a/src/data/agent-connectors/granola.ts b/src/data/agent-connectors/granola.ts index 75d5ff6ac..96be20d1d 100644 --- a/src/data/agent-connectors/granola.ts +++ b/src/data/agent-connectors/granola.ts @@ -5,18 +5,18 @@ export const tools: Tool[] = [ name: 'granola_note_get', description: `Retrieve a single Granola meeting note by its ID. Returns the full note including title, owner, calendar event details, attendees, folder memberships, and AI-generated summary. Optionally include the full transcript with speaker labels and timestamps.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Pass 'transcript' to include the full meeting transcript with speaker source and timestamps.`, - }, { name: 'note_id', type: 'string', required: true, description: `The unique identifier of the note to retrieve. Format: not_XXXXXXXXXXXXXX.`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Pass 'transcript' to include the full meeting transcript with speaker source and timestamps.`, + }, ], }, { diff --git a/src/data/agent-connectors/granolamcp.ts b/src/data/agent-connectors/granolamcp.ts index 5f0700190..40ef25e07 100644 --- a/src/data/agent-connectors/granolamcp.ts +++ b/src/data/agent-connectors/granolamcp.ts @@ -113,18 +113,18 @@ When NOT to use: Prioritize using query_granola_meetings over list_meetings/get_meetings for open-ended or natural language queries about meeting content.`, params: [ - { - name: 'document_ids', - type: 'array', - required: false, - description: `Optional list of specific meeting IDs to limit context to`, - }, { name: 'query', type: 'string', required: true, description: `The query to run on Granola meeting notes`, }, + { + name: 'document_ids', + type: 'array', + required: false, + description: `Optional list of specific meeting IDs to limit context to`, + }, { name: 'schema_version', type: 'string', diff --git a/src/data/agent-connectors/harvestapi.ts b/src/data/agent-connectors/harvestapi.ts index b90d28a23..94eb6e5e3 100644 --- a/src/data/agent-connectors/harvestapi.ts +++ b/src/data/agent-connectors/harvestapi.ts @@ -11,18 +11,18 @@ export const tools: Tool[] = [ required: true, description: `Your Apify API token from https://console.apify.com/settings/integrations.`, }, - { - name: 'find_email', - type: 'boolean', - required: false, - description: `When true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4.`, - }, { name: 'profile_urls', type: 'array', required: true, description: `JSON array of LinkedIn profile URLs to scrape in bulk.`, }, + { + name: 'find_email', + type: 'boolean', + required: false, + description: `When true, attempts email discovery for all profiles. Costs $10 per 1,000 instead of $4.`, + }, ], }, { @@ -42,13 +42,13 @@ export const tools: Tool[] = [ name: 'harvestapi_get_comment_reactions', description: `Retrieve reactions on a specific LinkedIn comment by its URL.`, params: [ + { name: 'url', type: 'string', required: true, description: `URL of the LinkedIn comment.` }, { name: 'page', type: 'integer', required: false, description: `Page number for pagination (default: 1).`, }, - { name: 'url', type: 'string', required: true, description: `URL of the LinkedIn comment.` }, ], }, { @@ -410,18 +410,18 @@ export const tools: Tool[] = [ name: 'harvestapi_search_groups', description: `Search LinkedIn groups by keyword. Returns paginated results with group name, description, and member count.`, params: [ - { - name: 'page', - type: 'integer', - required: false, - description: `Page number for pagination (default: 1).`, - }, { name: 'search', type: 'string', required: true, description: `Keyword to search for groups.`, }, + { + name: 'page', + type: 'integer', + required: false, + description: `Page number for pagination (default: 1).`, + }, ], }, { @@ -734,6 +734,12 @@ export const tools: Tool[] = [ name: 'harvestapi_search_services', description: `Search LinkedIn profiles offering services by name, location, or geo ID. Returns paginated results.`, params: [ + { + name: 'search', + type: 'string', + required: true, + description: `Search profiles by service name or keyword.`, + }, { name: 'geo_id', type: 'string', @@ -752,12 +758,6 @@ export const tools: Tool[] = [ required: false, description: `Page number for pagination (default: 1).`, }, - { - name: 'search', - type: 'string', - required: true, - description: `Search profiles by service name or keyword.`, - }, ], }, ] diff --git a/src/data/agent-connectors/hubspot.ts b/src/data/agent-connectors/hubspot.ts index 7de4fee12..da950f80c 100644 --- a/src/data/agent-connectors/hubspot.ts +++ b/src/data/agent-connectors/hubspot.ts @@ -41,6 +41,12 @@ export const tools: Tool[] = [ 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', @@ -62,12 +68,6 @@ export const tools: Tool[] = [ required: false, description: `Industry type of the company`, }, - { - name: 'name', - type: 'string', - required: true, - description: `Company name (required, serves as primary identifier)`, - }, { name: 'numberofemployees', type: 'number', @@ -100,18 +100,18 @@ 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: 'company', - type: 'string', - required: false, - description: `Company name where the contact works`, - }, { 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', @@ -268,12 +268,6 @@ export const tools: Tool[] = [ required: true, description: `Deal amount/value (required)`, }, - { - name: 'closedate', - type: 'string', - required: false, - description: `Expected close date (YYYY-MM-DD format)`, - }, { name: 'dealname', type: 'string', @@ -286,6 +280,12 @@ export const tools: Tool[] = [ required: true, description: `Current stage of the deal (required)`, }, + { + 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` }, { @@ -302,18 +302,18 @@ export const tools: Tool[] = [ description: `Update an existing deal in HubSpot CRM by deal ID. Allows updating deal properties like name, amount, stage, pipeline, close date, and priority.`, params: [ { name: 'deal_id', type: 'string', required: true, description: `ID of the deal to update` }, - { - name: 'good_deal', - type: 'boolean', - required: false, - description: `Boolean flag indicating if this is a good deal`, - }, { name: 'properties', type: 'object', required: true, description: `Object containing deal properties to update`, }, + { + name: 'good_deal', + type: 'boolean', + required: false, + description: `Boolean flag indicating if this is a good deal`, + }, ], }, { diff --git a/src/data/agent-connectors/jiminny.ts b/src/data/agent-connectors/jiminny.ts index 8cdd7cc3b..34efb7adf 100644 --- a/src/data/agent-connectors/jiminny.ts +++ b/src/data/agent-connectors/jiminny.ts @@ -59,6 +59,24 @@ export const tools: Tool[] = [ name: 'jiminny_activity_upload', description: `Upload a call or meeting recording file to Jiminny for transcription and analysis, returning the new activity ID on success.`, params: [ + { + name: 'hostUserEmail', + type: 'string', + required: true, + description: `The email address of the host user. Must belong to the authenticated team.`, + }, + { + name: 'language', + type: 'string', + required: true, + description: `The language locale of the activity (e.g. en_GB, en_US, fr_FR).`, + }, + { + name: 'title', + type: 'string', + required: true, + description: `The title of the activity (max 250 characters).`, + }, { name: 'accountId', type: 'string', @@ -77,18 +95,6 @@ export const tools: Tool[] = [ required: false, description: `An optional external identifier for this activity (max 191 characters). Must be unique per host user.`, }, - { - name: 'hostUserEmail', - type: 'string', - required: true, - description: `The email address of the host user. Must belong to the authenticated team.`, - }, - { - name: 'language', - type: 'string', - required: true, - description: `The language locale of the activity (e.g. en_GB, en_US, fr_FR).`, - }, { name: 'leadId', type: 'string', @@ -113,12 +119,6 @@ export const tools: Tool[] = [ required: false, description: `Whether to skip the full AI analysis of the uploaded activity.`, }, - { - name: 'title', - type: 'string', - required: true, - description: `The title of the activity (max 250 characters).`, - }, ], }, { @@ -149,18 +149,6 @@ export const tools: Tool[] = [ name: 'jiminny_coaching_feedback_list', description: `Retrieve bulk coaching feedback records within a required date range, optionally filtered by coach or coachee, returning scores, activity IDs, and timestamps.`, params: [ - { - name: 'coachId', - type: 'string', - required: false, - description: `Optional UUID of the coach (manager) to filter coaching feedback by.`, - }, - { - name: 'coacheeId', - type: 'string', - required: false, - description: `Optional UUID of the coachee (sales rep) to filter coaching feedback by.`, - }, { name: 'fromDate', type: 'string', @@ -173,6 +161,18 @@ export const tools: Tool[] = [ required: true, description: `Filter coaching feedback records created before this UTC date-time (e.g. 2021-11-01 00:00:00). Cannot be a future date.`, }, + { + name: 'coacheeId', + type: 'string', + required: false, + description: `Optional UUID of the coachee (sales rep) to filter coaching feedback by.`, + }, + { + name: 'coachId', + type: 'string', + required: false, + description: `Optional UUID of the coach (manager) to filter coaching feedback by.`, + }, ], }, { @@ -295,12 +295,6 @@ export const tools: Tool[] = [ name: 'jiminny_webhook_create', description: `Create a webhook subscription that sends event payloads to a destination URL when a specified trigger occurs in Jiminny.`, params: [ - { - name: 'external_id', - type: 'string', - required: false, - description: `An optional external identifier for the webhook (max 191 characters).`, - }, { name: 'trigger', type: 'string', @@ -313,6 +307,12 @@ export const tools: Tool[] = [ required: true, description: `The destination URL to receive the webhook payload (max 191 characters).`, }, + { + name: 'external_id', + type: 'string', + required: false, + description: `An optional external identifier for the webhook (max 191 characters).`, + }, ], }, { diff --git a/src/data/agent-connectors/linear.ts b/src/data/agent-connectors/linear.ts index 6586f0b29..cf46e3021 100644 --- a/src/data/agent-connectors/linear.ts +++ b/src/data/agent-connectors/linear.ts @@ -23,6 +23,13 @@ export const tools: Tool[] = [ name: 'linear_issue_create', description: `Create a new issue in Linear using the issueCreate mutation. Requires a team ID and title at minimum.`, params: [ + { + name: 'teamId', + type: 'string', + required: true, + description: `ID of the team to create the issue in`, + }, + { name: 'title', type: 'string', required: true, description: `Title of the issue` }, { name: 'assigneeId', type: 'string', @@ -65,19 +72,13 @@ export const tools: Tool[] = [ required: false, description: `ID of the workflow state to set`, }, - { - name: 'teamId', - type: 'string', - required: true, - description: `ID of the team to create the issue in`, - }, - { name: 'title', type: 'string', required: true, description: `Title of the issue` }, ], }, { name: 'linear_issue_update', description: `Update an existing issue in Linear. You can update title, description, priority, state, and assignee.`, params: [ + { name: 'issueId', type: 'string', required: true, description: `ID of the issue to update` }, { name: 'assigneeId', type: 'string', @@ -90,7 +91,6 @@ export const tools: Tool[] = [ required: false, description: `New description for the issue`, }, - { name: 'issueId', type: 'string', required: true, description: `ID of the issue to update` }, { name: 'priority', type: 'string', diff --git a/src/data/agent-connectors/linkedin.ts b/src/data/agent-connectors/linkedin.ts index 1869762ea..02737f133 100644 --- a/src/data/agent-connectors/linkedin.ts +++ b/src/data/agent-connectors/linkedin.ts @@ -539,18 +539,18 @@ export const tools: Tool[] = [ name: 'linkedin_member_search', description: `Search LinkedIn members by keyword for at-mention typeahead (requires Marketing API access).`, params: [ - { - name: 'count', - type: 'integer', - required: false, - description: `Number of results to return.`, - }, { name: 'keywords', type: 'string', required: true, description: `Keywords to search for members.`, }, + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return.`, + }, ], }, { @@ -665,18 +665,18 @@ export const tools: Tool[] = [ name: 'linkedin_organization_search', description: `Search LinkedIn organizations by keyword using the company search API.`, params: [ - { - name: 'count', - type: 'integer', - required: false, - description: `Number of results to return.`, - }, { name: 'keywords', type: 'string', required: true, description: `Keywords to search for organizations.`, }, + { + name: 'count', + type: 'integer', + required: false, + description: `Number of results to return.`, + }, ], }, { @@ -719,6 +719,12 @@ export const tools: Tool[] = [ name: 'linkedin_post_comments_list', description: `List comments on a LinkedIn UGC post.`, params: [ + { + name: 'ugc_post_urn', + type: 'string', + required: true, + description: `URL-encoded URN of the UGC post to retrieve comments for, e.g. urn%3Ali%3AugcPost%3A{id}.`, + }, { name: 'count', type: 'integer', @@ -731,12 +737,6 @@ export const tools: Tool[] = [ required: false, description: `Pagination start index (0-based offset).`, }, - { - name: 'ugc_post_urn', - type: 'string', - required: true, - description: `URL-encoded URN of the UGC post to retrieve comments for, e.g. urn%3Ali%3AugcPost%3A{id}.`, - }, ], }, { @@ -880,18 +880,18 @@ export const tools: Tool[] = [ name: 'linkedin_reactions_list', description: `List all reactions on a LinkedIn post or entity.`, params: [ - { - name: 'count', - type: 'integer', - required: false, - description: `Number of reactions to return per page.`, - }, { name: 'entity_urn', type: 'string', required: true, description: `The URN of the post or entity to list reactions for.`, }, + { + name: 'count', + type: 'integer', + required: false, + description: `Number of reactions to return per page.`, + }, { name: 'start', type: 'integer', required: false, description: `Offset for pagination.` }, ], }, diff --git a/src/data/agent-connectors/notion.ts b/src/data/agent-connectors/notion.ts index e07416612..60b320695 100644 --- a/src/data/agent-connectors/notion.ts +++ b/src/data/agent-connectors/notion.ts @@ -23,12 +23,6 @@ export const tools: Tool[] = [ required: true, description: `The ID of the block to update`, }, - { - name: 'language', - type: 'string', - required: false, - description: `Programming language for code blocks`, - }, { name: 'text', type: 'string', @@ -41,6 +35,12 @@ export const tools: Tool[] = [ required: true, description: `The block type (must match the existing block type)`, }, + { + name: 'language', + type: 'string', + required: false, + description: `Programming language for code blocks`, + }, ], }, { @@ -204,6 +204,18 @@ export const tools: Tool[] = [ name: 'notion_data_source_insert_row', description: `Create a new row (page) in a Notion data source using the 2025-09-03 API. Required for merged, synced, or multi-source databases — these require parent.data_source_id instead of parent.database_id which the older notion_database_insert_row uses. Provide the data_source_id from notion_data_source_fetch (data_sources[].id) and a properties object mapping column names to Notion property value shapes. Optionally attach child blocks (page content), an icon, or a cover image. LLM guidance: step 1 — call notion_data_source_fetch to get the data_source_id; step 2 — build the properties object using exact column names from the schema (use 'title' key for title-type fields); step 3 — call this tool.`, params: [ + { + name: 'data_source_id', + type: 'string', + required: true, + description: `The ID of the data source to insert a row into. Retrieve from notion_database_fetch response under data_sources[].id.`, + }, + { + name: 'properties', + type: 'object', + required: true, + description: `Object mapping column names (or property ids) to property values. Example: {"title": {"title": [{"text": {"content": "Task A"}}]}, "Status": {"select": {"name": "Todo"}}}`, + }, { name: 'child_blocks', type: 'array', @@ -216,24 +228,12 @@ export const tools: Tool[] = [ required: false, description: `Optional page cover object. Example: {"type":"external","external":{"url":"https://example.com/cover.jpg"}}`, }, - { - name: 'data_source_id', - type: 'string', - required: true, - description: `The ID of the data source to insert a row into. Retrieve from notion_database_fetch response under data_sources[].id.`, - }, { name: 'icon', type: 'object', required: false, description: `Optional page icon object. Example: {"type":"emoji","emoji":"📝"}`, }, - { - name: 'properties', - type: 'object', - required: true, - description: `Object mapping column names (or property ids) to property values. Example: {"title": {"title": [{"text": {"content": "Task A"}}]}, "Status": {"select": {"name": "Todo"}}}`, - }, ], }, { @@ -288,18 +288,18 @@ export const tools: Tool[] = [ required: true, description: `Database schema object defining properties (columns). Example: {"Name": {"title": {}}, "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Doing"}, {"name": "Done"}]}}}`, }, - { - name: 'schema_version', - type: 'string', - required: false, - description: `Internal override for schema version.`, - }, { name: 'title', type: 'array', required: true, description: `Database title as a Notion rich_text array.`, }, + { + name: 'schema_version', + type: 'string', + required: false, + description: `Internal override for schema version.`, + }, { name: 'tool_version', type: 'string', @@ -336,36 +336,12 @@ LLM guidance: - \`cover\` example (external): {"type":"external","external":{"url":"https://example.com/image.jpg"}} - Runtime note: the executor/host should synthesize \`parent = {"database_id": database_id}\` before sending to Notion.`, params: [ - { - name: '_parent', - type: 'object', - required: false, - description: `Computed by host: \`{ "database_id": "" }\`. Do not supply manually.`, - }, - { - name: 'child_blocks', - type: 'array', - required: false, - description: `Optional array of Notion blocks to append as page content (paragraph, heading, to_do, etc.).`, - }, - { - name: 'cover', - type: 'object', - required: false, - description: `Optional page cover object. Example external: {"type":"external","external":{"url":"https://example.com/cover.jpg"}}.`, - }, { name: 'database_id', type: 'string', required: true, description: `Target database ID (hyphenated UUID).`, }, - { - name: 'icon', - type: 'object', - required: false, - description: `Optional page icon object. Examples: {"type":"emoji","emoji":"📝"} or {"type":"external","external":{"url":"https://..."}}.`, - }, { name: 'properties', type: 'object', @@ -389,6 +365,30 @@ Example: "Due": { "date": { "start": "2025-09-01" } } }`, }, + { + name: '_parent', + type: 'object', + required: false, + description: `Computed by host: \`{ "database_id": "" }\`. Do not supply manually.`, + }, + { + name: 'child_blocks', + type: 'array', + required: false, + description: `Optional array of Notion blocks to append as page content (paragraph, heading, to_do, etc.).`, + }, + { + name: 'cover', + type: 'object', + required: false, + description: `Optional page cover object. Example external: {"type":"external","external":{"url":"https://example.com/cover.jpg"}}.`, + }, + { + name: 'icon', + type: 'object', + required: false, + description: `Optional page icon object. Examples: {"type":"emoji","emoji":"📝"} or {"type":"external","external":{"url":"https://..."}}.`, + }, { name: 'schema_version', type: 'string', @@ -673,6 +673,12 @@ Example (database row): name: 'notion_page_update', description: `Update a Notion page's properties, archive/unarchive it, or change its icon and cover.`, params: [ + { + name: 'page_id', + type: 'string', + required: true, + description: `The ID of the Notion page to update`, + }, { name: 'archived', type: 'boolean', @@ -681,12 +687,6 @@ Example (database row): }, { name: 'cover', type: 'object', required: false, description: `Page cover image to set` }, { name: 'icon', type: 'object', required: false, description: `Page icon to set` }, - { - name: 'page_id', - type: 'string', - required: true, - description: `The ID of the Notion page to update`, - }, { name: 'properties', type: 'object', diff --git a/src/data/agent-connectors/outlook.ts b/src/data/agent-connectors/outlook.ts index fb4f67de9..a714737ec 100644 --- a/src/data/agent-connectors/outlook.ts +++ b/src/data/agent-connectors/outlook.ts @@ -5,6 +5,11 @@ export const tools: Tool[] = [ name: 'outlook_create_calendar_event', description: `Create a new calendar event in the user's Outlook calendar. Supports attendees, recurrence, reminders, online meetings, multiple locations, and event properties.`, params: [ + { name: 'end_datetime', type: 'string', required: true, description: `No description.` }, + { name: 'end_timezone', type: 'string', required: true, description: `No description.` }, + { name: 'start_datetime', type: 'string', required: true, description: `No description.` }, + { name: 'start_timezone', type: 'string', required: true, description: `No description.` }, + { name: 'subject', type: 'string', required: true, description: `No description.` }, { name: 'attendees_optional', type: 'string', @@ -25,8 +30,6 @@ export const tools: Tool[] = [ }, { name: 'body_content', type: 'string', required: false, description: `No description.` }, { name: 'body_contentType', type: 'string', required: false, description: `No description.` }, - { name: 'end_datetime', type: 'string', required: true, description: `No description.` }, - { name: 'end_timezone', type: 'string', required: true, description: `No description.` }, { name: 'hideAttendees', type: 'boolean', @@ -120,15 +123,19 @@ export const tools: Tool[] = [ description: `Event sensitivity/privacy level`, }, { name: 'showAs', type: 'string', required: false, description: `Free/busy status` }, - { name: 'start_datetime', type: 'string', required: true, description: `No description.` }, - { name: 'start_timezone', type: 'string', required: true, description: `No description.` }, - { name: 'subject', type: 'string', required: true, description: `No description.` }, ], }, { name: 'outlook_create_contact', description: `Create a new contact in the user's mailbox with name, email addresses, and phone numbers.`, params: [ + { + name: 'givenName', + type: 'string', + required: true, + description: `First name of the contact`, + }, + { name: 'surname', type: 'string', required: true, description: `Last name of the contact` }, { name: 'businessPhones', type: 'array', @@ -142,15 +149,8 @@ export const tools: Tool[] = [ required: false, description: `Array of email address objects with 'address' and optional 'name' fields`, }, - { - name: 'givenName', - type: 'string', - required: true, - description: `First name of the contact`, - }, { name: 'jobTitle', type: 'string', required: false, description: `Job title` }, { name: 'mobilePhone', type: 'string', required: false, description: `Mobile phone number` }, - { name: 'surname', type: 'string', required: true, description: `Last name of the contact` }, ], }, { @@ -383,6 +383,12 @@ export const tools: Tool[] = [ name: 'outlook_search_messages', description: `Search messages by keywords across subject, body, sender, and other fields. Returns matching messages with support for pagination.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query string (searches across subject, body, from, to)`, + }, { name: '$select', type: 'string', @@ -401,25 +407,26 @@ export const tools: Tool[] = [ required: false, description: `Number of messages to return (1-1000, default: 10)`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Search query string (searches across subject, body, from, to)`, - }, ], }, { name: 'outlook_send_message', description: `Send an email message using Microsoft Graph API. The message is saved in the Sent Items folder by default.`, params: [ + { name: 'body', type: 'string', required: true, description: `Body content of the email` }, + { name: 'subject', type: 'string', required: true, description: `Subject line of the email` }, + { + name: 'toRecipients', + type: 'array', + required: true, + description: `Array of email addresses to send to`, + }, { name: 'bccRecipients', type: 'array', required: false, description: `Array of email addresses to BCC`, }, - { name: 'body', type: 'string', required: true, description: `Body content of the email` }, { name: 'bodyType', type: 'string', @@ -438,13 +445,6 @@ export const tools: Tool[] = [ required: false, description: `Save the message in Sent Items folder (default: true)`, }, - { name: 'subject', type: 'string', required: true, description: `Subject line of the email` }, - { - name: 'toRecipients', - type: 'array', - required: true, - description: `Array of email addresses to send to`, - }, ], }, { @@ -505,6 +505,13 @@ export const tools: Tool[] = [ name: 'outlook_todo_tasks_create', description: `Create a new task in a Microsoft To Do task list with optional body, due date, importance, and reminder.`, params: [ + { + name: 'list_id', + type: 'string', + required: true, + description: `The ID of the task list to add the task to.`, + }, + { name: 'title', type: 'string', required: true, description: `The title of the task.` }, { name: 'body', type: 'string', @@ -535,12 +542,6 @@ export const tools: Tool[] = [ required: false, description: `The importance of the task: low, normal, or high.`, }, - { - name: 'list_id', - type: 'string', - required: true, - description: `The ID of the task list to add the task to.`, - }, { name: 'reminder_date_time', type: 'string', @@ -559,7 +560,6 @@ export const tools: Tool[] = [ required: false, description: `The status of the task: notStarted, inProgress, completed, waitingOnOthers, or deferred.`, }, - { name: 'title', type: 'string', required: true, description: `The title of the task.` }, ], }, { @@ -587,6 +587,7 @@ export const tools: Tool[] = [ name: 'outlook_todo_tasks_list', description: `List all tasks in a Microsoft To Do task list with optional filtering and pagination.`, params: [ + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, { name: '$filter', type: 'string', @@ -611,13 +612,19 @@ export const tools: Tool[] = [ required: false, description: `Number of tasks to return (default: 10).`, }, - { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, ], }, { name: 'outlook_todo_tasks_update', description: `Update a task in a Microsoft To Do task list. Only provided fields are changed.`, params: [ + { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, + { + name: 'task_id', + type: 'string', + required: true, + description: `The ID of the task to update.`, + }, { name: 'body', type: 'string', @@ -648,19 +655,12 @@ export const tools: Tool[] = [ required: false, description: `The importance: low, normal, or high.`, }, - { name: 'list_id', type: 'string', required: true, description: `The ID of the task list.` }, { name: 'status', type: 'string', required: false, description: `The status: notStarted, inProgress, completed, waitingOnOthers, or deferred.`, }, - { - name: 'task_id', - type: 'string', - required: true, - description: `The ID of the task to update.`, - }, { name: 'title', type: 'string', required: false, description: `New title for the task.` }, ], }, @@ -668,6 +668,12 @@ export const tools: Tool[] = [ name: 'outlook_update_calendar_event', description: `Update an existing Outlook calendar event. Only provided fields will be updated. Supports time, attendees, location, reminders, online meetings, recurrence, and event properties.`, params: [ + { + name: 'event_id', + type: 'string', + required: true, + description: `The ID of the calendar event to update`, + }, { name: 'attendees_optional', type: 'string', @@ -716,12 +722,6 @@ export const tools: Tool[] = [ required: false, description: `Timezone for end time`, }, - { - name: 'event_id', - type: 'string', - required: true, - description: `The ID of the calendar event to update`, - }, { name: 'hideAttendees', type: 'boolean', diff --git a/src/data/agent-connectors/outreach.ts b/src/data/agent-connectors/outreach.ts index 6b00f6171..20d8b91be 100644 --- a/src/data/agent-connectors/outreach.ts +++ b/src/data/agent-connectors/outreach.ts @@ -5,6 +5,12 @@ export const tools: Tool[] = [ name: 'outreach_accounts_create', description: `Create a new account (company) in Outreach.`, params: [ + { + name: 'name', + type: 'string', + required: true, + description: `Name of the account (company)`, + }, { name: 'description', type: 'string', @@ -30,12 +36,6 @@ export const tools: Tool[] = [ required: false, description: `Location/city of the account`, }, - { - name: 'name', - type: 'string', - required: true, - description: `Name of the account (company)`, - }, { name: 'number_of_employees', type: 'integer', @@ -347,18 +347,6 @@ export const tools: Tool[] = [ name: 'outreach_opportunities_create', description: `Create a new opportunity in Outreach to track sales deals.`, params: [ - { - name: 'account_id', - type: 'integer', - required: false, - description: `ID of the account associated with this opportunity`, - }, - { - name: 'amount', - type: 'number', - required: false, - description: `Monetary value of the opportunity`, - }, { name: 'close_date', type: 'string', @@ -371,6 +359,18 @@ export const tools: Tool[] = [ required: true, description: `Name or title of the opportunity`, }, + { + name: 'account_id', + type: 'integer', + required: false, + description: `ID of the account associated with this opportunity`, + }, + { + name: 'amount', + type: 'number', + required: false, + description: `Monetary value of the opportunity`, + }, { name: 'owner_id', type: 'integer', @@ -461,6 +461,12 @@ export const tools: Tool[] = [ name: 'outreach_opportunities_update', description: `Update an existing opportunity in Outreach. Only provided fields will be changed.`, params: [ + { + name: 'opportunity_id', + type: 'integer', + required: true, + description: `The unique identifier of the opportunity to update`, + }, { name: 'amount', type: 'number', @@ -479,12 +485,6 @@ export const tools: Tool[] = [ required: false, description: `Updated name of the opportunity`, }, - { - name: 'opportunity_id', - type: 'integer', - required: true, - description: `The unique identifier of the opportunity to update`, - }, { name: 'owner_id', type: 'integer', required: false, description: `Updated owner user ID` }, { name: 'probability', @@ -667,6 +667,12 @@ export const tools: Tool[] = [ name: 'outreach_prospects_update', description: `Update an existing prospect in Outreach. Only provided fields will be changed.`, params: [ + { + name: 'prospect_id', + type: 'integer', + required: true, + description: `The unique identifier of the prospect to update`, + }, { name: 'account_id', type: 'integer', @@ -733,12 +739,6 @@ export const tools: Tool[] = [ required: false, description: `Array of phone numbers for the prospect`, }, - { - name: 'prospect_id', - type: 'integer', - required: true, - description: `The unique identifier of the prospect to update`, - }, { name: 'tags', type: 'array', @@ -872,13 +872,13 @@ export const tools: Tool[] = [ name: 'outreach_sequences_create', description: `Create a new sequence in Outreach for automated sales engagement.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the sequence` }, { name: 'description', type: 'string', required: false, description: `Description of the sequence`, }, - { name: 'name', type: 'string', required: true, description: `Name of the sequence` }, { name: 'owner_id', type: 'integer', @@ -963,6 +963,12 @@ export const tools: Tool[] = [ name: 'outreach_sequences_update', description: `Update an existing sequence in Outreach. Use this to rename a sequence, change its description, or enable/disable it.`, params: [ + { + name: 'sequence_id', + type: 'integer', + required: true, + description: `The unique identifier of the sequence to update`, + }, { name: 'description', type: 'string', @@ -981,12 +987,6 @@ export const tools: Tool[] = [ required: false, description: `Updated name of the sequence`, }, - { - name: 'sequence_id', - type: 'integer', - required: true, - description: `The unique identifier of the sequence to update`, - }, { name: 'tags', type: 'array', @@ -1048,18 +1048,18 @@ export const tools: Tool[] = [ name: 'outreach_tasks_complete', description: `Mark an existing task as complete in Outreach. Only works for action_item and in_person tasks — call and email tasks cannot be completed this way. Use this instead of outreach_tasks_update to complete a task.`, params: [ - { - name: 'completion_note', - type: 'string', - required: false, - description: `Optional note to record when marking the task complete`, - }, { name: 'task_id', type: 'integer', required: true, description: `The unique identifier of the task to mark as complete`, }, + { + name: 'completion_note', + type: 'string', + required: false, + description: `Optional note to record when marking the task complete`, + }, ], }, { @@ -1072,18 +1072,6 @@ export const tools: Tool[] = [ required: true, description: `Type of action for the task. Options: action_item, call, email, in_person`, }, - { - name: 'due_at', - type: 'string', - required: false, - description: `Due date/time for the task (ISO 8601 format)`, - }, - { - name: 'note', - type: 'string', - required: false, - description: `Note or description for the task`, - }, { name: 'owner_id', type: 'integer', @@ -1096,6 +1084,18 @@ export const tools: Tool[] = [ required: true, description: `ID of the prospect associated with this task (subject). Required — must provide either prospect_id or account_id.`, }, + { + name: 'due_at', + type: 'string', + required: false, + description: `Due date/time for the task (ISO 8601 format)`, + }, + { + name: 'note', + type: 'string', + required: false, + description: `Note or description for the task`, + }, ], }, { @@ -1168,6 +1168,12 @@ export const tools: Tool[] = [ name: 'outreach_tasks_update', description: `Update an existing task in Outreach. Supports changing action, note, and due date. To mark a task complete, use the outreach_tasks_complete tool instead.`, params: [ + { + name: 'task_id', + type: 'integer', + required: true, + description: `The unique identifier of the task to update`, + }, { name: 'action', type: 'string', @@ -1186,25 +1192,19 @@ export const tools: Tool[] = [ required: false, description: `Updated note or description for the task`, }, - { - name: 'task_id', - type: 'integer', - required: true, - description: `The unique identifier of the task to update`, - }, ], }, { name: 'outreach_templates_create', description: `Create a new email template in Outreach. Templates can be used in sequences and for manual email sends.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the template` }, { name: 'body_html', type: 'string', required: false, description: `HTML body content of the template`, }, - { name: 'name', type: 'string', required: true, description: `Name of the template` }, { name: 'owner_id', type: 'integer', @@ -1283,6 +1283,12 @@ export const tools: Tool[] = [ name: 'outreach_templates_update', description: `Update an existing email template in Outreach. Only provided fields will be changed.`, params: [ + { + name: 'template_id', + type: 'integer', + required: true, + description: `The unique identifier of the template to update`, + }, { name: 'body_html', type: 'string', @@ -1302,12 +1308,6 @@ export const tools: Tool[] = [ description: `Updated email subject line`, }, { name: 'tags', type: 'array', required: false, description: `Updated array of tags` }, - { - name: 'template_id', - type: 'integer', - required: true, - description: `The unique identifier of the template to update`, - }, ], }, { @@ -1356,6 +1356,12 @@ export const tools: Tool[] = [ name: 'outreach_webhooks_create', description: `Create a new webhook in Outreach to receive event notifications at a specified URL. Outreach will POST event payloads to the provided URL when subscribed events occur.`, params: [ + { + name: 'url', + type: 'string', + required: true, + description: `The HTTPS URL to receive webhook event payloads`, + }, { name: 'action', type: 'string', @@ -1374,12 +1380,6 @@ export const tools: Tool[] = [ required: false, description: `A secret string used to sign webhook payloads for verification`, }, - { - name: 'url', - type: 'string', - required: true, - description: `The HTTPS URL to receive webhook event payloads`, - }, ], }, { diff --git a/src/data/agent-connectors/pagerduty.ts b/src/data/agent-connectors/pagerduty.ts index 11280834e..5f5d86b86 100644 --- a/src/data/agent-connectors/pagerduty.ts +++ b/src/data/agent-connectors/pagerduty.ts @@ -54,16 +54,22 @@ export const tools: Tool[] = [ description: `Create a new escalation policy in PagerDuty. Escalation policies define who gets notified and in what order when an incident is triggered.`, params: [ { - name: 'description', + name: 'name', type: 'string', - required: false, - description: `A description of the escalation policy.`, + required: true, + description: `The name of the escalation policy.`, }, { - name: 'name', + name: 'target_id', type: 'string', required: true, - description: `The name of the escalation policy.`, + description: `The ID of the user or schedule to notify in the first escalation rule.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `A description of the escalation policy.`, }, { name: 'num_loops', @@ -83,12 +89,6 @@ export const tools: Tool[] = [ required: false, description: `The number of minutes before an unacknowledged incident escalates to the next rule.`, }, - { - name: 'target_id', - type: 'string', - required: true, - description: `The ID of the user or schedule to notify in the first escalation rule.`, - }, { name: 'target_type', type: 'string', @@ -131,18 +131,18 @@ export const tools: Tool[] = [ name: 'pagerduty_escalation_policy_update', description: `Update an existing PagerDuty escalation policy's name, description, or loop settings.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `Updated description of the escalation policy.`, - }, { name: 'id', type: 'string', required: true, description: `The ID of the escalation policy to update.`, }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the escalation policy.`, + }, { name: 'name', type: 'string', @@ -168,46 +168,46 @@ export const tools: Tool[] = [ description: `Create a new incident in PagerDuty. Requires a title, service ID, and the email of the user creating the incident.`, params: [ { - name: 'body_details', + name: 'from_email', type: 'string', - required: false, - description: `Additional details about the incident body (plain text).`, + required: true, + description: `The email address of the user creating the incident. Required by PagerDuty.`, }, { - name: 'escalation_policy_id', + name: 'service_id', type: 'string', - required: false, - description: `The ID of the escalation policy to assign to the incident.`, + required: true, + description: `The ID of the service the incident belongs to.`, }, { - name: 'from_email', + name: 'title', type: 'string', required: true, - description: `The email address of the user creating the incident. Required by PagerDuty.`, + description: `A brief description of the incident.`, }, { - name: 'incident_key', + name: 'body_details', type: 'string', required: false, - description: `A string that identifies the incident. Used for deduplication.`, + description: `Additional details about the incident body (plain text).`, }, { - name: 'priority_id', + name: 'escalation_policy_id', type: 'string', required: false, - description: `The ID of the priority to assign to the incident.`, + description: `The ID of the escalation policy to assign to the incident.`, }, { - name: 'service_id', + name: 'incident_key', type: 'string', - required: true, - description: `The ID of the service the incident belongs to.`, + required: false, + description: `A string that identifies the incident. Used for deduplication.`, }, { - name: 'title', + name: 'priority_id', type: 'string', - required: true, - description: `A brief description of the incident.`, + required: false, + description: `The ID of the priority to assign to the incident.`, }, { name: 'urgency', @@ -281,18 +281,6 @@ export const tools: Tool[] = [ name: 'pagerduty_incident_update', description: `Update an existing PagerDuty incident. Can change status, urgency, title, priority, escalation policy, or reassign it.`, params: [ - { - name: 'assignee_id', - type: 'string', - required: false, - description: `The ID of the user to assign the incident to.`, - }, - { - name: 'escalation_policy_id', - type: 'string', - required: false, - description: `The ID of the escalation policy to assign to the incident.`, - }, { name: 'from_email', type: 'string', @@ -305,6 +293,18 @@ export const tools: Tool[] = [ required: true, description: `The ID of the incident to update.`, }, + { + name: 'assignee_id', + type: 'string', + required: false, + description: `The ID of the user to assign the incident to.`, + }, + { + name: 'escalation_policy_id', + type: 'string', + required: false, + description: `The ID of the escalation policy to assign to the incident.`, + }, { name: 'priority_id', type: 'string', @@ -497,12 +497,6 @@ export const tools: Tool[] = [ name: 'pagerduty_maintenance_window_create', description: `Create a new maintenance window in PagerDuty. During a maintenance window, no incidents will be created for the associated services.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `A description of the maintenance window.`, - }, { name: 'end_time', type: 'string', @@ -527,6 +521,12 @@ export const tools: Tool[] = [ required: true, description: `The start time of the maintenance window (ISO 8601 format).`, }, + { + name: 'description', + type: 'string', + required: false, + description: `A description of the maintenance window.`, + }, ], }, { @@ -563,6 +563,12 @@ export const tools: Tool[] = [ name: 'pagerduty_maintenance_window_update', description: `Update an existing PagerDuty maintenance window's description, start time, or end time.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the maintenance window to update.`, + }, { name: 'description', type: 'string', @@ -575,12 +581,6 @@ export const tools: Tool[] = [ required: false, description: `Updated end time of the maintenance window (ISO 8601 format).`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The ID of the maintenance window to update.`, - }, { name: 'start_time', type: 'string', @@ -641,6 +641,18 @@ export const tools: Tool[] = [ name: 'pagerduty_notifications_list', description: `List notifications sent for incidents in a given time range. Notifications are messages sent to users when incidents are triggered, acknowledged, or resolved.`, params: [ + { + name: 'since', + type: 'string', + required: true, + description: `The start of the date range (ISO 8601). Required.`, + }, + { + name: 'until', + type: 'string', + required: true, + description: `The end of the date range (ISO 8601). Required.`, + }, { name: 'filter', type: 'string', @@ -665,24 +677,12 @@ export const tools: Tool[] = [ required: false, description: `Offset to start pagination search results.`, }, - { - name: 'since', - type: 'string', - required: true, - description: `The start of the date range (ISO 8601). Required.`, - }, { name: 'time_zone', type: 'string', required: false, description: `Time zone for the notification data (IANA format).`, }, - { - name: 'until', - type: 'string', - required: true, - description: `The end of the date range (ISO 8601). Required.`, - }, ], }, { @@ -760,18 +760,6 @@ export const tools: Tool[] = [ name: 'pagerduty_schedule_create', description: `Create a new on-call schedule in PagerDuty with a single layer. Schedules determine who is on call at any given time.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `A description of the schedule.`, - }, - { - name: 'layer_name', - type: 'string', - required: false, - description: `The name of the first schedule layer.`, - }, { name: 'layer_start', type: 'string', @@ -779,12 +767,6 @@ export const tools: Tool[] = [ description: `The start time of the schedule layer (ISO 8601 format).`, }, { name: 'name', type: 'string', required: true, description: `The name of the schedule.` }, - { - name: 'rotation_turn_length_seconds', - type: 'integer', - required: false, - description: `The duration of each on-call rotation turn in seconds (e.g., 86400 = 1 day, 604800 = 1 week).`, - }, { name: 'rotation_virtual_start', type: 'string', @@ -803,6 +785,24 @@ export const tools: Tool[] = [ required: true, description: `Comma-separated list of user IDs to include in the rotation.`, }, + { + name: 'description', + type: 'string', + required: false, + description: `A description of the schedule.`, + }, + { + name: 'layer_name', + type: 'string', + required: false, + description: `The name of the first schedule layer.`, + }, + { + name: 'rotation_turn_length_seconds', + type: 'integer', + required: false, + description: `The duration of each on-call rotation turn in seconds (e.g., 86400 = 1 day, 604800 = 1 week).`, + }, ], }, { @@ -851,18 +851,18 @@ export const tools: Tool[] = [ name: 'pagerduty_schedule_update', description: `Update an existing PagerDuty on-call schedule's name, description, or time zone.`, params: [ - { - name: 'description', - type: 'string', - required: false, - description: `Updated description of the schedule.`, - }, { name: 'id', type: 'string', required: true, description: `The ID of the schedule to update.`, }, + { + name: 'description', + type: 'string', + required: false, + description: `Updated description of the schedule.`, + }, { name: 'name', type: 'string', @@ -911,6 +911,13 @@ export const tools: Tool[] = [ name: 'pagerduty_service_create', description: `Create a new service in PagerDuty. A service represents something you monitor and manage incidents for.`, params: [ + { + name: 'escalation_policy_id', + type: 'string', + required: true, + description: `The ID of the escalation policy to assign to this service.`, + }, + { name: 'name', type: 'string', required: true, description: `The name of the service.` }, { name: 'acknowledgement_timeout', type: 'integer', @@ -935,13 +942,6 @@ export const tools: Tool[] = [ required: false, description: `The user-provided description of the service.`, }, - { - name: 'escalation_policy_id', - type: 'string', - required: true, - description: `The ID of the escalation policy to assign to this service.`, - }, - { name: 'name', type: 'string', required: true, description: `The name of the service.` }, ], }, { @@ -978,6 +978,12 @@ export const tools: Tool[] = [ name: 'pagerduty_service_update', description: `Update an existing PagerDuty service. Can change name, description, escalation policy, timeouts, and alert creation settings.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `The ID of the service to update.`, + }, { name: 'acknowledgement_timeout', type: 'integer', @@ -1008,12 +1014,6 @@ export const tools: Tool[] = [ required: false, description: `The ID of the escalation policy to assign to this service.`, }, - { - name: 'id', - type: 'string', - required: true, - description: `The ID of the service to update.`, - }, { name: 'name', type: 'string', required: false, description: `The name of the service.` }, { name: 'status', @@ -1069,13 +1069,13 @@ export const tools: Tool[] = [ name: 'pagerduty_team_create', description: `Create a new team in PagerDuty. Teams allow grouping of users and services.`, params: [ + { name: 'name', type: 'string', required: true, description: `The name of the team.` }, { name: 'description', type: 'string', required: false, description: `A description of the team.`, }, - { name: 'name', type: 'string', required: true, description: `The name of the team.` }, ], }, { @@ -1101,13 +1101,13 @@ export const tools: Tool[] = [ name: 'pagerduty_team_update', description: `Update an existing PagerDuty team's name or description.`, params: [ + { name: 'id', type: 'string', required: true, description: `The ID of the team to update.` }, { name: 'description', type: 'string', required: false, description: `Updated description of the team.`, }, - { name: 'id', type: 'string', required: true, description: `The ID of the team to update.` }, { name: 'name', type: 'string', @@ -1144,12 +1144,6 @@ export const tools: Tool[] = [ name: 'pagerduty_user_create', description: `Create a new user in PagerDuty. Requires name, email, and the creating user's email in the From header.`, params: [ - { - name: 'color', - type: 'string', - required: false, - description: `The schedule color for the user.`, - }, { name: 'email', type: 'string', required: true, description: `The user's email address.` }, { name: 'from_email', @@ -1158,6 +1152,12 @@ export const tools: Tool[] = [ description: `The email address of the admin creating this user. Required by PagerDuty.`, }, { name: 'name', type: 'string', required: true, description: `The name of the user.` }, + { + name: 'color', + type: 'string', + required: false, + description: `The schedule color for the user.`, + }, { name: 'role', type: 'string', @@ -1201,6 +1201,7 @@ export const tools: Tool[] = [ name: 'pagerduty_user_update', description: `Update an existing PagerDuty user's profile including name, email, role, time zone, and color.`, params: [ + { name: 'id', type: 'string', required: true, description: `The ID of the user to update.` }, { name: 'color', type: 'string', @@ -1213,7 +1214,6 @@ export const tools: Tool[] = [ required: false, description: `The user's updated email address.`, }, - { name: 'id', type: 'string', required: true, description: `The ID of the user to update.` }, { name: 'name', type: 'string', diff --git a/src/data/agent-connectors/phantombuster.ts b/src/data/agent-connectors/phantombuster.ts index 334b50642..8507a4d2c 100644 --- a/src/data/agent-connectors/phantombuster.ts +++ b/src/data/agent-connectors/phantombuster.ts @@ -29,18 +29,18 @@ export const tools: Tool[] = [ name: 'phantombuster_agent_fetch_output', description: `Get the output of the most recent container of an agent. Designed for incremental data retrieval — use fromOutputPos to fetch only new output since the last call.`, params: [ - { - name: 'fromOutputPos', - type: 'number', - required: false, - description: `Start output from this byte position (for incremental fetching).`, - }, { name: 'id', type: 'string', required: true, description: `ID of the agent to fetch output from.`, }, + { + name: 'fromOutputPos', + type: 'number', + required: false, + description: `Start output from this byte position (for incremental fetching).`, + }, { name: 'prevContainerId', type: 'string', @@ -95,12 +95,6 @@ export const tools: Tool[] = [ name: 'phantombuster_agent_launch_soon', description: `Schedule a PhantomBuster agent to launch within a specified number of minutes. Useful for delayed execution without setting up a full recurring schedule.`, params: [ - { - name: 'argument', - type: 'object', - required: false, - description: `Input arguments to pass to the agent for this execution (object or JSON string).`, - }, { name: 'id', type: 'string', required: true, description: `ID of the agent to schedule.` }, { name: 'minutes', @@ -108,6 +102,12 @@ export const tools: Tool[] = [ required: true, description: `Number of minutes from now after which the agent will launch.`, }, + { + name: 'argument', + type: 'object', + required: false, + description: `Input arguments to pass to the agent for this execution (object or JSON string).`, + }, { name: 'saveArgument', type: 'boolean', @@ -378,18 +378,18 @@ export const tools: Tool[] = [ name: 'phantombuster_leads_fetch_by_list', description: `Fetch paginated leads belonging to a specific lead list in PhantomBuster organization storage.`, params: [ - { - name: 'includeTotalCount', - type: 'boolean', - required: false, - description: `Include the total count of leads in the response.`, - }, { name: 'listId', type: 'string', required: true, description: `ID of the lead list to fetch leads from.`, }, + { + name: 'includeTotalCount', + type: 'boolean', + required: false, + description: `Include the total count of leads in the response.`, + }, { name: 'paginationOffset', type: 'integer', @@ -476,18 +476,18 @@ export const tools: Tool[] = [ name: 'phantombuster_org_export_container_usage', description: `Export a CSV file containing container usage metrics for the current PhantomBuster organization. Optionally filter to a specific agent.`, params: [ - { - name: 'agentId', - type: 'string', - required: false, - description: `Filter the export to a specific agent ID.`, - }, { name: 'days', type: 'string', required: true, description: `Number of days of usage data to export. Maximum is ~180 days (6 months).`, }, + { + name: 'agentId', + type: 'string', + required: false, + description: `Filter the export to a specific agent ID.`, + }, ], }, { @@ -551,21 +551,13 @@ export const tools: Tool[] = [ name: 'phantombuster_org_save_crm_contact', description: `Save a new contact to the organization's connected CRM (HubSpot). Requires a CRM integration to be configured in the PhantomBuster organization settings.`, params: [ - { - name: 'company', - type: 'string', - required: false, - description: `Company the contact works at.`, - }, { name: 'crmName', type: 'string', required: true, description: `The CRM to save the contact to.`, }, - { name: 'email', type: 'string', required: false, description: `Contact's email address.` }, { name: 'firstname', type: 'string', required: true, description: `Contact's first name.` }, - { name: 'jobtitle', type: 'string', required: false, description: `Contact's job title.` }, { name: 'lastname', type: 'string', required: true, description: `Contact's last name.` }, { name: 'pb_linkedin_profile_url', @@ -573,6 +565,14 @@ export const tools: Tool[] = [ required: true, description: `LinkedIn profile URL of the contact.`, }, + { + name: 'company', + type: 'string', + required: false, + description: `Company the contact works at.`, + }, + { name: 'email', type: 'string', required: false, description: `Contact's email address.` }, + { name: 'jobtitle', type: 'string', required: false, description: `Contact's job title.` }, { name: 'phone', type: 'string', required: false, description: `Contact's phone number.` }, ], }, @@ -580,13 +580,13 @@ export const tools: Tool[] = [ name: 'phantombuster_script_fetch', description: `Retrieve a specific PhantomBuster script by ID including its manifest, argument schema, output types, and optionally the full source code.`, params: [ + { name: 'id', type: 'string', required: true, description: `ID of the script to fetch.` }, { name: 'branch', type: 'string', required: false, description: `Branch of the script to fetch.`, }, - { name: 'id', type: 'string', required: true, description: `ID of the script to fetch.` }, { name: 'withCode', type: 'boolean', diff --git a/src/data/agent-connectors/pipedrive.ts b/src/data/agent-connectors/pipedrive.ts index 48bef667b..bfd4b0700 100644 --- a/src/data/agent-connectors/pipedrive.ts +++ b/src/data/agent-connectors/pipedrive.ts @@ -59,6 +59,12 @@ export const tools: Tool[] = [ name: 'pipedrive_activity_create', description: `Create a new activity in Pipedrive such as a call, meeting, email, or task. Associate it with a deal, person, or organization.`, params: [ + { + name: 'subject', + type: 'string', + required: true, + description: `Subject/title of the activity.`, + }, { name: 'deal_id', type: 'integer', @@ -101,12 +107,6 @@ export const tools: Tool[] = [ required: false, description: `ID of the person to associate this activity with.`, }, - { - name: 'subject', - type: 'string', - required: true, - description: `Subject/title of the activity.`, - }, { name: 'type', type: 'string', @@ -131,6 +131,12 @@ export const tools: Tool[] = [ name: 'pipedrive_activity_update', description: `Update an existing activity in Pipedrive. Modify subject, type, due date/time, note, completion status, or associations.`, params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the activity to update.`, + }, { name: 'deal_id', type: 'integer', @@ -155,12 +161,6 @@ export const tools: Tool[] = [ required: false, description: `Updated due time in HH:MM format.`, }, - { - name: 'id', - type: 'integer', - required: true, - description: `The ID of the activity to update.`, - }, { name: 'note', type: 'string', @@ -185,6 +185,7 @@ export const tools: Tool[] = [ name: 'pipedrive_deal_create', description: `Create a new deal in Pipedrive with a title, value, currency, pipeline, stage, associated person and organization.`, params: [ + { name: 'title', type: 'string', required: true, description: `Title of the deal.` }, { name: 'currency', type: 'string', @@ -227,7 +228,6 @@ export const tools: Tool[] = [ required: false, description: `ID of the pipeline stage for this deal.`, }, - { name: 'title', type: 'string', required: true, description: `Title of the deal.` }, { name: 'value', type: 'number', @@ -259,6 +259,7 @@ export const tools: Tool[] = [ name: 'pipedrive_deal_update', description: `Update an existing deal in Pipedrive. Modify title, value, status, pipeline stage, associated person, organization, or close date.`, params: [ + { name: 'id', type: 'integer', required: true, description: `The ID of the deal to update.` }, { name: 'currency', type: 'string', @@ -271,7 +272,6 @@ export const tools: Tool[] = [ required: false, description: `Expected close date in YYYY-MM-DD format.`, }, - { name: 'id', type: 'integer', required: true, description: `The ID of the deal to update.` }, { name: 'org_id', type: 'integer', @@ -381,6 +381,12 @@ export const tools: Tool[] = [ name: 'pipedrive_deals_search', description: `Search for deals in Pipedrive by a search term across title and other fields. Supports filtering by person, organization, and status.`, params: [ + { + name: 'term', + type: 'string', + required: true, + description: `Search term to find matching deals. Minimum 2 characters.`, + }, { name: 'cursor', type: 'string', @@ -423,12 +429,6 @@ export const tools: Tool[] = [ required: false, description: `Filter by deal status: open, won, or lost.`, }, - { - name: 'term', - type: 'string', - required: true, - description: `Search term to find matching deals. Minimum 2 characters.`, - }, ], }, { @@ -525,6 +525,7 @@ export const tools: Tool[] = [ name: 'pipedrive_goal_update', description: `Update an existing goal in Pipedrive. Modify title, assignee, target, interval, or duration.`, params: [ + { name: 'id', type: 'string', required: true, description: `The ID of the goal to update.` }, { name: 'assignee_id', type: 'integer', @@ -549,7 +550,6 @@ export const tools: Tool[] = [ required: false, description: `Updated goal start date in YYYY-MM-DD format.`, }, - { name: 'id', type: 'string', required: true, description: `The ID of the goal to update.` }, { name: 'interval', type: 'string', @@ -607,6 +607,7 @@ export const tools: Tool[] = [ name: 'pipedrive_lead_create', description: `Create a new lead in Pipedrive with a title and optional associations to a person or organization.`, params: [ + { name: 'title', type: 'string', required: true, description: `Title of the lead.` }, { name: 'organization_id', type: 'integer', @@ -625,7 +626,6 @@ export const tools: Tool[] = [ required: false, description: `ID of the person to associate this lead with.`, }, - { name: 'title', type: 'string', required: true, description: `Title of the lead.` }, ], }, { @@ -725,6 +725,12 @@ export const tools: Tool[] = [ name: 'pipedrive_leads_search', description: `Search for leads in Pipedrive by title, notes, or custom fields.`, params: [ + { + name: 'term', + type: 'string', + required: true, + description: `Search term. Minimum 2 characters.`, + }, { name: 'cursor', type: 'string', @@ -761,12 +767,6 @@ export const tools: Tool[] = [ required: false, description: `Filter results by person ID.`, }, - { - name: 'term', - type: 'string', - required: true, - description: `Search term. Minimum 2 characters.`, - }, ], }, { @@ -862,13 +862,13 @@ export const tools: Tool[] = [ name: 'pipedrive_organization_create', description: `Create a new organization (company) in Pipedrive with a name, address, and optional owner.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the organization.` }, { name: 'address', type: 'string', required: false, description: `Physical address of the organization.`, }, - { name: 'name', type: 'string', required: true, description: `Name of the organization.` }, { name: 'owner_id', type: 'integer', @@ -905,18 +905,18 @@ export const tools: Tool[] = [ name: 'pipedrive_organization_update', description: `Update an existing organization in Pipedrive. Modify name, address, or owner.`, params: [ - { - name: 'address', - type: 'string', - required: false, - description: `Updated physical address of the organization.`, - }, { name: 'id', type: 'integer', required: true, description: `The ID of the organization to update.`, }, + { + name: 'address', + type: 'string', + required: false, + description: `Updated physical address of the organization.`, + }, { name: 'name', type: 'string', @@ -965,6 +965,12 @@ export const tools: Tool[] = [ name: 'pipedrive_organizations_search', description: `Search for organizations in Pipedrive by a search term across name, address, and custom fields.`, params: [ + { + name: 'term', + type: 'string', + required: true, + description: `Search term. Minimum 2 characters.`, + }, { name: 'cursor', type: 'string', @@ -989,25 +995,19 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 500).`, }, - { - name: 'term', - type: 'string', - required: true, - description: `Search term. Minimum 2 characters.`, - }, ], }, { name: 'pipedrive_person_create', description: `Create a new person (contact) in Pipedrive with name, email, phone, and optional organization association.`, params: [ + { name: 'name', type: 'string', required: true, description: `Full name of the person.` }, { name: 'email', type: 'string', required: false, description: `Email address of the person.`, }, - { name: 'name', type: 'string', required: true, description: `Full name of the person.` }, { name: 'org_id', type: 'integer', @@ -1056,18 +1056,18 @@ export const tools: Tool[] = [ name: 'pipedrive_person_update', description: `Update an existing person (contact) in Pipedrive. Modify name, email, phone, organization, or owner.`, params: [ - { - name: 'email', - type: 'string', - required: false, - description: `Updated email address of the person.`, - }, { name: 'id', type: 'integer', required: true, description: `The ID of the person to update.`, }, + { + name: 'email', + type: 'string', + required: false, + description: `Updated email address of the person.`, + }, { name: 'name', type: 'string', @@ -1140,6 +1140,12 @@ export const tools: Tool[] = [ name: 'pipedrive_persons_search', description: `Search for persons (contacts) in Pipedrive by name, email, phone, or custom fields.`, params: [ + { + name: 'term', + type: 'string', + required: true, + description: `Search term to find matching persons. Minimum 2 characters.`, + }, { name: 'exact_match', type: 'boolean', @@ -1164,25 +1170,19 @@ export const tools: Tool[] = [ required: false, description: `Filter results by organization ID.`, }, - { - name: 'term', - type: 'string', - required: true, - description: `Search term to find matching persons. Minimum 2 characters.`, - }, ], }, { name: 'pipedrive_pipeline_create', description: `Create a new sales pipeline in Pipedrive with a name and optional deal probability setting.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the pipeline.` }, { name: 'is_deal_probability_enabled', type: 'boolean', required: false, description: `Whether deal probability is enabled for this pipeline.`, }, - { name: 'name', type: 'string', required: true, description: `Name of the pipeline.` }, ], }, { @@ -1267,6 +1267,7 @@ export const tools: Tool[] = [ name: 'pipedrive_product_create', description: `Create a new product in Pipedrive with name, price, description, and other attributes.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the product.` }, { name: 'code', type: 'string', required: false, description: `Product code or SKU.` }, { name: 'description', @@ -1274,7 +1275,6 @@ export const tools: Tool[] = [ required: false, description: `Description of the product.`, }, - { name: 'name', type: 'string', required: true, description: `Name of the product.` }, { name: 'owner_id', type: 'integer', @@ -1323,6 +1323,12 @@ export const tools: Tool[] = [ name: 'pipedrive_product_update', description: `Update an existing product in Pipedrive. Modify name, code, description, unit, tax, or owner.`, params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the product to update.`, + }, { name: 'code', type: 'string', @@ -1335,12 +1341,6 @@ export const tools: Tool[] = [ required: false, description: `Updated description of the product.`, }, - { - name: 'id', - type: 'integer', - required: true, - description: `The ID of the product to update.`, - }, { name: 'name', type: 'string', @@ -1408,6 +1408,12 @@ export const tools: Tool[] = [ name: 'pipedrive_products_search', description: `Search for products in Pipedrive by name, code, or custom fields.`, params: [ + { + name: 'term', + type: 'string', + required: true, + description: `Search term. Minimum 2 characters.`, + }, { name: 'cursor', type: 'string', @@ -1432,18 +1438,19 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 500).`, }, - { - name: 'term', - type: 'string', - required: true, - description: `Search term. Minimum 2 characters.`, - }, ], }, { name: 'pipedrive_stage_create', description: `Create a new stage in a Pipedrive pipeline with a name and optional deal probability settings.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name of the stage.` }, + { + name: 'pipeline_id', + type: 'integer', + required: true, + description: `ID of the pipeline this stage belongs to.`, + }, { name: 'days_to_rotten', type: 'integer', @@ -1462,13 +1469,6 @@ export const tools: Tool[] = [ required: false, description: `Whether rotten flag is enabled for deals in this stage.`, }, - { name: 'name', type: 'string', required: true, description: `Name of the stage.` }, - { - name: 'pipeline_id', - type: 'integer', - required: true, - description: `ID of the pipeline this stage belongs to.`, - }, ], }, { @@ -1499,6 +1499,12 @@ export const tools: Tool[] = [ name: 'pipedrive_stage_update', description: `Update an existing pipeline stage in Pipedrive. Modify name, pipeline, deal probability, or rotten settings.`, params: [ + { + name: 'id', + type: 'integer', + required: true, + description: `The ID of the stage to update.`, + }, { name: 'days_to_rotten', type: 'integer', @@ -1511,12 +1517,6 @@ export const tools: Tool[] = [ required: false, description: `Deal success probability for this stage (0-100).`, }, - { - name: 'id', - type: 'integer', - required: true, - description: `The ID of the stage to update.`, - }, { name: 'is_deal_rot_enabled', type: 'boolean', @@ -1589,18 +1589,18 @@ export const tools: Tool[] = [ name: 'pipedrive_users_find', description: `Search for Pipedrive users by name or email address.`, params: [ - { - name: 'search_by_email', - type: 'boolean', - required: false, - description: `When true, the search term is matched against email addresses instead of names.`, - }, { name: 'term', type: 'string', required: true, description: `Search term to match against user name or email.`, }, + { + name: 'search_by_email', + type: 'boolean', + required: false, + description: `When true, the search term is matched against email addresses instead of names.`, + }, ], }, { @@ -1624,6 +1624,12 @@ export const tools: Tool[] = [ required: true, description: `Object type to watch: deal, person, organization, activity, lead, note, pipeline, product, stage, user, or * for all.`, }, + { + name: 'subscription_url', + type: 'string', + required: true, + description: `The URL to send webhook notifications to.`, + }, { name: 'http_auth_password', type: 'string', @@ -1642,12 +1648,6 @@ export const tools: Tool[] = [ required: false, description: `Display name for this webhook.`, }, - { - name: 'subscription_url', - type: 'string', - required: true, - description: `The URL to send webhook notifications to.`, - }, { name: 'version', type: 'string', diff --git a/src/data/agent-connectors/salesforce.ts b/src/data/agent-connectors/salesforce.ts index 4146f811f..1c17ab606 100644 --- a/src/data/agent-connectors/salesforce.ts +++ b/src/data/agent-connectors/salesforce.ts @@ -5,6 +5,7 @@ export const tools: Tool[] = [ name: 'salesforce_account_create', description: `Create a new Account in Salesforce. Supports standard fields`, params: [ + { name: 'Name', type: 'string', required: true, description: `Account Name` }, { name: 'AccountNumber', type: 'string', @@ -29,7 +30,6 @@ export const tools: Tool[] = [ { name: 'BillingStreet', type: 'string', required: false, description: `Billing street` }, { name: 'Description', type: 'string', required: false, description: `Description` }, { name: 'Industry', type: 'string', required: false, description: `Industry` }, - { name: 'Name', type: 'string', required: true, description: `Account Name` }, { name: 'NumberOfEmployees', type: 'integer', @@ -81,6 +81,12 @@ export const tools: Tool[] = [ name: 'salesforce_account_update', description: `Update an existing Account in Salesforce by account ID. Allows updating account properties like name, phone, website, industry, billing information, and more.`, params: [ + { + name: 'account_id', + type: 'string', + required: true, + description: `ID of the account to update`, + }, { name: 'AccountNumber', type: 'string', @@ -210,12 +216,6 @@ export const tools: Tool[] = [ required: false, description: `Year the company started`, }, - { - name: 'account_id', - type: 'string', - required: true, - description: `ID of the account to update`, - }, ], }, { @@ -283,6 +283,12 @@ export const tools: Tool[] = [ name: 'salesforce_chatter_post_create', description: `Create a new post (feed element) on a Salesforce Chatter feed. Use 'me' as subject_id to post to the current user's feed.`, params: [ + { + name: 'text', + type: 'string', + required: true, + description: `The text body of the Chatter post`, + }, { name: 'is_rich_text', type: 'boolean', @@ -301,12 +307,6 @@ export const tools: Tool[] = [ required: false, description: `The ID of the subject (user, record, or group) to post to. Use 'me' for the current user's feed.`, }, - { - name: 'text', - type: 'string', - required: true, - description: `The text body of the Chatter post`, - }, ], }, { @@ -337,6 +337,12 @@ export const tools: Tool[] = [ name: 'salesforce_chatter_posts_search', description: `Search Salesforce Chatter posts (feed elements) by keyword across all feeds.`, params: [ + { + name: 'q', + type: 'string', + required: true, + description: `Search query string to find matching Chatter posts`, + }, { name: 'page', type: 'string', @@ -349,18 +355,18 @@ export const tools: Tool[] = [ required: false, description: `Number of results to return per page (default: 25, max: 100)`, }, - { - name: 'q', - type: 'string', - required: true, - description: `Search query string to find matching Chatter posts`, - }, ], }, { name: 'salesforce_chatter_user_feed_list', description: `Retrieve feed elements (posts) from a Salesforce user's Chatter news feed. Use 'me' as the user ID to get the current user's feed.`, params: [ + { + name: 'user_id', + type: 'string', + required: true, + description: `The ID of the user whose Chatter feed to retrieve. Use 'me' for the current user.`, + }, { name: 'page', type: 'string', @@ -379,12 +385,6 @@ export const tools: Tool[] = [ required: false, description: `Sort order for feed elements. Options: LastModifiedDateDesc (default), CreatedDateDesc, MostRecentActivity`, }, - { - name: 'user_id', - type: 'string', - required: true, - description: `The ID of the user whose Chatter feed to retrieve. Use 'me' for the current user.`, - }, ], }, { @@ -403,6 +403,12 @@ export const tools: Tool[] = [ name: 'salesforce_contact_create', description: `Create a new contact in Salesforce. Allows setting contact properties like name, email, phone, account association, and other standard fields.`, params: [ + { + name: 'LastName', + type: 'string', + required: true, + description: `Last name of the contact (required)`, + }, { name: 'AccountId', type: 'string', @@ -433,12 +439,6 @@ export const tools: Tool[] = [ required: false, description: `First name of the contact`, }, - { - name: 'LastName', - type: 'string', - required: true, - description: `Last name of the contact (required)`, - }, { name: 'LeadSource', type: 'string', @@ -503,18 +503,18 @@ export const tools: Tool[] = [ required: true, description: `Folder to place the cloned dashboard`, }, - { - name: 'name', - type: 'string', - required: false, - description: `Name for the cloned dashboard`, - }, { name: 'source_dashboard_id', type: 'string', required: true, description: `ID of the dashboard to clone`, }, + { + name: 'name', + type: 'string', + required: false, + description: `Name for the cloned dashboard`, + }, ], }, { @@ -622,15 +622,22 @@ export const tools: Tool[] = [ name: 'salesforce_opportunity_create', description: `Create a new opportunity in Salesforce. Allows setting opportunity properties like name, amount, stage, close date, and account association.`, params: [ - { name: 'AccountId', type: 'string', required: false, description: `Associated Account Id` }, - { name: 'Amount', type: 'number', required: false, description: `Opportunity amount` }, - { name: 'CampaignId', type: 'string', required: false, description: `Related Campaign Id` }, { name: 'CloseDate', type: 'string', required: true, description: `Expected close date (YYYY-MM-DD, required)`, }, + { name: 'Name', type: 'string', required: true, description: `Opportunity name (required)` }, + { + name: 'StageName', + type: 'string', + required: true, + description: `Current sales stage (required)`, + }, + { name: 'AccountId', type: 'string', required: false, description: `Associated Account Id` }, + { name: 'Amount', type: 'number', required: false, description: `Opportunity amount` }, + { name: 'CampaignId', type: 'string', required: false, description: `Related Campaign Id` }, { name: 'Custom_Field__c', type: 'string', @@ -650,7 +657,6 @@ export const tools: Tool[] = [ description: `Forecast category name`, }, { name: 'LeadSource', type: 'string', required: false, description: `Lead source` }, - { name: 'Name', type: 'string', required: true, description: `Opportunity name (required)` }, { name: 'NextStep', type: 'string', @@ -681,12 +687,6 @@ export const tools: Tool[] = [ required: false, description: `Record Type Id for Opportunity`, }, - { - name: 'StageName', - type: 'string', - required: true, - description: `Current sales stage (required)`, - }, { name: 'Type', type: 'string', required: false, description: `Opportunity type` }, ], }, @@ -694,24 +694,30 @@ export const tools: Tool[] = [ name: 'salesforce_opportunity_get', description: `Retrieve details of a specific opportunity from Salesforce by opportunity ID. Returns opportunity properties and associated data.`, params: [ - { - name: 'fields', - type: 'string', - required: false, - description: `Comma-separated list of fields to include in the response`, - }, { name: 'opportunity_id', type: 'string', required: true, description: `ID of the opportunity to retrieve`, }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, ], }, { name: 'salesforce_opportunity_update', description: `Update an existing opportunity in Salesforce by opportunity ID. Allows updating opportunity properties like name, amount, stage, and close date.`, params: [ + { + name: 'opportunity_id', + type: 'string', + required: true, + description: `ID of the opportunity to update`, + }, { name: 'AccountId', type: 'string', required: false, description: `Associated Account Id` }, { name: 'Amount', type: 'number', required: false, description: `Opportunity amount` }, { name: 'CampaignId', type: 'string', required: false, description: `Related Campaign Id` }, @@ -767,12 +773,6 @@ export const tools: Tool[] = [ }, { name: 'StageName', type: 'string', required: false, description: `Current sales stage` }, { name: 'Type', type: 'string', required: false, description: `Opportunity type` }, - { - name: 'opportunity_id', - type: 'string', - required: true, - description: `ID of the opportunity to update`, - }, ], }, { @@ -803,6 +803,13 @@ export const tools: Tool[] = [ name: 'salesforce_report_create', description: `Create a new report in Salesforce using the Analytics API. Minimal verified version with only confirmed working fields.`, params: [ + { name: 'name', type: 'string', required: true, description: `Report name` }, + { + name: 'reportType', + type: 'string', + required: true, + description: `The report type's API name from your Salesforce org (e.g. Opportunity, AccountList). Find valid values in Setup > Report Types`, + }, { name: 'aggregates', type: 'string', @@ -840,7 +847,6 @@ export const tools: Tool[] = [ required: false, description: `Row groupings (JSON array)`, }, - { name: 'name', type: 'string', required: true, description: `Report name` }, { name: 'reportBooleanFilter', type: 'string', required: false, description: `Filter logic` }, { name: 'reportFilters', @@ -854,12 +860,6 @@ export const tools: Tool[] = [ required: false, description: `Report format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings)`, }, - { - name: 'reportType', - type: 'string', - required: true, - description: `The report type's API name from your Salesforce org (e.g. Opportunity, AccountList). Find valid values in Setup > Report Types`, - }, { name: 'scope', type: 'string', @@ -896,6 +896,12 @@ export const tools: Tool[] = [ name: 'salesforce_report_update', description: `Update an existing report in Salesforce by report ID. Minimal verified version with only confirmed working fields. Only updates fields that are provided.`, params: [ + { + name: 'report_id', + type: 'string', + required: true, + description: `ID of the report to update`, + }, { name: 'aggregates', type: 'string', @@ -952,12 +958,6 @@ export const tools: Tool[] = [ required: false, description: `Report format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings)`, }, - { - name: 'report_id', - type: 'string', - required: true, - description: `ID of the report to update`, - }, { name: 'scope', type: 'string', @@ -970,14 +970,14 @@ export const tools: Tool[] = [ name: 'salesforce_search_parameterized', description: `Execute parameterized searches against Salesforce data. Provides simplified search interface with predefined parameters.`, params: [ + { name: 'search_text', type: 'string', required: true, description: `Text to search for` }, + { name: 'sobject', type: 'string', required: true, description: `SObject type to search in` }, { name: 'fields', type: 'string', required: false, description: `Comma-separated list of fields to return`, }, - { name: 'search_text', type: 'string', required: true, description: `Text to search for` }, - { name: 'sobject', type: 'string', required: true, description: `SObject type to search in` }, ], }, { @@ -1032,12 +1032,6 @@ export const tools: Tool[] = [ name: 'salesforce_sobject_get', description: `Retrieve a record from any Salesforce SObject type by ID. Optionally specify which fields to return.`, params: [ - { - name: 'fields', - type: 'string', - required: false, - description: `Comma-separated list of fields to include in the response`, - }, { name: 'record_id', type: 'string', @@ -1050,6 +1044,12 @@ export const tools: Tool[] = [ required: true, description: `The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)`, }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, ], }, { @@ -1152,12 +1152,6 @@ export const tools: Tool[] = [ name: 'salesforce_tooling_sobject_get', description: `Retrieve a metadata record from any Salesforce Tooling API object type by ID. Optionally specify which fields to return.`, params: [ - { - name: 'fields', - type: 'string', - required: false, - description: `Comma-separated list of fields to include in the response`, - }, { name: 'record_id', type: 'string', @@ -1170,6 +1164,12 @@ export const tools: Tool[] = [ required: true, description: `The Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)`, }, + { + name: 'fields', + type: 'string', + required: false, + description: `Comma-separated list of fields to include in the response`, + }, ], }, { diff --git a/src/data/agent-connectors/slack.ts b/src/data/agent-connectors/slack.ts index 80da80f99..14f13195d 100644 --- a/src/data/agent-connectors/slack.ts +++ b/src/data/agent-connectors/slack.ts @@ -29,18 +29,18 @@ export const tools: Tool[] = [ name: 'slack_create_channel', description: `Creates a new public or private channel in a Slack workspace. Requires a valid Slack OAuth2 connection with channels:manage scope for public channels or groups:write scope for private channels.`, params: [ - { - name: 'is_private', - type: 'boolean', - required: false, - description: `Create a private channel instead of public`, - }, { name: 'name', type: 'string', required: true, description: `Name of the channel to create (without # prefix)`, }, + { + name: 'is_private', + type: 'boolean', + required: false, + description: `Create a private channel instead of public`, + }, { name: 'team_id', type: 'string', @@ -137,6 +137,12 @@ export const tools: Tool[] = [ required: true, description: `Channel ID, channel name (#general), or user ID for DM`, }, + { + name: 'ts', + type: 'string', + required: true, + description: `Timestamp of the parent message to get replies for`, + }, { name: 'cursor', type: 'string', @@ -167,30 +173,24 @@ export const tools: Tool[] = [ required: false, description: `Start of time range of messages to include in results`, }, - { - name: 'ts', - type: 'string', - required: true, - description: `Timestamp of the parent message to get replies for`, - }, ], }, { name: 'slack_get_user_info', description: `Retrieves detailed information about a specific Slack user, including profile data, status, and workspace information. Requires a valid Slack OAuth2 connection with users:read scope.`, params: [ - { - name: 'include_locale', - type: 'boolean', - required: false, - description: `Set to true to include locale information for the user`, - }, { name: 'user', type: 'string', required: true, description: `User ID to get information about`, }, + { + name: 'include_locale', + type: 'boolean', + required: false, + description: `Set to true to include locale information for the user`, + }, ], }, { @@ -347,6 +347,13 @@ export const tools: Tool[] = [ name: 'slack_send_message', description: `Sends a message to a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.`, params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM`, + }, + { name: 'text', type: 'string', required: true, description: `Message text content` }, { name: 'attachments', type: 'string', @@ -359,12 +366,6 @@ export const tools: Tool[] = [ required: false, description: `JSON-encoded array of Block Kit block elements for rich message formatting`, }, - { - name: 'channel', - type: 'string', - required: true, - description: `Channel ID, channel name (#general), or user ID for DM`, - }, { name: 'reply_broadcast', type: 'boolean', @@ -377,7 +378,6 @@ export const tools: Tool[] = [ required: false, description: `Optional schema version to use for tool execution`, }, - { name: 'text', type: 'string', required: true, description: `Message text content` }, { name: 'thread_ts', type: 'string', @@ -432,6 +432,18 @@ export const tools: Tool[] = [ name: 'slack_update_message', description: `Updates/edits a previously sent message in a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope.`, params: [ + { + name: 'channel', + type: 'string', + required: true, + description: `Channel ID, channel name (#general), or user ID for DM where the message was sent`, + }, + { + name: 'ts', + type: 'string', + required: true, + description: `Timestamp of the message to update`, + }, { name: 'attachments', type: 'string', @@ -444,19 +456,7 @@ export const tools: Tool[] = [ required: false, description: `JSON-encoded array of Block Kit block elements for rich message formatting`, }, - { - name: 'channel', - type: 'string', - required: true, - description: `Channel ID, channel name (#general), or user ID for DM where the message was sent`, - }, { name: 'text', type: 'string', required: false, description: `New message text content` }, - { - name: 'ts', - type: 'string', - required: true, - description: `Timestamp of the message to update`, - }, ], }, ] diff --git a/src/data/agent-connectors/snowflake.ts b/src/data/agent-connectors/snowflake.ts index bd3ea0287..65b9f7718 100644 --- a/src/data/agent-connectors/snowflake.ts +++ b/src/data/agent-connectors/snowflake.ts @@ -5,24 +5,30 @@ export const tools: Tool[] = [ name: 'snowflake_cancel_query', description: `Cancel a running Snowflake SQL API statement by statement handle.`, params: [ - { - name: 'request_id', - type: 'string', - required: false, - description: `Optional request ID used when the statement was submitted`, - }, { name: 'statement_handle', type: 'string', required: true, description: `Snowflake statement handle to cancel`, }, + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, ], }, { name: 'snowflake_execute_query', description: `Execute one or more SQL statements against Snowflake using the SQL API. Requires a valid Snowflake OAuth2 connection. Use semicolons to submit multiple statements.`, params: [ + { + name: 'statement', + type: 'string', + required: true, + description: `SQL statement to execute. Use semicolons to send multiple statements in one request.`, + }, { name: 'async', type: 'boolean', @@ -77,12 +83,6 @@ export const tools: Tool[] = [ required: false, description: `Schema to use when executing the statement`, }, - { - name: 'statement', - type: 'string', - required: true, - description: `SQL statement to execute. Use semicolons to send multiple statements in one request.`, - }, { name: 'timeout', type: 'integer', @@ -101,13 +101,13 @@ export const tools: Tool[] = [ name: 'snowflake_get_columns', description: `Query INFORMATION_SCHEMA.COLUMNS for column metadata.`, params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'column_name_like', type: 'string', required: false, description: `Optional column name pattern`, }, - { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, @@ -125,36 +125,36 @@ export const tools: Tool[] = [ required: true, description: `Partition index to fetch (0-based)`, }, - { - name: 'request_id', - type: 'string', - required: false, - description: `Optional request ID used when the statement was submitted`, - }, { name: 'statement_handle', type: 'string', required: true, description: `Snowflake statement handle returned by Execute Query`, }, - ], - }, - { - name: 'snowflake_get_query_status', - description: `Get Snowflake SQL API statement status and first partition result metadata by statement handle.`, - params: [ { name: 'request_id', type: 'string', required: false, description: `Optional request ID used when the statement was submitted`, }, + ], + }, + { + name: 'snowflake_get_query_status', + description: `Get Snowflake SQL API statement status and first partition result metadata by statement handle.`, + params: [ { name: 'statement_handle', type: 'string', required: true, description: `Snowflake statement handle returned by Execute Query`, }, + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, ], }, { @@ -189,13 +189,13 @@ export const tools: Tool[] = [ name: 'snowflake_get_table_constraints', description: `Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS.`, params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'constraint_type', type: 'string', required: false, description: `Optional constraint type filter`, }, - { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, @@ -224,6 +224,7 @@ export const tools: Tool[] = [ name: 'snowflake_show_databases_schemas', description: `Run SHOW DATABASES or SHOW SCHEMAS.`, params: [ + { name: 'object_type', type: 'string', required: true, description: `Object type to show` }, { name: 'database_name', type: 'string', @@ -236,7 +237,6 @@ export const tools: Tool[] = [ required: false, description: `Optional LIKE pattern`, }, - { name: 'object_type', type: 'string', required: true, description: `Object type to show` }, { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], @@ -279,29 +279,29 @@ export const tools: Tool[] = [ description: `Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. For reliable execution in this environment, use fully-qualified scope (database_name + schema_name + table_name).`, params: [ { - name: 'database_name', + name: 'key_direction', type: 'string', - required: false, - description: `Optional database name (recommended with schema_name)`, + required: true, + description: `Which command to run`, }, { - name: 'key_direction', + name: 'table_name', type: 'string', required: true, - description: `Which command to run`, + description: `Table name (use with schema_name and database_name for fully-qualified scope)`, }, - { name: 'role', type: 'string', required: false, description: `Optional role` }, { - name: 'schema_name', + name: 'database_name', type: 'string', required: false, - description: `Optional schema name (recommended with database_name)`, + description: `Optional database name (recommended with schema_name)`, }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, { - name: 'table_name', + name: 'schema_name', type: 'string', - required: true, - description: `Table name (use with schema_name and database_name for fully-qualified scope)`, + required: false, + description: `Optional schema name (recommended with database_name)`, }, { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], diff --git a/src/data/agent-connectors/snowflakekeyauth.ts b/src/data/agent-connectors/snowflakekeyauth.ts index c4cd0607e..8cbcf04e9 100644 --- a/src/data/agent-connectors/snowflakekeyauth.ts +++ b/src/data/agent-connectors/snowflakekeyauth.ts @@ -5,24 +5,30 @@ export const tools: Tool[] = [ name: 'snowflakekeyauth_cancel_query', description: `Cancel a running Snowflake SQL API statement by statement handle.`, params: [ - { - name: 'request_id', - type: 'string', - required: false, - description: `Optional request ID used when the statement was submitted`, - }, { name: 'statement_handle', type: 'string', required: true, description: `Snowflake statement handle to cancel`, }, + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, ], }, { name: 'snowflakekeyauth_execute_query', description: `Execute one or more SQL statements against Snowflake using the SQL API. Requires a valid Snowflake OAuth2 connection. Use semicolons to submit multiple statements.`, params: [ + { + name: 'statement', + type: 'string', + required: true, + description: `SQL statement to execute. Use semicolons to send multiple statements in one request.`, + }, { name: 'async', type: 'boolean', @@ -77,12 +83,6 @@ export const tools: Tool[] = [ required: false, description: `Schema to use when executing the statement`, }, - { - name: 'statement', - type: 'string', - required: true, - description: `SQL statement to execute. Use semicolons to send multiple statements in one request.`, - }, { name: 'timeout', type: 'integer', @@ -101,13 +101,13 @@ export const tools: Tool[] = [ name: 'snowflakekeyauth_get_columns', description: `Query INFORMATION_SCHEMA.COLUMNS for column metadata.`, params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'column_name_like', type: 'string', required: false, description: `Optional column name pattern`, }, - { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, @@ -125,36 +125,36 @@ export const tools: Tool[] = [ required: true, description: `Partition index to fetch (0-based)`, }, - { - name: 'request_id', - type: 'string', - required: false, - description: `Optional request ID used when the statement was submitted`, - }, { name: 'statement_handle', type: 'string', required: true, description: `Snowflake statement handle returned by Execute Query`, }, - ], - }, - { - name: 'snowflakekeyauth_get_query_status', - description: `Get Snowflake SQL API statement status and first partition result metadata by statement handle.`, - params: [ { name: 'request_id', type: 'string', required: false, description: `Optional request ID used when the statement was submitted`, }, + ], + }, + { + name: 'snowflakekeyauth_get_query_status', + description: `Get Snowflake SQL API statement status and first partition result metadata by statement handle.`, + params: [ { name: 'statement_handle', type: 'string', required: true, description: `Snowflake statement handle returned by Execute Query`, }, + { + name: 'request_id', + type: 'string', + required: false, + description: `Optional request ID used when the statement was submitted`, + }, ], }, { @@ -189,13 +189,13 @@ export const tools: Tool[] = [ name: 'snowflakekeyauth_get_table_constraints', description: `Query INFORMATION_SCHEMA.TABLE_CONSTRAINTS.`, params: [ + { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'constraint_type', type: 'string', required: false, description: `Optional constraint type filter`, }, - { name: 'database', type: 'string', required: true, description: `Database name` }, { name: 'limit', type: 'integer', required: false, description: `Maximum rows` }, { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'schema', type: 'string', required: false, description: `Optional schema filter` }, @@ -224,6 +224,7 @@ export const tools: Tool[] = [ name: 'snowflakekeyauth_show_databases_schemas', description: `Run SHOW DATABASES or SHOW SCHEMAS.`, params: [ + { name: 'object_type', type: 'string', required: true, description: `Object type to show` }, { name: 'database_name', type: 'string', @@ -236,7 +237,6 @@ export const tools: Tool[] = [ required: false, description: `Optional LIKE pattern`, }, - { name: 'object_type', type: 'string', required: true, description: `Object type to show` }, { name: 'role', type: 'string', required: false, description: `Optional role` }, { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], @@ -279,29 +279,29 @@ export const tools: Tool[] = [ description: `Run SHOW IMPORTED KEYS or SHOW EXPORTED KEYS for a table. For reliable execution in this environment, use fully-qualified scope (database_name + schema_name + table_name).`, params: [ { - name: 'database_name', + name: 'key_direction', type: 'string', - required: false, - description: `Optional database name (recommended with schema_name)`, + required: true, + description: `Which command to run`, }, { - name: 'key_direction', + name: 'table_name', type: 'string', required: true, - description: `Which command to run`, + description: `Table name (use with schema_name and database_name for fully-qualified scope)`, }, - { name: 'role', type: 'string', required: false, description: `Optional role` }, { - name: 'schema_name', + name: 'database_name', type: 'string', required: false, - description: `Optional schema name (recommended with database_name)`, + description: `Optional database name (recommended with schema_name)`, }, + { name: 'role', type: 'string', required: false, description: `Optional role` }, { - name: 'table_name', + name: 'schema_name', type: 'string', - required: true, - description: `Table name (use with schema_name and database_name for fully-qualified scope)`, + required: false, + description: `Optional schema name (recommended with database_name)`, }, { name: 'warehouse', type: 'string', required: false, description: `Optional warehouse` }, ], diff --git a/src/data/agent-connectors/supadata.ts b/src/data/agent-connectors/supadata.ts index 12342429f..8f4ee24eb 100644 --- a/src/data/agent-connectors/supadata.ts +++ b/src/data/agent-connectors/supadata.ts @@ -17,6 +17,12 @@ export const tools: Tool[] = [ name: 'supadata_transcript_get', description: `Extract transcripts from YouTube, TikTok, Instagram, X (Twitter), Facebook, or direct file URLs. Supports native captions, auto-generated captions, or AI-generated transcripts. Returns timestamped segments with speaker labels.`, params: [ + { + name: 'url', + type: 'string', + required: true, + description: `URL of the video or media file to transcribe. Supports YouTube, TikTok, Instagram, X, Facebook, or direct video/audio file URLs.`, + }, { name: 'chunkSize', type: 'integer', @@ -41,12 +47,6 @@ export const tools: Tool[] = [ required: false, description: `Return plain text instead of timestamped segments. Defaults to false.`, }, - { - name: 'url', - type: 'string', - required: true, - description: `URL of the video or media file to transcribe. Supports YouTube, TikTok, Instagram, X, Facebook, or direct video/audio file URLs.`, - }, ], }, { @@ -65,6 +65,12 @@ export const tools: Tool[] = [ name: 'supadata_web_scrape', description: `Scrape a web page and return its content as clean Markdown. Ideal for extracting readable content from any URL while stripping away navigation and ads.`, params: [ + { + name: 'url', + type: 'string', + required: true, + description: `URL of the web page to scrape.`, + }, { name: 'lang', type: 'string', @@ -77,12 +83,6 @@ export const tools: Tool[] = [ required: false, description: `Strip all hyperlinks from the Markdown output. Defaults to false.`, }, - { - name: 'url', - type: 'string', - required: true, - description: `URL of the web page to scrape.`, - }, ], }, { @@ -113,6 +113,12 @@ export const tools: Tool[] = [ name: 'supadata_youtube_search', description: `Search YouTube for videos, channels, or playlists. Returns results with titles, IDs, descriptions, thumbnails, and metadata.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query string to find videos, channels, or playlists on YouTube.`, + }, { name: 'lang', type: 'string', @@ -125,12 +131,6 @@ export const tools: Tool[] = [ required: false, description: `Maximum number of results to return.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Search query string to find videos, channels, or playlists on YouTube.`, - }, { name: 'type', type: 'string', @@ -143,6 +143,12 @@ export const tools: Tool[] = [ name: 'supadata_youtube_transcript_get', description: `Retrieve the transcript for a YouTube video by video ID or URL. Returns timestamped segments with text content.`, params: [ + { + name: 'videoId', + type: 'string', + required: true, + description: `YouTube video ID or full YouTube URL to retrieve the transcript for.`, + }, { name: 'lang', type: 'string', @@ -155,12 +161,6 @@ export const tools: Tool[] = [ required: false, description: `Return plain text instead of timestamped segments. Defaults to false.`, }, - { - name: 'videoId', - type: 'string', - required: true, - description: `YouTube video ID or full YouTube URL to retrieve the transcript for.`, - }, ], }, { @@ -173,18 +173,18 @@ export const tools: Tool[] = [ required: true, description: `ISO 639-1 language code to translate the transcript into (e.g., en, fr, es).`, }, - { - name: 'text', - type: 'boolean', - required: false, - description: `Return plain text instead of timestamped segments. Defaults to false.`, - }, { name: 'videoId', type: 'string', required: true, description: `YouTube video ID or full YouTube URL to translate the transcript for.`, }, + { + name: 'text', + type: 'boolean', + required: false, + description: `Return plain text instead of timestamped segments. Defaults to false.`, + }, ], }, { diff --git a/src/data/agent-connectors/twitter.ts b/src/data/agent-connectors/twitter.ts index 342f72bc8..bd9f0939d 100644 --- a/src/data/agent-connectors/twitter.ts +++ b/src/data/agent-connectors/twitter.ts @@ -23,18 +23,18 @@ export const tools: Tool[] = [ name: 'twitter_blocked_users_get', description: `Retrieves the authenticated user's block list. The id parameter must be the authenticated user's ID. Use Get Authenticated User action first to obtain your user ID.`, params: [ - { - name: 'expansions', - type: 'string', - required: false, - description: `Comma-separated expansions`, - }, { name: 'id', type: 'string', required: true, description: `Authenticated user's Twitter ID — must match the authenticated user`, }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, { name: 'max_results', type: 'integer', @@ -95,18 +95,18 @@ export const tools: Tool[] = [ name: 'twitter_bookmarks_get', description: `Retrieves Tweets bookmarked by the authenticated user. The provided User ID must match the authenticated user's ID.`, params: [ - { - name: 'expansions', - type: 'string', - required: false, - description: `Comma-separated expansions`, - }, { name: 'id', type: 'string', required: true, description: `Authenticated user's Twitter ID`, }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, { name: 'max_results', type: 'integer', @@ -131,13 +131,13 @@ export const tools: Tool[] = [ name: 'twitter_compliance_job_create', description: `Creates a new compliance job to check the status of Tweet or user IDs. Upload IDs as a plain text file (one ID per line) to the upload_url received in the response.`, params: [ + { name: 'type', type: 'string', required: true, description: `Type of compliance job` }, { name: 'resumable', type: 'boolean', required: false, description: `Whether the job should be resumable`, }, - { name: 'type', type: 'string', required: true, description: `Type of compliance job` }, ], }, { @@ -149,19 +149,25 @@ export const tools: Tool[] = [ name: 'twitter_compliance_jobs_list', description: `Returns a list of recent compliance jobs, filtered by type (tweets or users) and optionally by status.`, params: [ - { name: 'status', type: 'string', required: false, description: `Filter by job status` }, { name: 'type', type: 'string', required: true, description: `Type of compliance jobs to list`, }, + { name: 'status', type: 'string', required: false, description: `Filter by job status` }, ], }, { name: 'twitter_dm_conversation_events_get', description: `Fetches Direct Message (DM) events for a one-on-one conversation with a specified participant ID, ordered chronologically newest to oldest. Does not support group DMs.`, params: [ + { + name: 'participant_id', + type: 'string', + required: true, + description: `User ID of the DM conversation participant`, + }, { name: 'dm_event_fields', type: 'string', @@ -192,12 +198,6 @@ export const tools: Tool[] = [ required: false, description: `Pagination token for next page`, }, - { - name: 'participant_id', - type: 'string', - required: true, - description: `User ID of the DM conversation participant`, - }, ], }, { @@ -277,13 +277,13 @@ export const tools: Tool[] = [ name: 'twitter_dm_event_get', description: `Fetches a specific Direct Message (DM) event by its unique ID. Allows optional expansion of related data like users or tweets.`, params: [ + { name: 'event_id', type: 'string', required: true, description: `DM event ID` }, { name: 'dm_event_fields', type: 'string', required: false, description: `Comma-separated DM event fields`, }, - { name: 'event_id', type: 'string', required: true, description: `DM event ID` }, { name: 'expansions', type: 'string', @@ -332,12 +332,6 @@ export const tools: Tool[] = [ name: 'twitter_dm_group_conversation_create', description: `Creates a new group Direct Message (DM) conversation on Twitter. The conversation_type must be 'Group'. Include participant_ids and an initial message with text and optional media attachments using media_id (not media_url). Media must be uploaded first.`, params: [ - { - name: 'message_media_ids', - type: 'array', - required: false, - description: `Media IDs to attach to initial message`, - }, { name: 'message_text', type: 'string', required: true, description: `Initial message text` }, { name: 'participant_ids', @@ -345,24 +339,30 @@ export const tools: Tool[] = [ required: true, description: `List of Twitter user IDs to include`, }, + { + name: 'message_media_ids', + type: 'array', + required: false, + description: `Media IDs to attach to initial message`, + }, ], }, { name: 'twitter_dm_send', description: `Sends a new Direct Message with text and/or media (media_id for attachments must be pre-uploaded) to a specified Twitter user. Creates a new DM and does not modify existing messages.`, params: [ - { - name: 'media_id', - type: 'string', - required: false, - description: `Pre-uploaded media ID to attach`, - }, { name: 'participant_id', type: 'string', required: true, description: `Twitter user ID of the DM recipient`, }, + { + name: 'media_id', + type: 'string', + required: false, + description: `Pre-uploaded media ID to attach`, + }, { name: 'text', type: 'string', required: false, description: `Message text` }, ], }, @@ -370,18 +370,18 @@ export const tools: Tool[] = [ name: 'twitter_followers_get', description: `Retrieves a list of users who follow a specified public Twitter user ID.`, params: [ - { - name: 'expansions', - type: 'string', - required: false, - description: `Comma-separated expansions`, - }, { name: 'id', type: 'string', required: true, description: `Twitter user ID to get followers for`, }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, { name: 'max_results', type: 'integer', @@ -406,13 +406,13 @@ export const tools: Tool[] = [ name: 'twitter_following_get', description: `Retrieves users followed by a specific Twitter user, allowing pagination and customization of returned user and tweet data fields via expansions.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'max_results', type: 'integer', @@ -437,6 +437,12 @@ export const tools: Tool[] = [ name: 'twitter_full_archive_search', description: `Searches the full archive of public Tweets from March 2006 onwards. Use start_time and end_time together for a defined time window. Requires Academic Research access.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query using X search syntax`, + }, { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, { name: 'expansions', @@ -451,12 +457,6 @@ export const tools: Tool[] = [ description: `Max results per page (10-500)`, }, { name: 'next_token', type: 'string', required: false, description: `Next page token` }, - { - name: 'query', - type: 'string', - required: true, - description: `Search query using X search syntax`, - }, { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, { name: 'start_time', @@ -483,6 +483,7 @@ export const tools: Tool[] = [ name: 'twitter_full_archive_search_counts', description: `Returns a count of Tweets from the full archive that match a specified query, aggregated by day, hour, or minute. start_time must be before end_time if both are provided. since_id/until_id cannot be used with start_time/end_time.`, params: [ + { name: 'query', type: 'string', required: true, description: `Search query` }, { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, { name: 'granularity', @@ -491,7 +492,6 @@ export const tools: Tool[] = [ description: `Aggregation granularity`, }, { name: 'next_token', type: 'string', required: false, description: `Next page token` }, - { name: 'query', type: 'string', required: true, description: `Search query` }, { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, { name: 'start_time', type: 'string', required: false, description: `ISO 8601 start time` }, { name: 'until_id', type: 'string', required: false, description: `Maximum tweet ID` }, @@ -501,13 +501,13 @@ export const tools: Tool[] = [ name: 'twitter_list_create', description: `Creates a new, empty List on X (formerly Twitter). The provided name must be unique for the authenticated user. Accounts are added separately.`, params: [ + { name: 'name', type: 'string', required: true, description: `Unique name for the new list` }, { name: 'description', type: 'string', required: false, description: `Description of the list`, }, - { name: 'name', type: 'string', required: true, description: `Unique name for the new list` }, { name: 'private', type: 'boolean', @@ -545,13 +545,13 @@ export const tools: Tool[] = [ name: 'twitter_list_followers_get', description: `Fetches a list of users who follow a specific Twitter List, identified by its ID. Ensure the authenticated user has access if the list is private.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'max_results', type: 'integer', @@ -576,13 +576,13 @@ export const tools: Tool[] = [ name: 'twitter_list_lookup', description: `Returns metadata for a specific Twitter List, identified by its ID. Does not return list members. Can expand the owner's User object via the expansions parameter.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'list_fields', type: 'string', @@ -622,13 +622,13 @@ export const tools: Tool[] = [ name: 'twitter_list_members_get', description: `Fetches members of a specific Twitter List, identified by its unique ID.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'max_results', type: 'integer', @@ -666,13 +666,13 @@ export const tools: Tool[] = [ name: 'twitter_list_timeline_get', description: `Fetches the most recent Tweets posted by members of a specified Twitter List.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter List ID` }, { name: 'max_results', type: 'integer', @@ -734,8 +734,8 @@ export const tools: Tool[] = [ name: 'twitter_list_update', description: `Updates an existing Twitter List's name, description, or privacy status. Requires the List ID and at least one mutable property.`, params: [ - { name: 'description', type: 'string', required: false, description: `New description` }, { name: 'id', type: 'string', required: true, description: `Twitter List ID to update` }, + { name: 'description', type: 'string', required: false, description: `New description` }, { name: 'name', type: 'string', required: false, description: `New name for the list` }, { name: 'private', @@ -750,18 +750,18 @@ export const tools: Tool[] = [ description: `Uploads media (images only) to X/Twitter using the v2 API. Only supports images (tweet_image, dm_image) and subtitle files. For GIFs, videos, or any file larger than ~5 MB, use twitter_media_upload_large instead.`, params: [ { name: 'media', type: 'string', required: true, description: `Base64-encoded image data` }, - { - name: 'media_category', - type: 'string', - required: false, - description: `Media category for use context`, - }, { name: 'media_type', type: 'string', required: true, description: `MIME type, e.g. image/jpeg or image/png`, }, + { + name: 'media_category', + type: 'string', + required: false, + description: `Media category for use context`, + }, ], }, { @@ -792,12 +792,6 @@ export const tools: Tool[] = [ name: 'twitter_media_upload_base64', description: `Uploads media to X/Twitter using base64-encoded data. Use when you have media content as a base64 string. Only supports images and subtitle files. For videos or GIFs, use twitter_media_upload_large.`, params: [ - { - name: 'media_category', - type: 'string', - required: false, - description: `Media category for use context`, - }, { name: 'media_data', type: 'string', @@ -810,24 +804,18 @@ export const tools: Tool[] = [ required: true, description: `MIME type, e.g. image/jpeg`, }, - ], - }, - { - name: 'twitter_media_upload_init', - description: `Initializes a media upload session for X/Twitter. Returns a media_id for subsequent APPEND and FINALIZE commands. Required for uploading large files or when using the chunked upload workflow.`, - params: [ - { - name: 'additional_owners', - type: 'string', - required: false, - description: `Comma-separated user IDs to also own the media`, - }, { name: 'media_category', type: 'string', required: false, description: `Media category for use context`, }, + ], + }, + { + name: 'twitter_media_upload_init', + description: `Initializes a media upload session for X/Twitter. Returns a media_id for subsequent APPEND and FINALIZE commands. Required for uploading large files or when using the chunked upload workflow.`, + params: [ { name: 'media_type', type: 'string', @@ -840,12 +828,6 @@ export const tools: Tool[] = [ required: true, description: `Total size of the media file in bytes`, }, - ], - }, - { - name: 'twitter_media_upload_large', - description: `Uploads media files to X/Twitter. Automatically uses chunked upload for GIFs, videos, and images larger than 5 MB. Use for videos, GIFs, or any file larger than 5 MB.`, - params: [ { name: 'additional_owners', type: 'string', @@ -858,6 +840,12 @@ export const tools: Tool[] = [ required: false, description: `Media category for use context`, }, + ], + }, + { + name: 'twitter_media_upload_large', + description: `Uploads media files to X/Twitter. Automatically uses chunked upload for GIFs, videos, and images larger than 5 MB. Use for videos, GIFs, or any file larger than 5 MB.`, + params: [ { name: 'media_data', type: 'string', @@ -876,6 +864,18 @@ export const tools: Tool[] = [ required: true, description: `Total size of the file in bytes`, }, + { + name: 'additional_owners', + type: 'string', + required: false, + description: `Comma-separated user IDs to also own the media`, + }, + { + name: 'media_category', + type: 'string', + required: false, + description: `Media category for use context`, + }, ], }, { @@ -894,13 +894,13 @@ export const tools: Tool[] = [ name: 'twitter_muted_users_get', description: `Returns user objects muted by the X user identified by the id path parameter.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'max_results', type: 'integer', @@ -1002,13 +1002,13 @@ export const tools: Tool[] = [ name: 'twitter_post_likers_get', description: `Retrieves users who have liked the Post (Tweet) identified by the provided ID.`, params: [ + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'max_results', type: 'integer', @@ -1033,13 +1033,13 @@ export const tools: Tool[] = [ name: 'twitter_post_lookup', description: `Fetches comprehensive details for a single Tweet by its unique ID, provided the Tweet exists and is accessible.`, params: [ + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'media_fields', type: 'string', @@ -1064,13 +1064,13 @@ export const tools: Tool[] = [ name: 'twitter_post_quotes_get', description: `Retrieves Tweets that quote a specified Tweet. Requires a valid Tweet ID.`, params: [ + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'max_results', type: 'integer', @@ -1113,13 +1113,13 @@ export const tools: Tool[] = [ name: 'twitter_post_retweeters_get', description: `Retrieves users who publicly retweeted a specified public Post ID, excluding Quote Tweets and retweets from private accounts.`, params: [ + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'max_results', type: 'integer', @@ -1144,13 +1144,13 @@ export const tools: Tool[] = [ name: 'twitter_post_retweets_get', description: `Retrieves Tweets that Retweeted a specified public or authenticated-user-accessible Tweet ID. Optionally customize the response with fields and expansions.`, params: [ + { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Tweet ID` }, { name: 'max_results', type: 'integer', @@ -1211,18 +1211,18 @@ export const tools: Tool[] = [ name: 'twitter_posts_lookup', description: `Retrieves detailed information for one or more Posts (Tweets) identified by their unique IDs. Allows selection of specific fields and expansions.`, params: [ - { - name: 'expansions', - type: 'string', - required: false, - description: `Comma-separated expansions`, - }, { name: 'ids', type: 'string', required: true, description: `Comma-separated list of Tweet IDs (up to 100)`, }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, { name: 'media_fields', type: 'string', @@ -1247,6 +1247,12 @@ export const tools: Tool[] = [ name: 'twitter_recent_search', description: `Searches Tweets from the last 7 days matching a query using X's search syntax. Ideal for real-time analysis, trend monitoring, or retrieving posts from specific users (e.g., from:username). Note: impression_count returns 0 for other users' tweets — use retweet_count, like_count, or quote_count for engagement filtering instead.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query using X search syntax, e.g. from:username -is:retweet`, + }, { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, { name: 'expansions', @@ -1267,12 +1273,6 @@ export const tools: Tool[] = [ description: `Comma-separated media fields`, }, { name: 'next_token', type: 'string', required: false, description: `Next page token` }, - { - name: 'query', - type: 'string', - required: true, - description: `Search query using X search syntax, e.g. from:username -is:retweet`, - }, { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, { name: 'start_time', type: 'string', required: false, description: `ISO 8601 start time` }, { @@ -1294,6 +1294,7 @@ export const tools: Tool[] = [ name: 'twitter_recent_tweet_counts', description: `Retrieves the count of Tweets matching a specified search query within the last 7 days, aggregated by 'minute', 'hour', or 'day'.`, params: [ + { name: 'query', type: 'string', required: true, description: `Search query` }, { name: 'end_time', type: 'string', required: false, description: `ISO 8601 end time` }, { name: 'granularity', @@ -1301,7 +1302,6 @@ export const tools: Tool[] = [ required: false, description: `Aggregation granularity`, }, - { name: 'query', type: 'string', required: true, description: `Search query` }, { name: 'since_id', type: 'string', required: false, description: `Minimum tweet ID` }, { name: 'start_time', type: 'string', required: false, description: `ISO 8601 start time` }, { name: 'until_id', type: 'string', required: false, description: `Maximum tweet ID` }, @@ -1329,13 +1329,13 @@ export const tools: Tool[] = [ name: 'twitter_space_get', description: `Retrieves details for a Twitter Space by its ID, allowing for customization and expansion of related data.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, { name: 'space_fields', type: 'string', @@ -1354,13 +1354,13 @@ export const tools: Tool[] = [ name: 'twitter_space_posts_get', description: `Retrieves Tweets that were shared/posted during a Twitter Space broadcast. Returns Tweets that participants explicitly shared during the Space session, NOT audio transcripts. Most Spaces have zero associated Tweets — empty results are normal.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, { name: 'max_results', type: 'integer', @@ -1379,13 +1379,13 @@ export const tools: Tool[] = [ name: 'twitter_space_ticket_buyers_get', description: `Retrieves a list of users who purchased tickets for a specific, valid, and ticketed Twitter Space.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter Space ID` }, { name: 'user_fields', type: 'string', @@ -1398,6 +1398,12 @@ export const tools: Tool[] = [ name: 'twitter_spaces_by_creator_get', description: `Retrieves Twitter Spaces created by a list of specified User IDs, with options to customize returned data fields.`, params: [ + { + name: 'user_ids', + type: 'string', + required: true, + description: `Comma-separated list of user IDs to get spaces for`, + }, { name: 'expansions', type: 'string', @@ -1416,30 +1422,24 @@ export const tools: Tool[] = [ required: false, description: `Comma-separated user fields`, }, - { - name: 'user_ids', - type: 'string', - required: true, - description: `Comma-separated list of user IDs to get spaces for`, - }, ], }, { name: 'twitter_spaces_get', description: `Fetches detailed information for one or more Twitter Spaces (live, scheduled, or ended) by their unique IDs. At least one Space ID must be provided.`, params: [ - { - name: 'expansions', - type: 'string', - required: false, - description: `Comma-separated expansions`, - }, { name: 'ids', type: 'string', required: true, description: `Comma-separated list of Space IDs`, }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, { name: 'space_fields', type: 'string', @@ -1458,6 +1458,12 @@ export const tools: Tool[] = [ name: 'twitter_spaces_search', description: `Searches for Twitter Spaces by a textual query. Optionally filter by state (live, scheduled, all) to discover audio conversations.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Text to search for in Space titles`, + }, { name: 'expansions', type: 'string', @@ -1470,12 +1476,6 @@ export const tools: Tool[] = [ required: false, description: `Max results per page (1-100)`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Text to search for in Space titles`, - }, { name: 'space_fields', type: 'string', @@ -1549,13 +1549,13 @@ export const tools: Tool[] = [ name: 'twitter_user_followed_lists_get', description: `Returns metadata (not Tweets) for lists a specific Twitter user follows. Optionally includes expanded owner details.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'list_fields', type: 'string', @@ -1586,13 +1586,13 @@ export const tools: Tool[] = [ name: 'twitter_user_liked_tweets_get', description: `Retrieves Tweets liked by a specified Twitter user, provided their liked tweets are public or accessible.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'max_results', type: 'integer', @@ -1623,13 +1623,13 @@ export const tools: Tool[] = [ name: 'twitter_user_list_memberships_get', description: `Retrieves all Twitter Lists a specified user is a member of, including public Lists and private Lists the authenticated user is authorized to view.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'list_fields', type: 'string', @@ -1660,13 +1660,13 @@ export const tools: Tool[] = [ name: 'twitter_user_lookup', description: `Retrieves detailed public information for a Twitter user by their ID. Optionally expand related data (e.g., pinned tweets) and specify particular user or tweet fields to return.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'tweet_fields', type: 'string', @@ -1685,6 +1685,12 @@ export const tools: Tool[] = [ name: 'twitter_user_lookup_by_username', description: `Fetches public profile information for a valid and existing Twitter user by their username. Optionally expands related data like pinned Tweets. Results may be limited for protected profiles not followed by the authenticated user.`, params: [ + { + name: 'username', + type: 'string', + required: true, + description: `Twitter username without the @ symbol, e.g. elonmusk`, + }, { name: 'expansions', type: 'string', @@ -1703,12 +1709,6 @@ export const tools: Tool[] = [ required: false, description: `Comma-separated user fields`, }, - { - name: 'username', - type: 'string', - required: true, - description: `Twitter username without the @ symbol, e.g. elonmusk`, - }, ], }, { @@ -1757,13 +1757,13 @@ export const tools: Tool[] = [ name: 'twitter_user_owned_lists_get', description: `Retrieves Lists created (owned) by a specific Twitter user, not Lists they follow or are subscribed to.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'list_fields', type: 'string', @@ -1794,13 +1794,13 @@ export const tools: Tool[] = [ name: 'twitter_user_pinned_lists_get', description: `Retrieves the Lists a specific, existing Twitter user has pinned to their profile to highlight them.`, params: [ + { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'expansions', type: 'string', required: false, description: `Comma-separated expansions`, }, - { name: 'id', type: 'string', required: true, description: `Twitter user ID` }, { name: 'list_fields', type: 'string', @@ -1819,6 +1819,12 @@ export const tools: Tool[] = [ name: 'twitter_user_timeline_get', description: `Retrieves the home timeline (reverse chronological feed) for the authenticated Twitter user. Returns tweets from accounts the user follows and the user's own tweets. CRITICAL: The id parameter MUST be the authenticated user's own numeric Twitter user ID. Use twitter_user_me to get your ID first. Cannot fetch another user's home timeline.`, params: [ + { + name: 'id', + type: 'string', + required: true, + description: `Authenticated user's own numeric Twitter ID — must be your own ID`, + }, { name: 'exclude', type: 'string', @@ -1831,12 +1837,6 @@ export const tools: Tool[] = [ required: false, description: `Comma-separated expansions`, }, - { - name: 'id', - type: 'string', - required: true, - description: `Authenticated user's own numeric Twitter ID — must be your own ID`, - }, { name: 'max_results', type: 'integer', @@ -1903,18 +1903,18 @@ export const tools: Tool[] = [ name: 'twitter_users_lookup', description: `Retrieves detailed information for specified X (formerly Twitter) user IDs. Optionally customize returned fields and expand related entities like pinned tweets.`, params: [ - { - name: 'expansions', - type: 'string', - required: false, - description: `Comma-separated expansions`, - }, { name: 'ids', type: 'string', required: true, description: `Comma-separated list of Twitter user IDs (up to 100)`, }, + { + name: 'expansions', + type: 'string', + required: false, + description: `Comma-separated expansions`, + }, { name: 'tweet_fields', type: 'string', @@ -1933,6 +1933,12 @@ export const tools: Tool[] = [ name: 'twitter_users_lookup_by_username', description: `Retrieves detailed information for 1 to 100 Twitter users by their usernames (each 1-15 alphanumeric characters/underscores). Allows customizable user/tweet fields and expansion of related data like pinned tweets.`, params: [ + { + name: 'usernames', + type: 'string', + required: true, + description: `Comma-separated list of Twitter usernames without @ symbols (up to 100)`, + }, { name: 'expansions', type: 'string', @@ -1951,12 +1957,6 @@ export const tools: Tool[] = [ required: false, description: `Comma-separated user fields`, }, - { - name: 'usernames', - type: 'string', - required: true, - description: `Comma-separated list of Twitter usernames without @ symbols (up to 100)`, - }, ], }, ] diff --git a/src/data/agent-connectors/vercel.ts b/src/data/agent-connectors/vercel.ts index ddb09a171..71bfebc5f 100644 --- a/src/data/agent-connectors/vercel.ts +++ b/src/data/agent-connectors/vercel.ts @@ -102,13 +102,13 @@ export const tools: Tool[] = [ required: true, description: `The deployment ID to create a check for.`, }, + { name: 'name', type: 'string', required: true, description: `Display name for the check.` }, { name: 'detailsUrl', type: 'string', required: false, description: `URL where users can view check details.`, }, - { name: 'name', type: 'string', required: true, description: `Display name for the check.` }, { name: 'team_id', type: 'string', @@ -122,18 +122,18 @@ export const tools: Tool[] = [ description: `Updates the status and conclusion of a deployment check. Used to report check results back to Vercel.`, params: [ { name: 'check_id', type: 'string', required: true, description: `The check ID to update.` }, - { - name: 'conclusion', - type: 'string', - required: false, - description: `Check conclusion: succeeded, failed, skipped, canceled.`, - }, { name: 'deployment_id', type: 'string', required: true, description: `The deployment ID the check belongs to.`, }, + { + name: 'conclusion', + type: 'string', + required: false, + description: `Check conclusion: succeeded, failed, skipped, canceled.`, + }, { name: 'detailsUrl', type: 'string', @@ -212,13 +212,13 @@ export const tools: Tool[] = [ name: 'vercel_deployment_create', description: `Creates a new Vercel deployment for a project, optionally from a Git ref or with inline files.`, params: [ + { name: 'name', type: 'string', required: true, description: `The project name to deploy.` }, { name: 'git_source', type: 'string', required: false, description: `JSON object with Git source info, e.g. {"type":"github","ref":"main","repoId":"123"}.`, }, - { name: 'name', type: 'string', required: true, description: `The project name to deploy.` }, { name: 'target', type: 'string', @@ -351,30 +351,12 @@ export const tools: Tool[] = [ required: true, description: `The domain to create the DNS record for.`, }, - { - name: 'mx_priority', - type: 'integer', - required: false, - description: `Priority for MX records.`, - }, { name: 'name', type: 'string', required: true, description: `Subdomain name, or empty string for root domain.`, }, - { - name: 'team_id', - type: 'string', - required: false, - description: `Team ID if the domain belongs to a team.`, - }, - { - name: 'ttl', - type: 'integer', - required: false, - description: `Time-to-live in seconds. Default is 60.`, - }, { name: 'type', type: 'string', @@ -387,6 +369,24 @@ export const tools: Tool[] = [ required: true, description: `The record value (IP address, hostname, text, etc.).`, }, + { + name: 'mx_priority', + type: 'integer', + required: false, + description: `Priority for MX records.`, + }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the domain belongs to a team.`, + }, + { + name: 'ttl', + type: 'integer', + required: false, + description: `Time-to-live in seconds. Default is 60.`, + }, ], }, { @@ -665,18 +665,18 @@ export const tools: Tool[] = [ required: true, description: `The Edge Config store ID.`, }, - { - name: 'team_id', - type: 'string', - required: false, - description: `Team ID if the Edge Config belongs to a team.`, - }, { name: 'tokens', type: 'string', required: true, description: `JSON array of token IDs to delete.`, }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the Edge Config belongs to a team.`, + }, ], }, { @@ -720,6 +720,12 @@ export const tools: Tool[] = [ description: `The project ID or name.`, }, { name: 'key', type: 'string', required: true, description: `The environment variable key.` }, + { + name: 'value', + type: 'string', + required: true, + description: `The environment variable value.`, + }, { name: 'target', type: 'string', @@ -738,12 +744,6 @@ export const tools: Tool[] = [ required: false, description: `Variable type: plain or secret. Default is plain.`, }, - { - name: 'value', - type: 'string', - required: true, - description: `The environment variable value.`, - }, ], }, { @@ -810,18 +810,18 @@ export const tools: Tool[] = [ name: 'vercel_env_vars_list', description: `Returns all environment variables for a Vercel project, including their targets (production, preview, development) and encryption status.`, params: [ - { - name: 'decrypt', - type: 'boolean', - required: false, - description: `If true, returns decrypted values for sensitive variables.`, - }, { name: 'id_or_name', type: 'string', required: true, description: `The project ID or name.`, }, + { + name: 'decrypt', + type: 'boolean', + required: false, + description: `If true, returns decrypted values for sensitive variables.`, + }, { name: 'team_id', type: 'string', @@ -834,6 +834,7 @@ export const tools: Tool[] = [ name: 'vercel_project_create', description: `Creates a new Vercel project with a given name, framework, and optional Git repository.`, params: [ + { name: 'name', type: 'string', required: true, description: `The name of the project.` }, { name: 'framework', type: 'string', @@ -846,7 +847,6 @@ export const tools: Tool[] = [ required: false, description: `JSON object with 'type' (github/gitlab/bitbucket) and 'repo' (owner/name) fields.`, }, - { name: 'name', type: 'string', required: true, description: `The name of the project.` }, { name: 'root_directory', type: 'string', @@ -883,12 +883,6 @@ export const tools: Tool[] = [ name: 'vercel_project_domain_add', description: `Assigns a domain to a Vercel project with an optional redirect target.`, params: [ - { - name: 'git_branch', - type: 'string', - required: false, - description: `Git branch to associate this domain with for preview deployments.`, - }, { name: 'id_or_name', type: 'string', @@ -901,6 +895,12 @@ export const tools: Tool[] = [ required: true, description: `The domain name to assign to the project.`, }, + { + name: 'git_branch', + type: 'string', + required: false, + description: `Git branch to associate this domain with for preview deployments.`, + }, { name: 'redirect', type: 'string', @@ -985,6 +985,12 @@ export const tools: Tool[] = [ name: 'vercel_project_update', description: `Updates a Vercel project's name, framework, build command, output directory, or other settings.`, params: [ + { + name: 'id_or_name', + type: 'string', + required: true, + description: `The project ID or name to update.`, + }, { name: 'build_command', type: 'string', @@ -997,12 +1003,6 @@ export const tools: Tool[] = [ required: false, description: `Framework preset to apply.`, }, - { - name: 'id_or_name', - type: 'string', - required: true, - description: `The project ID or name to update.`, - }, { name: 'install_command', type: 'string', @@ -1058,13 +1058,13 @@ export const tools: Tool[] = [ name: 'vercel_team_create', description: `Creates a new Vercel team with the specified slug and optional name.`, params: [ - { name: 'name', type: 'string', required: false, description: `Display name for the team.` }, { name: 'slug', type: 'string', required: true, description: `A unique URL-friendly identifier for the team.`, }, + { name: 'name', type: 'string', required: false, description: `Display name for the team.` }, ], }, { @@ -1096,13 +1096,13 @@ export const tools: Tool[] = [ required: true, description: `Email address of the user to invite.`, }, + { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, { name: 'role', type: 'string', required: false, description: `Role to assign: OWNER, MEMBER, VIEWER, DEVELOPER, BILLING.`, }, - { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, ], }, { @@ -1122,6 +1122,7 @@ export const tools: Tool[] = [ name: 'vercel_team_members_list', description: `Returns all members of a Vercel team including their roles and join dates.`, params: [ + { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, { name: 'limit', type: 'integer', @@ -1140,13 +1141,18 @@ export const tools: Tool[] = [ required: false, description: `Timestamp in ms to fetch members joined after this time.`, }, - { name: 'team_id', type: 'string', required: true, description: `The team ID or slug.` }, ], }, { name: 'vercel_team_update', description: `Updates a Vercel team's name, slug, description, or other settings.`, params: [ + { + name: 'team_id', + type: 'string', + required: true, + description: `The team ID or slug to update.`, + }, { name: 'description', type: 'string', @@ -1165,12 +1171,6 @@ export const tools: Tool[] = [ required: false, description: `New URL-friendly slug for the team.`, }, - { - name: 'team_id', - type: 'string', - required: true, - description: `The team ID or slug to update.`, - }, ], }, { @@ -1212,6 +1212,12 @@ export const tools: Tool[] = [ required: true, description: `JSON array of event types to subscribe to, e.g. ["deployment.created","deployment.succeeded"].`, }, + { + name: 'url', + type: 'string', + required: true, + description: `The HTTPS endpoint URL to receive webhook payloads.`, + }, { name: 'project_ids', type: 'string', @@ -1224,43 +1230,37 @@ export const tools: Tool[] = [ required: false, description: `Team ID to create the webhook for.`, }, - { - name: 'url', - type: 'string', - required: true, - description: `The HTTPS endpoint URL to receive webhook payloads.`, - }, ], }, { name: 'vercel_webhook_delete', description: `Permanently deletes a Vercel webhook.`, params: [ - { - name: 'team_id', - type: 'string', - required: false, - description: `Team ID if the webhook belongs to a team.`, - }, { name: 'webhook_id', type: 'string', required: true, description: `The webhook ID to delete.`, }, + { + name: 'team_id', + type: 'string', + required: false, + description: `Team ID if the webhook belongs to a team.`, + }, ], }, { name: 'vercel_webhook_get', description: `Returns details of a specific Vercel webhook by its ID.`, params: [ + { name: 'webhook_id', type: 'string', required: true, description: `The webhook ID.` }, { name: 'team_id', type: 'string', required: false, description: `Team ID if the webhook belongs to a team.`, }, - { name: 'webhook_id', type: 'string', required: true, description: `The webhook ID.` }, ], }, { diff --git a/src/data/agent-connectors/vimeo.ts b/src/data/agent-connectors/vimeo.ts index a77ef6da2..577177620 100644 --- a/src/data/agent-connectors/vimeo.ts +++ b/src/data/agent-connectors/vimeo.ts @@ -101,14 +101,14 @@ export const tools: Tool[] = [ name: 'vimeo_folder_videos_list', description: `Retrieve all videos inside a specific Vimeo folder (project). Requires private scope.`, params: [ - { name: 'direction', type: 'string', required: false, description: `Sort direction` }, - { name: 'filter', type: 'string', required: false, description: `Filter videos by type` }, { name: 'folder_id', type: 'string', required: true, description: `Folder (project) ID to list videos from`, }, + { name: 'direction', type: 'string', required: false, description: `Sort direction` }, + { name: 'filter', type: 'string', required: false, description: `Filter videos by type` }, { name: 'page', type: 'integer', required: false, description: `Page number of results` }, { name: 'per_page', @@ -236,6 +236,7 @@ export const tools: Tool[] = [ name: 'vimeo_showcase_create', description: `Create a new showcase (album) on Vimeo for organizing videos. Supports privacy, password protection, branding, and embed settings. Requires create scope.`, params: [ + { name: 'name', type: 'string', required: true, description: `Name/title of the showcase` }, { name: 'brand_color', type: 'string', @@ -260,7 +261,6 @@ export const tools: Tool[] = [ required: false, description: `Whether to hide upcoming live events in the showcase`, }, - { name: 'name', type: 'string', required: true, description: `Name/title of the showcase` }, { name: 'password', type: 'string', @@ -365,6 +365,7 @@ export const tools: Tool[] = [ name: 'vimeo_user_videos_list', description: `Retrieve all public videos uploaded by a specific Vimeo user. Supports filtering and pagination. Requires public scope.`, params: [ + { name: 'user_id', type: 'string', required: true, description: `Vimeo user ID or username` }, { name: 'direction', type: 'string', required: false, description: `Sort direction` }, { name: 'filter', @@ -391,7 +392,6 @@ export const tools: Tool[] = [ required: false, description: `Sort order for video results`, }, - { name: 'user_id', type: 'string', required: true, description: `Vimeo user ID or username` }, ], }, { @@ -411,6 +411,12 @@ export const tools: Tool[] = [ name: 'vimeo_video_comments_list', description: `Retrieve all comments posted on a specific Vimeo video. Requires public scope.`, params: [ + { + name: 'video_id', + type: 'string', + required: true, + description: `Vimeo video ID to list comments from`, + }, { name: 'direction', type: 'string', required: false, description: `Sort direction` }, { name: 'page', type: 'integer', required: false, description: `Page number of results` }, { @@ -419,12 +425,6 @@ export const tools: Tool[] = [ required: false, description: `Number of comments per page`, }, - { - name: 'video_id', - type: 'string', - required: true, - description: `Vimeo video ID to list comments from`, - }, ], }, { @@ -438,6 +438,7 @@ export const tools: Tool[] = [ name: 'vimeo_video_edit', description: `Update the metadata of an existing Vimeo video including title, description, privacy settings, tags, and content rating. Requires edit scope.`, params: [ + { name: 'video_id', type: 'string', required: true, description: `Vimeo video ID to edit` }, { name: 'content_rating', type: 'string', @@ -493,7 +494,6 @@ export const tools: Tool[] = [ required: false, description: `Who can view the video`, }, - { name: 'video_id', type: 'string', required: true, description: `Vimeo video ID to edit` }, ], }, { @@ -524,6 +524,7 @@ export const tools: Tool[] = [ name: 'vimeo_videos_search', description: `Search for public videos on Vimeo using keywords and filters. Returns paginated video results with metadata. Requires a valid Vimeo OAuth2 connection with public scope.`, params: [ + { name: 'query', type: 'string', required: true, description: `Search query keywords` }, { name: 'direction', type: 'string', @@ -548,7 +549,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results to return per page`, }, - { name: 'query', type: 'string', required: true, description: `Search query keywords` }, { name: 'sort', type: 'string', diff --git a/src/data/agent-connectors/youtube.ts b/src/data/agent-connectors/youtube.ts index 08921c703..de2ee4a9d 100644 --- a/src/data/agent-connectors/youtube.ts +++ b/src/data/agent-connectors/youtube.ts @@ -11,18 +11,18 @@ export const tools: Tool[] = [ required: true, description: `Type of items the group will contain`, }, - { - name: 'on_behalf_of_content_owner', - type: 'string', - required: false, - description: `Content owner ID. For content partners only.`, - }, { name: 'title', type: 'string', required: true, description: `Title of the analytics group`, }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID. For content partners only.`, + }, ], }, { @@ -35,12 +35,6 @@ export const tools: Tool[] = [ required: true, description: `ID of the Analytics group to add the item to`, }, - { - name: 'on_behalf_of_content_owner', - type: 'string', - required: false, - description: `Content owner ID. For content partners only.`, - }, { name: 'resource_id', type: 'string', @@ -53,6 +47,12 @@ export const tools: Tool[] = [ required: true, description: `Type of the resource`, }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID. For content partners only.`, + }, ], }, { @@ -144,24 +144,48 @@ export const tools: Tool[] = [ required: true, description: `ID of the Analytics group to update`, }, - { - name: 'on_behalf_of_content_owner', - type: 'string', - required: false, - description: `Content owner ID. For content partners only.`, - }, { name: 'title', type: 'string', required: true, description: `New title for the Analytics group`, }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID. For content partners only.`, + }, ], }, { name: 'youtube_analytics_query', description: `Query YouTube Analytics data to retrieve metrics like views, watch time, subscribers, revenue, etc. for channels or content owners.`, params: [ + { + name: 'end_date', + type: 'string', + required: true, + description: `End date for the analytics report in YYYY-MM-DD format`, + }, + { + name: 'ids', + type: 'string', + required: true, + description: `Channel or content owner ID. Format: channel==CHANNEL_ID or contentOwner==CONTENT_OWNER_ID`, + }, + { + name: 'metrics', + type: 'string', + required: true, + description: `Comma-separated list of metrics to retrieve (e.g., views,estimatedMinutesWatched,likes,subscribersGained)`, + }, + { + name: 'start_date', + type: 'string', + required: true, + description: `Start date for the analytics report in YYYY-MM-DD format`, + }, { name: 'currency', type: 'string', @@ -174,24 +198,12 @@ export const tools: Tool[] = [ required: false, description: `Comma-separated list of dimensions to group results by (e.g., day,country,video)`, }, - { - name: 'end_date', - type: 'string', - required: true, - description: `End date for the analytics report in YYYY-MM-DD format`, - }, { name: 'filters', type: 'string', required: false, description: `Filter expression to narrow results (e.g., country==US, video==VIDEO_ID)`, }, - { - name: 'ids', - type: 'string', - required: true, - description: `Channel or content owner ID. Format: channel==CHANNEL_ID or contentOwner==CONTENT_OWNER_ID`, - }, { name: 'include_historical_channel_data', type: 'boolean', @@ -204,24 +216,12 @@ export const tools: Tool[] = [ required: false, description: `Maximum number of rows to return in the response (maximum value: 200)`, }, - { - name: 'metrics', - type: 'string', - required: true, - description: `Comma-separated list of metrics to retrieve (e.g., views,estimatedMinutesWatched,likes,subscribersGained)`, - }, { name: 'sort', type: 'string', required: false, description: `Comma-separated list of columns to sort by. Prefix with - for descending order (e.g., -views)`, }, - { - name: 'start_date', - type: 'string', - required: true, - description: `Start date for the analytics report in YYYY-MM-DD format`, - }, { name: 'start_index', type: 'integer', @@ -234,24 +234,30 @@ export const tools: Tool[] = [ name: 'youtube_captions_list', description: `Retrieve a list of caption tracks for a YouTube video. The part parameter is fixed to 'snippet'. Requires youtube.force-ssl scope.`, params: [ - { - name: 'id', - type: 'string', - required: false, - description: `Comma-separated list of caption track IDs to filter results`, - }, { name: 'video_id', type: 'string', required: true, description: `ID of the video to list captions for`, }, + { + name: 'id', + type: 'string', + required: false, + description: `Comma-separated list of caption track IDs to filter results`, + }, ], }, { name: 'youtube_channels_list', description: `Retrieve information about one or more YouTube channels including subscriber count, video count, and channel metadata. You must provide exactly one filter: id, mine, for_handle, for_username, or managed_by_me. Requires a valid YouTube OAuth2 connection.`, params: [ + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of channel resource parts to include in the response`, + }, { name: 'for_handle', type: 'string', @@ -289,12 +295,6 @@ export const tools: Tool[] = [ description: `Return the authenticated user's channel. Use instead of id, for_handle, or for_username.`, }, { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, - { - name: 'part', - type: 'string', - required: true, - description: `Comma-separated list of channel resource parts to include in the response`, - }, ], }, { @@ -314,6 +314,12 @@ export const tools: Tool[] = [ name: 'youtube_comment_threads_list', description: `Retrieve top-level comment threads for a YouTube video or channel. You must provide exactly one filter: video_id, all_threads_related_to_channel_id, or id. Each thread includes the top-level comment and optionally its replies. Requires a valid YouTube OAuth2 connection.`, params: [ + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of comment thread resource parts to include`, + }, { name: 'all_threads_related_to_channel_id', type: 'string', @@ -339,12 +345,6 @@ export const tools: Tool[] = [ description: `Sort order for comment threads`, }, { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, - { - name: 'part', - type: 'string', - required: true, - description: `Comma-separated list of comment thread resource parts to include`, - }, { name: 'search_terms', type: 'string', @@ -411,6 +411,7 @@ export const tools: Tool[] = [ name: 'youtube_playlist_insert', description: `Create a new YouTube playlist for the authenticated user. Requires youtube scope.`, params: [ + { name: 'title', type: 'string', required: true, description: `Playlist title` }, { name: 'default_language', type: 'string', @@ -420,7 +421,6 @@ export const tools: Tool[] = [ { name: 'description', type: 'string', required: false, description: `Playlist description` }, { name: 'privacy_status', type: 'string', required: false, description: `Privacy setting` }, { name: 'tags', type: 'array', required: false, description: `Tags for the playlist` }, - { name: 'title', type: 'string', required: true, description: `Playlist title` }, ], }, { @@ -439,43 +439,31 @@ export const tools: Tool[] = [ name: 'youtube_playlist_items_insert', description: `Add a video to a YouTube playlist at an optional position. Requires youtube scope.`, params: [ - { - name: 'note', - type: 'string', - required: false, - description: `Optional note for this playlist item`, - }, { name: 'playlist_id', type: 'string', required: true, description: `Playlist to add the video to`, }, + { name: 'video_id', type: 'string', required: true, description: `YouTube video ID to add` }, + { + name: 'note', + type: 'string', + required: false, + description: `Optional note for this playlist item`, + }, { name: 'position', type: 'integer', required: false, description: `Zero-based position in the playlist. Omit to add at end.`, }, - { name: 'video_id', type: 'string', required: true, description: `YouTube video ID to add` }, ], }, { name: 'youtube_playlist_items_list', description: `Retrieve a list of videos in a YouTube playlist. Returns playlist items with video details, positions, and metadata. Requires a valid YouTube OAuth2 connection.`, params: [ - { - name: 'max_results', - type: 'integer', - required: false, - description: `Maximum number of playlist items to return (0-50, default: 5)`, - }, - { - name: 'page_token', - type: 'string', - required: false, - description: `Token for pagination to retrieve the next page`, - }, { name: 'part', type: 'string', @@ -488,6 +476,18 @@ export const tools: Tool[] = [ required: true, description: `YouTube playlist ID to retrieve items from`, }, + { + name: 'max_results', + type: 'integer', + required: false, + description: `Maximum number of playlist items to return (0-50, default: 5)`, + }, + { + name: 'page_token', + type: 'string', + required: false, + description: `Token for pagination to retrieve the next page`, + }, { name: 'video_id', type: 'string', @@ -500,6 +500,12 @@ export const tools: Tool[] = [ name: 'youtube_playlist_update', description: `Update an existing YouTube playlist's title, description, privacy status, or default language. Requires youtube scope.`, params: [ + { + name: 'playlist_id', + type: 'string', + required: true, + description: `ID of the playlist to update`, + }, { name: 'default_language', type: 'string', @@ -512,12 +518,6 @@ export const tools: Tool[] = [ required: false, description: `New playlist description`, }, - { - name: 'playlist_id', - type: 'string', - required: true, - description: `ID of the playlist to update`, - }, { name: 'privacy_status', type: 'string', @@ -531,6 +531,12 @@ export const tools: Tool[] = [ name: 'youtube_playlists_list', description: `Retrieve a list of YouTube playlists for a channel or the authenticated user. You must provide exactly one filter: channel_id, id, or mine. Requires a valid YouTube OAuth2 connection.`, params: [ + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of playlist resource parts to include`, + }, { name: 'channel_id', type: 'string', @@ -556,12 +562,6 @@ export const tools: Tool[] = [ description: `Return playlists owned by the authenticated user. Use instead of channel_id or id.`, }, { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, - { - name: 'part', - type: 'string', - required: true, - description: `Comma-separated list of playlist resource parts to include`, - }, ], }, { @@ -574,18 +574,18 @@ export const tools: Tool[] = [ required: true, description: `Human-readable name for the reporting job`, }, - { - name: 'on_behalf_of_content_owner', - type: 'string', - required: false, - description: `Content owner ID on whose behalf the job is being created`, - }, { name: 'report_type_id', type: 'string', required: true, description: `ID of the report type to generate (e.g., channel_basic_a2, channel_demographics_a1)`, }, + { + name: 'on_behalf_of_content_owner', + type: 'string', + required: false, + description: `Content owner ID on whose behalf the job is being created`, + }, ], }, { @@ -670,18 +670,18 @@ export const tools: Tool[] = [ name: 'youtube_reporting_list_reports', description: `List reports that have been generated for a YouTube reporting job. Each report is a downloadable CSV file.`, params: [ - { - name: 'created_after', - type: 'string', - required: false, - description: `Only return reports created after this timestamp (RFC3339 format, e.g., 2024-01-01T00:00:00Z)`, - }, { name: 'job_id', type: 'string', required: true, description: `ID of the reporting job whose reports to list`, }, + { + name: 'created_after', + type: 'string', + required: false, + description: `Only return reports created after this timestamp (RFC3339 format, e.g., 2024-01-01T00:00:00Z)`, + }, { name: 'on_behalf_of_content_owner', type: 'string', @@ -803,6 +803,12 @@ export const tools: Tool[] = [ name: 'youtube_subscriptions_list', description: `Retrieve a list of YouTube channel subscriptions for the authenticated user or a specific channel. You must provide exactly one filter: channel_id, id, mine, my_recent_subscribers, or my_subscribers. Requires a valid YouTube OAuth2 connection with youtube.readonly scope.`, params: [ + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of subscription resource parts to include`, + }, { name: 'channel_id', type: 'string', @@ -852,12 +858,6 @@ export const tools: Tool[] = [ description: `Sort order for subscriptions`, }, { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, - { - name: 'part', - type: 'string', - required: true, - description: `Comma-separated list of subscription resource parts to include`, - }, ], }, { @@ -912,6 +912,12 @@ export const tools: Tool[] = [ name: 'youtube_videos_list', description: `Retrieve detailed information about one or more YouTube videos including statistics, snippet, content details, and status. You must provide exactly one filter: id, chart, or my_rating. Requires a valid YouTube OAuth2 connection.`, params: [ + { + name: 'part', + type: 'string', + required: true, + description: `Comma-separated list of video resource parts to include in the response`, + }, { name: 'chart', type: 'string', @@ -937,12 +943,6 @@ export const tools: Tool[] = [ description: `Filter videos by the authenticated user's rating. Use instead of id or chart.`, }, { name: 'page_token', type: 'string', required: false, description: `Token for pagination` }, - { - name: 'part', - type: 'string', - required: true, - description: `Comma-separated list of video resource parts to include in the response`, - }, { name: 'region_code', type: 'string', @@ -974,6 +974,12 @@ export const tools: Tool[] = [ name: 'youtube_videos_update', description: `Update metadata for an existing YouTube video. When updating snippet, both title and category_id are required together. Requires youtube scope.`, params: [ + { + name: 'video_id', + type: 'string', + required: true, + description: `ID of the video to update`, + }, { name: 'category_id', type: 'string', @@ -1018,12 +1024,6 @@ export const tools: Tool[] = [ required: false, description: `New video title. Required together with category_id when updating snippet.`, }, - { - name: 'video_id', - type: 'string', - required: true, - description: `ID of the video to update`, - }, ], }, ] diff --git a/src/data/agent-connectors/zendesk.ts b/src/data/agent-connectors/zendesk.ts index 4459ab847..643ab5bb6 100644 --- a/src/data/agent-connectors/zendesk.ts +++ b/src/data/agent-connectors/zendesk.ts @@ -18,18 +18,18 @@ export const tools: Tool[] = [ name: 'zendesk_organization_get', description: `Retrieve details of a specific Zendesk organization by ID. Returns organization name, domain names, tags, notes, shared ticket settings, and custom fields.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Additional related data to include (e.g., lookup_relationship_fields)`, - }, { name: 'organization_id', type: 'number', required: true, description: `The ID of the organization to retrieve`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Additional related data to include (e.g., lookup_relationship_fields)`, + }, ], }, { @@ -49,6 +49,12 @@ export const tools: Tool[] = [ name: 'zendesk_search_tickets', description: `Search Zendesk tickets using a query string. Supports Zendesk's search syntax (e.g., 'type:ticket status:open'). Zendesk limits search results to 1,000 total — the maximum valid page is floor(1000 / per_page) (e.g., per_page=100 → max page 10, per_page=25 → max page 40). Stop paginating when next_page is null or you reach the max page; requesting beyond the limit returns a 400 error.`, params: [ + { + name: 'query', + type: 'string', + required: true, + description: `Search query string using Zendesk search syntax (e.g., 'type:ticket status:open assignee:me')`, + }, { name: 'page', type: 'number', @@ -61,12 +67,6 @@ export const tools: Tool[] = [ required: false, description: `Number of results per page (max 100). Determines the max page ceiling: floor(1000 / per_page). Higher values mean fewer pages but a lower max page number.`, }, - { - name: 'query', - type: 'string', - required: true, - description: `Search query string using Zendesk search syntax (e.g., 'type:ticket status:open assignee:me')`, - }, { name: 'sort_by', type: 'string', @@ -85,12 +85,6 @@ export const tools: Tool[] = [ name: 'zendesk_side_conversation_get', description: `Retrieve a specific side conversation on a Zendesk ticket by its ID. Returns the side conversation's state, subject, participants, preview text, and timestamps. Requires the Collaboration add-on.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history of the side conversation.`, - }, { name: 'side_conversation_id', type: 'string', @@ -103,30 +97,42 @@ export const tools: Tool[] = [ required: true, description: `The ID of the parent ticket`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history of the side conversation.`, + }, ], }, { name: 'zendesk_side_conversations_list', description: `List all side conversations on a Zendesk ticket. Returns side conversations including their state, subject, participants, and preview text. Requires the Collaboration add-on.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history for each side conversation.`, - }, { name: 'ticket_id', type: 'number', required: true, description: `The ID of the ticket whose side conversations to list`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Sideloads to include alongside the response. Use 'side_conversation_events' to include the full event history for each side conversation.`, + }, ], }, { name: 'zendesk_ticket_comments_list', description: `Retrieve all comments (public replies and internal notes) for a specific Zendesk ticket. Returns comment body, author, timestamps, and attachments.`, params: [ + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket whose comments to list`, + }, { name: 'include', type: 'string', @@ -145,30 +151,24 @@ export const tools: Tool[] = [ required: false, description: `Sort direction for comments: asc or desc (default: asc)`, }, - { - name: 'ticket_id', - type: 'number', - required: true, - description: `The ID of the ticket whose comments to list`, - }, ], }, { name: 'zendesk_ticket_create', description: `Create a new support ticket in Zendesk. Requires a comment/description and optionally a subject, priority, assignee, and tags.`, params: [ - { - name: 'assignee_email', - type: 'string', - required: false, - description: `Email of the agent to assign the ticket to`, - }, { name: 'comment_body', type: 'string', required: true, description: `The description or first comment of the ticket`, }, + { + name: 'assignee_email', + type: 'string', + required: false, + description: `Email of the agent to assign the ticket to`, + }, { name: 'priority', type: 'string', @@ -205,18 +205,18 @@ export const tools: Tool[] = [ name: 'zendesk_ticket_get', description: `Retrieve details of a specific Zendesk ticket by ID. Returns ticket properties including status, priority, subject, requester, assignee, and timestamps.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Comma-separated list of sideloads to include (e.g., users, groups, organizations)`, - }, { name: 'ticket_id', type: 'number', required: true, description: `The ID of the ticket to retrieve`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Comma-separated list of sideloads to include (e.g., users, groups, organizations)`, + }, ], }, { @@ -229,24 +229,30 @@ export const tools: Tool[] = [ required: true, description: `The reply message content (plain text, markdown supported)`, }, - { - name: 'public', - type: 'boolean', - required: false, - description: `Whether the comment is public (true) or an internal note (false). Defaults to true.`, - }, { name: 'ticket_id', type: 'number', required: true, description: `The ID of the ticket to reply to`, }, + { + name: 'public', + type: 'boolean', + required: false, + description: `Whether the comment is public (true) or an internal note (false). Defaults to true.`, + }, ], }, { name: 'zendesk_ticket_update', description: `Update an existing Zendesk ticket. Change status, priority, assignee, subject, tags, or any other writable ticket field.`, params: [ + { + name: 'ticket_id', + type: 'number', + required: true, + description: `The ID of the ticket to update`, + }, { name: 'assignee_email', type: 'string', @@ -289,12 +295,6 @@ export const tools: Tool[] = [ required: false, description: `List of tags to set on the ticket (replaces existing tags)`, }, - { - name: 'ticket_id', - type: 'number', - required: true, - description: `The ID of the ticket to update`, - }, { name: 'type', type: 'string', @@ -332,13 +332,13 @@ export const tools: Tool[] = [ name: 'zendesk_user_create', description: `Create a new user in Zendesk. Can create end-users (customers), agents, or admins. Email is required for end-users.`, params: [ + { name: 'name', type: 'string', required: true, description: `Full name of the user` }, { name: 'email', type: 'string', required: false, description: `Primary email address of the user`, }, - { name: 'name', type: 'string', required: true, description: `Full name of the user` }, { name: 'organization_id', type: 'number', @@ -369,18 +369,18 @@ export const tools: Tool[] = [ name: 'zendesk_user_get', description: `Retrieve details of a specific Zendesk user by ID. Returns user profile including name, email, role, organization, and account status.`, params: [ - { - name: 'include', - type: 'string', - required: false, - description: `Comma-separated list of sideloads to include`, - }, { name: 'user_id', type: 'number', required: true, description: `The ID of the user to retrieve`, }, + { + name: 'include', + type: 'string', + required: false, + description: `Comma-separated list of sideloads to include`, + }, ], }, { From 566c7b86f21f5f12461408234745cab6c990528c Mon Sep 17 00:00:00 2001 From: Ravi Madabhushi Date: Tue, 7 Apr 2026 19:00:41 +0530 Subject: [PATCH 18/23] feat(provider-catalog): drive catalog page from API data (icons, auth, categories) - sync-agent-connectors.js now generates src/data/agent-connectors/catalog.ts with iconUrl, authType, and categories per provider, sourced directly from the API - ProviderCatalog.astro replaces hardcoded CATEGORY_MAP, AUTH_MAP, and icon URL construction with imports from the generated catalog.ts - Categories are derived dynamically from the API; 'Other' is always placed last - Script variable renamed catalogEl to avoid shadowing the catalog import --- scripts/sync-agent-connectors.js | 46 ++- src/components/ProviderCatalog.astro | 108 ++---- .../docs/reference/agent-connectors/figma.mdx | 2 +- .../reference/agent-connectors/gitlab.mdx | 2 +- .../reference/agent-connectors/jiminny.mdx | 2 +- .../reference/agent-connectors/pagerduty.mdx | 2 +- .../reference/agent-connectors/pipedrive.mdx | 9 +- src/data/agent-connectors/catalog.ts | 351 ++++++++++++++++++ 8 files changed, 436 insertions(+), 86 deletions(-) create mode 100644 src/data/agent-connectors/catalog.ts diff --git a/scripts/sync-agent-connectors.js b/scripts/sync-agent-connectors.js index 4c23d5580..1be10a037 100644 --- a/scripts/sync-agent-connectors.js +++ b/scripts/sync-agent-connectors.js @@ -522,6 +522,45 @@ function escapeTemplateLiteral(str) { return (str || '').replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${') } +function resolveAuthType(authPatterns) { + const first = (authPatterns || [])[0] + if (!first) return 'OAuth 2.0' + const type = first.type || '' + if (type === 'OAUTH') return 'OAuth 2.0' + if (type === 'API_KEY') return 'API Key' + if (type === 'BEARER') return 'Bearer Token' + return first.display_name || 'OAuth 2.0' +} + +function generateCatalogFile(providers) { + const lines = [] + lines.push('// Auto-generated by sync-agent-connectors.js — do not edit manually') + lines.push('') + lines.push('export interface ProviderMeta {') + lines.push(' iconUrl: string') + lines.push(' authType: string') + lines.push(' categories: string[]') + lines.push('}') + lines.push('') + lines.push('export const catalog: Record = {') + + for (const provider of providers) { + const slug = toSafeIdentifier(provider.identifier || '') + const iconUrl = provider.icon_src || '' + const authType = resolveAuthType(provider.auth_patterns) + const categories = (provider.categories || []).map((c) => String(c)) + lines.push(` '${slug}': {`) + lines.push(` iconUrl: ${JSON.stringify(iconUrl)},`) + lines.push(` authType: ${JSON.stringify(authType)},`) + lines.push(` categories: ${JSON.stringify(categories)},`) + lines.push(` },`) + } + + lines.push('}') + lines.push('') + return lines.join('\n') +} + function generateTsDataFile(provider, tools) { const sortedTools = [...tools].sort((a, b) => (a.name || '').localeCompare(b.name || '')) const lines = [] @@ -766,10 +805,15 @@ async function main() { written++ } + const catalogContent = generateCatalogFile(providers) + const catalogPath = path.join(dataOutputDir, 'catalog.ts') + fs.writeFileSync(catalogPath, catalogContent, 'utf8') + console.log('✓ Written catalog.ts') + console.log(`\n📊 Summary:`) console.log(` Providers: ${providers.length}`) console.log(` Tools: ${tools.length}`) - console.log(` Files written: ${written} MDX + ${written} TS data`) + console.log(` Files written: ${written} MDX + ${written} TS data + catalog.ts`) console.log(` Orphans removed: ${removed}`) console.log(` MDX output: src/content/docs/reference/agent-connectors/`) console.log(` Data output: src/data/agent-connectors/`) diff --git a/src/components/ProviderCatalog.astro b/src/components/ProviderCatalog.astro index a275fdd9d..e5e243a65 100644 --- a/src/components/ProviderCatalog.astro +++ b/src/components/ProviderCatalog.astro @@ -1,5 +1,6 @@ --- import { getCollection } from 'astro:content' +import { catalog } from '@/data/agent-connectors/catalog' const connectors = await getCollection('docs', ({ id }) => id.startsWith('reference/agent-connectors/'), @@ -9,89 +10,36 @@ function getSlug(id: string): string { return id.replace(/\/$/, '').split('/').pop() ?? id } -const CATEGORY_MAP: Record = { - gmail: 'Google Workspace', - googledrive: 'Google Workspace', - googlecalendar: 'Google Workspace', - googlesheets: 'Google Workspace', - googledocs: 'Google Workspace', - googleslides: 'Google Workspace', - googlemeet: 'Google Workspace', - googleforms: 'Google Workspace', - google_ads: 'Google Workspace', - outlook: 'Microsoft 365', - onedrive: 'Microsoft 365', - microsoftword: 'Microsoft 365', - microsoftexcel: 'Microsoft 365', - microsoftteams: 'Microsoft 365', - sharepoint: 'Microsoft 365', - onenote: 'Microsoft 365', - slack: 'Communication', - discord: 'Communication', - zoom: 'Communication', - vimeo: 'Communication', - youtube: 'Communication', - intercom: 'Communication', - jira: 'Project Management', - linear: 'Project Management', - asana: 'Project Management', - monday: 'Project Management', - clickup: 'Project Management', - trello: 'Project Management', - notion: 'Project Management', - confluence: 'Project Management', - salesforce: 'CRM & Sales', - hubspot: 'CRM & Sales', - pipedrive: 'CRM & Sales', - apollo: 'CRM & Sales', - attio: 'CRM & Sales', - chorus: 'CRM & Sales', - gong: 'CRM & Sales', - attention: 'CRM & Sales', - github: 'Data & Dev', - gitlab: 'Data & Dev', - figma: 'Data & Dev', - snowflake: 'Data & Dev', - snowflakekeyauth: 'Data & Dev', - bigquery: 'Data & Dev', - dropbox: 'Data & Dev', -} - -const AUTH_MAP: Record = { - snowflakekeyauth: 'Bearer Token', - exa: 'API Key', - harvestapi: 'API Key', - 'brave-search': 'API Key', - figma: 'API Key', -} - -const CATEGORY_ORDER = [ - 'Google Workspace', - 'Microsoft 365', - 'Communication', - 'Project Management', - 'CRM & Sales', - 'Data & Dev', - 'Other', -] - const items = connectors.map((entry) => { const slug = getSlug(entry.id) + const meta = catalog[slug] + const categories = meta?.categories ?? [] return { slug, title: entry.data.title ?? slug, description: entry.data.description ?? '', href: `/${entry.id}/`, - category: CATEGORY_MAP[slug] ?? 'Other', - authType: AUTH_MAP[slug] ?? 'OAuth 2.0', - iconUrl: `https://cdn.scalekit.com/sk-connect/assets/provider-icons/${slug}.svg`, + categories: categories.length > 0 ? categories : ['Other'], + authType: meta?.authType ?? 'OAuth 2.0', + iconUrl: meta?.iconUrl ?? '', } }) -const grouped = CATEGORY_ORDER.map((cat) => ({ - name: cat, - items: items.filter((i) => i.category === cat).sort((a, b) => a.title.localeCompare(b.title)), -})).filter((g) => g.items.length > 0) +// Derive category order from catalog data; put 'Other' last +const allCategories = Array.from(new Set(items.flatMap((i) => i.categories))).sort((a, b) => { + if (a === 'Other') return 1 + if (b === 'Other') return -1 + return a.localeCompare(b) +}) + +const grouped = allCategories + .map((cat) => ({ + name: cat, + items: items + .filter((i) => i.categories.includes(cat)) + .sort((a, b) => a.title.localeCompare(b.title)), + })) + .filter((g) => g.items.length > 0) ---
@@ -158,16 +106,16 @@ const grouped = CATEGORY_ORDER.map((cat) => ({