diff --git a/AGENTS.md b/AGENTS.md index a461b6f..9be22a1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -45,7 +45,7 @@ Skills: Agents: `setup-auth.md`, `validate-mcp-auth.md` -Rules: `mcp-oauth-discovery.mdc`, `mcp-scope-authorization.mdc`, `mcp-secrets-hygiene.mdc`, `mcp-token-validation.mdc`, `no-secrets.mdc` +Rules: `mcp-oauth-discovery.mdc`, `mcp-scope-authorization.mdc`, `mcp-secrets-hygiene.mdc`, `mcp-token-validation.mdc` ### agent-auth diff --git a/plugins/agent-auth/agent-connectors/README.md b/plugins/agent-auth/agent-connectors/README.md deleted file mode 100644 index 807653a..0000000 --- a/plugins/agent-auth/agent-connectors/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# Agent Connectors Reference - -This directory contains documentation for all supported agent connectors in the Scalekit Agent Auth platform. - -## Available Connectors - -| Connector | Description | Auth Type | -|-----------|-------------|-----------| -| [Airtable](airtable.md) | Connect to Airtable bases for data management | OAuth 2.0 | -| [Asana](asana.md) | Project management and task tracking | OAuth 2.0 | -| [Attention](attention.md) | AI insights, conversations, teams, and workflows | API Key | -| [BigQuery](bigquery.md) | Google BigQuery data warehouse | OAuth 2.0 | -| [Chorus](chorus.md) | Sync calls, transcripts, conversation intelligence, and analytics | Basic Auth | -| [Clari Copilot](clari_copilot.md) | Sales call transcripts, analytics, call data, and insights | API Key | -| [ClickUp](clickup.md) | Project management and collaboration | OAuth 2.0 | -| [Confluence](confluence.md) | Atlassian Confluence wiki pages | OAuth 2.0 | -| [Dropbox](dropbox.md) | File storage and sharing | OAuth 2.0 | -| [Fathom](fathom.md) | Website analytics | OAuth 2.0 | -| [Freshdesk](freshdesk.md) | Customer support ticketing | OAuth 2.0 | -| [GitHub](github.md) | Code repository and development tools | OAuth 2.0 | -| [Gmail](gmail.md) | Google Gmail email service | OAuth 2.0 | -| [Google Ads](google_ads.md) | Google advertising platform | OAuth 2.0 | -| [Google Calendar](googlecalendar.md) | Google Calendar events and scheduling | OAuth 2.0 | -| [Google Docs](google_docs.md) | Google Docs document editing | OAuth 2.0 | -| [Google Drive](google_drive.md) | Google Drive file storage | OAuth 2.0 | -| [Google Forms](google_forms.md) | Google Forms survey creation | OAuth 2.0 | -| [Google Meet](google_meets.md) | Google Meet video conferencing | OAuth 2.0 | -| [Google Sheets](google_sheets.md) | Google Sheets spreadsheet editing | OAuth 2.0 | -| [Google Slides](google_slides.md) | Create, read, and modify presentations programmatically | OAuth 2.0 | -| [Gong](gong.md) | Sales conversation intelligence | OAuth 2.0 | -| [HubSpot](hubspot.md) | CRM and marketing automation | OAuth 2.0 | -| [Intercom](intercom.md) | Customer messaging platform | OAuth 2.0 | -| [Jira](jira.md) | Atlassian Jira issue tracking | OAuth 2.0 | -| [Linear](linear.md) | Software development issue tracking | OAuth 2.0 | -| [Microsoft Excel](microsoft_excel.md) | Microsoft Excel spreadsheet editing | OAuth 2.0 | -| [Microsoft Teams](microsoft_teams.md) | Microsoft Teams collaboration | OAuth 2.0 | -| [Microsoft Word](microsoft_word.md) | Microsoft Word document editing | OAuth 2.0 | -| [Monday](monday.md) | Work management platform | OAuth 2.0 | -| [Notion](notion.md) | Notion workspace and pages | OAuth 2.0 | -| [OneDrive](onedrive.md) | Microsoft OneDrive file storage | OAuth 2.0 | -| [OneNote](onenote.md) | Microsoft OneNote note-taking | OAuth 2.0 | -| [Outlook](outlook.md) | Microsoft Outlook email | OAuth 2.0 | -| [Salesforce](salesforce.md) | Salesforce CRM platform | OAuth 2.0 | -| [ServiceNow](servicenow.md) | IT service management | OAuth 2.0 | -| [SharePoint](sharepoint.md) | Microsoft SharePoint collaboration | OAuth 2.0 | -| [Slack](slack.md) | Slack messaging and collaboration | OAuth 2.0 | -| [Snowflake](snowflake.md) | Snowflake data warehouse | OAuth 2.0 | -| [Trello](trello.md) | Trello project boards | OAuth 2.0 | -| [Zendesk](zendesk.md) | Customer support platform | OAuth 2.0 | -| [Zoom](zoom.md) | Zoom video conferencing | OAuth 2.0 | - -## Getting Started - -Each connector documentation includes: - -- Service description and capabilities -- Authentication requirements -- Complete API reference for all available tools -- Parameter specifications and examples -- Usage guidelines and best practices - -## Authentication - -Connectors support OAuth 2.0, API Key, or Basic Auth authentication through the Agent Auth platform. You'll need to: - -1. Create a connection for the desired service -2. Configure OAuth credentials in your connection -3. Create connected accounts for your users -4. Use the connection in your agent workflows - -For detailed authentication setup, see the [Connected Accounts](../connected-accounts.md) documentation. \ No newline at end of file diff --git a/plugins/agent-auth/agent-connectors/airtable.md b/plugins/agent-auth/agent-connectors/airtable.md deleted file mode 100644 index f3acf0b..0000000 --- a/plugins/agent-auth/agent-connectors/airtable.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Airtable. Manage databases, tables, records, and collaborate on structured data - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/asana.md b/plugins/agent-auth/agent-connectors/asana.md deleted file mode 100644 index cea2fc7..0000000 --- a/plugins/agent-auth/agent-connectors/asana.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Asana. Manage tasks, projects, teams, and workflow automation - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/attention.md b/plugins/agent-auth/agent-connectors/attention.md deleted file mode 100644 index 9af975e..0000000 --- a/plugins/agent-auth/agent-connectors/attention.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Attention for AI insights, conversations, teams, and workflows - -Supports authentication: API Key diff --git a/plugins/agent-auth/agent-connectors/bigquery.md b/plugins/agent-auth/agent-connectors/bigquery.md deleted file mode 100644 index 64b8a33..0000000 --- a/plugins/agent-auth/agent-connectors/bigquery.md +++ /dev/null @@ -1,3 +0,0 @@ -BigQuery is Google Cloud’s fully-managed enterprise data warehouse for analytics at scale. - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/chorus.md b/plugins/agent-auth/agent-connectors/chorus.md deleted file mode 100644 index b57dd23..0000000 --- a/plugins/agent-auth/agent-connectors/chorus.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Chorus.ai to sync calls, transcripts, conversation intelligence, and analytics. - -Supports authentication: Basic Auth diff --git a/plugins/agent-auth/agent-connectors/clari_copilot.md b/plugins/agent-auth/agent-connectors/clari_copilot.md deleted file mode 100644 index 2949e94..0000000 --- a/plugins/agent-auth/agent-connectors/clari_copilot.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Clari Copilot for sales call transcripts, analytics, call data, and insights. - -Supports authentication: API Key diff --git a/plugins/agent-auth/agent-connectors/clickup.md b/plugins/agent-auth/agent-connectors/clickup.md deleted file mode 100644 index dd7d216..0000000 --- a/plugins/agent-auth/agent-connectors/clickup.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to ClickUp. Manage tasks, projects, workspaces, and team collaboration - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/confluence.md b/plugins/agent-auth/agent-connectors/confluence.md deleted file mode 100644 index 96d699f..0000000 --- a/plugins/agent-auth/agent-connectors/confluence.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Confluence. Manage spaces, pages, content, and team collaboration - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/dropbox.md b/plugins/agent-auth/agent-connectors/dropbox.md deleted file mode 100644 index 1bfe1d3..0000000 --- a/plugins/agent-auth/agent-connectors/dropbox.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Dropbox. Manage files, folders, sharing, and cloud storage workflows - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/fathom.md b/plugins/agent-auth/agent-connectors/fathom.md deleted file mode 100644 index 3408c98..0000000 --- a/plugins/agent-auth/agent-connectors/fathom.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Fathom AI meeting assistant. Record, transcribe, and summarize meetings with AI-powered insights - -Supports authentication: API Key diff --git a/plugins/agent-auth/agent-connectors/freshdesk.md b/plugins/agent-auth/agent-connectors/freshdesk.md deleted file mode 100644 index 424a753..0000000 --- a/plugins/agent-auth/agent-connectors/freshdesk.md +++ /dev/null @@ -1,149 +0,0 @@ -Connect to Freshdesk. Manage tickets, contacts, companies, and customer support workflows - -Supports authentication: Basic Auth - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## 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. - -| Properties | Description | Type | -| --- | --- | --- | -| `agent_type` | Type of agent (1=Support Agent, 2=Field Agent, 3=Collaborator) | number | null | -| `email` | Email address of the agent (must be unique) | string | -| `focus_mode` | Focus mode setting for the agent | boolean | null | -| `group_ids` | Array of group IDs to assign the agent to | `array` | null | -| `language` | Language preference of the agent | string | null | -| `name` | Full name of the agent | string | null | -| `occasional` | Whether the agent is occasional (true) or full-time (false) | boolean | null | -| `role_ids` | Array of role IDs to assign to the agent (at least one required) | `array` | -| `signature` | Agent email signature in HTML format | string | null | -| `skill_ids` | Array of skill IDs to assign to the agent | `array` | null | -| `ticket_scope` | Ticket permission level (1=Global Access, 2=Group Access, 3=Restricted Access) | number | -| `time_zone` | Time zone of the agent | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `agent_id` | ID of the agent to delete | number | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `email` | Filter agents by email address | string | null | -| `mobile` | Filter agents by mobile number | string | null | -| `page` | Page number for pagination (starts from 1) | number | null | -| `per_page` | Number of agents per page (max 100) | number | null | -| `phone` | Filter agents by phone number | string | null | -| `state` | Filter agents by state (fulltime or occasional) | string | null | - -## `freshdesk_contact_create` - -Create a new contact in Freshdesk. Email and name are required. Supports custom fields, company assignment, and contact segmentation. - -| Properties | Description | Type | -| --- | --- | --- | -| `address` | Address of the contact | string | null | -| `company_id` | Company ID to associate with the contact | number | null | -| `custom_fields` | Key-value pairs for custom field values | `object` | null | -| `description` | Description about the contact | string | null | -| `email` | Email address of the contact | string | -| `job_title` | Job title of the contact | string | null | -| `language` | Language preference of the contact | string | null | -| `mobile` | Mobile number of the contact | string | null | -| `name` | Full name of the contact | string | -| `phone` | Phone number of the contact | string | null | -| `tags` | Array of tags to associate with the contact | `array` | null | -| `time_zone` | Time zone of the contact | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `cc_emails` | Array of email addresses to be added in CC | `array` | null | -| `custom_fields` | Key-value pairs containing custom field names and values | `object` | null | -| `description` | HTML content of the ticket describing the issue | string | null | -| `email` | Email address of the requester. If no contact exists, will be added as new contact. | string | null | -| `group_id` | ID of the group to which the ticket has been assigned | number | null | -| `name` | Name of the requester | string | null | -| `priority` | Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent | number | null | -| `requester_id` | User ID of the requester. For existing contacts, can be passed instead of email. | number | null | -| `responder_id` | ID of the agent to whom the ticket has been assigned | number | null | -| `source` | Channel through which ticket was created. 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedback Widget, 10=Outbound Email | number | null | -| `status` | Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed | number | null | -| `subject` | Subject of the ticket | string | null | -| `tags` | Array of tags to be associated with the ticket | `array` | null | -| `type` | Helps categorize the ticket according to different kinds of issues | string | null | - -## `freshdesk_ticket_get` - -Retrieve details of a specific ticket by ID. Includes ticket properties, conversations, and metadata. - -| Properties | Description | Type | -| --- | --- | --- | -| `include` | Additional resources to include (stats, requester, company, conversations) | string | null | -| `ticket_id` | ID of the ticket to retrieve | number | - -## `freshdesk_ticket_update` - -Update an existing ticket in Freshdesk. Note: Subject and description of outbound tickets cannot be updated. - -| Properties | Description | Type | -| --- | --- | --- | -| `custom_fields` | Key-value pairs containing custom field names and values | `object` | null | -| `description` | HTML content of the ticket (cannot be updated for outbound tickets) | string | null | -| `group_id` | ID of the group to which the ticket has been assigned | number | null | -| `name` | Name of the requester | string | null | -| `priority` | Priority of the ticket. 1=Low, 2=Medium, 3=High, 4=Urgent | number | null | -| `responder_id` | ID of the agent to whom the ticket has been assigned | number | null | -| `status` | Status of the ticket. 2=Open, 3=Pending, 4=Resolved, 5=Closed | number | null | -| `subject` | Subject of the ticket (cannot be updated for outbound tickets) | string | null | -| `tags` | Array of tags to be associated with the ticket | `array` | null | -| `ticket_id` | ID of the ticket to update | number | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `company_id` | Filter by company ID | number | null | -| `email` | Filter by requester email | string | null | -| `filter` | Filter name (new_and_my_open, watching, spam, deleted) | string | null | -| `include` | Additional resources to include (description, requester, company, stats) | string | null | -| `page` | Page number for pagination (starts from 1) | number | null | -| `per_page` | Number of tickets per page (max 100) | number | null | -| `requester_id` | Filter by requester ID | number | null | -| `updated_since` | Filter tickets updated since this timestamp (ISO 8601) | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `bcc_emails` | Array of email addresses to BCC on the reply | `array` | null | -| `body` | HTML content of the reply | string | -| `cc_emails` | Array of email addresses to CC on the reply | `array` | null | -| `from_email` | Email address to send the reply from | string | null | -| `ticket_id` | ID of the ticket to reply to | number | -| `user_id` | ID of the agent sending the reply | number | null | diff --git a/plugins/agent-auth/agent-connectors/github.md b/plugins/agent-auth/agent-connectors/github.md deleted file mode 100644 index c9cf234..0000000 --- a/plugins/agent-auth/agent-connectors/github.md +++ /dev/null @@ -1,137 +0,0 @@ -GitHub is a cloud-based Git repository hosting service that allows developers to store, manage, and track changes to their code. - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `github_file_contents_get` - -Get the contents of a file or directory from a GitHub repository. Returns Base64 encoded content for files. - -| Properties | Description | Type | -| --- | --- | --- | -| `owner` | The account owner of the repository | string | -| `path` | The content path (file or directory path in the repository) | string | -| `ref` | The name of the commit/branch/tag | string | null | -| `repo` | The name of the repository | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `author` | Author information object with name and email | `object` | null | -| `branch` | The branch name | string | null | -| `committer` | Committer information object with name and email | `object` | null | -| `content` | The new file content (Base64 encoded) | string | -| `message` | The commit message for this change | string | -| `owner` | The account owner of the repository | string | -| `path` | The file path in the repository | string | -| `repo` | The name of the repository | string | -| `sha` | The blob SHA of the file being replaced (required when updating existing files) | string | null | - -## `github_issue_create` - -Create a new issue in a repository. Requires push access to set assignees, milestones, and labels. - -| Properties | Description | Type | -| --- | --- | --- | -| `assignees` | GitHub usernames to assign to the issue | `array` | null | -| `body` | The contents of the issue | string | null | -| `labels` | Labels to associate with the issue | `array` | null | -| `milestone` | Milestone number to associate with the issue | number | null | -| `owner` | The account owner of the repository | string | -| `repo` | The name of the repository | string | -| `title` | The title of the issue | string | -| `type` | The name of the issue type | string | null | - -## `github_issues_list` - -List issues in a repository. Both issues and pull requests are returned as issues in the GitHub API. - -| Properties | Description | Type | -| --- | --- | --- | -| `assignee` | Filter by assigned user | string | null | -| `creator` | Filter by issue creator | string | null | -| `direction` | Sort order | string | null | -| `labels` | Filter by comma-separated list of label names | string | null | -| `milestone` | Filter by milestone number or state | string | null | -| `owner` | The account owner of the repository | string | -| `page` | Page number of results to fetch | number | null | -| `per_page` | Number of results per page (max 100) | number | null | -| `repo` | The name of the repository | string | -| `since` | Show issues updated after this timestamp (ISO 8601 format) | string | null | -| `sort` | Property to sort issues by | string | null | -| `state` | Filter by issue state | string | null | - -## `github_public_repos_list` - -List public repositories for a specified user. Does not require authentication. - -| Properties | Description | Type | -| --- | --- | --- | -| `direction` | Sort order | string | null | -| `page` | Page number of results to fetch | number | null | -| `per_page` | Number of results per page (max 100) | number | null | -| `sort` | Property to sort repositories by | string | null | -| `type` | Filter repositories by type | string | null | -| `username` | The GitHub username to list repositories for | string | - -## `github_pull_request_create` - -Create a new pull request in a repository. Requires write access to the head branch. - -| Properties | Description | Type | -| --- | --- | --- | -| `base` | The name of the branch you want the changes pulled into | string | -| `body` | The contents of the pull request description | string | null | -| `draft` | Indicates whether the pull request is a draft | boolean | null | -| `head` | The name of the branch where your changes are implemented (format: user:branch) | string | -| `maintainer_can_modify` | Indicates whether maintainers can modify the pull request | boolean | null | -| `owner` | The account owner of the repository | string | -| `repo` | The name of the repository | string | -| `title` | The title of the pull request | string | null | - -## `github_pull_requests_list` - -List pull requests in a repository with optional filtering by state, head, and base branches. - -| Properties | Description | Type | -| --- | --- | --- | -| `base` | Filter by base branch name | string | null | -| `direction` | Sort order | string | null | -| `head` | Filter by head branch (format: user:ref-name) | string | null | -| `owner` | The account owner of the repository | string | -| `page` | Page number of results to fetch | number | null | -| `per_page` | Number of results per page (max 100) | number | null | -| `repo` | The name of the repository | string | -| `sort` | Property to sort pull requests by | string | null | -| `state` | Filter by pull request state | string | null | - -## `github_repo_get` - -Get detailed information about a GitHub repository including metadata, settings, and statistics. - -| Properties | Description | Type | -| --- | --- | --- | -| `owner` | The account owner of the repository (case-insensitive) | string | -| `repo` | The name of the repository without the .git extension (case-insensitive) | string | - -## `github_user_repos_list` - -List repositories for the authenticated user. Requires authentication. - -| Properties | Description | Type | -| --- | --- | --- | -| `direction` | Sort order | string | null | -| `page` | Page number of results to fetch | number | null | -| `per_page` | Number of results per page (max 100) | number | null | -| `sort` | Property to sort repositories by | string | null | -| `type` | Filter repositories by type | string | null | diff --git a/plugins/agent-auth/agent-connectors/gmail.md b/plugins/agent-auth/agent-connectors/gmail.md deleted file mode 100644 index d668c75..0000000 --- a/plugins/agent-auth/agent-connectors/gmail.md +++ /dev/null @@ -1,79 +0,0 @@ -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. - -Supports authentication: OAuth 2.0 - -## Tool list - -## `gmail_fetch_mails` - -Fetch emails from a connected Gmail account using search filters. Requires a valid Gmail OAuth2 connection. - -| Properties | Description | Type | -| --- | --- | --- | -| `format` | Format of the returned message. | string | null | -| `include_spam_trash` | Whether to fetch emails from spam and trash folders | boolean | null | -| `label_ids` | Gmail label IDs to filter messages | `array` | null | -| `max_results` | Maximum number of emails to fetch | integer | null | -| `page_token` | Page token for pagination | string | null | -| `query` | Search query string using Gmail's search syntax (e.g., 'is:unread from:user@example.com') | string | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `gmail_get_attachment_by_id` - -Retrieve a specific attachment from a Gmail message using the message ID and attachment ID. - -| Properties | Description | Type | -| --- | --- | --- | -| `attachment_id` | Unique Gmail attachment ID | string | -| `file_name` | Preferred filename to use when saving/returning the attachment | string | null | -| `message_id` | Unique Gmail message ID that contains the attachment | string | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `gmail_get_contacts` - -Fetch a list of contacts from the connected Gmail account. Supports pagination and field filtering. - -| Properties | Description | Type | -| --- | --- | --- | -| `max_results` | Maximum number of contacts to fetch | integer | null | -| `page_token` | Token to retrieve the next page of results | string | null | -| `person_fields` | Fields to include for each person | `array` | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `gmail_get_message_by_id` - -Retrieve a specific Gmail message using its message ID. Optionally control the format of the returned data. - -| Properties | Description | Type | -| --- | --- | --- | -| `format` | Format of the returned message. | string | null | -| `message_id` | Unique Gmail message ID | string | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `gmail_list_drafts` - -List draft emails from a connected Gmail account. Requires a valid Gmail OAuth2 connection. - -| Properties | Description | Type | -| --- | --- | --- | -| `max_results` | Maximum number of drafts to fetch | integer | null | -| `page_token` | Page token for pagination | string | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `other_contacts` | Whether to include people not in the user's contacts (from 'Other Contacts'). | boolean | null | -| `page_size` | Maximum number of people to return. | integer | null | -| `person_fields` | Fields to retrieve for each person. | `array` | null | -| `query` | Text query to search people (e.g., name, email address). | string | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | diff --git a/plugins/agent-auth/agent-connectors/gong.md b/plugins/agent-auth/agent-connectors/gong.md deleted file mode 100644 index 26a36e3..0000000 --- a/plugins/agent-auth/agent-connectors/gong.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect with Gong to sync calls, transcripts, insights, coaching and CRM activity - -Supports authentication: OAuth 2.0 , Api Key diff --git a/plugins/agent-auth/agent-connectors/google_ads.md b/plugins/agent-auth/agent-connectors/google_ads.md deleted file mode 100644 index 9718639..0000000 --- a/plugins/agent-auth/agent-connectors/google_ads.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Google Ads to manage advertising campaigns, analyze performance metrics, and optimize ad spending across Google's advertising platform - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/google_docs.md b/plugins/agent-auth/agent-connectors/google_docs.md deleted file mode 100644 index e790d5d..0000000 --- a/plugins/agent-auth/agent-connectors/google_docs.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Google Docs. Create, edit, and collaborate on documents - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/google_drive.md b/plugins/agent-auth/agent-connectors/google_drive.md deleted file mode 100644 index ef6120e..0000000 --- a/plugins/agent-auth/agent-connectors/google_drive.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Google Drive. Manage files, folders, and sharing permissions - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/google_forms.md b/plugins/agent-auth/agent-connectors/google_forms.md deleted file mode 100644 index fde9e1d..0000000 --- a/plugins/agent-auth/agent-connectors/google_forms.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Google Forms. Create, view, and manage forms and responses securely - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/google_meets.md b/plugins/agent-auth/agent-connectors/google_meets.md deleted file mode 100644 index 814ff7b..0000000 --- a/plugins/agent-auth/agent-connectors/google_meets.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Google Meet. Create and manage video meetings with powerful collaboration features - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/google_sheets.md b/plugins/agent-auth/agent-connectors/google_sheets.md deleted file mode 100644 index 8df9a54..0000000 --- a/plugins/agent-auth/agent-connectors/google_sheets.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Google Sheets. Create, edit, and analyze spreadsheets with powerful data management capabilities - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/google_slides.md b/plugins/agent-auth/agent-connectors/google_slides.md deleted file mode 100644 index 242ef37..0000000 --- a/plugins/agent-auth/agent-connectors/google_slides.md +++ /dev/null @@ -1,32 +0,0 @@ -Connect to Google Slides to create, read, and modify presentations programmatically. - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `googleslides_create_presentation` - -Create a new Google Slides presentation with an optional title. - -| Properties | Description | Type | -| --- | --- | --- | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `title` | Title of the new presentation | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `googleslides_read_presentation` - -Read the complete structure and content of a Google Slides presentation including slides, text, images, shapes, and metadata. - -| Properties | Description | Type | -| --- | --- | --- | -| `fields` | Fields to include in the response | string | null | -| `presentation_id` | The ID of the Google Slides presentation to read | string | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | diff --git a/plugins/agent-auth/agent-connectors/googlecalendar.md b/plugins/agent-auth/agent-connectors/googlecalendar.md deleted file mode 100644 index 8168441..0000000 --- a/plugins/agent-auth/agent-connectors/googlecalendar.md +++ /dev/null @@ -1,128 +0,0 @@ -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. - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `googlecalendar_create_event` - -Create a new event in a connected Google Calendar account. Supports meeting links, recurrence, attendees, and more. - -| Properties | Description | Type | -| --- | --- | --- | -| `attendees_emails` | Attendee email addresses | `array` | null | -| `calendar_id` | Calendar ID to create the event in | string | null | -| `create_meeting_room` | Generate a Google Meet link for this event | boolean | null | -| `description` | Optional event description | string | null | -| `event_duration_hour` | Duration of event in hours | integer | null | -| `event_duration_minutes` | Duration of event in minutes | integer | null | -| `event_type` | Event type for display purposes | string | null | -| `guests_can_invite_others` | Allow guests to invite others | boolean | null | -| `guests_can_modify` | Allow guests to modify the event | boolean | null | -| `guests_can_see_other_guests` | Allow guests to see each other | boolean | null | -| `location` | Location of the event | string | null | -| `recurrence` | Recurrence rules (iCalendar RRULE format) | `array` | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `send_updates` | Send update notifications to attendees | boolean | null | -| `start_datetime` | Event start time in RFC3339 format | string | -| `summary` | Event title/summary | string | -| `timezone` | Timezone for the event (IANA time zone identifier) | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | -| `transparency` | Calendar transparency (free/busy) | string | null | -| `visibility` | Visibility of the event | string | null | - -## `googlecalendar_delete_event` - -Delete an event from a connected Google Calendar account. Requires the calendar ID and event ID. - -| Properties | Description | Type | -| --- | --- | --- | -| `calendar_id` | The ID of the calendar from which the event should be deleted | string | null | -| `event_id` | The ID of the calendar event to delete | string | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `googlecalendar_get_event_by_id` - -Retrieve a specific calendar event by its ID using optional filtering and list parameters. - -| Properties | Description | Type | -| --- | --- | --- | -| `calendar_id` | The calendar ID to search in | string | null | -| `event_id` | The unique identifier of the calendar event to fetch | string | -| `event_types` | Filter by Google event types | `array` | null | -| `query` | Free text search query | string | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `show_deleted` | Include deleted events in results | boolean | null | -| `single_events` | Expand recurring events into instances | boolean | null | -| `time_max` | Upper bound for event start time (RFC3339) | string | null | -| `time_min` | Lower bound for event start time (RFC3339) | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | -| `updated_min` | Filter events updated after this time (RFC3339) | string | null | - -## `googlecalendar_list_calendars` - -List all accessible Google Calendar calendars for the authenticated user. Supports filters and pagination. - -| Properties | Description | Type | -| --- | --- | --- | -| `max_results` | Maximum number of calendars to fetch | integer | null | -| `min_access_role` | Minimum access role to include in results | string | null | -| `page_token` | Token to retrieve the next page of results | string | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `show_deleted` | Include deleted calendars in the list | boolean | null | -| `show_hidden` | Include calendars that are hidden from the calendar list | boolean | null | -| `sync_token` | Token to get updates since the last sync | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `googlecalendar_list_events` - -List events from a connected Google Calendar account with filtering options. Requires a valid Google Calendar OAuth2 connection. - -| Properties | Description | Type | -| --- | --- | --- | -| `calendar_id` | Calendar ID to list events from | string | null | -| `max_results` | Maximum number of events to fetch | integer | null | -| `order_by` | Order of events in the result | string | null | -| `page_token` | Page token for pagination | string | null | -| `query` | Free text search query | string | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `single_events` | Expand recurring events into single events | boolean | null | -| `time_max` | Upper bound for event start time (RFC3339 timestamp) | string | null | -| `time_min` | Lower bound for event start time (RFC3339 timestamp) | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `attendees_emails` | Attendee email addresses | `array` | null | -| `calendar_id` | Calendar ID containing the event | string | -| `create_meeting_room` | Generate a Google Meet link for this event | boolean | null | -| `description` | Optional event description | string | null | -| `end_datetime` | Event end time in RFC3339 format | string | null | -| `event_duration_hour` | Duration of event in hours | integer | null | -| `event_duration_minutes` | Duration of event in minutes | integer | null | -| `event_id` | The ID of the calendar event to update | string | -| `event_type` | Event type for display purposes | string | null | -| `guests_can_invite_others` | Allow guests to invite others | boolean | null | -| `guests_can_modify` | Allow guests to modify the event | boolean | null | -| `guests_can_see_other_guests` | Allow guests to see each other | boolean | null | -| `location` | Location of the event | string | null | -| `recurrence` | Recurrence rules (iCalendar RRULE format) | `array` | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `send_updates` | Send update notifications to attendees | boolean | null | -| `start_datetime` | Event start time in RFC3339 format | string | null | -| `summary` | Event title/summary | string | null | -| `timezone` | Timezone for the event (IANA time zone identifier) | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | -| `transparency` | Calendar transparency (free/busy) | string | null | -| `visibility` | Visibility of the event | string | null | diff --git a/plugins/agent-auth/agent-connectors/hubspot.md b/plugins/agent-auth/agent-connectors/hubspot.md deleted file mode 100644 index ac44f2c..0000000 --- a/plugins/agent-auth/agent-connectors/hubspot.md +++ /dev/null @@ -1,143 +0,0 @@ -Connect to HubSpot CRM. Manage contacts, deals, companies, and marketing automation - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `hubspot_companies_search` - -Search HubSpot companies using full-text search and pagination. Returns matching companies with specified properties. - -| Properties | Description | Type | -| --- | --- | --- | -| `after` | Pagination offset to get results starting from a specific position | string | null | -| `filterGroups` | JSON string containing filter groups for advanced filtering | string | null | -| `limit` | Number of results to return per page (max 100) | number | null | -| `properties` | Comma-separated list of properties to include in the response | string | null | -| `query` | Search term for full-text search across company properties | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `annualrevenue` | Annual revenue of the company | number | null | -| `city` | Company city location | string | null | -| `country` | Company country location | string | null | -| `description` | Company description or overview | string | null | -| `domain` | Company website domain | string | null | -| `industry` | Industry type of the company | string | null | -| `name` | Company name (required, serves as primary identifier) | string | -| `numberofemployees` | Number of employees at the company | number | null | -| `phone` | Company phone number | string | null | -| `state` | Company state or region | string | null | - -## `hubspot_company_get` - -Retrieve details of a specific company from HubSpot by company ID. Returns company properties and associated data. - -| Properties | Description | Type | -| --- | --- | --- | -| `company_id` | ID of the company to retrieve | string | -| `properties` | Comma-separated list of properties to include in the response | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `company` | Company name where the contact works | string | null | -| `email` | Primary email address for the contact (required, serves as unique identifier) | string | -| `firstname` | First name of the contact | string | null | -| `hs_lead_status` | Lead status of the contact | string | null | -| `jobtitle` | Job title of the contact | string | null | -| `lastname` | Last name of the contact | string | null | -| `lifecyclestage` | Lifecycle stage of the contact | string | null | -| `phone` | Phone number of the contact | string | null | -| `website` | Personal or company website URL | string | null | - -## `hubspot_contact_get` - -Retrieve details of a specific contact from HubSpot by contact ID. Returns contact properties and associated data. - -| Properties | Description | Type | -| --- | --- | --- | -| `contact_id` | ID of the contact to retrieve | string | -| `properties` | Comma-separated list of properties to include in the response | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `contact_id` | ID of the contact to update | string | -| `props` | 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 | `object` | null | - -## `hubspot_contacts_list` - -Retrieve a list of contacts from HubSpot with filtering and pagination. Returns contact properties and supports pagination through cursor-based navigation. - -| Properties | Description | Type | -| --- | --- | --- | -| `after` | Pagination cursor to get the next set of results | string | null | -| `archived` | Whether to include archived contacts in the results | boolean | null | -| `limit` | Number of results to return per page (max 100) | number | null | -| `properties` | Comma-separated list of properties to include in the response | string | null | - -## `hubspot_contacts_search` - -Search HubSpot contacts using full-text search and pagination. Returns matching contacts with specified properties. - -| Properties | Description | Type | -| --- | --- | --- | -| `after` | Pagination offset to get results starting from a specific position | string | null | -| `filterGroups` | JSON string containing filter groups for advanced filtering | string | null | -| `limit` | Number of results to return per page (max 100) | number | null | -| `properties` | Comma-separated list of properties to include in the response | string | null | -| `query` | Search term for full-text search across contact properties | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `amount` | Deal amount/value (required) | number | -| `closedate` | Expected close date (YYYY-MM-DD format) | string | null | -| `dealname` | Name of the deal (required) | string | -| `dealstage` | Current stage of the deal (required) | string | -| `dealtype` | Type of deal | string | null | -| `description` | Deal description | string | null | -| `hs_priority` | Deal priority (HIGH, MEDIUM, LOW) | string | null | -| `pipeline` | Deal pipeline | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `deal_id` | ID of the deal to update | string | -| `good_deal` | Boolean flag indicating if this is a good deal | boolean | null | -| `properties` | Object containing deal properties to update | `object` | - -## `hubspot_deals_search` - -Search HubSpot deals using full-text search and pagination. Returns matching deals with specified properties. - -| Properties | Description | Type | -| --- | --- | --- | -| `after` | Pagination offset to get results starting from a specific position | string | null | -| `filterGroups` | JSON string containing filter groups for advanced filtering | string | null | -| `limit` | Number of results to return per page (max 100) | number | null | -| `properties` | Comma-separated list of properties to include in the response | string | null | -| `query` | Search term for full-text search across deal properties | string | null | diff --git a/plugins/agent-auth/agent-connectors/intercom.md b/plugins/agent-auth/agent-connectors/intercom.md deleted file mode 100644 index 77ef5d8..0000000 --- a/plugins/agent-auth/agent-connectors/intercom.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Intercom. Send messages, manage conversations, and interact with users and contacts. - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/jira.md b/plugins/agent-auth/agent-connectors/jira.md deleted file mode 100644 index 1675086..0000000 --- a/plugins/agent-auth/agent-connectors/jira.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Jira. Manage issues, projects, workflows, and agile development processes - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/linear.md b/plugins/agent-auth/agent-connectors/linear.md deleted file mode 100644 index 9b0f877..0000000 --- a/plugins/agent-auth/agent-connectors/linear.md +++ /dev/null @@ -1,58 +0,0 @@ -Connect to Linear. Manage issues, projects, sprints, and development workflows - -Supports authentication: OAuth 2.0 - -## 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. - -| Properties | Description | Type | -| --- | --- | --- | -| `query` | The GraphQL query or mutation to execute | string | -| `variables` | Variables to pass to the GraphQL query | `object` | null | - -## `linear_issue_create` - -Create a new issue in Linear using the issueCreate mutation. Requires a team ID and title at minimum. - -| Properties | Description | Type | -| --- | --- | --- | -| `assigneeId` | ID of the user to assign the issue to | string | null | -| `description` | Description of the issue | string | null | -| `estimate` | Story point estimate for the issue | string | null | -| `labelIds` | Array of label IDs to apply to the issue | `array` | null | -| `priority` | Priority level of the issue (1-4, where 1 is urgent) | string | null | -| `projectId` | ID of the project to associate the issue with | string | null | -| `stateId` | ID of the workflow state to set | string | null | -| `teamId` | ID of the team to create the issue in | string | -| `title` | Title of the issue | string | - -## `linear_issue_update` - -Update an existing issue in Linear. You can update title, description, priority, state, and assignee. - -| Properties | Description | Type | -| --- | --- | --- | -| `assigneeId` | ID of the user to assign the issue to | string | null | -| `description` | New description for the issue | string | null | -| `issueId` | ID of the issue to update | string | -| `priority` | Priority level of the issue (1-4, where 1 is urgent) | string | null | -| `stateId` | ID of the workflow state to set | string | null | -| `title` | New title for the issue | string | null | - -## `linear_issues_list` - -List issues in Linear using the issues query with simple filtering and pagination support. - -| Properties | Description | Type | -| --- | --- | --- | -| `after` | Cursor for pagination (returns issues after this cursor) | string | null | -| `assignee` | Filter by assignee email (e.g., 'user@example.com') | string | null | -| `before` | Cursor for pagination (returns issues before this cursor) | string | null | -| `first` | Number of issues to return (pagination) | integer | null | -| `labels` | Filter by label names (array of strings) | `array` | null | -| `priority` | Filter by priority level (1=Urgent, 2=High, 3=Medium, 4=Low) | string | null | -| `project` | Filter by project name (e.g., 'Q4 Goals') | string | null | -| `state` | Filter by state name (e.g., 'In Progress', 'Done') | string | null | diff --git a/plugins/agent-auth/agent-connectors/microsoft_excel.md b/plugins/agent-auth/agent-connectors/microsoft_excel.md deleted file mode 100644 index 2fa4c19..0000000 --- a/plugins/agent-auth/agent-connectors/microsoft_excel.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Microsoft Excel. Access, read, and modify spreadsheets stored in OneDrive or SharePoint through Microsoft Graph API. - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/microsoft_teams.md b/plugins/agent-auth/agent-connectors/microsoft_teams.md deleted file mode 100644 index 85790a1..0000000 --- a/plugins/agent-auth/agent-connectors/microsoft_teams.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Microsoft Teams. Manage messages, channels, meetings, and team collaboration - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/microsoft_word.md b/plugins/agent-auth/agent-connectors/microsoft_word.md deleted file mode 100644 index 7b2d530..0000000 --- a/plugins/agent-auth/agent-connectors/microsoft_word.md +++ /dev/null @@ -1,3 +0,0 @@ -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. - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/monday.md b/plugins/agent-auth/agent-connectors/monday.md deleted file mode 100644 index 6cc8ab0..0000000 --- a/plugins/agent-auth/agent-connectors/monday.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Monday.com. Manage boards, tasks, workflows, teams, and project collaboration - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/notion.md b/plugins/agent-auth/agent-connectors/notion.md deleted file mode 100644 index 22b58d5..0000000 --- a/plugins/agent-auth/agent-connectors/notion.md +++ /dev/null @@ -1,189 +0,0 @@ -Connect to Notion workspace. Create, edit pages, manage databases, and collaborate on content - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `comment` | Comment object containing a rich_text array. Example: `{"rich_text":[{"type":"text","text":{"content":"Hello"}}]}` | `object` | -| `discussion_id` | Existing discussion thread ID to reply to. | string | null | -| `notion_version` | Optional override for the Notion-Version header (e.g., 2022-06-28). | string | null | -| `parent` | Parent object for a new top-level comment. Shape: `{"page_id":""}`. | `object` | null | -| `schema_version` | Internal override for schema version. | string | null | -| `tool_version` | Internal override for tool implementation version. | string | null | - -## `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`. - -| Properties | Description | Type | -| --- | --- | --- | -| `comment_id` | The identifier of the comment to retrieve (hyphenated UUID). Obtain it from Create-Comment responses or from a prior List-Comments call. | string | -| `notion_version` | Optional Notion-Version header override (e.g., 2022-06-28). | string | null | -| `schema_version` | Internal override for schema version. | string | null | -| `tool_version` | Internal override for tool implementation version. | string | null | - -## `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). - -| Properties | Description | Type | -| --- | --- | --- | -| `block_id` | Target Notion block (or page) ID to fetch comments for. Use a hyphenated UUID. | string | -| `notion_version` | Optional Notion-Version header override (e.g., 2022-06-28). | string | null | -| `page_size` | Maximum number of comments to return (1–100). | integer | null | -| `schema_version` | Internal override for schema version. | string | null | -| `start_cursor` | Cursor to fetch the next page of results. | string | null | -| `tool_version` | Internal override for tool implementation version. | string | null | - -## `notion_data_fetch` - -Fetch data from Notion using the workspace search API (/search). Supports pagination via start_cursor. - -| Properties | Description | Type | -| --- | --- | --- | -| `page_size` | Max number of results to return (1–100) | integer | null | -| `query` | Text query used by /search | string | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `start_cursor` | Cursor for pagination; pass the previous response's next_cursor | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | - -## `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). - -| Properties | Description | Type | -| --- | --- | --- | -| `notion_version` | Optional override for the Notion-Version header (e.g., 2022-06-28). | string | null | -| `parent` | Parent object specifying the page under which the database is created. Example: `{"page_id": "2561ab6c-418b-8072-beec-c4779fa811cf"}` | `object` | -| `properties` | Database schema object defining properties (columns). Example: `{"Name": {"title": {}}, "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Doing"}, {"name": "Done"}]}}}` | `object` | -| `schema_version` | Internal override for schema version. | string | null | -| `title` | Database title as a Notion rich_text array. | `array` | -| `tool_version` | Internal override for tool implementation version. | string | null | - -## `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). - -| Properties | Description | Type | -| --- | --- | --- | -| `database_id` | The target database ID in UUID format with hyphens. | string | -| `notion_version` | Optional override for the Notion-Version header. | string | null | -| `schema_version` | Optional schema version override. | string | null | -| `tool_version` | Optional tool version override. | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `_parent` | Computed by host: `{ "database_id": "" }`. Do not supply manually. | `object` | null | -| `child_blocks` | Optional array of Notion blocks to append as page content (paragraph, heading, to_do, etc.). | `array` | null | -| `cover` | Optional page cover object. Example external: `{"type":"external","external":{"url":"https://example.com/cover.jpg"}}`. | `object` | null | -| `database_id` | Target database ID (hyphenated UUID). | string | -| `icon` | Optional page icon object. Examples: `{"type":"emoji","emoji":"📝"}` or `{"type":"external","external":{"url":"https://..."}}`. | `object` | null | -| `notion_version` | Optional Notion-Version header override (e.g., 2022-06-28). | string | null | -| `properties` | 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: - -```json -{ - "title": { "title": [ { "text": { "content": "Task A" } } ] }, - "Status": { "select": { "name": "Todo" } }, - "Due": { "date": { "start": "2025-09-01" } } -} -``` | `object` | -| `schema_version` | Optional schema version override. | string | null | -| `tool_version` | Optional tool version override. | string | null | - -## `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") - -| Properties | Description | Type | -| --- | --- | --- | -| `database_id` | Target database ID (hyphenated UUID). | string | -| `property_id` | property ID to filter results by a specific property. get the property id by querying database. | string | null | -| `schema_version` | Optional schema version override. | string | null | -| `tool_version` | Optional tool version override. | string | null | - -## `notion_database_query` - -Query a Notion database for rows (pages). Provide database_id (hyphenated UUID). Optional: page_size, start_cursor for pagination, and sorts (array of sort objects). 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. - -| Properties | Description | Type | -| --- | --- | --- | -| `database_id` | Target database ID (hyphenated UUID). | string | -| `notion_version` | Optional Notion-Version header override. | string | null | -| `page_size` | Maximum number of rows to return (1–100). | integer | null | -| `schema_version` | Optional schema version override. | string | null | -| `sorts` | Order the results. Each item must include either property or timestamp, plus direction. | `array` | null | -| `start_cursor` | Cursor to fetch the next page of results. | string | null | -| `tool_version` | Optional tool version override. | string | null | - -## `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 - -| Properties | Description | Type | -| --- | --- | --- | -| `_parent` | Computed by the executor: `{"database_id": "..."}` OR `{"page_id": "..."}` derived from database_id/parent_page_id. | `object` | null | -| `child_blocks` | Optional blocks to add as page content (children). | `array` | null | -| `cover` | Optional page cover object. | `object` | null | -| `database_id` | 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). | string | null | -| `icon` | Optional page icon object. | `object` | null | -| `notion_version` | Optional Notion-Version header override. | string | null | -| `parent_page_id` | Create a child page under this page (hyphenated UUID). Extract from the parent page URL. | string | null | -| `properties` | 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" } } -} | `object` | null | -| `schema_version` | Optional schema version override. | string | null | -| `tool_version` | Optional tool version override. | string | null | diff --git a/plugins/agent-auth/agent-connectors/onedrive.md b/plugins/agent-auth/agent-connectors/onedrive.md deleted file mode 100644 index 601c43f..0000000 --- a/plugins/agent-auth/agent-connectors/onedrive.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to OneDrive. Manage files, folders, and cloud storage with Microsoft OneDrive - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/onenote.md b/plugins/agent-auth/agent-connectors/onenote.md deleted file mode 100644 index 47a835b..0000000 --- a/plugins/agent-auth/agent-connectors/onenote.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Microsoft OneNote. Access, create, and manage notebooks, sections, and pages stored in OneDrive or SharePoint through Microsoft Graph API. - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/outlook.md b/plugins/agent-auth/agent-connectors/outlook.md deleted file mode 100644 index 9dae658..0000000 --- a/plugins/agent-auth/agent-connectors/outlook.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Microsoft Outlook. Manage emails, calendar events, contacts, and tasks - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/salesforce.md b/plugins/agent-auth/agent-connectors/salesforce.md deleted file mode 100644 index f0441b1..0000000 --- a/plugins/agent-auth/agent-connectors/salesforce.md +++ /dev/null @@ -1,316 +0,0 @@ -Connect to Salesforce CRM. Manage leads, opportunities, accounts, and customer relationships - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `salesforce_account_create` - -Create a new Account in Salesforce. Supports standard fields - -| Properties | Description | Type | -| --- | --- | --- | -| `AccountNumber` | Account number for the organization | string | null | -| `AnnualRevenue` | Annual revenue | number | null | -| `BillingCity` | Billing city | string | null | -| `BillingCountry` | Billing country | string | null | -| `BillingPostalCode` | Billing postal code | string | null | -| `BillingState` | Billing state/province | string | null | -| `BillingStreet` | Billing street | string | null | -| `Description` | Description | string | null | -| `Industry` | Industry | string | null | -| `Name` | Account Name | string | -| `NumberOfEmployees` | Number of employees | integer | null | -| `OwnerId` | Record owner (User/Queue Id) | string | null | -| `Phone` | Main phone number | string | null | -| `RecordTypeId` | Record Type Id | string | null | -| `Website` | Website URL | string | null | - -## `salesforce_account_delete` - -Delete an existing Account from Salesforce by account ID. This is a destructive operation that permanently removes the account record. - -| Properties | Description | Type | -| --- | --- | --- | -| `account_id` | ID of the account to delete | string | - -## `salesforce_account_get` - -Retrieve details of a specific account from Salesforce by account ID. Returns account properties and associated data. - -| Properties | Description | Type | -| --- | --- | --- | -| `account_id` | ID of the account to retrieve | string | -| `fields` | Comma-separated list of fields to include in the response | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `AccountNumber` | Account number for the organization | string | null | -| `AccountSource` | Lead source for this account | string | null | -| `AnnualRevenue` | Annual revenue | number | null | -| `BillingCity` | Billing city | string | null | -| `BillingCountry` | Billing country | string | null | -| `BillingGeocodeAccuracy` | Billing geocode accuracy | string | null | -| `BillingLatitude` | Billing address latitude | number | null | -| `BillingLongitude` | Billing address longitude | number | null | -| `BillingPostalCode` | Billing postal code | string | null | -| `BillingState` | Billing state/province | string | null | -| `BillingStreet` | Billing street | string | null | -| `CleanStatus` | Data.com clean status | string | null | -| `Description` | Description | string | null | -| `DunsNumber` | D-U-N-S Number | string | null | -| `Fax` | Fax number | string | null | -| `Industry` | Industry | string | null | -| `Jigsaw` | Data.com key | string | null | -| `JigsawCompanyId` | Jigsaw company ID | string | null | -| `NaicsCode` | NAICS code | string | null | -| `NaicsDesc` | NAICS description | string | null | -| `Name` | Account Name | string | null | -| `NumberOfEmployees` | Number of employees | integer | null | -| `OwnerId` | Record owner (User/Queue Id) | string | null | -| `Ownership` | Ownership type | string | null | -| `ParentId` | Parent Account Id | string | null | -| `Phone` | Main phone number | string | null | -| `Rating` | Account rating | string | null | -| `RecordTypeId` | Record Type Id | string | null | -| `ShippingCity` | Shipping city | string | null | -| `ShippingCountry` | Shipping country | string | null | -| `ShippingGeocodeAccuracy` | Shipping geocode accuracy | string | null | -| `ShippingLatitude` | Shipping address latitude | number | null | -| `ShippingLongitude` | Shipping address longitude | number | null | -| `ShippingPostalCode` | Shipping postal code | string | null | -| `ShippingState` | Shipping state/province | string | null | -| `ShippingStreet` | Shipping street | string | null | -| `Sic` | SIC code | string | null | -| `SicDesc` | SIC description | string | null | -| `Site` | Account site or location | string | null | -| `TickerSymbol` | Stock ticker symbol | string | null | -| `Tradestyle` | Trade style name | string | null | -| `Type` | Account type | string | null | -| `Website` | Website URL | string | null | -| `YearStarted` | Year the company started | string | null | -| `account_id` | ID of the account to update | string | - -## `salesforce_accounts_list` - -Retrieve a list of accounts from Salesforce using a pre-built SOQL query. Returns basic account information. - -| Properties | Description | Type | -| --- | --- | --- | -| `limit` | Number of results to return per page | number | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `composite_request` | JSON string containing composite request with multiple sub-requests | string | - -## `salesforce_contact_create` - -Create a new contact in Salesforce. Allows setting contact properties like name, email, phone, account association, and other standard fields. - -| Properties | Description | Type | -| --- | --- | --- | -| `AccountId` | Salesforce Account Id associated with this contact | string | null | -| `Department` | Department of the contact | string | null | -| `Description` | Free-form description | string | null | -| `Email` | Email address of the contact | string | null | -| `FirstName` | First name of the contact | string | null | -| `LastName` | Last name of the contact (required) | string | -| `LeadSource` | Lead source for the contact | string | null | -| `MailingCity` | Mailing city | string | null | -| `MailingCountry` | Mailing country | string | null | -| `MailingPostalCode` | Mailing postal code | string | null | -| `MailingState` | Mailing state/province | string | null | -| `MailingStreet` | Mailing street | string | null | -| `MobilePhone` | Mobile phone of the contact | string | null | -| `Phone` | Phone number of the contact | string | null | -| `Title` | Job title of the contact | string | null | - -## `salesforce_contact_get` - -Retrieve details of a specific contact from Salesforce by contact ID. Returns contact properties and associated data. - -| Properties | Description | Type | -| --- | --- | --- | -| `contact_id` | ID of the contact to retrieve | string | -| `fields` | Comma-separated list of fields to include in the response | string | null | - -## `salesforce_dashboard_metadata_get` - -Retrieve metadata for a Salesforce dashboard, including dashboard components, filters, layout, and the running user. - -| Properties | Description | Type | -| --- | --- | --- | -| `dashboard_id` | The unique ID of the Salesforce dashboard | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `sobject` | SObject API name to describe | string | - -## `salesforce_opportunities_list` - -Retrieve a list of opportunities from Salesforce using a pre-built SOQL query. Returns basic opportunity information. - -| Properties | Description | Type | -| --- | --- | --- | -| `limit` | Number of results to return per page | number | null | - -## `salesforce_opportunity_create` - -Create a new opportunity in Salesforce. Allows setting opportunity properties like name, amount, stage, close date, and account association. - -| Properties | Description | Type | -| --- | --- | --- | -| `AccountId` | Associated Account Id | string | null | -| `Amount` | Opportunity amount | number | null | -| `CampaignId` | Related Campaign Id | string | null | -| `CloseDate` | Expected close date (YYYY-MM-DD, required) | string | -| `Custom_Field__c` | Example custom field (replace with your org’s custom field API name) | string | null | -| `Description` | Opportunity description | string | null | -| `ForecastCategoryName` | Forecast category name | string | null | -| `LeadSource` | Lead source | string | null | -| `Name` | Opportunity name (required) | string | -| `NextStep` | Next step in the sales process | string | null | -| `OwnerId` | Record owner (User/Queue Id) | string | null | -| `PricebookId` | Associated Price Book Id | string | null | -| `Probability` | Probability percentage (0–100) | number | null | -| `RecordTypeId` | Record Type Id for Opportunity | string | null | -| `StageName` | Current sales stage (required) | string | -| `Type` | Opportunity type | string | null | - -## `salesforce_opportunity_get` - -Retrieve details of a specific opportunity from Salesforce by opportunity ID. Returns opportunity properties and associated data. - -| Properties | Description | Type | -| --- | --- | --- | -| `fields` | Comma-separated list of fields to include in the response | string | null | -| `opportunity_id` | ID of the opportunity to retrieve | string | - -## `salesforce_opportunity_update` - -Update an existing opportunity in Salesforce by opportunity ID. Allows updating opportunity properties like name, amount, stage, and close date. - -| Properties | Description | Type | -| --- | --- | --- | -| `AccountId` | Associated Account Id | string | null | -| `Amount` | Opportunity amount | number | null | -| `CampaignId` | Related Campaign Id | string | null | -| `CloseDate` | Expected close date (YYYY-MM-DD) | string | null | -| `Description` | Opportunity description | string | null | -| `ForecastCategoryName` | Forecast category name | string | null | -| `LeadSource` | Lead source | string | null | -| `Name` | Opportunity name | string | null | -| `NextStep` | Next step in the sales process | string | null | -| `OwnerId` | Record owner (User/Queue Id) | string | null | -| `Pricebook2Id` | Associated Price Book Id | string | null | -| `Probability` | Probability percentage (0–100) | number | null | -| `RecordTypeId` | Record Type Id for Opportunity | string | null | -| `StageName` | Current sales stage | string | null | -| `Type` | Opportunity type | string | null | -| `opportunity_id` | ID of the opportunity to update | string | - -## `salesforce_query_soql` - -Execute SOQL queries against Salesforce data. Supports complex queries with joins, filters, and aggregations. - -| Properties | Description | Type | -| --- | --- | --- | -| `query` | SOQL query string to execute | string | - -## `salesforce_report_metadata_get` - -Retrieve report, report type, and related metadata for a Salesforce report. Returns information about report structure, fields, groupings, and configuration. - -| Properties | Description | Type | -| --- | --- | --- | -| `report_id` | The unique ID of the Salesforce report | string | - -## `salesforce_search_parameterized` - -Execute parameterized searches against Salesforce data. Provides simplified search interface with predefined parameters. - -| Properties | Description | Type | -| --- | --- | --- | -| `fields` | Comma-separated list of fields to return | string | null | -| `search_text` | Text to search for | string | -| `sobject` | SObject type to search in | string | - -## `salesforce_search_sosl` - -Execute SOSL searches against Salesforce data. Performs full-text search across multiple objects and fields. - -| Properties | Description | Type | -| --- | --- | --- | -| `search_query` | SOSL search query string to execute | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `fields` | Object containing field names and values to set on the new record | `object` | -| `sobject_type` | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | string | - -## `salesforce_sobject_delete` - -Delete a record from any Salesforce SObject type by ID. This is a destructive operation that permanently removes the record. - -| Properties | Description | Type | -| --- | --- | --- | -| `record_id` | ID of the record to delete | string | -| `sobject_type` | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | string | - -## `salesforce_sobject_get` - -Retrieve a record from any Salesforce SObject type by ID. Optionally specify which fields to return. - -| Properties | Description | Type | -| --- | --- | --- | -| `fields` | Comma-separated list of fields to include in the response | string | null | -| `record_id` | ID of the record to retrieve | string | -| `sobject_type` | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | string | - -## `salesforce_sobject_update` - -Update an existing record for any Salesforce SObject type by ID. Only the fields provided will be updated. - -| Properties | Description | Type | -| --- | --- | --- | -| `fields` | Object containing field names and values to update on the record | `object` | -| `record_id` | ID of the record to update | string | -| `sobject_type` | The Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c) | string | - -## `salesforce_soql_execute` - -Execute custom SOQL queries against Salesforce data. Supports complex queries with joins, filters, aggregations, and custom field selection. - -| Properties | Description | Type | -| --- | --- | --- | -| `soql_query` | SOQL query string to execute | string | diff --git a/plugins/agent-auth/agent-connectors/servicenow.md b/plugins/agent-auth/agent-connectors/servicenow.md deleted file mode 100644 index b1dc3b0..0000000 --- a/plugins/agent-auth/agent-connectors/servicenow.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to ServiceNow. Manage incidents, service requests, CMDB, and IT service management workflows - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/sharepoint.md b/plugins/agent-auth/agent-connectors/sharepoint.md deleted file mode 100644 index c2d88ae..0000000 --- a/plugins/agent-auth/agent-connectors/sharepoint.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to SharePoint. Manage sites, documents, lists, and collaborative content - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/slack.md b/plugins/agent-auth/agent-connectors/slack.md deleted file mode 100644 index 8a52cba..0000000 --- a/plugins/agent-auth/agent-connectors/slack.md +++ /dev/null @@ -1,197 +0,0 @@ -Connect to Slack workspace. Send Messages as Bots or on behalf of users - -Supports authentication: OAuth 2.0 - -## Table of Contents - -- [Tool list](#tool-list) - ---- - -## Tool list - -## `slack_add_reaction` - -Add an emoji reaction to a message in Slack. Requires a valid Slack OAuth2 connection with reactions:write scope. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID or channel name where the message exists | string | -| `name` | Emoji name to react with (without colons) | string | -| `timestamp` | Timestamp of the message to add reaction to | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `is_private` | Create a private channel instead of public | boolean | null | -| `name` | Name of the channel to create (without # prefix) | string | -| `team_id` | Encoded team ID to create channel in (if using org tokens) | string | null | - -## `slack_delete_message` - -Deletes a message from a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID, channel name (#general), or user ID for DM where the message was sent | string | -| `ts` | Timestamp of the message to delete | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID, channel name (#general), or user ID for DM | string | -| `cursor` | Paginate through collections by cursor for pagination | string | null | -| `latest` | End of time range of messages to include in results | string | null | -| `limit` | Number of messages to return (1-1000, default 100) | integer | null | -| `oldest` | Start of time range of messages to include in results | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID, channel name (#general), or user ID for DM | string | -| `include_locale` | Set to true to include the locale for this conversation | boolean | null | -| `include_num_members` | Set to true to include the member count for the conversation | boolean | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID, channel name (#general), or user ID for DM | string | -| `cursor` | Pagination cursor for retrieving next page of results | string | null | -| `inclusive` | Include messages with latest or oldest timestamp in results | boolean | null | -| `latest` | End of time range of messages to include in results | string | null | -| `limit` | Number of messages to return (default 100, max 1000) | integer | null | -| `oldest` | Start of time range of messages to include in results | string | null | -| `ts` | Timestamp of the parent message to get replies for | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `include_locale` | Set to true to include locale information for the user | boolean | null | -| `user` | User ID to get information about | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `user` | User ID to check presence for | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID or channel name (#general) to invite users to | string | -| `users` | Comma-separated list of user IDs to invite to the channel | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID or channel name (#general) to join | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID or channel name (#general) to leave | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `cursor` | Pagination cursor for retrieving next page of results | string | null | -| `exclude_archived` | Exclude archived channels from the list | boolean | null | -| `limit` | Number of channels to return (default 100, max 1000) | integer | null | -| `team_id` | Encoded team ID to list channels for (optional) | string | null | -| `types` | Mix and match channel types (public_channel, private_channel, mpim, im) | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `cursor` | Pagination cursor for fetching additional pages of users | string | null | -| `include_locale` | Set to true to include locale information for each user | boolean | null | -| `limit` | Number of users to return (1-1000) | number | null | -| `team_id` | Encoded team ID to list users for (if using org tokens) | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `email` | Email address to search for users by | string | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `channel` | Channel ID or channel name where the message exists | string | -| `timestamp` | Timestamp of the message to pin | string | - -## `slack_send_message` - -Sends a message to a Slack channel or direct message. Requires a valid Slack OAuth2 connection with chat:write scope. - -| Properties | Description | Type | -| --- | --- | --- | -| `attachments` | JSON-encoded array of attachment objects for additional message formatting | string | null | -| `blocks` | JSON-encoded array of Block Kit block elements for rich message formatting | string | null | -| `channel` | Channel ID, channel name (#general), or user ID for DM | string | -| `reply_broadcast` | Used in conjunction with thread_ts to broadcast reply to channel | boolean | null | -| `schema_version` | Optional schema version to use for tool execution | string | null | -| `text` | Message text content | string | -| `thread_ts` | Timestamp of parent message to reply in thread | string | null | -| `tool_version` | Optional tool version to use for execution | string | null | -| `unfurl_links` | Enable or disable link previews | boolean | null | -| `unfurl_media` | Enable or disable media link previews | boolean | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `status_emoji` | Emoji to display with status (without colons) | string | null | -| `status_expiration` | Unix timestamp when status should expire | integer | null | -| `status_text` | Status text to display | string | null | - -## `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. - -| Properties | Description | Type | -| --- | --- | --- | -| `attachments` | JSON-encoded array of attachment objects for additional message formatting | string | null | -| `blocks` | JSON-encoded array of Block Kit block elements for rich message formatting | string | null | -| `channel` | Channel ID, channel name (#general), or user ID for DM where the message was sent | string | -| `text` | New message text content | string | null | -| `ts` | Timestamp of the message to update | string | diff --git a/plugins/agent-auth/agent-connectors/snowflake.md b/plugins/agent-auth/agent-connectors/snowflake.md deleted file mode 100644 index 12dba3f..0000000 --- a/plugins/agent-auth/agent-connectors/snowflake.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Snowflake to manage and analyze your data warehouse workloads - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/trello.md b/plugins/agent-auth/agent-connectors/trello.md deleted file mode 100644 index 181e36c..0000000 --- a/plugins/agent-auth/agent-connectors/trello.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Trello. Manage boards, cards, lists, and team collaboration workflows - -Supports authentication: OAuth 1.0a diff --git a/plugins/agent-auth/agent-connectors/zendesk.md b/plugins/agent-auth/agent-connectors/zendesk.md deleted file mode 100644 index f993da1..0000000 --- a/plugins/agent-auth/agent-connectors/zendesk.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Zendesk. Manage customer support tickets, users, organizations, and help desk operations - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/agent-connectors/zoom.md b/plugins/agent-auth/agent-connectors/zoom.md deleted file mode 100644 index 9bfdda0..0000000 --- a/plugins/agent-auth/agent-connectors/zoom.md +++ /dev/null @@ -1,3 +0,0 @@ -Connect to Zoom. Schedule meetings, manage recordings, and handle video conferencing workflows - -Supports authentication: OAuth 2.0 diff --git a/plugins/agent-auth/byoc.md b/plugins/agent-auth/byoc.md deleted file mode 100644 index b88d0f6..0000000 --- a/plugins/agent-auth/byoc.md +++ /dev/null @@ -1,56 +0,0 @@ -# Bring Your Own Credentials - -Bring Your Own Credentials (BYOC) allows you to use your own OAuth applications and authentication credentials with Agent Auth instead of Scalekit's shared credentials. This provides complete control over the authentication experience and enables full whitelabeling of your application. - -## Why bring your own credentials? - -### Complete whitelabeling - -When you use your own OAuth credentials, users see your application name and branding throughout the authentication flow instead of Scalekit's: - -- **OAuth consent screens** display your app name and logo -- **Authorization URLs** use your domain and branding -- **Email notifications** from providers reference your application -- **User permissions** are granted directly to your application - -### Enhanced security and control - -- **Direct relationship**: Maintain direct OAuth relationships with providers -- **Full audit trail**: Complete visibility into authentication flows and user consent -- **Custom verification**: Complete OAuth app verification with your company details -- **Compliance control**: Meet regulatory requirements for direct provider relationships - -### Production-grade capabilities - -- **Dedicated quotas**: Avoid sharing rate limits with other Scalekit customers -- **Higher limits**: Access provider-specific quota increases for your application -- **Priority support**: Direct support relationships with OAuth providers -- **Custom integrations**: Build provider-specific customizations - -## How BYOC works - -With BYOC, authentication flows work as follows: - -1. **Scalekit** handles the initial authentication request with your OAuth client-id details -2. **Provider** authenticates the user and returns tokens to Scalekit -3. **Agent Auth** uses your tokens to execute tools on behalf of users - -## Setting up BYOC - -1. Log in to the Scalekit Dashboard and click **Edit Connection** for the connector you want to configure. -2. Choose the option **"Use your own credentials"** and enter the **Client ID** and **Client Secret** obtained from the provider. -3. Copy the **Redirect URL** shown in the dashboard and add it as one of the authorized redirect URIs in the provider's developer console. - -> In the dashboard: Edit Connection → "Use your own credentials" → enter Client ID and Client Secret → copy the Redirect URL shown and add it to your OAuth app's authorized redirect URIs. - -## Migration from shared credentials - -If you're currently using Scalekit's shared credentials and want to migrate to BYOC: - -> **Note:** Migration considerations: -> - Users will need to re-authenticate with your OAuth applications -> - OAuth consent screens will change to show your branding -> - Rate limits and quotas will change to your application's limits -> - Some users may need to re-grant permissions - -By implementing BYOC, you gain complete control over your users' authentication experience while maintaining the power and flexibility of Agent Auth's unified API for tool execution. diff --git a/plugins/agent-auth/code-samples.md b/plugins/agent-auth/code-samples.md deleted file mode 100644 index 537ca57..0000000 --- a/plugins/agent-auth/code-samples.md +++ /dev/null @@ -1,537 +0,0 @@ -# Code Samples - -This reference provides implementation examples for integrating Scalekit Agent Auth across different frameworks, languages, and use cases. - -## Quick Start Guide - -Choose the right sample based on your needs: - -| Your Goal | Recommended Sample | Framework | Complexity | -|-----------|-------------------|-----------|------------| -| **I just want to see working code** | [google-adk-agent-example](#google-adk-framework-samples) | Google ADK | ⭐ Simple (1 file) | -| Build a conversational AI agent | [sample-langchain-agent](#langchain-framework-samples) | LangChain | ⭐⭐ Medium | -| Use OpenAI's native tool calling | [python-connect-demos/openai](#openai-integration) | OpenAI | ⭐⭐ Medium | -| Multi-tool, reusable workflows | [python-connect-demos/mcp](#mcp-model-context-protocol) | MCP | ⭐⭐⭐ Advanced | -| Simple one-off tool calls | [python-connect-demos/direct](#direct-sdk-usage) | Direct SDK | ⭐ Simple | -| Agent-based natural language | [python-connect-demos/langchain](#langchain-integration) | LangChain | ⭐⭐ Medium | -| Custom API endpoints | [python-connect-demos/proxy](#proxyraw-api) | Proxy | ⭐⭐ Medium | - ---- - -## LangChain Framework Samples - -### Repository: [scalekit-inc/sample-langchain-agent](https://github.com/scalekit-inc/sample-langchain-agent.git) - -**Overview:** Conversational AI agent that can access external APIs (Gmail, etc.) via OAuth, hold multi-turn conversations, and autonomously execute tool calls based on user intent. - -**Requirements:** -- Python >= 3.11 -- `scalekit-sdk-python` >= 2.4.3 -- `langchain` >= 0.1.0 -- `langchain-openai` >= 0.1.0 -- GPT-4o API access - -**Environment Variables:** -```bash -OPENAI_API_KEY=your_openai_api_key_here -SCALEKIT_CLIENT_ID=your_scalekit_client_id -SCALEKIT_CLIENT_SECRET=your_scalekit_client_secret -SCALEKIT_ENV_URL=your_scalekit_environment_url -``` - -**Installation:** -```bash -pip install -r requirements.txt -python main.py -``` - -**Key Code Examples:** - -**1. SDK Initialization** -```python -import os -import scalekit.client -from dotenv import load_dotenv - -load_dotenv() - -scalekit = scalekit.client.ScalekitClient( - client_id=os.getenv("SCALEKIT_CLIENT_ID"), - client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"), - env_url=os.getenv("SCALEKIT_ENV_URL"), -) -actions = scalekit.actions -``` - -**2. OAuth Authorization Flow** -```python -user_name = "user-1234" -connection_names = ["gmail"] - -# Generate authorization links for each service -for conn_name in connection_names: - link = actions.get_authorization_link( - identifier=user_name, - connection_name=conn_name - ) - print(f"🔗 Authorize {conn_name}: {link.link}") - input("✅ Press Enter after authorization...") -``` - -**3. Tool Discovery & Agent Creation** -```python -from langchain.agents import create_tool_calling_agent, AgentExecutor -from langchain_core.prompts import ChatPromptTemplate -from langchain_openai import ChatOpenAI - -# Discover tools from Scalekit -scalekit_tools = actions.langchain.get_tools( - identifier=user_name, - connection_names=connection_names, - page_size=100 -) - -# Create agent -llm = ChatOpenAI(model="gpt-4o", temperature=0.1) -prompt = ChatPromptTemplate.from_messages([ - ("system", "You are a helpful conversational assistant with access to tools."), - ("placeholder", "{chat_history}"), - ("human", "{input}"), - ("placeholder", "{agent_scratchpad}"), -]) - -agent = create_tool_calling_agent(llm, scalekit_tools, prompt) -agent_executor = AgentExecutor( - agent=agent, - tools=scalekit_tools, - verbose=False, - handle_parsing_errors=True -) -``` - -**4. Execute with Chat History** -```python -response = agent_executor.invoke({ - "input": "fetch my first unread email", - "chat_history": chat_history -}) -``` - -**Use Cases:** -- Email management (fetch, read, search) -- Multi-turn conversations with context -- OAuth flow for multiple services -- Tool discovery from Scalekit - ---- - -## Google ADK Framework Samples - -### Repository: [scalekit-inc/google-adk-agent-example](https://github.com/scalekit-inc/google-adk-agent-example.git) - -**Overview:** Minimal Gmail-powered agent demonstrating Agent Auth integration with Google's Agent Development Kit. Entire integration fits in one file. - -**Requirements:** -- Python >= 3.11 -- `google-adk` >= 1.15.1 -- `scalekit-sdk-python` >= 2.4.6 -- Google API key - -**Environment Variables:** -```bash -GOOGLE_GENAI_USE_VERTEXAI=FALSE -GOOGLE_API_KEY=your_google_api_key_here -SCALEKIT_CLIENT_ID=your_scalekit_client_id -SCALEKIT_CLIENT_SECRET=your_scalekit_client_secret -SCALEKIT_ENV_URL=your_scalekit_environment_url -``` - -**Installation:** -```bash -pip install -r requirements.txt -adk run scalekit_tool_agent -``` - -**Key Code Examples:** - -**1. Complete Agent Implementation** -```python -from google.adk.agents import Agent -import scalekit.client -import os - -identifier = "user-1234" -connection_name = "gmail" - -# Initialize Scalekit client -client = scalekit.client.ScalekitClient( - client_id=os.getenv("SCALEKIT_CLIENT_ID"), - client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"), - env_url=os.getenv("SCALEKIT_ENV_URL") -) - -# Generate OAuth authorization link -auth = client.actions.get_authorization_link( - identifier=identifier, - connection_name=connection_name -) - -print("📧 Gmail Authorization Required") -print(f"🔗 Visit this URL to authorize the gmail connection:\n\n {auth.link}\n") -input("✅ Press Enter after authorization...") - -# Generate Gmail tools with authenticated access -gmail_tools = client.actions.google.get_tools( - providers=["GMAIL"], - identifier=identifier, - page_size=100 -) - -# Create ADK agent -root_agent = Agent( - name="scalekit_tool_agent", - model="gemini-2.5-flash", - description="Tool agent for Gmail and general questions", - instruction=( - "You are a helpful assistant that can use gmail tools to answer " - "user questions based on their emails and general questions." - ), - tools=gmail_tools, -) -``` - -**Use Cases:** -- Read and analyze user emails -- Search inbox content -- Natural language email queries -- Quick start pattern for new developers - ---- - -## Python Integration Patterns - -### Repository: [scalekit-inc/python-connect-demos](https://github.com/scalekit-inc/python-connect-demos.git) - -Comprehensive collection of integration patterns organized by framework and use case. - -#### Direct SDK Usage - -**Pattern:** Simple one-off tool calls with direct SDK methods. - -**Gmail - Fetch Emails** -```python -response = connect.execute_tool( - tool_name="gmail_fetch_mails", - identifier="user@example.com", - tool_input={ - "max_results": 10, - "query": "is:unread" - } -) -``` - -**Slack - Send Message** -```python -response = connect.execute_tool( - tool_name="slack_send_message", - identifier="user_id", - tool_input={ - "channel": "#connect", - "text": "Hello from demo!" - } -) -``` - -**Salesforce - SOQL Query** -```python -response = connect.execute_tool( - tool_name="salesforce_soql_execute", - identifier="user_id", - tool_input={ - "soql_query": "SELECT Id, Name FROM Account" - } -) -``` - -**Pre/Post Modifiers** (reduce token usage) -```python -from scalekit.connect.types import ToolInput, ToolOutput - -@connect.pre_modifier(tool_names=["gmail_fetch_mails"]) -def gmail_pre_modifier(tool_input: ToolInput): - tool_input['query'] = 'is:unread' - return tool_input - -@connect.post_modifier(tool_names=["gmail_fetch_mails"]) -def gmail_post_modifier(output: ToolOutput): - return {"response": output['messages'][0]['snippet']} -``` - -#### LangChain Integration - -**Pattern:** Agent-based workflows with natural language interactions. - -**Calendar Agent** -```python -from langchain_openai import ChatOpenAI -from langchain.agents import AgentExecutor, create_openai_tools_agent - -tools = connect.langchain.get_tools( - identifier="user_123", - providers=["GOOGLECALENDAR"], - tool_names=["googlecalendar_list_events"] -) - -llm = ChatOpenAI(model="gpt-4o") -agent = create_openai_tools_agent(llm, tools, prompt) -executor = AgentExecutor(agent=agent, tools=tools, verbose=True) -result = executor.invoke({"input": "List my events for today"}) -``` - -**Salesforce Agent** -```python -tools = connect.langchain.get_tools( - identifier="user_123", - providers=["SALESFORCE"], - tool_names=["salesforce_soql_execute"] -) -result = executor.invoke({"input": "Get all accounts with 'united' in the name"}) -``` - -**Freshdesk Customer Support Workflow** -```python -# Complete workflow: create contact, ticket, assign, reply, update status -tools = connect.langchain.get_tools( - identifier="user_123", - providers=["FRESHDESK"] -) -``` - -#### OpenAI Integration - -**Pattern:** Multi-step workflows using OpenAI's native tool calling. - -**Gmail → Summary → Slack** -```python -from openai import OpenAI - -client = OpenAI() -response = client.responses.create( - model="gpt-4.1", - input=[{"role": "user", "content": "Read emails, send summary to Slack"}], - tools=tool.ALL_TOOLS, - tool_choice="auto" -) - -# Scalekit handles tool execution -tool_response = sk.connect.handle_tool_calls( - input_messages=input_messages, - openai_response=response, - identifier="user@example.com" -) -``` - -#### MCP (Model Context Protocol) - -**Pattern:** Multi-tool, reusable config patterns for complex workflows. - -**Email Reminder Automation** -```python -from scalekit.actions.models.mcp_config import McpConfigConnectionToolMapping - -# Create MCP config -config_response = my_mcp.create_config( - name="reminder-manager", - description="Summarizes emails and creates calendar events", - connection_tool_mappings=[ - # Gmail works directly — no dashboard setup required - McpConfigConnectionToolMapping( - connection_name="gmail", - tools=[] - ), - # Google Calendar must be created in dashboard first - McpConfigConnectionToolMapping( - connection_name="MY_CALENDAR", - tools=["googlecalendar_create_event", "googlecalendar_delete_event"] - ) - ] -) - -# Get MCP instance and URL -instance = my_mcp.ensure_instance( - config_name="reminder-manager", - user_identifier="john-doe", - name="reminder-mcp-john" -) -mcp_url = instance.instance.url -``` - -#### Proxy/Raw API - -**Pattern:** Custom API endpoints not in tool catalog. - -**Google Drive Operations** -```python -# Upload file -upload_response = client.actions.request( - connection_name="GOOGLE_DRIVE", - identifier="user@example.com", - path="/upload/drive/v3/files", - method="POST", - query_params={"uploadType": "media", "name": "demo.pdf"}, - form_data=file_bytes, - headers={"Content-Type": "application/pdf"} -) -``` - -#### Static Auth - -**Pattern:** API key or Basic authentication (no OAuth). - -**API Key Auth** -```python -response = actions.get_or_create_connected_account( - connection_name="fathom", - identifier="your_user", - authorization_details={ - "static_auth": { - "api_key": "your-api-key" - } - } -) -``` - -**Basic Auth** -```python -response = actions.get_or_create_connected_account( - connection_name="gong", - identifier="your_user", - authorization_details={ - "static_auth": { - "domain": "account.gong.io", - "username": "api-key", - "password": "api-secret" - } - } -) -``` - -**Freshdesk (Domain + Username + Password)** -```python -response = connect.execute_tool( - tool_name="freshdesk_create_ticket", - identifier="user_id", - tool_input={ - "name": "John Doe", - "email": "john@example.com", - "subject": "Website server down", - "description": "
Site has crashed
", - "type": "Problem", - "tags": ["urgent", "server"] - } -) -``` - ---- - -## Provider Reference - -| Provider | Sample Repo | Demo File | Auth Type | -|----------|-------------|-----------|-----------| -| **Attention** | python-connect-demos | `direct/attention.py` | API Key | -| **Chorus** | python-connect-demos | `direct/chorus.py` | Basic | -| **Clari** | python-connect-demos | `direct/clari.py` | Basic | -| **Fathom** | python-connect-demos | `direct/fathom.py` | API Key | -| **Freshdesk** | python-connect-demos | `static/freshdesk.py`, `langchain/freshdesk.py` | Basic | -| **Gmail** | sample-langchain-agent, google-adk-agent-example, python-connect-demos | `main.py`, `agent.py`, `direct/gmail.py` | OAuth | -| **Gong** | python-connect-demos | `direct/gong.py` | Basic | -| **Google Calendar** | python-connect-demos | `langchain/main.py`, `mcp/main.py` | OAuth | -| **Google Drive** | python-connect-demos | `proxy/gdrive.py` | OAuth | -| **HubSpot** | python-connect-demos | `langchain/hubspot.py` | OAuth | -| **Salesforce** | python-connect-demos | `direct/salesforce.py`, `langchain/salesforce.py` | OAuth | -| **Slack** | python-connect-demos, openai integration | `direct/slack.py` | OAuth | -| **Snowflake** | python-connect-demos | `direct/snowflake.py` | OAuth | - ---- - -## Common Patterns - -### Token Management - -**Extract tokens from connected account:** -```python -account = actions.get_connected_account(connection_name, identifier) -tokens = account.connected_account.authorization_details["oauth_token"] -access_token = tokens["access_token"] -refresh_token = tokens["refresh_token"] -``` - -**Check connection status:** -```python -response = connect.get_connected_account(connection_name, identifier) -if response.connected_account.status != "ACTIVE": - # Re-authenticate -``` - -### Error Handling - -**Check connection before executing tools:** -```python -def authenticate_tool(connect, connection_name, identifier): - response = connect.get_connected_account(connection_name, identifier) - if response.connected_account.status != "ACTIVE": - link = connect.get_authorization_link( - connection_name=connection_name, - identifier=identifier - ) - print(f"Authorize: {link.link}") - input("Press Enter after authorizing...") - return True -``` - -### Configuration - -**Environment setup:** -```python -import os -from dotenv import load_dotenv - -load_dotenv() - -scalekit = scalekit.client.ScalekitClient( - client_id=os.getenv("SCALEKIT_CLIENT_ID"), - client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"), - env_url=os.getenv("SCALEKIT_ENV_URL"), -) -``` - ---- - -## Getting Help - -### Scalekit Documentation -- **Official Docs:** [docs.scalekit.com](https://docs.scalekit.com) -- **Scalekit Dashboard:** [app.scalekit.com](https://app.scalekit.com) -- **API Credentials:** Dashboard → Developers → Settings → API Credentials - -### Sample Repositories -- **LangChain Agent:** [github.com/scalekit-inc/sample-langchain-agent](https://github.com/scalekit-inc/sample-langchain-agent) -- **Google ADK Agent:** [github.com/scalekit-inc/google-adk-agent-example](https://github.com/scalekit-inc/google-adk-agent-example) -- **Python Connect Demos:** [github.com/scalekit-inc/python-connect-demos](https://github.com/scalekit-inc/python-connect-demos) - -### Framework Documentation -- **LangChain:** [python.langchain.com](https://python.langchain.com) -- **Google ADK:** [google.github.io/adk-docs](https://google.github.io/adk-docs) -- **MCP Protocol:** [spec.modelcontextprotocol.io](https://spec.modelcontextprotocol.io) -- **OpenAI API:** [platform.openai.com/docs](https://platform.openai.com/docs) - -### SDK Documentation -- **Python SDK:** [github.com/scalekit-inc/scalekit-sdk-python](https://github.com/scalekit-inc/scalekit-sdk-python) -- **Node SDK:** [github.com/scalekit-inc/scalekit-sdk-node](https://github.com/scalekit-inc/scalekit-sdk-node) - -### Troubleshooting -1. **Connection not ACTIVE:** Check OAuth flow completed in browser -2. **Token expired:** Scalekit auto-refreshes tokens; call `get_connected_account` before tool calls -3. **Invalid credentials:** Verify `SCALEKIT_ENV_URL`, `SCALEKIT_CLIENT_ID`, and `SCALEKIT_CLIENT_SECRET` -4. **Tool not found:** Verify connection name matches Scalekit Dashboard exactly -5. **Scope errors:** Check connection configuration has required scopes in Scalekit Dashboard diff --git a/plugins/agent-auth/connected-accounts.md b/plugins/agent-auth/connected-accounts.md deleted file mode 100644 index c32f761..0000000 --- a/plugins/agent-auth/connected-accounts.md +++ /dev/null @@ -1,559 +0,0 @@ -# Connected accounts - -Connected accounts in Agent Auth represent individual user or organization connections to third-party providers. They contain the authentication state, tokens, and permissions needed to execute tools on behalf of a specific identifier (user_id, org_id, or custom identifier). - -## What are connected accounts? - -Connected accounts are the runtime instances that link your users to their third-party application accounts. Each connected account: - -- **Links to a connection**: Uses a pre-configured connection for authentication -- **Has a unique identifier**: Associated with a user_id, org_id, or custom identifier -- **Maintains auth state**: Tracks whether the user has completed authentication -- **Stores tokens**: Securely holds access tokens and refresh tokens -- **Manages permissions**: Tracks granted scopes and permissions - -## Connected account lifecycle - -Connected accounts go through several states during their lifecycle: - -### Account states - -1. **Pending**: Account created but user hasn't completed authentication -2. **Active**: User has authenticated and tokens are valid -3. **Expired**: Tokens have expired and need refresh -4. **Revoked**: User has revoked access to the application -5. **Error**: Account has authentication or configuration errors -6. **Suspended**: Account temporarily disabled - -### State transitions - -```d2 -direction: right - -A: Pending -B: Active -C: Expired -D: Revoked -E: Error -F: Suspended - -A -> B -B -> C -C -> B -B -> D -B -> E -E -> B -B -> F -F -> B -``` - -## Creating connected accounts - -### Using the dashboard - -1. Navigate to connected accounts in your Agent Auth dashboard -2. Click create account to start the process -3. Select connection to use for authentication -4. Enter identifier (user_id, email, or custom identifier) -5. Configure settings such as scopes and permissions -6. Generate auth URL for the user to complete authentication -7. Monitor status until user completes the flow - -### Using the API - -Create connected accounts programmatically: - -**cURL** - -```bash -curl -X POST "https://api.scalekit.com/v1/connect/accounts" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ - -H "Content-Type: application/json" \ - -d '{ - "connection_id": "conn_gmail_oauth", - "identifier": "user_123", - "identifier_type": "user_id", - "scopes": ["https://www.googleapis.com/auth/gmail.send"], - "settings": { - "auto_refresh": true, - "expires_in": 3600 - } - }' -``` - -**JavaScript** - -```javascript -const connectedAccount = await agentConnect.accounts.create({ - connection_id: 'conn_gmail_oauth', - identifier: 'user_123', - identifier_type: 'user_id', - scopes: ['https://www.googleapis.com/auth/gmail.send'], - settings: { - auto_refresh: true, - expires_in: 3600 - } -}); - -// Generate authorization URL for user -const authUrl = await agentConnect.accounts.getAuthUrl(connectedAccount.id); -``` - -**Python** - -```python -connected_account = agent_connect.accounts.create( - connection_id='conn_gmail_oauth', - identifier='user_123', - identifier_type='user_id', - scopes=['https://www.googleapis.com/auth/gmail.send'], - settings={ - 'auto_refresh': True, - 'expires_in': 3600 - } -) - -# Generate authorization URL for user -auth_url = agent_connect.accounts.get_auth_url(connected_account.id) -``` - -## Authentication flow - -### OAuth 2.0 flow - -For OAuth connections, connected accounts follow the standard OAuth flow: - -1. Create connected account with pending status -2. Generate authorization URL for the user -3. User completes OAuth flow with the third-party provider -4. Provider redirects back with authorization code -5. Exchange code for tokens and update account status -6. Account becomes active and ready for tool execution - -### Authorization URL generation - -Generate URLs for users to complete authentication: - -```javascript -// Generate authorization URL -const authUrl = await agentConnect.accounts.getAuthUrl('account_id', { - state: 'custom_state_value', - redirect_uri: 'https://your-app.com/callback', - scopes: ['additional_scope'] -}); - -// Example generated URL -// https://accounts.google.com/oauth/authorize? -// client_id=your_client_id& -// redirect_uri=https://your-app.com/callback& -// scope=https://www.googleapis.com/auth/gmail.send& -// response_type=code& -// state=custom_state_value -``` - -### Handling callbacks - -Process the OAuth callback to complete authentication: - -**JavaScript** - -```javascript -// Handle OAuth callback -app.get('/callback', async (req, res) => { - const { code, state, error } = req.query; - - if (error) { - // Handle OAuth error - return res.status(400).json({ error: error }); - } - - try { - // Exchange code for tokens - const result = await agentConnect.accounts.exchangeCode( - 'account_id', - code, - state - ); - - // Account is now active - res.json({ status: 'success', account: result }); - } catch (err) { - res.status(500).json({ error: err.message }); - } -}); -``` - -**Python** - -```python -@app.route('/callback') -def handle_callback(): - code = request.args.get('code') - state = request.args.get('state') - error = request.args.get('error') - - if error: - return jsonify({'error': error}), 400 - - try: - # Exchange code for tokens - result = agent_connect.accounts.exchange_code( - 'account_id', - code, - state - ) - - # Account is now active - return jsonify({'status': 'success', 'account': result}) - except Exception as e: - return jsonify({'error': str(e)}), 500 -``` - -## Managing connected accounts - -### Account information - -Retrieve connected account details: - -```javascript -const account = await agentConnect.accounts.get('account_id'); - -// Account object structure -{ - "id": "account_123", - "connection_id": "conn_gmail_oauth", - "identifier": "user_123", - "identifier_type": "user_id", - "provider": "gmail", - "status": "active", - "scopes": ["https://www.googleapis.com/auth/gmail.send"], - "created_at": "2024-01-15T10:30:00Z", - "updated_at": "2024-01-15T10:45:00Z", - "expires_at": "2024-01-15T11:45:00Z", - "metadata": { - "user_email": "user@example.com", - "provider_account_id": "google_user_123" - } -} -``` - -### Token management - -Connected accounts automatically handle token lifecycle: - -**Automatic token refresh:** -- Tokens are refreshed automatically before expiration -- Refresh happens transparently during tool execution -- Failed refresh attempts update account status to expired - -**Manual token refresh:** -```javascript -// Manually refresh tokens -const refreshed = await agentConnect.accounts.refreshTokens('account_id'); - -// Check token status -const tokenStatus = await agentConnect.accounts.getTokenStatus('account_id'); -``` - -For detailed token management including automatic refresh, error handling, and security, see [token-management.md](token-management.md). - -### Account status monitoring - -Monitor account authentication status: - -```javascript -// Check account status -const status = await agentConnect.accounts.getStatus('account_id'); - -// Possible status values: -// - pending: Waiting for user authentication -// - active: Authenticated and ready -// - expired: Tokens expired, needs refresh -// - revoked: User revoked access -// - error: Authentication error -// - suspended: Account temporarily disabled -``` - -## Account permissions and scopes - -### Scope management - -Connected accounts can have different scopes than their parent connection: - -```javascript -// Create account with custom scopes -const account = await agentConnect.accounts.create({ - connection_id: 'conn_gmail_oauth', - identifier: 'user_123', - scopes: [ - 'https://www.googleapis.com/auth/gmail.readonly', // Read-only access - 'https://www.googleapis.com/auth/gmail.send' // Send emails - ] -}); - -// Update account scopes (requires re-authentication) -await agentConnect.accounts.updateScopes('account_id', { - scopes: ['https://www.googleapis.com/auth/gmail.modify'] -}); -``` - -### Permission validation - -Verify account permissions before tool execution: - -```javascript -// Check if account has required permissions -const hasPermission = await agentConnect.accounts.hasPermission( - 'account_id', - 'https://www.googleapis.com/auth/gmail.send' -); - -// Get all granted permissions -const permissions = await agentConnect.accounts.getPermissions('account_id'); -``` - -## Account metadata and settings - -### Custom metadata - -Store additional information with connected accounts: - -```javascript -// Add custom metadata -await agentConnect.accounts.updateMetadata('account_id', { - user_email: 'user@example.com', - department: 'engineering', - preferences: { - notification_settings: 'email', - timezone: 'UTC' - } -}); - -// Retrieve metadata -const metadata = await agentConnect.accounts.getMetadata('account_id'); -``` - -### Account settings - -Configure account-specific settings: - -```javascript -// Update account settings -await agentConnect.accounts.updateSettings('account_id', { - auto_refresh: true, - rate_limit: 100, - timeout: 30, - retry_attempts: 3 -}); -``` - -## Bulk operations - -### Managing multiple accounts - -Handle multiple connected accounts efficiently: - -```javascript -// Create multiple accounts -const accounts = await agentConnect.accounts.createBulk([ - { - connection_id: 'conn_gmail_oauth', - identifier: 'user_1', - identifier_type: 'user_id' - }, - { - connection_id: 'conn_gmail_oauth', - identifier: 'user_2', - identifier_type: 'user_id' - } -]); - -// Get accounts by connection -const gmailAccounts = await agentConnect.accounts.list({ - connection_id: 'conn_gmail_oauth' -}); - -// Get accounts by status -const activeAccounts = await agentConnect.accounts.list({ - status: 'active' -}); -``` - -### Batch operations - -Perform operations on multiple accounts: - -```javascript -// Refresh tokens for multiple accounts -const refreshResults = await agentConnect.accounts.refreshTokensBulk([ - 'account_1', - 'account_2', - 'account_3' -]); - -// Update settings for multiple accounts -await agentConnect.accounts.updateSettingsBulk([ - 'account_1', - 'account_2' -], { - auto_refresh: true, - rate_limit: 150 -}); -``` - -## Error handling - -### Common errors - -Handle common connected account errors: - -```javascript -try { - const account = await agentConnect.accounts.get('account_id'); -} catch (error) { - switch (error.code) { - case 'ACCOUNT_NOT_FOUND': - // Account doesn't exist - break; - case 'ACCOUNT_EXPIRED': - // Tokens expired, refresh needed - break; - case 'ACCOUNT_REVOKED': - // User revoked access - break; - case 'INVALID_PERMISSIONS': - // Insufficient permissions - break; - default: - // Other errors - break; - } -} -``` - -### Error recovery - -Implement error recovery strategies: - -1. Detect error - Monitor account status and API responses -2. Classify error - Determine if error is recoverable -3. Attempt recovery - Try token refresh or re-authentication -4. Notify user - Inform user if manual action is required -5. Update status - Update account status based on recovery result - -## Security considerations - -### Token security - -Protect user tokens and credentials: - -- **Encryption**: All tokens are encrypted at rest and in transit -- **Token rotation**: Implement regular token rotation -- **Access logging**: Log all token access and usage -- **Secure storage**: Use secure storage mechanisms for tokens - -### Permission management - -Follow principle of least privilege: - -- **Minimal scopes**: Request only necessary permissions -- **Scope validation**: Verify permissions before tool execution -- **Regular audit**: Review granted permissions regularly -- **User consent**: Ensure users understand granted permissions - -### Account isolation - -Ensure proper account isolation: - -- **Tenant isolation**: Separate accounts by tenant/organization -- **User isolation**: Prevent cross-user data access -- **Connection isolation**: Separate different connection types -- **Audit trail**: Maintain detailed audit logs - -## Monitoring and analytics - -### Account health monitoring - -Monitor connected account health: - -```javascript -// Get account health metrics -const health = await agentConnect.accounts.getHealth('account_id'); - -// Health metrics include: -// - Token expiry status -// - Authentication success rate -// - API error rates -// - Last successful authentication -``` - -### Usage analytics - -Track account usage patterns: - -```javascript -// Get account usage statistics -const usage = await agentConnect.accounts.getUsage('account_id', { - start_date: '2024-01-01', - end_date: '2024-01-31' -}); - -// Usage data includes: -// - Total tool executions -// - API requests made -// - Error rates -// - Most used tools -``` - -## Best practices - -### Account lifecycle management - -- **Regular cleanup**: Remove unused or expired accounts -- **Status monitoring**: Monitor account status changes -- **Proactive refresh**: Refresh tokens before expiration -- **User notifications**: Notify users of authentication issues - -### Performance optimization - -- **Connection pooling**: Reuse connections efficiently -- **Token caching**: Cache tokens appropriately -- **Batch operations**: Use bulk operations when possible -- **Async processing**: Handle authentication flows asynchronously - -### User experience - -- **Clear error messages**: Provide helpful error messages to users -- **Seamless re-auth**: Make re-authentication flows smooth -- **Status visibility**: Show users their connection status -- **Easy revocation**: Allow users to easily revoke access - -## Testing connected accounts - -### Development testing - -Test connected accounts in development: - -```javascript -// Create test account -const testAccount = await agentConnect.accounts.create({ - connection_id: 'conn_test_provider', - identifier: 'test_user', - identifier_type: 'user_id', - test_mode: true -}); - -// Use test tokens -const testTokens = await agentConnect.accounts.getTestTokens('account_id'); -``` - -### Integration testing - -Test authentication flows: - -1. Create test connection with test credentials -2. Create connected account with test identifier -3. Generate auth URL and complete OAuth flow -4. Verify account status becomes active -5. Test tool execution with the account -6. Test token refresh and error scenarios diff --git a/plugins/agent-auth/connections.md b/plugins/agent-auth/connections.md deleted file mode 100644 index 118dc1f..0000000 --- a/plugins/agent-auth/connections.md +++ /dev/null @@ -1,434 +0,0 @@ -# Connections - -Connections in Agent Auth are specific configurations that define how your application authenticates and interacts with third-party providers. Each connection contains the necessary credentials, settings, and parameters required to establish secure communication with a provider's API. - -## Table of Contents - -- [What are connections?](#what-are-connections) -- [Connection types](#connection-types) -- [Creating connections](#creating-connections) -- [Connection configuration](#connection-configuration) -- [Managing connections](#managing-connections) -- [Security considerations](#security-considerations) -- [Troubleshooting connections](#troubleshooting-connections) -- [Best practices](#best-practices) -- [Connection templates](#connection-templates) - ---- - -## What are connections? - -Connections serve as the bridge between your Agent Auth setup and third-party providers. They contain: - -- **Authentication credentials** (OAuth client ID/secret, API keys, etc.) -- **Configuration settings** (scopes, permissions, endpoints) -- **Tool definitions** and their parameters -- **Rate limiting** and retry policies -- **Custom settings** specific to your use case - -## Connection types - -Agent Auth supports various connection types based on different authentication methods: - -### OAuth 2.0 connections - -Most modern APIs use OAuth 2.0 for secure authentication: - -```json -{ - "connection_id": "conn_gmail_oauth", - "provider": "gmail", - "auth_type": "oauth2", - "credentials": { - "client_id": "your-client-id", - "client_secret": "your-client-secret", - "redirect_uri": "https://your-app.com/callback" - }, - "scopes": ["https://www.googleapis.com/auth/gmail.send"], - "settings": { - "auto_refresh": true, - "expires_in": 3600 - } -} -``` - -### API key connections - -Simple authentication using static API keys: - -```json -{ - "connection_id": "conn_jira_api", - "provider": "jira", - "auth_type": "api_key", - "credentials": { - "api_key": "your-api-key", - "base_url": "https://your-domain.atlassian.net" - }, - "settings": { - "rate_limit": 100, - "timeout": 30 - } -} -``` - -### Custom authentication - -For providers with unique authentication requirements: - -```json -{ - "connection_id": "conn_custom_auth", - "provider": "custom_provider", - "auth_type": "custom", - "credentials": { - "username": "your-username", - "password": "your-password", - "token": "bearer-token" - }, - "settings": { - "auth_endpoint": "https://api.provider.com/auth", - "refresh_endpoint": "https://api.provider.com/refresh" - } -} -``` - -## Creating connections - -> **Important**: Gmail is the only connector that does not require dashboard or API connection setup. Gmail can be used directly with `connection_name="gmail"` without any pre-configuration. All other connectors must be created via dashboard or API before use. - -> **Note**: The **Connection Name** you create in the dashboard or API is exactly what you use as the `connection_name` parameter in your SDK code. They must match exactly. - -### Using the dashboard - -1. **Navigate to connections** in your Agent Auth dashboard -2. **Select provider** from the list of available providers -3. **Choose connection type** based on your authentication method -4. **Configure credentials** by entering your API keys or OAuth settings -5. **Set permissions** and scopes for the connection -6. **Test connection** to verify configuration -7. **Save connection** for use with connected accounts - -### Using the API - -Create connections programmatically using the Agent Auth API: - -**cURL:** - -```bash -curl -X POST "https://api.scalekit.com/v1/connect/connections" \ - -H "Authorization: Bearer YOUR_API_TOKEN" \ - -H "Content-Type: application/json" \ - -d '{ - "provider": "gmail", - "auth_type": "oauth2", - "credentials": { - "client_id": "your-client-id", - "client_secret": "your-client-secret" - }, - "scopes": ["https://www.googleapis.com/auth/gmail.send"], - "settings": { - "auto_refresh": true - } - }' -``` - -**JavaScript:** - -```javascript -const connection = await agentConnect.connections.create({ - provider: 'gmail', - auth_type: 'oauth2', - credentials: { - client_id: 'your-client-id', - client_secret: 'your-client-secret' - }, - scopes: ['https://www.googleapis.com/auth/gmail.send'], - settings: { - auto_refresh: true - } -}); -``` - -**Python:** - -```python -connection = agent_connect.connections.create( - provider='gmail', - auth_type='oauth2', - credentials={ - 'client_id': 'your-client-id', - 'client_secret': 'your-client-secret' - }, - scopes=['https://www.googleapis.com/auth/gmail.send'], - settings={ - 'auto_refresh': True - } -) -``` - -## Connection configuration - -### Authentication settings - -Configure authentication based on your provider's requirements: - -**OAuth 2.0 settings:** -- **Client ID**: Your OAuth application's client identifier -- **Client Secret**: Your OAuth application's client secret -- **Redirect URI**: Where users return after authorization -- **Scopes**: Permissions your application requests -- **Authorization URL**: Provider's OAuth authorization endpoint -- **Token URL**: Provider's token exchange endpoint - -**API Key settings:** -- **API Key**: Your provider-issued API key -- **Base URL**: Provider's API base URL -- **Authentication Header**: How the API key is sent (header, query param) -- **Key Prefix**: Any prefix required (e.g., "Bearer ", "API-Key ") - -### Scopes and permissions - -Define what your application can access: - -**Note:** Scopes determine what data and actions your application can access on behalf of users. Request only the minimum scopes necessary for your use case. - -**Common scope patterns:** - -- **Read-only**: Access to view data only -- **Read-write**: Access to view and modify data -- **Admin**: Full administrative access -- **Specific resources**: Access to particular data types - -**Example scopes for popular providers:** - -```javascript -// Gmail scopes -const gmailScopes = [ - 'https://www.googleapis.com/auth/gmail.readonly', // Read emails - 'https://www.googleapis.com/auth/gmail.send', // Send emails - 'https://www.googleapis.com/auth/gmail.modify' // Modify emails -]; - -// Slack scopes -const slackScopes = [ - 'channels:read', // Read channel information - 'chat:write', // Send messages - 'files:read' // Read file information -]; - -// Jira scopes -const jiraScopes = [ - 'read:jira-work', // Read issues and projects - 'write:jira-work', // Create and update issues - 'manage:jira-project' // Manage projects -]; -``` - -### Rate limiting and throttling - -Configure how your connection handles API rate limits: - -```json -{ - "rate_limiting": { - "requests_per_minute": 100, - "requests_per_hour": 1000, - "burst_limit": 10, - "backoff_strategy": "exponential", - "retry_attempts": 3 - } -} -``` - -### Connection settings - -Customize connection behavior: - -**Token management:** -- **Auto-refresh**: Automatically refresh expired tokens -- **Token expiry**: How long tokens remain valid -- **Refresh buffer**: Refresh tokens before expiry -- **Token storage**: Where tokens are securely stored - -**Request settings:** -- **Timeout**: Maximum request duration -- **Retry policy**: How failed requests are retried -- **User agent**: Custom user agent string -- **Base headers**: Headers sent with every request - -## Managing connections - -### Connection lifecycle - -Connections go through various states: - -1. **Draft**: Connection is being configured -2. **Active**: Connection is ready for use -3. **Testing**: Connection is being validated -4. **Inactive**: Connection is disabled -5. **Error**: Connection has configuration issues - -### Updating connections - -Modify existing connections when requirements change: - -**Dashboard:** - -1. Navigate to your connections list -2. Select the connection to modify -3. Update credentials, scopes, or settings -4. Test the updated connection -5. Save changes - -**API:** - -```javascript -const updatedConnection = await agentConnect.connections.update('conn_id', { - scopes: ['new-scope-1', 'new-scope-2'], - settings: { - rate_limit: 200, - timeout: 60 - } -}); -``` - -### Connection monitoring - -Monitor connection health and performance: - -- **Authentication status**: Track token validity and refresh cycles -- **API usage**: Monitor request volume and rate limit consumption -- **Error rates**: Track failed requests and common errors -- **Performance metrics**: Response times and throughput - -## Security considerations - -### Credential management - -Secure handling of connection credentials: - -- **Encryption**: All credentials are encrypted at rest -- **Access control**: Limit who can view or modify connections -- **Audit logging**: Track all credential access and changes -- **Rotation**: Regular credential rotation policies - -### OAuth best practices - -Follow OAuth 2.0 security best practices: - -- **Use PKCE**: Proof Key for Code Exchange for public clients -- **Validate state**: Prevent CSRF attacks with state parameters -- **Scope limitation**: Request minimal necessary scopes -- **Token storage**: Secure token storage and transmission - -### API key security - -Protect API keys properly: - -- **Environment variables**: Store keys in environment variables -- **Key rotation**: Regular key rotation schedules -- **Access logging**: Log API key usage -- **Least privilege**: Use keys with minimal required permissions - -## Troubleshooting connections - -### Common issues - -**Authentication failures:** -- Invalid credentials -- Expired tokens -- Incorrect scopes -- Provider API changes - -**Rate limiting errors:** -- Exceeded request limits -- Incorrect rate limit configuration -- Burst limit violations -- Shared quota issues - -**Configuration problems:** -- Incorrect endpoint URLs -- Missing required settings -- Invalid scope combinations -- Provider-specific requirements - -### Debugging steps - -1. **Check credentials** - Verify all credentials are correct and current -2. **Test authentication** - Use the connection test feature -3. **Review logs** - Check connection logs for error details -4. **Validate settings** - Ensure all settings match provider requirements -5. **Check provider status** - Verify provider API is operational -6. **Update configuration** - Apply any necessary fixes -7. **Re-test connection** - Confirm issues are resolved - -## Best practices - -### Connection organization - -- **Naming convention**: Use clear, descriptive connection names -- **Environment separation**: Separate connections for dev/staging/prod -- **Documentation**: Document connection purposes and configurations -- **Version control**: Track connection configuration changes - -### Security practices - -- **Regular updates**: Keep credentials and settings current -- **Monitoring**: Continuously monitor connection health -- **Backup**: Maintain secure backups of connection configurations -- **Access review**: Regularly review who has access to connections - -### Performance optimization - -- **Connection pooling**: Reuse connections efficiently -- **Caching**: Cache frequently accessed configuration data -- **Batch operations**: Group API calls when possible -- **Error handling**: Implement robust error handling and retry logic - -## Connection templates - -Use templates for common connection patterns: - -### Google Workspace template - -```json -{ - "provider": "google_workspace", - "auth_type": "oauth2", - "scopes": [ - "https://www.googleapis.com/auth/gmail.readonly", - "https://www.googleapis.com/auth/calendar.readonly" - ], - "settings": { - "auto_refresh": true, - "rate_limit": 100, - "timeout": 30 - } -} -``` - -### Slack workspace template - -```json -{ - "provider": "slack", - "auth_type": "oauth2", - "scopes": [ - "channels:read", - "chat:write", - "users:read" - ], - "settings": { - "auto_refresh": true, - "rate_limit": 50, - "timeout": 15 - } -} -``` - -Next, learn how to create and manage [Connected accounts](/agent-auth/connected-accounts) that use these connections to authenticate and execute tools for your users. - -## Related documentation - -- [byoc.md](byoc.md) — use your own OAuth credentials instead of Scalekit's shared defaults \ No newline at end of file diff --git a/plugins/agent-auth/hooks/hooks.json b/plugins/agent-auth/hooks/hooks.json deleted file mode 100644 index 5eb61b3..0000000 --- a/plugins/agent-auth/hooks/hooks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "Usage beacon for Scalekit agent-auth plugin", - "hooks": { - "PostToolUse": [ - { - "matcher": ".*", - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh agent-auth post_tool", - "timeout": 10 - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh agent-auth stop", - "timeout": 10 - } - ] - } - ] - } -} diff --git a/plugins/agent-auth/providers.md b/plugins/agent-auth/providers.md deleted file mode 100644 index 5a4270b..0000000 --- a/plugins/agent-auth/providers.md +++ /dev/null @@ -1,189 +0,0 @@ -# Providers - -Providers in Agent Auth represent third-party applications that your users can connect to and interact with through Scalekit's unified API. Each provider offers a set of tools and capabilities that can be executed on behalf of connected users. - -## What are providers? - -Providers are pre-configured integrations with popular third-party applications that enable your users to: - -- **Connect their accounts** using secure authentication methods -- **Execute tools and actions** through a unified API interface -- **Access data and functionality** from external applications -- **Maintain secure connections** with proper authorization scopes - -## Supported providers - -Agent Auth supports a wide range of popular business applications: - -| Category | Providers | -|---|---| -| **Google Workspace** | Gmail, Google Calendar, Google Drive, Google Docs, Google Sheets, Google Forms, Google Meet, Google Ads | -| **Microsoft 365** | Outlook, OneDrive, SharePoint, Microsoft Teams, Microsoft Excel, Microsoft Word, OneNote | -| **Communication** | Slack, Zoom | -| **Project Management** | Jira, Asana, Trello, Monday.com, ClickUp, Linear, Confluence | -| **CRM & Sales** | Salesforce, HubSpot, Zendesk, Freshdesk, Intercom, Gong | -| **Development** | GitHub | -| **Productivity** | Notion, Airtable, Dropbox | -| **Data & Analytics** | BigQuery, Snowflake, Fathom | -| **Service Management** | ServiceNow | - -For per-connector tool specifications, see [agent-connectors/README.md](agent-connectors/README.md). - -## Provider capabilities - -Each provider offers different capabilities based on their API and authentication model. - -### Authentication methods - -- **OAuth 2.0**: Standard method for all supported providers - -### Available tools - -Providers expose various tools that can be executed through Agent Auth: - -> **Note:** Tool availability depends on the specific provider and the user's permissions within that application. - -**Common tool categories:** - -- **Data retrieval**: Fetch emails, calendar events, files, or records -- **Data creation**: Create new items, send messages, or schedule events -- **Data modification**: Update existing records or settings -- **File operations**: Upload, download, or manage files -- **Communication**: Send notifications, messages, or alerts - -### Rate limits and quotas - -Each provider has different rate limits and quotas: - -- **API rate limits**: Requests per minute/hour limitations -- **Data quotas**: Storage or transfer limitations -- **Feature restrictions**: Premium features or enterprise-only capabilities - -## Provider configuration - -### Adding a provider - -1. **Navigate to providers** in your Agent Auth dashboard -2. **Select provider** from the available options -3. **Configure settings** such as scopes and permissions -4. **Set up authentication** — configure OAuth client credentials if using custom OAuth apps -5. **Test connection** to verify provider setup - -### Provider settings - -Each provider can be configured with: - -**Authentication settings:** -- OAuth client credentials (if using custom OAuth apps) -- API endpoint URLs -- Supported scopes and permissions -- Token refresh settings - -**Rate limiting:** -- Request throttling settings -- Backoff strategies for rate limit errors - -## Working with provider APIs - -### API integration - -The Scalekit SDK abstracts provider-specific APIs — the workflow (create account → authorize → fetch token → call API) is identical for all providers. Only the downstream API call changes: - -```python -# Step 3: Fetch token (always call this immediately before the API call) -response = actions.get_connected_account( - connection_name="slack", # Replace with any connector name - identifier="user_123" -) -tokens = response.connected_account.authorization_details["oauth_token"] -access_token = tokens["access_token"] - -# Step 4: Call the provider API with the token -headers = {"Authorization": f"Bearer {access_token}"} -``` - -Scalekit automatically refreshes expired tokens on `get_connected_account` — no manual refresh logic needed. - -### Error handling - -Agent Auth normalizes provider-specific errors into consistent error responses: - -```javascript -{ - error: { - code: 'RATE_LIMIT_EXCEEDED', - message: 'Provider rate limit exceeded', - provider: 'gmail', - details: { - retryAfter: 60, - limitType: 'requests_per_minute' - } - } -} -``` - -## Provider-specific considerations - -### Google Workspace - -- **OAuth scopes**: Requires specific scopes for different Google services -- **Rate limits**: Generous limits but varies by service -- **Data access**: Supports both personal and organization data -- **Security**: Supports domain-wide delegation for enterprise - -### Microsoft 365 - -- **Authentication**: Supports both personal and work accounts -- **Graph API**: Unified API for all Microsoft services -- **Permissions**: Granular permission model -- **Compliance**: Built-in compliance and audit features - -### Slack - -- **Workspace apps**: Requires installation in each workspace -- **Bot tokens**: Different capabilities for bot vs user tokens -- **Rate limits**: Tier-based limits depending on workspace size -- **Channels**: Requires specific permissions for private channels - -### Jira - -- **Project access**: Permissions are project-specific -- **Issue types**: Different issue types have different fields -- **Workflows**: Custom workflows affect available actions - -## Best practices - -### Authentication setup - -- **Use minimal scopes**: Request only necessary permissions -- **Token refresh**: Scalekit handles this automatically — call `get_connected_account` before every API call -- **Monitor auth status**: Track connected account status; re-authorize if status is not `ACTIVE` - -### Tool execution - -- **Respect rate limits**: Implement throttling and exponential backoff for 429 errors -- **Cache results**: Cache frequently accessed data to avoid redundant API calls -- **Error recovery**: Retry transient failures; surface permanent errors to users - -## Monitoring and analytics - -### Provider health - -- **API uptime**: Track provider API availability -- **Response times**: Monitor latency for different operations -- **Error rates**: Track errors by provider and tool type -- **Rate limit usage**: Monitor quota consumption - -### Usage analytics - -- **Popular providers**: Which providers are used most -- **Tool usage**: Which tools are executed most frequently -- **User adoption**: How many users connect to each provider -- **Error patterns**: Common failure modes by provider - -## Related documentation - -- [connections.md](connections.md) — how to configure authentication credentials for a provider -- [connected-accounts.md](connected-accounts.md) — per-user account lifecycle and token management -- [agent-connectors/README.md](agent-connectors/README.md) — detailed API tools for each provider -- [code-samples.md](code-samples.md) — implementation examples by framework diff --git a/plugins/agent-auth/redirects.md b/plugins/agent-auth/redirects.md deleted file mode 100644 index dbe1977..0000000 --- a/plugins/agent-auth/redirects.md +++ /dev/null @@ -1,76 +0,0 @@ -# Redirects - -Redirects are registered endpoints in Scalekit that control where users are directed during authentication flows. You must configure these endpoints in the Scalekit dashboard before they can be used. - -All redirect URIs must be registered under Authentication settings in your Scalekit dashboard. This is a security requirement to prevent unauthorized redirects. - - -## Redirect endpoint types - -### Allowed callback URLs -**Purpose**: Where users are sent after successful authentication to exchange authorization codes and retrieve profile information. - -**Example scenario**: A user completes sign-in and Scalekit redirects them to `https://yourapp.com/callback` where your application processes the authentication response. - -To add or remove an redirect URL, go to Dashboard > Authentication > Redirects > Allowed Callback URLs. - -### Initiate login URL -**Purpose**: When authentication does not initiate from your application, Scalekit redirects users back to your application's login initiation endpoint. This endpoint should point to a route in your application that ultimately redirects users to Scalekit's `/authorize` endpoint. - -**Example scenarios**: - -- **Bookmarked login page**: A user bookmarks your login page and visits it directly. Your application detects they're not authenticated and redirects them to Scalekit's authorization endpoint. - -- **Organization invitation flow**: A user clicks an invitation link to join an organization. Your application receives the invitation token and redirects the user to Scalekit's authorization endpoint to complete the sign-up process. - -- **IdP-initiated SSO**: An administrator initiates single sign-on from their identity provider dashboard. The IdP redirects users to your application, which then redirects them to Scalekit's authorization endpoint to complete authentication. - -- **Session expiration**: When a user's session expires or they access a protected resource, they're redirected to `https://yourapp.com/login` which then redirects to Scalekit's authentication endpoint. - -### Post logout URL -**Purpose**: Where users are sent after successfully signing out of your application. - -**Example scenario**: After logging out, users are redirected to `https://yourapp.com/goodbye` to confirm their session has ended. - -### Back channel logout URL -**Purpose**: A secure endpoint that receives notifications whenever a user is logged out from Scalekit, regardless of how the logout was initiated — admin triggered, user initiated, or due to session policies like idle timeout. - -**Example scenario**: When a user logs out from any application (user-initiated, admin-initiated, or due to session policies like idle timeout), Scalekit sends a logout notification to `https://yourapp.com/logout` to suggest termination of the user's session across all connected applications, ensuring coordinated logout for enhanced security. - -### Custom URI schemes - -Custom URI schemes allow for redirects, enabling deep linking and native app integrations. Some applications include: -- **Desktop applications**: Use schemes like `{scheme}://` for native app integration -- **Mobile apps**: Use schemes like `myapp://` for mobile app deep linking - -**Example custom schemes**: -- `{scheme}://auth/callback` - For custom scheme authentication -- `myapp://login/callback` - For mobile app authentication - - -## URI validation requirements - -Your redirect URIs must meet specific requirements that vary between development and production environments: - -| Requirement | Development | Production | -| ----------- | ----------- | ---------- | -| Supported schemes | `http`, `https`, `{scheme}` | `https`, `{scheme}` | -| Localhost support | Allowed | Not allowed | -| Wildcard domains | Allowed | Not allowed | -| URI length limit | 256 characters | 256 characters | -| Query parameters | Not allowed | Not allowed | -| URL fragments | Not allowed | Not allowed | - - -### Wildcard usage patterns - -Wildcards can simplify testing in development environments, but they must follow specific patterns: - -| Validation rule | Valid examples | Invalid examples | -| --------------- | -------------- | ---------------- | -| Wildcards cannot be used as root-level domains | `https://*.acmecorp.com`, `https://auth-*.acmecorp.com` | `https://*.com` | -| Only one wildcard character is allowed per URI | `https://*.acmecorp.com` | `https://*.*.acmecorp.com` | -| Wildcards must be in the hostname component only | `https://*.acmecorp.com` | `https://acmecorp.*.com` | -| Wildcards must be in the outermost subdomain | `https://*.auth.acmecorp.com` | `https://auth.*.acmecorp.com` | - -> **Note**: According to the [OAuth 2.0 specification](https://tools.ietf.org/html/rfc6749#section-3.1.2), redirect URIs must be absolute URIs. For development convenience, Scalekit relaxes this restriction slightly by allowing wildcards in development environments. diff --git a/plugins/agent-auth/references/agent-connectors/README.md b/plugins/agent-auth/references/agent-connectors/README.md index a91420e..807653a 100644 --- a/plugins/agent-auth/references/agent-connectors/README.md +++ b/plugins/agent-auth/references/agent-connectors/README.md @@ -8,7 +8,10 @@ This directory contains documentation for all supported agent connectors in the |-----------|-------------|-----------| | [Airtable](airtable.md) | Connect to Airtable bases for data management | OAuth 2.0 | | [Asana](asana.md) | Project management and task tracking | OAuth 2.0 | +| [Attention](attention.md) | AI insights, conversations, teams, and workflows | API Key | | [BigQuery](bigquery.md) | Google BigQuery data warehouse | OAuth 2.0 | +| [Chorus](chorus.md) | Sync calls, transcripts, conversation intelligence, and analytics | Basic Auth | +| [Clari Copilot](clari_copilot.md) | Sales call transcripts, analytics, call data, and insights | API Key | | [ClickUp](clickup.md) | Project management and collaboration | OAuth 2.0 | | [Confluence](confluence.md) | Atlassian Confluence wiki pages | OAuth 2.0 | | [Dropbox](dropbox.md) | File storage and sharing | OAuth 2.0 | @@ -23,6 +26,7 @@ This directory contains documentation for all supported agent connectors in the | [Google Forms](google_forms.md) | Google Forms survey creation | OAuth 2.0 | | [Google Meet](google_meets.md) | Google Meet video conferencing | OAuth 2.0 | | [Google Sheets](google_sheets.md) | Google Sheets spreadsheet editing | OAuth 2.0 | +| [Google Slides](google_slides.md) | Create, read, and modify presentations programmatically | OAuth 2.0 | | [Gong](gong.md) | Sales conversation intelligence | OAuth 2.0 | | [HubSpot](hubspot.md) | CRM and marketing automation | OAuth 2.0 | | [Intercom](intercom.md) | Customer messaging platform | OAuth 2.0 | @@ -57,7 +61,7 @@ Each connector documentation includes: ## Authentication -All connectors support OAuth 2.0 authentication through the Agent Auth platform. You'll need to: +Connectors support OAuth 2.0, API Key, or Basic Auth authentication through the Agent Auth platform. You'll need to: 1. Create a connection for the desired service 2. Configure OAuth credentials in your connection diff --git a/plugins/full-stack-auth/hooks/hooks.json b/plugins/full-stack-auth/hooks/hooks.json deleted file mode 100644 index f6a9da5..0000000 --- a/plugins/full-stack-auth/hooks/hooks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "Usage beacon for Scalekit full-stack-auth plugin", - "hooks": { - "PostToolUse": [ - { - "matcher": ".*", - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh full-stack-auth post_tool", - "timeout": 10 - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh full-stack-auth stop", - "timeout": 10 - } - ] - } - ] - } -} diff --git a/plugins/mcp-auth/hooks/hooks.json b/plugins/mcp-auth/hooks/hooks.json deleted file mode 100644 index dd28090..0000000 --- a/plugins/mcp-auth/hooks/hooks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "Usage beacon for Scalekit mcp-auth plugin", - "hooks": { - "PostToolUse": [ - { - "matcher": ".*", - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh mcp-auth post_tool", - "timeout": 10 - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh mcp-auth stop", - "timeout": 10 - } - ] - } - ] - } -} diff --git a/plugins/mcp-auth/rules/no-secrets.mdc b/plugins/mcp-auth/rules/no-secrets.mdc deleted file mode 100644 index 48c8f17..0000000 --- a/plugins/mcp-auth/rules/no-secrets.mdc +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: Keep secrets out of code and chat. Never hardcode credentials, API keys, or tokens. -alwaysApply: true -globs: ["**/*.{js,ts,py,go,java,rb,php}"] ---- - -no-secrets: - -- NEVER hardcode credentials, API keys, tokens, or passwords -- Use environment variables for all secrets -- Add secret files to .gitignore -- Never commit .env files with actual values -- Never paste secrets in chat or logs - -Examples: -❌ Bad: const API_KEY = "sk-1234567890" -✅ Good: const API_KEY = process.env.API_KEY diff --git a/plugins/modular-scim/hooks/hooks.json b/plugins/modular-scim/hooks/hooks.json deleted file mode 100644 index c7fdd97..0000000 --- a/plugins/modular-scim/hooks/hooks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "Usage beacon for Scalekit modular-scim plugin", - "hooks": { - "PostToolUse": [ - { - "matcher": ".*", - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh modular-scim post_tool", - "timeout": 10 - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh modular-scim stop", - "timeout": 10 - } - ] - } - ] - } -} diff --git a/plugins/modular-sso/hooks/hooks.json b/plugins/modular-sso/hooks/hooks.json deleted file mode 100644 index 2a15378..0000000 --- a/plugins/modular-sso/hooks/hooks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "description": "Usage beacon for Scalekit modular-sso plugin", - "hooks": { - "PostToolUse": [ - { - "matcher": ".*", - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh modular-sso post_tool", - "timeout": 10 - } - ] - } - ], - "Stop": [ - { - "hooks": [ - { - "type": "command", - "command": "${CLAUDE_PLUGIN_ROOT}/hooks/beacon.sh modular-sso stop", - "timeout": 10 - } - ] - } - ] - } -}