diff --git a/app/en/resources/integrations/productivity/_meta.tsx b/app/en/resources/integrations/productivity/_meta.tsx index 30606ba20..a45bf8e50 100644 --- a/app/en/resources/integrations/productivity/_meta.tsx +++ b/app/en/resources/integrations/productivity/_meta.tsx @@ -105,6 +105,10 @@ const meta: MetaRecord = { title: "Microsoft SharePoint", href: "/en/resources/integrations/productivity/microsoft-sharepoint", }, + "microsoft-users": { + title: "Microsoft Users", + href: "/en/resources/integrations/productivity/microsoft-users", + }, "microsoft-word": { title: "Microsoft Word", href: "/en/resources/integrations/productivity/microsoft-word", diff --git a/public/llms.txt b/public/llms.txt index f02340717..d03cbda24 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,4 +1,4 @@ - + # Arcade @@ -217,10 +217,10 @@ Arcade docs serve two audiences. Start with the path that matches your goal: - [GitHub API](https://docs.arcade.dev/en/resources/integrations/development/github-api): Arcade Toolkit enables seamless interaction between LLMs and the GitHub API, allowing for efficient management and development of GitHub repositories. It provides developers with tools for automation, collaboration, and project management. Capabilities - Automate GitHub actions… - [Glean](https://docs.arcade.dev/en/resources/integrations/search/glean): Glean Toolkit The Glean toolkit connects Arcade to a Glean enterprise deployment, exposing the Glean Client API so authorized users can search their organization's indexed content directly from Arcade workflows. Capabilities - Enterprise search : Query the user's Glean index and… - [Gmail](https://docs.arcade.dev/en/resources/integrations/productivity/gmail): The Gmail toolkit lets Arcade-powered agents read, compose, organize, and triage Gmail messages and threads on behalf of an authenticated Google user. Capabilities - Read & search — Retrieve individual messages or threads by ID; list emails, threads, drafts, and labels; search… -- [Google Calendar](https://docs.arcade.dev/en/resources/integrations/productivity/google-calendar): Google Calendar toolkit connects Arcade-powered LLMs to Google Calendar, enabling agents to read, create, modify, and delete calendar data on behalf of authenticated users. Capabilities - Calendar discovery & user context — list all accessible calendars and retrieve the… +- [Google Calendar](https://docs.arcade.dev/en/resources/integrations/productivity/google-calendar): Google Calendar Toolkit The Google Calendar toolkit connects Arcade to Google Calendar, enabling LLMs to read, create, and manage calendar data on behalf of authenticated users. Capabilities - Calendar discovery & user context: List all accessible calendars and retrieve the… - [Google Contacts](https://docs.arcade.dev/en/resources/integrations/productivity/google-contacts): The Google Contacts toolkit provides Arcade tools for managing personal contacts and querying Google Workspace organization directories via the Google People API. Capabilities - Contact creation — Create new contact records with any combination of name, email, and phone number… -- [Google Docs](https://docs.arcade.dev/en/resources/integrations/productivity/google-docs): Google Docs Toolkit The Google Docs toolkit gives LLMs the ability to create, read, edit, search, and annotate Google Docs documents via the Google Docs and Drive APIs through Arcade. Capabilities - Document creation : Create blank documents or documents pre-populated with plain… -- [Google Drive](https://docs.arcade.dev/en/resources/integrations/productivity/google-drive): The Google Drive toolkit lets agents read, organize, share, and manage files in a user's Google Drive (including Shared Drives) via Arcade. It covers the full file lifecycle — discovery, access control, upload/download, and folder management. Capabilities - File discovery &… +- [Google Docs](https://docs.arcade.dev/en/resources/integrations/productivity/google-docs): Google Docs Toolkit The Google Docs toolkit connects Arcade to Google Docs, enabling LLMs to create, read, edit, search, and annotate documents on behalf of authenticated users. Capabilities - Document creation : Create blank documents or documents pre-populated with plain text… +- [Google Drive](https://docs.arcade.dev/en/resources/integrations/productivity/google-drive): The Google Drive toolkit lets Arcade-powered agents read, write, organize, and share files across a user's entire Google Drive (including Shared Drives) via Google's APIs. Capabilities - File access & discovery: Batch pre-flight access checks, full-drive and targeted search (by… - [Google Finance](https://docs.arcade.dev/en/resources/integrations/search/google_finance): GoogleFinance is a toolkit provided by Arcade.dev for accessing financial data through the Google Finance API. It enables developers to retrieve and analyze comprehensive stock information efficiently. Capabilities - Fetch historical stock price data over customizable time… - [Google Flights](https://docs.arcade.dev/en/resources/integrations/search/google_flights): Google Flights toolkit integrates Google Flights data into LLM workflows via SerpApi, enabling agents to search flights, resolve booking options, and look up airport codes. Capabilities - Airport lookup — Resolve city names, country names, or airport names to IATA codes… - [Google Hotels](https://docs.arcade.dev/en/resources/integrations/search/google_hotels): Arcade.dev provides the GoogleHotels toolkit, enabling developers to efficiently retrieve hotel information through the Google Hotels API. This toolkit facilitates hotel searches, offering a streamlined method to access comprehensive hotel data. Capabilities: - Effortlessly… @@ -228,9 +228,9 @@ Arcade docs serve two audiences. Start with the path that matches your goal: - [Google Maps](https://docs.arcade.dev/en/resources/integrations/search/google_maps): Arcade.dev provides a toolkit for integrating Google Maps functionalities, enabling developers to obtain directions seamlessly. This toolkit simplifies the process of accessing vital navigation data through an easy-to-use API. Capabilities - Retrieve directions between addresses… - [Google News](https://docs.arcade.dev/en/resources/integrations/search/google_news): The Arcade toolkit for GoogleNews enables developers to retrieve the latest news articles through a seamless integration with Google News. This toolkit provides efficient access to current stories based on queries, ensuring users stay informed. Capabilities - Access to real-time… - [Google Search](https://docs.arcade.dev/en/resources/integrations/search/google_search): Arcade.dev provides a toolkit for integrating Google search functionalities using its GoogleSearch tool. This enables developers to seamlessly fetch and utilize organic search results in their applications. Capabilities - Perform Google searches and retrieve organic results… -- [Google Sheets](https://docs.arcade.dev/en/resources/integrations/productivity/google-sheets): Google Sheets Toolkit Arcade's Google Sheets toolkit provides LLM-accessible tools for reading, writing, commenting on, and auditing Google Sheets spreadsheets via the Google Sheets and Drive APIs. Capabilities - Spreadsheet access & discovery: Search Drive for spreadsheets by… +- [Google Sheets](https://docs.arcade.dev/en/resources/integrations/productivity/google-sheets): Google Sheets Toolkit The Google Sheets toolkit connects Arcade to Google Sheets and Google Drive, enabling LLMs to read, write, inspect, comment on, audit, and search spreadsheets on behalf of authenticated users. Capabilities - Spreadsheet access & discovery: Search Drive for… - [Google Shopping](https://docs.arcade.dev/en/resources/integrations/search/google_shopping): Arcade.dev offers a powerful toolkit for shopping via Google Shopping, enabling developers to seamlessly integrate product search functionality into their applications. This toolkit provides essential capabilities to enhance shopping experiences for users. Capabilities - Search… -- [Google Slides](https://docs.arcade.dev/en/resources/integrations/productivity/google-slides): Google Slides toolkit for Arcade provides LLM-callable tools that create, read, edit, and manage Google Slides presentations via the Google Slides and Drive APIs. Capabilities - Presentation creation & editing: Create new decks from scratch or from branded templates, apply… +- [Google Slides](https://docs.arcade.dev/en/resources/integrations/productivity/google-slides): Google Slides Toolkit The Google Slides toolkit connects Arcade to Google Slides (and Google Drive) via the Google APIs, enabling LLMs to create, edit, read, search, and comment on presentations programmatically. Capabilities - Deck creation and editing: Build presentations from… - [Granola](https://docs.arcade.dev/en/resources/integrations/productivity/granola): Granola is a meeting intelligence platform that captures notes and transcripts from calls. The Arcade Granola toolkit gives agents read access to Granola's public Enterprise API for working with meeting metadata and transcripts. Capabilities - List meetings with optional… - [HubSpot](https://docs.arcade.dev/en/resources/integrations/sales/hubspot): Arcade Toolkit for HubSpot enables seamless integration and interaction with HubSpot's CRM functionalities, allowing developers to leverage various activities and data management tools for enhanced customer relationship management. Capabilities - Create, update, and manage… - [HubSpot Automation API](https://docs.arcade.dev/en/resources/integrations/sales/hubspot-automation-api): Arcade's HubSpot Automation API toolkit empowers developers to integrate LLMs with HubSpot's automation capabilities, facilitating seamless interaction with various automation workflows and sequences. Capabilities - Enroll contacts in sequences and fetch campaign details via… @@ -246,7 +246,7 @@ Arcade docs serve two audiences. Start with the path that matches your goal: - [Integrations](https://docs.arcade.dev/en/resources/integrations): This documentation page provides a comprehensive registry of all MCP Servers within the Arcade ecosystem, helping users identify and access available servers. It serves as a central resource for understanding the various MCP Server options. - [Intercom API](https://docs.arcade.dev/en/resources/integrations/customer-support/intercom-api): Arcade Toolkit for Intercom enables integration with the Intercom API, facilitating seamless interactions for managing contacts, conversations, and data attributes. This toolkit offers a variety of tools to streamline communication processes, ensuring effective customer… - [Jira](https://docs.arcade.dev/en/resources/integrations/productivity/jira): The Jira toolkit integrates Arcade with Atlassian Jira, enabling LLMs to manage issues, sprints, boards, users, attachments, and project metadata across Jira Cloud instances. Capabilities - Issue lifecycle management — Create, update, transition, search (parameterized or JQL),… -- [Linear](https://docs.arcade.dev/en/resources/integrations/productivity/linear): Linear is a project management platform for software teams. This toolkit lets LLMs interact with Linear workspaces — managing issues, projects, initiatives, cycles, milestones, comments, and team workflows via the Linear API. Capabilities - Issue lifecycle : Create, read,… +- [Linear](https://docs.arcade.dev/en/resources/integrations/productivity/linear): Linear Toolkit The Linear toolkit lets LLMs interact with Linear's project management platform through Arcade, covering the full lifecycle of issues, projects, initiatives, cycles, milestones, comments, and teams. Capabilities - Issue management: Create, update, archive, and… - [LinkedIn](https://docs.arcade.dev/en/resources/integrations/social/linkedin): Arcade.dev provides a toolkit for integrating with LinkedIn, enabling developers to streamline interactions with the platform's API. This toolkit allows for the creation of content directly on LinkedIn, enhancing user engagement and social sharing capabilities. Capabilities -… - [Luma API](https://docs.arcade.dev/en/resources/integrations/productivity/luma-api): LumaApi provides tools that facilitate LLMs in interacting seamlessly with the Luma API to manage events and user memberships. This toolkit allows developers to efficiently handle event creation, guest management, and membership features. Capabilities - Create, update, and… - [Mailchimp API](https://docs.arcade.dev/en/resources/integrations/productivity/mailchimp-marketing-api): The MailchimpMarketingApi toolkit enables seamless integration with the Mailchimp Marketing API, allowing developers to manage marketing efforts effectively. It empowers users to execute various operations related to audience management, email campaigns, and e-commerce… @@ -259,6 +259,7 @@ Arcade docs serve two audiences. Start with the path that matches your goal: - [Microsoft PowerPoint](https://docs.arcade.dev/en/resources/integrations/productivity/microsoft-powerpoint): Microsoft PowerPoint Toolkit The Microsoft PowerPoint toolkit provides Arcade LLM tools for creating and managing PowerPoint presentations stored in OneDrive via the Microsoft Graph API. Capabilities - Presentation creation : Create new presentations in OneDrive with a title… - [Microsoft SharePoint](https://docs.arcade.dev/en/resources/integrations/productivity/microsoft-sharepoint): The Microsoft SharePoint toolkit integrates Arcade with Microsoft SharePoint via the Microsoft Graph API, enabling LLMs to read, write, and manage SharePoint content programmatically. Capabilities - Site & drive navigation — list, search, and retrieve sites, drives/document… - [Microsoft Teams](https://docs.arcade.dev/en/resources/integrations/social/microsoft-teams): Microsoft Teams Toolkit The Microsoft Teams toolkit provides Arcade LLM tools for interacting with Microsoft Teams via the Microsoft Graph API, enabling agents to read and send messages, manage chats and channels, and look up users and teams. Capabilities - Messaging — chats:… +- [Microsoft Users](https://docs.arcade.dev/en/resources/integrations/productivity/microsoft-users): Microsoft Users Toolkit Provides LLM tools for querying Microsoft Graph user profiles and organizational hierarchy. Enables agents to look up user details, resolve org relationships, and enrich workplace data within a Microsoft 365 tenant. Capabilities - Profile lookup :… - [Microsoft Word](https://docs.arcade.dev/en/resources/integrations/productivity/microsoft-word): Arcade's Microsoft Word toolkit lets developers create, read, and update Word documents stored in OneDrive through Microsoft Graph. Capabilities - Create .docx documents with optional initial text, automatic .docx extension handling, folder targeting, and configurable filename… - [Miro API](https://docs.arcade.dev/en/resources/integrations/productivity/miro-api): Arcade Toolkit integrates with the Miro API, allowing developers to enhance collaborative functionalities within Miro boards. It empowers applications to add, update, or delete board items effectively while maintaining user engagement. Capabilities - Automated addition and… - [MongoDB](https://docs.arcade.dev/en/resources/integrations/databases/mongodb): The MongoDB toolkit connects Arcade to a MongoDB instance, enabling agents and tools to explore, query, and aggregate data across databases and collections. Capabilities - Discovery : Enumerate all databases in a MongoDB instance and all collections within a database,… diff --git a/toolkit-docs-generator/data/toolkits/confluence.json b/toolkit-docs-generator/data/toolkits/confluence.json index fd36a9a46..d6d285e18 100644 --- a/toolkit-docs-generator/data/toolkits/confluence.json +++ b/toolkit-docs-generator/data/toolkits/confluence.json @@ -1,7 +1,7 @@ { "id": "Confluence", "label": "Confluence", - "version": "3.0.1", + "version": "3.0.2", "description": "Arcade.dev LLM tools for Confluence", "metadata": { "category": "productivity", @@ -30,7 +30,7 @@ { "name": "CreatePage", "qualifiedName": "Confluence.CreatePage", - "fullyQualifiedName": "Confluence.CreatePage@3.0.1", + "fullyQualifiedName": "Confluence.CreatePage@3.0.2", "description": "Create a new page at the root of the given space.", "parameters": [ { @@ -169,7 +169,7 @@ { "name": "GetAttachmentsForPage", "qualifiedName": "Confluence.GetAttachmentsForPage", - "fullyQualifiedName": "Confluence.GetAttachmentsForPage@3.0.1", + "fullyQualifiedName": "Confluence.GetAttachmentsForPage@3.0.2", "description": "Get attachments for a page by its ID or title.\n\nIf a page title is provided, then the first page with an exact matching title will be returned.", "parameters": [ { @@ -269,7 +269,7 @@ { "name": "GetAvailableAtlassianClouds", "qualifiedName": "Confluence.GetAvailableAtlassianClouds", - "fullyQualifiedName": "Confluence.GetAvailableAtlassianClouds@3.0.1", + "fullyQualifiedName": "Confluence.GetAvailableAtlassianClouds@3.0.2", "description": "Get available Atlassian Clouds.", "parameters": [], "auth": { @@ -314,7 +314,7 @@ { "name": "GetPage", "qualifiedName": "Confluence.GetPage", - "fullyQualifiedName": "Confluence.GetPage@3.0.1", + "fullyQualifiedName": "Confluence.GetPage@3.0.2", "description": "Retrieve a SINGLE page's content by its ID or title.\n\nIf a title is provided, then the first page with an exact matching title will be returned.\n\nIMPORTANT: For retrieving MULTIPLE pages, use `get_pages_by_id` instead\nfor a massive performance and efficiency boost. If you call this function multiple times\ninstead of using `get_pages_by_id`, then the universe will explode.", "parameters": [ { @@ -387,7 +387,7 @@ { "name": "GetPagesById", "qualifiedName": "Confluence.GetPagesById", - "fullyQualifiedName": "Confluence.GetPagesById@3.0.1", + "fullyQualifiedName": "Confluence.GetPagesById@3.0.2", "description": "Get the content of MULTIPLE pages by their ID in a single efficient request.\n\nIMPORTANT: Always use this function when you need to retrieve content from more than one page,\nrather than making multiple separate calls to get_page, because this function is significantly\nmore efficient than calling get_page multiple times.", "parameters": [ { @@ -467,7 +467,7 @@ { "name": "GetSpace", "qualifiedName": "Confluence.GetSpace", - "fullyQualifiedName": "Confluence.GetSpace@3.0.1", + "fullyQualifiedName": "Confluence.GetSpace@3.0.2", "description": "Get the details of a space by its ID or key.", "parameters": [ { @@ -541,7 +541,7 @@ { "name": "ListAttachments", "qualifiedName": "Confluence.ListAttachments", - "fullyQualifiedName": "Confluence.ListAttachments@3.0.1", + "fullyQualifiedName": "Confluence.ListAttachments@3.0.2", "description": "List attachments in a workspace", "parameters": [ { @@ -646,7 +646,7 @@ { "name": "ListDirectChildren", "qualifiedName": "Confluence.ListDirectChildren", - "fullyQualifiedName": "Confluence.ListDirectChildren@3.0.1", + "fullyQualifiedName": "Confluence.ListDirectChildren@3.0.2", "description": "List one page of direct children for a Confluence content item.\n\nCall this again with a returned child ID to continue exploring that child's children. For\npagination, send only pagination_token and optionally limit.", "parameters": [ { @@ -790,7 +790,7 @@ { "name": "ListPages", "qualifiedName": "Confluence.ListPages", - "fullyQualifiedName": "Confluence.ListPages@3.0.1", + "fullyQualifiedName": "Confluence.ListPages@3.0.2", "description": "Get the content of multiple pages by their ID", "parameters": [ { @@ -915,7 +915,7 @@ { "name": "ListSpaces", "qualifiedName": "Confluence.ListSpaces", - "fullyQualifiedName": "Confluence.ListSpaces@3.0.1", + "fullyQualifiedName": "Confluence.ListSpaces@3.0.2", "description": "List all spaces sorted by name in ascending order.", "parameters": [ { @@ -1002,7 +1002,7 @@ { "name": "RenamePage", "qualifiedName": "Confluence.RenamePage", - "fullyQualifiedName": "Confluence.RenamePage@3.0.1", + "fullyQualifiedName": "Confluence.RenamePage@3.0.2", "description": "Rename a page by changing its title.", "parameters": [ { @@ -1089,7 +1089,7 @@ { "name": "SearchContent", "qualifiedName": "Confluence.SearchContent", - "fullyQualifiedName": "Confluence.SearchContent@3.0.1", + "fullyQualifiedName": "Confluence.SearchContent@3.0.2", "description": "Search for content in Confluence.\n\nThe search is performed across all content in the authenticated user's Confluence workspace.\nAll search terms in Confluence are case insensitive.\n\nYou can use the parameters in different ways:\n- must_contain_all: For AND logic - content must contain ALL of these\n- can_contain_any: For OR logic - content can contain ANY of these\n- Combine them: must_contain_all=['banana'] AND can_contain_any=['database', 'guide']", "parameters": [ { @@ -1210,7 +1210,7 @@ { "name": "UpdatePageContent", "qualifiedName": "Confluence.UpdatePageContent", - "fullyQualifiedName": "Confluence.UpdatePageContent@3.0.1", + "fullyQualifiedName": "Confluence.UpdatePageContent@3.0.2", "description": "Update a page's content.", "parameters": [ { @@ -1314,7 +1314,7 @@ { "name": "WhoAmI", "qualifiedName": "Confluence.WhoAmI", - "fullyQualifiedName": "Confluence.WhoAmI@3.0.1", + "fullyQualifiedName": "Confluence.WhoAmI@3.0.2", "description": "CALL THIS TOOL FIRST to establish user profile context.\n\nGet information about the currently logged-in user and their available Confluence clouds.", "parameters": [], "auth": { @@ -1368,6 +1368,7 @@ ], "customImports": [], "subPages": [], - "generatedAt": "2026-05-21T12:10:39.585Z", + "curationSourceHash": "306021b59d100f55a2ad1a5485b5f32a158f8159eeefd5475504be6f2bd2d402", + "generatedAt": "2026-08-13T11:19:44.486Z", "summary": "**Confluence** is an Atlassian wiki and documentation platform. This toolkit gives LLM agents the ability to read, write, search, and manage Confluence spaces and pages via the Arcade tool-calling interface.\n\n## Capabilities\n\n- **Page lifecycle** — create, rename, retrieve (single or batch), update content, and explore child pages recursively with pagination.\n- **Space & cloud discovery** — list all spaces, fetch space details by ID or key, retrieve available Atlassian cloud instances, and identify the authenticated user's profile and cloud access.\n- **Bulk & efficient retrieval** — fetch multiple pages in a single request (`GetPagesById`, `ListPages`) to avoid redundant API calls.\n- **Search** — full-text search across the authenticated user's entire Confluence workspace with AND/OR logic via `must_contain_all` and `can_contain_any` parameters; case-insensitive.\n- **Attachments** — list workspace attachments or retrieve attachments for a specific page by ID or title.\n\n## OAuth\n\nThis toolkit authenticates via **OAuth 2.0** with Atlassian as the identity provider. See the [Arcade Atlassian auth provider docs](https://docs.arcade.dev/en/references/auth-providers/atlassian) for setup instructions, required scopes, and configuration details." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/googlecalendar.json b/toolkit-docs-generator/data/toolkits/googlecalendar.json index d00251b2f..b05d2898d 100644 --- a/toolkit-docs-generator/data/toolkits/googlecalendar.json +++ b/toolkit-docs-generator/data/toolkits/googlecalendar.json @@ -1,7 +1,7 @@ { "id": "GoogleCalendar", "label": "Google Calendar", - "version": "3.5.1", + "version": "3.6.0", "description": "Arcade.dev LLM tools for Google Calendar", "metadata": { "category": "productivity", @@ -27,7 +27,7 @@ { "name": "CreateEvent", "qualifiedName": "GoogleCalendar.CreateEvent", - "fullyQualifiedName": "GoogleCalendar.CreateEvent@3.5.1", + "fullyQualifiedName": "GoogleCalendar.CreateEvent@3.6.0", "description": "Create a new event/meeting/sync/meetup in the specified calendar.\n\nPass `recurrence` to create a repeating event.", "parameters": [ { @@ -235,7 +235,7 @@ { "name": "DeleteEvent", "qualifiedName": "GoogleCalendar.DeleteEvent", - "fullyQualifiedName": "GoogleCalendar.DeleteEvent@3.5.1", + "fullyQualifiedName": "GoogleCalendar.DeleteEvent@3.6.0", "description": "Delete an event from Google Calendar.", "parameters": [ { @@ -325,7 +325,7 @@ { "name": "FindTimeSlotsWhenEveryoneIsFree", "qualifiedName": "GoogleCalendar.FindTimeSlotsWhenEveryoneIsFree", - "fullyQualifiedName": "GoogleCalendar.FindTimeSlotsWhenEveryoneIsFree@3.5.1", + "fullyQualifiedName": "GoogleCalendar.FindTimeSlotsWhenEveryoneIsFree@3.6.0", "description": "Provides time slots when everyone is free within a given date range and time boundaries.", "parameters": [ { @@ -441,7 +441,7 @@ { "name": "ListCalendars", "qualifiedName": "GoogleCalendar.ListCalendars", - "fullyQualifiedName": "GoogleCalendar.ListCalendars@3.5.1", + "fullyQualifiedName": "GoogleCalendar.ListCalendars@3.6.0", "description": "List all calendars accessible by the user.", "parameters": [ { @@ -541,7 +541,7 @@ { "name": "ListEvents", "qualifiedName": "GoogleCalendar.ListEvents", - "fullyQualifiedName": "GoogleCalendar.ListEvents@3.5.1", + "fullyQualifiedName": "GoogleCalendar.ListEvents@3.6.0", "description": "List events from the specified calendar within the given datetime range.\n\nmin_end_datetime serves as the lower bound (exclusive) for an event's end time.\nmax_start_datetime serves as the upper bound (exclusive) for an event's start time.\n\nFor example:\nIf min_end_datetime is set to 2024-09-15T09:00:00 and max_start_datetime\nis set to 2024-09-16T17:00:00, the function will return events that:\n1. End after 09:00 on September 15, 2024 (exclusive)\n2. Start before 17:00 on September 16, 2024 (exclusive)\nThis means an event starting at 08:00 on September 15 and\nending at 10:00 on September 15 would be included, but an\nevent starting at 17:00 on September 16 would not be included.", "parameters": [ { @@ -641,7 +641,7 @@ { "name": "RespondToEvent", "qualifiedName": "GoogleCalendar.RespondToEvent", - "fullyQualifiedName": "GoogleCalendar.RespondToEvent@3.5.1", + "fullyQualifiedName": "GoogleCalendar.RespondToEvent@3.6.0", "description": "Accept or decline (RSVP to) a meeting invitation on the authenticated user's behalf.\n\nSets the user's responseStatus for an event they were invited to.", "parameters": [ { @@ -747,8 +747,8 @@ { "name": "UpdateEvent", "qualifiedName": "GoogleCalendar.UpdateEvent", - "fullyQualifiedName": "GoogleCalendar.UpdateEvent@3.5.1", - "description": "Update an existing event in the specified calendar with the provided details.\nOnly the provided fields will be updated; others will remain unchanged.\n\n`updated_start_datetime` and `updated_end_datetime` are\nindependent and can be provided separately.", + "fullyQualifiedName": "GoogleCalendar.UpdateEvent@3.6.0", + "description": "Update an existing event in the specified calendar with the provided details.\nOnly the provided fields will be updated; others will remain unchanged.\n\nAn event's details can only be changed by the event's organizer, or by a guest\nwhen the organizer has enabled guest editing for that event.\n\n`updated_start_datetime` and `updated_end_datetime` are\nindependent and can be provided separately.", "parameters": [ { "name": "event_id", @@ -986,7 +986,7 @@ { "name": "WhoAmI", "qualifiedName": "GoogleCalendar.WhoAmI", - "fullyQualifiedName": "GoogleCalendar.WhoAmI@3.5.1", + "fullyQualifiedName": "GoogleCalendar.WhoAmI@3.6.0", "description": "Get comprehensive user profile and Google Calendar environment information.\n\nThis tool provides detailed information about the authenticated user including\ntheir name, email, profile picture, Google Calendar access permissions, and other\nimportant profile details from Google services.", "parameters": [], "auth": { @@ -1051,6 +1051,7 @@ "import ScopePicker from \"@/app/_components/scope-picker\";" ], "subPages": [], - "generatedAt": "2026-08-06T11:47:09.066Z", - "summary": "**Google Calendar toolkit** connects Arcade-powered LLMs to Google Calendar, enabling agents to read, create, modify, and delete calendar data on behalf of authenticated users.\n\n## Capabilities\n\n- **Calendar discovery & user context** — list all accessible calendars and retrieve the authenticated user's profile, email, permissions, and environment details.\n- **Event querying** — list events within precise datetime ranges using independent lower/upper bounds on end and start times, supporting complex overlap queries.\n- **Event creation & recurrence** — create one-off or repeating events/meetings with full recurrence rule support.\n- **Event management** — update individual fields of existing events (start/end times are independently settable), delete events, and RSVP (accept or decline) on the user's behalf.\n- **Availability analysis** — find free time slots across multiple attendees within a specified date range and daily time boundaries.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via the **Google** provider. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for configuration details, required scopes, and setup instructions." + "curationSourceHash": "cd977f2e66058d686da277f9a3c43e903d6caba18a9124ec18a51996ad31882d", + "generatedAt": "2026-08-13T11:19:44.487Z", + "summary": "## Google Calendar Toolkit\n\nThe Google Calendar toolkit connects Arcade to Google Calendar, enabling LLMs to read, create, and manage calendar data on behalf of authenticated users.\n\n## Capabilities\n\n- **Calendar discovery & user context:** List all accessible calendars and retrieve the authenticated user's profile, email, permissions, and Calendar environment details.\n- **Event querying:** Fetch events from any calendar within a precise datetime range using independent lower/upper bounds on event end and start times.\n- **Event creation & recurrence:** Create one-off or repeating events (meetings, syncs, meetups) with full recurrence rule support.\n- **Event modification & deletion:** Update any subset of event fields independently (start and end times are decoupled), restricted to the event organizer or guests when the organizer permits editing; delete events by ID.\n- **Availability analysis:** Find time slots when all specified participants are free across a given date range and time boundaries.\n- **RSVP management:** Accept or decline meeting invitations by setting the authenticated user's `responseStatus` on any event they were invited to.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via the **Google** provider. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details, required scopes, and configuration." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/googledocs.json b/toolkit-docs-generator/data/toolkits/googledocs.json index 3beacf66d..74a11febf 100644 --- a/toolkit-docs-generator/data/toolkits/googledocs.json +++ b/toolkit-docs-generator/data/toolkits/googledocs.json @@ -1,7 +1,7 @@ { "id": "GoogleDocs", "label": "Google Docs", - "version": "8.0.0", + "version": "8.1.0", "description": "Arcade.dev LLM tools for Google Docs", "metadata": { "category": "productivity", @@ -26,7 +26,7 @@ { "name": "CommentOnDocument", "qualifiedName": "GoogleDocs.CommentOnDocument", - "fullyQualifiedName": "GoogleDocs.CommentOnDocument@8.0.0", + "fullyQualifiedName": "GoogleDocs.CommentOnDocument@8.1.0", "description": "Comment on a specific document by its ID.", "parameters": [ { @@ -106,7 +106,7 @@ { "name": "CreateBlankDocument", "qualifiedName": "GoogleDocs.CreateBlankDocument", - "fullyQualifiedName": "GoogleDocs.CreateBlankDocument@8.0.0", + "fullyQualifiedName": "GoogleDocs.CreateBlankDocument@8.1.0", "description": "Create a blank Google Docs document with the specified title.", "parameters": [ { @@ -166,7 +166,7 @@ { "name": "CreateDocumentFromText", "qualifiedName": "GoogleDocs.CreateDocumentFromText", - "fullyQualifiedName": "GoogleDocs.CreateDocumentFromText@8.0.0", + "fullyQualifiedName": "GoogleDocs.CreateDocumentFromText@8.1.0", "description": "Create a Google Docs document with the specified title and text content.\n\nWhen input_format is MARKDOWN, the text_content is parsed as Markdown and the resulting\ndocument is formatted with headings, bold, italic, bullet lists, and numbered lists.", "parameters": [ { @@ -255,7 +255,7 @@ { "name": "EditDocument", "qualifiedName": "GoogleDocs.EditDocument", - "fullyQualifiedName": "GoogleDocs.EditDocument@8.0.0", + "fullyQualifiedName": "GoogleDocs.EditDocument@8.1.0", "description": "Read or edit a Google Docs document using structured batchUpdate requests.\n\nWhen called without requests, returns the document content in DocMD format (block IDs,\ncharacter indices, and text styles). When called with requests, applies the edits and\nreturns the updated DocMD. Use the DocMD indices from the response to construct\nrequests for subsequent calls.", "parameters": [ { @@ -442,8 +442,8 @@ { "name": "GenerateGoogleFilePickerUrl", "qualifiedName": "GoogleDocs.GenerateGoogleFilePickerUrl", - "fullyQualifiedName": "GoogleDocs.GenerateGoogleFilePickerUrl@8.0.0", - "description": "Generate a URL where the user can grant this app access to specific Drive files.\n\nOpens Google's first-party Drive picker. The user selects which files to share\nwith this application — it is not a sign-in or credential prompt.\n\nUse this when a prior tool reported that a file was not found or access was denied,\nand the user expects the file to exist. After the user completes the picker flow,\nretry the prior tool.", + "fullyQualifiedName": "GoogleDocs.GenerateGoogleFilePickerUrl@8.1.0", + "description": "Generate a URL where the user can grant this app access to specific Drive files.\n\nCheck `url` first. An empty `url` with a `reason` means this app already reaches every\ndocument the connected account can open, so there is no per-file grant to request: this\ntool cannot change any outcome, and a document that could not be read is one the\naccount itself cannot open. Do not retry it.\n\nOtherwise the URL opens Google's first-party Drive picker, where the user selects which\nfiles to share with this application — it is not a sign-in or credential prompt. Use\nthis when a prior tool reported that a file was not found or access was denied, and the\nuser expects the file to exist. After the user completes the picker flow, retry the\nprior tool.", "parameters": [], "auth": { "providerId": "google", @@ -485,7 +485,7 @@ { "name": "GetDocumentAsDocmd", "qualifiedName": "GoogleDocs.GetDocumentAsDocmd", - "fullyQualifiedName": "GoogleDocs.GetDocumentAsDocmd@8.0.0", + "fullyQualifiedName": "GoogleDocs.GetDocumentAsDocmd@8.1.0", "description": "Get the latest version of the specified Google Docs document as DocMD.\nThe DocMD output will include tags that can be used to annotate the document with location\ninformation, the type of block, block IDs, and other metadata. If the document has tabs,\nall tabs are included in sequential order unless a specific tab_id is provided.", "parameters": [ { @@ -565,7 +565,7 @@ { "name": "GetDocumentById", "qualifiedName": "GoogleDocs.GetDocumentById", - "fullyQualifiedName": "GoogleDocs.GetDocumentById@8.0.0", + "fullyQualifiedName": "GoogleDocs.GetDocumentById@8.1.0", "description": "DEPRECATED DO NOT USE THIS TOOL\nGet the latest version of the specified Google Docs document.", "parameters": [ { @@ -632,7 +632,7 @@ { "name": "GetDocumentMetadata", "qualifiedName": "GoogleDocs.GetDocumentMetadata", - "fullyQualifiedName": "GoogleDocs.GetDocumentMetadata@8.0.0", + "fullyQualifiedName": "GoogleDocs.GetDocumentMetadata@8.1.0", "description": "Get metadata for a Google Docs document including hierarchical tab structure.\nReturns document title, ID, URL, total character count, and nested tab information\nwith character counts for each tab.", "parameters": [ { @@ -699,7 +699,7 @@ { "name": "InsertTextAtEndOfDocument", "qualifiedName": "GoogleDocs.InsertTextAtEndOfDocument", - "fullyQualifiedName": "GoogleDocs.InsertTextAtEndOfDocument@8.0.0", + "fullyQualifiedName": "GoogleDocs.InsertTextAtEndOfDocument@8.1.0", "description": "Updates an existing Google Docs document using the batchUpdate API endpoint.", "parameters": [ { @@ -779,7 +779,7 @@ { "name": "ListDocumentComments", "qualifiedName": "GoogleDocs.ListDocumentComments", - "fullyQualifiedName": "GoogleDocs.ListDocumentComments@8.0.0", + "fullyQualifiedName": "GoogleDocs.ListDocumentComments@8.1.0", "description": "List all comments on the specified Google Docs document.", "parameters": [ { @@ -859,7 +859,7 @@ { "name": "SearchAndRetrieveDocuments", "qualifiedName": "GoogleDocs.SearchAndRetrieveDocuments", - "fullyQualifiedName": "GoogleDocs.SearchAndRetrieveDocuments@8.0.0", + "fullyQualifiedName": "GoogleDocs.SearchAndRetrieveDocuments@8.1.0", "description": "Searches for documents in the user's Google Drive and returns documents with their main body\ncontent and tab metadata. Excludes documents that are in the trash.\n\nReturns main body content only with metadata about tabs. Use get_document_as_docmd() to retrieve\nfull tab content for specific documents. Use search_documents() for metadata-only searches.", "parameters": [ { @@ -1070,7 +1070,7 @@ { "name": "SearchDocuments", "qualifiedName": "GoogleDocs.SearchDocuments", - "fullyQualifiedName": "GoogleDocs.SearchDocuments@8.0.0", + "fullyQualifiedName": "GoogleDocs.SearchDocuments@8.1.0", "description": "Searches for documents in the user's Google Drive. Excludes documents in trash.\nReturns metadata only. Use get_document_metadata or get_document_as_docmd for content.", "parameters": [ { @@ -1263,7 +1263,7 @@ { "name": "WhoAmI", "qualifiedName": "GoogleDocs.WhoAmI", - "fullyQualifiedName": "GoogleDocs.WhoAmI@8.0.0", + "fullyQualifiedName": "GoogleDocs.WhoAmI@8.1.0", "description": "Get comprehensive user profile and Google Docs environment information.\n\nThis tool provides detailed information about the authenticated user including\ntheir name, email, profile picture, Google Docs access permissions, and other\nimportant profile details from Google services.", "parameters": [], "auth": { @@ -1334,6 +1334,7 @@ "import ScopePicker from \"@/app/_components/scope-picker\";" ], "subPages": [], - "generatedAt": "2026-08-06T11:47:09.067Z", - "summary": "## Google Docs Toolkit\n\nThe Google Docs toolkit gives LLMs the ability to create, read, edit, search, and annotate Google Docs documents via the Google Docs and Drive APIs through Arcade.\n\n## Capabilities\n\n- **Document creation**: Create blank documents or documents pre-populated with plain text or Markdown content (headings, bold, italic, lists automatically formatted).\n- **Structured reading and editing**: Retrieve documents in DocMD format (block IDs, character indices, text styles) and apply precise batchUpdate edits using those indices; supports tab-aware retrieval across all tabs or a specific tab.\n- **Search and discovery**: Search Drive for documents by query, returning metadata only or metadata plus body content; trash is excluded automatically.\n- **Commenting**: Add comments to a document and list all existing comments.\n- **File access and identity**: Generate a Google Drive inline file picker URL so users can grant per-file access when a file is not found or access is denied; retrieve authenticated user profile and permissions.\n- **Metadata inspection**: Fetch document title, ID, URL, total character count, and hierarchical tab structure with per-tab character counts.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via Google. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details.\n\n## Secrets\n\n- **`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL`**: A flag/URL value that enables the `GenerateGoogleFilePickerUrl` tool, which surfaces Google's first-party Drive file picker so users can grant the app access to specific files without a full re-authentication flow. To obtain or configure this value, set it in your Arcade secret store; the value controls whether the picker endpoint is active for your deployment. See the [Arcade secrets documentation](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets) for how to register secrets, or manage them directly at [https://api.arcade.dev/dashboard/auth/secrets](https://api.arcade.dev/dashboard/auth/secrets)." + "curationSourceHash": "33910354b796df23626997fca5e7d53bbf1479131ac0d258bc282833e12de451", + "generatedAt": "2026-08-13T11:19:44.487Z", + "summary": "## Google Docs Toolkit\n\nThe Google Docs toolkit connects Arcade to Google Docs, enabling LLMs to create, read, edit, search, and annotate documents on behalf of authenticated users.\n\n## Capabilities\n\n- **Document creation**: Create blank documents or documents pre-populated with plain text or Markdown content (headings, bold, italic, lists automatically formatted).\n- **Document reading**: Retrieve full document content in DocMD format (block IDs, character indices, text styles) with tab-aware output, or fetch metadata-only (title, ID, URL, character counts, tab hierarchy).\n- **Structured editing**: Apply batchUpdate requests using DocMD indices for precise in-place edits; append text to the end of a document without constructing requests manually.\n- **Search and discovery**: Search Drive for documents by keyword, returning metadata-only or metadata with body content; deprecated raw-content retrieval is replaced by DocMD-based tools.\n- **Comments**: Add new comments to a document or list all existing comments on it.\n- **User context and file access**: Retrieve the authenticated user's profile and permissions; generate a Google Drive inline file-picker URL to request per-file access when a document is inaccessible.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via Google. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details.\n\n## Secrets\n\n- **`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL`**: Controls whether the `GenerateGoogleFilePickerUrl` tool is enabled and determines the base URL for the Google Drive first-party file picker flow. This is an internal configuration key — its value is the URL of the picker endpoint your deployment exposes. If you are self-hosting Arcade or running a custom deployment, set this to the appropriate endpoint URL. In Arcade's managed environment, this may already be configured. Contact your Arcade account or check the [Arcade secrets dashboard](https://api.arcade.dev/dashboard/auth/secrets) to confirm whether it needs to be set for your deployment.\n\nFor general guidance on defining and managing secrets in Arcade tools, see the [Arcade tool secrets docs](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets)." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/googledrive.json b/toolkit-docs-generator/data/toolkits/googledrive.json index fb9f1a5ad..f0c74acea 100644 --- a/toolkit-docs-generator/data/toolkits/googledrive.json +++ b/toolkit-docs-generator/data/toolkits/googledrive.json @@ -1,7 +1,7 @@ { "id": "GoogleDrive", "label": "Google Drive", - "version": "7.0.0", + "version": "7.1.0", "description": "Arcade.dev LLM tools for Google Drive", "metadata": { "category": "productivity", @@ -27,8 +27,8 @@ { "name": "CheckFileAccess", "qualifiedName": "GoogleDrive.CheckFileAccess", - "fullyQualifiedName": "GoogleDrive.CheckFileAccess@7.0.0", - "description": "Check whether this app can already read each of several Drive files, in one batched\npre-flight call, before attempting to read them.\n\nUse this when the user references multiple files so any that are not yet accessible can\nbe granted together in a single picker step, instead of hitting a separate access error\nand grant prompt for each one. Each input may be a bare file id or a full Google\nDrive/Workspace URL (documents, spreadsheets, slides, PDFs, images, folders — any type).\n\nReturns ``files`` (a per-id list with ``accessible``, the ``title`` and ``mime_type``\nwhen the file was read, and a ``reason`` when not usable), ``all_accessible`` (true only\nwhen every id is already accessible), ``connected_account_email`` (the connected Google\naccount, empty when unknown), and a ``grant`` block. ``grant`` is empty when nothing needs\ngranting; otherwise it lists the ungranted ids (``ungranted_ids``) plus, when the inline\npicker is enabled, a single picker URL covering them all.\n\nA ``reason`` of ``not_accessible_or_not_found`` is either a file not granted to this app\nyet or one that does not exist (indistinguishable here) — the picker resolves the former.\n``invalid_reference`` is an input that is not a Drive id or link at all; ask the user to\nre-check it. ``error`` is a transient server-side failure (a timeout or 5xx) that the\npicker cannot fix; the same inputs may be retried later.", + "fullyQualifiedName": "GoogleDrive.CheckFileAccess@7.1.0", + "description": "Check whether this app can already read each of several Drive files, in one batched\npre-flight call, before attempting to read them.\n\nUse this when the user references multiple files, to learn which are readable up front\ninstead of hitting a separate access error for each one. Where this app reaches files\none grant at a time, the ungranted ones can then be granted together in a single picker\nstep. Each input may be a bare file id or a full Google Drive/Workspace URL (documents,\nspreadsheets, slides, PDFs, images, folders — any type).\n\nReturns ``files`` (a per-id list with ``accessible``, the ``title`` and ``mime_type``\nwhen the file was read, and a ``reason`` when not usable), ``all_accessible`` (true only\nwhen every id is already accessible), ``connected_account_email`` (the connected Google\naccount, empty when unknown), and a ``grant`` block. ``grant`` lists the ungranted\nids (``ungranted_ids``) plus, when the inline picker is enabled, a single picker URL\ncovering them all. Where this app already reaches every file the account can open there\nis no per-file grant to make, so ``ungranted_ids`` stays empty and only ``access_hint``\ncomes back.\n\nA ``reason`` of ``not_accessible_or_not_found`` is a file this app cannot read: one not\ngranted to it yet, one that does not exist, or one the connected account itself cannot\nopen — indistinguishable here. Empty ``ungranted_ids`` means no grant\nstep exists, so treat those ids as not found rather than asking the user to grant them.\n``invalid_reference`` is an input that is not a Drive id or link at all; ask the user to\nre-check it. ``error`` is a transient server-side failure (a timeout or 5xx) that no\ngrant can fix; the same inputs may be retried later.", "parameters": [ { "name": "files", @@ -58,7 +58,7 @@ ], "output": { "type": "json", - "description": "Per-id accessibility (`files`), an `all_accessible` flag, the `connected_account_email` (the Google account this app is connected through), and a `grant` block — empty when nothing needs granting, otherwise listing the ungranted ids with one consolidated picker URL covering them all." + "description": "Per-id accessibility (`files`), an `all_accessible` flag, the `connected_account_email` (the Google account this app is connected through), and a `grant` block. `grant` lists the ungranted ids with one consolidated picker URL when a per-file grant can help; where this app already reaches every file the account can open there is none to make, so `ungranted_ids` stays empty and only an `access_hint` comes back." }, "documentationChunks": [], "codeExample": { @@ -101,7 +101,7 @@ { "name": "CreateFolder", "qualifiedName": "GoogleDrive.CreateFolder", - "fullyQualifiedName": "GoogleDrive.CreateFolder@7.0.0", + "fullyQualifiedName": "GoogleDrive.CreateFolder@7.1.0", "description": "Create a new folder in Google Drive.\n\nBy default, parent folder paths are resolved in My Drive. For shared drives, use folder IDs\nor provide shared_drive_id.", "parameters": [ { @@ -194,7 +194,7 @@ { "name": "DownloadFile", "qualifiedName": "GoogleDrive.DownloadFile", - "fullyQualifiedName": "GoogleDrive.DownloadFile@7.0.0", + "fullyQualifiedName": "GoogleDrive.DownloadFile@7.1.0", "description": "Download a blob file (non-workspace file) from Google Drive as base64 encoded content.\n\nFor small files (under ~5MB raw), returns the file content directly in the response as base64.\nFor large files, returns metadata with requires_chunked_download=True - use download_file_chunk\nto retrieve the file in parts.\n\nBy default, paths are resolved in My Drive. For shared drives, use file IDs or provide\nshared_drive_id.", "parameters": [ { @@ -274,7 +274,7 @@ { "name": "DownloadFileChunk", "qualifiedName": "GoogleDrive.DownloadFileChunk", - "fullyQualifiedName": "GoogleDrive.DownloadFileChunk@7.0.0", + "fullyQualifiedName": "GoogleDrive.DownloadFileChunk@7.1.0", "description": "Download a specific byte range of a file from Google Drive.\n\nUse this for large files that require chunked download (when download_file returns\nrequires_chunked_download=True). Call repeatedly with increasing start_byte values\nto retrieve the complete file.\n\nReturns the chunk content as base64, along with progress information including\nwhether this is the final chunk.", "parameters": [ { @@ -380,8 +380,8 @@ { "name": "GenerateGoogleFilePickerUrl", "qualifiedName": "GoogleDrive.GenerateGoogleFilePickerUrl", - "fullyQualifiedName": "GoogleDrive.GenerateGoogleFilePickerUrl@7.0.0", - "description": "Generate a URL where the user can grant this app access to specific Drive files.\n\nOpens Google's first-party Drive picker. The user selects which files to share\nwith this application — it is not a sign-in or credential prompt. By default the picker\nshows files of all types; pass ``file_types`` to restrict it to specific types.\n\nUse this when a prior tool reported that a file was not found or access was denied,\nand the user expects the file to exist. After the user completes the picker flow,\nretry the prior tool.", + "fullyQualifiedName": "GoogleDrive.GenerateGoogleFilePickerUrl@7.1.0", + "description": "Generate a URL where the user can grant this app access to specific Drive files.\n\nCheck `url` first. An empty `url` means this app already reaches every file the\nconnected account can open, so there is no per-file grant to request: this tool cannot\nchange any outcome, and a file that could not be read is one the account itself cannot\nopen. Do not retry it.\n\nOtherwise the URL opens Google's first-party Drive picker, where the user selects which\nfiles to share with this application — it is not a sign-in or credential prompt. By\ndefault the picker shows files of all types; pass ``file_types`` to restrict it to\nspecific types. Use this when a prior tool reported that a file was not found or access\nwas denied, and the user expects the file to exist. After the user completes the picker\nflow, retry the prior tool.", "parameters": [ { "name": "file_types", @@ -456,7 +456,7 @@ { "name": "GetFileTreeStructure", "qualifiedName": "GoogleDrive.GetFileTreeStructure", - "fullyQualifiedName": "GoogleDrive.GetFileTreeStructure@7.0.0", + "fullyQualifiedName": "GoogleDrive.GetFileTreeStructure@7.1.0", "description": "Get the file/folder tree structure of the user's entire Google Drive.\nVery inefficient for large drives. Use with caution.", "parameters": [ { @@ -602,7 +602,7 @@ { "name": "ListFilePermissions", "qualifiedName": "GoogleDrive.ListFilePermissions", - "fullyQualifiedName": "GoogleDrive.ListFilePermissions@7.0.0", + "fullyQualifiedName": "GoogleDrive.ListFilePermissions@7.1.0", "description": "List permissions on a Google Drive file or folder.\n\nReturns the individual people (and groups) with access and the current General access\n(link sharing) state. `general_access` is computed across the ENTIRE file regardless of\nfiltering -- so \"is this doc public?\" is always answered authoritatively.\n\nWhen `roles` is provided, `people` and `total_people` reflect only collaborators whose\nrole matches the filter. Truncated collaborators beyond `limit` are not returned;\n`has_more` indicates whether truncation occurred.", "parameters": [ { @@ -717,7 +717,7 @@ { "name": "MoveFile", "qualifiedName": "GoogleDrive.MoveFile", - "fullyQualifiedName": "GoogleDrive.MoveFile@7.0.0", + "fullyQualifiedName": "GoogleDrive.MoveFile@7.1.0", "description": "Move a file or folder to a different folder within the same Google Drive.\n\nCan move to a folder (keeping name), or move and rename in one operation. By default, paths\nare resolved in My Drive. For shared drives, use file IDs or provide shared_drive_id.", "parameters": [ { @@ -823,7 +823,7 @@ { "name": "RemoveAllCollaborators", "qualifiedName": "GoogleDrive.RemoveAllCollaborators", - "fullyQualifiedName": "GoogleDrive.RemoveAllCollaborators@7.0.0", + "fullyQualifiedName": "GoogleDrive.RemoveAllCollaborators@7.1.0", "description": "Remove all user collaborators (and optionally groups) from a Google Drive file.\n\nThe file owner and the calling user are always preserved. Groups are preserved by default\nbecause the Drive API cannot verify group membership -- pass include_groups=True to opt in.\nInherited shared-drive permissions are never removable from the file level and are skipped.\n\nUse except_people to preserve additional people or groups by email or name. Ambiguous or\nunmatched except_people entries raise an error to avoid accidentally removing someone the\ncaller meant to keep.", "parameters": [ { @@ -933,7 +933,7 @@ { "name": "RenameFile", "qualifiedName": "GoogleDrive.RenameFile", - "fullyQualifiedName": "GoogleDrive.RenameFile@7.0.0", + "fullyQualifiedName": "GoogleDrive.RenameFile@7.1.0", "description": "Rename a file or folder in Google Drive.\n\nBy default, paths are resolved in My Drive. For files in shared drives, either use the file ID\ndirectly or provide the shared_drive_id parameter.", "parameters": [ { @@ -1026,7 +1026,7 @@ { "name": "RevokeFileAccess", "qualifiedName": "GoogleDrive.RevokeFileAccess", - "fullyQualifiedName": "GoogleDrive.RevokeFileAccess@7.0.0", + "fullyQualifiedName": "GoogleDrive.RevokeFileAccess@7.1.0", "description": "Revoke access for specific people or groups on a Google Drive file.\n\nIdentifies matches by email (exact, case-insensitive) or display name. When an input\nmatches multiple people, the clear matches are still revoked and the ambiguous input is\nsurfaced in the `ambiguous` response field with candidate details so the agent can\nre-prompt the user for just the uncertain ones. Inputs that don't match any collaborator\nare returned in `not_found`. Pending-owner matches (mid-ownership-transfer) are skipped\nand surfaced in `skipped_pending_owner` so the clean revokes in the batch still land.\nOwner permissions cannot be revoked -- transfer ownership first.\n\nWhen a grantee has both a direct and an inherited permission (e.g., shared-drive member\nalso granted directly on the file), revoking the direct row leaves the inherited access\nintact. The inherited row is surfaced in `skipped_inherited` so callers don't assume the\ngrantee is fully removed -- inherited access must be adjusted at the shared drive level.", "parameters": [ { @@ -1124,7 +1124,7 @@ { "name": "SearchDrive", "qualifiedName": "GoogleDrive.SearchDrive", - "fullyQualifiedName": "GoogleDrive.SearchDrive@7.0.0", + "fullyQualifiedName": "GoogleDrive.SearchDrive@7.1.0", "description": "Search the user's entire Google Drive, including files they created or\nreceived directly in Drive — not only files created through this app.\n\nReads across the user's whole Drive, so it requires broad read access to\ntheir files. The provided 'query' should contain only the search terms; the\ntool builds the full Drive query for you, matching file names and contents.", "parameters": [ { @@ -1307,7 +1307,7 @@ { "name": "SearchFiles", "qualifiedName": "GoogleDrive.SearchFiles", - "fullyQualifiedName": "GoogleDrive.SearchFiles@7.0.0", + "fullyQualifiedName": "GoogleDrive.SearchFiles@7.1.0", "description": "Search for files in Google Drive.\n\nThe provided 'query' should only contain the search terms.\nThe tool will construct the full search query for you.", "parameters": [ { @@ -1510,7 +1510,7 @@ { "name": "SetGeneralAccess", "qualifiedName": "GoogleDrive.SetGeneralAccess", - "fullyQualifiedName": "GoogleDrive.SetGeneralAccess@7.0.0", + "fullyQualifiedName": "GoogleDrive.SetGeneralAccess@7.1.0", "description": "Change the 'General access' (link sharing) setting on a Google Drive file.\n\nIdempotent: calling with the same state as the current configuration is a no-op. When access\nis 'domain', the link is scoped to the caller's email domain -- NOT the file owner's domain.\nFor cross-org collaboration (e.g., editing a file owned by another organization), confirm\nwith the user which domain they intend before calling. Google will reject domain sharing\nfor personal accounts (gmail.com, outlook.com, etc.) -- the tool translates that rejection\ninto a friendly error.\n\nThe response's `access` and `role` fields report the EFFECTIVE state after the transition,\nnot the requested state. For files on shared drives, inherited link permissions cannot be\nchanged from the file level -- if the request would have required removing an inherited\npermission, the effective state will reflect the inherited permission that remained. When\n`skipped_inherited` is non-empty, inspect it to understand why effective state may differ\nfrom what was requested.", "parameters": [ { @@ -1637,7 +1637,7 @@ { "name": "ShareFile", "qualifiedName": "GoogleDrive.ShareFile", - "fullyQualifiedName": "GoogleDrive.ShareFile@7.0.0", + "fullyQualifiedName": "GoogleDrive.ShareFile@7.1.0", "description": "Share a file or folder in Google Drive with specific people by granting them permissions.\n\nIf a user already has permission on the file, their role will be updated to the new role.\nBy default, paths are resolved in My Drive. For shared drives, use file IDs or provide\nshared_drive_id.", "parameters": [ { @@ -1778,7 +1778,7 @@ { "name": "UploadFile", "qualifiedName": "GoogleDrive.UploadFile", - "fullyQualifiedName": "GoogleDrive.UploadFile@7.0.0", + "fullyQualifiedName": "GoogleDrive.UploadFile@7.1.0", "description": "Upload a file to Google Drive from a URL.\n\nFetches the file content from the provided URL and uploads it to Google Drive.\nSupports files of any size - uses resumable upload internally for large files.\n\nCANNOT upload Google Workspace files (Google Docs, Sheets, Slides)\nCANNOT upload files larger than 25MB", "parameters": [ { @@ -1909,7 +1909,7 @@ { "name": "WhoAmI", "qualifiedName": "GoogleDrive.WhoAmI", - "fullyQualifiedName": "GoogleDrive.WhoAmI@7.0.0", + "fullyQualifiedName": "GoogleDrive.WhoAmI@7.1.0", "description": "Get comprehensive user profile and Google Drive environment information.\n\nThis tool provides detailed information about the authenticated user including\ntheir name, email, profile picture, Google Drive storage information, the shared\ndrives (and their IDs) the user has access to, and other\nimportant profile details from Google services.", "parameters": [], "auth": { @@ -1959,6 +1959,7 @@ "import ScopePicker from \"@/app/_components/scope-picker\";" ], "subPages": [], - "generatedAt": "2026-08-06T11:47:09.072Z", - "summary": "The Google Drive toolkit lets agents read, organize, share, and manage files in a user's Google Drive (including Shared Drives) via Arcade. It covers the full file lifecycle — discovery, access control, upload/download, and folder management.\n\n## Capabilities\n\n- **File discovery & search** — search across all of Drive (names + content), retrieve folder/file trees, resolve bare IDs or full Google Drive/Workspace URLs, and batch-check accessibility before attempting reads.\n- **File & folder management** — create folders, move/rename files, upload files from URLs (up to 25 MB), and download blob files directly or in byte-range chunks for large files.\n- **Access control & sharing** — share files with specific people, revoke individual or all collaborators, set general/link-sharing access (restricted, domain, anyone), list all permissions with role filtering, and generate a first-party Google Drive picker URL when files aren't yet granted to the app.\n- **Account & environment info** — retrieve the authenticated user's profile, email, storage quota, and the IDs of all Shared Drives they can access.\n\n## OAuth\n\nThis toolkit authenticates via OAuth 2.0 using the **Google** provider. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup instructions, required scopes, and configuration details.\n\n## Secrets\n\n`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL` — A flag/URL secret that enables the inline Google Drive file picker feature. When set, tools such as `CheckFileAccess` and `GenerateGoogleFilePickerUrl` can return a picker URL directly in their responses, allowing users to grant file access without a separate redirect flow. To obtain or configure this value, you set it in your Arcade environment as a secret — it is not issued by Google but rather configured in your Arcade deployment to point to (or enable) the inline picker endpoint your app exposes. Refer to the [Arcade secrets documentation](https://docs.arcade.dev/en/guides/create-tools/tool-secrets/create-tool-secrets) for instructions on creating and managing tool secrets, and use the [Arcade dashboard](https://api.arcade.dev/dashboard/auth/secrets) to store the value." + "curationSourceHash": "dd8b363d0c5b211c25a2d7aca421340a81cbdc1eebee6d6743d73838563477a4", + "generatedAt": "2026-08-13T11:19:44.497Z", + "summary": "The Google Drive toolkit lets Arcade-powered agents read, write, organize, and share files across a user's entire Google Drive (including Shared Drives) via Google's APIs.\n\n## Capabilities\n\n- **File access & discovery:** Batch pre-flight access checks, full-drive and targeted search (by name and content), file-tree enumeration, and user/environment profile lookup.\n- **File I/O:** Download blob files directly or in byte-range chunks for large files; upload files from a URL (up to 25 MB, non-Workspace types).\n- **Organization:** Create folders, move, rename, and resolve paths in My Drive or Shared Drives.\n- **Permissions & sharing:** Share with individuals, revoke access for specific or all collaborators, set general/link-sharing access (public, domain, restricted), and list current permissions with role filtering.\n- **Picker integration:** Generate a Google-native file picker URL so users can grant per-file access to the app; batch pre-flight checks surface ungranted file IDs to minimize picker round-trips.\n\n## OAuth\n\nAuthentication uses OAuth 2.0 via the **Google** provider. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details, required scopes, and configuration steps.\n\n## Secrets\n\n`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL` — A token or API key that enables the inline Google Drive file picker feature. When present and valid, `CheckFileAccess` and `GenerateGoogleFilePickerUrl` will include a ready-to-use picker URL in their responses, allowing users to grant per-file access without a separate redirect flow. When absent, picker URL generation is disabled and only `ungranted_ids` are returned.\n\nThis secret is provisioned through Arcade's own configuration rather than a third-party provider dashboard. To create or retrieve it, visit the [Arcade secrets dashboard](https://api.arcade.dev/dashboard/auth/secrets) and add the secret under your Arcade account.\n\nFor general guidance on adding secrets to tools, see the [Arcade tool secrets docs](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets)." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/googlesheets.json b/toolkit-docs-generator/data/toolkits/googlesheets.json index 2e4f99bcc..87ef784be 100644 --- a/toolkit-docs-generator/data/toolkits/googlesheets.json +++ b/toolkit-docs-generator/data/toolkits/googlesheets.json @@ -1,7 +1,7 @@ { "id": "GoogleSheets", "label": "Google Sheets", - "version": "9.0.0", + "version": "9.1.0", "description": "Arcade.dev LLM tools for Google Sheets.", "metadata": { "category": "productivity", @@ -26,8 +26,8 @@ { "name": "CheckSpreadsheetAccess", "qualifiedName": "GoogleSheets.CheckSpreadsheetAccess", - "fullyQualifiedName": "GoogleSheets.CheckSpreadsheetAccess@9.0.0", - "description": "Check whether this app can already read each of several spreadsheets, in one\nbatched pre-flight call, before attempting to read them.\n\nUse this when the user references multiple spreadsheets so any that are not yet\naccessible can be granted together in a single picker step, instead of hitting a\nseparate access error and grant prompt for each one. Each input may be a bare file id\nor a full Google Sheets/Drive URL.\n\nReturns ``spreadsheets`` (a per-id list with ``accessible``, the ``title`` and\n``mime_type`` when the file was read, and a ``reason`` when not usable),\n``all_accessible`` (true only when every id is an already-accessible spreadsheet),\n``connected_account_email`` (the connected Google account, empty when unknown), and a\n``grant`` block. ``grant`` is empty when nothing needs granting; otherwise it lists the\nungranted ids (``ungranted_ids``) plus, when the inline picker is enabled, a single\npicker URL covering them all.\n\nA ``reason`` of ``not_accessible_or_not_found`` is either a file not granted to this app\nyet or one that does not exist (indistinguishable here) — the picker resolves the\nformer. ``not_a_spreadsheet`` is an accessible file of another type (a Doc, PDF, image,\nor Excel/CSV file); granting cannot change a type, so for an Excel/CSV file ask the user\nto open it in Google Sheets and use File, Save as Google Sheets, then share the\nconverted file. ``invalid_reference`` is an input that is not a Drive id or link at all;\nask the user to re-check it.", + "fullyQualifiedName": "GoogleSheets.CheckSpreadsheetAccess@9.1.0", + "description": "Check whether this app can already read each of several spreadsheets, in one\nbatched pre-flight call, before attempting to read them.\n\nUse this when the user references multiple spreadsheets, to learn which are readable up\nfront instead of hitting a separate access error for each one. Where this app reaches\nspreadsheets one grant at a time, the ungranted ones can then be granted together in a\nsingle picker step. Each input may be a bare file id or a full Google Sheets/Drive URL.\n\nReturns ``spreadsheets`` (a per-id list with ``accessible``, the ``title`` and\n``mime_type`` when the file was read, and a ``reason`` when not usable),\n``all_accessible`` (true only when every id is an already-accessible spreadsheet),\n``connected_account_email`` (the connected Google account, empty when unknown), and a\n``grant`` block. ``grant`` lists the ungranted ids (``ungranted_ids``) plus, when the\ninline picker is enabled, a single picker URL covering them all. Where this app already\nreaches every spreadsheet the account can open there is no per-file grant to make, so\n``ungranted_ids`` stays empty and only ``access_hint`` comes back.\n\nA ``reason`` of ``not_accessible_or_not_found`` is a spreadsheet this app cannot read:\none not granted to it yet, one that does not exist, or one the connected account itself\ncannot open — indistinguishable here. Empty ``ungranted_ids`` means no grant\nstep exists, so treat those ids as not found rather than asking the user to grant them.\n``not_a_spreadsheet`` is an accessible file of another type (a Doc, PDF, image, or\nExcel/CSV file); granting cannot change a type, so for an Excel/CSV file ask the user\nto open it in Google Sheets and use File, Save as Google Sheets, then share the\nconverted file. ``invalid_reference`` is an input that is not a Drive id or link at all;\nask the user to re-check it.", "parameters": [ { "name": "spreadsheets", @@ -57,7 +57,7 @@ ], "output": { "type": "json", - "description": "Per-id accessibility (`spreadsheets`), an `all_accessible` flag, the `connected_account_email` (the Google account this app is connected through), and a `grant` block — empty when nothing needs granting, otherwise listing the ungranted ids with one consolidated picker URL covering them all." + "description": "Per-id accessibility (`spreadsheets`), an `all_accessible` flag, the `connected_account_email` (the Google account this app is connected through), and a `grant` block. `grant` lists the ungranted ids with one consolidated picker URL when a per-file grant can help; where this app already reaches every spreadsheet the account can open there is none to make, so `ungranted_ids` stays empty and only an `access_hint` comes back." }, "documentationChunks": [], "codeExample": { @@ -99,7 +99,7 @@ { "name": "CommentOnSpreadsheet", "qualifiedName": "GoogleSheets.CommentOnSpreadsheet", - "fullyQualifiedName": "GoogleSheets.CommentOnSpreadsheet@9.0.0", + "fullyQualifiedName": "GoogleSheets.CommentOnSpreadsheet@9.1.0", "description": "Create a comment on a spreadsheet, edit a comment's body, or resolve/reopen it.\n\nComments are created at the file level: the Drive API cannot anchor a NEW Sheets comment to a\nspecific cell or range. Cell/range-anchored comments made in the Sheets UI are still readable\nvia list_spreadsheet_comments (which returns their anchor). Editing a comment's body is\nallowed only for the comment's author.", "parameters": [ { @@ -209,7 +209,7 @@ { "name": "CreateOrEditSpreadsheet", "qualifiedName": "GoogleSheets.CreateOrEditSpreadsheet", - "fullyQualifiedName": "GoogleSheets.CreateOrEditSpreadsheet@9.0.0", + "fullyQualifiedName": "GoogleSheets.CreateOrEditSpreadsheet@9.1.0", "description": "Create a new spreadsheet or batch-edit an existing one.\n\nOmit `spreadsheet_id` to create; provide it to edit. All writes flow through\n`requests[]` — typed operations like updateCells, addSheet, sortRange,\naddConditionalFormatRule, autoResizeDimensions, and more.\n\nFor updateCells use ExtendedValue with an explicit type field (stringValue,\nnumberValue, boolValue, formulaValue).\n\nBy default, build clean, professional-looking tables with restrained, consistent\nformatting and plain-text tab names/headers (no emojis); only use emojis or\ndecorative styling when the user explicitly asks for it.", "parameters": [ { @@ -660,7 +660,7 @@ { "name": "DeleteComment", "qualifiedName": "GoogleSheets.DeleteComment", - "fullyQualifiedName": "GoogleSheets.DeleteComment@9.0.0", + "fullyQualifiedName": "GoogleSheets.DeleteComment@9.1.0", "description": "Delete a comment from a spreadsheet.\n\nOnly the comment's author can delete it (enforced by Google Drive); deleting marks the\nwhole thread (the comment and its replies) as deleted.", "parameters": [ { @@ -740,8 +740,8 @@ { "name": "GenerateGoogleFilePickerUrl", "qualifiedName": "GoogleSheets.GenerateGoogleFilePickerUrl", - "fullyQualifiedName": "GoogleSheets.GenerateGoogleFilePickerUrl@9.0.0", - "description": "Generate a URL where the user can grant this app access to spreadsheets.\n\nOpens Google's first-party Drive picker, filtered to Google Sheets, where the user\nbrowses and selects which spreadsheets to share with this application — it is not a\nsign-in or credential prompt.\n\nUse this when a prior tool reported that a file was not found or access was denied, and\nthe user expects the file to exist. After the user completes the picker flow, retry the\nprior operation.", + "fullyQualifiedName": "GoogleSheets.GenerateGoogleFilePickerUrl@9.1.0", + "description": "Generate a URL where the user can grant this app access to spreadsheets.\n\nCheck `url` first. An empty `url` means this app already reaches every spreadsheet the\nconnected account can open, so there is no per-file grant to request: this tool cannot\nchange any outcome, and a spreadsheet that could not be read is one the account itself\ncannot open. Do not retry it.\n\nOtherwise the URL opens Google's first-party Drive picker, filtered to Google Sheets,\nwhere the user browses and selects which spreadsheets to share with this application —\nit is not a sign-in or credential prompt. Use this when a prior tool reported that a\nfile was not found or access was denied, and the user expects the file to exist. After\nthe user completes the picker flow, retry the prior operation.", "parameters": [], "auth": { "providerId": "google", @@ -783,7 +783,7 @@ { "name": "GetSpreadsheetEditHistory", "qualifiedName": "GoogleSheets.GetSpreadsheetEditHistory", - "fullyQualifiedName": "GoogleSheets.GetSpreadsheetEditHistory@9.0.0", + "fullyQualifiedName": "GoogleSheets.GetSpreadsheetEditHistory@9.1.0", "description": "Report who edited a spreadsheet and when, from Google Drive revisions.\n\nReports the \"who\" and \"when\" only — not which cells changed, and it can't revert.\n\n'summary' (default) answers \"who last edited this and when\" (read from the file's head,\nso always accurate), plus per-window aggregates (revisions read, contributors, first\nedit) and a preview of recent edits — computed over a bounded window of history per call.\nThese aggregates describe the whole history only when `is_incomplete` is false; it is\ntrue when the scan was resumed from a token and/or more history remains. To answer\n\"when was this first edited?\" or \"who contributed?\" reliably, call from the beginning\n(no `pagination_token`) and check `is_incomplete` is false. `pagination_token` is\nreturned when more pages remain so you can resume.\n\n'list' returns one page of individual revisions, oldest first. Drive can't sort\nnewest-first, so the most recent individual revisions are on the final page.", "parameters": [ { @@ -892,7 +892,7 @@ { "name": "InspectSpreadsheet", "qualifiedName": "GoogleSheets.InspectSpreadsheet", - "fullyQualifiedName": "GoogleSheets.InspectSpreadsheet@9.0.0", + "fullyQualifiedName": "GoogleSheets.InspectSpreadsheet@9.1.0", "description": "Inspect a Google Sheets spreadsheet's structure or read a range of cells.\n\nUse the default 'structure' mode to understand a workbook cheaply before reading.\nSwitch to 'read' mode to pull a range as a grid of rows, optionally with\nper-cell annotations and a rendered markdown/csv/tsv export.\n\nIn 'read' mode the response's per-tab 'sheets' block reports only tab identity and\nthe allocated grid; its scan-derived fields (used_range, populated_cell_count,\nformula_cell_count, first_row, table_regions) are placeholders (0/empty) because read\nmode does not scan the tab — they do NOT mean the tab is empty or that it has no\ntables. The data you read is in the top-level 'range' and 'rows'. Call 'structure'\nmode for those aggregates and for the workbook's charts, merges, protected ranges, and\nconditional formats.\n\nWorkflow for a tab that holds multiple tables, or a table that does not start at A1:\ncall 'structure' first and use that tab's estimated 'table_regions' to choose the\na1_range to read or filter, so you target one table instead of a glued multi-table\nrange.\n\nAlways check the response's top-level 'warnings' list: read mode reports there when a\nresult was capped or trimmed (cell budget, the per-cell annotation cap, or an empty\nfilter scan) and tells you how to recover (page 'next_range', narrow 'a1_range',\n'select_columns', or request fewer annotation kinds).", "parameters": [ { @@ -1174,7 +1174,7 @@ { "name": "ListSpreadsheetComments", "qualifiedName": "GoogleSheets.ListSpreadsheetComments", - "fullyQualifiedName": "GoogleSheets.ListSpreadsheetComments@9.0.0", + "fullyQualifiedName": "GoogleSheets.ListSpreadsheetComments@9.1.0", "description": "List a spreadsheet's comment threads, or the full replies of a single comment.\n\nIn 'comments' mode each comment includes up to a few trimmed reply previews plus the total reply_count; use 'thread' mode for a comment's complete reply list. Without filters/ordering, pagination walks every comment. Client-side filters (has_replies, resolved) and order_by are applied only within a bounded scan of the first 500 comments, so on larger sheets drop them and page through everything with the native (unbounded) pagination. Each comment's Drive anchor is returned when it was cell/range-anchored in the Sheets UI; comments created via the API are file-level. Filtering, ordering, and offset pagination are best-effort: results can drift if comments are added or removed between paginated calls.", "parameters": [ { @@ -1397,7 +1397,7 @@ { "name": "ReplyToComment", "qualifiedName": "GoogleSheets.ReplyToComment", - "fullyQualifiedName": "GoogleSheets.ReplyToComment@9.0.0", + "fullyQualifiedName": "GoogleSheets.ReplyToComment@9.1.0", "description": "Add a reply to an existing comment on a spreadsheet.\n\nTo resolve or reopen the comment instead, use comment_on_spreadsheet with a status.", "parameters": [ { @@ -1490,7 +1490,7 @@ { "name": "ScanForDataIssues", "qualifiedName": "GoogleSheets.ScanForDataIssues", - "fullyQualifiedName": "GoogleSheets.ScanForDataIssues@9.0.0", + "fullyQualifiedName": "GoogleSheets.ScanForDataIssues@9.1.0", "description": "Deterministically flag 'weird'/bad cells in spreadsheet data.\n\nNo LLM judgement: the same input always returns the same flags. Each cell-level finding\ncarries a coord, a 0-based row_index/column_index (ready for a Sheets GridRange), the rule,\na severity (high -> red, medium/low -> yellow), and a note-ready reason — so the output\ndrops straight into an annotate/format recipe. In the default `mode='grouped'` these are\naggregated per rule+column within each table into `groups` (with A1 `coords`); use\n`mode='list'` to get every flagged cell in `flags` with its 0-based indices.\n\nProvide `spreadsheet_id` to scan a live sheet (scan one tab via sheet_id/sheet_title, or\nevery tab when both are omitted). Set `orientation='rows'` for transposed tables whose\nfields run down a column instead of across a row. Findings come back as flags (cell-level,\nhigh certainty) and alerts (table-level, lower certainty), grouped sheet -> table -> rule.\n\nIn all-sheets mode an unreadable tab never aborts the scan: its title is collected in\n`failed_sheets` (and echoed as a `warnings` entry) while every other tab still returns.\n`failed_sheets` is empty for a single-tab scan and whenever every tab reads cleanly.", "parameters": [ { @@ -1712,7 +1712,7 @@ { "name": "SearchSpreadsheets", "qualifiedName": "GoogleSheets.SearchSpreadsheets", - "fullyQualifiedName": "GoogleSheets.SearchSpreadsheets@9.0.0", + "fullyQualifiedName": "GoogleSheets.SearchSpreadsheets@9.1.0", "description": "Searches for spreadsheets in the user's Google Drive based on the titles and content and\nreturns the title, ID, and URL for each matching spreadsheet.\n\nDoes not return the content/data of the sheets in the spreadsheets - only the metadata.\nExcludes spreadsheets that are in the trash.", "parameters": [ { @@ -1905,7 +1905,7 @@ { "name": "WhoAmI", "qualifiedName": "GoogleSheets.WhoAmI", - "fullyQualifiedName": "GoogleSheets.WhoAmI@9.0.0", + "fullyQualifiedName": "GoogleSheets.WhoAmI@9.1.0", "description": "Get comprehensive user profile and Google Sheets environment information.\n\nThis tool provides detailed information about the authenticated user including\ntheir name, email, profile picture, Google Sheets access permissions, and other\nimportant profile details from Google services.", "parameters": [], "auth": { @@ -1955,6 +1955,7 @@ "import ScopePicker from \"@/app/_components/scope-picker\";" ], "subPages": [], - "generatedAt": "2026-08-06T11:47:09.067Z", - "summary": "## Google Sheets Toolkit\n\nArcade's Google Sheets toolkit provides LLM-accessible tools for reading, writing, commenting on, and auditing Google Sheets spreadsheets via the Google Sheets and Drive APIs.\n\n## Capabilities\n\n- **Spreadsheet access & discovery:** Search Drive for spreadsheets by title/content, batch-check accessibility across multiple files before reading, and generate a Google Drive file picker URL to prompt the user to grant access.\n- **Read & inspect:** Inspect workbook structure (tabs, charts, merges, protected ranges, conditional formats) or read cell ranges as grids with optional markdown/CSV/TSV export and per-cell annotations; retrieve the authenticated user's profile and permissions.\n- **Write & edit:** Create new spreadsheets or batch-edit existing ones using the full Sheets batchUpdate API (cell values, formatting, sheet management, sorting, conditional format rules, and more).\n- **Comments & replies:** List comment threads, create or edit file-level comments, reply to threads, resolve/reopen comments, and delete comments.\n- **Data quality:** Deterministically scan spreadsheet data for bad or anomalous cells (no LLM judgment), returning structured findings by rule and severity ready for annotation or formatting workflows.\n- **Edit history:** Retrieve revision history from Drive — who edited and when — with summary aggregates or paginated per-revision listings.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via Google. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details.\n\n## Secrets\n\n- **`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL`** — A flag/URL secret that, when set, enables the toolkit to return an inline Google Drive file picker URL directly inside tool responses (e.g., in `CheckSpreadsheetAccess` grant blocks and `GenerateGoogleFilePickerUrl` output), rather than requiring a separate redirect flow. This is an Arcade-side configuration value tied to how your deployment surfaces the picker to end users. Obtain or configure this value through your [Arcade dashboard secrets page](https://api.arcade.dev/dashboard/auth/secrets) according to your integration setup.\n\nFor general guidance on defining and using secrets in Arcade tools, see the [Arcade tool secrets docs](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets)." + "curationSourceHash": "dd8b363d0c5b211c25a2d7aca421340a81cbdc1eebee6d6743d73838563477a4", + "generatedAt": "2026-08-13T11:19:44.487Z", + "summary": "## Google Sheets Toolkit\n\nThe Google Sheets toolkit connects Arcade to Google Sheets and Google Drive, enabling LLMs to read, write, inspect, comment on, audit, and search spreadsheets on behalf of authenticated users.\n\n## Capabilities\n\n- **Spreadsheet access & discovery:** Search Drive for spreadsheets by title/content, resolve file IDs or URLs, batch-check access across multiple files, and retrieve the authenticated user's profile and permissions.\n- **Read & inspect:** Inspect workbook structure (tabs, charts, merges, protected ranges, conditional formats) or read arbitrary cell ranges with optional annotations, markdown/CSV/TSV export, and multi-table region detection.\n- **Write & edit:** Create new spreadsheets or batch-edit existing ones using the full Sheets `batchUpdate` request model — cell values (string, number, boolean, formula), sheet management, sorting, conditional formatting, and dimension auto-resize.\n- **Data quality:** Deterministically flag bad or anomalous cells by rule and severity, with output structured for direct use in annotate/format pipelines; works across single or multiple tabs.\n- **Comments & collaboration:** Create, edit, resolve, reopen, delete, list, and reply to comment threads; retrieve Drive-revision edit history (contributors, timestamps, pagination).\n- **Access management:** Generate a Google Drive file-picker URL so users can grant per-file access to the app, covering one or many ungrantable spreadsheets in a single flow.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via Google. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details.\n\n## Secrets\n\n- **`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL`** — A feature-flag secret that, when set, activates the inline Google Drive file-picker URL in access-check responses (`CheckSpreadsheetAccess`) and in `GenerateGoogleFilePickerUrl`. This is not a credential from Google; it is an Arcade-side configuration value you set in your Arcade environment to opt in to the inline picker flow. Set it in the [Arcade secrets dashboard](https://api.arcade.dev/dashboard/auth/secrets).\n\nFor general guidance on defining and using secrets in tools, see the [Arcade tool secrets docs](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets)." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/googleslides.json b/toolkit-docs-generator/data/toolkits/googleslides.json index e3c731e7d..372ebf0ac 100644 --- a/toolkit-docs-generator/data/toolkits/googleslides.json +++ b/toolkit-docs-generator/data/toolkits/googleslides.json @@ -1,7 +1,7 @@ { "id": "GoogleSlides", "label": "Google Slides", - "version": "3.0.2", + "version": "3.1.0", "description": "Arcade.dev LLM tools for Google Slides", "metadata": { "category": "productivity", @@ -26,7 +26,7 @@ { "name": "CommentOnPresentation", "qualifiedName": "GoogleSlides.CommentOnPresentation", - "fullyQualifiedName": "GoogleSlides.CommentOnPresentation@3.0.2", + "fullyQualifiedName": "GoogleSlides.CommentOnPresentation@3.1.0", "description": "Add a comment to a presentation, or reply within an existing comment thread.\n\nComments are file-level, not anchored to a slide; to reference a slide, name it in\nthe text. Pass reply_to_comment_id to post within that thread instead of starting a\nnew comment.", "parameters": [ { @@ -119,7 +119,7 @@ { "name": "CreateOrEditPresentation", "qualifiedName": "GoogleSlides.CreateOrEditPresentation", - "fullyQualifiedName": "GoogleSlides.CreateOrEditPresentation@3.0.2", + "fullyQualifiedName": "GoogleSlides.CreateOrEditPresentation@3.1.0", "description": "Create a deck or apply a batch of edits to one, returning created object ids,\nreplace counts, and a fresh addressable snapshot.\n\nUse this single tool for all deck construction and editing: add, delete, or restyle\nslides and elements, insert and replace text, and brand a deck in one batch. Reorder\nslides with an updateSlidesPosition request; duplicate a slide or element with a\nduplicateObject request. To set speaker notes, insertText into a slide's\nnotes_object_id (surfaced per slide in the snapshot).\n\nTo add a slide into a specific branded layout, first read the deck and consult the\nsnapshot's layout inventory: each layout reports its placeholders (type, index, and\nobject id), so you can pick a layout that already carries the title/body/other\nplaceholders you intend to fill rather than guessing which layout holds what, and\naddress a specific placeholder in placeholderIdMappings (by {type, index} or by\nlayoutPlaceholderObjectId) even when a layout repeats a type. Read the snapshot to\ndiscover the object ids later edits target.\n\nThe batch is atomic: one invalid request rejects the whole batch, so target object\nids that exist in the snapshot. Object ids you assign to new objects are validated\nbefore the batch is sent.", "parameters": [ { @@ -320,7 +320,7 @@ { "name": "CreatePresentationFromTemplate", "qualifiedName": "GoogleSlides.CreatePresentationFromTemplate", - "fullyQualifiedName": "GoogleSlides.CreatePresentationFromTemplate@3.0.2", + "fullyQualifiedName": "GoogleSlides.CreatePresentationFromTemplate@3.1.0", "description": "Derive a new on-brand deck from an existing branded deck, preserving its\nmasters, layouts, and theme, then optionally filling tokens.\n\nUse this instead of building from scratch when the user wants a deck in their\ncompany template; the new deck inherits the source's branding.", "parameters": [ { @@ -441,8 +441,8 @@ { "name": "GenerateGoogleFilePickerUrl", "qualifiedName": "GoogleSlides.GenerateGoogleFilePickerUrl", - "fullyQualifiedName": "GoogleSlides.GenerateGoogleFilePickerUrl@3.0.2", - "description": "Generate a URL where the user grants this app access to specific Drive files.\n\nUse this when a prior tool reported a file was not found or access was denied and\nthe user expects the file to exist; after the user completes the picker, retry the\nprior tool. Opens Google's first-party Drive picker, not a sign-in prompt.\n\nReturns a soft envelope: an \"unavailable\" status (not an error) means the picker is\nnot configured in this environment and will not work here, so do not retry it.", + "fullyQualifiedName": "GoogleSlides.GenerateGoogleFilePickerUrl@3.1.0", + "description": "Generate a URL where the user grants this app access to specific Drive files.\n\nCheck `status` first. \"unavailable\" is not an error: either this app already reaches\nevery presentation the connected account can open, so there is no per-file grant to\nrequest, or the picker is not configured here. Either way `reason` explains it, no URL\nexists, and a presentation that could not be read is one the account itself cannot\nopen. Do not retry it.\n\nOn \"available\", use this when a prior tool reported a file was not found or access was\ndenied and the user expects the file to exist; after the user completes the picker,\nretry the prior tool. Opens Google's first-party Drive picker, not a sign-in prompt.", "parameters": [], "auth": { "providerId": "google", @@ -484,7 +484,7 @@ { "name": "GetPresentation", "qualifiedName": "GoogleSlides.GetPresentation", - "fullyQualifiedName": "GoogleSlides.GetPresentation@3.0.2", + "fullyQualifiedName": "GoogleSlides.GetPresentation@3.1.0", "description": "Return an addressable snapshot of a deck: slide and element object ids,\nplaceholder types, text, speaker notes, and the layout and master inventory.\n\nThis is the read side of the read-edit loop: the object ids it returns are the\naddresses create_or_edit_presentation targets. Each layout in the inventory\nreports its placeholders with type, index, and object id, the identity a\ncreateSlide placeholderIdMappings entry needs (by {type, index} or by\nlayoutPlaceholderObjectId), even when a layout repeats a placeholder type.", "parameters": [ { @@ -619,7 +619,7 @@ { "name": "GetSlideThumbnail", "qualifiedName": "GoogleSlides.GetSlideThumbnail", - "fullyQualifiedName": "GoogleSlides.GetSlideThumbnail@3.0.2", + "fullyQualifiedName": "GoogleSlides.GetSlideThumbnail@3.1.0", "description": "Render one slide to an image and return its content URL, for visually\nconfirming a deck looks right before sharing.", "parameters": [ { @@ -716,7 +716,7 @@ { "name": "ListPresentationComments", "qualifiedName": "GoogleSlides.ListPresentationComments", - "fullyQualifiedName": "GoogleSlides.ListPresentationComments@3.0.2", + "fullyQualifiedName": "GoogleSlides.ListPresentationComments@3.1.0", "description": "List a page of comments and their replies on a presentation, newest first.", "parameters": [ { @@ -822,7 +822,7 @@ { "name": "ResolveComment", "qualifiedName": "GoogleSlides.ResolveComment", - "fullyQualifiedName": "GoogleSlides.ResolveComment@3.0.2", + "fullyQualifiedName": "GoogleSlides.ResolveComment@3.1.0", "description": "Close (resolve) or reopen a comment thread on a presentation.\n\nPosts an action reply on the thread, so the lifecycle change is attributed to the\nconnected account; the thread's existing comments and replies are preserved.", "parameters": [ { @@ -918,7 +918,7 @@ { "name": "SearchPresentations", "qualifiedName": "GoogleSlides.SearchPresentations", - "fullyQualifiedName": "GoogleSlides.SearchPresentations@3.0.2", + "fullyQualifiedName": "GoogleSlides.SearchPresentations@3.1.0", "description": "Search the user's Drive for presentations, newest first by default.\n\nKeyword matching is full-text: a keyword matches a deck's body content as well\nas its title, so a deck can match on words that never appear in its title. A\nkeyword search that matches nothing returns an empty list (not an error).", "parameters": [ { @@ -1107,7 +1107,7 @@ { "name": "WhoAmI", "qualifiedName": "GoogleSlides.WhoAmI", - "fullyQualifiedName": "GoogleSlides.WhoAmI@3.0.2", + "fullyQualifiedName": "GoogleSlides.WhoAmI@3.1.0", "description": "Return the connected Google account's profile (name, email, picture).", "parameters": [], "auth": { @@ -1165,6 +1165,7 @@ "import ScopePicker from \"@/app/_components/scope-picker\";" ], "subPages": [], - "generatedAt": "2026-08-06T11:47:09.089Z", - "summary": "Google Slides toolkit for Arcade provides LLM-callable tools that create, read, edit, and manage Google Slides presentations via the Google Slides and Drive APIs.\n\n## Capabilities\n\n- **Presentation creation & editing:** Create new decks from scratch or from branded templates, apply atomic batches of edits (add/delete/restyle slides and elements, insert/replace text, reorder slides, duplicate objects, set speaker notes), and inspect addressable snapshots to discover object IDs and layout inventories before targeting them.\n- **Reading & visual inspection:** Retrieve full addressable snapshots (slide/element IDs, placeholder types, text, speaker notes, layout/master inventory) and render individual slides to thumbnail images for visual confirmation.\n- **Search & discovery:** Full-text search across a user's Drive presentations (matches body content and title); returns results newest-first.\n- **Comments & collaboration:** Add top-level comments or reply within threads, list comments/replies with pagination, and resolve or reopen comment threads — all attributed to the connected account.\n- **File access & identity:** Generate a Google Drive inline file picker URL to grant access to specific files when a file is not found or access is denied; look up the connected Google account's profile (name, email, picture).\n\n## OAuth\n\nThis toolkit authenticates via **OAuth 2.0** with Google as the provider. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details, required scopes, and configuration steps.\n\n## Secrets\n\n- **`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL`** — An API key that enables the `GoogleSlides.GenerateGoogleFilePickerUrl` tool to open Google's first-party Drive file picker. This is a **Google Maps/Picker API key** with the [Google Picker API](https://developers.google.com/drive/picker/guides/overview) enabled. To obtain it:\n 1. Open the [Google Cloud Console → APIs & Services → Credentials](https://console.cloud.google.com/apis/credentials) for the same project used for your OAuth client.\n 2. Click **Create Credentials → API key**.\n 3. Enable the **Google Picker API** on the project under [APIs & Services → Library](https://console.cloud.google.com/apis/library).\n 4. Restrict the key to the Picker API (and optionally to your app's domain) to limit exposure.\n 5. Copy the key value and register it as this secret.\n If this secret is absent or invalid, `GenerateGoogleFilePickerUrl` returns an `\"unavailable\"` status rather than an error — do not retry the picker in that case.\n\nSee the [Arcade secrets guide](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets) for how to register secrets, or manage them directly at [https://api.arcade.dev/dashboard/auth/secrets](https://api.arcade.dev/dashboard/auth/secrets)." + "curationSourceHash": "b3d8f14f84f11cfab50aa2251f31e3213b2612eb819c1bac2b8979c2fb898f20", + "generatedAt": "2026-08-13T11:19:44.487Z", + "summary": "## Google Slides Toolkit\n\nThe Google Slides toolkit connects Arcade to Google Slides (and Google Drive) via the Google APIs, enabling LLMs to create, edit, read, search, and comment on presentations programmatically.\n\n## Capabilities\n\n- **Deck creation and editing:** Build presentations from scratch or apply atomic batches of edits — add/delete/restyle slides and elements, insert/replace text, reorder slides, duplicate objects, and set speaker notes — all in a single call.\n- **Template and branding workflows:** Derive new decks from existing branded templates, preserving masters, layouts, and themes; inspect layout inventories (placeholder types, indices, object IDs) before constructing slides to target the right placeholders.\n- **Reading and visual inspection:** Retrieve full addressable snapshots (object IDs, placeholder types, text, speaker notes, layout/master inventory) and render individual slide thumbnails for visual confirmation before sharing.\n- **Search and discovery:** Full-text search across a user's Drive presentations, matching body content and titles; returns results newest-first.\n- **Comments and thread management:** Add top-level comments or replies to existing threads, list paginated comments and replies, and resolve or reopen comment threads — all attributed to the connected account.\n- **Account and file access:** Retrieve the connected Google account's profile, and generate a Google Drive file picker URL to grant per-file access when a presentation is inaccessible.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via Google. See the [Arcade Google auth provider docs](https://docs.arcade.dev/en/references/auth-providers/google) for setup details.\n\n## Secrets\n\n- **`ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL`** — Controls whether the `GenerateGoogleFilePickerUrl` tool is available in this environment. This is not a credential from Google; it is an Arcade-side configuration secret that enables or disables the inline Drive picker feature. Set it to enable the picker flow that lets users grant per-file Drive access without a full re-authorization. Configure this secret in your Arcade environment via the [Arcade secrets dashboard](https://api.arcade.dev/dashboard/auth/secrets). For full details on how Arcade tool secrets work, see the [Arcade tool secrets guide](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets)." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/index.json b/toolkit-docs-generator/data/toolkits/index.json index 017e52e6a..a61065cff 100644 --- a/toolkit-docs-generator/data/toolkits/index.json +++ b/toolkit-docs-generator/data/toolkits/index.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-08-12T19:27:11.405Z", + "generatedAt": "2026-08-13T11:20:08.312Z", "version": "1.0.0", "toolkits": [ { @@ -131,7 +131,7 @@ { "id": "Confluence", "label": "Confluence", - "version": "3.0.1", + "version": "3.0.2", "category": "productivity", "type": "arcade", "toolCount": 14, @@ -365,7 +365,7 @@ { "id": "GoogleCalendar", "label": "Google Calendar", - "version": "3.5.1", + "version": "3.6.0", "category": "productivity", "type": "arcade", "toolCount": 8, @@ -383,7 +383,7 @@ { "id": "GoogleDocs", "label": "Google Docs", - "version": "8.0.0", + "version": "8.1.0", "category": "productivity", "type": "arcade", "toolCount": 13, @@ -392,7 +392,7 @@ { "id": "GoogleDrive", "label": "Google Drive", - "version": "7.0.0", + "version": "7.1.0", "category": "productivity", "type": "arcade", "toolCount": 17, @@ -464,7 +464,7 @@ { "id": "GoogleSheets", "label": "Google Sheets", - "version": "9.0.0", + "version": "9.1.0", "category": "productivity", "type": "arcade", "toolCount": 12, @@ -482,7 +482,7 @@ { "id": "GoogleSlides", "label": "Google Slides", - "version": "3.0.2", + "version": "3.1.0", "category": "productivity", "type": "arcade", "toolCount": 10, @@ -617,7 +617,7 @@ { "id": "Linear", "label": "Linear", - "version": "4.0.0", + "version": "4.3.1", "category": "productivity", "type": "arcade", "toolCount": 46, @@ -731,6 +731,15 @@ "toolCount": 25, "authType": "oauth2" }, + { + "id": "MicrosoftUsers", + "label": "Microsoft Users", + "version": "0.1.2", + "category": "productivity", + "type": "arcade", + "toolCount": 4, + "authType": "oauth2" + }, { "id": "MicrosoftWord", "label": "Microsoft Word", diff --git a/toolkit-docs-generator/data/toolkits/linear.json b/toolkit-docs-generator/data/toolkits/linear.json index ee5ced15f..3fdb030e4 100644 --- a/toolkit-docs-generator/data/toolkits/linear.json +++ b/toolkit-docs-generator/data/toolkits/linear.json @@ -1,7 +1,7 @@ { "id": "Linear", "label": "Linear", - "version": "4.0.0", + "version": "4.3.1", "description": "Arcade tools designed for LLMs to interact with Linear", "metadata": { "category": "productivity", @@ -27,7 +27,7 @@ { "name": "AddComment", "qualifiedName": "Linear.AddComment", - "fullyQualifiedName": "Linear.AddComment@4.0.0", + "fullyQualifiedName": "Linear.AddComment@4.3.1", "description": "Add a comment to an issue.", "parameters": [ { @@ -101,7 +101,7 @@ { "name": "AddProjectComment", "qualifiedName": "Linear.AddProjectComment", - "fullyQualifiedName": "Linear.AddProjectComment@4.0.0", + "fullyQualifiedName": "Linear.AddProjectComment@4.3.1", "description": "Add a comment to a project's document content.\n\nIMPORTANT: Due to Linear API limitations, comments created via the API will NOT\nappear visually anchored inline in the document (no yellow highlight on text).\nThe comment will be stored and can be retrieved via list_project_comments, but\nit will appear in the comments panel rather than inline in the document.\n\nFor true inline comments that are visually anchored to text, users should create\nthem directly in the Linear UI by selecting text and adding a comment.\n\nThe quoted_text parameter stores metadata about what text the comment references,\nwhich is useful for context even though the comment won't be visually anchored.", "parameters": [ { @@ -201,7 +201,7 @@ { "name": "AddProjectToInitiative", "qualifiedName": "Linear.AddProjectToInitiative", - "fullyQualifiedName": "Linear.AddProjectToInitiative@4.0.0", + "fullyQualifiedName": "Linear.AddProjectToInitiative@4.3.1", "description": "Link a project to an initiative.\n\nBoth initiative and project can be specified by ID or name.\nIf a name is provided, fuzzy matching is used to resolve it.", "parameters": [ { @@ -288,7 +288,7 @@ { "name": "ArchiveInitiative", "qualifiedName": "Linear.ArchiveInitiative", - "fullyQualifiedName": "Linear.ArchiveInitiative@4.0.0", + "fullyQualifiedName": "Linear.ArchiveInitiative@4.3.1", "description": "Archive an initiative.\n\nArchived initiatives are hidden from default views but can be restored.", "parameters": [ { @@ -362,7 +362,7 @@ { "name": "ArchiveIssue", "qualifiedName": "Linear.ArchiveIssue", - "fullyQualifiedName": "Linear.ArchiveIssue@4.0.0", + "fullyQualifiedName": "Linear.ArchiveIssue@4.3.1", "description": "Archive an issue.\n\nArchived issues are hidden from default views but can be restored.", "parameters": [ { @@ -423,7 +423,7 @@ { "name": "ArchiveProject", "qualifiedName": "Linear.ArchiveProject", - "fullyQualifiedName": "Linear.ArchiveProject@4.0.0", + "fullyQualifiedName": "Linear.ArchiveProject@4.3.1", "description": "Archive a project.\n\nArchived projects are hidden from default views but can be restored.", "parameters": [ { @@ -497,7 +497,7 @@ { "name": "CreateInitiative", "qualifiedName": "Linear.CreateInitiative", - "fullyQualifiedName": "Linear.CreateInitiative@4.0.0", + "fullyQualifiedName": "Linear.CreateInitiative@4.3.1", "description": "Create a new Linear initiative.\n\nInitiatives are high-level strategic goals that group related projects.", "parameters": [ { @@ -603,7 +603,7 @@ { "name": "CreateIssue", "qualifiedName": "Linear.CreateIssue", - "fullyQualifiedName": "Linear.CreateIssue@4.0.0", + "fullyQualifiedName": "Linear.CreateIssue@4.3.1", "description": "Create a new Linear issue with validation.\n\nWhen assignee is None or '@me', the issue is assigned to the authenticated user.\nAll entity references (team, assignee, labels, state, project, cycle, parent)\nare validated before creation. If an entity is not found, suggestions are\nreturned to help correct the input.", "parameters": [ { @@ -870,7 +870,7 @@ { "name": "CreateIssueRelation", "qualifiedName": "Linear.CreateIssueRelation", - "fullyQualifiedName": "Linear.CreateIssueRelation@4.0.0", + "fullyQualifiedName": "Linear.CreateIssueRelation@4.3.1", "description": "Create a relation between two issues.\n\nRelation types define the relationship from the source issue's perspective:\n- blocks: Source issue blocks the related issue\n- blockedBy: Source issue is blocked by the related issue\n- duplicate: Source issue is a duplicate of the related issue\n- related: Issues are related (bidirectional)", "parameters": [ { @@ -915,7 +915,7 @@ "secretsInfo": [], "output": { "type": "json", - "description": "Created relation details" + "description": "Relation details, including whether a new relation was created or already existed" }, "documentationChunks": [], "codeExample": { @@ -962,7 +962,7 @@ { "name": "CreateProject", "qualifiedName": "Linear.CreateProject", - "fullyQualifiedName": "Linear.CreateProject@4.0.0", + "fullyQualifiedName": "Linear.CreateProject@4.3.1", "description": "Create a new Linear project.\n\nTeam is validated before creation. If team is not found, suggestions are\nreturned to help correct the input. Lead is validated if provided.", "parameters": [ { @@ -1127,7 +1127,7 @@ { "name": "CreateProjectStatus", "qualifiedName": "Linear.CreateProjectStatus", - "fullyQualifiedName": "Linear.CreateProjectStatus@4.0.0", + "fullyQualifiedName": "Linear.CreateProjectStatus@4.3.1", "description": "Create a new project status in the Linear workspace.\n\nRequires Linear workspace admin access; without it the create fails.\n\nStatus names are unique per category: the same name may exist once per type. When a status\nwith the same name and type already exists, this returns a retryable error carrying the\nexisting status's id so it can be reused instead of duplicated. A same-named status of a\ndifferent type is allowed.", "parameters": [ { @@ -1235,7 +1235,7 @@ { "name": "CreateProjectUpdate", "qualifiedName": "Linear.CreateProjectUpdate", - "fullyQualifiedName": "Linear.CreateProjectUpdate@4.0.0", + "fullyQualifiedName": "Linear.CreateProjectUpdate@4.3.1", "description": "Create a project status update.\n\nProject updates are posts that communicate progress, blockers, or status\nchanges to stakeholders. They appear in the project's Updates tab and\ncan include a health status indicator.", "parameters": [ { @@ -1325,7 +1325,7 @@ { "name": "GetCycle", "qualifiedName": "Linear.GetCycle", - "fullyQualifiedName": "Linear.GetCycle@4.0.0", + "fullyQualifiedName": "Linear.GetCycle@4.3.1", "description": "Get detailed information about a specific Linear cycle.", "parameters": [ { @@ -1385,7 +1385,7 @@ { "name": "GetInitiative", "qualifiedName": "Linear.GetInitiative", - "fullyQualifiedName": "Linear.GetInitiative@4.0.0", + "fullyQualifiedName": "Linear.GetInitiative@4.3.1", "description": "Get detailed information about a specific Linear initiative.\n\nSupports lookup by ID or name (with fuzzy matching for name).", "parameters": [ { @@ -1487,7 +1487,7 @@ { "name": "GetInitiativeDescription", "qualifiedName": "Linear.GetInitiativeDescription", - "fullyQualifiedName": "Linear.GetInitiativeDescription@4.0.0", + "fullyQualifiedName": "Linear.GetInitiativeDescription@4.3.1", "description": "Get an initiative's full description with pagination support.\n\nUse this tool when you need the complete description of an initiative that\nwas truncated in the get_initiative response. Supports chunked reading for\nvery large descriptions.", "parameters": [ { @@ -1573,7 +1573,7 @@ { "name": "GetIssue", "qualifiedName": "Linear.GetIssue", - "fullyQualifiedName": "Linear.GetIssue@4.0.0", + "fullyQualifiedName": "Linear.GetIssue@4.3.1", "description": "Get detailed information about a specific Linear issue.\n\nAccepts either the issue UUID or the human-readable identifier (like TOO-123).", "parameters": [ { @@ -1685,7 +1685,7 @@ { "name": "GetMilestone", "qualifiedName": "Linear.GetMilestone", - "fullyQualifiedName": "Linear.GetMilestone@4.0.0", + "fullyQualifiedName": "Linear.GetMilestone@4.3.1", "description": "Get a milestone by ID or name inside a project.", "parameters": [ { @@ -1771,7 +1771,7 @@ { "name": "GetNotifications", "qualifiedName": "Linear.GetNotifications", - "fullyQualifiedName": "Linear.GetNotifications@4.0.0", + "fullyQualifiedName": "Linear.GetNotifications@4.3.1", "description": "Get the authenticated user's notifications.\n\nReturns notifications including issue mentions, comments, assignments,\nand state changes.", "parameters": [ { @@ -1857,7 +1857,7 @@ { "name": "GetProject", "qualifiedName": "Linear.GetProject", - "fullyQualifiedName": "Linear.GetProject@4.0.0", + "fullyQualifiedName": "Linear.GetProject@4.3.1", "description": "Get detailed information about a specific Linear project.\n\nSupports lookup by ID, slug_id, or name (with fuzzy matching for name).", "parameters": [ { @@ -1973,7 +1973,7 @@ { "name": "GetProjectDescription", "qualifiedName": "Linear.GetProjectDescription", - "fullyQualifiedName": "Linear.GetProjectDescription@4.0.0", + "fullyQualifiedName": "Linear.GetProjectDescription@4.3.1", "description": "Get a project's full description with pagination support.\n\nUse this tool when you need the complete description of a project that\nwas truncated in the get_project response. Supports chunked reading for\nvery large descriptions.", "parameters": [ { @@ -2059,7 +2059,7 @@ { "name": "GetRecentActivity", "qualifiedName": "Linear.GetRecentActivity", - "fullyQualifiedName": "Linear.GetRecentActivity@4.0.0", + "fullyQualifiedName": "Linear.GetRecentActivity@4.3.1", "description": "Get the authenticated user's recent issue activity.\n\nReturns issues the user has recently created or been assigned to\nwithin the specified time period.", "parameters": [ { @@ -2132,7 +2132,7 @@ { "name": "GetTeam", "qualifiedName": "Linear.GetTeam", - "fullyQualifiedName": "Linear.GetTeam@4.0.0", + "fullyQualifiedName": "Linear.GetTeam@4.3.1", "description": "Get detailed information about a specific Linear team.\n\nSupports lookup by ID, key (like TOO, ENG), or name (with fuzzy matching).", "parameters": [ { @@ -2222,7 +2222,7 @@ { "name": "LinkGithubToIssue", "qualifiedName": "Linear.LinkGithubToIssue", - "fullyQualifiedName": "Linear.LinkGithubToIssue@4.0.0", + "fullyQualifiedName": "Linear.LinkGithubToIssue@4.3.1", "description": "Link a GitHub PR, commit, or issue to a Linear issue.\n\nAutomatically detects the artifact type from the URL and generates\nan appropriate title if not provided.", "parameters": [ { @@ -2309,7 +2309,7 @@ { "name": "ListAvailableProjectStatuses", "qualifiedName": "Linear.ListAvailableProjectStatuses", - "fullyQualifiedName": "Linear.ListAvailableProjectStatuses@4.0.0", + "fullyQualifiedName": "Linear.ListAvailableProjectStatuses@4.3.1", "description": "List the project statuses a project can be put in, in the Linear workspace.\n\nIncludes custom statuses, not just the built-in categories, so the exact name, id, and\ntype of each status can be discovered before filtering projects by status or assigning a\nstatus to a project. Returned in lifecycle order (backlog → planned → started → paused →\ncompleted → canceled), then by position within each category. Project statuses are a small\nworkspace-level vocabulary and the whole set is returned in one call (no pagination).", "parameters": [ { @@ -2376,7 +2376,7 @@ { "name": "ListComments", "qualifiedName": "Linear.ListComments", - "fullyQualifiedName": "Linear.ListComments@4.0.0", + "fullyQualifiedName": "Linear.ListComments@4.3.1", "description": "List comments on an issue.\n\nReturns comments with user info, timestamps, and reply threading info.", "parameters": [ { @@ -2462,7 +2462,7 @@ { "name": "ListCycles", "qualifiedName": "Linear.ListCycles", - "fullyQualifiedName": "Linear.ListCycles@4.0.0", + "fullyQualifiedName": "Linear.ListCycles@4.3.1", "description": "List Linear cycles, optionally filtered by team and status.\n\nCycles are time-boxed iterations (like sprints) for organizing work.", "parameters": [ { @@ -2574,7 +2574,7 @@ { "name": "ListInitiatives", "qualifiedName": "Linear.ListInitiatives", - "fullyQualifiedName": "Linear.ListInitiatives@4.0.0", + "fullyQualifiedName": "Linear.ListInitiatives@4.3.1", "description": "List Linear initiatives, optionally filtered by keywords and other criteria.\n\nReturns all initiatives when no filters provided, or filtered results when\nkeywords or other filters are specified.", "parameters": [ { @@ -2680,7 +2680,7 @@ { "name": "ListIssues", "qualifiedName": "Linear.ListIssues", - "fullyQualifiedName": "Linear.ListIssues@4.0.0", + "fullyQualifiedName": "Linear.ListIssues@4.3.1", "description": "List Linear issues, optionally filtered by keywords and other criteria.\n\nReturns all issues when no filters provided, or filtered results when\nkeywords or other filters are specified.", "parameters": [ { @@ -2863,14 +2863,22 @@ { "name": "ListLabels", "qualifiedName": "Linear.ListLabels", - "fullyQualifiedName": "Linear.ListLabels@4.0.0", + "fullyQualifiedName": "Linear.ListLabels@4.3.1", "description": "List available issue labels in the workspace.\n\nReturns labels that can be applied to issues. Use label IDs or names\nwhen creating or updating issues.", "parameters": [ { "name": "limit", "type": "integer", "required": false, - "description": "Maximum number of labels to return. Min 1, max 100. Default is 50.", + "description": "Maximum number of labels to return. Min 1, max 50. Default is 20.", + "enum": null, + "inferrable": true + }, + { + "name": "end_cursor", + "type": "string", + "required": false, + "description": "Cursor for pagination. Use 'end_cursor' from previous response. Default is None.", "enum": null, "inferrable": true } @@ -2896,6 +2904,11 @@ "value": 25, "type": "integer", "required": false + }, + "end_cursor": { + "value": "eyJpZCI6ImFiYzEyMyIsInYiOiIxNjk4NzY1NDMyMTAwIn0=", + "type": "string", + "required": false } }, "requiresAuth": true, @@ -2923,7 +2936,7 @@ { "name": "ListMilestones", "qualifiedName": "Linear.ListMilestones", - "fullyQualifiedName": "Linear.ListMilestones@4.0.0", + "fullyQualifiedName": "Linear.ListMilestones@4.3.1", "description": "List milestones in a Linear project.", "parameters": [ { @@ -3022,7 +3035,7 @@ { "name": "ListProjectComments", "qualifiedName": "Linear.ListProjectComments", - "fullyQualifiedName": "Linear.ListProjectComments@4.0.0", + "fullyQualifiedName": "Linear.ListProjectComments@4.3.1", "description": "List comments on a project's document content.\n\nReturns comments with user info, timestamps, quoted text for inline comments,\nand reply threading info. Replies are nested under their parent comments.\n\nUse comment_filter to control which comments are returned:\n- only_quoted (default): Only comments attached to a quote in the text\n- only_unquoted: Only comments not attached to a particular quote\n- all: All comments regardless of being attached to a quote or not", "parameters": [ { @@ -3151,7 +3164,7 @@ { "name": "ListProjects", "qualifiedName": "Linear.ListProjects", - "fullyQualifiedName": "Linear.ListProjects@4.0.0", + "fullyQualifiedName": "Linear.ListProjects@4.3.1", "description": "List Linear projects, optionally filtered by keywords, status, team, or creation date.\n\nWith no filters this returns projects up to the page limit (default 20, max 50). Narrow by a\nspecific status with ``status`` (a status name or id), or by a whole category with\n``status_type``; the two are mutually exclusive. Each returned project includes its id, name,\nstatus, teams, and progress.", "parameters": [ { @@ -3296,7 +3309,7 @@ { "name": "ListProjectUpdates", "qualifiedName": "Linear.ListProjectUpdates", - "fullyQualifiedName": "Linear.ListProjectUpdates@4.0.0", + "fullyQualifiedName": "Linear.ListProjectUpdates@4.3.1", "description": "List a Linear project's status updates. Returns newest first.", "parameters": [ { @@ -3395,7 +3408,7 @@ { "name": "ListTeams", "qualifiedName": "Linear.ListTeams", - "fullyQualifiedName": "Linear.ListTeams@4.0.0", + "fullyQualifiedName": "Linear.ListTeams@4.3.1", "description": "List Linear teams, optionally filtered by keywords and other criteria.\n\nReturns all teams when no filters provided, or filtered results when\nkeywords or other filters are specified.", "parameters": [ { @@ -3507,7 +3520,7 @@ { "name": "ListWorkflowStates", "qualifiedName": "Linear.ListWorkflowStates", - "fullyQualifiedName": "Linear.ListWorkflowStates@4.0.0", + "fullyQualifiedName": "Linear.ListWorkflowStates@4.3.1", "description": "List available workflow states in the workspace.\n\nReturns workflow states that can be used for issue transitions.\nStates are team-specific and have different types.", "parameters": [ { @@ -3537,7 +3550,15 @@ "name": "limit", "type": "integer", "required": false, - "description": "Maximum number of states to return. Min 1, max 100. Default is 50.", + "description": "Maximum number of states to return. Min 1, max 50. Default is 20.", + "enum": null, + "inferrable": true + }, + { + "name": "end_cursor", + "type": "string", + "required": false, + "description": "Cursor for pagination. Use 'end_cursor' from previous response. Default is None.", "enum": null, "inferrable": true } @@ -3573,6 +3594,11 @@ "value": 25, "type": "integer", "required": false + }, + "end_cursor": { + "value": "eyJpZCI6ImFiYzEyMyIsInYiOjF9", + "type": "string", + "required": false } }, "requiresAuth": true, @@ -3600,7 +3626,7 @@ { "name": "ManageIssueSubscription", "qualifiedName": "Linear.ManageIssueSubscription", - "fullyQualifiedName": "Linear.ManageIssueSubscription@4.0.0", + "fullyQualifiedName": "Linear.ManageIssueSubscription@4.3.1", "description": "Subscribe to or unsubscribe from an issue's notifications.", "parameters": [ { @@ -3674,7 +3700,7 @@ { "name": "ReplyToComment", "qualifiedName": "Linear.ReplyToComment", - "fullyQualifiedName": "Linear.ReplyToComment@4.0.0", + "fullyQualifiedName": "Linear.ReplyToComment@4.3.1", "description": "Reply to an existing comment on an issue.\n\nCreates a threaded reply to the specified parent comment.", "parameters": [ { @@ -3761,7 +3787,7 @@ { "name": "ReplyToProjectComment", "qualifiedName": "Linear.ReplyToProjectComment", - "fullyQualifiedName": "Linear.ReplyToProjectComment@4.0.0", + "fullyQualifiedName": "Linear.ReplyToProjectComment@4.3.1", "description": "Reply to an existing comment on a project document.\n\nCreates a threaded reply to the specified parent comment.", "parameters": [ { @@ -3861,7 +3887,7 @@ { "name": "ResolveComment", "qualifiedName": "Linear.ResolveComment", - "fullyQualifiedName": "Linear.ResolveComment@4.0.0", + "fullyQualifiedName": "Linear.ResolveComment@4.3.1", "description": "Resolve or reopen a Linear comment thread by its id.\n\nWorks for any comment regardless of what it is anchored to — issue comments, project\ncomments, and comments anchored to a project description alike. Resolving a comment that\nis already resolved (or reopening one already open) succeeds without making a change; in\nthat no-op case a supplied resolving_comment_id is not applied, since the thread's\nexisting resolution is left untouched.\n\nIMPORTANT: Linear's API updates the comment record but not the inline-comment mark stored\nin a project description. For comments anchored to project-description text, resolving may\nnot appear until the Linear view is reopened, while reopening may leave the comment hidden\nin Linear's UI until it is reopened manually there. The returned resolution state and\nsubsequent API reads remain authoritative.", "parameters": [ { @@ -3951,7 +3977,7 @@ { "name": "TransitionIssueState", "qualifiedName": "Linear.TransitionIssueState", - "fullyQualifiedName": "Linear.TransitionIssueState@4.0.0", + "fullyQualifiedName": "Linear.TransitionIssueState@4.3.1", "description": "Transition a Linear issue to a new workflow state.\n\nThe target state is validated against the team's available states.", "parameters": [ { @@ -4038,7 +4064,7 @@ { "name": "UpdateComment", "qualifiedName": "Linear.UpdateComment", - "fullyQualifiedName": "Linear.UpdateComment@4.0.0", + "fullyQualifiedName": "Linear.UpdateComment@4.3.1", "description": "Update an existing comment.", "parameters": [ { @@ -4111,7 +4137,7 @@ { "name": "UpdateInitiative", "qualifiedName": "Linear.UpdateInitiative", - "fullyQualifiedName": "Linear.UpdateInitiative@4.0.0", + "fullyQualifiedName": "Linear.UpdateInitiative@4.3.1", "description": "Update a Linear initiative with partial updates.\n\nOnly fields that are explicitly provided will be updated.", "parameters": [ { @@ -4230,7 +4256,7 @@ { "name": "UpdateIssue", "qualifiedName": "Linear.UpdateIssue", - "fullyQualifiedName": "Linear.UpdateIssue@4.0.0", + "fullyQualifiedName": "Linear.UpdateIssue@4.3.1", "description": "Update a Linear issue with partial updates.\n\nOnly fields that are explicitly provided will be updated. All entity\nreferences are validated before update.", "parameters": [ { @@ -4512,7 +4538,7 @@ { "name": "UpdateProject", "qualifiedName": "Linear.UpdateProject", - "fullyQualifiedName": "Linear.UpdateProject@4.0.0", + "fullyQualifiedName": "Linear.UpdateProject@4.3.1", "description": "Update a Linear project with partial updates.\n\nOnly fields that are explicitly provided will be updated. All entity\nreferences are validated before update.\n\nIMPORTANT: Updating the 'content' field will break any existing inline\ncomment anchoring. The comments will still exist and be retrievable via\nlist_project_comments, but they will no longer appear visually anchored\nto text in the Linear UI. The 'description' field can be safely updated\nwithout affecting inline comments.", "parameters": [ { @@ -4711,7 +4737,7 @@ { "name": "UpsertMilestone", "qualifiedName": "Linear.UpsertMilestone", - "fullyQualifiedName": "Linear.UpsertMilestone@4.0.0", + "fullyQualifiedName": "Linear.UpsertMilestone@4.3.1", "description": "Upsert a project's milestone.", "parameters": [ { @@ -4838,7 +4864,7 @@ { "name": "WhoAmI", "qualifiedName": "Linear.WhoAmI", - "fullyQualifiedName": "Linear.WhoAmI@4.0.0", + "fullyQualifiedName": "Linear.WhoAmI@4.3.1", "description": "Get the authenticated user's profile and team memberships.\n\nReturns the current user's information including their name, email,\norganization, and the teams they belong to.", "parameters": [], "auth": { @@ -4892,6 +4918,7 @@ ], "customImports": [], "subPages": [], - "generatedAt": "2026-08-10T11:25:46.258Z", - "summary": "Linear is a project management platform for software teams. This toolkit lets LLMs interact with Linear workspaces — managing issues, projects, initiatives, cycles, milestones, comments, and team workflows via the Linear API.\n\n## Capabilities\n\n- **Issue lifecycle**: Create, read, update, archive, and transition issues through workflow states; manage labels, assignees, parent/child relationships, inter-issue relations (blocks, duplicates, related), cycle membership, and GitHub PR/commit/issue links.\n- **Projects & milestones**: Create, retrieve, update, archive, and list projects with status filtering; upsert milestones; post and list project status updates; manage project descriptions (with pagination for large content).\n- **Initiatives**: Create, retrieve, update, archive, and list strategic initiatives; link projects to initiatives; fetch full paginated descriptions.\n- **Comments & threads**: Add, update, resolve/reopen, and reply to comments on issues and project documents; list comments with threading and quote metadata; note that API-created project comments appear in the comments panel only — true inline anchoring requires the Linear UI.\n- **Teams, cycles & workspace metadata**: List and inspect teams, workflow states, issue labels, cycles, and available project statuses; look up entities by ID, key, or fuzzy name matching.\n- **User context**: Retrieve the authenticated user's profile, team memberships, recent activity, and notifications; subscribe to or unsubscribe from issue notifications.\n\n## OAuth\n\nAuthentication uses OAuth 2.0 via the **Linear** provider. See the [Linear auth provider docs](https://docs.arcade.dev/en/references/auth-providers/linear) for setup details." + "curationSourceHash": "3dbc4f7bd59d0fef5426882adc94d0f50f571dcee8c12f3fa5b651b4b7df2625", + "generatedAt": "2026-08-13T11:19:54.143Z", + "summary": "## Linear Toolkit\n\nThe Linear toolkit lets LLMs interact with Linear's project management platform through Arcade, covering the full lifecycle of issues, projects, initiatives, cycles, milestones, comments, and teams.\n\n## Capabilities\n\n- **Issue management:** Create, update, archive, and transition issues through workflow states; manage labels, relations (blocks/blocked-by/duplicate/related), GitHub PR/commit links, and issue subscriptions.\n- **Project & initiative management:** Create, update, archive, and track projects and initiatives; link projects to initiatives; manage project statuses (including custom workspace statuses), content updates, and progress posts.\n- **Cycles & milestones:** List and inspect time-boxed cycles; upsert and retrieve milestones within projects.\n- **Comments & threads:** Add, update, reply to, and resolve comment threads on issues and project documents; list comments with threading and quote metadata (note: inline visual anchoring in project documents is a Linear UI-only feature — API-created comments appear in the comments panel).\n- **Workspace discovery:** List and query teams, workflow states, labels, available project statuses, and initiatives; look up entities by ID, key, or name with fuzzy matching.\n- **User context & activity:** Retrieve the authenticated user's profile, team memberships, recent issue activity, and notifications.\n\n## OAuth\n\nThis toolkit authenticates via OAuth 2.0 with **Linear** as the provider. See the [Linear auth provider docs](https://docs.arcade.dev/en/references/auth-providers/linear) for setup details." } \ No newline at end of file diff --git a/toolkit-docs-generator/data/toolkits/microsoftusers.json b/toolkit-docs-generator/data/toolkits/microsoftusers.json new file mode 100644 index 000000000..5dbfa22b6 --- /dev/null +++ b/toolkit-docs-generator/data/toolkits/microsoftusers.json @@ -0,0 +1,280 @@ +{ + "id": "MicrosoftUsers", + "label": "Microsoft Users", + "version": "0.1.2", + "description": "Arcade.dev LLM tools for Microsoft Graph user profiles and organizational hierarchy", + "metadata": { + "category": "productivity", + "iconUrl": "https://design-system.arcade.dev/icons/microsoft.svg", + "isBYOC": false, + "isPro": false, + "type": "arcade", + "docsLink": "https://docs.arcade.dev/en/resources/integrations/productivity/microsoft-users", + "isComingSoon": false, + "isHidden": false + }, + "auth": { + "type": "oauth2", + "providerId": "microsoft", + "allScopes": [ + "User.Read", + "User.Read.All" + ] + }, + "tools": [ + { + "name": "GetDirectReports", + "qualifiedName": "MicrosoftUsers.GetDirectReports", + "fullyQualifiedName": "MicrosoftUsers.GetDirectReports@0.1.2", + "description": "Get a user's direct reports from the organizational hierarchy.\n\nReturns a paginated list of users and organizational contacts who report\ndirectly to the specified user.\n\nRequires a Microsoft 365 work or school account. Not available for\npersonal Microsoft accounts (outlook.com, hotmail.com, live.com).", + "parameters": [ + { + "name": "user_identifier", + "type": "string", + "required": true, + "description": "The user's email address, UPN, or Microsoft user ID.", + "enum": null, + "inferrable": true + }, + { + "name": "limit", + "type": "integer", + "required": false, + "description": "Maximum number of direct reports to return per page.", + "enum": null, + "inferrable": true + }, + { + "name": "pagination_token", + "type": "string", + "required": false, + "description": "Token from a previous response to get the next page of results.", + "enum": null, + "inferrable": true + } + ], + "auth": { + "providerId": "microsoft", + "providerType": "oauth2", + "scopes": [ + "User.Read.All" + ] + }, + "secrets": [], + "secretsInfo": [], + "output": { + "type": "json", + "description": "List of the user's direct reports with their profiles" + }, + "documentationChunks": [], + "codeExample": { + "toolName": "MicrosoftUsers.GetDirectReports", + "parameters": { + "user_identifier": { + "value": "jane.doe@contoso.com", + "type": "string", + "required": true + }, + "limit": { + "value": 25, + "type": "integer", + "required": false + }, + "pagination_token": { + "value": "eyJza2lwVG9rZW4iOiIrUkVJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0ifQ==", + "type": "string", + "required": false + } + }, + "requiresAuth": true, + "authProvider": "microsoft", + "tabLabel": "Call the Tool with User Authorization" + }, + "metadata": { + "classification": { + "serviceDomains": [] + }, + "behavior": { + "operations": [ + "read" + ], + "readOnly": true, + "destructive": false, + "idempotent": true, + "openWorld": true + }, + "extras": null + } + }, + { + "name": "GetUserManager", + "qualifiedName": "MicrosoftUsers.GetUserManager", + "fullyQualifiedName": "MicrosoftUsers.GetUserManager@0.1.2", + "description": "Get a user's direct manager from the organizational hierarchy.\n\nReturns the manager's profile data. If the user has no manager (e.g.,\ntop-level executives), returns a response indicating no manager was found.\n\nRequires a Microsoft 365 work or school account. Not available for\npersonal Microsoft accounts (outlook.com, hotmail.com, live.com).", + "parameters": [ + { + "name": "user_identifier", + "type": "string", + "required": true, + "description": "The user's email address, UPN, or Microsoft user ID. Use the email address from a calendar attendee or email participant.", + "enum": null, + "inferrable": true + } + ], + "auth": { + "providerId": "microsoft", + "providerType": "oauth2", + "scopes": [ + "User.Read.All" + ] + }, + "secrets": [], + "secretsInfo": [], + "output": { + "type": "json", + "description": "The manager's profile including name, job title, department, and contact info" + }, + "documentationChunks": [], + "codeExample": { + "toolName": "MicrosoftUsers.GetUserManager", + "parameters": { + "user_identifier": { + "value": "jane.doe@contoso.com", + "type": "string", + "required": true + } + }, + "requiresAuth": true, + "authProvider": "microsoft", + "tabLabel": "Call the Tool with User Authorization" + }, + "metadata": { + "classification": { + "serviceDomains": [] + }, + "behavior": { + "operations": [ + "read" + ], + "readOnly": true, + "destructive": false, + "idempotent": true, + "openWorld": true + }, + "extras": null + } + }, + { + "name": "GetUserProfile", + "qualifiedName": "MicrosoftUsers.GetUserProfile", + "fullyQualifiedName": "MicrosoftUsers.GetUserProfile@0.1.2", + "description": "Look up one or more users by email address, UPN, or user ID.\n\nAccepts a list of identifiers and automatically optimizes between single\nand batch Graph API calls. Use this to enrich calendar attendees or email\nparticipants with job titles, departments, and org data.\n\nRequires a Microsoft 365 work or school account. Not available for\npersonal Microsoft accounts (outlook.com, hotmail.com, live.com).", + "parameters": [ + { + "name": "user_identifiers", + "type": "array", + "innerType": "string", + "required": true, + "description": "One or more email addresses, user principal names (UPNs), or Microsoft user IDs to look up. Email address is the most common identifier — use it when enriching calendar attendees or email participants. Max 20 per call.", + "enum": null, + "inferrable": true + } + ], + "auth": { + "providerId": "microsoft", + "providerType": "oauth2", + "scopes": [ + "User.Read.All" + ] + }, + "secrets": [], + "secretsInfo": [], + "output": { + "type": "json", + "description": "Profiles for each resolved user, plus any identifiers that could not be found" + }, + "documentationChunks": [], + "codeExample": { + "toolName": "MicrosoftUsers.GetUserProfile", + "parameters": { + "user_identifiers": { + "value": [ + "jane.doe@contoso.com", + "john.smith@fabrikam.org", + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ], + "type": "array", + "required": true + } + }, + "requiresAuth": true, + "authProvider": "microsoft", + "tabLabel": "Call the Tool with User Authorization" + }, + "metadata": { + "classification": { + "serviceDomains": [] + }, + "behavior": { + "operations": [ + "read" + ], + "readOnly": true, + "destructive": false, + "idempotent": true, + "openWorld": true + }, + "extras": null + } + }, + { + "name": "WhoAmI", + "qualifiedName": "MicrosoftUsers.WhoAmI", + "fullyQualifiedName": "MicrosoftUsers.WhoAmI@0.1.2", + "description": "Get information about the current user including name, email, job title,\ndepartment, office location, and tenant domain.", + "parameters": [], + "auth": { + "providerId": "microsoft", + "providerType": "oauth2", + "scopes": [ + "User.Read" + ] + }, + "secrets": [], + "secretsInfo": [], + "output": { + "type": "json", + "description": "Get comprehensive user profile information for the signed-in user." + }, + "documentationChunks": [], + "codeExample": { + "toolName": "MicrosoftUsers.WhoAmI", + "parameters": {}, + "requiresAuth": true, + "authProvider": "microsoft", + "tabLabel": "Call the Tool with User Authorization" + }, + "metadata": { + "classification": { + "serviceDomains": [] + }, + "behavior": { + "operations": [ + "read" + ], + "readOnly": true, + "destructive": false, + "idempotent": true, + "openWorld": true + }, + "extras": null + } + } + ], + "documentationChunks": [], + "customImports": [], + "subPages": [], + "curationSourceHash": "da70ed30d9201488046d1ae1b04dc45cf6378210501e24b53236a4aa02f1ef89", + "generatedAt": "2026-08-13T11:19:52.988Z", + "summary": "## Microsoft Users Toolkit\n\nProvides LLM tools for querying Microsoft Graph user profiles and organizational hierarchy. Enables agents to look up user details, resolve org relationships, and enrich workplace data within a Microsoft 365 tenant.\n\n## Capabilities\n\n- **Profile lookup**: Retrieve full profile data (name, email, job title, department, office location, tenant domain) for the authenticated user or one/more other users identified by email, UPN, or user ID — with automatic single vs. batch Graph API optimization.\n- **Organizational hierarchy**: Traverse reporting structures by fetching a user's direct reports (paginated) or their direct manager; gracefully handles top-level executives with no manager.\n- **Self-identification**: Dedicated tool for agents to determine who the currently authenticated user is, useful for scoping downstream actions.\n- **Microsoft 365 accounts only**: All tools require a work or school account; personal Microsoft accounts (outlook.com, hotmail.com, live.com) are not supported.\n\n## OAuth\n\nThis toolkit authenticates via OAuth 2.0 using the **Microsoft** provider. See the [Arcade Microsoft auth provider docs](https://docs.arcade.dev/en/references/auth-providers/microsoft) for setup details." +} \ No newline at end of file