Compare commits

..

4 Commits

Author SHA1 Message Date
waleed
961649565a updated to account for workflow input tool on top of just workflow as well 2026-01-14 15:26:48 -08:00
waleed
1b38b2e6cd ack comments 2026-01-14 14:02:02 -08:00
waleed
db9f9ec4e5 FF react grab 2026-01-14 13:03:10 -08:00
waleed
0a860b3e01 fix(agent-tools): added special handling for workflow tool in agent tool input, added react grab 2026-01-14 12:56:55 -08:00
134 changed files with 1228 additions and 18280 deletions

View File

@@ -351,16 +351,14 @@ Enables AI-assisted field generation.
## Tools Configuration
**Preferred:** Use tool names directly as dropdown option IDs to avoid switch cases:
### Simple Tool Selector
```typescript
// Dropdown options use tool IDs directly
options: [
{ label: 'Create', id: 'service_create' },
{ label: 'Read', id: 'service_read' },
]
// Tool selector just returns the operation value
tool: (params) => params.operation,
tools: {
access: ['service_create', 'service_read', 'service_update'],
config: {
tool: (params) => `service_${params.operation}`,
},
}
```
### With Parameter Transformation
@@ -579,17 +577,6 @@ export const ServiceBlock: BlockConfig = {
See the `/add-trigger` skill for creating triggers.
## Icon Requirement
If the icon doesn't already exist in `@/components/icons.tsx`, **do NOT search for it yourself**. After completing the block, ask the user to provide the SVG:
```
The block is complete, but I need an icon for {Service}.
Please provide the SVG and I'll convert it to a React component.
You can usually find this in the service's brand/press kit page, or copy it from their website.
```
## Checklist Before Finishing
- [ ] All subBlocks have `id`, `title` (except switch), and `type`
@@ -601,5 +588,4 @@ You can usually find this in the service's brand/press kit page, or copy it from
- [ ] Tools.config.tool returns correct tool ID
- [ ] Outputs match tool outputs
- [ ] Block registered in registry.ts
- [ ] If icon missing: asked user to provide SVG
- [ ] If triggers exist: `triggers` config set, trigger subBlocks spread

View File

@@ -226,26 +226,17 @@ export function {Service}Icon(props: SVGProps<SVGSVGElement>) {
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
{/* SVG paths from user-provided SVG */}
{/* SVG paths from brand assets */}
</svg>
)
}
```
### Getting Icons
**Do NOT search for icons yourself.** At the end of implementation, ask the user to provide the SVG:
```
I've completed the integration. Before I can add the icon, please provide the SVG for {Service}.
You can usually find this in the service's brand/press kit page, or copy it from their website.
Paste the SVG code here and I'll convert it to a React component.
```
Once the user provides the SVG:
1. Extract the SVG paths/content
2. Create a React component that spreads props
3. Ensure viewBox is preserved from the original SVG
### Finding Icons
1. Check the service's brand/press kit page
2. Download SVG logo
3. Convert to React component
4. Ensure it accepts and spreads props
## Step 5: Create Triggers (Optional)
@@ -414,7 +405,6 @@ If creating V2 versions (API-aligned outputs):
- [ ] If triggers: spread trigger subBlocks with `getTrigger()`
### Icon
- [ ] Asked user to provide SVG
- [ ] Added icon to `components/icons.tsx`
- [ ] Icon spreads props correctly
@@ -443,18 +433,11 @@ You: I'll add the Stripe integration. Let me:
1. First, research the Stripe API using Context7
2. Create the tools for key operations (payments, subscriptions, etc.)
3. Create the block with operation dropdown
4. Register everything
5. Generate docs
6. Ask you for the Stripe icon SVG
4. Add the Stripe icon
5. Register everything
6. Generate docs
[Proceed with implementation...]
[After completing steps 1-5...]
I've completed the Stripe integration. Before I can add the icon, please provide the SVG for Stripe.
You can usually find this in the service's brand/press kit page, or copy it from their website.
Paste the SVG code here and I'll convert it to a React component.
```
## Common Gotchas

File diff suppressed because one or more lines are too long

View File

@@ -55,7 +55,6 @@ import {
JiraIcon,
JiraServiceManagementIcon,
KalshiIcon,
LangsmithIcon,
LemlistIcon,
LinearIcon,
LinkedInIcon,
@@ -181,7 +180,6 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
jira_service_management: JiraServiceManagementIcon,
kalshi: KalshiIcon,
knowledge: PackageSearchIcon,
langsmith: LangsmithIcon,
lemlist: LemlistIcon,
linear: LinearIcon,
linkedin: LinkedInIcon,
@@ -233,6 +231,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
supabase: SupabaseIcon,
tavily: TavilyIcon,
telegram: TelegramIcon,
thinking: BrainIcon,
tinybird: TinybirdIcon,
translate: TranslateIcon,
trello: TrelloIcon,

View File

@@ -72,13 +72,6 @@ Get a list of backlinks pointing to a target domain or URL. Returns details abou
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `backlinks` | array | List of backlinks pointing to the target |
| ↳ `urlFrom` | string | The URL of the page containing the backlink |
| ↳ `urlTo` | string | The URL being linked to |
| ↳ `anchor` | string | The anchor text of the link |
| ↳ `domainRatingSource` | number | Domain Rating of the linking domain |
| ↳ `isDofollow` | boolean | Whether the link is dofollow |
| ↳ `firstSeen` | string | When the backlink was first discovered |
| ↳ `lastVisited` | string | When the backlink was last checked |
### `ahrefs_backlinks_stats`
@@ -98,12 +91,6 @@ Get backlink statistics for a target domain or URL. Returns totals for different
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `stats` | object | Backlink statistics summary |
| ↳ `total` | number | Total number of live backlinks |
| ↳ `dofollow` | number | Number of dofollow backlinks |
| ↳ `nofollow` | number | Number of nofollow backlinks |
| ↳ `text` | number | Number of text backlinks |
| ↳ `image` | number | Number of image backlinks |
| ↳ `redirect` | number | Number of redirect backlinks |
### `ahrefs_referring_domains`
@@ -125,12 +112,6 @@ Get a list of domains that link to a target domain or URL. Returns unique referr
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `referringDomains` | array | List of domains linking to the target |
| ↳ `domain` | string | The referring domain |
| ↳ `domainRating` | number | Domain Rating of the referring domain |
| ↳ `backlinks` | number | Total number of backlinks from this domain |
| ↳ `dofollowBacklinks` | number | Number of dofollow backlinks from this domain |
| ↳ `firstSeen` | string | When the domain was first seen linking |
| ↳ `lastVisited` | string | When the domain was last checked |
### `ahrefs_organic_keywords`
@@ -153,12 +134,6 @@ Get organic keywords that a target domain or URL ranks for in Google search resu
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `keywords` | array | List of organic keywords the target ranks for |
| ↳ `keyword` | string | The keyword |
| ↳ `volume` | number | Monthly search volume |
| ↳ `position` | number | Current ranking position |
| ↳ `url` | string | The URL that ranks for this keyword |
| ↳ `traffic` | number | Estimated monthly organic traffic |
| ↳ `keywordDifficulty` | number | Keyword difficulty score \(0-100\) |
### `ahrefs_top_pages`
@@ -182,11 +157,6 @@ Get the top pages of a target domain sorted by organic traffic. Returns page URL
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pages` | array | List of top pages by organic traffic |
| ↳ `url` | string | The page URL |
| ↳ `traffic` | number | Estimated monthly organic traffic |
| ↳ `keywords` | number | Number of keywords the page ranks for |
| ↳ `topKeyword` | string | The top keyword driving traffic to this page |
| ↳ `value` | number | Estimated traffic value in USD |
### `ahrefs_keyword_overview`
@@ -205,14 +175,6 @@ Get detailed metrics for a keyword including search volume, keyword difficulty,
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `overview` | object | Keyword metrics overview |
| ↳ `keyword` | string | The analyzed keyword |
| ↳ `searchVolume` | number | Monthly search volume |
| ↳ `keywordDifficulty` | number | Keyword difficulty score \(0-100\) |
| ↳ `cpc` | number | Cost per click in USD |
| ↳ `clicks` | number | Estimated clicks per month |
| ↳ `clicksPercentage` | number | Percentage of searches that result in clicks |
| ↳ `parentTopic` | string | The parent topic for this keyword |
| ↳ `trafficPotential` | number | Estimated traffic potential if ranking #1 |
### `ahrefs_broken_backlinks`
@@ -234,10 +196,5 @@ Get a list of broken backlinks pointing to a target domain or URL. Useful for id
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `brokenBacklinks` | array | List of broken backlinks |
| ↳ `urlFrom` | string | The URL of the page containing the broken link |
| ↳ `urlTo` | string | The broken URL being linked to |
| ↳ `httpCode` | number | HTTP status code \(e.g., 404, 410\) |
| ↳ `anchor` | string | The anchor text of the link |
| ↳ `domainRatingSource` | number | Domain Rating of the linking domain |

View File

@@ -50,7 +50,6 @@ Read records from an Airtable table
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Array of retrieved Airtable records |
| `metadata` | json | Operation metadata including pagination offset and total records count |
### `airtable_get_record`
@@ -89,7 +88,6 @@ Write new records to an Airtable table
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Array of created Airtable records |
| `metadata` | json | Operation metadata |
### `airtable_update_record`
@@ -128,6 +126,5 @@ Update multiple existing records in an Airtable table
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `records` | json | Array of updated Airtable records |
| `metadata` | json | Operation metadata including record count and updated record IDs |

View File

@@ -52,7 +52,6 @@ Search for academic papers on ArXiv by keywords, authors, titles, or other field
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `papers` | json | Array of papers matching the search query |
| `totalResults` | number | Total number of results found for the search query |
### `arxiv_get_paper`
@@ -86,6 +85,5 @@ Search for papers by a specific author on ArXiv.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `authorPapers` | json | Array of papers authored by the specified author |
| `totalResults` | number | Total number of papers found for the author |

View File

@@ -44,18 +44,6 @@ Retrieve a single task by GID or get multiple tasks with filters
| `notes` | string | Task notes or description |
| `completed` | boolean | Whether the task is completed |
| `assignee` | object | Assignee details |
| ↳ `gid` | string | Assignee GID |
| ↳ `name` | string | Assignee name |
| `created_by` | object | Creator details |
| ↳ `gid` | string | Creator GID |
| ↳ `name` | string | Creator name |
| `due_on` | string | Due date \(YYYY-MM-DD\) |
| `created_at` | string | Task creation timestamp |
| `modified_at` | string | Task last modified timestamp |
| `tasks` | array | Array of tasks \(when fetching multiple\) |
| ↳ `gid` | string | Task GID |
| ↳ `name` | string | Task name |
| ↳ `completed` | boolean | Completion status |
### `asana_create_task`
@@ -128,9 +116,6 @@ Retrieve all projects from an Asana workspace
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `projects` | array | Array of projects |
| ↳ `gid` | string | Project GID |
| ↳ `name` | string | Project name |
| ↳ `resource_type` | string | Resource type \(project\) |
### `asana_search_tasks`
@@ -153,22 +138,6 @@ Search for tasks in an Asana workspace
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `tasks` | array | Array of matching tasks |
| ↳ `gid` | string | Assignee GID |
| ↳ `resource_type` | string | Resource type |
| ↳ `resource_subtype` | string | Resource subtype |
| ↳ `name` | string | Assignee name |
| ↳ `notes` | string | Task notes |
| ↳ `completed` | boolean | Completion status |
| ↳ `assignee` | object | Assignee details |
| ↳ `gid` | string | Assignee GID |
| ↳ `name` | string | Assignee name |
| ↳ `due_on` | string | Due date |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `modified_at` | string | Modified timestamp |
| `next_page` | object | Pagination info |
| ↳ `offset` | string | Offset token |
| ↳ `path` | string | API path |
| ↳ `uri` | string | Full URI |
### `asana_add_comment`
@@ -191,7 +160,5 @@ Add a comment (story) to an Asana task
| `text` | string | Comment text content |
| `created_at` | string | Comment creation timestamp |
| `created_by` | object | Comment author details |
| ↳ `gid` | string | Author GID |
| ↳ `name` | string | Author name |

View File

@@ -47,16 +47,6 @@ Get information about the currently authenticated Calendly user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `resource` | object | Current user information |
| ↳ `uri` | string | Canonical reference to the user |
| ↳ `name` | string | User full name |
| ↳ `slug` | string | Unique identifier for the user in URLs |
| ↳ `email` | string | User email address |
| ↳ `scheduling_url` | string | URL to the user |
| ↳ `timezone` | string | User timezone |
| ↳ `avatar_url` | string | URL to user avatar image |
| ↳ `created_at` | string | ISO timestamp when user was created |
| ↳ `updated_at` | string | ISO timestamp when user was last updated |
| ↳ `current_organization` | string | URI of current organization |
### `calendly_list_event_types`
@@ -79,25 +69,6 @@ Retrieve a list of all event types for a user or organization
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `collection` | array | Array of event type objects |
| ↳ `uri` | string | Canonical reference to the event type |
| ↳ `name` | string | Event type name |
| ↳ `active` | boolean | Whether the event type is active |
| ↳ `booking_method` | string | Booking method \(e.g., |
| ↳ `color` | string | Hex color code |
| ↳ `created_at` | string | ISO timestamp of creation |
| ↳ `description_html` | string | HTML formatted description |
| ↳ `description_plain` | string | Plain text description |
| ↳ `duration` | number | Duration in minutes |
| ↳ `scheduling_url` | string | URL to scheduling page |
| ↳ `slug` | string | Unique identifier for URLs |
| ↳ `type` | string | Event type classification |
| ↳ `updated_at` | string | ISO timestamp of last update |
| `pagination` | object | Pagination information |
| ↳ `count` | number | Number of results in this page |
| ↳ `next_page` | string | URL to next page \(if available\) |
| ↳ `previous_page` | string | URL to previous page \(if available\) |
| ↳ `next_page_token` | string | Token for next page |
| ↳ `previous_page_token` | string | Token for previous page |
### `calendly_get_event_type`
@@ -115,30 +86,6 @@ Get detailed information about a specific event type
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `resource` | object | Event type details |
| ↳ `uri` | string | Canonical reference to the event type |
| ↳ `name` | string | Question text |
| ↳ `active` | boolean | Whether the event type is active |
| ↳ `booking_method` | string | Booking method |
| ↳ `color` | string | Hex color code |
| ↳ `created_at` | string | ISO timestamp of creation |
| ↳ `custom_questions` | array | Custom questions for invitees |
| ↳ `name` | string | Question text |
| ↳ `type` | string | Question type \(text, single_select, multi_select, etc.\) |
| ↳ `position` | number | Question order |
| ↳ `enabled` | boolean | Whether question is enabled |
| ↳ `required` | boolean | Whether question is required |
| ↳ `answer_choices` | array | Available answer choices |
| ↳ `type` | string | Event type classification |
| ↳ `position` | number | Question order |
| ↳ `enabled` | boolean | Whether question is enabled |
| ↳ `required` | boolean | Whether question is required |
| ↳ `answer_choices` | array | Available answer choices |
| ↳ `description_html` | string | HTML formatted description |
| ↳ `description_plain` | string | Plain text description |
| ↳ `duration` | number | Duration in minutes |
| ↳ `scheduling_url` | string | URL to scheduling page |
| ↳ `slug` | string | Unique identifier for URLs |
| ↳ `updated_at` | string | ISO timestamp of last update |
### `calendly_list_scheduled_events`
@@ -164,30 +111,6 @@ Retrieve a list of scheduled events for a user or organization
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `collection` | array | Array of scheduled event objects |
| ↳ `uri` | string | Canonical reference to the event |
| ↳ `name` | string | Event name |
| ↳ `status` | string | Event status \(active or canceled\) |
| ↳ `start_time` | string | ISO timestamp of event start |
| ↳ `end_time` | string | ISO timestamp of event end |
| ↳ `event_type` | string | URI of the event type |
| ↳ `location` | string | Location description |
| ↳ `type` | string | Location type \(e.g., |
| ↳ `join_url` | string | URL to join online meeting \(if applicable\) |
| ↳ `invitees_counter` | object | Invitee count information |
| ↳ `total` | number | Total number of invitees |
| ↳ `active` | number | Number of active invitees |
| ↳ `limit` | number | Maximum number of invitees |
| ↳ `total` | number | Total number of invitees |
| ↳ `active` | number | Number of active invitees |
| ↳ `limit` | number | Maximum number of invitees |
| ↳ `created_at` | string | ISO timestamp of event creation |
| ↳ `updated_at` | string | ISO timestamp of last update |
| `pagination` | object | Pagination information |
| ↳ `count` | number | Number of results in this page |
| ↳ `next_page` | string | URL to next page \(if available\) |
| ↳ `previous_page` | string | URL to previous page \(if available\) |
| ↳ `next_page_token` | string | Token for next page |
| ↳ `previous_page_token` | string | Token for previous page |
### `calendly_get_scheduled_event`
@@ -205,36 +128,6 @@ Get detailed information about a specific scheduled event
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `resource` | object | Scheduled event details |
| ↳ `uri` | string | Canonical reference to the event |
| ↳ `name` | string | Event name |
| ↳ `status` | string | Event status \(active or canceled\) |
| ↳ `start_time` | string | ISO timestamp of event start |
| ↳ `end_time` | string | ISO timestamp of event end |
| ↳ `event_type` | string | URI of the event type |
| ↳ `location` | string | Location description |
| ↳ `type` | string | Location type |
| ↳ `join_url` | string | URL to join online meeting |
| ↳ `invitees_counter` | object | Invitee count information |
| ↳ `total` | number | Total number of invitees |
| ↳ `active` | number | Number of active invitees |
| ↳ `limit` | number | Maximum number of invitees |
| ↳ `total` | number | Total number of invitees |
| ↳ `active` | number | Number of active invitees |
| ↳ `limit` | number | Maximum number of invitees |
| ↳ `event_memberships` | array | Event hosts/members |
| ↳ `user` | string | User URI |
| ↳ `user_email` | string | User email |
| ↳ `user_name` | string | User name |
| ↳ `user` | string | User URI |
| ↳ `user_email` | string | User email |
| ↳ `user_name` | string | User name |
| ↳ `event_guests` | array | Additional guests |
| ↳ `email` | string | Guest email |
| ↳ `created_at` | string | When guest was added |
| ↳ `updated_at` | string | When guest info was updated |
| ↳ `email` | string | Guest email |
| ↳ `created_at` | string | ISO timestamp of event creation |
| ↳ `updated_at` | string | ISO timestamp of last update |
### `calendly_list_event_invitees`
@@ -257,32 +150,6 @@ Retrieve a list of invitees for a scheduled event
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `collection` | array | Array of invitee objects |
| ↳ `uri` | string | Canonical reference to the invitee |
| ↳ `email` | string | Invitee email address |
| ↳ `name` | string | Invitee full name |
| ↳ `first_name` | string | Invitee first name |
| ↳ `last_name` | string | Invitee last name |
| ↳ `status` | string | Invitee status \(active or canceled\) |
| ↳ `questions_and_answers` | array | Responses to custom questions |
| ↳ `question` | string | Question text |
| ↳ `answer` | string | Invitee answer |
| ↳ `position` | number | Question order |
| ↳ `question` | string | Question text |
| ↳ `answer` | string | Invitee answer |
| ↳ `position` | number | Question order |
| ↳ `timezone` | string | Invitee timezone |
| ↳ `event` | string | URI of the scheduled event |
| ↳ `created_at` | string | ISO timestamp when invitee was created |
| ↳ `updated_at` | string | ISO timestamp when invitee was updated |
| ↳ `cancel_url` | string | URL to cancel the booking |
| ↳ `reschedule_url` | string | URL to reschedule the booking |
| ↳ `rescheduled` | boolean | Whether invitee rescheduled |
| `pagination` | object | Pagination information |
| ↳ `count` | number | Number of results in this page |
| ↳ `next_page` | string | URL to next page \(if available\) |
| ↳ `previous_page` | string | URL to previous page \(if available\) |
| ↳ `next_page_token` | string | Token for next page |
| ↳ `previous_page_token` | string | Token for previous page |
### `calendly_cancel_event`
@@ -301,9 +168,5 @@ Cancel a scheduled event
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `resource` | object | Cancellation details |
| ↳ `canceler_type` | string | Type of canceler \(host or invitee\) |
| ↳ `canceled_by` | string | Name of person who canceled |
| ↳ `reason` | string | Cancellation reason |
| ↳ `created_at` | string | ISO timestamp when event was canceled |

View File

@@ -61,10 +61,5 @@ Populate Clay with data from a JSON file. Enables direct communication and notif
| --------- | ---- | ----------- |
| `data` | json | Response data from Clay webhook |
| `metadata` | object | Webhook response metadata |
| ↳ `status` | number | HTTP status code |
| ↳ `statusText` | string | HTTP status text |
| ↳ `headers` | object | Response headers from Clay |
| ↳ `timestamp` | string | ISO timestamp when webhook was received |
| ↳ `contentType` | string | Content type of the response |

View File

@@ -99,15 +99,6 @@ Post an event to the Datadog event stream. Use for deployment notifications, ale
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `event` | object | The created event details |
| ↳ `id` | number | Event ID |
| ↳ `title` | string | Event title |
| ↳ `text` | string | Event text |
| ↳ `date_happened` | number | Unix timestamp when event occurred |
| ↳ `priority` | string | Event priority |
| ↳ `alert_type` | string | Alert type |
| ↳ `host` | string | Associated host |
| ↳ `tags` | array | Event tags |
| ↳ `url` | string | URL to view the event in Datadog |
### `datadog_create_monitor`
@@ -133,16 +124,6 @@ Create a new monitor/alert in Datadog. Monitors can track metrics, service check
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `monitor` | object | The created monitor details |
| ↳ `id` | number | Monitor ID |
| ↳ `name` | string | Monitor name |
| ↳ `type` | string | Monitor type |
| ↳ `query` | string | Monitor query |
| ↳ `message` | string | Notification message |
| ↳ `tags` | array | Monitor tags |
| ↳ `priority` | number | Monitor priority |
| ↳ `overall_state` | string | Current monitor state |
| ↳ `created` | string | Creation timestamp |
| ↳ `modified` | string | Last modification timestamp |
### `datadog_get_monitor`
@@ -164,16 +145,6 @@ Retrieve details of a specific monitor by ID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `monitor` | object | The monitor details |
| ↳ `id` | number | Monitor ID |
| ↳ `name` | string | Monitor name |
| ↳ `type` | string | Monitor type |
| ↳ `query` | string | Monitor query |
| ↳ `message` | string | Notification message |
| ↳ `tags` | array | Monitor tags |
| ↳ `priority` | number | Monitor priority |
| ↳ `overall_state` | string | Current monitor state |
| ↳ `created` | string | Creation timestamp |
| ↳ `modified` | string | Last modification timestamp |
### `datadog_list_monitors`
@@ -199,12 +170,6 @@ List all monitors in Datadog with optional filtering by name, tags, or state.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `monitors` | array | List of monitors |
| ↳ `id` | number | Monitor ID |
| ↳ `name` | string | Monitor name |
| ↳ `type` | string | Monitor type |
| ↳ `query` | string | Monitor query |
| ↳ `overall_state` | string | Current state |
| ↳ `tags` | array | Tags |
### `datadog_mute_monitor`
@@ -250,19 +215,6 @@ Search and retrieve logs from Datadog. Use for troubleshooting, analysis, or mon
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `logs` | array | List of log entries |
| ↳ `id` | string | Log ID |
| ↳ `content` | object | Log content |
| ↳ `timestamp` | string | Log timestamp |
| ↳ `host` | string | Host name |
| ↳ `service` | string | Service name |
| ↳ `message` | string | Log message |
| ↳ `status` | string | Log status/level |
| ↳ `timestamp` | string | Log timestamp |
| ↳ `host` | string | Host name |
| ↳ `service` | string | Service name |
| ↳ `message` | string | Log message |
| ↳ `status` | string | Log status/level |
| `nextLogId` | string | Cursor for pagination |
### `datadog_send_logs`
@@ -307,12 +259,6 @@ Schedule a downtime to suppress monitor notifications during maintenance windows
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `downtime` | object | The created downtime details |
| ↳ `id` | number | Downtime ID |
| ↳ `scope` | array | Downtime scope |
| ↳ `message` | string | Downtime message |
| ↳ `start` | number | Start time \(Unix timestamp\) |
| ↳ `end` | number | End time \(Unix timestamp\) |
| ↳ `active` | boolean | Whether downtime is currently active |
### `datadog_list_downtimes`
@@ -333,12 +279,6 @@ List all scheduled downtimes in Datadog.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `downtimes` | array | List of downtimes |
| ↳ `id` | number | Downtime ID |
| ↳ `scope` | array | Downtime scope |
| ↳ `message` | string | Downtime message |
| ↳ `start` | number | Start time \(Unix timestamp\) |
| ↳ `end` | number | End time \(Unix timestamp\) |
| ↳ `active` | boolean | Whether downtime is currently active |
### `datadog_cancel_downtime`

View File

@@ -64,24 +64,6 @@ Send a message to a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Discord message data |
| ↳ `id` | string | Author user ID |
| ↳ `content` | string | Message content |
| ↳ `channel_id` | string | Channel ID where message was sent |
| ↳ `author` | object | Message author information |
| ↳ `id` | string | Author user ID |
| ↳ `username` | string | Author username |
| ↳ `avatar` | string | Author avatar hash |
| ↳ `bot` | boolean | Whether author is a bot |
| ↳ `username` | string | Author username |
| ↳ `avatar` | string | Author avatar hash |
| ↳ `bot` | boolean | Whether author is a bot |
| ↳ `timestamp` | string | Message timestamp |
| ↳ `edited_timestamp` | string | Message edited timestamp |
| ↳ `embeds` | array | Message embeds |
| ↳ `attachments` | array | Message attachments |
| ↳ `mentions` | array | User mentions in message |
| ↳ `mention_roles` | array | Role mentions in message |
| ↳ `mention_everyone` | boolean | Whether message mentions everyone |
### `discord_get_messages`
@@ -101,43 +83,6 @@ Retrieve messages from a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Container for messages data |
| ↳ `messages` | array | Array of Discord messages with full metadata |
| ↳ `id` | string | Author user ID |
| ↳ `content` | string | Message content |
| ↳ `channel_id` | string | Channel ID |
| ↳ `author` | object | Message author information |
| ↳ `id` | string | Author user ID |
| ↳ `username` | string | Author username |
| ↳ `avatar` | string | Author avatar hash |
| ↳ `bot` | boolean | Whether author is a bot |
| ↳ `username` | string | Author username |
| ↳ `avatar` | string | Author avatar hash |
| ↳ `bot` | boolean | Whether author is a bot |
| ↳ `timestamp` | string | Message timestamp |
| ↳ `edited_timestamp` | string | Message edited timestamp |
| ↳ `embeds` | array | Message embeds |
| ↳ `attachments` | array | Message attachments |
| ↳ `mentions` | array | User mentions in message |
| ↳ `mention_roles` | array | Role mentions in message |
| ↳ `mention_everyone` | boolean | Whether message mentions everyone |
| ↳ `id` | string | Author user ID |
| ↳ `content` | string | Message content |
| ↳ `channel_id` | string | Channel ID |
| ↳ `author` | object | Message author information |
| ↳ `id` | string | Author user ID |
| ↳ `username` | string | Author username |
| ↳ `avatar` | string | Author avatar hash |
| ↳ `bot` | boolean | Whether author is a bot |
| ↳ `username` | string | Author username |
| ↳ `avatar` | string | Author avatar hash |
| ↳ `bot` | boolean | Whether author is a bot |
| ↳ `timestamp` | string | Message timestamp |
| ↳ `edited_timestamp` | string | Message edited timestamp |
| ↳ `embeds` | array | Message embeds |
| ↳ `attachments` | array | Message attachments |
| ↳ `mentions` | array | User mentions in message |
| ↳ `mention_roles` | array | Role mentions in message |
| ↳ `mention_everyone` | boolean | Whether message mentions everyone |
### `discord_get_server`
@@ -156,14 +101,6 @@ Retrieve information about a Discord server (guild)
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Discord server \(guild\) information |
| ↳ `id` | string | Server ID |
| ↳ `name` | string | Server name |
| ↳ `icon` | string | Server icon hash |
| ↳ `description` | string | Server description |
| ↳ `owner_id` | string | Server owner user ID |
| ↳ `roles` | array | Server roles |
| ↳ `channels` | array | Server channels |
| ↳ `member_count` | number | Number of members in server |
### `discord_get_user`
@@ -182,14 +119,6 @@ Retrieve information about a Discord user
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Discord user information |
| ↳ `id` | string | User ID |
| ↳ `username` | string | Username |
| ↳ `discriminator` | string | User discriminator \(4-digit number\) |
| ↳ `avatar` | string | User avatar hash |
| ↳ `bot` | boolean | Whether user is a bot |
| ↳ `system` | boolean | Whether user is a system user |
| ↳ `email` | string | User email \(if available\) |
| ↳ `verified` | boolean | Whether user email is verified |
### `discord_edit_message`
@@ -211,10 +140,6 @@ Edit an existing message in a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Updated Discord message data |
| ↳ `id` | string | Message ID |
| ↳ `content` | string | Updated message content |
| ↳ `channel_id` | string | Channel ID |
| ↳ `edited_timestamp` | string | Message edited timestamp |
### `discord_delete_message`
@@ -335,11 +260,6 @@ Create a thread in a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Created thread data |
| ↳ `id` | string | Thread ID |
| ↳ `name` | string | Thread name |
| ↳ `type` | number | Thread channel type |
| ↳ `guild_id` | string | Server ID |
| ↳ `parent_id` | string | Parent channel ID |
### `discord_join_thread`
@@ -396,8 +316,6 @@ Archive or unarchive a thread in Discord
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Updated thread data |
| ↳ `id` | string | Thread ID |
| ↳ `archived` | boolean | Whether thread is archived |
### `discord_create_channel`
@@ -420,10 +338,6 @@ Create a new channel in a Discord server
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Created channel data |
| ↳ `id` | string | Channel ID |
| ↳ `name` | string | Channel name |
| ↳ `type` | number | Channel type |
| ↳ `guild_id` | string | Server ID |
### `discord_update_channel`
@@ -445,10 +359,6 @@ Update a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Updated channel data |
| ↳ `id` | string | Channel ID |
| ↳ `name` | string | Channel name |
| ↳ `type` | number | Channel type |
| ↳ `topic` | string | Channel topic |
### `discord_delete_channel`
@@ -486,11 +396,6 @@ Get information about a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Channel data |
| ↳ `id` | string | Channel ID |
| ↳ `name` | string | Channel name |
| ↳ `type` | number | Channel type |
| ↳ `topic` | string | Channel topic |
| ↳ `guild_id` | string | Server ID |
### `discord_create_role`
@@ -513,11 +418,6 @@ Create a new role in a Discord server
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Created role data |
| ↳ `id` | string | Role ID |
| ↳ `name` | string | Role name |
| ↳ `color` | number | Role color |
| ↳ `hoist` | boolean | Whether role is hoisted |
| ↳ `mentionable` | boolean | Whether role is mentionable |
### `discord_update_role`
@@ -541,9 +441,6 @@ Update a role in a Discord server
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Updated role data |
| ↳ `id` | string | Role ID |
| ↳ `name` | string | Role name |
| ↳ `color` | number | Role color |
### `discord_delete_role`
@@ -677,16 +574,6 @@ Get information about a member in a Discord server
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Member data |
| ↳ `user` | object | User information |
| ↳ `id` | string | User ID |
| ↳ `username` | string | Username |
| ↳ `avatar` | string | Avatar hash |
| ↳ `id` | string | User ID |
| ↳ `username` | string | Username |
| ↳ `avatar` | string | Avatar hash |
| ↳ `nick` | string | Server nickname |
| ↳ `roles` | array | Array of role IDs |
| ↳ `joined_at` | string | When the member joined |
### `discord_update_member`
@@ -709,9 +596,6 @@ Update a member in a Discord server (e.g., change nickname)
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Updated member data |
| ↳ `nick` | string | Server nickname |
| ↳ `mute` | boolean | Voice mute status |
| ↳ `deaf` | boolean | Voice deaf status |
### `discord_create_invite`
@@ -734,11 +618,6 @@ Create an invite link for a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Created invite data |
| ↳ `code` | string | Invite code |
| ↳ `url` | string | Full invite URL |
| ↳ `max_age` | number | Max age in seconds |
| ↳ `max_uses` | number | Max uses |
| ↳ `temporary` | boolean | Whether temporary |
### `discord_get_invite`
@@ -758,11 +637,6 @@ Get information about a Discord invite
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Invite data |
| ↳ `code` | string | Invite code |
| ↳ `guild` | object | Server information |
| ↳ `channel` | object | Channel information |
| ↳ `approximate_member_count` | number | Approximate member count |
| ↳ `approximate_presence_count` | number | Approximate online count |
### `discord_delete_invite`
@@ -801,11 +675,6 @@ Create a webhook in a Discord channel
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Created webhook data |
| ↳ `id` | string | Webhook ID |
| ↳ `name` | string | Webhook name |
| ↳ `token` | string | Webhook token |
| ↳ `url` | string | Webhook URL |
| ↳ `channel_id` | string | Channel ID |
### `discord_execute_webhook`
@@ -827,10 +696,6 @@ Execute a Discord webhook to send a message
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Message sent via webhook |
| ↳ `id` | string | Message ID |
| ↳ `content` | string | Message content |
| ↳ `channel_id` | string | Channel ID |
| ↳ `timestamp` | string | Message timestamp |
### `discord_get_webhook`
@@ -850,11 +715,6 @@ Get information about a Discord webhook
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Webhook data |
| ↳ `id` | string | Webhook ID |
| ↳ `name` | string | Webhook name |
| ↳ `channel_id` | string | Channel ID |
| ↳ `guild_id` | string | Server ID |
| ↳ `token` | string | Webhook token |
### `discord_delete_webhook`

View File

@@ -54,15 +54,6 @@ Upload a file to Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | object | The uploaded file metadata |
| ↳ `id` | string | Unique identifier for the file |
| ↳ `name` | string | Name of the file |
| ↳ `path_display` | string | Display path of the file |
| ↳ `path_lower` | string | Lowercase path of the file |
| ↳ `size` | number | Size of the file in bytes |
| ↳ `client_modified` | string | Client modification time |
| ↳ `server_modified` | string | Server modification time |
| ↳ `rev` | string | Revision identifier |
| ↳ `content_hash` | string | Content hash for the file |
### `dropbox_download`
@@ -79,12 +70,6 @@ Download a file from Dropbox and get a temporary link
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | object | The file metadata |
| ↳ `id` | string | Unique identifier for the file |
| ↳ `name` | string | Name of the file |
| ↳ `path_display` | string | Display path of the file |
| ↳ `size` | number | Size of the file in bytes |
| `temporaryLink` | string | Temporary link to download the file \(valid for ~4 hours\) |
| `content` | string | Base64 encoded file content \(if fetched\) |
### `dropbox_list_folder`
@@ -105,12 +90,6 @@ List the contents of a folder in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `entries` | array | List of files and folders in the directory |
| ↳ `id` | string | Unique identifier |
| ↳ `name` | string | Name of the file/folder |
| ↳ `path_display` | string | Display path |
| ↳ `size` | number | Size in bytes \(files only\) |
| `cursor` | string | Cursor for pagination |
| `hasMore` | boolean | Whether there are more results |
### `dropbox_create_folder`
@@ -128,10 +107,6 @@ Create a new folder in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `folder` | object | The created folder metadata |
| ↳ `id` | string | Unique identifier for the folder |
| ↳ `name` | string | Name of the folder |
| ↳ `path_display` | string | Display path of the folder |
| ↳ `path_lower` | string | Lowercase path of the folder |
### `dropbox_delete`
@@ -148,9 +123,6 @@ Delete a file or folder in Dropbox (moves to trash)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `metadata` | object | Metadata of the deleted item |
| ↳ `name` | string | Name of the deleted item |
| ↳ `path_display` | string | Display path |
| `deleted` | boolean | Whether the deletion was successful |
### `dropbox_copy`
@@ -169,10 +141,6 @@ Copy a file or folder in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `metadata` | object | Metadata of the copied item |
| ↳ `id` | string | Unique identifier |
| ↳ `name` | string | Name of the copied item |
| ↳ `path_display` | string | Display path |
| ↳ `size` | number | Size in bytes \(files only\) |
### `dropbox_move`
@@ -191,10 +159,6 @@ Move or rename a file or folder in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `metadata` | object | Metadata of the moved item |
| ↳ `id` | string | Unique identifier |
| ↳ `name` | string | Name of the moved item |
| ↳ `path_display` | string | Display path |
| ↳ `size` | number | Size in bytes \(files only\) |
### `dropbox_get_metadata`
@@ -213,15 +177,6 @@ Get metadata for a file or folder in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `metadata` | object | Metadata for the file or folder |
| ↳ `id` | string | Unique identifier |
| ↳ `name` | string | Name of the item |
| ↳ `path_display` | string | Display path |
| ↳ `path_lower` | string | Lowercase path |
| ↳ `size` | number | Size in bytes \(files only\) |
| ↳ `client_modified` | string | Client modification time |
| ↳ `server_modified` | string | Server modification time |
| ↳ `rev` | string | Revision identifier |
| ↳ `content_hash` | string | Content hash |
### `dropbox_create_shared_link`
@@ -241,11 +196,6 @@ Create a shareable link for a file or folder in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `sharedLink` | object | The created shared link |
| ↳ `url` | string | The shared link URL |
| ↳ `name` | string | Name of the shared item |
| ↳ `path_lower` | string | Lowercase path of the shared item |
| ↳ `expires` | string | Expiration date if set |
| ↳ `link_permissions` | object | Permissions for the shared link |
### `dropbox_search`
@@ -265,9 +215,5 @@ Search for files and folders in Dropbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | array | Search results |
| ↳ `match_type` | object | Type of match: filename, content, or both |
| ↳ `metadata` | object | File or folder metadata |
| `hasMore` | boolean | Whether there are more results |
| `cursor` | string | Cursor for pagination |

View File

@@ -59,12 +59,5 @@ Search the web using DuckDuckGo Instant Answers API. Returns instant answers, ab
| `answerType` | string | Type of the answer \(e.g., calc, ip, etc.\) |
| `type` | string | Response type: A \(article\), D \(disambiguation\), C \(category\), N \(name\), E \(exclusive\) |
| `relatedTopics` | array | Array of related topics with URLs and descriptions |
| ↳ `FirstURL` | string | URL to the related topic |
| ↳ `Text` | string | Description of the related topic |
| ↳ `Result` | string | HTML result snippet |
| `results` | array | Array of external link results |
| ↳ `FirstURL` | string | URL of the result |
| ↳ `Text` | string | Description of the result |
| ↳ `Result` | string | HTML result snippet |

View File

@@ -61,15 +61,6 @@ Search the web using Exa AI. Returns relevant search results with titles, URLs,
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Search results with titles, URLs, and text snippets |
| ↳ `title` | string | The title of the search result |
| ↳ `url` | string | The URL of the search result |
| ↳ `publishedDate` | string | Date when the content was published |
| ↳ `author` | string | The author of the content |
| ↳ `summary` | string | A brief summary of the content |
| ↳ `favicon` | string | URL of the site |
| ↳ `image` | string | URL of a representative image from the page |
| ↳ `text` | string | Text snippet or full content from the page |
| ↳ `score` | number | Relevance score for the search result |
### `exa_get_contents`
@@ -93,10 +84,6 @@ Retrieve the contents of webpages using Exa AI. Returns the title, text content,
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Retrieved content from URLs with title, text, and summaries |
| ↳ `url` | string | The URL that content was retrieved from |
| ↳ `title` | string | The title of the webpage |
| ↳ `text` | string | The full text content of the webpage |
| ↳ `summary` | string | AI-generated summary of the webpage content |
### `exa_find_similar_links`
@@ -122,10 +109,6 @@ Find webpages similar to a given URL using Exa AI. Returns a list of similar lin
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `similarLinks` | array | Similar links found with titles, URLs, and text snippets |
| ↳ `title` | string | The title of the similar webpage |
| ↳ `url` | string | The URL of the similar webpage |
| ↳ `text` | string | Text snippet or full content from the similar webpage |
| ↳ `score` | number | Similarity score indicating how similar the page is |
### `exa_answer`
@@ -145,9 +128,6 @@ Get an AI-generated answer to a question with citations from the web using Exa A
| --------- | ---- | ----------- |
| `answer` | string | AI-generated answer to the question |
| `citations` | array | Sources and citations for the answer |
| ↳ `title` | string | The title of the cited source |
| ↳ `url` | string | The URL of the cited source |
| ↳ `text` | string | Relevant text from the cited source |
### `exa_research`

View File

@@ -97,21 +97,6 @@ Crawl entire websites and extract structured content from all accessible pages
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pages` | array | Array of crawled pages with their content and metadata |
| ↳ `markdown` | string | Page content in markdown format |
| ↳ `html` | string | Page HTML content |
| ↳ `metadata` | object | Page metadata |
| ↳ `title` | string | Page title |
| ↳ `description` | string | Page description |
| ↳ `language` | string | Page language |
| ↳ `sourceURL` | string | Source URL of the page |
| ↳ `statusCode` | number | HTTP status code |
| ↳ `title` | string | Page title |
| ↳ `description` | string | Page description |
| ↳ `language` | string | Page language |
| ↳ `sourceURL` | string | Source URL of the page |
| ↳ `statusCode` | number | HTTP status code |
| `total` | number | Total number of pages found during crawl |
| `creditsUsed` | number | Number of credits consumed by the crawl operation |
### `firecrawl_map`

View File

@@ -75,18 +75,6 @@ Get a single transcript with full details including summary, action items, and a
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `transcript` | object | The transcript with full details |
| ↳ `id` | string | Transcript ID |
| ↳ `title` | string | Meeting title |
| ↳ `date` | number | Meeting timestamp |
| ↳ `duration` | number | Meeting duration in seconds |
| ↳ `transcript_url` | string | URL to view transcript |
| ↳ `audio_url` | string | URL to audio recording |
| ↳ `host_email` | string | Host email address |
| ↳ `participants` | array | List of participant emails |
| ↳ `speakers` | array | List of speakers |
| ↳ `sentences` | array | Transcript sentences |
| ↳ `summary` | object | Meeting summary and action items |
| ↳ `analytics` | object | Meeting analytics and sentiment |
### `fireflies_get_user`
@@ -104,15 +92,6 @@ Get user information from Fireflies.ai. Returns current user if no ID specified.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | User information |
| ↳ `user_id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `integrations` | array | Connected integrations |
| ↳ `is_admin` | boolean | Whether user is admin |
| ↳ `minutes_consumed` | number | Total minutes transcribed |
| ↳ `num_transcripts` | number | Number of transcripts |
| ↳ `recent_transcript` | string | Most recent transcript ID |
| ↳ `recent_meeting` | string | Most recent meeting date |
### `fireflies_list_users`
@@ -214,9 +193,6 @@ Create a soundbite/highlight from a specific time range in a transcript
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `bite` | object | Created bite details |
| ↳ `id` | string | Bite ID |
| ↳ `name` | string | Bite name |
| ↳ `status` | string | Processing status |
### `fireflies_list_bites`

View File

@@ -87,10 +87,6 @@ Read content from a Google Docs document
| --------- | ---- | ----------- |
| `content` | string | Extracted document text content |
| `metadata` | json | Document metadata including ID, title, and URL |
| ↳ `documentId` | string | Google Docs document ID |
| ↳ `title` | string | Document title |
| ↳ `mimeType` | string | Document MIME type |
| ↳ `url` | string | Document URL |
### `google_docs_write`
@@ -109,10 +105,6 @@ Write or update content in a Google Docs document
| --------- | ---- | ----------- |
| `updatedContent` | boolean | Indicates if document content was updated successfully |
| `metadata` | json | Updated document metadata including ID, title, and URL |
| ↳ `documentId` | string | Google Docs document ID |
| ↳ `title` | string | Document title |
| ↳ `mimeType` | string | Document MIME type |
| ↳ `url` | string | Document URL |
### `google_docs_create`
@@ -132,9 +124,5 @@ Create a new Google Docs document
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `metadata` | json | Created document metadata including ID, title, and URL |
| ↳ `documentId` | string | Google Docs document ID |
| ↳ `title` | string | Document title |
| ↳ `mimeType` | string | Document MIME type |
| ↳ `url` | string | Document URL |

View File

@@ -66,58 +66,6 @@ Upload a file to Google Drive with complete metadata returned
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | object | Complete uploaded file metadata from Google Drive |
| ↳ `id` | string | Google Drive file ID |
| ↳ `name` | string | File name |
| ↳ `mimeType` | string | MIME type |
| ↳ `kind` | string | Resource type identifier |
| ↳ `description` | string | File description |
| ↳ `originalFilename` | string | Original uploaded filename |
| ↳ `fullFileExtension` | string | Full file extension |
| ↳ `fileExtension` | string | File extension |
| ↳ `owners` | json | List of file owners |
| ↳ `permissions` | json | File permissions |
| ↳ `permissionIds` | json | Permission IDs |
| ↳ `shared` | boolean | Whether file is shared |
| ↳ `ownedByMe` | boolean | Whether owned by current user |
| ↳ `writersCanShare` | boolean | Whether writers can share |
| ↳ `viewersCanCopyContent` | boolean | Whether viewers can copy |
| ↳ `copyRequiresWriterPermission` | boolean | Whether copy requires writer permission |
| ↳ `sharingUser` | json | User who shared the file |
| ↳ `starred` | boolean | Whether file is starred |
| ↳ `trashed` | boolean | Whether file is in trash |
| ↳ `explicitlyTrashed` | boolean | Whether explicitly trashed |
| ↳ `appProperties` | json | App-specific properties |
| ↳ `createdTime` | string | File creation time |
| ↳ `modifiedTime` | string | Last modification time |
| ↳ `modifiedByMeTime` | string | When modified by current user |
| ↳ `viewedByMeTime` | string | When last viewed by current user |
| ↳ `sharedWithMeTime` | string | When shared with current user |
| ↳ `lastModifyingUser` | json | User who last modified the file |
| ↳ `viewedByMe` | boolean | Whether viewed by current user |
| ↳ `modifiedByMe` | boolean | Whether modified by current user |
| ↳ `webViewLink` | string | URL to view in browser |
| ↳ `webContentLink` | string | Direct download URL |
| ↳ `iconLink` | string | URL to file icon |
| ↳ `thumbnailLink` | string | URL to thumbnail |
| ↳ `exportLinks` | json | Export format links |
| ↳ `size` | string | File size in bytes |
| ↳ `quotaBytesUsed` | string | Storage quota used |
| ↳ `md5Checksum` | string | MD5 hash |
| ↳ `sha1Checksum` | string | SHA-1 hash |
| ↳ `sha256Checksum` | string | SHA-256 hash |
| ↳ `parents` | json | Parent folder IDs |
| ↳ `spaces` | json | Spaces containing file |
| ↳ `driveId` | string | Shared drive ID |
| ↳ `capabilities` | json | User capabilities on file |
| ↳ `version` | string | Version number |
| ↳ `headRevisionId` | string | Head revision ID |
| ↳ `hasThumbnail` | boolean | Whether has thumbnail |
| ↳ `thumbnailVersion` | string | Thumbnail version |
| ↳ `imageMediaMetadata` | json | Image-specific metadata |
| ↳ `videoMediaMetadata` | json | Video-specific metadata |
| ↳ `isAppAuthorized` | boolean | Whether created by requesting app |
| ↳ `contentRestrictions` | json | Content restrictions |
| ↳ `linkShareMetadata` | json | Link share metadata |
### `google_drive_create_folder`
@@ -136,43 +84,6 @@ Create a new folder in Google Drive with complete metadata returned
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | object | Complete created folder metadata from Google Drive |
| ↳ `id` | string | Google Drive folder ID |
| ↳ `name` | string | Folder name |
| ↳ `mimeType` | string | MIME type \(application/vnd.google-apps.folder\) |
| ↳ `kind` | string | Resource type identifier |
| ↳ `description` | string | Folder description |
| ↳ `owners` | json | List of folder owners |
| ↳ `permissions` | json | Folder permissions |
| ↳ `permissionIds` | json | Permission IDs |
| ↳ `shared` | boolean | Whether folder is shared |
| ↳ `ownedByMe` | boolean | Whether owned by current user |
| ↳ `writersCanShare` | boolean | Whether writers can share |
| ↳ `viewersCanCopyContent` | boolean | Whether viewers can copy |
| ↳ `copyRequiresWriterPermission` | boolean | Whether copy requires writer permission |
| ↳ `sharingUser` | json | User who shared the folder |
| ↳ `starred` | boolean | Whether folder is starred |
| ↳ `trashed` | boolean | Whether folder is in trash |
| ↳ `explicitlyTrashed` | boolean | Whether explicitly trashed |
| ↳ `appProperties` | json | App-specific properties |
| ↳ `folderColorRgb` | string | Folder color |
| ↳ `createdTime` | string | Folder creation time |
| ↳ `modifiedTime` | string | Last modification time |
| ↳ `modifiedByMeTime` | string | When modified by current user |
| ↳ `viewedByMeTime` | string | When last viewed by current user |
| ↳ `sharedWithMeTime` | string | When shared with current user |
| ↳ `lastModifyingUser` | json | User who last modified the folder |
| ↳ `viewedByMe` | boolean | Whether viewed by current user |
| ↳ `modifiedByMe` | boolean | Whether modified by current user |
| ↳ `webViewLink` | string | URL to view in browser |
| ↳ `iconLink` | string | URL to folder icon |
| ↳ `parents` | json | Parent folder IDs |
| ↳ `spaces` | json | Spaces containing folder |
| ↳ `driveId` | string | Shared drive ID |
| ↳ `capabilities` | json | User capabilities on folder |
| ↳ `version` | string | Version number |
| ↳ `isAppAuthorized` | boolean | Whether created by requesting app |
| ↳ `contentRestrictions` | json | Content restrictions |
| ↳ `linkShareMetadata` | json | Link share metadata |
### `google_drive_download`
@@ -192,64 +103,6 @@ Download a file from Google Drive with complete metadata (exports Google Workspa
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | object | Downloaded file data |
| ↳ `name` | string | File name |
| ↳ `mimeType` | string | MIME type of the file |
| ↳ `data` | string | File content as base64-encoded string |
| ↳ `size` | number | File size in bytes |
| `metadata` | object | Complete file metadata from Google Drive |
| ↳ `id` | string | Google Drive file ID |
| ↳ `name` | string | File name |
| ↳ `mimeType` | string | MIME type |
| ↳ `kind` | string | Resource type identifier |
| ↳ `description` | string | File description |
| ↳ `originalFilename` | string | Original uploaded filename |
| ↳ `fullFileExtension` | string | Full file extension |
| ↳ `fileExtension` | string | File extension |
| ↳ `owners` | json | List of file owners |
| ↳ `permissions` | json | File permissions |
| ↳ `permissionIds` | json | Permission IDs |
| ↳ `shared` | boolean | Whether file is shared |
| ↳ `ownedByMe` | boolean | Whether owned by current user |
| ↳ `writersCanShare` | boolean | Whether writers can share |
| ↳ `viewersCanCopyContent` | boolean | Whether viewers can copy |
| ↳ `copyRequiresWriterPermission` | boolean | Whether copy requires writer permission |
| ↳ `sharingUser` | json | User who shared the file |
| ↳ `starred` | boolean | Whether file is starred |
| ↳ `trashed` | boolean | Whether file is in trash |
| ↳ `explicitlyTrashed` | boolean | Whether explicitly trashed |
| ↳ `appProperties` | json | App-specific properties |
| ↳ `createdTime` | string | File creation time |
| ↳ `modifiedTime` | string | Last modification time |
| ↳ `modifiedByMeTime` | string | When modified by current user |
| ↳ `viewedByMeTime` | string | When last viewed by current user |
| ↳ `sharedWithMeTime` | string | When shared with current user |
| ↳ `lastModifyingUser` | json | User who last modified the file |
| ↳ `viewedByMe` | boolean | Whether viewed by current user |
| ↳ `modifiedByMe` | boolean | Whether modified by current user |
| ↳ `webViewLink` | string | URL to view in browser |
| ↳ `webContentLink` | string | Direct download URL |
| ↳ `iconLink` | string | URL to file icon |
| ↳ `thumbnailLink` | string | URL to thumbnail |
| ↳ `exportLinks` | json | Export format links |
| ↳ `size` | string | File size in bytes |
| ↳ `quotaBytesUsed` | string | Storage quota used |
| ↳ `md5Checksum` | string | MD5 hash |
| ↳ `sha1Checksum` | string | SHA-1 hash |
| ↳ `sha256Checksum` | string | SHA-256 hash |
| ↳ `parents` | json | Parent folder IDs |
| ↳ `spaces` | json | Spaces containing file |
| ↳ `driveId` | string | Shared drive ID |
| ↳ `capabilities` | json | User capabilities on file |
| ↳ `version` | string | Version number |
| ↳ `headRevisionId` | string | Head revision ID |
| ↳ `hasThumbnail` | boolean | Whether has thumbnail |
| ↳ `thumbnailVersion` | string | Thumbnail version |
| ↳ `imageMediaMetadata` | json | Image-specific metadata |
| ↳ `videoMediaMetadata` | json | Video-specific metadata |
| ↳ `isAppAuthorized` | boolean | Whether created by requesting app |
| ↳ `contentRestrictions` | json | Content restrictions |
| ↳ `linkShareMetadata` | json | Link share metadata |
| ↳ `revisions` | json | File revision history \(first 100 revisions only\) |
### `google_drive_list`
@@ -270,58 +123,5 @@ List files and folders in Google Drive with complete metadata
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `files` | array | Array of file metadata objects from Google Drive |
| ↳ `id` | string | Google Drive file ID |
| ↳ `name` | string | File name |
| ↳ `mimeType` | string | MIME type |
| ↳ `kind` | string | Resource type identifier |
| ↳ `description` | string | File description |
| ↳ `originalFilename` | string | Original uploaded filename |
| ↳ `fullFileExtension` | string | Full file extension |
| ↳ `fileExtension` | string | File extension |
| ↳ `owners` | json | List of file owners |
| ↳ `permissions` | json | File permissions |
| ↳ `permissionIds` | json | Permission IDs |
| ↳ `shared` | boolean | Whether file is shared |
| ↳ `ownedByMe` | boolean | Whether owned by current user |
| ↳ `writersCanShare` | boolean | Whether writers can share |
| ↳ `viewersCanCopyContent` | boolean | Whether viewers can copy |
| ↳ `copyRequiresWriterPermission` | boolean | Whether copy requires writer permission |
| ↳ `sharingUser` | json | User who shared the file |
| ↳ `starred` | boolean | Whether file is starred |
| ↳ `trashed` | boolean | Whether file is in trash |
| ↳ `explicitlyTrashed` | boolean | Whether explicitly trashed |
| ↳ `appProperties` | json | App-specific properties |
| ↳ `createdTime` | string | File creation time |
| ↳ `modifiedTime` | string | Last modification time |
| ↳ `modifiedByMeTime` | string | When modified by current user |
| ↳ `viewedByMeTime` | string | When last viewed by current user |
| ↳ `sharedWithMeTime` | string | When shared with current user |
| ↳ `lastModifyingUser` | json | User who last modified the file |
| ↳ `viewedByMe` | boolean | Whether viewed by current user |
| ↳ `modifiedByMe` | boolean | Whether modified by current user |
| ↳ `webViewLink` | string | URL to view in browser |
| ↳ `webContentLink` | string | Direct download URL |
| ↳ `iconLink` | string | URL to file icon |
| ↳ `thumbnailLink` | string | URL to thumbnail |
| ↳ `exportLinks` | json | Export format links |
| ↳ `size` | string | File size in bytes |
| ↳ `quotaBytesUsed` | string | Storage quota used |
| ↳ `md5Checksum` | string | MD5 hash |
| ↳ `sha1Checksum` | string | SHA-1 hash |
| ↳ `sha256Checksum` | string | SHA-256 hash |
| ↳ `parents` | json | Parent folder IDs |
| ↳ `spaces` | json | Spaces containing file |
| ↳ `driveId` | string | Shared drive ID |
| ↳ `capabilities` | json | User capabilities on file |
| ↳ `version` | string | Version number |
| ↳ `headRevisionId` | string | Head revision ID |
| ↳ `hasThumbnail` | boolean | Whether has thumbnail |
| ↳ `thumbnailVersion` | string | Thumbnail version |
| ↳ `imageMediaMetadata` | json | Image-specific metadata |
| ↳ `videoMediaMetadata` | json | Video-specific metadata |
| ↳ `isAppAuthorized` | boolean | Whether created by requesting app |
| ↳ `contentRestrictions` | json | Content restrictions |
| ↳ `linkShareMetadata` | json | Link share metadata |
| `nextPageToken` | string | Token for fetching the next page of results |

View File

@@ -63,15 +63,5 @@ Search the web with the Custom Search API
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Array of search results from Google |
| ↳ `title` | string | Title of the search result |
| ↳ `link` | string | URL of the search result |
| ↳ `snippet` | string | Snippet or description of the search result |
| ↳ `displayLink` | string | Display URL |
| ↳ `pagemap` | object | Additional page metadata |
| `searchInformation` | object | Information about the search query and results |
| ↳ `totalResults` | string | Total number of search results available |
| ↳ `searchTime` | number | Time taken to perform the search in seconds |
| ↳ `formattedSearchTime` | string | Formatted search time for display |
| ↳ `formattedTotalResults` | string | Formatted total results count for display |

View File

@@ -100,8 +100,6 @@ Read data from a Google Sheets spreadsheet
| --------- | ---- | ----------- |
| `data` | json | Sheet data including range and cell values |
| `metadata` | json | Spreadsheet metadata including ID and URL |
| ↳ `spreadsheetId` | string | Google Sheets spreadsheet ID |
| ↳ `spreadsheetUrl` | string | Spreadsheet URL |
### `google_sheets_write`
@@ -126,8 +124,6 @@ Write data to a Google Sheets spreadsheet
| `updatedColumns` | number | Number of columns updated |
| `updatedCells` | number | Number of cells updated |
| `metadata` | json | Spreadsheet metadata including ID and URL |
| ↳ `spreadsheetId` | string | Google Sheets spreadsheet ID |
| ↳ `spreadsheetUrl` | string | Spreadsheet URL |
### `google_sheets_update`
@@ -152,8 +148,6 @@ Update data in a Google Sheets spreadsheet
| `updatedColumns` | number | Number of columns updated |
| `updatedCells` | number | Number of cells updated |
| `metadata` | json | Spreadsheet metadata including ID and URL |
| ↳ `spreadsheetId` | string | Google Sheets spreadsheet ID |
| ↳ `spreadsheetUrl` | string | Spreadsheet URL |
### `google_sheets_append`
@@ -180,7 +174,5 @@ Append data to the end of a Google Sheets spreadsheet
| `updatedColumns` | number | Number of columns updated |
| `updatedCells` | number | Number of cells updated |
| `metadata` | json | Spreadsheet metadata including ID and URL |
| ↳ `spreadsheetId` | string | Google Sheets spreadsheet ID |
| ↳ `spreadsheetUrl` | string | Spreadsheet URL |

View File

@@ -80,12 +80,6 @@ Search and list all dashboards
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `dashboards` | array | List of dashboard search results |
| ↳ `id` | number | Dashboard ID |
| ↳ `uid` | string | Dashboard UID |
| ↳ `title` | string | Dashboard title |
| ↳ `url` | string | Dashboard URL path |
| ↳ `tags` | array | Dashboard tags |
| ↳ `folderTitle` | string | Parent folder title |
### `grafana_create_dashboard`
@@ -188,13 +182,6 @@ List all alert rules in the Grafana instance
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `rules` | array | List of alert rules |
| ↳ `uid` | string | Alert rule UID |
| ↳ `title` | string | Alert rule title |
| ↳ `condition` | string | Alert condition |
| ↳ `folderUID` | string | Parent folder UID |
| ↳ `ruleGroup` | string | Rule group name |
| ↳ `noDataState` | string | State when no data is returned |
| ↳ `execErrState` | string | State on execution error |
### `grafana_get_alert_rule`
@@ -323,10 +310,6 @@ List all alert notification contact points
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contactPoints` | array | List of contact points |
| ↳ `uid` | string | Contact point UID |
| ↳ `name` | string | Contact point name |
| ↳ `type` | string | Notification type \(email, slack, etc.\) |
| ↳ `settings` | object | Type-specific settings |
### `grafana_create_annotation`
@@ -377,19 +360,6 @@ Query annotations by time range, dashboard, or tags
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `annotations` | array | List of annotations |
| ↳ `id` | number | Annotation ID |
| ↳ `dashboardId` | number | Dashboard ID |
| ↳ `dashboardUID` | string | Dashboard UID |
| ↳ `created` | number | Creation timestamp in epoch ms |
| ↳ `updated` | number | Last update timestamp in epoch ms |
| ↳ `time` | number | Start time in epoch ms |
| ↳ `timeEnd` | number | End time in epoch ms |
| ↳ `text` | string | Annotation text |
| ↳ `tags` | array | Annotation tags |
| ↳ `login` | string | Login of the user who created the annotation |
| ↳ `email` | string | Email of the user who created the annotation |
| ↳ `avatarUrl` | string | Avatar URL of the user |
| ↳ `data` | json | Additional annotation data object from Grafana |
### `grafana_update_annotation`
@@ -451,12 +421,6 @@ List all data sources configured in Grafana
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `dataSources` | array | List of data sources |
| ↳ `id` | number | Data source ID |
| ↳ `uid` | string | Data source UID |
| ↳ `name` | string | Data source name |
| ↳ `type` | string | Data source type \(prometheus, mysql, etc.\) |
| ↳ `url` | string | Data source URL |
| ↳ `isDefault` | boolean | Whether this is the default data source |
### `grafana_get_data_source`
@@ -503,19 +467,6 @@ List all folders in Grafana
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `folders` | array | List of folders |
| ↳ `id` | number | Folder ID |
| ↳ `uid` | string | Folder UID |
| ↳ `title` | string | Folder title |
| ↳ `hasAcl` | boolean | Whether the folder has custom ACL permissions |
| ↳ `canSave` | boolean | Whether the current user can save the folder |
| ↳ `canEdit` | boolean | Whether the current user can edit the folder |
| ↳ `canAdmin` | boolean | Whether the current user has admin rights |
| ↳ `canDelete` | boolean | Whether the current user can delete the folder |
| ↳ `createdBy` | string | Username of who created the folder |
| ↳ `created` | string | Timestamp when the folder was created |
| ↳ `updatedBy` | string | Username of who last updated the folder |
| ↳ `updated` | string | Timestamp when the folder was last updated |
| ↳ `version` | number | Version number of the folder |
### `grafana_create_folder`

View File

@@ -64,19 +64,6 @@ List recordings from Grain with optional filters and pagination
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `recordings` | array | Array of recording objects |
| ↳ `id` | string | Recording UUID |
| ↳ `title` | string | Recording title |
| ↳ `start_datetime` | string | ISO8601 start timestamp |
| ↳ `end_datetime` | string | ISO8601 end timestamp |
| ↳ `duration_ms` | number | Duration in milliseconds |
| ↳ `media_type` | string | audio, transcript, or video |
| ↳ `source` | string | Recording source |
| ↳ `url` | string | URL to view in Grain |
| ↳ `thumbnail_url` | string | Thumbnail URL |
| ↳ `tags` | array | Array of tags |
| ↳ `teams` | array | Teams the recording belongs to |
| ↳ `meeting_type` | object | Meeting type info |
| `cursor` | string | Cursor for next page \(null if no more\) |
### `grain_get_recording`
@@ -132,11 +119,6 @@ Get the full transcript of a recording
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `transcript` | array | Array of transcript sections |
| ↳ `participant_id` | string | Participant UUID \(nullable\) |
| ↳ `speaker` | string | Speaker name |
| ↳ `start` | number | Start timestamp in ms |
| ↳ `end` | number | End timestamp in ms |
| ↳ `text` | string | Transcript text |
### `grain_list_teams`
@@ -153,8 +135,6 @@ List all teams in the workspace
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `teams` | array | Array of team objects |
| ↳ `id` | string | Team UUID |
| ↳ `name` | string | Team name |
### `grain_list_meeting_types`
@@ -171,9 +151,6 @@ List all meeting types in the workspace
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `meeting_types` | array | Array of meeting type objects |
| ↳ `id` | string | Meeting type UUID |
| ↳ `name` | string | Meeting type name |
| ↳ `scope` | string | internal or external |
### `grain_create_hook`
@@ -222,13 +199,6 @@ List all webhooks for the account
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `hooks` | array | Array of hook objects |
| ↳ `id` | string | Hook UUID |
| ↳ `enabled` | boolean | Whether hook is active |
| ↳ `hook_url` | string | Webhook URL |
| ↳ `hook_type` | string | Type: recording_added or upload_status |
| ↳ `filter` | object | Applied filters |
| ↳ `include` | object | Included fields |
| ↳ `inserted_at` | string | Creation timestamp |
### `grain_delete_hook`

View File

@@ -59,14 +59,6 @@ Query repositories in natural language and get answers with relevant code refere
| --------- | ---- | ----------- |
| `message` | string | AI-generated answer to the query |
| `sources` | array | Relevant code references that support the answer |
| ↳ `repository` | string | Repository name \(owner/repo\) |
| ↳ `remote` | string | Git remote \(github/gitlab\) |
| ↳ `branch` | string | Branch name |
| ↳ `filepath` | string | Path to the file |
| ↳ `linestart` | number | Starting line number |
| ↳ `lineend` | number | Ending line number |
| ↳ `summary` | string | Summary of the code section |
| ↳ `distance` | number | Similarity score \(lower = more relevant\) |
### `greptile_search`
@@ -88,14 +80,6 @@ Search repositories in natural language and get relevant code references without
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `sources` | array | Relevant code references matching the search query |
| ↳ `repository` | string | Repository name \(owner/repo\) |
| ↳ `remote` | string | Git remote \(github/gitlab\) |
| ↳ `branch` | string | Branch name |
| ↳ `filepath` | string | Path to the file |
| ↳ `linestart` | number | Starting line number |
| ↳ `lineend` | number | Ending line number |
| ↳ `summary` | string | Summary of the code section |
| ↳ `distance` | number | Similarity score \(lower = more relevant\) |
### `greptile_index_repo`

View File

@@ -54,14 +54,5 @@ Generate completions using Hugging Face Inference API
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Chat completion results |
| ↳ `content` | string | Generated text content |
| ↳ `model` | string | Model used for generation |
| ↳ `usage` | object | Token usage information |
| ↳ `prompt_tokens` | number | Number of tokens in the prompt |
| ↳ `completion_tokens` | number | Number of tokens in the completion |
| ↳ `total_tokens` | number | Total number of tokens used |
| ↳ `prompt_tokens` | number | Number of tokens in the prompt |
| ↳ `completion_tokens` | number | Number of tokens in the completion |
| ↳ `total_tokens` | number | Total number of tokens used |

View File

@@ -58,10 +58,5 @@ Generate images using OpenAI
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Generated image data |
| ↳ `content` | string | Image URL or identifier |
| ↳ `image` | string | Base64 encoded image data |
| ↳ `metadata` | object | Image generation metadata |
| ↳ `model` | string | Model used for image generation |
| ↳ `model` | string | Model used for image generation |

View File

@@ -57,35 +57,6 @@ List incidents from incident.io. Returns a list of incidents with their details
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incidents` | array | List of incidents |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `summary` | string | Brief summary of the incident |
| ↳ `description` | string | Detailed description of the incident |
| ↳ `mode` | string | Incident mode \(e.g., standard, retrospective\) |
| ↳ `call_url` | string | URL for the incident call/bridge |
| ↳ `severity` | object | Severity of the incident |
| ↳ `id` | string | Severity ID |
| ↳ `name` | string | Severity name |
| ↳ `rank` | number | Severity rank |
| ↳ `rank` | number | Severity rank |
| ↳ `status` | object | Current status of the incident |
| ↳ `id` | string | Status ID |
| ↳ `name` | string | Status name |
| ↳ `category` | string | Status category |
| ↳ `category` | string | Status category |
| ↳ `incident_type` | object | Type of the incident |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_url` | string | URL to the incident |
| ↳ `slack_channel_id` | string | Associated Slack channel ID |
| ↳ `slack_channel_name` | string | Associated Slack channel name |
| ↳ `visibility` | string | Incident visibility |
| `pagination_meta` | object | Pagination metadata |
| ↳ `after` | string | Cursor for the next page |
| ↳ `page_size` | number | Number of items per page |
| ↳ `total_record_count` | number | Total number of records available |
### `incidentio_incidents_create`
@@ -109,31 +80,6 @@ Create a new incident in incident.io. Requires idempotency_key, severity_id, and
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident` | object | The created incident object |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `summary` | string | Brief summary of the incident |
| ↳ `description` | string | Detailed description of the incident |
| ↳ `mode` | string | Incident mode \(e.g., standard, retrospective\) |
| ↳ `call_url` | string | URL for the incident call/bridge |
| ↳ `severity` | object | Severity of the incident |
| ↳ `id` | string | Severity ID |
| ↳ `name` | string | Severity name |
| ↳ `rank` | number | Severity rank |
| ↳ `rank` | number | Severity rank |
| ↳ `status` | object | Current status of the incident |
| ↳ `id` | string | Status ID |
| ↳ `name` | string | Status name |
| ↳ `category` | string | Status category |
| ↳ `category` | string | Status category |
| ↳ `incident_type` | object | Type of the incident |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_url` | string | URL to the incident |
| ↳ `slack_channel_id` | string | Associated Slack channel ID |
| ↳ `slack_channel_name` | string | Associated Slack channel name |
| ↳ `visibility` | string | Incident visibility |
### `incidentio_incidents_show`
@@ -151,34 +97,6 @@ Retrieve detailed information about a specific incident from incident.io by its
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident` | object | Detailed incident information |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `summary` | string | Brief summary of the incident |
| ↳ `description` | string | Detailed description of the incident |
| ↳ `mode` | string | Incident mode \(e.g., standard, retrospective\) |
| ↳ `call_url` | string | URL for the incident call/bridge |
| ↳ `permalink` | string | Permanent link to the incident |
| ↳ `severity` | object | Severity of the incident |
| ↳ `id` | string | Severity ID |
| ↳ `name` | string | Severity name |
| ↳ `rank` | number | Severity rank |
| ↳ `rank` | number | Severity rank |
| ↳ `status` | object | Current status of the incident |
| ↳ `id` | string | Status ID |
| ↳ `name` | string | Status name |
| ↳ `category` | string | Status category |
| ↳ `category` | string | Status category |
| ↳ `incident_type` | object | Type of the incident |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_url` | string | URL to the incident |
| ↳ `slack_channel_id` | string | Associated Slack channel ID |
| ↳ `slack_channel_name` | string | Associated Slack channel name |
| ↳ `visibility` | string | Incident visibility |
| ↳ `custom_field_entries` | array | Custom field values for the incident |
| ↳ `incident_role_assignments` | array | Role assignments for the incident |
### `incidentio_incidents_update`
@@ -202,31 +120,6 @@ Update an existing incident in incident.io. Can update name, summary, severity,
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident` | object | The updated incident object |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `summary` | string | Brief summary of the incident |
| ↳ `description` | string | Detailed description of the incident |
| ↳ `mode` | string | Incident mode \(e.g., standard, retrospective\) |
| ↳ `call_url` | string | URL for the incident call/bridge |
| ↳ `severity` | object | Severity of the incident |
| ↳ `id` | string | Severity ID |
| ↳ `name` | string | Severity name |
| ↳ `rank` | number | Severity rank |
| ↳ `rank` | number | Severity rank |
| ↳ `status` | object | Current status of the incident |
| ↳ `id` | string | Status ID |
| ↳ `name` | string | Status name |
| ↳ `category` | string | Status category |
| ↳ `category` | string | Status category |
| ↳ `incident_type` | object | Type of the incident |
| ↳ `id` | string | Type ID |
| ↳ `name` | string | Type name |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_url` | string | URL to the incident |
| ↳ `slack_channel_id` | string | Associated Slack channel ID |
| ↳ `slack_channel_name` | string | Associated Slack channel name |
| ↳ `visibility` | string | Incident visibility |
### `incidentio_actions_list`
@@ -245,31 +138,6 @@ List actions from incident.io. Optionally filter by incident ID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `actions` | array | List of actions |
| ↳ `id` | string | User ID |
| ↳ `description` | string | Action description |
| ↳ `assignee` | object | Assigned user |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `status` | string | Action status |
| ↳ `due_at` | string | Due date/time |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_id` | string | Associated incident ID |
| ↳ `creator` | object | User who created the action |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `completed_at` | string | Completion timestamp |
| ↳ `external_issue_reference` | object | External issue tracking reference |
| ↳ `provider` | string | Issue tracking provider \(e.g., Jira, Linear\) |
| ↳ `issue_name` | string | Issue identifier |
| ↳ `issue_permalink` | string | URL to the external issue |
| ↳ `provider` | string | Issue tracking provider \(e.g., Jira, Linear\) |
| ↳ `issue_name` | string | Issue identifier |
| ↳ `issue_permalink` | string | URL to the external issue |
### `incidentio_actions_show`
@@ -287,31 +155,6 @@ Get detailed information about a specific action from incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `action` | object | Action details |
| ↳ `id` | string | User ID |
| ↳ `description` | string | Action description |
| ↳ `assignee` | object | Assigned user |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `status` | string | Action status |
| ↳ `due_at` | string | Due date/time |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_id` | string | Associated incident ID |
| ↳ `creator` | object | User who created the action |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `completed_at` | string | Completion timestamp |
| ↳ `external_issue_reference` | object | External issue tracking reference |
| ↳ `provider` | string | Issue tracking provider \(e.g., Jira, Linear\) |
| ↳ `issue_name` | string | Issue identifier |
| ↳ `issue_permalink` | string | URL to the external issue |
| ↳ `provider` | string | Issue tracking provider \(e.g., Jira, Linear\) |
| ↳ `issue_name` | string | Issue identifier |
| ↳ `issue_permalink` | string | URL to the external issue |
### `incidentio_follow_ups_list`
@@ -330,38 +173,6 @@ List follow-ups from incident.io. Optionally filter by incident ID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `follow_ups` | array | List of follow-ups |
| ↳ `id` | string | User ID |
| ↳ `title` | string | Follow-up title |
| ↳ `description` | string | Priority description |
| ↳ `assignee` | object | Assigned user |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `status` | string | Follow-up status |
| ↳ `priority` | object | Follow-up priority |
| ↳ `id` | string | Priority ID |
| ↳ `name` | string | Priority name |
| ↳ `description` | string | Priority description |
| ↳ `rank` | number | Priority rank |
| ↳ `rank` | number | Priority rank |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_id` | string | Associated incident ID |
| ↳ `creator` | object | User who created the follow-up |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `completed_at` | string | Completion timestamp |
| ↳ `labels` | array | Labels associated with the follow-up |
| ↳ `external_issue_reference` | object | External issue tracking reference |
| ↳ `provider` | string | External provider name |
| ↳ `issue_name` | string | External issue name or ID |
| ↳ `issue_permalink` | string | Permalink to external issue |
| ↳ `provider` | string | External provider name |
| ↳ `issue_name` | string | External issue name or ID |
| ↳ `issue_permalink` | string | Permalink to external issue |
### `incidentio_follow_ups_show`
@@ -379,38 +190,6 @@ Get detailed information about a specific follow-up from incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `follow_up` | object | Follow-up details |
| ↳ `id` | string | User ID |
| ↳ `title` | string | Follow-up title |
| ↳ `description` | string | Priority description |
| ↳ `assignee` | object | Assigned user |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `status` | string | Follow-up status |
| ↳ `priority` | object | Follow-up priority |
| ↳ `id` | string | Priority ID |
| ↳ `name` | string | Priority name |
| ↳ `description` | string | Priority description |
| ↳ `rank` | number | Priority rank |
| ↳ `rank` | number | Priority rank |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `incident_id` | string | Associated incident ID |
| ↳ `creator` | object | User who created the follow-up |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `completed_at` | string | Completion timestamp |
| ↳ `labels` | array | Labels associated with the follow-up |
| ↳ `external_issue_reference` | object | External issue tracking reference |
| ↳ `provider` | string | External provider name |
| ↳ `issue_name` | string | External issue name or ID |
| ↳ `issue_permalink` | string | Permalink to external issue |
| ↳ `provider` | string | External provider name |
| ↳ `issue_name` | string | External issue name or ID |
| ↳ `issue_permalink` | string | Permalink to external issue |
### `incidentio_users_list`
@@ -428,10 +207,6 @@ List all users in your Incident.io workspace. Returns user details including id,
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `users` | array | List of users in the workspace |
| ↳ `id` | string | Unique identifier for the user |
| ↳ `name` | string | Full name of the user |
| ↳ `email` | string | Email address of the user |
| ↳ `role` | string | Role of the user in the workspace |
### `incidentio_users_show`
@@ -449,10 +224,6 @@ Get detailed information about a specific user in your Incident.io workspace by
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | Details of the requested user |
| ↳ `id` | string | Unique identifier for the user |
| ↳ `name` | string | Full name of the user |
| ↳ `email` | string | Email address of the user |
| ↳ `role` | string | Role of the user in the workspace |
### `incidentio_workflows_list`
@@ -471,15 +242,6 @@ List all workflows in your incident.io workspace.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `workflows` | array | List of workflows |
| ↳ `id` | string | Unique identifier for the workflow |
| ↳ `name` | string | Name of the workflow |
| ↳ `state` | string | State of the workflow \(active, draft, or disabled\) |
| ↳ `folder` | string | Folder the workflow belongs to |
| ↳ `created_at` | string | When the workflow was created |
| ↳ `updated_at` | string | When the workflow was last updated |
| `pagination_meta` | object | Pagination metadata |
| ↳ `after` | string | Cursor for next page |
| ↳ `page_size` | number | Number of results per page |
### `incidentio_workflows_show`
@@ -497,12 +259,6 @@ Get details of a specific workflow in incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `workflow` | object | The workflow details |
| ↳ `id` | string | Unique identifier for the workflow |
| ↳ `name` | string | Name of the workflow |
| ↳ `state` | string | State of the workflow \(active, draft, or disabled\) |
| ↳ `folder` | string | Folder the workflow belongs to |
| ↳ `created_at` | string | When the workflow was created |
| ↳ `updated_at` | string | When the workflow was last updated |
### `incidentio_workflows_update`
@@ -523,12 +279,6 @@ Update an existing workflow in incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `workflow` | object | The updated workflow |
| ↳ `id` | string | Unique identifier for the workflow |
| ↳ `name` | string | Name of the workflow |
| ↳ `state` | string | State of the workflow \(active, draft, or disabled\) |
| ↳ `folder` | string | Folder the workflow belongs to |
| ↳ `created_at` | string | When the workflow was created |
| ↳ `updated_at` | string | When the workflow was last updated |
### `incidentio_workflows_delete`
@@ -564,14 +314,6 @@ List all schedules in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `schedules` | array | List of schedules |
| ↳ `id` | string | The schedule ID |
| ↳ `name` | string | The schedule name |
| ↳ `timezone` | string | The schedule timezone |
| ↳ `created_at` | string | When the schedule was created |
| ↳ `updated_at` | string | When the schedule was last updated |
| `pagination_meta` | object | Pagination metadata |
| ↳ `after` | string | Cursor for next page |
| ↳ `page_size` | number | Number of results per page |
### `incidentio_schedules_create`
@@ -592,11 +334,6 @@ Create a new schedule in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `schedule` | object | The created schedule |
| ↳ `id` | string | The schedule ID |
| ↳ `name` | string | The schedule name |
| ↳ `timezone` | string | The schedule timezone |
| ↳ `created_at` | string | When the schedule was created |
| ↳ `updated_at` | string | When the schedule was last updated |
### `incidentio_schedules_show`
@@ -614,11 +351,6 @@ Get details of a specific schedule in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `schedule` | object | The schedule details |
| ↳ `id` | string | The schedule ID |
| ↳ `name` | string | The schedule name |
| ↳ `timezone` | string | The schedule timezone |
| ↳ `created_at` | string | When the schedule was created |
| ↳ `updated_at` | string | When the schedule was last updated |
### `incidentio_schedules_update`
@@ -640,11 +372,6 @@ Update an existing schedule in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `schedule` | object | The updated schedule |
| ↳ `id` | string | The schedule ID |
| ↳ `name` | string | The schedule name |
| ↳ `timezone` | string | The schedule timezone |
| ↳ `created_at` | string | When the schedule was created |
| ↳ `updated_at` | string | When the schedule was last updated |
### `incidentio_schedules_delete`
@@ -679,10 +406,6 @@ List all escalation policies in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `escalations` | array | List of escalation policies |
| ↳ `id` | string | The escalation policy ID |
| ↳ `name` | string | The escalation policy name |
| ↳ `created_at` | string | When the escalation policy was created |
| ↳ `updated_at` | string | When the escalation policy was last updated |
### `incidentio_escalations_create`
@@ -703,10 +426,6 @@ Create a new escalation policy in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `escalation` | object | The created escalation policy |
| ↳ `id` | string | The escalation policy ID |
| ↳ `name` | string | The escalation policy name |
| ↳ `created_at` | string | When the escalation policy was created |
| ↳ `updated_at` | string | When the escalation policy was last updated |
### `incidentio_escalations_show`
@@ -724,10 +443,6 @@ Get details of a specific escalation policy in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `escalation` | object | The escalation policy details |
| ↳ `id` | string | The escalation policy ID |
| ↳ `name` | string | The escalation policy name |
| ↳ `created_at` | string | When the escalation policy was created |
| ↳ `updated_at` | string | When the escalation policy was last updated |
### `incidentio_custom_fields_list`
@@ -744,12 +459,6 @@ List all custom fields from incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `custom_fields` | array | List of custom fields |
| ↳ `id` | string | Custom field ID |
| ↳ `name` | string | Custom field name |
| ↳ `description` | string | Custom field description |
| ↳ `field_type` | string | Custom field type |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
### `incidentio_custom_fields_create`
@@ -769,12 +478,6 @@ Create a new custom field in incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `custom_field` | object | Created custom field |
| ↳ `id` | string | Custom field ID |
| ↳ `name` | string | Custom field name |
| ↳ `description` | string | Custom field description |
| ↳ `field_type` | string | Custom field type |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
### `incidentio_custom_fields_show`
@@ -792,12 +495,6 @@ Get detailed information about a specific custom field from incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `custom_field` | object | Custom field details |
| ↳ `id` | string | Custom field ID |
| ↳ `name` | string | Custom field name |
| ↳ `description` | string | Custom field description |
| ↳ `field_type` | string | Custom field type |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
### `incidentio_custom_fields_update`
@@ -817,12 +514,6 @@ Update an existing custom field in incident.io.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `custom_field` | object | Updated custom field |
| ↳ `id` | string | Custom field ID |
| ↳ `name` | string | Custom field name |
| ↳ `description` | string | Custom field description |
| ↳ `field_type` | string | Custom field type |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
### `incidentio_custom_fields_delete`
@@ -856,10 +547,6 @@ List all severity levels configured in your Incident.io workspace. Returns sever
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `severities` | array | List of severity levels |
| ↳ `id` | string | Unique identifier for the severity level |
| ↳ `name` | string | Name of the severity level |
| ↳ `description` | string | Description of the severity level |
| ↳ `rank` | number | Rank/order of the severity level |
### `incidentio_incident_statuses_list`
@@ -876,10 +563,6 @@ List all incident statuses configured in your Incident.io workspace. Returns sta
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_statuses` | array | List of incident statuses |
| ↳ `id` | string | Unique identifier for the incident status |
| ↳ `name` | string | Name of the incident status |
| ↳ `description` | string | Description of the incident status |
| ↳ `category` | string | Category of the incident status |
### `incidentio_incident_types_list`
@@ -896,10 +579,6 @@ List all incident types configured in your Incident.io workspace. Returns type d
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_types` | array | List of incident types |
| ↳ `id` | string | Unique identifier for the incident type |
| ↳ `name` | string | Name of the incident type |
| ↳ `description` | string | Description of the incident type |
| ↳ `is_default` | boolean | Whether this is the default incident type |
### `incidentio_incident_roles_list`
@@ -916,15 +595,6 @@ List all incident roles in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_roles` | array | List of incident roles |
| ↳ `id` | string | The incident role ID |
| ↳ `name` | string | The incident role name |
| ↳ `description` | string | The incident role description |
| ↳ `instructions` | string | Instructions for the role |
| ↳ `shortform` | string | Short form abbreviation of the role |
| ↳ `role_type` | string | The type of role |
| ↳ `required` | boolean | Whether the role is required |
| ↳ `created_at` | string | When the role was created |
| ↳ `updated_at` | string | When the role was last updated |
### `incidentio_incident_roles_create`
@@ -945,15 +615,6 @@ Create a new incident role in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_role` | object | The created incident role |
| ↳ `id` | string | The incident role ID |
| ↳ `name` | string | The incident role name |
| ↳ `description` | string | The incident role description |
| ↳ `instructions` | string | Instructions for the role |
| ↳ `shortform` | string | Short form abbreviation of the role |
| ↳ `role_type` | string | The type of role |
| ↳ `required` | boolean | Whether the role is required |
| ↳ `created_at` | string | When the role was created |
| ↳ `updated_at` | string | When the role was last updated |
### `incidentio_incident_roles_show`
@@ -971,15 +632,6 @@ Get details of a specific incident role in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_role` | object | The incident role details |
| ↳ `id` | string | The incident role ID |
| ↳ `name` | string | The incident role name |
| ↳ `description` | string | The incident role description |
| ↳ `instructions` | string | Instructions for the role |
| ↳ `shortform` | string | Short form abbreviation of the role |
| ↳ `role_type` | string | The type of role |
| ↳ `required` | boolean | Whether the role is required |
| ↳ `created_at` | string | When the role was created |
| ↳ `updated_at` | string | When the role was last updated |
### `incidentio_incident_roles_update`
@@ -1001,15 +653,6 @@ Update an existing incident role in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_role` | object | The updated incident role |
| ↳ `id` | string | The incident role ID |
| ↳ `name` | string | The incident role name |
| ↳ `description` | string | The incident role description |
| ↳ `instructions` | string | Instructions for the role |
| ↳ `shortform` | string | Short form abbreviation of the role |
| ↳ `role_type` | string | The type of role |
| ↳ `required` | boolean | Whether the role is required |
| ↳ `created_at` | string | When the role was created |
| ↳ `updated_at` | string | When the role was last updated |
### `incidentio_incident_roles_delete`
@@ -1043,11 +686,6 @@ List all incident timestamp definitions in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_timestamps` | array | List of incident timestamp definitions |
| ↳ `id` | string | The timestamp ID |
| ↳ `name` | string | The timestamp name |
| ↳ `rank` | number | The rank/order of the timestamp |
| ↳ `created_at` | string | When the timestamp was created |
| ↳ `updated_at` | string | When the timestamp was last updated |
### `incidentio_incident_timestamps_show`
@@ -1065,11 +703,6 @@ Get details of a specific incident timestamp definition in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_timestamp` | object | The incident timestamp details |
| ↳ `id` | string | The timestamp ID |
| ↳ `name` | string | The timestamp name |
| ↳ `rank` | number | The rank/order of the timestamp |
| ↳ `created_at` | string | When the timestamp was created |
| ↳ `updated_at` | string | When the timestamp was last updated |
### `incidentio_incident_updates_list`
@@ -1089,30 +722,6 @@ List all updates for a specific incident in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `incident_updates` | array | List of incident updates |
| ↳ `id` | string | User ID |
| ↳ `incident_id` | string | The incident ID |
| ↳ `message` | string | The update message |
| ↳ `new_severity` | object | New severity if changed |
| ↳ `id` | string | Severity ID |
| ↳ `name` | string | Severity name |
| ↳ `rank` | number | Severity rank |
| ↳ `name` | string | User name |
| ↳ `rank` | number | Severity rank |
| ↳ `new_status` | object | New status if changed |
| ↳ `id` | string | Status ID |
| ↳ `name` | string | Status name |
| ↳ `category` | string | Status category |
| ↳ `category` | string | Status category |
| ↳ `updater` | object | User who created the update |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `email` | string | User email |
| ↳ `created_at` | string | When the update was created |
| ↳ `updated_at` | string | When the update was last modified |
| `pagination_meta` | object | Pagination information |
| ↳ `after` | string | Cursor for next page |
| ↳ `page_size` | number | Number of results per page |
### `incidentio_schedule_entries_list`
@@ -1134,23 +743,6 @@ List all entries for a specific schedule in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `schedule_entries` | array | List of schedule entries |
| ↳ `id` | string | User ID |
| ↳ `schedule_id` | string | The schedule ID |
| ↳ `user` | object | User assigned to this entry |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `start_at` | string | When the entry starts |
| ↳ `end_at` | string | When the entry ends |
| ↳ `layer_id` | string | The schedule layer ID |
| ↳ `created_at` | string | When the entry was created |
| ↳ `updated_at` | string | When the entry was last updated |
| `pagination_meta` | object | Pagination information |
| ↳ `after` | string | Cursor for next page |
| ↳ `after_url` | string | URL for next page |
| ↳ `page_size` | number | Number of results per page |
### `incidentio_schedule_overrides_create`
@@ -1174,19 +766,6 @@ Create a new schedule override in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `override` | object | The created schedule override |
| ↳ `id` | string | User ID |
| ↳ `rotation_id` | string | The rotation ID |
| ↳ `schedule_id` | string | The schedule ID |
| ↳ `user` | object | User assigned to this override |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `start_at` | string | When the override starts |
| ↳ `end_at` | string | When the override ends |
| ↳ `created_at` | string | When the override was created |
| ↳ `updated_at` | string | When the override was last updated |
### `incidentio_escalation_paths_create`
@@ -1206,41 +785,6 @@ Create a new escalation path in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `escalation_path` | object | The created escalation path |
| ↳ `id` | string | Target ID |
| ↳ `name` | string | The escalation path name |
| ↳ `path` | array | Array of escalation levels |
| ↳ `targets` | array | Targets for this level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `time_to_ack_seconds` | number | Time to acknowledge in seconds |
| ↳ `targets` | array | Targets for this level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `time_to_ack_seconds` | number | Time to acknowledge in seconds |
| ↳ `working_hours` | array | Working hours configuration |
| ↳ `weekday` | string | Day of week |
| ↳ `start_time` | string | Start time |
| ↳ `end_time` | string | End time |
| ↳ `weekday` | string | Day of week |
| ↳ `start_time` | string | Start time |
| ↳ `end_time` | string | End time |
| ↳ `created_at` | string | When the path was created |
| ↳ `updated_at` | string | When the path was last updated |
### `incidentio_escalation_paths_show`
@@ -1258,41 +802,6 @@ Get details of a specific escalation path in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `escalation_path` | object | The escalation path details |
| ↳ `id` | string | Target ID |
| ↳ `name` | string | The escalation path name |
| ↳ `path` | array | Array of escalation levels |
| ↳ `targets` | array | Targets for this level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `time_to_ack_seconds` | number | Time to acknowledge in seconds |
| ↳ `targets` | array | Targets for this level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `time_to_ack_seconds` | number | Time to acknowledge in seconds |
| ↳ `working_hours` | array | Working hours configuration |
| ↳ `weekday` | string | Day of week |
| ↳ `start_time` | string | Start time |
| ↳ `end_time` | string | End time |
| ↳ `weekday` | string | Day of week |
| ↳ `start_time` | string | Start time |
| ↳ `end_time` | string | End time |
| ↳ `created_at` | string | When the path was created |
| ↳ `updated_at` | string | When the path was last updated |
### `incidentio_escalation_paths_update`
@@ -1313,41 +822,6 @@ Update an existing escalation path in incident.io
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `escalation_path` | object | The updated escalation path |
| ↳ `id` | string | Target ID |
| ↳ `name` | string | The escalation path name |
| ↳ `path` | array | Array of escalation levels |
| ↳ `targets` | array | Targets for this level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `time_to_ack_seconds` | number | Time to acknowledge in seconds |
| ↳ `targets` | array | Targets for this level |
| ↳ `id` | string | Target ID |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `type` | string | Target type |
| ↳ `schedule_id` | string | Schedule ID if type is schedule |
| ↳ `user_id` | string | User ID if type is user |
| ↳ `urgency` | string | Urgency level |
| ↳ `time_to_ack_seconds` | number | Time to acknowledge in seconds |
| ↳ `working_hours` | array | Working hours configuration |
| ↳ `weekday` | string | Day of week |
| ↳ `start_time` | string | Start time |
| ↳ `end_time` | string | End time |
| ↳ `weekday` | string | Day of week |
| ↳ `start_time` | string | Start time |
| ↳ `end_time` | string | End time |
| ↳ `created_at` | string | When the path was created |
| ↳ `updated_at` | string | When the path was last updated |
### `incidentio_escalation_paths_delete`

View File

@@ -40,60 +40,6 @@ Create a new contact in Intercom with email, external_id, or role. Returns API-a
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Created contact object |
| ↳ `id` | string | Unique identifier for the contact |
| ↳ `type` | string | List type |
| ↳ `role` | string | Role of the contact \(user or lead\) |
| ↳ `email` | string | Email address of the contact |
| ↳ `phone` | string | Phone number of the contact |
| ↳ `name` | string | Name of the contact |
| ↳ `avatar` | string | Avatar URL of the contact |
| ↳ `owner_id` | string | ID of the admin assigned to this contact |
| ↳ `external_id` | string | External identifier for the contact |
| ↳ `created_at` | number | Unix timestamp when contact was created |
| ↳ `updated_at` | number | Unix timestamp when contact was last updated |
| ↳ `signed_up_at` | number | Unix timestamp when user signed up |
| ↳ `last_seen_at` | number | Unix timestamp when user was last seen |
| ↳ `workspace_id` | string | Workspace ID the contact belongs to |
| ↳ `custom_attributes` | object | Custom attributes set on the contact |
| ↳ `tags` | object | Tags associated with the contact |
| ↳ `type` | string | List type |
| ↳ `url` | string | URL to fetch tags |
| ↳ `data` | array | Array of tag objects |
| ↳ `has_more` | boolean | Whether there are more tags |
| ↳ `total_count` | number | Total number of tags |
| ↳ `url` | string | URL to fetch companies |
| ↳ `data` | array | Array of social profile objects |
| ↳ `has_more` | boolean | Whether there are more companies |
| ↳ `total_count` | number | Total number of companies |
| ↳ `notes` | object | Notes associated with the contact |
| ↳ `type` | string | List type |
| ↳ `url` | string | URL to fetch notes |
| ↳ `data` | array | Array of note objects |
| ↳ `has_more` | boolean | Whether there are more notes |
| ↳ `total_count` | number | Total number of notes |
| ↳ `companies` | object | Companies associated with the contact |
| ↳ `type` | string | List type |
| ↳ `url` | string | URL to fetch companies |
| ↳ `data` | array | Array of company objects |
| ↳ `has_more` | boolean | Whether there are more companies |
| ↳ `total_count` | number | Total number of companies |
| ↳ `location` | object | Location information for the contact |
| ↳ `type` | string | Location type |
| ↳ `city` | string | City |
| ↳ `region` | string | Region/State |
| ↳ `country` | string | Country |
| ↳ `country_code` | string | Country code |
| ↳ `continent_code` | string | Continent code |
| ↳ `city` | string | City |
| ↳ `region` | string | Region/State |
| ↳ `country` | string | Country |
| ↳ `country_code` | string | Country code |
| ↳ `continent_code` | string | Continent code |
| ↳ `social_profiles` | object | Social profiles of the contact |
| ↳ `type` | string | List type |
| ↳ `data` | array | Array of social profile objects |
| ↳ `unsubscribed_from_emails` | boolean | Whether contact is unsubscribed from emails |
| `contactId` | string | ID of the created contact |
### `intercom_get_contact`
@@ -110,25 +56,6 @@ Get a single contact by ID from Intercom. Returns API-aligned fields only.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Contact object |
| ↳ `id` | string | Unique identifier for the contact |
| ↳ `type` | string | Object type \(contact\) |
| ↳ `role` | string | Role of the contact \(user or lead\) |
| ↳ `email` | string | Email address of the contact |
| ↳ `phone` | string | Phone number of the contact |
| ↳ `name` | string | Name of the contact |
| ↳ `avatar` | string | Avatar URL of the contact |
| ↳ `owner_id` | string | ID of the admin assigned to this contact |
| ↳ `external_id` | string | External identifier for the contact |
| ↳ `created_at` | number | Unix timestamp when contact was created |
| ↳ `updated_at` | number | Unix timestamp when contact was last updated |
| ↳ `workspace_id` | string | Workspace ID the contact belongs to |
| ↳ `custom_attributes` | object | Custom attributes set on the contact |
| ↳ `tags` | object | Tags associated with the contact |
| ↳ `notes` | object | Notes associated with the contact |
| ↳ `companies` | object | Companies associated with the contact |
| ↳ `location` | object | Location information for the contact |
| ↳ `social_profiles` | object | Social profiles of the contact |
| ↳ `unsubscribed_from_emails` | boolean | Whether contact is unsubscribed from emails |
### `intercom_update_contact`
@@ -157,26 +84,6 @@ Update an existing contact in Intercom. Returns API-aligned fields only.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Updated contact object |
| ↳ `id` | string | Unique identifier for the contact |
| ↳ `type` | string | Object type \(contact\) |
| ↳ `role` | string | Role of the contact \(user or lead\) |
| ↳ `email` | string | Email address of the contact |
| ↳ `phone` | string | Phone number of the contact |
| ↳ `name` | string | Name of the contact |
| ↳ `avatar` | string | Avatar URL of the contact |
| ↳ `owner_id` | string | ID of the admin assigned to this contact |
| ↳ `external_id` | string | External identifier for the contact |
| ↳ `created_at` | number | Unix timestamp when contact was created |
| ↳ `updated_at` | number | Unix timestamp when contact was last updated |
| ↳ `workspace_id` | string | Workspace ID the contact belongs to |
| ↳ `custom_attributes` | object | Custom attributes set on the contact |
| ↳ `tags` | object | Tags associated with the contact |
| ↳ `notes` | object | Notes associated with the contact |
| ↳ `companies` | object | Companies associated with the contact |
| ↳ `location` | object | Location information for the contact |
| ↳ `social_profiles` | object | Social profiles of the contact |
| ↳ `unsubscribed_from_emails` | boolean | Whether contact is unsubscribed from emails |
| `contactId` | string | ID of the updated contact |
### `intercom_list_contacts`
@@ -194,25 +101,6 @@ List all contacts from Intercom with pagination support
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | array | Array of contact objects |
| ↳ `id` | string | Unique identifier for the contact |
| ↳ `type` | string | Object type \(contact\) |
| ↳ `role` | string | Role of the contact \(user or lead\) |
| ↳ `email` | string | Email address of the contact |
| ↳ `phone` | string | Phone number of the contact |
| ↳ `name` | string | Name of the contact |
| ↳ `external_id` | string | External identifier for the contact |
| ↳ `created_at` | number | Unix timestamp when contact was created |
| ↳ `updated_at` | number | Unix timestamp when contact was last updated |
| ↳ `workspace_id` | string | Workspace ID the contact belongs to |
| ↳ `custom_attributes` | object | Custom attributes set on the contact |
| ↳ `tags` | object | Tags associated with the contact |
| ↳ `companies` | object | Companies associated with the contact |
| `pages` | object | Pagination information |
| ↳ `type` | string | Pages type identifier |
| ↳ `page` | number | Current page number |
| ↳ `per_page` | number | Number of results per page |
| ↳ `total_pages` | number | Total number of pages |
| `total_count` | number | Total number of contacts |
### `intercom_search_contacts`
@@ -233,33 +121,6 @@ Search for contacts in Intercom using a query
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | array | Array of matching contact objects |
| ↳ `id` | string | Unique identifier for the contact |
| ↳ `type` | string | Object type \(contact\) |
| ↳ `role` | string | Role of the contact \(user or lead\) |
| ↳ `email` | string | Email address of the contact |
| ↳ `phone` | string | Phone number of the contact |
| ↳ `name` | string | Name of the contact |
| ↳ `avatar` | string | Avatar URL of the contact |
| ↳ `owner_id` | string | ID of the admin assigned to this contact |
| ↳ `external_id` | string | External identifier for the contact |
| ↳ `created_at` | number | Unix timestamp when contact was created |
| ↳ `updated_at` | number | Unix timestamp when contact was last updated |
| ↳ `signed_up_at` | number | Unix timestamp when user signed up |
| ↳ `last_seen_at` | number | Unix timestamp when user was last seen |
| ↳ `workspace_id` | string | Workspace ID the contact belongs to |
| ↳ `custom_attributes` | object | Custom attributes set on the contact |
| ↳ `tags` | object | Tags associated with the contact |
| ↳ `notes` | object | Notes associated with the contact |
| ↳ `companies` | object | Companies associated with the contact |
| ↳ `location` | object | Location information for the contact |
| ↳ `social_profiles` | object | Social profiles of the contact |
| ↳ `unsubscribed_from_emails` | boolean | Whether contact is unsubscribed from emails |
| `pages` | object | Pagination information |
| ↳ `type` | string | Pages type identifier |
| ↳ `page` | number | Current page number |
| ↳ `per_page` | number | Number of results per page |
| ↳ `total_pages` | number | Total number of pages |
| `total_count` | number | Total number of matching contacts |
### `intercom_delete_contact`
@@ -301,25 +162,6 @@ Create or update a company in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Created or updated company object |
| ↳ `id` | string | Unique identifier for the company |
| ↳ `type` | string | Segment list type |
| ↳ `app_id` | string | Intercom app ID |
| ↳ `company_id` | string | Your unique identifier for the company |
| ↳ `name` | string | Name of the company |
| ↳ `website` | string | Company website URL |
| ↳ `plan` | object | Company plan information |
| ↳ `size` | number | Number of employees |
| ↳ `industry` | string | Industry the company operates in |
| ↳ `monthly_spend` | number | Monthly revenue from this company |
| ↳ `session_count` | number | Number of sessions |
| ↳ `user_count` | number | Number of users in the company |
| ↳ `created_at` | number | Unix timestamp when company was created |
| ↳ `updated_at` | number | Unix timestamp when company was last updated |
| ↳ `remote_created_at` | number | Unix timestamp when company was created by you |
| ↳ `custom_attributes` | object | Custom attributes set on the company |
| ↳ `tags` | array | Array of tag objects |
| ↳ `segments` | array | Array of segment objects |
| `companyId` | string | ID of the created/updated company |
### `intercom_get_company`
@@ -336,23 +178,6 @@ Retrieve a single company by ID from Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Company object |
| ↳ `id` | string | Unique identifier for the company |
| ↳ `type` | string | Object type \(company\) |
| ↳ `app_id` | string | Intercom app ID |
| ↳ `company_id` | string | Your unique identifier for the company |
| ↳ `name` | string | Name of the company |
| ↳ `website` | string | Company website URL |
| ↳ `plan` | object | Company plan information |
| ↳ `size` | number | Number of employees |
| ↳ `industry` | string | Industry the company operates in |
| ↳ `monthly_spend` | number | Monthly revenue from this company |
| ↳ `session_count` | number | Number of sessions |
| ↳ `user_count` | number | Number of users in the company |
| ↳ `created_at` | number | Unix timestamp when company was created |
| ↳ `updated_at` | number | Unix timestamp when company was last updated |
| ↳ `custom_attributes` | object | Custom attributes set on the company |
| ↳ `tags` | object | Tags associated with the company |
| ↳ `segments` | object | Segments the company belongs to |
### `intercom_list_companies`
@@ -371,28 +196,6 @@ List all companies from Intercom with pagination support. Note: This endpoint ha
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `companies` | array | Array of company objects |
| ↳ `id` | string | Unique identifier for the company |
| ↳ `type` | string | Object type \(company\) |
| ↳ `app_id` | string | Intercom app ID |
| ↳ `company_id` | string | Your unique identifier for the company |
| ↳ `name` | string | Name of the company |
| ↳ `website` | string | Company website URL |
| ↳ `plan` | object | Company plan information |
| ↳ `monthly_spend` | number | Monthly revenue from this company |
| ↳ `session_count` | number | Number of sessions |
| ↳ `user_count` | number | Number of users in the company |
| ↳ `created_at` | number | Unix timestamp when company was created |
| ↳ `updated_at` | number | Unix timestamp when company was last updated |
| ↳ `custom_attributes` | object | Custom attributes set on the company |
| ↳ `tags` | object | Tags associated with the company |
| ↳ `segments` | object | Segments the company belongs to |
| `pages` | object | Pagination information |
| ↳ `type` | string | Pages type identifier |
| ↳ `page` | number | Current page number |
| ↳ `per_page` | number | Number of results per page |
| ↳ `total_pages` | number | Total number of pages |
| `total_count` | number | Total number of companies |
| `success` | boolean | Operation success status |
### `intercom_get_conversation`
@@ -411,26 +214,6 @@ Retrieve a single conversation by ID from Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversation` | object | Conversation object |
| ↳ `id` | string | Unique identifier for the conversation |
| ↳ `type` | string | Object type \(conversation\) |
| ↳ `title` | string | Title of the conversation |
| ↳ `created_at` | number | Unix timestamp when conversation was created |
| ↳ `updated_at` | number | Unix timestamp when conversation was last updated |
| ↳ `waiting_since` | number | Unix timestamp when waiting for reply |
| ↳ `snoozed_until` | number | Unix timestamp when snooze ends |
| ↳ `open` | boolean | Whether the conversation is open |
| ↳ `state` | string | State of the conversation |
| ↳ `read` | boolean | Whether the conversation has been read |
| ↳ `priority` | string | Priority of the conversation |
| ↳ `admin_assignee_id` | number | ID of assigned admin |
| ↳ `team_assignee_id` | string | ID of assigned team |
| ↳ `tags` | object | Tags on the conversation |
| ↳ `source` | object | Source of the conversation |
| ↳ `contacts` | object | Contacts in the conversation |
| ↳ `teammates` | object | Teammates in the conversation |
| ↳ `conversation_parts` | object | Parts of the conversation |
| ↳ `statistics` | object | Conversation statistics |
| `success` | boolean | Operation success status |
### `intercom_list_conversations`
@@ -450,28 +233,6 @@ List all conversations from Intercom with pagination support
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversations` | array | Array of conversation objects |
| ↳ `id` | string | Unique identifier for the conversation |
| ↳ `type` | string | Object type \(conversation\) |
| ↳ `title` | string | Title of the conversation |
| ↳ `created_at` | number | Unix timestamp when conversation was created |
| ↳ `updated_at` | number | Unix timestamp when conversation was last updated |
| ↳ `waiting_since` | number | Unix timestamp when waiting for reply |
| ↳ `open` | boolean | Whether the conversation is open |
| ↳ `state` | string | State of the conversation |
| ↳ `read` | boolean | Whether the conversation has been read |
| ↳ `priority` | string | Priority of the conversation |
| ↳ `admin_assignee_id` | number | ID of assigned admin |
| ↳ `team_assignee_id` | string | ID of assigned team |
| ↳ `tags` | object | Tags on the conversation |
| ↳ `source` | object | Source of the conversation |
| ↳ `contacts` | object | Contacts in the conversation |
| `pages` | object | Pagination information |
| ↳ `type` | string | Pages type identifier |
| ↳ `page` | number | Current page number |
| ↳ `per_page` | number | Number of results per page |
| ↳ `total_pages` | number | Total number of pages |
| `total_count` | number | Total number of conversations |
| `success` | boolean | Operation success status |
### `intercom_reply_conversation`
@@ -493,24 +254,6 @@ Reply to a conversation as an admin in Intercom
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversation` | object | Updated conversation object |
| ↳ `id` | string | Unique identifier for the conversation |
| ↳ `type` | string | Object type \(conversation\) |
| ↳ `title` | string | Title of the conversation |
| ↳ `created_at` | number | Unix timestamp when conversation was created |
| ↳ `updated_at` | number | Unix timestamp when conversation was last updated |
| ↳ `waiting_since` | number | Unix timestamp when waiting for reply |
| ↳ `open` | boolean | Whether the conversation is open |
| ↳ `state` | string | State of the conversation |
| ↳ `read` | boolean | Whether the conversation has been read |
| ↳ `priority` | string | Priority of the conversation |
| ↳ `admin_assignee_id` | number | ID of assigned admin |
| ↳ `team_assignee_id` | string | ID of assigned team |
| ↳ `tags` | object | Tags on the conversation |
| ↳ `source` | object | Source of the conversation |
| ↳ `contacts` | object | Contacts in the conversation |
| ↳ `conversation_parts` | object | Parts of the conversation |
| `conversationId` | string | ID of the conversation |
| `success` | boolean | Operation success status |
### `intercom_search_conversations`
@@ -531,28 +274,6 @@ Search for conversations in Intercom using a query. Returns API-aligned fields o
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `conversations` | array | Array of matching conversation objects |
| ↳ `id` | string | Unique identifier for the conversation |
| ↳ `type` | string | Object type \(conversation\) |
| ↳ `title` | string | Title of the conversation |
| ↳ `created_at` | number | Unix timestamp when conversation was created |
| ↳ `updated_at` | number | Unix timestamp when conversation was last updated |
| ↳ `waiting_since` | number | Unix timestamp when waiting for reply |
| ↳ `open` | boolean | Whether the conversation is open |
| ↳ `state` | string | State of the conversation |
| ↳ `read` | boolean | Whether the conversation has been read |
| ↳ `priority` | string | Priority of the conversation |
| ↳ `admin_assignee_id` | number | ID of assigned admin |
| ↳ `team_assignee_id` | string | ID of assigned team |
| ↳ `tags` | object | Tags on the conversation |
| ↳ `source` | object | Source of the conversation |
| ↳ `contacts` | object | Contacts in the conversation |
| `pages` | object | Pagination information |
| ↳ `type` | string | Pages type identifier |
| ↳ `page` | number | Current page number |
| ↳ `per_page` | number | Number of results per page |
| ↳ `total_pages` | number | Total number of pages |
| `total_count` | number | Total number of matching conversations |
| `success` | boolean | Operation success status |
### `intercom_create_ticket`
@@ -575,23 +296,6 @@ Create a new ticket in Intercom. Returns API-aligned fields only.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ticket` | object | Created ticket object |
| ↳ `id` | string | Unique identifier for the ticket |
| ↳ `type` | string | Object type \(ticket\) |
| ↳ `ticket_id` | string | Ticket ID |
| ↳ `ticket_type` | object | Type of the ticket |
| ↳ `ticket_attributes` | object | Attributes of the ticket |
| ↳ `ticket_state` | string | State of the ticket |
| ↳ `ticket_state_internal_label` | string | Internal label for ticket state |
| ↳ `ticket_state_external_label` | string | External label for ticket state |
| ↳ `created_at` | number | Unix timestamp when ticket was created |
| ↳ `updated_at` | number | Unix timestamp when ticket was last updated |
| ↳ `contacts` | object | Contacts associated with the ticket |
| ↳ `admin_assignee_id` | string | ID of assigned admin |
| ↳ `team_assignee_id` | string | ID of assigned team |
| ↳ `is_shared` | boolean | Whether the ticket is shared |
| ↳ `open` | boolean | Whether the ticket is open |
| `ticketId` | string | ID of the created ticket |
| `success` | boolean | Operation success status |
### `intercom_get_ticket`
@@ -608,23 +312,6 @@ Retrieve a single ticket by ID from Intercom. Returns API-aligned fields only.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ticket` | object | Ticket object |
| ↳ `id` | string | Unique identifier for the ticket |
| ↳ `type` | string | Object type \(ticket\) |
| ↳ `ticket_id` | string | Ticket ID |
| ↳ `ticket_type` | object | Type of the ticket |
| ↳ `ticket_attributes` | object | Attributes of the ticket |
| ↳ `ticket_state` | string | State of the ticket |
| ↳ `ticket_state_internal_label` | string | Internal label for ticket state |
| ↳ `ticket_state_external_label` | string | External label for ticket state |
| ↳ `created_at` | number | Unix timestamp when ticket was created |
| ↳ `updated_at` | number | Unix timestamp when ticket was last updated |
| ↳ `contacts` | object | Contacts associated with the ticket |
| ↳ `admin_assignee_id` | string | ID of assigned admin |
| ↳ `team_assignee_id` | string | ID of assigned team |
| ↳ `is_shared` | boolean | Whether the ticket is shared |
| ↳ `open` | boolean | Whether the ticket is open |
| `ticketId` | string | ID of the retrieved ticket |
| `success` | boolean | Operation success status |
### `intercom_create_message`
@@ -649,14 +336,5 @@ Create and send a new admin-initiated message in Intercom. Returns API-aligned f
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | object | Created message object |
| ↳ `id` | string | Unique identifier for the message |
| ↳ `type` | string | Object type \(message\) |
| ↳ `created_at` | number | Unix timestamp when message was created |
| ↳ `body` | string | Body of the message |
| ↳ `message_type` | string | Type of the message \(in_app or email\) |
| ↳ `conversation_id` | string | ID of the conversation created |
| ↳ `owner` | object | Owner of the message |
| `messageId` | string | ID of the created message |
| `success` | boolean | Operation success status |

View File

@@ -108,7 +108,6 @@ Get a single service request from Jira Service Management
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ts` | string | Timestamp of the operation |
| `request` | json | The service request object |
### `jsm_get_requests`

View File

@@ -57,15 +57,6 @@ Search for similar content in a knowledge base using vector similarity
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Array of search results from the knowledge base |
| ↳ `documentId` | string | Document ID |
| ↳ `documentName` | string | Document name |
| ↳ `content` | string | Content of the result |
| ↳ `chunkIndex` | number | Index of the chunk within the document |
| ↳ `similarity` | number | Similarity score of the result |
| ↳ `metadata` | object | Metadata of the result, including tags |
| `query` | string | The search query that was executed |
| `totalResults` | number | Total number of results found |
| `cost` | object | Cost information for the search operation |
### `knowledge_upload_chunk`
@@ -84,18 +75,6 @@ Upload a new chunk to a document in a knowledge base
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | object | Information about the uploaded chunk |
| ↳ `chunkId` | string | Chunk ID |
| ↳ `chunkIndex` | number | Index of the chunk within the document |
| ↳ `content` | string | Content of the chunk |
| ↳ `contentLength` | number | Length of the content in characters |
| ↳ `tokenCount` | number | Number of tokens in the chunk |
| ↳ `enabled` | boolean | Whether the chunk is enabled |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| `message` | string | Success or error message describing the operation result |
| `documentId` | string | ID of the document the chunk was added to |
| `documentName` | string | Name of the document the chunk was added to |
| `cost` | object | Cost information for the upload operation |
### `knowledge_create_document`
@@ -127,13 +106,5 @@ Create a new document in a knowledge base
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | object | Information about the created document |
| ↳ `documentId` | string | Document ID |
| ↳ `documentName` | string | Document name |
| ↳ `type` | string | Document type |
| ↳ `enabled` | boolean | Whether the document is enabled |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| `message` | string | Success or error message describing the operation result |
| `documentId` | string | ID of the created document |

View File

@@ -1,77 +0,0 @@
---
title: LangSmith
description: Forward workflow runs to LangSmith for observability
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="langsmith"
color="#181C1E"
/>
## Usage Instructions
Send run data to LangSmith to trace executions, attach metadata, and monitor workflow performance.
## Tools
### `langsmith_create_run`
Forward a single run to LangSmith for ingestion.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | LangSmith API key |
| `id` | string | No | Unique run identifier |
| `name` | string | Yes | Run name |
| `run_type` | string | Yes | Run type \(tool, chain, llm, retriever, embedding, prompt, parser\) |
| `start_time` | string | No | Run start time in ISO-8601 format |
| `end_time` | string | No | Run end time in ISO-8601 format |
| `inputs` | json | No | Inputs payload |
| `run_outputs` | json | No | Outputs payload |
| `extra` | json | No | Additional metadata \(extra\) |
| `tags` | json | No | Array of tag strings |
| `parent_run_id` | string | No | Parent run ID |
| `trace_id` | string | No | Trace ID |
| `session_id` | string | No | Session ID |
| `session_name` | string | No | Session name |
| `status` | string | No | Run status |
| `error` | string | No | Error details |
| `dotted_order` | string | No | Dotted order string |
| `events` | json | No | Structured events array |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `accepted` | boolean | Whether the run was accepted for ingestion |
| `runId` | string | Run identifier provided in the request |
| `message` | string | Response message from LangSmith |
### `langsmith_create_runs_batch`
Forward multiple runs to LangSmith in a single batch.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | LangSmith API key |
| `post` | json | No | Array of new runs to ingest |
| `patch` | json | No | Array of runs to update/patch |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `accepted` | boolean | Whether the batch was accepted for ingestion |
| `runIds` | array | Run identifiers provided in the request |
| `message` | string | Response message from LangSmith |
| `messages` | array | Per-run response messages, when provided |

View File

@@ -39,14 +39,6 @@ Retrieves campaign activities and steps performed, including email opens, clicks
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `activities` | array | List of activities |
| ↳ `_id` | string | Activity ID |
| ↳ `type` | string | Activity type |
| ↳ `leadId` | string | Associated lead ID |
| ↳ `campaignId` | string | Campaign ID |
| ↳ `sequenceId` | string | Sequence ID |
| ↳ `stepId` | string | Step ID |
| ↳ `createdAt` | string | When the activity occurred |
| `count` | number | Number of activities returned |
### `lemlist_get_lead`

View File

@@ -60,27 +60,6 @@ Fetch and filter issues from Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issues` | array | Array of filtered issues from Linear |
| ↳ `id` | string | Issue ID |
| ↳ `title` | string | Issue title |
| ↳ `description` | string | Issue description |
| ↳ `priority` | number | Issue priority |
| ↳ `estimate` | number | Issue estimate |
| ↳ `url` | string | Issue URL |
| ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `state` | object | Issue state |
| ↳ `assignee` | object | Assigned user |
| ↳ `teamId` | string | Team ID |
| ↳ `teamName` | string | Team name |
| ↳ `projectId` | string | Project ID |
| ↳ `projectName` | string | Project name |
| ↳ `cycleId` | string | Cycle ID |
| ↳ `cycleNumber` | number | Cycle number |
| ↳ `cycleName` | string | Cycle name |
| ↳ `labels` | array | Issue labels |
| `hasNextPage` | boolean | Whether there are more results available |
| `endCursor` | string | Cursor for fetching the next page \(use as |
### `linear_get_issue`
@@ -97,17 +76,6 @@ Get a single issue by ID from Linear with full details
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The issue with full details |
| ↳ `id` | string | Issue ID |
| ↳ `title` | string | Issue title |
| ↳ `description` | string | Issue description |
| ↳ `priority` | number | Issue priority \(0-4\) |
| ↳ `estimate` | number | Issue estimate in points |
| ↳ `url` | string | Issue URL |
| ↳ `state` | object | Issue state/status |
| ↳ `assignee` | object | Assigned user |
| ↳ `labels` | array | Issue labels |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
### `linear_create_issue`
@@ -137,25 +105,6 @@ Create a new issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The created issue with all its properties |
| ↳ `id` | string | Issue ID |
| ↳ `title` | string | Issue title |
| ↳ `description` | string | Issue description |
| ↳ `priority` | number | Issue priority |
| ↳ `estimate` | number | Issue estimate |
| ↳ `url` | string | Issue URL |
| ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
| ↳ `state` | object | Issue state |
| ↳ `assignee` | object | Assigned user |
| ↳ `teamId` | string | Team ID |
| ↳ `projectId` | string | Project ID |
| ↳ `cycleId` | string | Cycle ID |
| ↳ `cycleNumber` | number | Cycle number |
| ↳ `cycleName` | string | Cycle name |
| ↳ `parentId` | string | Parent issue ID |
| ↳ `parentTitle` | string | Parent issue title |
| ↳ `projectMilestoneId` | string | Project milestone ID |
| ↳ `projectMilestoneName` | string | Project milestone name |
| ↳ `labels` | array | Issue labels |
### `linear_update_issue`
@@ -185,22 +134,6 @@ Update an existing issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The updated issue |
| ↳ `id` | string | Issue ID |
| ↳ `title` | string | Issue title |
| ↳ `description` | string | Issue description |
| ↳ `priority` | number | Issue priority |
| ↳ `estimate` | number | Issue estimate |
| ↳ `state` | object | Issue state |
| ↳ `assignee` | object | Assigned user |
| ↳ `labels` | array | Issue labels |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `dueDate` | string | Due date \(YYYY-MM-DD\) |
| ↳ `projectId` | string | Project ID |
| ↳ `cycleId` | string | Cycle ID |
| ↳ `cycleNumber` | number | Cycle number |
| ↳ `cycleName` | string | Cycle name |
| ↳ `parentId` | string | Parent issue ID |
| ↳ `parentTitle` | string | Parent issue title |
### `linear_archive_issue`
@@ -270,16 +203,6 @@ Search for issues in Linear using full-text search
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issues` | array | Array of matching issues |
| ↳ `id` | string | Issue ID |
| ↳ `title` | string | Issue title |
| ↳ `description` | string | Issue description |
| ↳ `priority` | number | Issue priority |
| ↳ `state` | object | Issue state |
| ↳ `assignee` | object | Assigned user |
| ↳ `labels` | array | Issue labels |
| `pageInfo` | object | Pagination information |
| ↳ `hasNextPage` | boolean | Whether there are more results |
| ↳ `endCursor` | string | Cursor for next page |
### `linear_add_label_to_issue`
@@ -333,11 +256,6 @@ Add a comment to an issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comment` | object | The created comment |
| ↳ `id` | string | Comment ID |
| ↳ `body` | string | Comment text |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `user` | object | User who created the comment |
| ↳ `issue` | object | Associated issue |
### `linear_update_comment`
@@ -355,10 +273,6 @@ Edit a comment in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comment` | object | The updated comment |
| ↳ `id` | string | Comment ID |
| ↳ `body` | string | Comment text |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `user` | object | User who created the comment |
### `linear_delete_comment`
@@ -393,14 +307,6 @@ List all comments on an issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comments` | array | Array of comments on the issue |
| ↳ `id` | string | Comment ID |
| ↳ `body` | string | Comment text |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `user` | object | User who created the comment |
| `pageInfo` | object | Pagination information |
| ↳ `hasNextPage` | boolean | Whether there are more results |
| ↳ `endCursor` | string | Cursor for next page |
### `linear_list_projects`
@@ -420,14 +326,6 @@ List projects in Linear with optional filtering
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projects` | array | Array of projects |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `description` | string | Project description |
| ↳ `state` | string | Project state |
| ↳ `priority` | number | Project priority |
| ↳ `lead` | object | Project lead |
| ↳ `teams` | array | Teams associated with project |
| `pageInfo` | object | Pagination information |
### `linear_get_project`
@@ -444,15 +342,6 @@ Get a single project by ID from Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The project with full details |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `description` | string | Project description |
| ↳ `state` | string | Project state |
| ↳ `priority` | number | Project priority |
| ↳ `startDate` | string | Start date |
| ↳ `targetDate` | string | Target completion date |
| ↳ `lead` | object | Project lead |
| ↳ `teams` | array | Associated teams |
### `linear_create_project`
@@ -475,13 +364,6 @@ Create a new project in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The created project |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `description` | string | Project description |
| ↳ `state` | string | Project state |
| ↳ `priority` | number | Project priority |
| ↳ `lead` | object | Project lead |
| ↳ `teams` | array | Associated teams |
### `linear_update_project`
@@ -505,15 +387,6 @@ Update an existing project in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The updated project |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `description` | string | Project description |
| ↳ `state` | string | Project state |
| ↳ `priority` | number | Project priority |
| ↳ `startDate` | string | Project start date |
| ↳ `targetDate` | string | Project target date |
| ↳ `lead` | object | Project lead |
| ↳ `teams` | array | Associated teams |
### `linear_archive_project`
@@ -549,14 +422,6 @@ List all users in the Linear workspace
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `users` | array | Array of workspace users |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `displayName` | string | Display name |
| ↳ `active` | boolean | Whether user is active |
| ↳ `admin` | boolean | Whether user is admin |
| ↳ `avatarUrl` | string | Avatar URL |
| `pageInfo` | object | Pagination information |
### `linear_list_teams`
@@ -574,11 +439,6 @@ List all teams in the Linear workspace
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `teams` | array | Array of teams |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `key` | string | Team key \(used in issue identifiers\) |
| ↳ `description` | string | Team description |
| `pageInfo` | object | Pagination information |
### `linear_get_viewer`
@@ -594,13 +454,6 @@ Get the currently authenticated user (viewer) information
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | The currently authenticated user |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `displayName` | string | Display name |
| ↳ `active` | boolean | Whether user is active |
| ↳ `admin` | boolean | Whether user is admin |
| ↳ `avatarUrl` | string | Avatar URL |
### `linear_list_labels`
@@ -619,12 +472,6 @@ List all labels in Linear workspace or team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `labels` | array | Array of labels |
| ↳ `id` | string | Label ID |
| ↳ `name` | string | Label name |
| ↳ `color` | string | Label color \(hex\) |
| ↳ `description` | string | Label description |
| ↳ `team` | object | Team this label belongs to |
| `pageInfo` | object | Pagination information |
### `linear_create_label`
@@ -644,11 +491,6 @@ Create a new label in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `label` | object | The created label |
| ↳ `id` | string | Label ID |
| ↳ `name` | string | Label name |
| ↳ `color` | string | Label color |
| ↳ `description` | string | Label description |
| ↳ `team` | object | Team this label belongs to |
### `linear_update_label`
@@ -668,10 +510,6 @@ Update an existing label in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `label` | object | The updated label |
| ↳ `id` | string | Label ID |
| ↳ `name` | string | Label name |
| ↳ `color` | string | Label color |
| ↳ `description` | string | Label description |
### `linear_archive_label`
@@ -707,13 +545,6 @@ List all workflow states (statuses) in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `states` | array | Array of workflow states |
| ↳ `id` | string | State ID |
| ↳ `name` | string | State name \(e.g., |
| ↳ `type` | string | State type \(e.g., |
| ↳ `color` | string | State color |
| ↳ `position` | number | State position in workflow |
| ↳ `team` | object | Team this state belongs to |
| `pageInfo` | object | Pagination information |
### `linear_create_workflow_state`
@@ -735,12 +566,6 @@ Create a new workflow state (status) in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `state` | object | The created workflow state |
| ↳ `id` | string | State ID |
| ↳ `name` | string | State name |
| ↳ `type` | string | State type |
| ↳ `color` | string | State color |
| ↳ `position` | number | State position |
| ↳ `team` | object | Team this state belongs to |
### `linear_update_workflow_state`
@@ -761,11 +586,6 @@ Update an existing workflow state in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `state` | object | The updated workflow state |
| ↳ `id` | string | State ID |
| ↳ `name` | string | State name |
| ↳ `type` | string | State type |
| ↳ `color` | string | State color |
| ↳ `position` | number | State position |
### `linear_list_cycles`
@@ -784,15 +604,6 @@ List cycles (sprints/iterations) in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycles` | array | Array of cycles |
| ↳ `id` | string | Cycle ID |
| ↳ `number` | number | Cycle number |
| ↳ `name` | string | Cycle name |
| ↳ `startsAt` | string | Start date |
| ↳ `endsAt` | string | End date |
| ↳ `completedAt` | string | Completion date |
| ↳ `progress` | number | Progress percentage \(0-1\) |
| ↳ `team` | object | Team this cycle belongs to |
| `pageInfo` | object | Pagination information |
### `linear_get_cycle`
@@ -809,13 +620,6 @@ Get a single cycle by ID from Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycle` | object | The cycle with full details |
| ↳ `id` | string | Cycle ID |
| ↳ `number` | number | Cycle number |
| ↳ `name` | string | Cycle name |
| ↳ `startsAt` | string | Start date |
| ↳ `endsAt` | string | End date |
| ↳ `progress` | number | Progress percentage |
| ↳ `team` | object | Team this cycle belongs to |
### `linear_create_cycle`
@@ -835,12 +639,6 @@ Create a new cycle (sprint/iteration) in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycle` | object | The created cycle |
| ↳ `id` | string | Cycle ID |
| ↳ `number` | number | Cycle number |
| ↳ `name` | string | Cycle name |
| ↳ `startsAt` | string | Start date |
| ↳ `endsAt` | string | End date |
| ↳ `team` | object | Team this cycle belongs to |
### `linear_get_active_cycle`
@@ -857,13 +655,6 @@ Get the currently active cycle for a team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `cycle` | object | The active cycle \(null if no active cycle\) |
| ↳ `id` | string | Cycle ID |
| ↳ `number` | number | Cycle number |
| ↳ `name` | string | Cycle name |
| ↳ `startsAt` | string | Start date |
| ↳ `endsAt` | string | End date |
| ↳ `progress` | number | Progress percentage |
| ↳ `team` | object | Team this cycle belongs to |
### `linear_create_attachment`
@@ -883,11 +674,6 @@ Add an attachment to an issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `attachment` | object | The created attachment |
| ↳ `id` | string | Attachment ID |
| ↳ `title` | string | Attachment title |
| ↳ `subtitle` | string | Attachment subtitle |
| ↳ `url` | string | Attachment URL |
| ↳ `createdAt` | string | Creation timestamp |
### `linear_list_attachments`
@@ -906,12 +692,6 @@ List all attachments on an issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `attachments` | array | Array of attachments |
| ↳ `id` | string | Attachment ID |
| ↳ `title` | string | Attachment title |
| ↳ `subtitle` | string | Attachment subtitle |
| ↳ `url` | string | Attachment URL |
| ↳ `createdAt` | string | Creation timestamp |
| `pageInfo` | object | Pagination information |
### `linear_update_attachment`
@@ -930,11 +710,6 @@ Update an attachment metadata in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `attachment` | object | The updated attachment |
| ↳ `id` | string | Attachment ID |
| ↳ `title` | string | Attachment title |
| ↳ `subtitle` | string | Attachment subtitle |
| ↳ `url` | string | Attachment URL |
| ↳ `updatedAt` | string | Last update timestamp |
### `linear_delete_attachment`
@@ -969,10 +744,6 @@ Link two issues together in Linear (blocks, relates to, duplicates)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `relation` | object | The created issue relation |
| ↳ `id` | string | Relation ID |
| ↳ `type` | string | Relation type |
| ↳ `issue` | object | Source issue |
| ↳ `relatedIssue` | object | Target issue |
### `linear_list_issue_relations`
@@ -991,11 +762,6 @@ List all relations (dependencies) for an issue in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `relations` | array | Array of issue relations |
| ↳ `id` | string | Relation ID |
| ↳ `type` | string | Relation type |
| ↳ `issue` | object | Source issue |
| ↳ `relatedIssue` | object | Target issue |
| `pageInfo` | object | Pagination information |
### `linear_delete_issue_relation`
@@ -1031,11 +797,6 @@ Bookmark an issue, project, cycle, or label in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `favorite` | object | The created favorite |
| ↳ `id` | string | Favorite ID |
| ↳ `type` | string | Favorite type |
| ↳ `issue` | object | Favorited issue \(if applicable\) |
| ↳ `project` | object | Favorited project \(if applicable\) |
| ↳ `cycle` | object | Favorited cycle \(if applicable\) |
### `linear_list_favorites`
@@ -1053,12 +814,6 @@ List all bookmarked items for the current user in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `favorites` | array | Array of favorited items |
| ↳ `id` | string | Favorite ID |
| ↳ `type` | string | Favorite type |
| ↳ `issue` | object | Favorited issue |
| ↳ `project` | object | Favorited project |
| ↳ `cycle` | object | Favorited cycle |
| `pageInfo` | object | Pagination information |
### `linear_create_project_update`
@@ -1077,11 +832,6 @@ Post a status update for a project in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `update` | object | The created project update |
| ↳ `id` | string | Update ID |
| ↳ `body` | string | Update message |
| ↳ `health` | string | Project health status |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `user` | object | User who created the update |
### `linear_list_project_updates`
@@ -1100,12 +850,6 @@ List all status updates for a project in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `updates` | array | Array of project updates |
| ↳ `id` | string | Update ID |
| ↳ `body` | string | Update message |
| ↳ `health` | string | Project health |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `user` | object | User who created the update |
| `pageInfo` | object | Pagination information |
### `linear_list_notifications`
@@ -1123,12 +867,6 @@ List notifications for the current user in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `notifications` | array | Array of notifications |
| ↳ `id` | string | Notification ID |
| ↳ `type` | string | Notification type |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `readAt` | string | Read timestamp \(null if unread\) |
| ↳ `issue` | object | Related issue |
| `pageInfo` | object | Pagination information |
### `linear_update_notification`
@@ -1146,11 +884,6 @@ Mark a notification as read or unread in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `notification` | object | The updated notification |
| ↳ `id` | string | Notification ID |
| ↳ `type` | string | Notification type |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `readAt` | string | Read timestamp |
| ↳ `issue` | object | Related issue |
### `linear_create_customer`
@@ -1175,14 +908,6 @@ Create a new customer in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customer` | object | The created customer |
| ↳ `id` | string | Customer ID |
| ↳ `name` | string | Customer name |
| ↳ `domains` | array | Associated domains |
| ↳ `externalIds` | array | External IDs |
| ↳ `logoUrl` | string | Logo URL |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
### `linear_list_customers`
@@ -1201,15 +926,6 @@ List all customers in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customers` | array | Array of customers |
| ↳ `id` | string | Customer ID |
| ↳ `name` | string | Customer name |
| ↳ `domains` | array | Associated domains |
| ↳ `externalIds` | array | External IDs |
| ↳ `logoUrl` | string | Logo URL |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
| `pageInfo` | object | Pagination information |
### `linear_create_customer_request`
@@ -1230,17 +946,6 @@ Create a customer request (need) in Linear. Assign to customer, set urgency (pri
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerNeed` | object | The created customer request |
| ↳ `id` | string | Customer request ID |
| ↳ `body` | string | Request description |
| ↳ `priority` | number | Urgency level \(0 = Not important, 1 = Important\) |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
| ↳ `customer` | object | Assigned customer |
| ↳ `issue` | object | Linked issue \(null if not linked\) |
| ↳ `project` | object | Linked project \(null if not linked\) |
| ↳ `creator` | object | User who created the request |
| ↳ `url` | string | URL to the customer request |
### `linear_update_customer_request`
@@ -1262,17 +967,6 @@ Update a customer request (need) in Linear. Can change urgency, description, cus
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerNeed` | object | The updated customer request |
| ↳ `id` | string | Customer request ID |
| ↳ `body` | string | Request description |
| ↳ `priority` | number | Urgency level \(0 = Not important, 1 = Important\) |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
| ↳ `customer` | object | Assigned customer |
| ↳ `issue` | object | Linked issue \(null if not linked\) |
| ↳ `project` | object | Linked project \(null if not linked\) |
| ↳ `creator` | object | User who created the request |
| ↳ `url` | string | URL to the customer request |
### `linear_list_customer_requests`
@@ -1291,18 +985,6 @@ List all customer requests (needs) in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customerNeeds` | array | Array of customer requests |
| ↳ `id` | string | Customer request ID |
| ↳ `body` | string | Request description |
| ↳ `priority` | number | Urgency level \(0 = Not important, 1 = Important\) |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `updatedAt` | string | Last update timestamp |
| ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
| ↳ `customer` | object | Assigned customer |
| ↳ `issue` | object | Linked issue \(null if not linked\) |
| ↳ `project` | object | Linked project \(null if not linked\) |
| ↳ `creator` | object | User who created the request |
| ↳ `url` | string | URL to the customer request |
| `pageInfo` | object | Pagination information |
### `linear_get_customer`
@@ -1319,14 +1001,6 @@ Get a single customer by ID in Linear
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `customer` | object | The customer data |
| ↳ `id` | string | Customer ID |
| ↳ `name` | string | Customer name |
| ↳ `domains` | array | Associated domains |
| ↳ `externalIds` | array | External IDs |
| ↳ `logoUrl` | string | Logo URL |
| ↳ `approximateNeedCount` | number | Number of customer needs |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `archivedAt` | string | Archive timestamp \(null if not archived\) |
### `linear_update_customer`

View File

@@ -72,9 +72,6 @@ Retrieve a list of audiences (lists) from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the audiences were successfully retrieved |
| `output` | object | Audiences data |
| ↳ `lists` | json | Array of audience/list objects |
| ↳ `total_items` | number | Total number of lists |
| ↳ `total_returned` | number | Number of lists returned in this response |
### `mailchimp_get_audience`
@@ -93,8 +90,6 @@ Retrieve details of a specific audience (list) from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the audience was successfully retrieved |
| `output` | object | Audience data |
| ↳ `list` | json | Audience/list object |
| ↳ `list_id` | string | The unique ID of the audience |
### `mailchimp_create_audience`
@@ -117,9 +112,6 @@ Create a new audience (list) in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created audience data |
| ↳ `list` | json | Created audience/list object |
| ↳ `list_id` | string | Created audience/list ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_audience`
@@ -142,9 +134,6 @@ Update an existing audience (list) in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated audience data |
| ↳ `list` | object | Updated audience/list object |
| ↳ `list_id` | string | List ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_audience`
@@ -183,9 +172,6 @@ Retrieve a list of members from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the members were successfully retrieved |
| `output` | object | Members data |
| ↳ `members` | json | Array of member objects |
| ↳ `total_items` | number | Total number of members |
| ↳ `total_returned` | number | Number of members returned in this response |
### `mailchimp_get_member`
@@ -205,8 +191,6 @@ Retrieve details of a specific member from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the member was successfully retrieved |
| `output` | object | Member data |
| ↳ `member` | json | Member object |
| ↳ `subscriber_hash` | string | The MD5 hash of the member email address |
### `mailchimp_add_member`
@@ -229,9 +213,6 @@ Add a new member to a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Added member data |
| ↳ `member` | json | Added member object |
| ↳ `subscriber_hash` | string | Subscriber hash ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_add_or_update_member`
@@ -255,9 +236,6 @@ Add a new member or update an existing member in a Mailchimp audience (upsert)
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Member data |
| ↳ `member` | json | Member object |
| ↳ `subscriber_hash` | string | Subscriber hash ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_member`
@@ -281,9 +259,6 @@ Update an existing member in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated member data |
| ↳ `member` | object | Updated member object |
| ↳ `subscriber_hash` | string | Subscriber hash |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_member`
@@ -321,7 +296,6 @@ Permanently archive (delete) a member from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Archive confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_unarchive_member`
@@ -343,9 +317,6 @@ Restore an archived member to a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Unarchived member data |
| ↳ `member` | object | Unarchived member object |
| ↳ `subscriber_hash` | string | Subscriber hash |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_campaigns`
@@ -367,9 +338,6 @@ Retrieve a list of campaigns from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the campaigns were successfully retrieved |
| `output` | object | Campaigns data |
| ↳ `campaigns` | json | Array of campaign objects |
| ↳ `total_items` | number | Total number of campaigns |
| ↳ `total_returned` | number | Number of campaigns returned in this response |
### `mailchimp_get_campaign`
@@ -388,8 +356,6 @@ Retrieve details of a specific campaign from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the campaign was successfully retrieved |
| `output` | object | Campaign data |
| ↳ `campaign` | json | Campaign object |
| ↳ `campaign_id` | string | The unique ID of the campaign |
### `mailchimp_create_campaign`
@@ -410,9 +376,6 @@ Create a new campaign in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created campaign data |
| ↳ `campaign` | json | Created campaign object |
| ↳ `campaign_id` | string | Created campaign ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_campaign`
@@ -433,9 +396,6 @@ Update an existing campaign in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated campaign data |
| ↳ `campaign` | object | Updated campaign object |
| ↳ `campaign_id` | string | Campaign ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_campaign`
@@ -471,7 +431,6 @@ Send a Mailchimp campaign
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Send confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_schedule_campaign`
@@ -508,7 +467,6 @@ Unschedule a previously scheduled Mailchimp campaign
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Unschedule confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_replicate_campaign`
@@ -527,9 +485,6 @@ Create a copy of an existing Mailchimp campaign
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Replicated campaign data |
| ↳ `campaign` | object | Replicated campaign object |
| ↳ `campaign_id` | string | Campaign ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_campaign_content`
@@ -548,7 +503,6 @@ Retrieve the HTML and plain-text content for a Mailchimp campaign
| --------- | ---- | ----------- |
| `success` | boolean | Whether the campaign content was successfully retrieved |
| `output` | object | Campaign content data |
| ↳ `content` | json | Campaign content object |
### `mailchimp_set_campaign_content`
@@ -570,8 +524,6 @@ Set the content for a Mailchimp campaign
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Campaign content data |
| ↳ `content` | object | Campaign content object |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_automations`
@@ -591,9 +543,6 @@ Retrieve a list of automations from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the automations were successfully retrieved |
| `output` | object | Automations data |
| ↳ `automations` | json | Array of automation objects |
| ↳ `total_items` | number | Total number of automations |
| ↳ `total_returned` | number | Number of automations returned in this response |
### `mailchimp_get_automation`
@@ -612,8 +561,6 @@ Retrieve details of a specific automation from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the automation was successfully retrieved |
| `output` | object | Automation data |
| ↳ `automation` | json | Automation object |
| ↳ `workflow_id` | string | The unique ID of the automation workflow |
### `mailchimp_start_automation`
@@ -632,7 +579,6 @@ Start all emails in a Mailchimp automation workflow
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Start confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_pause_automation`
@@ -651,7 +597,6 @@ Pause all emails in a Mailchimp automation workflow
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Pause confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_add_subscriber_to_automation`
@@ -672,8 +617,6 @@ Manually add a subscriber to a workflow email queue
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Subscriber queue data |
| ↳ `subscriber` | json | Subscriber object |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_templates`
@@ -693,9 +636,6 @@ Retrieve a list of templates from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the templates were successfully retrieved |
| `output` | object | Templates data |
| ↳ `templates` | json | Array of template objects |
| ↳ `total_items` | number | Total number of templates |
| ↳ `total_returned` | number | Number of templates returned in this response |
### `mailchimp_get_template`
@@ -714,8 +654,6 @@ Retrieve details of a specific template from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the template was successfully retrieved |
| `output` | object | Template data |
| ↳ `template` | json | Template object |
| ↳ `template_id` | string | The unique ID of the template |
### `mailchimp_create_template`
@@ -735,9 +673,6 @@ Create a new template in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created template data |
| ↳ `template` | json | Created template object |
| ↳ `template_id` | string | Created template ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_template`
@@ -758,9 +693,6 @@ Update an existing template in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated template data |
| ↳ `template` | object | Updated template object |
| ↳ `template_id` | string | Template ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_template`
@@ -797,9 +729,6 @@ Retrieve a list of campaign reports from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the campaign reports were successfully retrieved |
| `output` | object | Campaign reports data |
| ↳ `reports` | json | Array of campaign report objects |
| ↳ `total_items` | number | Total number of reports |
| ↳ `total_returned` | number | Number of reports returned in this response |
### `mailchimp_get_campaign_report`
@@ -818,8 +747,6 @@ Retrieve the report for a specific campaign from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the campaign report was successfully retrieved |
| `output` | object | Campaign report data |
| ↳ `report` | json | Campaign report object |
| ↳ `campaign_id` | string | The unique ID of the campaign |
### `mailchimp_get_segments`
@@ -840,9 +767,6 @@ Retrieve a list of segments from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the segments were successfully retrieved |
| `output` | object | Segments data |
| ↳ `segments` | json | Array of segment objects |
| ↳ `total_items` | number | Total number of segments |
| ↳ `total_returned` | number | Number of segments returned in this response |
### `mailchimp_get_segment`
@@ -862,8 +786,6 @@ Retrieve details of a specific segment from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the segment was successfully retrieved |
| `output` | object | Segment data |
| ↳ `segment` | json | Segment object |
| ↳ `segment_id` | string | The unique ID of the segment |
### `mailchimp_create_segment`
@@ -884,9 +806,6 @@ Create a new segment in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created segment data |
| ↳ `segment` | json | Created segment object |
| ↳ `segment_id` | string | Created segment ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_segment`
@@ -908,9 +827,6 @@ Update an existing segment in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated segment data |
| ↳ `segment` | object | Updated segment object |
| ↳ `segment_id` | string | Segment ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_segment`
@@ -950,9 +866,6 @@ Retrieve members of a specific segment from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the segment members were successfully retrieved |
| `output` | object | Segment members data |
| ↳ `members` | json | Array of member objects |
| ↳ `total_items` | number | Total number of members |
| ↳ `total_returned` | number | Number of members returned in this response |
### `mailchimp_add_segment_member`
@@ -973,8 +886,6 @@ Add a member to a specific segment in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Added member data |
| ↳ `member` | json | Added member object |
| ↳ `success` | boolean | Operation success |
### `mailchimp_remove_segment_member`
@@ -995,7 +906,6 @@ Remove a member from a specific segment in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Removal confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_member_tags`
@@ -1015,9 +925,6 @@ Retrieve tags associated with a member in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the member tags were successfully retrieved |
| `output` | object | Member tags data |
| ↳ `tags` | json | Array of tag objects |
| ↳ `total_items` | number | Total number of tags |
| ↳ `total_returned` | number | Number of tags returned in this response |
### `mailchimp_add_member_tags`
@@ -1038,7 +945,6 @@ Add tags to a member in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Tag addition confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_remove_member_tags`
@@ -1059,7 +965,6 @@ Remove tags from a member in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Tag removal confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_merge_fields`
@@ -1080,9 +985,6 @@ Retrieve a list of merge fields from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the merge fields were successfully retrieved |
| `output` | object | Merge fields data |
| ↳ `mergeFields` | json | Array of merge field objects |
| ↳ `total_items` | number | Total number of merge fields |
| ↳ `total_returned` | number | Number of merge fields returned in this response |
### `mailchimp_get_merge_field`
@@ -1102,8 +1004,6 @@ Retrieve details of a specific merge field from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the merge field was successfully retrieved |
| `output` | object | Merge field data |
| ↳ `mergeField` | json | Merge field object |
| ↳ `merge_id` | string | The unique ID of the merge field |
### `mailchimp_create_merge_field`
@@ -1124,9 +1024,6 @@ Create a new merge field in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created merge field data |
| ↳ `mergeField` | json | Created merge field object |
| ↳ `merge_id` | string | Created merge field ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_merge_field`
@@ -1147,9 +1044,6 @@ Update an existing merge field in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated merge field data |
| ↳ `mergeField` | object | Updated merge field object |
| ↳ `merge_id` | string | Merge field ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_merge_field`
@@ -1188,9 +1082,6 @@ Retrieve a list of interest categories from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the interest categories were successfully retrieved |
| `output` | object | Interest categories data |
| ↳ `categories` | json | Array of interest category objects |
| ↳ `total_items` | number | Total number of categories |
| ↳ `total_returned` | number | Number of categories returned in this response |
### `mailchimp_get_interest_category`
@@ -1210,8 +1101,6 @@ Retrieve details of a specific interest category from a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the interest category was successfully retrieved |
| `output` | object | Interest category data |
| ↳ `category` | json | Interest category object |
| ↳ `interest_category_id` | string | The unique ID of the interest category |
### `mailchimp_create_interest_category`
@@ -1232,9 +1121,6 @@ Create a new interest category in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created interest category data |
| ↳ `category` | json | Created interest category object |
| ↳ `interest_category_id` | string | Created interest category ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_interest_category`
@@ -1255,9 +1141,6 @@ Update an existing interest category in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated interest category data |
| ↳ `category` | object | Updated interest category object |
| ↳ `interest_category_id` | string | Interest category ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_interest_category`
@@ -1297,9 +1180,6 @@ Retrieve a list of interests from an interest category in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Whether the interests were successfully retrieved |
| `output` | object | Interests data |
| ↳ `interests` | json | Array of interest objects |
| ↳ `total_items` | number | Total number of interests |
| ↳ `total_returned` | number | Number of interests returned in this response |
### `mailchimp_get_interest`
@@ -1320,8 +1200,6 @@ Retrieve details of a specific interest from an interest category in a Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the interest was successfully retrieved |
| `output` | object | Interest data |
| ↳ `interest` | json | Interest object |
| ↳ `interest_id` | string | The unique ID of the interest |
### `mailchimp_create_interest`
@@ -1342,9 +1220,6 @@ Create a new interest in an interest category in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created interest data |
| ↳ `interest` | json | Created interest object |
| ↳ `interest_id` | string | Created interest ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_interest`
@@ -1366,9 +1241,6 @@ Update an existing interest in an interest category in a Mailchimp audience
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated interest data |
| ↳ `interest` | object | Updated interest object |
| ↳ `interest_id` | string | Interest ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_interest`
@@ -1407,9 +1279,6 @@ Retrieve a list of landing pages from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the landing pages were successfully retrieved |
| `output` | object | Landing pages data |
| ↳ `landingPages` | json | Array of landing page objects |
| ↳ `total_items` | number | Total number of landing pages |
| ↳ `total_returned` | number | Number of landing pages returned in this response |
### `mailchimp_get_landing_page`
@@ -1428,8 +1297,6 @@ Retrieve details of a specific landing page from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the landing page was successfully retrieved |
| `output` | object | Landing page data |
| ↳ `landingPage` | json | Landing page object |
| ↳ `page_id` | string | The unique ID of the landing page |
### `mailchimp_create_landing_page`
@@ -1449,9 +1316,6 @@ Create a new landing page in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created landing page data |
| ↳ `landingPage` | json | Created landing page object |
| ↳ `page_id` | string | Created landing page ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_update_landing_page`
@@ -1471,9 +1335,6 @@ Update an existing landing page in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated landing page data |
| ↳ `landingPage` | object | Updated landing page object |
| ↳ `page_id` | string | Landing page ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_landing_page`
@@ -1509,7 +1370,6 @@ Publish a landing page in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Publish confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_unpublish_landing_page`
@@ -1528,7 +1388,6 @@ Unpublish a landing page in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Unpublish confirmation |
| ↳ `success` | boolean | Operation success |
### `mailchimp_get_batch_operations`
@@ -1548,9 +1407,6 @@ Retrieve a list of batch operations from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the batch operations were successfully retrieved |
| `output` | object | Batch operations data |
| ↳ `batches` | json | Array of batch operation objects |
| ↳ `total_items` | number | Total number of batch operations |
| ↳ `total_returned` | number | Number of batch operations returned in this response |
### `mailchimp_get_batch_operation`
@@ -1569,8 +1425,6 @@ Retrieve details of a specific batch operation from Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Whether the batch operation was successfully retrieved |
| `output` | object | Batch operation data |
| ↳ `batch` | json | Batch operation object |
| ↳ `batch_id` | string | The unique ID of the batch operation |
### `mailchimp_create_batch_operation`
@@ -1589,9 +1443,6 @@ Create a new batch operation in Mailchimp
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created batch operation data |
| ↳ `batch` | json | Created batch operation object |
| ↳ `batch_id` | string | Created batch operation ID |
| ↳ `success` | boolean | Operation success |
### `mailchimp_delete_batch_operation`

View File

@@ -52,7 +52,6 @@
"jira_service_management",
"kalshi",
"knowledge",
"langsmith",
"lemlist",
"linear",
"linkedin",
@@ -104,6 +103,7 @@
"supabase",
"tavily",
"telegram",
"thinking",
"tinybird",
"translate",
"trello",

View File

@@ -49,11 +49,6 @@ Read data from a Microsoft Excel spreadsheet
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | object | Range data from the spreadsheet |
| ↳ `range` | string | The range that was read |
| ↳ `values` | array | Array of rows containing cell values |
| `metadata` | object | Spreadsheet metadata |
| ↳ `spreadsheetId` | string | The ID of the spreadsheet |
| ↳ `spreadsheetUrl` | string | URL to access the spreadsheet |
### `microsoft_excel_write`
@@ -78,8 +73,6 @@ Write data to a Microsoft Excel spreadsheet
| `updatedColumns` | number | Number of columns that were updated |
| `updatedCells` | number | Number of cells that were updated |
| `metadata` | object | Spreadsheet metadata |
| ↳ `spreadsheetId` | string | The ID of the spreadsheet |
| ↳ `spreadsheetUrl` | string | URL to access the spreadsheet |
### `microsoft_excel_table_add`
@@ -100,8 +93,6 @@ Add new rows to a Microsoft Excel table
| `index` | number | Index of the first row that was added |
| `values` | array | Array of rows that were added to the table |
| `metadata` | object | Spreadsheet metadata |
| ↳ `spreadsheetId` | string | The ID of the spreadsheet |
| ↳ `spreadsheetUrl` | string | URL to access the spreadsheet |
### `microsoft_excel_worksheet_add`
@@ -119,12 +110,5 @@ Create a new worksheet (sheet) in a Microsoft Excel workbook
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `worksheet` | object | Details of the newly created worksheet |
| ↳ `id` | string | The unique ID of the worksheet |
| ↳ `name` | string | The name of the worksheet |
| ↳ `position` | number | The zero-based position of the worksheet |
| ↳ `visibility` | string | The visibility state of the worksheet \(Visible/Hidden/VeryHidden\) |
| `metadata` | object | Spreadsheet metadata |
| ↳ `spreadsheetId` | string | The ID of the spreadsheet |
| ↳ `spreadsheetUrl` | string | URL to access the spreadsheet |

View File

@@ -50,9 +50,6 @@ Read tasks from Microsoft Planner - get all user tasks or all tasks from a speci
| `success` | boolean | Whether tasks were retrieved successfully |
| `tasks` | array | Array of task objects with filtered properties |
| `metadata` | object | Metadata including planId, userId, and planUrl |
| ↳ `planId` | string | Plan ID |
| ↳ `userId` | string | User ID |
| ↳ `planUrl` | string | Microsoft Graph API URL for the plan |
### `microsoft_planner_create_task`
@@ -76,9 +73,6 @@ Create a new task in Microsoft Planner
| `success` | boolean | Whether the task was created successfully |
| `task` | object | The created task object with all properties |
| `metadata` | object | Metadata including planId, taskId, and taskUrl |
| ↳ `planId` | string | Parent plan ID |
| ↳ `taskId` | string | Created task ID |
| ↳ `taskUrl` | string | Microsoft Graph API URL for the task |
### `microsoft_planner_update_task`
@@ -108,9 +102,6 @@ Update a task in Microsoft Planner
| `taskId` | string | ID of the updated task |
| `etag` | string | New ETag after update - use this for subsequent operations |
| `metadata` | object | Metadata including taskId, planId, and taskUrl |
| ↳ `taskId` | string | Updated task ID |
| ↳ `planId` | string | Parent plan ID |
| ↳ `taskUrl` | string | Microsoft Graph API URL for the task |
### `microsoft_planner_delete_task`
@@ -147,8 +138,6 @@ List all plans shared with the current user
| `success` | boolean | Whether plans were retrieved successfully |
| `plans` | array | Array of plan objects shared with the current user |
| `metadata` | object | Metadata including userId and count |
| ↳ `count` | number | Number of plans returned |
| ↳ `userId` | string | User ID |
### `microsoft_planner_read_plan`
@@ -167,8 +156,6 @@ Get details of a specific Microsoft Planner plan
| `success` | boolean | Whether the plan was retrieved successfully |
| `plan` | object | The plan object with all properties |
| `metadata` | object | Metadata including planId and planUrl |
| ↳ `planId` | string | Plan ID |
| ↳ `planUrl` | string | Microsoft Graph API URL for the plan |
### `microsoft_planner_list_buckets`
@@ -187,8 +174,6 @@ List all buckets in a Microsoft Planner plan
| `success` | boolean | Whether buckets were retrieved successfully |
| `buckets` | array | Array of bucket objects |
| `metadata` | object | Metadata including planId and count |
| ↳ `planId` | string | Plan ID |
| ↳ `count` | number | Number of buckets returned |
### `microsoft_planner_read_bucket`
@@ -207,8 +192,6 @@ Get details of a specific bucket
| `success` | boolean | Whether the bucket was retrieved successfully |
| `bucket` | object | The bucket object with all properties |
| `metadata` | object | Metadata including bucketId and planId |
| ↳ `bucketId` | string | Bucket ID |
| ↳ `planId` | string | Parent plan ID |
### `microsoft_planner_create_bucket`
@@ -228,8 +211,6 @@ Create a new bucket in a Microsoft Planner plan
| `success` | boolean | Whether the bucket was created successfully |
| `bucket` | object | The created bucket object with all properties |
| `metadata` | object | Metadata including bucketId and planId |
| ↳ `bucketId` | string | Created bucket ID |
| ↳ `planId` | string | Parent plan ID |
### `microsoft_planner_update_bucket`
@@ -250,8 +231,6 @@ Update a bucket in Microsoft Planner
| `success` | boolean | Whether the bucket was updated successfully |
| `bucket` | object | The updated bucket object with all properties |
| `metadata` | object | Metadata including bucketId and planId |
| ↳ `bucketId` | string | Updated bucket ID |
| ↳ `planId` | string | Parent plan ID |
### `microsoft_planner_delete_bucket`
@@ -290,7 +269,6 @@ Get detailed information about a task including checklist and references
| `taskDetails` | object | The task details including description, checklist, and references |
| `etag` | string | The ETag value for this task details - use this for update operations |
| `metadata` | object | Metadata including taskId |
| ↳ `taskId` | string | Task ID |
### `microsoft_planner_update_task_details`
@@ -314,6 +292,5 @@ Update task details including description, checklist items, and references in Mi
| `success` | boolean | Whether the task details were updated successfully |
| `taskDetails` | object | The updated task details object with all properties |
| `metadata` | object | Metadata including taskId |
| ↳ `taskId` | string | Task ID |

View File

@@ -254,15 +254,6 @@ Get a specific message from a Microsoft Teams chat or channel
| `success` | boolean | Whether the retrieval was successful |
| `content` | string | The message content |
| `metadata` | object | Message metadata including sender, timestamp, etc. |
| ↳ `messageId` | string | Message ID |
| ↳ `content` | string | Message content |
| ↳ `createdTime` | string | Message creation timestamp |
| ↳ `url` | string | Web URL to the message |
| ↳ `teamId` | string | Team ID |
| ↳ `channelId` | string | Channel ID |
| ↳ `chatId` | string | Chat ID |
| ↳ `messages` | array | Array of message details |
| ↳ `messageCount` | number | Number of messages |
### `microsoft_teams_set_reaction`

View File

@@ -57,15 +57,5 @@ Parse PDF documents using Mistral OCR API
| `success` | boolean | Whether the PDF was parsed successfully |
| `content` | string | Extracted content in the requested format \(markdown, text, or JSON\) |
| `metadata` | object | Processing metadata including jobId, fileType, pageCount, and usage info |
| ↳ `jobId` | string | Unique job identifier |
| ↳ `fileType` | string | File type \(e.g., pdf\) |
| ↳ `fileName` | string | Original file name |
| ↳ `source` | string | Source type \(url\) |
| ↳ `pageCount` | number | Number of pages processed |
| ↳ `model` | string | Mistral model used |
| ↳ `resultType` | string | Output format \(markdown, text, json\) |
| ↳ `processedAt` | string | Processing timestamp |
| ↳ `sourceUrl` | string | Source URL if applicable |
| ↳ `usageInfo` | object | Usage statistics from OCR processing |

View File

@@ -116,13 +116,6 @@ Query and filter Notion database entries with advanced filtering
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Array of Notion page objects from the database |
| ↳ `id` | string | Page ID |
| ↳ `created_time` | string | Creation timestamp |
| ↳ `last_edited_time` | string | Last edit timestamp |
| ↳ `url` | string | Page URL |
| `has_more` | boolean | Whether more results are available |
| `next_cursor` | string | Cursor for pagination |
| `total_results` | number | Number of results returned |
### `notion_search`
@@ -141,14 +134,6 @@ Search across all pages and databases in Notion workspace
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Array of search results \(pages and databases\) |
| ↳ `id` | string | Object ID |
| ↳ `object` | string | Object type \(page or database\) |
| ↳ `url` | string | Object URL |
| ↳ `created_time` | string | Creation timestamp |
| ↳ `last_edited_time` | string | Last edit timestamp |
| `has_more` | boolean | Whether more results are available |
| `next_cursor` | string | Cursor for pagination |
| `total_results` | number | Number of results returned |
### `notion_create_database`

View File

@@ -54,12 +54,5 @@ Generate embeddings from text using OpenAI
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Embeddings generation results |
| ↳ `embeddings` | array | Array of embedding vectors |
| ↳ `model` | string | Model used for generating embeddings |
| ↳ `usage` | object | Token usage information |
| ↳ `prompt_tokens` | number | Number of tokens in the prompt |
| ↳ `total_tokens` | number | Total number of tokens used |
| ↳ `prompt_tokens` | number | Number of tokens in the prompt |
| ↳ `total_tokens` | number | Total number of tokens used |

View File

@@ -135,12 +135,6 @@ Forward an existing Outlook message to specified recipients
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `results` | object | Delivery result details |
| ↳ `status` | string | Delivery status of the email |
| ↳ `timestamp` | string | Timestamp when email was forwarded |
| ↳ `httpStatus` | number | HTTP status code returned by the API |
| ↳ `requestId` | string | Microsoft Graph request-id header for tracing |
| ↳ `messageId` | string | Forwarded message ID if provided by API |
| ↳ `internetMessageId` | string | RFC 822 Message-ID if provided |
### `outlook_move`

View File

@@ -55,9 +55,6 @@ Search the web using Parallel AI. Provides comprehensive search results with int
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Search results with excerpts from relevant pages |
| ↳ `url` | string | The URL of the search result |
| ↳ `title` | string | The title of the search result |
| ↳ `excerpts` | array | Text excerpts from the page |
### `parallel_extract`
@@ -78,10 +75,6 @@ Extract targeted information from specific URLs using Parallel AI. Processes pro
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Extracted information from the provided URLs |
| ↳ `url` | string | The source URL |
| ↳ `title` | string | The title of the page |
| ↳ `content` | string | Extracted content |
| ↳ `excerpts` | array | Relevant text excerpts |
### `parallel_deep_research`
@@ -106,15 +99,5 @@ Conduct comprehensive deep research across the web using Parallel AI. Synthesize
| `message` | string | Status message |
| `content` | object | Research results \(structured based on output_schema\) |
| `basis` | array | Citations and sources with reasoning and confidence levels |
| ↳ `field` | string | Output field name |
| ↳ `reasoning` | string | Explanation for the result |
| ↳ `citations` | array | Array of sources |
| ↳ `url` | string | Source URL |
| ↳ `title` | string | Source title |
| ↳ `excerpts` | array | Relevant excerpts from the source |
| ↳ `url` | string | Source URL |
| ↳ `title` | string | Source title |
| ↳ `excerpts` | array | Relevant excerpts from the source |
| ↳ `confidence` | string | Confidence level indicator |

View File

@@ -57,9 +57,6 @@ Generate completions using Perplexity AI chat models
| `content` | string | Generated text content |
| `model` | string | Model used for generation |
| `usage` | object | Token usage information |
| ↳ `prompt_tokens` | number | Number of tokens in the prompt |
| ↳ `completion_tokens` | number | Number of tokens in the completion |
| ↳ `total_tokens` | number | Total number of tokens used |
### `perplexity_search`
@@ -84,10 +81,5 @@ Get ranked search results from Perplexity
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Array of search results |
| ↳ `title` | string | Title of the search result |
| ↳ `url` | string | URL of the search result |
| ↳ `snippet` | string | Brief excerpt or summary of the content |
| ↳ `date` | string | Date the page was crawled and added to Perplexity |
| ↳ `last_updated` | string | Date the page was last updated in Perplexity |

View File

@@ -97,13 +97,6 @@ Search for similar text in a Pinecone index
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | array | Search results with ID, score, and metadata |
| ↳ `id` | string | Vector ID |
| ↳ `score` | number | Similarity score |
| ↳ `metadata` | object | Associated metadata |
| `usage` | object | Usage statistics including tokens, read units, and rerank units |
| ↳ `total_tokens` | number | Total tokens used for embedding |
| ↳ `read_units` | number | Read units consumed |
| ↳ `rerank_units` | number | Rerank units used |
### `pinecone_search_vector`
@@ -147,14 +140,5 @@ Fetch vectors by ID from a Pinecone index
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `matches` | array | Fetched vectors with ID, values, metadata, and score |
| ↳ `id` | string | Vector ID |
| ↳ `values` | array | Vector values |
| ↳ `metadata` | object | Associated metadata |
| ↳ `score` | number | Match score \(1.0 for exact matches\) |
| `data` | array | Vector data with values and vector type |
| ↳ `values` | array | Vector values |
| ↳ `vector_type` | string | Vector type \(dense/sparse\) |
| `usage` | object | Usage statistics including total read units |
| ↳ `total_tokens` | number | Read units consumed |

View File

@@ -100,12 +100,6 @@ List persons (users) in PostHog. Returns user profiles with their properties and
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `persons` | array | List of persons with their properties and identifiers |
| ↳ `id` | string | Person ID |
| ↳ `name` | string | Person name |
| ↳ `distinct_ids` | array | All distinct IDs associated with this person |
| ↳ `created_at` | string | When the person was first seen |
| ↳ `uuid` | string | Person UUID |
| `next` | string | URL for the next page of results \(if available\) |
### `posthog_get_person`
@@ -125,11 +119,6 @@ Get detailed information about a specific person in PostHog by their ID or UUID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `person` | object | Person details including properties and identifiers |
| ↳ `id` | string | Person ID |
| ↳ `name` | string | Person name |
| ↳ `distinct_ids` | array | All distinct IDs associated with this person |
| ↳ `created_at` | string | When the person was first seen |
| ↳ `uuid` | string | Person UUID |
### `posthog_delete_person`
@@ -171,10 +160,6 @@ Execute a HogQL query in PostHog. HogQL is PostHog
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Query results as an array of rows |
| `columns` | array | Column names in the result set |
| `types` | array | Data types of columns in the result set |
| `hogql` | string | The actual HogQL query that was executed |
| `has_more` | boolean | Whether there are more results available |
### `posthog_list_insights`
@@ -198,17 +183,6 @@ List all insights in a PostHog project. Returns insight configurations, filters,
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of insights with their configurations and metadata |
| ↳ `id` | number | Unique identifier for the insight |
| ↳ `name` | string | Name of the insight |
| ↳ `description` | string | Description of the insight |
| ↳ `filters` | object | Filter configuration for the insight |
| ↳ `query` | object | Query configuration for the insight |
| ↳ `created_at` | string | ISO timestamp when insight was created |
| ↳ `created_by` | object | User who created the insight |
| ↳ `last_modified_at` | string | ISO timestamp when insight was last modified |
| ↳ `last_modified_by` | object | User who last modified the insight |
| ↳ `saved` | boolean | Whether the insight is saved |
| ↳ `dashboards` | array | IDs of dashboards this insight appears on |
### `posthog_get_insight`
@@ -297,17 +271,6 @@ List all dashboards in a PostHog project. Returns dashboard configurations, tile
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of dashboards with their configurations and metadata |
| ↳ `id` | number | Unique identifier for the dashboard |
| ↳ `name` | string | Name of the dashboard |
| ↳ `description` | string | Description of the dashboard |
| ↳ `pinned` | boolean | Whether the dashboard is pinned |
| ↳ `created_at` | string | ISO timestamp when dashboard was created |
| ↳ `created_by` | object | User who created the dashboard |
| ↳ `last_modified_at` | string | ISO timestamp when dashboard was last modified |
| ↳ `last_modified_by` | object | User who last modified the dashboard |
| ↳ `tiles` | array | Tiles/widgets on the dashboard |
| ↳ `filters` | object | Global filters for the dashboard |
| ↳ `tags` | array | Tags associated with the dashboard |
### `posthog_get_dashboard`
@@ -361,18 +324,6 @@ List all actions in a PostHog project. Returns action definitions, steps, and me
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of actions with their definitions and metadata |
| ↳ `id` | number | Unique identifier for the action |
| ↳ `name` | string | Name of the action |
| ↳ `description` | string | Description of the action |
| ↳ `tags` | array | Tags associated with the action |
| ↳ `post_to_slack` | boolean | Whether to post this action to Slack |
| ↳ `slack_message_format` | string | Format string for Slack messages |
| ↳ `steps` | array | Steps that define the action |
| ↳ `created_at` | string | ISO timestamp when action was created |
| ↳ `created_by` | object | User who created the action |
| ↳ `deleted` | boolean | Whether the action is deleted |
| ↳ `is_calculating` | boolean | Whether the action is being calculated |
| ↳ `last_calculated_at` | string | ISO timestamp of last calculation |
### `posthog_list_cohorts`
@@ -396,20 +347,6 @@ List all cohorts in a PostHog project. Returns cohort definitions, filters, and
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of cohorts with their definitions and metadata |
| ↳ `id` | number | Unique identifier for the cohort |
| ↳ `name` | string | Name of the cohort |
| ↳ `description` | string | Description of the cohort |
| ↳ `groups` | array | Groups that define the cohort |
| ↳ `deleted` | boolean | Whether the cohort is deleted |
| ↳ `filters` | object | Filter configuration for the cohort |
| ↳ `query` | object | Query configuration for the cohort |
| ↳ `created_at` | string | ISO timestamp when cohort was created |
| ↳ `created_by` | object | User who created the cohort |
| ↳ `is_calculating` | boolean | Whether the cohort is being calculated |
| ↳ `last_calculation` | string | ISO timestamp of last calculation |
| ↳ `errors_calculating` | number | Number of errors during calculation |
| ↳ `count` | number | Number of users in the cohort |
| ↳ `is_static` | boolean | Whether the cohort is static |
### `posthog_get_cohort`
@@ -502,17 +439,6 @@ List all annotations in a PostHog project. Returns annotation content, timestamp
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of annotations with their content and metadata |
| ↳ `id` | number | Unique identifier for the annotation |
| ↳ `content` | string | Content/text of the annotation |
| ↳ `date_marker` | string | ISO timestamp marking when the annotation applies |
| ↳ `created_at` | string | ISO timestamp when annotation was created |
| ↳ `updated_at` | string | ISO timestamp when annotation was last updated |
| ↳ `created_by` | object | User who created the annotation |
| ↳ `dashboard_item` | number | ID of dashboard item this annotation is attached to |
| ↳ `insight_short_id` | string | Short ID of the insight this annotation is attached to |
| ↳ `insight_name` | string | Name of the insight this annotation is attached to |
| ↳ `scope` | string | Scope of the annotation \(project or dashboard\) |
| ↳ `deleted` | boolean | Whether the annotation is deleted |
### `posthog_create_annotation`
@@ -566,20 +492,6 @@ List all feature flags in a PostHog project
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | List of feature flags |
| ↳ `id` | number | Feature flag ID |
| ↳ `name` | string | Feature flag name |
| ↳ `key` | string | Feature flag key |
| ↳ `filters` | object | Feature flag filters |
| ↳ `deleted` | boolean | Whether the flag is deleted |
| ↳ `active` | boolean | Whether the flag is active |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `is_simple_flag` | boolean | Whether this is a simple flag |
| ↳ `rollout_percentage` | number | Rollout percentage \(if applicable\) |
| ↳ `ensure_experience_continuity` | boolean | Whether to ensure experience continuity |
| `count` | number | Total number of feature flags |
| `next` | string | URL to next page of results |
| `previous` | string | URL to previous page of results |
### `posthog_get_feature_flag`
@@ -599,19 +511,6 @@ Get details of a specific feature flag
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `flag` | object | Feature flag details |
| ↳ `id` | number | Feature flag ID |
| ↳ `name` | string | Feature flag name |
| ↳ `key` | string | Feature flag key |
| ↳ `filters` | object | Feature flag filters |
| ↳ `deleted` | boolean | Whether the flag is deleted |
| ↳ `active` | boolean | Whether the flag is active |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `is_simple_flag` | boolean | Whether this is a simple flag |
| ↳ `rollout_percentage` | number | Rollout percentage \(if applicable\) |
| ↳ `ensure_experience_continuity` | boolean | Whether to ensure experience continuity |
| ↳ `usage_dashboard` | number | Usage dashboard ID |
| ↳ `has_enriched_analytics` | boolean | Whether enriched analytics are enabled |
### `posthog_create_feature_flag`
@@ -636,17 +535,6 @@ Create a new feature flag in PostHog
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `flag` | object | Created feature flag |
| ↳ `id` | number | Feature flag ID |
| ↳ `name` | string | Feature flag name |
| ↳ `key` | string | Feature flag key |
| ↳ `filters` | object | Feature flag filters |
| ↳ `deleted` | boolean | Whether the flag is deleted |
| ↳ `active` | boolean | Whether the flag is active |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `is_simple_flag` | boolean | Whether this is a simple flag |
| ↳ `rollout_percentage` | number | Rollout percentage \(if applicable\) |
| ↳ `ensure_experience_continuity` | boolean | Whether to ensure experience continuity |
### `posthog_update_feature_flag`
@@ -672,17 +560,6 @@ Update an existing feature flag in PostHog
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `flag` | object | Updated feature flag |
| ↳ `id` | number | Feature flag ID |
| ↳ `name` | string | Feature flag name |
| ↳ `key` | string | Feature flag key |
| ↳ `filters` | object | Feature flag filters |
| ↳ `deleted` | boolean | Whether the flag is deleted |
| ↳ `active` | boolean | Whether the flag is active |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `is_simple_flag` | boolean | Whether this is a simple flag |
| ↳ `rollout_percentage` | number | Rollout percentage \(if applicable\) |
| ↳ `ensure_experience_continuity` | boolean | Whether to ensure experience continuity |
### `posthog_delete_feature_flag`
@@ -746,22 +623,6 @@ List all experiments in a PostHog project
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | List of experiments |
| ↳ `id` | number | Experiment ID |
| ↳ `name` | string | Experiment name |
| ↳ `description` | string | Experiment description |
| ↳ `feature_flag_key` | string | Associated feature flag key |
| ↳ `feature_flag` | object | Feature flag details |
| ↳ `parameters` | object | Experiment parameters |
| ↳ `filters` | object | Experiment filters |
| ↳ `variants` | object | Experiment variants |
| ↳ `start_date` | string | Start date |
| ↳ `end_date` | string | End date |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `archived` | boolean | Whether the experiment is archived |
| `count` | number | Total number of experiments |
| `next` | string | URL to next page of results |
| `previous` | string | URL to previous page of results |
### `posthog_get_experiment`
@@ -781,21 +642,6 @@ Get details of a specific experiment
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `experiment` | object | Experiment details |
| ↳ `id` | number | Experiment ID |
| ↳ `name` | string | Experiment name |
| ↳ `description` | string | Experiment description |
| ↳ `feature_flag_key` | string | Associated feature flag key |
| ↳ `feature_flag` | object | Feature flag details |
| ↳ `parameters` | object | Experiment parameters |
| ↳ `filters` | object | Experiment filters |
| ↳ `variants` | object | Experiment variants |
| ↳ `start_date` | string | Start date |
| ↳ `end_date` | string | End date |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `archived` | boolean | Whether the experiment is archived |
| ↳ `metrics` | array | Primary metrics |
| ↳ `metrics_secondary` | array | Secondary metrics |
### `posthog_create_experiment`
@@ -822,19 +668,6 @@ Create a new experiment in PostHog
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `experiment` | object | Created experiment |
| ↳ `id` | number | Experiment ID |
| ↳ `name` | string | Experiment name |
| ↳ `description` | string | Experiment description |
| ↳ `feature_flag_key` | string | Associated feature flag key |
| ↳ `feature_flag` | object | Feature flag details |
| ↳ `parameters` | object | Experiment parameters |
| ↳ `filters` | object | Experiment filters |
| ↳ `variants` | object | Experiment variants |
| ↳ `start_date` | string | Start date |
| ↳ `end_date` | string | End date |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `archived` | boolean | Whether the experiment is archived |
### `posthog_list_surveys`
@@ -855,18 +688,6 @@ List all surveys in a PostHog project. Surveys allow you to collect feedback fro
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `surveys` | array | List of surveys in the project |
| ↳ `id` | string | Survey ID |
| ↳ `name` | string | Survey name |
| ↳ `description` | string | Survey description |
| ↳ `type` | string | Survey type \(popover or api\) |
| ↳ `questions` | array | Survey questions |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `start_date` | string | Survey start date |
| ↳ `end_date` | string | Survey end date |
| ↳ `archived` | boolean | Whether survey is archived |
| `count` | number | Total number of surveys |
| `next` | string | URL for next page of results |
| `previous` | string | URL for previous page of results |
### `posthog_get_survey`
@@ -886,19 +707,6 @@ Get details of a specific survey in PostHog by ID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `survey` | object | Survey details |
| ↳ `id` | string | Survey ID |
| ↳ `name` | string | Survey name |
| ↳ `description` | string | Survey description |
| ↳ `type` | string | Survey type \(popover or api\) |
| ↳ `questions` | array | Survey questions |
| ↳ `appearance` | object | Survey appearance configuration |
| ↳ `conditions` | object | Survey display conditions |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `start_date` | string | Survey start date |
| ↳ `end_date` | string | Survey end date |
| ↳ `archived` | boolean | Whether survey is archived |
| ↳ `responses_limit` | number | Maximum number of responses |
### `posthog_create_survey`
@@ -928,14 +736,6 @@ Create a new survey in PostHog. Supports question types: Basic (open), Link, Rat
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `survey` | object | Created survey details |
| ↳ `id` | string | Survey ID |
| ↳ `name` | string | Survey name |
| ↳ `description` | string | Survey description |
| ↳ `type` | string | Survey type \(popover or api\) |
| ↳ `questions` | array | Survey questions |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `start_date` | string | Survey start date |
| ↳ `end_date` | string | Survey end date |
### `posthog_update_survey`
@@ -967,15 +767,6 @@ Update an existing survey in PostHog. Can modify questions, appearance, conditio
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `survey` | object | Updated survey details |
| ↳ `id` | string | Survey ID |
| ↳ `name` | string | Survey name |
| ↳ `description` | string | Survey description |
| ↳ `type` | string | Survey type \(popover or api\) |
| ↳ `questions` | array | Survey questions |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `start_date` | string | Survey start date |
| ↳ `end_date` | string | Survey end date |
| ↳ `archived` | boolean | Whether survey is archived |
### `posthog_list_session_recordings`
@@ -996,23 +787,6 @@ List session recordings in a PostHog project. Session recordings capture user in
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `recordings` | array | List of session recordings |
| ↳ `id` | string | Recording ID |
| ↳ `distinct_id` | string | User distinct ID |
| ↳ `viewed` | boolean | Whether recording has been viewed |
| ↳ `recording_duration` | number | Recording duration in seconds |
| ↳ `active_seconds` | number | Active time in seconds |
| ↳ `inactive_seconds` | number | Inactive time in seconds |
| ↳ `start_time` | string | Recording start timestamp |
| ↳ `end_time` | string | Recording end timestamp |
| ↳ `click_count` | number | Number of clicks |
| ↳ `keypress_count` | number | Number of keypresses |
| ↳ `console_log_count` | number | Number of console logs |
| ↳ `console_warn_count` | number | Number of console warnings |
| ↳ `console_error_count` | number | Number of console errors |
| ↳ `person` | object | Person information |
| `count` | number | Total number of recordings |
| `next` | string | URL for next page of results |
| `previous` | string | URL for previous page of results |
### `posthog_get_session_recording`
@@ -1032,22 +806,6 @@ Get details of a specific session recording in PostHog by ID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `recording` | object | Session recording details |
| ↳ `id` | string | Recording ID |
| ↳ `distinct_id` | string | User distinct ID |
| ↳ `viewed` | boolean | Whether recording has been viewed |
| ↳ `recording_duration` | number | Recording duration in seconds |
| ↳ `active_seconds` | number | Active time in seconds |
| ↳ `inactive_seconds` | number | Inactive time in seconds |
| ↳ `start_time` | string | Recording start timestamp |
| ↳ `end_time` | string | Recording end timestamp |
| ↳ `click_count` | number | Number of clicks |
| ↳ `keypress_count` | number | Number of keypresses |
| ↳ `console_log_count` | number | Number of console logs |
| ↳ `console_warn_count` | number | Number of console warnings |
| ↳ `console_error_count` | number | Number of console errors |
| ↳ `start_url` | string | Starting URL of the recording |
| ↳ `person` | object | Person information |
| ↳ `matching_events` | array | Events that occurred during recording |
### `posthog_list_recording_playlists`
@@ -1068,20 +826,6 @@ List session recording playlists in a PostHog project. Playlists allow you to or
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `playlists` | array | List of session recording playlists |
| ↳ `id` | string | Playlist ID |
| ↳ `short_id` | string | Playlist short ID |
| ↳ `name` | string | Playlist name |
| ↳ `description` | string | Playlist description |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `created_by` | object | Creator information |
| ↳ `deleted` | boolean | Whether playlist is deleted |
| ↳ `filters` | object | Playlist filters |
| ↳ `last_modified_at` | string | Last modification timestamp |
| ↳ `last_modified_by` | object | Last modifier information |
| ↳ `derived_name` | string | Auto-generated name from filters |
| `count` | number | Total number of playlists |
| `next` | string | URL for next page of results |
| `previous` | string | URL for previous page of results |
### `posthog_list_event_definitions`
@@ -1106,16 +850,6 @@ List all event definitions in a PostHog project. Event definitions represent tra
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of event definitions |
| ↳ `id` | string | Unique identifier for the event definition |
| ↳ `name` | string | Event name |
| ↳ `description` | string | Event description |
| ↳ `tags` | array | Tags associated with the event |
| ↳ `volume_30_day` | number | Number of events received in the last 30 days |
| ↳ `query_usage_30_day` | number | Number of times this event was queried in the last 30 days |
| ↳ `created_at` | string | ISO timestamp when the event was created |
| ↳ `last_seen_at` | string | ISO timestamp when the event was last seen |
| ↳ `updated_at` | string | ISO timestamp when the event was updated |
| ↳ `updated_by` | object | User who last updated the event |
### `posthog_get_event_definition`
@@ -1206,19 +940,6 @@ List all property definitions in a PostHog project. Property definitions represe
| `next` | string | URL for the next page of results |
| `previous` | string | URL for the previous page of results |
| `results` | array | List of property definitions |
| ↳ `id` | string | Unique identifier for the property definition |
| ↳ `name` | string | Property name |
| ↳ `description` | string | Property description |
| ↳ `tags` | array | Tags associated with the property |
| ↳ `is_numerical` | boolean | Whether the property is numerical |
| ↳ `is_seen_on_filtered_events` | boolean | Whether the property is seen on filtered events |
| ↳ `property_type` | string | The data type of the property |
| ↳ `type` | string | Property type: event, person, or group |
| ↳ `volume_30_day` | number | Number of times property was seen in the last 30 days |
| ↳ `query_usage_30_day` | number | Number of times this property was queried in the last 30 days |
| ↳ `created_at` | string | ISO timestamp when the property was created |
| ↳ `updated_at` | string | ISO timestamp when the property was updated |
| ↳ `updated_by` | object | User who last updated the property |
### `posthog_get_property_definition`
@@ -1310,22 +1031,6 @@ List all projects in the organization. Returns project details including IDs, na
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projects` | array | List of projects with their configuration and settings |
| ↳ `id` | number | Project ID |
| ↳ `uuid` | string | Project UUID |
| ↳ `organization` | string | Organization UUID |
| ↳ `api_token` | string | Project API token for ingestion |
| ↳ `app_urls` | array | Allowed app URLs |
| ↳ `name` | string | Project name |
| ↳ `slack_incoming_webhook` | string | Slack webhook URL for notifications |
| ↳ `created_at` | string | Project creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `anonymize_ips` | boolean | Whether IP anonymization is enabled |
| ↳ `completed_snippet_onboarding` | boolean | Whether snippet onboarding is completed |
| ↳ `ingested_event` | boolean | Whether any event has been ingested |
| ↳ `test_account_filters` | array | Filters for test accounts |
| ↳ `is_demo` | boolean | Whether this is a demo project |
| ↳ `timezone` | string | Project timezone |
| ↳ `data_attributes` | array | Custom data attributes |
### `posthog_get_project`
@@ -1344,29 +1049,6 @@ Get detailed information about a specific project by ID. Returns comprehensive p
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | Detailed project information with all configuration settings |
| ↳ `id` | number | Project ID |
| ↳ `uuid` | string | Project UUID |
| ↳ `organization` | string | Organization UUID |
| ↳ `api_token` | string | Project API token for ingestion |
| ↳ `app_urls` | array | Allowed app URLs |
| ↳ `name` | string | Project name |
| ↳ `slack_incoming_webhook` | string | Slack webhook URL for notifications |
| ↳ `created_at` | string | Project creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `anonymize_ips` | boolean | Whether IP anonymization is enabled |
| ↳ `completed_snippet_onboarding` | boolean | Whether snippet onboarding is completed |
| ↳ `ingested_event` | boolean | Whether any event has been ingested |
| ↳ `test_account_filters` | array | Filters for test accounts |
| ↳ `is_demo` | boolean | Whether this is a demo project |
| ↳ `timezone` | string | Project timezone |
| ↳ `data_attributes` | array | Custom data attributes |
| ↳ `person_display_name_properties` | array | Properties used for person display names |
| ↳ `correlation_config` | object | Configuration for correlation analysis |
| ↳ `autocapture_opt_out` | boolean | Whether autocapture is disabled |
| ↳ `autocapture_exceptions_opt_in` | boolean | Whether exception autocapture is enabled |
| ↳ `session_recording_opt_in` | boolean | Whether session recording is enabled |
| ↳ `capture_console_log_opt_in` | boolean | Whether console log capture is enabled |
| ↳ `capture_performance_opt_in` | boolean | Whether performance capture is enabled |
### `posthog_list_organizations`
@@ -1384,15 +1066,6 @@ List all organizations the user has access to. Returns organization details incl
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `organizations` | array | List of organizations with their settings and features |
| ↳ `id` | string | Organization ID \(UUID\) |
| ↳ `name` | string | Organization name |
| ↳ `slug` | string | Organization slug |
| ↳ `created_at` | string | Organization creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `membership_level` | number | User membership level in organization |
| ↳ `plugins_access_level` | number | Access level for plugins/apps |
| ↳ `teams` | array | List of team IDs in this organization |
| ↳ `available_product_features` | array | Available product features and their limits |
### `posthog_get_organization`
@@ -1411,20 +1084,5 @@ Get detailed information about a specific organization by ID. Returns comprehens
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `organization` | object | Detailed organization information with settings and features |
| ↳ `id` | string | Organization ID \(UUID\) |
| ↳ `name` | string | Organization name |
| ↳ `slug` | string | Organization slug |
| ↳ `created_at` | string | Organization creation timestamp |
| ↳ `updated_at` | string | Last update timestamp |
| ↳ `membership_level` | number | User membership level in organization |
| ↳ `plugins_access_level` | number | Access level for plugins/apps |
| ↳ `teams` | array | List of team IDs in this organization |
| ↳ `available_product_features` | array | Available product features with their limits and descriptions |
| ↳ `domain_whitelist` | array | Whitelisted domains for organization |
| ↳ `is_member_join_email_enabled` | boolean | Whether member join emails are enabled |
| ↳ `metadata` | object | Organization metadata |
| ↳ `customer_id` | string | Customer ID for billing |
| ↳ `available_features` | array | List of available feature flags for organization |
| ↳ `usage` | object | Organization usage statistics |

View File

@@ -54,18 +54,6 @@ Fetch posts from a subreddit with different sorting options
| --------- | ---- | ----------- |
| `subreddit` | string | Name of the subreddit where posts were fetched from |
| `posts` | array | Array of posts with title, author, URL, score, comments count, and metadata |
| ↳ `id` | string | Post ID |
| ↳ `title` | string | Post title |
| ↳ `author` | string | Author username |
| ↳ `url` | string | Post URL |
| ↳ `permalink` | string | Reddit permalink |
| ↳ `score` | number | Post score \(upvotes - downvotes\) |
| ↳ `num_comments` | number | Number of comments |
| ↳ `created_utc` | number | Creation timestamp \(UTC\) |
| ↳ `is_self` | boolean | Whether this is a text post |
| ↳ `selftext` | string | Text content for self posts |
| ↳ `thumbnail` | string | Thumbnail URL |
| ↳ `subreddit` | string | Subreddit name |
### `reddit_get_comments`
@@ -95,21 +83,6 @@ Fetch comments from a specific Reddit post
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `post` | object | Post information including ID, title, author, content, and metadata |
| ↳ `id` | string | Post ID |
| ↳ `title` | string | Post title |
| ↳ `author` | string | Post author |
| ↳ `selftext` | string | Post text content |
| ↳ `score` | number | Post score |
| ↳ `created_utc` | number | Creation timestamp |
| ↳ `permalink` | string | Reddit permalink |
| `comments` | array | Nested comments with author, body, score, timestamps, and replies |
| ↳ `id` | string | Comment ID |
| ↳ `author` | string | Comment author |
| ↳ `body` | string | Comment text |
| ↳ `score` | number | Comment score |
| ↳ `created_utc` | number | Creation timestamp |
| ↳ `permalink` | string | Comment permalink |
| ↳ `replies` | array | Nested reply comments |
### `reddit_get_controversial`
@@ -134,18 +107,6 @@ Fetch controversial posts from a subreddit
| --------- | ---- | ----------- |
| `subreddit` | string | Name of the subreddit where posts were fetched from |
| `posts` | array | Array of controversial posts with title, author, URL, score, comments count, and metadata |
| ↳ `id` | string | Post ID |
| ↳ `title` | string | Post title |
| ↳ `author` | string | Author username |
| ↳ `url` | string | Post URL |
| ↳ `permalink` | string | Reddit permalink |
| ↳ `score` | number | Post score \(upvotes - downvotes\) |
| ↳ `num_comments` | number | Number of comments |
| ↳ `created_utc` | number | Creation timestamp \(UTC\) |
| ↳ `is_self` | boolean | Whether this is a text post |
| ↳ `selftext` | string | Text content for self posts |
| ↳ `thumbnail` | string | Thumbnail URL |
| ↳ `subreddit` | string | Subreddit name |
### `reddit_search`
@@ -172,18 +133,6 @@ Search for posts within a subreddit
| --------- | ---- | ----------- |
| `subreddit` | string | Name of the subreddit where search was performed |
| `posts` | array | Array of search result posts with title, author, URL, score, comments count, and metadata |
| ↳ `id` | string | Post ID |
| ↳ `title` | string | Post title |
| ↳ `author` | string | Author username |
| ↳ `url` | string | Post URL |
| ↳ `permalink` | string | Reddit permalink |
| ↳ `score` | number | Post score \(upvotes - downvotes\) |
| ↳ `num_comments` | number | Number of comments |
| ↳ `created_utc` | number | Creation timestamp \(UTC\) |
| ↳ `is_self` | boolean | Whether this is a text post |
| ↳ `selftext` | string | Text content for self posts |
| ↳ `thumbnail` | string | Thumbnail URL |
| ↳ `subreddit` | string | Subreddit name |
### `reddit_submit_post`

View File

@@ -100,11 +100,6 @@ List objects in an AWS S3 bucket
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `objects` | array | List of S3 objects |
| ↳ `key` | string | Object key |
| ↳ `size` | number | Object size in bytes |
| ↳ `lastModified` | string | Last modified timestamp |
| ↳ `etag` | string | Entity tag |
| `metadata` | object | Listing metadata including pagination info |
### `s3_delete_object`

View File

@@ -53,20 +53,6 @@ Retrieve accounts from Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Accounts data |
| ↳ `accounts` | array | Array of account objects |
| ↳ `paging` | object | Pagination information |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of accounts returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of accounts returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_create_account`
@@ -98,9 +84,6 @@ Create a new account in Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created account data |
| ↳ `id` | string | Created account ID |
| ↳ `success` | boolean | Salesforce operation success |
| ↳ `created` | boolean | Whether account was created |
### `salesforce_update_account`
@@ -133,8 +116,6 @@ Update an existing account in Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated account data |
| ↳ `id` | string | Updated account ID |
| ↳ `updated` | boolean | Whether account was updated |
### `salesforce_delete_account`
@@ -154,8 +135,6 @@ Delete an account from Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deleted account data |
| ↳ `id` | string | Deleted account ID |
| ↳ `deleted` | boolean | Whether account was deleted |
### `salesforce_get_contacts`
@@ -178,22 +157,6 @@ Get contact(s) from Salesforce - single contact if ID provided, or list if not
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Contact\(s\) data |
| ↳ `contacts` | array | Array of contacts \(list query\) |
| ↳ `contact` | object | Single contact \(by ID\) |
| ↳ `paging` | object | Pagination information |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of contacts returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of contacts returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `singleContact` | boolean | Whether single contact was returned |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_create_contact`
@@ -225,9 +188,6 @@ Create a new contact in Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created contact data |
| ↳ `id` | string | Created contact ID |
| ↳ `success` | boolean | Salesforce operation success |
| ↳ `created` | boolean | Whether contact was created |
### `salesforce_update_contact`
@@ -260,8 +220,6 @@ Update an existing contact in Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated contact data |
| ↳ `id` | string | Updated contact ID |
| ↳ `updated` | boolean | Whether contact was updated |
### `salesforce_delete_contact`
@@ -281,8 +239,6 @@ Delete a contact from Salesforce CRM
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deleted contact data |
| ↳ `id` | string | Deleted contact ID |
| ↳ `deleted` | boolean | Whether contact was deleted |
### `salesforce_get_leads`
@@ -305,22 +261,6 @@ Get lead(s) from Salesforce
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Lead data |
| ↳ `lead` | object | Single lead object \(when leadId provided\) |
| ↳ `leads` | array | Array of lead objects \(when listing\) |
| ↳ `paging` | object | Pagination information |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of leads returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of leads returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `singleLead` | boolean | Whether single lead was returned |
| ↳ `success` | boolean | Operation success status |
### `salesforce_create_lead`
@@ -348,9 +288,6 @@ Create a new lead
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created lead data |
| ↳ `id` | string | Created lead ID |
| ↳ `success` | boolean | Salesforce operation success |
| ↳ `created` | boolean | Whether lead was created |
### `salesforce_update_lead`
@@ -379,8 +316,6 @@ Update an existing lead
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated lead data |
| ↳ `id` | string | Updated lead ID |
| ↳ `updated` | boolean | Whether lead was updated |
### `salesforce_delete_lead`
@@ -400,8 +335,6 @@ Delete a lead
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deleted lead data |
| ↳ `id` | string | Deleted lead ID |
| ↳ `deleted` | boolean | Whether lead was deleted |
### `salesforce_get_opportunities`
@@ -424,21 +357,6 @@ Get opportunity(ies) from Salesforce
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Opportunity data |
| ↳ `opportunity` | object | Single opportunity object \(when opportunityId provided\) |
| ↳ `opportunities` | array | Array of opportunity objects \(when listing\) |
| ↳ `paging` | object | Pagination information |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of opportunities returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of opportunities returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `success` | boolean | Operation success status |
### `salesforce_create_opportunity`
@@ -464,9 +382,6 @@ Create a new opportunity
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created opportunity data |
| ↳ `id` | string | Created opportunity ID |
| ↳ `success` | boolean | Salesforce operation success |
| ↳ `created` | boolean | Whether opportunity was created |
### `salesforce_update_opportunity`
@@ -493,8 +408,6 @@ Update an existing opportunity
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated opportunity data |
| ↳ `id` | string | Updated opportunity ID |
| ↳ `updated` | boolean | Whether opportunity was updated |
### `salesforce_delete_opportunity`
@@ -514,8 +427,6 @@ Delete an opportunity
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deleted opportunity data |
| ↳ `id` | string | Deleted opportunity ID |
| ↳ `deleted` | boolean | Whether opportunity was deleted |
### `salesforce_get_cases`
@@ -538,21 +449,6 @@ Get case(s) from Salesforce
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Case data |
| ↳ `case` | object | Single case object \(when caseId provided\) |
| ↳ `cases` | array | Array of case objects \(when listing\) |
| ↳ `paging` | object | Pagination information |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of cases returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of cases returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `success` | boolean | Operation success status |
### `salesforce_create_case`
@@ -578,9 +474,6 @@ Create a new case
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created case data |
| ↳ `id` | string | Created case ID |
| ↳ `success` | boolean | Salesforce operation success |
| ↳ `created` | boolean | Whether case was created |
### `salesforce_update_case`
@@ -604,8 +497,6 @@ Update an existing case
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated case data |
| ↳ `id` | string | Updated case ID |
| ↳ `updated` | boolean | Whether case was updated |
### `salesforce_delete_case`
@@ -625,8 +516,6 @@ Delete a case
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deleted case data |
| ↳ `id` | string | Deleted case ID |
| ↳ `deleted` | boolean | Whether case was deleted |
### `salesforce_get_tasks`
@@ -649,21 +538,6 @@ Get task(s) from Salesforce
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Task data |
| ↳ `task` | object | Single task object \(when taskId provided\) |
| ↳ `tasks` | array | Array of task objects \(when listing\) |
| ↳ `paging` | object | Pagination information |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `nextRecordsUrl` | string | URL for next page of results |
| ↳ `totalSize` | number | Total number of records |
| ↳ `done` | boolean | Whether all records returned |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of tasks returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of tasks returned |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `success` | boolean | Operation success status |
### `salesforce_create_task`
@@ -689,9 +563,6 @@ Create a new task
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created task data |
| ↳ `id` | string | Created task ID |
| ↳ `success` | boolean | Salesforce operation success |
| ↳ `created` | boolean | Whether task was created |
### `salesforce_update_task`
@@ -716,8 +587,6 @@ Update an existing task
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Updated task data |
| ↳ `id` | string | Updated task ID |
| ↳ `updated` | boolean | Whether task was updated |
### `salesforce_delete_task`
@@ -737,8 +606,6 @@ Delete a task
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deleted task data |
| ↳ `id` | string | Deleted task ID |
| ↳ `deleted` | boolean | Whether task was deleted |
### `salesforce_list_reports`
@@ -759,9 +626,6 @@ Get a list of reports accessible by the current user
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Reports data |
| ↳ `reports` | array | Array of report objects |
| ↳ `totalReturned` | number | Number of reports returned |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_get_report`
@@ -781,9 +645,6 @@ Get metadata and describe information for a specific report
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Report metadata |
| ↳ `report` | object | Report metadata object |
| ↳ `reportId` | string | Report ID |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_run_report`
@@ -805,17 +666,6 @@ Execute a report and retrieve the results
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Report results |
| ↳ `reportId` | string | Report ID |
| ↳ `reportMetadata` | object | Report metadata |
| ↳ `reportExtendedMetadata` | object | Extended metadata |
| ↳ `factMap` | object | Report data organized by groupings |
| ↳ `groupingsDown` | object | Row groupings |
| ↳ `groupingsAcross` | object | Column groupings |
| ↳ `hasDetailRows` | boolean | Whether report has detail rows |
| ↳ `allData` | boolean | Whether all data is returned |
| ↳ `reportName` | string | Report name |
| ↳ `reportFormat` | string | Report format type |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_list_report_types`
@@ -834,9 +684,6 @@ Get a list of available report types
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Report types data |
| ↳ `reportTypes` | array | Array of report type objects |
| ↳ `totalReturned` | number | Number of report types returned |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_list_dashboards`
@@ -856,9 +703,6 @@ Get a list of dashboards accessible by the current user
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Dashboards data |
| ↳ `dashboards` | array | Array of dashboard objects |
| ↳ `totalReturned` | number | Number of dashboards returned |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_get_dashboard`
@@ -878,13 +722,6 @@ Get details and results for a specific dashboard
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Dashboard data |
| ↳ `dashboard` | object | Dashboard details |
| ↳ `dashboardId` | string | Dashboard ID |
| ↳ `components` | array | Dashboard component data |
| ↳ `dashboardName` | string | Dashboard name |
| ↳ `folderId` | string | Folder ID containing the dashboard |
| ↳ `runningUser` | object | Running user information |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_refresh_dashboard`
@@ -904,13 +741,6 @@ Refresh a dashboard to get the latest data
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Refreshed dashboard data |
| ↳ `dashboard` | object | Dashboard details |
| ↳ `dashboardId` | string | Dashboard ID |
| ↳ `components` | array | Dashboard component data |
| ↳ `status` | object | Dashboard status |
| ↳ `dashboardName` | string | Dashboard name |
| ↳ `refreshDate` | string | Date when dashboard was refreshed |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_query`
@@ -930,17 +760,6 @@ Execute a custom SOQL query to retrieve data from Salesforce
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Query results |
| ↳ `records` | array | Array of record objects |
| ↳ `totalSize` | number | Total number of records matching query |
| ↳ `done` | boolean | Whether all records have been returned |
| ↳ `nextRecordsUrl` | string | URL to fetch next batch of records |
| ↳ `query` | string | The executed SOQL query |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of records returned in this response |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of records returned in this response |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_query_more`
@@ -960,16 +779,6 @@ Retrieve additional query results using the nextRecordsUrl from a previous query
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Query results |
| ↳ `records` | array | Array of record objects |
| ↳ `totalSize` | number | Total number of records matching query |
| ↳ `done` | boolean | Whether all records have been returned |
| ↳ `nextRecordsUrl` | string | URL to fetch next batch of records |
| ↳ `metadata` | object | Response metadata |
| ↳ `totalReturned` | number | Number of records returned in this response |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `totalReturned` | number | Number of records returned in this response |
| ↳ `hasMore` | boolean | Whether more records exist |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_describe_object`
@@ -989,19 +798,6 @@ Get metadata and field information for a Salesforce object
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Object metadata |
| ↳ `objectName` | string | API name of the object |
| ↳ `label` | string | Display label |
| ↳ `labelPlural` | string | Plural display label |
| ↳ `fields` | array | Array of field definitions |
| ↳ `keyPrefix` | string | ID prefix for this object type |
| ↳ `queryable` | boolean | Whether object can be queried |
| ↳ `createable` | boolean | Whether records can be created |
| ↳ `updateable` | boolean | Whether records can be updated |
| ↳ `deletable` | boolean | Whether records can be deleted |
| ↳ `childRelationships` | array | Child relationship definitions |
| ↳ `recordTypeInfos` | array | Record type information |
| ↳ `fieldCount` | number | Number of fields in the object |
| ↳ `success` | boolean | Salesforce operation success |
### `salesforce_list_objects`
@@ -1020,10 +816,5 @@ Get a list of all available Salesforce objects
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Objects list |
| ↳ `objects` | array | Array of available Salesforce objects |
| ↳ `encoding` | string | Encoding used |
| ↳ `maxBatchSize` | number | Maximum batch size |
| ↳ `totalReturned` | number | Number of objects returned |
| ↳ `success` | boolean | Salesforce operation success |

View File

@@ -68,50 +68,6 @@ List issues from Sentry for a specific organization and optionally a specific pr
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issues` | array | List of Sentry issues |
| ↳ `id` | string | User ID |
| ↳ `shortId` | string | Short issue identifier |
| ↳ `title` | string | Issue title |
| ↳ `culprit` | string | Function or location that caused the issue |
| ↳ `permalink` | string | Direct link to the issue in Sentry |
| ↳ `logger` | string | Logger name that reported the issue |
| ↳ `level` | string | Severity level \(error, warning, info, etc.\) |
| ↳ `status` | string | Current issue status |
| ↳ `statusDetails` | object | Additional details about the status |
| ↳ `isPublic` | boolean | Whether the issue is publicly visible |
| ↳ `platform` | string | Project platform |
| ↳ `project` | object | Project information |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `slug` | string | Project slug |
| ↳ `platform` | string | Project platform |
| ↳ `name` | string | User name |
| ↳ `slug` | string | Project slug |
| ↳ `type` | string | Type of error \(e.g., TypeError\) |
| ↳ `metadata` | object | Error metadata |
| ↳ `type` | string | Type of error \(e.g., TypeError\) |
| ↳ `value` | string | Error message or value |
| ↳ `function` | string | Function where the error occurred |
| ↳ `value` | string | Error message or value |
| ↳ `function` | string | Function where the error occurred |
| ↳ `numComments` | number | Number of comments on the issue |
| ↳ `assignedTo` | object | User assigned to the issue |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `email` | string | User email |
| ↳ `isBookmarked` | boolean | Whether the issue is bookmarked |
| ↳ `isSubscribed` | boolean | Whether subscribed to updates |
| ↳ `hasSeen` | boolean | Whether the user has seen this issue |
| ↳ `annotations` | array | Issue annotations |
| ↳ `isUnhandled` | boolean | Whether the issue is unhandled |
| ↳ `count` | string | Total number of occurrences |
| ↳ `userCount` | number | Number of unique users affected |
| ↳ `firstSeen` | string | When the issue was first seen \(ISO timestamp\) |
| ↳ `lastSeen` | string | When the issue was last seen \(ISO timestamp\) |
| ↳ `stats` | object | Statistical information about the issue |
| `metadata` | object | Pagination metadata |
| ↳ `nextCursor` | string | Cursor for the next page of results \(if available\) |
| ↳ `hasMore` | boolean | Whether there are more results available |
### `sentry_issues_get`
@@ -130,47 +86,6 @@ Retrieve detailed information about a specific Sentry issue by its ID. Returns c
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | Detailed information about the Sentry issue |
| ↳ `id` | string | User ID |
| ↳ `shortId` | string | Short issue identifier |
| ↳ `title` | string | Issue title |
| ↳ `culprit` | string | Function or location that caused the issue |
| ↳ `permalink` | string | Direct link to the issue in Sentry |
| ↳ `logger` | string | Logger name that reported the issue |
| ↳ `level` | string | Severity level \(error, warning, info, etc.\) |
| ↳ `status` | string | Current issue status |
| ↳ `statusDetails` | object | Additional details about the status |
| ↳ `isPublic` | boolean | Whether the issue is publicly visible |
| ↳ `platform` | string | Project platform |
| ↳ `project` | object | Project information |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `slug` | string | Project slug |
| ↳ `platform` | string | Project platform |
| ↳ `name` | string | User name |
| ↳ `slug` | string | Project slug |
| ↳ `type` | string | Type of error \(e.g., TypeError, ValueError\) |
| ↳ `metadata` | object | Error metadata |
| ↳ `type` | string | Type of error \(e.g., TypeError, ValueError\) |
| ↳ `value` | string | Error message or value |
| ↳ `function` | string | Function where the error occurred |
| ↳ `value` | string | Error message or value |
| ↳ `function` | string | Function where the error occurred |
| ↳ `numComments` | number | Number of comments on the issue |
| ↳ `assignedTo` | object | User assigned to the issue \(if any\) |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `email` | string | User email |
| ↳ `isBookmarked` | boolean | Whether the issue is bookmarked |
| ↳ `isSubscribed` | boolean | Whether the user is subscribed to updates |
| ↳ `hasSeen` | boolean | Whether the user has seen this issue |
| ↳ `annotations` | array | Issue annotations |
| ↳ `isUnhandled` | boolean | Whether the issue is unhandled |
| ↳ `count` | string | Total number of occurrences |
| ↳ `userCount` | number | Number of unique users affected |
| ↳ `firstSeen` | string | When the issue was first seen \(ISO timestamp\) |
| ↳ `lastSeen` | string | When the issue was last seen \(ISO timestamp\) |
| ↳ `stats` | object | Statistical information about the issue |
### `sentry_issues_update`
@@ -194,20 +109,6 @@ Update a Sentry issue by changing its status, assignment, bookmark state, or oth
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `issue` | object | The updated Sentry issue |
| ↳ `id` | string | User ID |
| ↳ `shortId` | string | Short issue identifier |
| ↳ `title` | string | Issue title |
| ↳ `status` | string | Updated issue status |
| ↳ `assignedTo` | object | User assigned to the issue \(if any\) |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `isBookmarked` | boolean | Whether the issue is bookmarked |
| ↳ `isSubscribed` | boolean | Whether the user is subscribed to updates |
| ↳ `isPublic` | boolean | Whether the issue is publicly visible |
| ↳ `permalink` | string | Direct link to the issue in Sentry |
### `sentry_projects_list`
@@ -227,27 +128,6 @@ List all projects in a Sentry organization. Returns project details including na
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `projects` | array | List of Sentry projects |
| ↳ `id` | string | Team ID |
| ↳ `slug` | string | Team slug |
| ↳ `name` | string | Team name |
| ↳ `platform` | string | Platform/language \(e.g., javascript, python\) |
| ↳ `dateCreated` | string | When the project was created \(ISO timestamp\) |
| ↳ `isBookmarked` | boolean | Whether the project is bookmarked |
| ↳ `isMember` | boolean | Whether the user is a member of the project |
| ↳ `features` | array | Enabled features for the project |
| ↳ `organization` | object | Organization information |
| ↳ `id` | string | Organization ID |
| ↳ `slug` | string | Organization slug |
| ↳ `name` | string | Organization name |
| ↳ `teams` | array | Teams associated with the project |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `slug` | string | Team slug |
| ↳ `status` | string | Project status |
| ↳ `isPublic` | boolean | Whether the project is publicly visible |
| `metadata` | object | Pagination metadata |
| ↳ `nextCursor` | string | Cursor for the next page of results \(if available\) |
| ↳ `hasMore` | boolean | Whether there are more results available |
### `sentry_projects_get`
@@ -266,39 +146,6 @@ Retrieve detailed information about a specific Sentry project by its slug. Retur
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | Detailed information about the Sentry project |
| ↳ `id` | string | Team ID |
| ↳ `slug` | string | Team slug |
| ↳ `name` | string | Team name |
| ↳ `platform` | string | Platform/language \(e.g., javascript, python\) |
| ↳ `dateCreated` | string | When the project was created \(ISO timestamp\) |
| ↳ `isBookmarked` | boolean | Whether the project is bookmarked |
| ↳ `isMember` | boolean | Whether the user is a member of the project |
| ↳ `features` | array | Enabled features for the project |
| ↳ `firstEvent` | string | When the first event was received \(ISO timestamp\) |
| ↳ `firstTransactionEvent` | string | When the first transaction event was received |
| ↳ `access` | array | Access permissions |
| ↳ `organization` | object | Organization information |
| ↳ `id` | string | Organization ID |
| ↳ `slug` | string | Organization slug |
| ↳ `name` | string | Organization name |
| ↳ `team` | object | Primary team for the project |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `slug` | string | Team slug |
| ↳ `teams` | array | Teams associated with the project |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `slug` | string | Team slug |
| ↳ `status` | string | Project status |
| ↳ `color` | string | Project color code |
| ↳ `isPublic` | boolean | Whether the project is publicly visible |
| ↳ `isInternal` | boolean | Whether the project is internal |
| ↳ `hasAccess` | boolean | Whether the user has access to this project |
| ↳ `hasMinifiedStackTrace` | boolean | Whether minified stack traces are available |
| ↳ `hasMonitors` | boolean | Whether the project has monitors configured |
| ↳ `hasProfiles` | boolean | Whether the project has profiling enabled |
| ↳ `hasReplays` | boolean | Whether the project has session replays enabled |
| ↳ `hasSessions` | boolean | Whether the project has sessions enabled |
### `sentry_projects_create`
@@ -321,31 +168,6 @@ Create a new Sentry project in an organization. Requires a team to associate the
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The newly created Sentry project |
| ↳ `id` | string | Team ID |
| ↳ `slug` | string | Team slug |
| ↳ `name` | string | Team name |
| ↳ `platform` | string | Platform/language |
| ↳ `dateCreated` | string | When the project was created \(ISO timestamp\) |
| ↳ `isBookmarked` | boolean | Whether the project is bookmarked |
| ↳ `isMember` | boolean | Whether the user is a member |
| ↳ `hasAccess` | boolean | Whether the user has access |
| ↳ `features` | array | Enabled features |
| ↳ `firstEvent` | string | First event timestamp |
| ↳ `organization` | object | Organization information |
| ↳ `id` | string | Organization ID |
| ↳ `slug` | string | Organization slug |
| ↳ `name` | string | Organization name |
| ↳ `team` | object | Primary team for the project |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `slug` | string | Team slug |
| ↳ `teams` | array | Teams associated with the project |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `slug` | string | Team slug |
| ↳ `status` | string | Project status |
| ↳ `color` | string | Project color code |
| ↳ `isPublic` | boolean | Whether the project is public |
### `sentry_projects_update`
@@ -370,19 +192,6 @@ Update a Sentry project by changing its name, slug, platform, or other settings.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The updated Sentry project |
| ↳ `id` | string | Team ID |
| ↳ `slug` | string | Team slug |
| ↳ `name` | string | Team name |
| ↳ `platform` | string | Platform/language |
| ↳ `isBookmarked` | boolean | Whether the project is bookmarked |
| ↳ `organization` | object | Organization information |
| ↳ `id` | string | Organization ID |
| ↳ `slug` | string | Organization slug |
| ↳ `name` | string | Organization name |
| ↳ `teams` | array | Teams associated with the project |
| ↳ `id` | string | Team ID |
| ↳ `name` | string | Team name |
| ↳ `slug` | string | Team slug |
### `sentry_events_list`
@@ -406,50 +215,6 @@ List events from a Sentry project. Can be filtered by issue ID, query, or time p
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `events` | array | List of Sentry events |
| ↳ `id` | string | User ID |
| ↳ `eventID` | string | Event identifier |
| ↳ `projectID` | string | Project ID |
| ↳ `groupID` | string | Issue group ID |
| ↳ `message` | string | Event message |
| ↳ `title` | string | Event title |
| ↳ `location` | string | Location information |
| ↳ `culprit` | string | Function or location that caused the event |
| ↳ `dateCreated` | string | When the event was created \(ISO timestamp\) |
| ↳ `dateReceived` | string | When Sentry received the event \(ISO timestamp\) |
| ↳ `user` | object | User information associated with the event |
| ↳ `id` | string | User ID |
| ↳ `email` | string | User email |
| ↳ `username` | string | Username |
| ↳ `ipAddress` | string | IP address |
| ↳ `name` | string | User display name |
| ↳ `email` | string | User email |
| ↳ `username` | string | Username |
| ↳ `ipAddress` | string | IP address |
| ↳ `name` | string | SDK name |
| ↳ `tags` | array | Tags associated with the event |
| ↳ `key` | string | Tag key |
| ↳ `value` | string | Tag value |
| ↳ `key` | string | Tag key |
| ↳ `value` | string | Error message or value |
| ↳ `contexts` | object | Additional context data \(device, OS, etc.\) |
| ↳ `platform` | string | Platform where the event occurred |
| ↳ `type` | string | Type of error \(e.g., TypeError\) |
| ↳ `metadata` | object | Error metadata |
| ↳ `type` | string | Type of error \(e.g., TypeError\) |
| ↳ `value` | string | Error message or value |
| ↳ `function` | string | Function where the error occurred |
| ↳ `function` | string | Function where the error occurred |
| ↳ `entries` | array | Event entries \(exception, breadcrumbs, etc.\) |
| ↳ `errors` | array | Processing errors |
| ↳ `dist` | string | Distribution identifier |
| ↳ `fingerprints` | array | Fingerprints for grouping |
| ↳ `sdk` | object | SDK information |
| ↳ `name` | string | SDK name |
| ↳ `version` | string | SDK version |
| ↳ `version` | string | SDK version |
| `metadata` | object | Pagination metadata |
| ↳ `nextCursor` | string | Cursor for the next page of results \(if available\) |
| ↳ `hasMore` | boolean | Whether there are more results available |
### `sentry_events_get`
@@ -469,47 +234,6 @@ Retrieve detailed information about a specific Sentry event by its ID. Returns c
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `event` | object | Detailed information about the Sentry event |
| ↳ `id` | string | User ID |
| ↳ `eventID` | string | Event identifier |
| ↳ `projectID` | string | Project ID |
| ↳ `groupID` | string | Issue group ID this event belongs to |
| ↳ `message` | string | Event message |
| ↳ `title` | string | Event title |
| ↳ `location` | string | Location information |
| ↳ `culprit` | string | Function or location that caused the event |
| ↳ `dateCreated` | string | When the event was created \(ISO timestamp\) |
| ↳ `dateReceived` | string | When Sentry received the event \(ISO timestamp\) |
| ↳ `user` | object | User information associated with the event |
| ↳ `id` | string | User ID |
| ↳ `email` | string | User email |
| ↳ `username` | string | Username |
| ↳ `ipAddress` | string | IP address |
| ↳ `name` | string | User display name |
| ↳ `email` | string | User email |
| ↳ `username` | string | Username |
| ↳ `ipAddress` | string | IP address |
| ↳ `name` | string | SDK name |
| ↳ `tags` | array | Tags associated with the event |
| ↳ `key` | string | Tag key |
| ↳ `value` | string | Tag value |
| ↳ `key` | string | Tag key |
| ↳ `value` | string | Error message or value |
| ↳ `contexts` | object | Additional context data \(device, OS, browser, etc.\) |
| ↳ `platform` | string | Platform where the event occurred |
| ↳ `type` | string | Type of error \(e.g., TypeError, ValueError\) |
| ↳ `metadata` | object | Error metadata |
| ↳ `type` | string | Type of error \(e.g., TypeError, ValueError\) |
| ↳ `value` | string | Error message or value |
| ↳ `function` | string | Function where the error occurred |
| ↳ `function` | string | Function where the error occurred |
| ↳ `entries` | array | Event entries including exception, breadcrumbs, and request data |
| ↳ `errors` | array | Processing errors that occurred |
| ↳ `dist` | string | Distribution identifier |
| ↳ `fingerprints` | array | Fingerprints used for grouping events |
| ↳ `sdk` | object | SDK information |
| ↳ `name` | string | SDK name |
| ↳ `version` | string | SDK version |
| ↳ `version` | string | SDK version |
### `sentry_releases_list`
@@ -531,61 +255,6 @@ List releases for a Sentry organization or project. Returns release details incl
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `releases` | array | List of Sentry releases |
| ↳ `id` | string | Project ID |
| ↳ `version` | object | Version details |
| ↳ `raw` | string | Raw version string |
| ↳ `shortVersion` | string | Shortened version identifier |
| ↳ `ref` | string | Git reference \(commit SHA, tag, or branch\) |
| ↳ `url` | string | URL to the release \(e.g., GitHub release page\) |
| ↳ `dateReleased` | string | When the release was deployed \(ISO timestamp\) |
| ↳ `dateCreated` | string | Commit timestamp |
| ↳ `dateStarted` | string | Deploy start timestamp |
| ↳ `newGroups` | number | Number of new issues introduced in this release |
| ↳ `owner` | object | Owner of the release |
| ↳ `id` | string | User ID |
| ↳ `name` | string | User name |
| ↳ `email` | string | User email |
| ↳ `name` | string | Project name |
| ↳ `email` | string | Author email |
| ↳ `commitCount` | number | Number of commits in this release |
| ↳ `deployCount` | number | Number of deploys for this release |
| ↳ `lastCommit` | object | Last commit in the release |
| ↳ `id` | string | Commit SHA |
| ↳ `message` | string | Commit message |
| ↳ `dateCreated` | string | Commit timestamp |
| ↳ `message` | string | Commit message |
| ↳ `lastDeploy` | object | Last deploy of the release |
| ↳ `id` | string | Deploy ID |
| ↳ `environment` | string | Deploy environment |
| ↳ `dateStarted` | string | Deploy start timestamp |
| ↳ `dateFinished` | string | Deploy finish timestamp |
| ↳ `environment` | string | Deploy environment |
| ↳ `dateFinished` | string | Deploy finish timestamp |
| ↳ `authors` | array | Authors of commits in the release |
| ↳ `id` | string | Author ID |
| ↳ `name` | string | Author name |
| ↳ `email` | string | Author email |
| ↳ `projects` | array | Projects associated with this release |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `slug` | string | Project slug |
| ↳ `platform` | string | Project platform |
| ↳ `slug` | string | Project slug |
| ↳ `platform` | string | Project platform |
| ↳ `firstEvent` | string | First event timestamp |
| ↳ `lastEvent` | string | Last event timestamp |
| ↳ `versionInfo` | object | Version metadata |
| ↳ `buildHash` | string | Build hash |
| ↳ `version` | object | Version details |
| ↳ `raw` | string | Raw version string |
| ↳ `raw` | string | Raw version string |
| ↳ `package` | string | Package name |
| ↳ `buildHash` | string | Build hash |
| ↳ `raw` | string | Raw version string |
| ↳ `package` | string | Package name |
| `metadata` | object | Pagination metadata |
| ↳ `nextCursor` | string | Cursor for the next page of results \(if available\) |
| ↳ `hasMore` | boolean | Whether there are more results available |
### `sentry_releases_create`
@@ -609,58 +278,6 @@ Create a new release in Sentry. A release is a version of your code deployed to
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `release` | object | The newly created Sentry release |
| ↳ `id` | string | Project ID |
| ↳ `version` | object | Version details |
| ↳ `raw` | string | Raw version string |
| ↳ `shortVersion` | string | Shortened version identifier |
| ↳ `ref` | string | Git reference \(commit SHA, tag, or branch\) |
| ↳ `url` | string | URL to the release |
| ↳ `dateReleased` | string | When the release was deployed \(ISO timestamp\) |
| ↳ `dateCreated` | string | Commit timestamp |
| ↳ `dateStarted` | string | Deploy start timestamp |
| ↳ `newGroups` | number | Number of new issues introduced |
| ↳ `commitCount` | number | Number of commits in this release |
| ↳ `deployCount` | number | Number of deploys for this release |
| ↳ `owner` | object | Release owner |
| ↳ `id` | string | Owner ID |
| ↳ `name` | string | Owner name |
| ↳ `email` | string | Owner email |
| ↳ `name` | string | Project name |
| ↳ `email` | string | Author email |
| ↳ `lastCommit` | object | Last commit in the release |
| ↳ `id` | string | Commit SHA |
| ↳ `message` | string | Commit message |
| ↳ `dateCreated` | string | Commit timestamp |
| ↳ `message` | string | Commit message |
| ↳ `lastDeploy` | object | Last deploy of the release |
| ↳ `id` | string | Deploy ID |
| ↳ `environment` | string | Deploy environment |
| ↳ `dateStarted` | string | Deploy start timestamp |
| ↳ `dateFinished` | string | Deploy finish timestamp |
| ↳ `environment` | string | Deploy environment |
| ↳ `dateFinished` | string | Deploy finish timestamp |
| ↳ `authors` | array | Authors of commits in the release |
| ↳ `id` | string | Author ID |
| ↳ `name` | string | Author name |
| ↳ `email` | string | Author email |
| ↳ `projects` | array | Projects associated with this release |
| ↳ `id` | string | Project ID |
| ↳ `name` | string | Project name |
| ↳ `slug` | string | Project slug |
| ↳ `platform` | string | Project platform |
| ↳ `slug` | string | Project slug |
| ↳ `platform` | string | Project platform |
| ↳ `firstEvent` | string | First event timestamp |
| ↳ `lastEvent` | string | Last event timestamp |
| ↳ `versionInfo` | object | Version metadata |
| ↳ `buildHash` | string | Build hash |
| ↳ `version` | object | Version details |
| ↳ `raw` | string | Raw version string |
| ↳ `raw` | string | Raw version string |
| ↳ `package` | string | Package name |
| ↳ `buildHash` | string | Build hash |
| ↳ `raw` | string | Raw version string |
| ↳ `package` | string | Package name |
### `sentry_releases_deploy`
@@ -684,11 +301,5 @@ Create a deploy record for a Sentry release in a specific environment. Deploys t
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `deploy` | object | The newly created deploy record |
| ↳ `id` | string | Unique deploy ID |
| ↳ `environment` | string | Environment name where the release was deployed |
| ↳ `name` | string | Name of the deploy |
| ↳ `url` | string | URL pointing to the deploy |
| ↳ `dateStarted` | string | When the deploy started \(ISO timestamp\) |
| ↳ `dateFinished` | string | When the deploy finished \(ISO timestamp\) |

View File

@@ -52,13 +52,6 @@ Create a new page in a SharePoint site
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `page` | object | Created SharePoint page information |
| ↳ `id` | string | The unique ID of the created page |
| ↳ `name` | string | The name of the created page |
| ↳ `title` | string | The title of the created page |
| ↳ `webUrl` | string | The URL to access the page |
| ↳ `pageLayout` | string | The layout type of the page |
| ↳ `createdDateTime` | string | When the page was created |
| ↳ `lastModifiedDateTime` | string | When the page was last modified |
### `sharepoint_read_page`
@@ -79,35 +72,6 @@ Read a specific page from a SharePoint site
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `page` | object | Information about the SharePoint page |
| ↳ `id` | string | The unique ID of the page |
| ↳ `name` | string | The name of the page |
| ↳ `title` | string | The title of the page |
| ↳ `webUrl` | string | The URL to access the page |
| ↳ `pageLayout` | string | The layout type of the page |
| ↳ `createdDateTime` | string | When the page was created |
| ↳ `lastModifiedDateTime` | string | When the page was last modified |
| `pages` | array | List of SharePoint pages |
| ↳ `page` | object | The unique ID of the page |
| ↳ `id` | string | The unique ID of the page |
| ↳ `name` | string | The name of the page |
| ↳ `title` | string | The title of the page |
| ↳ `webUrl` | string | The URL to access the page |
| ↳ `pageLayout` | string | The layout type of the page |
| ↳ `createdDateTime` | string | When the page was created |
| ↳ `lastModifiedDateTime` | string | When the page was last modified |
| ↳ `id` | string | The unique ID of the page |
| ↳ `name` | string | The name of the page |
| ↳ `title` | string | The title of the page |
| ↳ `webUrl` | string | The URL to access the page |
| ↳ `pageLayout` | string | The layout type of the page |
| ↳ `createdDateTime` | string | When the page was created |
| ↳ `lastModifiedDateTime` | string | When the page was last modified |
| ↳ `content` | string | Extracted text content from the page |
| ↳ `canvasLayout` | object | Raw SharePoint canvas layout structure |
| `content` | object | Content of the SharePoint page |
| ↳ `content` | string | Extracted text content from the page |
| ↳ `canvasLayout` | object | Raw SharePoint canvas layout structure |
| `totalPages` | number | Total number of pages found |
### `sharepoint_list_sites`
@@ -125,28 +89,6 @@ List details of all SharePoint sites
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `site` | object | Information about the current SharePoint site |
| ↳ `id` | string | The unique ID of the site |
| ↳ `name` | string | The name of the site |
| ↳ `displayName` | string | The display name of the site |
| ↳ `webUrl` | string | The URL to access the site |
| ↳ `description` | string | The description of the site |
| ↳ `createdDateTime` | string | When the site was created |
| ↳ `lastModifiedDateTime` | string | When the site was last modified |
| ↳ `isPersonalSite` | boolean | Whether this is a personal site |
| ↳ `root` | object | Server relative URL |
| ↳ `serverRelativeUrl` | string | Server relative URL |
| ↳ `serverRelativeUrl` | string | Server relative URL |
| ↳ `siteCollection` | object | Site collection hostname |
| ↳ `hostname` | string | Site collection hostname |
| ↳ `hostname` | string | Site collection hostname |
| `sites` | array | List of all accessible SharePoint sites |
| ↳ `id` | string | The unique ID of the site |
| ↳ `name` | string | The name of the site |
| ↳ `displayName` | string | The display name of the site |
| ↳ `webUrl` | string | The URL to access the site |
| ↳ `description` | string | The description of the site |
| ↳ `createdDateTime` | string | When the site was created |
| ↳ `lastModifiedDateTime` | string | When the site was last modified |
### `sharepoint_create_list`
@@ -168,13 +110,6 @@ Create a new list in a SharePoint site
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `list` | object | Created SharePoint list information |
| ↳ `id` | string | The unique ID of the list |
| ↳ `displayName` | string | The display name of the list |
| ↳ `name` | string | The internal name of the list |
| ↳ `webUrl` | string | The web URL of the list |
| ↳ `createdDateTime` | string | When the list was created |
| ↳ `lastModifiedDateTime` | string | When the list was last modified |
| ↳ `list` | object | List properties \(e.g., template\) |
### `sharepoint_get_list`
@@ -193,16 +128,6 @@ Get metadata (and optionally columns/items) for a SharePoint list
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `list` | object | Information about the SharePoint list |
| ↳ `id` | string | Item ID |
| ↳ `displayName` | string | The display name of the list |
| ↳ `name` | string | The internal name of the list |
| ↳ `webUrl` | string | The web URL of the list |
| ↳ `createdDateTime` | string | When the list was created |
| ↳ `lastModifiedDateTime` | string | When the list was last modified |
| ↳ `list` | object | List properties \(e.g., template\) |
| ↳ `columns` | array | List column definitions |
| ↳ `fields` | object | Field values for the item |
| `lists` | array | All lists in the site when no listId/title provided |
### `sharepoint_update_list`
@@ -223,8 +148,6 @@ Update the properties (fields) on a SharePoint list item
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `item` | object | Updated SharePoint list item |
| ↳ `id` | string | Item ID |
| ↳ `fields` | object | Updated field values |
### `sharepoint_add_list_items`
@@ -244,8 +167,6 @@ Add a new item to a SharePoint list
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `item` | object | Created SharePoint list item |
| ↳ `id` | string | Item ID |
| ↳ `fields` | object | Field values for the new item |
### `sharepoint_upload_file`
@@ -266,12 +187,5 @@ Upload files to a SharePoint document library
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `uploadedFiles` | array | Array of uploaded file objects |
| ↳ `id` | string | The unique ID of the uploaded file |
| ↳ `name` | string | The name of the uploaded file |
| ↳ `webUrl` | string | The URL to access the file |
| ↳ `size` | number | The size of the file in bytes |
| ↳ `createdDateTime` | string | When the file was created |
| ↳ `lastModifiedDateTime` | string | When the file was last modified |
| `fileCount` | number | Number of files uploaded |

View File

@@ -123,51 +123,6 @@ Read the latest messages from Slack channels. Retrieve conversation history with
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `messages` | array | Array of message objects from the channel |
| ↳ `type` | string | Message type |
| ↳ `ts` | string | Edit timestamp |
| ↳ `text` | string | Message text content |
| ↳ `user` | string | User ID who edited |
| ↳ `bot_id` | string | Bot ID if sent by a bot |
| ↳ `username` | string | Display username |
| ↳ `channel` | string | Channel ID |
| ↳ `team` | string | Team ID |
| ↳ `thread_ts` | string | Thread parent message timestamp |
| ↳ `parent_user_id` | string | User ID of thread parent |
| ↳ `reply_count` | number | Number of thread replies |
| ↳ `reply_users_count` | number | Number of users who replied |
| ↳ `latest_reply` | string | Timestamp of latest reply |
| ↳ `subscribed` | boolean | Whether user is subscribed to thread |
| ↳ `last_read` | string | Last read timestamp |
| ↳ `unread_count` | number | Number of unread messages |
| ↳ `subtype` | string | Message subtype |
| ↳ `reactions` | array | Array of reactions on this message |
| ↳ `name` | string | Emoji name |
| ↳ `count` | number | Number of reactions |
| ↳ `users` | array | Array of user IDs who reacted |
| ↳ `name` | string | File name |
| ↳ `count` | number | Number of reactions |
| ↳ `users` | array | Array of user IDs who reacted |
| ↳ `is_starred` | boolean | Whether message is starred |
| ↳ `pinned_to` | array | Array of channel IDs where message is pinned |
| ↳ `files` | array | Array of files attached to message |
| ↳ `id` | string | File ID |
| ↳ `name` | string | File name |
| ↳ `mimetype` | string | MIME type |
| ↳ `size` | number | File size in bytes |
| ↳ `url_private` | string | Private download URL |
| ↳ `permalink` | string | Permanent link to file |
| ↳ `mode` | string | File mode |
| ↳ `id` | string | File ID |
| ↳ `mimetype` | string | MIME type |
| ↳ `size` | number | File size in bytes |
| ↳ `url_private` | string | Private download URL |
| ↳ `permalink` | string | Permanent link to message |
| ↳ `mode` | string | File mode |
| ↳ `attachments` | array | Array of legacy attachments |
| ↳ `blocks` | array | Array of Block Kit blocks |
| ↳ `edited` | object | Edit information if message was edited |
| ↳ `user` | string | User ID who edited |
| ↳ `ts` | string | Edit timestamp |
### `slack_get_message`
@@ -187,46 +142,6 @@ Retrieve a specific message by its timestamp. Useful for getting a thread parent
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | object | The retrieved message object |
| ↳ `type` | string | Message type |
| ↳ `ts` | string | Edit timestamp |
| ↳ `text` | string | Message text content |
| ↳ `user` | string | User ID who edited |
| ↳ `bot_id` | string | Bot ID if sent by a bot |
| ↳ `username` | string | Display username |
| ↳ `channel` | string | Channel ID |
| ↳ `team` | string | Team ID |
| ↳ `thread_ts` | string | Thread parent timestamp |
| ↳ `parent_user_id` | string | User ID of thread parent |
| ↳ `reply_count` | number | Number of thread replies |
| ↳ `reply_users_count` | number | Number of users who replied |
| ↳ `latest_reply` | string | Timestamp of latest reply |
| ↳ `subtype` | string | Message subtype |
| ↳ `reactions` | array | Array of reactions on this message |
| ↳ `name` | string | Emoji name |
| ↳ `count` | number | Number of reactions |
| ↳ `users` | array | User IDs who reacted |
| ↳ `name` | string | File name |
| ↳ `count` | number | Number of reactions |
| ↳ `users` | array | User IDs who reacted |
| ↳ `is_starred` | boolean | Whether message is starred |
| ↳ `pinned_to` | array | Channel IDs where message is pinned |
| ↳ `files` | array | Files attached to message |
| ↳ `id` | string | File ID |
| ↳ `name` | string | File name |
| ↳ `mimetype` | string | MIME type |
| ↳ `size` | number | File size in bytes |
| ↳ `url_private` | string | Private download URL |
| ↳ `permalink` | string | Permanent link to file |
| ↳ `id` | string | File ID |
| ↳ `mimetype` | string | MIME type |
| ↳ `size` | number | File size in bytes |
| ↳ `url_private` | string | Private download URL |
| ↳ `permalink` | string | Permanent link to message |
| ↳ `attachments` | array | Legacy attachments |
| ↳ `blocks` | array | Block Kit blocks |
| ↳ `edited` | object | Edit information if message was edited |
| ↳ `user` | string | User ID who edited |
| ↳ `ts` | string | Edit timestamp |
### `slack_get_thread`
@@ -247,39 +162,6 @@ Retrieve an entire thread including the parent message and all replies. Useful f
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `parentMessage` | object | The thread parent message |
| ↳ `type` | string | Message type |
| ↳ `ts` | string | Message timestamp |
| ↳ `text` | string | Message text content |
| ↳ `user` | string | User ID who sent the message |
| ↳ `bot_id` | string | Bot ID if sent by a bot |
| ↳ `username` | string | Display username |
| ↳ `reply_count` | number | Total number of thread replies |
| ↳ `reply_users_count` | number | Number of users who replied |
| ↳ `latest_reply` | string | Timestamp of latest reply |
| ↳ `reactions` | array | Array of reactions on the parent message |
| ↳ `name` | string | Emoji name |
| ↳ `count` | number | Number of reactions |
| ↳ `users` | array | User IDs who reacted |
| ↳ `name` | string | File name |
| ↳ `count` | number | Number of reactions |
| ↳ `users` | array | User IDs who reacted |
| ↳ `files` | array | Files attached to the parent message |
| ↳ `id` | string | File ID |
| ↳ `name` | string | File name |
| ↳ `mimetype` | string | MIME type |
| ↳ `size` | number | File size in bytes |
| ↳ `id` | string | File ID |
| ↳ `mimetype` | string | MIME type |
| ↳ `size` | number | File size in bytes |
| `replies` | array | Array of reply messages in the thread \(excluding the parent\) |
| ↳ `ts` | string | Message timestamp |
| ↳ `text` | string | Message text content |
| ↳ `user` | string | User ID who sent the reply |
| ↳ `reactions` | array | Reactions on the reply |
| ↳ `files` | array | Files attached to the reply |
| `messages` | array | All messages in the thread \(parent + replies\) in chronological order |
| `replyCount` | number | Number of replies returned in this response |
| `hasMore` | boolean | Whether there are more messages in the thread \(pagination needed\) |
### `slack_list_channels`
@@ -300,19 +182,6 @@ List all channels in a Slack workspace. Returns public and private channels the
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `channels` | array | Array of channel objects from the workspace |
| ↳ `id` | string | Channel ID \(e.g., C1234567890\) |
| ↳ `name` | string | Channel name without # prefix |
| ↳ `is_private` | boolean | Whether the channel is private |
| ↳ `is_archived` | boolean | Whether the channel is archived |
| ↳ `is_member` | boolean | Whether the bot is a member of the channel |
| ↳ `num_members` | number | Number of members in the channel |
| ↳ `topic` | string | Channel topic |
| ↳ `purpose` | string | Channel purpose/description |
| ↳ `created` | number | Unix timestamp when channel was created |
| ↳ `creator` | string | User ID of channel creator |
| `ids` | array | Array of channel IDs for easy access |
| `names` | array | Array of channel names for easy access |
| `count` | number | Total number of channels returned |
### `slack_list_members`
@@ -332,7 +201,6 @@ List all members (user IDs) in a Slack channel. Use with Get User Info to resolv
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `members` | array | Array of user IDs who are members of the channel \(e.g., U1234567890\) |
| `count` | number | Total number of members returned |
### `slack_list_users`
@@ -352,21 +220,6 @@ List all users in a Slack workspace. Returns user profiles with names and avatar
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `users` | array | Array of user objects from the workspace |
| ↳ `id` | string | User ID \(e.g., U1234567890\) |
| ↳ `name` | string | Username \(handle\) |
| ↳ `real_name` | string | Full real name |
| ↳ `display_name` | string | Display name shown in Slack |
| ↳ `is_bot` | boolean | Whether the user is a bot |
| ↳ `is_admin` | boolean | Whether the user is a workspace admin |
| ↳ `is_owner` | boolean | Whether the user is the workspace owner |
| ↳ `deleted` | boolean | Whether the user is deactivated |
| ↳ `timezone` | string | User timezone identifier |
| ↳ `avatar` | string | URL to user avatar image |
| ↳ `status_text` | string | Custom status text |
| ↳ `status_emoji` | string | Custom status emoji |
| `ids` | array | Array of user IDs for easy access |
| `names` | array | Array of usernames for easy access |
| `count` | number | Total number of users returned |
### `slack_get_user`
@@ -385,34 +238,6 @@ Get detailed information about a specific Slack user by their user ID.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | Detailed user information |
| ↳ `id` | string | User ID |
| ↳ `name` | string | Username \(handle\) |
| ↳ `real_name` | string | Full real name |
| ↳ `display_name` | string | Display name shown in Slack |
| ↳ `first_name` | string | First name |
| ↳ `last_name` | string | Last name |
| ↳ `title` | string | Job title |
| ↳ `phone` | string | Phone number |
| ↳ `skype` | string | Skype handle |
| ↳ `is_bot` | boolean | Whether the user is a bot |
| ↳ `is_admin` | boolean | Whether the user is a workspace admin |
| ↳ `is_owner` | boolean | Whether the user is the workspace owner |
| ↳ `is_primary_owner` | boolean | Whether the user is the primary owner |
| ↳ `is_restricted` | boolean | Whether the user is a guest \(restricted\) |
| ↳ `is_ultra_restricted` | boolean | Whether the user is a single-channel guest |
| ↳ `deleted` | boolean | Whether the user is deactivated |
| ↳ `timezone` | string | Timezone identifier \(e.g., America/Los_Angeles\) |
| ↳ `timezone_label` | string | Human-readable timezone label |
| ↳ `timezone_offset` | number | Timezone offset in seconds from UTC |
| ↳ `avatar_24` | string | URL to 24px avatar |
| ↳ `avatar_48` | string | URL to 48px avatar |
| ↳ `avatar_72` | string | URL to 72px avatar |
| ↳ `avatar_192` | string | URL to 192px avatar |
| ↳ `avatar_512` | string | URL to 512px avatar |
| ↳ `status_text` | string | Custom status text |
| ↳ `status_emoji` | string | Custom status emoji |
| ↳ `status_expiration` | number | Unix timestamp when status expires |
| ↳ `updated` | number | Unix timestamp of last profile update |
### `slack_download`
@@ -454,9 +279,6 @@ Update a message previously sent by the bot in Slack
| `message` | object | Complete updated message object with all properties returned by Slack |
| `content` | string | Success message |
| `metadata` | object | Updated message metadata |
| ↳ `channel` | string | Channel ID |
| ↳ `timestamp` | string | Message timestamp |
| ↳ `text` | string | Updated message text |
### `slack_delete_message`
@@ -477,8 +299,6 @@ Delete a message previously sent by the bot in Slack
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Deleted message metadata |
| ↳ `channel` | string | Channel ID |
| ↳ `timestamp` | string | Message timestamp |
### `slack_add_reaction`
@@ -500,8 +320,5 @@ Add an emoji reaction to a Slack message
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Reaction metadata |
| ↳ `channel` | string | Channel ID |
| ↳ `timestamp` | string | Message timestamp |
| ↳ `reaction` | string | Emoji reaction name |

View File

@@ -37,17 +37,6 @@ Search for tracks, albums, artists, or playlists on Spotify. Returns matching re
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tracks` | array | List of matching tracks |
| ↳ `id` | string | Spotify track ID |
| ↳ `name` | string | Track name |
| ↳ `artists` | array | List of artist names |
| ↳ `album` | string | Album name |
| ↳ `duration_ms` | number | Track duration in milliseconds |
| ↳ `popularity` | number | Popularity score \(0-100\) |
| ↳ `preview_url` | string | URL to 30-second preview |
| ↳ `external_url` | string | Spotify URL |
| `artists` | array | List of matching artists |
| `albums` | array | List of matching albums |
| `playlists` | array | List of matching playlists |
### `spotify_get_track`
@@ -91,15 +80,6 @@ Get detailed information about multiple tracks on Spotify by their IDs (up to 50
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tracks` | array | List of tracks |
| ↳ `id` | string | Spotify track ID |
| ↳ `name` | string | Track name |
| ↳ `artists` | array | List of artists |
| ↳ `album` | object | Album information |
| ↳ `duration_ms` | number | Track duration in milliseconds |
| ↳ `explicit` | boolean | Whether the track has explicit content |
| ↳ `popularity` | number | Popularity score \(0-100\) |
| ↳ `preview_url` | string | URL to 30-second preview |
| ↳ `external_url` | string | Spotify URL |
### `spotify_get_album`
@@ -291,15 +271,6 @@ Get albums by an artist on Spotify. Can filter by album type.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `albums` | array | Artist |
| ↳ `id` | string | Spotify album ID |
| ↳ `name` | string | Album name |
| ↳ `album_type` | string | Type \(album, single, compilation\) |
| ↳ `total_tracks` | number | Number of tracks |
| ↳ `release_date` | string | Release date |
| ↳ `image_url` | string | Album cover URL |
| ↳ `external_url` | string | Spotify URL |
| `total` | number | Total number of albums available |
| `next` | string | URL for next page of results |
### `spotify_get_artist_top_tracks`
@@ -317,13 +288,6 @@ Get the top 10 most popular tracks by an artist on Spotify.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tracks` | array | Artist |
| ↳ `id` | string | Spotify track ID |
| ↳ `name` | string | Track name |
| ↳ `album` | object | Album information |
| ↳ `duration_ms` | number | Track duration in milliseconds |
| ↳ `popularity` | number | Popularity score \(0-100\) |
| ↳ `preview_url` | string | URL to 30-second preview |
| ↳ `external_url` | string | Spotify URL |
### `spotify_follow_artists`
@@ -808,11 +772,6 @@ Get the tracks in a Spotify playlist.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tracks` | array | List of tracks in the playlist |
| ↳ `added_at` | string | When the track was added |
| ↳ `added_by` | string | User ID who added the track |
| ↳ `track` | object | Track information |
| `total` | number | Total number of tracks in playlist |
| `next` | string | URL for next page of results |
### `spotify_get_playlist_cover`
@@ -846,17 +805,6 @@ Get the current user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `playlists` | array | User |
| ↳ `id` | string | Spotify playlist ID |
| ↳ `name` | string | Playlist name |
| ↳ `description` | string | Playlist description |
| ↳ `public` | boolean | Whether public |
| ↳ `collaborative` | boolean | Whether collaborative |
| ↳ `owner` | string | Owner display name |
| ↳ `total_tracks` | number | Number of tracks |
| ↳ `image_url` | string | Cover image URL |
| ↳ `external_url` | string | Spotify URL |
| `total` | number | Total number of playlists |
| `next` | string | URL for next page |
### `spotify_create_playlist`
@@ -1100,15 +1048,6 @@ Get the current user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tracks` | array | User |
| ↳ `id` | string | Spotify track ID |
| ↳ `name` | string | Track name |
| ↳ `artists` | array | List of artists |
| ↳ `album` | object | Album information |
| ↳ `duration_ms` | number | Duration in milliseconds |
| ↳ `popularity` | number | Popularity score |
| ↳ `external_url` | string | Spotify URL |
| `total` | number | Total number of top tracks |
| `next` | string | URL for next page |
### `spotify_get_top_artists`
@@ -1127,15 +1066,6 @@ Get the current user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `artists` | array | User |
| ↳ `id` | string | Spotify artist ID |
| ↳ `name` | string | Artist name |
| ↳ `genres` | array | List of genres |
| ↳ `popularity` | number | Popularity score |
| ↳ `followers` | number | Number of followers |
| ↳ `image_url` | string | Artist image URL |
| ↳ `external_url` | string | Spotify URL |
| `total` | number | Total number of top artists |
| `next` | string | URL for next page |
### `spotify_get_saved_tracks`
@@ -1154,10 +1084,6 @@ Get the current user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tracks` | array | User |
| ↳ `added_at` | string | When the track was saved |
| ↳ `track` | object | Track information |
| `total` | number | Total number of saved tracks |
| `next` | string | URL for next page |
### `spotify_save_tracks`
@@ -1226,9 +1152,6 @@ Get the user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Recently played tracks |
| ↳ `played_at` | string | When the track was played |
| ↳ `track` | object | Track information |
| `next` | string | URL for next page |
### `spotify_get_new_releases`
@@ -1338,13 +1261,6 @@ Get the user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `devices` | array | Available playback devices |
| ↳ `id` | string | Device ID |
| ↳ `is_active` | boolean | Whether device is active |
| ↳ `is_private_session` | boolean | Whether in private session |
| ↳ `is_restricted` | boolean | Whether device is restricted |
| ↳ `name` | string | Device name |
| ↳ `type` | string | Device type \(Computer, Smartphone, etc.\) |
| ↳ `volume_percent` | number | Current volume \(0-100\) |
### `spotify_get_queue`

View File

@@ -199,14 +199,6 @@ List files and directories in a remote directory
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `entries` | array | Array of file and directory entries |
| ↳ `name` | string | File or directory name |
| ↳ `type` | string | Entry type \(file, directory, symlink\) |
| ↳ `size` | number | File size in bytes |
| ↳ `permissions` | string | File permissions |
| ↳ `modified` | string | Last modified timestamp |
| `totalFiles` | number | Total number of files |
| `totalDirectories` | number | Total number of directories |
| `message` | string | Operation status message |
### `ssh_check_file_exists`

View File

@@ -79,16 +79,5 @@ Run an autonomous web agent to complete tasks and extract structured data
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `agentResult` | object | Result from the Stagehand agent execution |
| ↳ `success` | boolean | Whether the agent task completed successfully |
| ↳ `completed` | boolean | Whether the task was fully completed |
| ↳ `message` | string | Status message or final result |
| ↳ `actions` | array | Type of action performed |
| ↳ `type` | string | Type of action performed |
| ↳ `params` | object | Parameters used for the action |
| ↳ `result` | object | Result of the action |
| ↳ `type` | string | Type of action performed |
| ↳ `params` | object | Parameters used for the action |
| ↳ `result` | object | Result of the action |
| `structuredOutput` | object | Extracted data matching the provided output schema |

View File

@@ -61,10 +61,6 @@ Create a new Payment Intent to process a payment
| --------- | ---- | ----------- |
| `payment_intent` | json | The created Payment Intent object |
| `metadata` | json | Payment Intent metadata including ID, status, amount, and currency |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_retrieve_payment_intent`
@@ -83,10 +79,6 @@ Retrieve an existing Payment Intent by ID
| --------- | ---- | ----------- |
| `payment_intent` | json | The retrieved Payment Intent object |
| `metadata` | json | Payment Intent metadata including ID, status, amount, and currency |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_update_payment_intent`
@@ -110,10 +102,6 @@ Update an existing Payment Intent
| --------- | ---- | ----------- |
| `payment_intent` | json | The updated Payment Intent object |
| `metadata` | json | Payment Intent metadata including ID, status, amount, and currency |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_confirm_payment_intent`
@@ -133,10 +121,6 @@ Confirm a Payment Intent to complete the payment
| --------- | ---- | ----------- |
| `payment_intent` | json | The confirmed Payment Intent object |
| `metadata` | json | Payment Intent metadata including ID, status, amount, and currency |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_capture_payment_intent`
@@ -156,10 +140,6 @@ Capture an authorized Payment Intent
| --------- | ---- | ----------- |
| `payment_intent` | json | The captured Payment Intent object |
| `metadata` | json | Payment Intent metadata including ID, status, amount, and currency |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_cancel_payment_intent`
@@ -179,10 +159,6 @@ Cancel a Payment Intent
| --------- | ---- | ----------- |
| `payment_intent` | json | The canceled Payment Intent object |
| `metadata` | json | Payment Intent metadata including ID, status, amount, and currency |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_list_payment_intents`
@@ -203,8 +179,6 @@ List all Payment Intents
| --------- | ---- | ----------- |
| `payment_intents` | json | Array of Payment Intent objects |
| `metadata` | json | List metadata including count and has_more |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_payment_intents`
@@ -224,8 +198,6 @@ Search for Payment Intents using query syntax
| --------- | ---- | ----------- |
| `payment_intents` | json | Array of matching Payment Intent objects |
| `metadata` | json | Search metadata including count and has_more |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_create_customer`
@@ -250,9 +222,6 @@ Create a new customer object
| --------- | ---- | ----------- |
| `customer` | json | The created customer object |
| `metadata` | json | Customer metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `email` | string | Customer email address |
| ↳ `name` | string | Display name |
### `stripe_retrieve_customer`
@@ -271,9 +240,6 @@ Retrieve an existing customer by ID
| --------- | ---- | ----------- |
| `customer` | json | The retrieved customer object |
| `metadata` | json | Customer metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `email` | string | Customer email address |
| ↳ `name` | string | Display name |
### `stripe_update_customer`
@@ -298,9 +264,6 @@ Update an existing customer
| --------- | ---- | ----------- |
| `customer` | json | The updated customer object |
| `metadata` | json | Customer metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `email` | string | Customer email address |
| ↳ `name` | string | Display name |
### `stripe_delete_customer`
@@ -339,8 +302,6 @@ List all customers
| --------- | ---- | ----------- |
| `customers` | json | Array of customer objects |
| `metadata` | json | List metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_customers`
@@ -360,8 +321,6 @@ Search for customers using query syntax
| --------- | ---- | ----------- |
| `customers` | json | Array of matching customer objects |
| `metadata` | json | Search metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_create_subscription`
@@ -385,9 +344,6 @@ Create a new subscription for a customer
| --------- | ---- | ----------- |
| `subscription` | json | The created subscription object |
| `metadata` | json | Subscription metadata including ID, status, and customer |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `customer` | string | Associated customer ID |
### `stripe_retrieve_subscription`
@@ -406,9 +362,6 @@ Retrieve an existing subscription by ID
| --------- | ---- | ----------- |
| `subscription` | json | The retrieved subscription object |
| `metadata` | json | Subscription metadata including ID, status, and customer |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `customer` | string | Associated customer ID |
### `stripe_update_subscription`
@@ -430,9 +383,6 @@ Update an existing subscription
| --------- | ---- | ----------- |
| `subscription` | json | The updated subscription object |
| `metadata` | json | Subscription metadata including ID, status, and customer |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `customer` | string | Associated customer ID |
### `stripe_cancel_subscription`
@@ -453,9 +403,6 @@ Cancel a subscription
| --------- | ---- | ----------- |
| `subscription` | json | The canceled subscription object |
| `metadata` | json | Subscription metadata including ID, status, and customer |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `customer` | string | Associated customer ID |
### `stripe_resume_subscription`
@@ -474,9 +421,6 @@ Resume a subscription that was scheduled for cancellation
| --------- | ---- | ----------- |
| `subscription` | json | The resumed subscription object |
| `metadata` | json | Subscription metadata including ID, status, and customer |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `customer` | string | Associated customer ID |
### `stripe_list_subscriptions`
@@ -498,8 +442,6 @@ List all subscriptions
| --------- | ---- | ----------- |
| `subscriptions` | json | Array of subscription objects |
| `metadata` | json | List metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_subscriptions`
@@ -519,8 +461,6 @@ Search for subscriptions using query syntax
| --------- | ---- | ----------- |
| `subscriptions` | json | Array of matching subscription objects |
| `metadata` | json | Search metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_create_invoice`
@@ -543,10 +483,6 @@ Create a new invoice
| --------- | ---- | ----------- |
| `invoice` | json | The created invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_retrieve_invoice`
@@ -565,10 +501,6 @@ Retrieve an existing invoice by ID
| --------- | ---- | ----------- |
| `invoice` | json | The retrieved invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_update_invoice`
@@ -590,10 +522,6 @@ Update an existing invoice
| --------- | ---- | ----------- |
| `invoice` | json | The updated invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_delete_invoice`
@@ -631,10 +559,6 @@ Finalize a draft invoice
| --------- | ---- | ----------- |
| `invoice` | json | The finalized invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_pay_invoice`
@@ -654,10 +578,6 @@ Pay an invoice
| --------- | ---- | ----------- |
| `invoice` | json | The paid invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_void_invoice`
@@ -676,10 +596,6 @@ Void an invoice
| --------- | ---- | ----------- |
| `invoice` | json | The voided invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_send_invoice`
@@ -698,10 +614,6 @@ Send an invoice to the customer
| --------- | ---- | ----------- |
| `invoice` | json | The sent invoice object |
| `metadata` | json | Invoice metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount_due` | number | Amount remaining to be paid in smallest currency unit |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_list_invoices`
@@ -722,8 +634,6 @@ List all invoices
| --------- | ---- | ----------- |
| `invoices` | json | Array of invoice objects |
| `metadata` | json | List metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_invoices`
@@ -743,8 +653,6 @@ Search for invoices using query syntax
| --------- | ---- | ----------- |
| `invoices` | json | Array of matching invoice objects |
| `metadata` | json | Search metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_create_charge`
@@ -769,11 +677,6 @@ Create a new charge to process a payment
| --------- | ---- | ----------- |
| `charge` | json | The created Charge object |
| `metadata` | json | Charge metadata including ID, status, amount, currency, and paid status |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
| ↳ `paid` | boolean | Whether payment has been received |
### `stripe_retrieve_charge`
@@ -792,11 +695,6 @@ Retrieve an existing charge by ID
| --------- | ---- | ----------- |
| `charge` | json | The retrieved Charge object |
| `metadata` | json | Charge metadata including ID, status, amount, currency, and paid status |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
| ↳ `paid` | boolean | Whether payment has been received |
### `stripe_update_charge`
@@ -817,11 +715,6 @@ Update an existing charge
| --------- | ---- | ----------- |
| `charge` | json | The updated Charge object |
| `metadata` | json | Charge metadata including ID, status, amount, currency, and paid status |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
| ↳ `paid` | boolean | Whether payment has been received |
### `stripe_capture_charge`
@@ -841,11 +734,6 @@ Capture an uncaptured charge
| --------- | ---- | ----------- |
| `charge` | json | The captured Charge object |
| `metadata` | json | Charge metadata including ID, status, amount, currency, and paid status |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `status` | string | Current state of the resource |
| ↳ `amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
| ↳ `paid` | boolean | Whether payment has been received |
### `stripe_list_charges`
@@ -866,8 +754,6 @@ List all charges
| --------- | ---- | ----------- |
| `charges` | json | Array of Charge objects |
| `metadata` | json | List metadata including count and has_more |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_charges`
@@ -887,8 +773,6 @@ Search for charges using query syntax
| --------- | ---- | ----------- |
| `charges` | json | Array of matching Charge objects |
| `metadata` | json | Search metadata including count and has_more |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_create_product`
@@ -911,9 +795,6 @@ Create a new product object
| --------- | ---- | ----------- |
| `product` | json | The created product object |
| `metadata` | json | Product metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `name` | string | Display name |
| ↳ `active` | boolean | Whether the resource is currently active |
### `stripe_retrieve_product`
@@ -932,9 +813,6 @@ Retrieve an existing product by ID
| --------- | ---- | ----------- |
| `product` | json | The retrieved product object |
| `metadata` | json | Product metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `name` | string | Display name |
| ↳ `active` | boolean | Whether the resource is currently active |
### `stripe_update_product`
@@ -958,9 +836,6 @@ Update an existing product
| --------- | ---- | ----------- |
| `product` | json | The updated product object |
| `metadata` | json | Product metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `name` | string | Display name |
| ↳ `active` | boolean | Whether the resource is currently active |
### `stripe_delete_product`
@@ -998,8 +873,6 @@ List all products
| --------- | ---- | ----------- |
| `products` | json | Array of product objects |
| `metadata` | json | List metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_products`
@@ -1019,8 +892,6 @@ Search for products using query syntax
| --------- | ---- | ----------- |
| `products` | json | Array of matching product objects |
| `metadata` | json | Search metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_create_price`
@@ -1044,10 +915,6 @@ Create a new price for a product
| --------- | ---- | ----------- |
| `price` | json | The created price object |
| `metadata` | json | Price metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `product` | string | Associated product ID |
| ↳ `unit_amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_retrieve_price`
@@ -1066,10 +933,6 @@ Retrieve an existing price by ID
| --------- | ---- | ----------- |
| `price` | json | The retrieved price object |
| `metadata` | json | Price metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `product` | string | Associated product ID |
| ↳ `unit_amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_update_price`
@@ -1090,10 +953,6 @@ Update an existing price
| --------- | ---- | ----------- |
| `price` | json | The updated price object |
| `metadata` | json | Price metadata |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `product` | string | Associated product ID |
| ↳ `unit_amount` | number | Amount in smallest currency unit \(e.g., cents\) |
| ↳ `currency` | string | Three-letter ISO currency code \(lowercase\) |
### `stripe_list_prices`
@@ -1114,8 +973,6 @@ List all prices
| --------- | ---- | ----------- |
| `prices` | json | Array of price objects |
| `metadata` | json | List metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_search_prices`
@@ -1135,8 +992,6 @@ Search for prices using query syntax
| --------- | ---- | ----------- |
| `prices` | json | Array of matching price objects |
| `metadata` | json | Search metadata |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |
### `stripe_retrieve_event`
@@ -1155,9 +1010,6 @@ Retrieve an existing Event by ID
| --------- | ---- | ----------- |
| `event` | json | The retrieved Event object |
| `metadata` | json | Event metadata including ID, type, and created timestamp |
| ↳ `id` | string | Stripe unique identifier |
| ↳ `type` | string | Event type identifier |
| ↳ `created` | number | Unix timestamp of creation |
### `stripe_list_events`
@@ -1178,7 +1030,5 @@ List all Events
| --------- | ---- | ----------- |
| `events` | json | Array of Event objects |
| `metadata` | json | List metadata including count and has_more |
| ↳ `count` | number | Number of items returned |
| ↳ `has_more` | boolean | Whether more items exist beyond this page |

View File

@@ -279,13 +279,6 @@ Introspect Supabase database schema to get table structures, columns, and relati
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `tables` | array | Array of table schemas with columns, keys, and indexes |
| ↳ `name` | string | Table name |
| ↳ `schema` | string | Database schema name |
| ↳ `columns` | array | Array of column definitions |
| ↳ `primaryKey` | array | Array of primary key column names |
| ↳ `foreignKeys` | array | Array of foreign key relationships |
| ↳ `indexes` | array | Array of index definitions |
| `schemas` | array | List of schemas found in the database |
### `supabase_storage_upload`

View File

@@ -65,11 +65,7 @@ Perform AI-powered web searches using Tavily
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `query` | string | The search query that was executed |
| `results` | array | Search results with titles, URLs, content snippets, and optional metadata |
| `answer` | string | LLM-generated answer to the query \(if requested\) |
| `images` | array | Query-related images \(if requested\) |
| `auto_parameters` | object | Automatically selected parameters based on query intent \(if enabled\) |
| `response_time` | number | Time taken for the search request in seconds |
| `results` | array | results output from the tool |
### `tavily_extract`
@@ -91,13 +87,6 @@ Extract raw content from multiple web pages simultaneously using Tavily
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | The URL that was extracted |
| ↳ `url` | string | The URL that was extracted |
| ↳ `raw_content` | string | The raw text content from the webpage |
| ↳ `favicon` | string | Favicon URL \(if requested\) |
| `failed_results` | array | The URL that failed extraction |
| ↳ `url` | string | The URL that failed extraction |
| ↳ `error` | string | Error message for the failed extraction |
| `response_time` | number | Time taken for the extraction request in seconds |
### `tavily_crawl`
@@ -129,11 +118,6 @@ Systematically crawl and extract content from websites using Tavily
| --------- | ---- | ----------- |
| `base_url` | string | The base URL that was crawled |
| `results` | array | The crawled page URL |
| ↳ `url` | string | The crawled page URL |
| ↳ `raw_content` | string | Extracted content from the page |
| ↳ `favicon` | string | Favicon URL \(if requested\) |
| `response_time` | number | Time taken for the crawl request in seconds |
| `request_id` | string | Unique identifier for support reference |
### `tavily_map`
@@ -161,8 +145,5 @@ Discover and visualize website structure using Tavily
| --------- | ---- | ----------- |
| `base_url` | string | The base URL that was mapped |
| `results` | array | Discovered URL |
| ↳ `url` | string | Discovered URL |
| `response_time` | number | Time taken for the map request in seconds |
| `request_id` | string | Unique identifier for support reference |

View File

@@ -76,24 +76,6 @@ Send messages to Telegram channels or users through the Telegram Bot API. Enable
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Telegram message data |
| ↳ `message_id` | number | Unique Telegram message identifier |
| ↳ `from` | object | Chat information |
| ↳ `id` | number | Chat ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Chat username \(if available\) |
| ↳ `username` | string | Chat title \(for groups and channels\) |
| ↳ `id` | number | Bot user ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Bot first name |
| ↳ `username` | string | Bot username |
| ↳ `chat` | object | Information about the bot that sent the message |
| ↳ `id` | number | Bot user ID |
| ↳ `first_name` | string | Bot first name |
| ↳ `username` | string | Bot username |
| ↳ `type` | string | chat type private or channel |
| ↳ `type` | string | chat type private or channel |
| ↳ `date` | number | Unix timestamp when message was sent |
| ↳ `text` | string | Text content of the sent message |
### `telegram_delete_message`
@@ -113,8 +95,6 @@ Delete messages in Telegram channels or chats through the Telegram Bot API. Requ
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Delete operation result |
| ↳ `ok` | boolean | API response success status |
| ↳ `deleted` | boolean | Whether the message was successfully deleted |
### `telegram_send_photo`
@@ -135,35 +115,6 @@ Send photos to Telegram channels or users through the Telegram Bot API.
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Telegram message data including optional photo\(s\) |
| ↳ `message_id` | number | Unique Telegram message identifier |
| ↳ `from` | object | Chat information |
| ↳ `id` | number | Chat ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Chat username \(if available\) |
| ↳ `username` | string | Chat title \(for groups and channels\) |
| ↳ `id` | number | Bot user ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Bot first name |
| ↳ `username` | string | Bot username |
| ↳ `chat` | object | Information about the bot that sent the message |
| ↳ `id` | number | Bot user ID |
| ↳ `first_name` | string | Bot first name |
| ↳ `username` | string | Bot username |
| ↳ `type` | string | Chat type \(private, group, supergroup, channel\) |
| ↳ `type` | string | Chat type \(private, group, supergroup, channel\) |
| ↳ `date` | number | Unix timestamp when message was sent |
| ↳ `text` | string | Text content of the sent message \(if applicable\) |
| ↳ `photo` | array | List of photos included in the message |
| ↳ `file_id` | string | Unique file ID of the photo |
| ↳ `file_unique_id` | string | Unique identifier for this file across different bots |
| ↳ `file_size` | number | Size of the photo file in bytes |
| ↳ `width` | number | Photo width in pixels |
| ↳ `height` | number | Photo height in pixels |
| ↳ `file_id` | string | Unique file ID of the photo |
| ↳ `file_unique_id` | string | Unique identifier for this file across different bots |
| ↳ `file_size` | number | Size of the photo file in bytes |
| ↳ `width` | number | Photo width in pixels |
| ↳ `height` | number | Photo height in pixels |
### `telegram_send_video`
@@ -184,85 +135,6 @@ Send videos to Telegram channels or users through the Telegram Bot API.
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Telegram message data including optional media |
| ↳ `message_id` | number | Unique Telegram message identifier |
| ↳ `from` | object | Information about the sender |
| ↳ `id` | number | Sender ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Sender |
| ↳ `username` | string | Sender |
| ↳ `id` | number | Chat ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `chat` | object | Information about the chat where message was sent |
| ↳ `id` | number | Chat ID |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `date` | number | Unix timestamp when the message was sent |
| ↳ `text` | string | Text content of the sent message \(if applicable\) |
| ↳ `format` | object | Media format information \(for videos, GIFs, etc.\) |
| ↳ `file_name` | string | Media file name |
| ↳ `mime_type` | string | Media MIME type |
| ↳ `duration` | number | Duration of media in seconds |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `thumbnail` | object | Thumbnail image details |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_id` | string | Media file ID |
| ↳ `file_unique_id` | string | Unique media file identifier |
| ↳ `file_size` | number | Size of media file in bytes |
| ↳ `thumb` | object | Secondary thumbnail details \(duplicate of thumbnail\) |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_name` | string | Document file name |
| ↳ `mime_type` | string | Document MIME type |
| ↳ `duration` | number | Duration of media in seconds |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `thumbnail` | object | Document thumbnail information |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_id` | string | Document file ID |
| ↳ `file_unique_id` | string | Unique document file identifier |
| ↳ `file_size` | number | Size of document file in bytes |
| ↳ `thumb` | object | Duplicate thumbnail info \(used for compatibility\) |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `document` | object | Document file details if the message contains a document |
| ↳ `file_name` | string | Document file name |
| ↳ `mime_type` | string | Document MIME type |
| ↳ `thumbnail` | object | Document thumbnail information |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_id` | string | Document file ID |
| ↳ `file_unique_id` | string | Unique document file identifier |
| ↳ `file_size` | number | Size of document file in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `thumb` | object | Duplicate thumbnail info \(used for compatibility\) |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
### `telegram_send_audio`
@@ -283,41 +155,6 @@ Send audio files to Telegram channels or users through the Telegram Bot API.
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Telegram message data including voice/audio information |
| ↳ `message_id` | number | Unique Telegram message identifier |
| ↳ `from` | object | Information about the sender |
| ↳ `id` | number | Sender ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Sender |
| ↳ `username` | string | Sender |
| ↳ `id` | number | Chat ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `chat` | object | Information about the chat where the message was sent |
| ↳ `id` | number | Chat ID |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `date` | number | Unix timestamp when the message was sent |
| ↳ `text` | string | Text content of the sent message \(if applicable\) |
| ↳ `audio` | object | Audio file details |
| ↳ `duration` | number | Duration of the audio in seconds |
| ↳ `performer` | string | Performer of the audio |
| ↳ `title` | string | Title of the audio |
| ↳ `file_name` | string | Original filename of the audio |
| ↳ `mime_type` | string | MIME type of the audio file |
| ↳ `file_id` | string | Unique file identifier for this audio |
| ↳ `file_unique_id` | string | Unique identifier across different bots for this file |
| ↳ `file_size` | number | Size of the audio file in bytes |
| ↳ `duration` | number | Duration of the audio in seconds |
| ↳ `performer` | string | Performer of the audio |
| ↳ `title` | string | Title of the audio |
| ↳ `file_name` | string | Original filename of the audio |
| ↳ `mime_type` | string | MIME type of the audio file |
| ↳ `file_id` | string | Unique file identifier for this audio |
| ↳ `file_unique_id` | string | Unique identifier across different bots for this file |
| ↳ `file_size` | number | Size of the audio file in bytes |
### `telegram_send_animation`
@@ -338,85 +175,6 @@ Send animations (GIFs) to Telegram channels or users through the Telegram Bot AP
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Telegram message data including optional media |
| ↳ `message_id` | number | Unique Telegram message identifier |
| ↳ `from` | object | Information about the sender |
| ↳ `id` | number | Sender ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Sender |
| ↳ `username` | string | Sender |
| ↳ `id` | number | Chat ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `chat` | object | Information about the chat where message was sent |
| ↳ `id` | number | Chat ID |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `date` | number | Unix timestamp when the message was sent |
| ↳ `text` | string | Text content of the sent message \(if applicable\) |
| ↳ `format` | object | Media format information \(for videos, GIFs, etc.\) |
| ↳ `file_name` | string | Media file name |
| ↳ `mime_type` | string | Media MIME type |
| ↳ `duration` | number | Duration of media in seconds |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `thumbnail` | object | Thumbnail image details |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_id` | string | Media file ID |
| ↳ `file_unique_id` | string | Unique media file identifier |
| ↳ `file_size` | number | Size of media file in bytes |
| ↳ `thumb` | object | Secondary thumbnail details \(duplicate of thumbnail\) |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_name` | string | Document file name |
| ↳ `mime_type` | string | Document MIME type |
| ↳ `duration` | number | Duration of media in seconds |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `thumbnail` | object | Document thumbnail information |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_id` | string | Document file ID |
| ↳ `file_unique_id` | string | Unique document file identifier |
| ↳ `file_size` | number | Size of document file in bytes |
| ↳ `thumb` | object | Duplicate thumbnail info \(used for compatibility\) |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `document` | object | Document file details if the message contains a document |
| ↳ `file_name` | string | Document file name |
| ↳ `mime_type` | string | Document MIME type |
| ↳ `thumbnail` | object | Document thumbnail information |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `file_id` | string | Document file ID |
| ↳ `file_unique_id` | string | Unique document file identifier |
| ↳ `file_size` | number | Size of document file in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
| ↳ `thumb` | object | Duplicate thumbnail info \(used for compatibility\) |
| ↳ `file_id` | string | Thumbnail file ID |
| ↳ `file_unique_id` | string | Unique thumbnail file identifier |
| ↳ `file_size` | number | Thumbnail file size in bytes |
| ↳ `width` | number | Thumbnail width in pixels |
| ↳ `height` | number | Thumbnail height in pixels |
### `telegram_send_document`
@@ -437,33 +195,5 @@ Send documents (PDF, ZIP, DOC, etc.) to Telegram channels or users through the T
| --------- | ---- | ----------- |
| `message` | string | Success or error message |
| `data` | object | Telegram message data including document |
| ↳ `message_id` | number | Unique Telegram message identifier |
| ↳ `from` | object | Information about the sender |
| ↳ `id` | number | Sender ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Sender |
| ↳ `username` | string | Sender |
| ↳ `id` | number | Chat ID |
| ↳ `is_bot` | boolean | Whether the chat is a bot or not |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `chat` | object | Information about the chat where message was sent |
| ↳ `id` | number | Chat ID |
| ↳ `first_name` | string | Chat first name \(if private chat\) |
| ↳ `username` | string | Chat username \(for private or channels\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `type` | string | Type of chat \(private, group, supergroup, or channel\) |
| ↳ `date` | number | Unix timestamp when the message was sent |
| ↳ `document` | object | Document file details |
| ↳ `file_name` | string | Document file name |
| ↳ `mime_type` | string | Document MIME type |
| ↳ `file_id` | string | Document file ID |
| ↳ `file_unique_id` | string | Unique document file identifier |
| ↳ `file_size` | number | Size of document file in bytes |
| ↳ `file_name` | string | Document file name |
| ↳ `mime_type` | string | Document MIME type |
| ↳ `file_id` | string | Document file ID |
| ↳ `file_unique_id` | string | Unique document file identifier |
| ↳ `file_size` | number | Size of document file in bytes |

View File

@@ -63,3 +63,8 @@ Execute SQL queries against Tinybird Pipes and Data Sources using the Query API.
| `statistics` | json | Query execution statistics - elapsed time, rows read, bytes read \(only available with FORMAT JSON\) |
## Notes
- Category: `tools`
- Type: `tinybird`

View File

@@ -94,33 +94,6 @@ Retrieve insights and analytics for Typeform forms
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `fields` | array | Number of users who dropped off at this field |
| ↳ `dropoffs` | number | Number of users who dropped off at this field |
| ↳ `id` | string | Unique field ID |
| ↳ `label` | string | Field label |
| ↳ `ref` | string | Field reference name |
| ↳ `title` | string | Field title/question |
| ↳ `type` | string | Field type \(e.g., short_text, multiple_choice\) |
| ↳ `views` | number | Number of times this field was viewed |
| `form` | object | Average completion time for this platform |
| ↳ `platforms` | array | Average completion time for this platform |
| ↳ `average_time` | number | Average completion time for this platform |
| ↳ `completion_rate` | number | Completion rate for this platform |
| ↳ `platform` | string | Platform name \(e.g., desktop, mobile\) |
| ↳ `responses_count` | number | Number of responses from this platform |
| ↳ `total_visits` | number | Total visits from this platform |
| ↳ `unique_visits` | number | Unique visits from this platform |
| ↳ `average_time` | number | Overall average completion time |
| ↳ `completion_rate` | number | Overall completion rate |
| ↳ `platform` | string | Platform name \(e.g., desktop, mobile\) |
| ↳ `responses_count` | number | Total number of responses |
| ↳ `total_visits` | number | Total number of visits |
| ↳ `unique_visits` | number | Total number of unique visits |
| ↳ `summary` | object | Overall average completion time |
| ↳ `average_time` | number | Overall average completion time |
| ↳ `completion_rate` | number | Overall completion rate |
| ↳ `responses_count` | number | Total number of responses |
| ↳ `total_visits` | number | Total number of visits |
| ↳ `unique_visits` | number | Total number of unique visits |
### `typeform_list_forms`

View File

@@ -55,8 +55,5 @@ Process and analyze images using advanced vision models. Capable of understandin
| `model` | string | The vision model that was used for analysis |
| `tokens` | number | Total tokens used for the analysis |
| `usage` | object | Detailed token usage breakdown |
| ↳ `input_tokens` | number | Tokens used for input processing |
| ↳ `output_tokens` | number | Tokens used for response generation |
| ↳ `total_tokens` | number | Total tokens consumed |

View File

@@ -50,15 +50,6 @@ Read content from a Wealthbox note
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Note data and metadata |
| ↳ `content` | string | Formatted note information |
| ↳ `note` | object | Raw note data from Wealthbox |
| ↳ `metadata` | object | Operation metadata |
| ↳ `itemId` | string | ID of the note |
| ↳ `noteId` | string | ID of the note |
| ↳ `itemType` | string | Type of item \(note\) |
| ↳ `itemId` | string | ID of the note |
| ↳ `noteId` | string | ID of the note |
| ↳ `itemType` | string | Type of item \(note\) |
### `wealthbox_write_note`
@@ -77,15 +68,6 @@ Create or update a Wealthbox note
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created or updated note data and metadata |
| ↳ `note` | object | Raw note data from Wealthbox |
| ↳ `success` | boolean | Operation success indicator |
| ↳ `metadata` | object | Operation metadata |
| ↳ `itemId` | string | ID of the created/updated note |
| ↳ `noteId` | string | ID of the created/updated note |
| ↳ `itemType` | string | Type of item \(note\) |
| ↳ `itemId` | string | ID of the created/updated note |
| ↳ `noteId` | string | ID of the created/updated note |
| ↳ `itemType` | string | Type of item \(note\) |
### `wealthbox_read_contact`
@@ -103,15 +85,6 @@ Read content from a Wealthbox contact
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Contact data and metadata |
| ↳ `content` | string | Formatted contact information |
| ↳ `contact` | object | Raw contact data from Wealthbox |
| ↳ `metadata` | object | Operation metadata |
| ↳ `itemId` | string | ID of the contact |
| ↳ `contactId` | string | ID of the contact |
| ↳ `itemType` | string | Type of item \(contact\) |
| ↳ `itemId` | string | ID of the contact |
| ↳ `contactId` | string | ID of the contact |
| ↳ `itemType` | string | Type of item \(contact\) |
### `wealthbox_write_contact`
@@ -132,15 +105,6 @@ Create a new Wealthbox contact
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created or updated contact data and metadata |
| ↳ `contact` | object | Raw contact data from Wealthbox |
| ↳ `success` | boolean | Operation success indicator |
| ↳ `metadata` | object | Operation metadata |
| ↳ `itemId` | string | ID of the created/updated contact |
| ↳ `contactId` | string | ID of the created/updated contact |
| ↳ `itemType` | string | Type of item \(contact\) |
| ↳ `itemId` | string | ID of the created/updated contact |
| ↳ `contactId` | string | ID of the created/updated contact |
| ↳ `itemType` | string | Type of item \(contact\) |
### `wealthbox_read_task`
@@ -158,15 +122,6 @@ Read content from a Wealthbox task
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Task data and metadata |
| ↳ `content` | string | Formatted task information |
| ↳ `task` | object | Raw task data from Wealthbox |
| ↳ `metadata` | object | Operation metadata |
| ↳ `itemId` | string | ID of the task |
| ↳ `taskId` | string | ID of the task |
| ↳ `itemType` | string | Type of item \(task\) |
| ↳ `itemId` | string | ID of the task |
| ↳ `taskId` | string | ID of the task |
| ↳ `itemType` | string | Type of item \(task\) |
### `wealthbox_write_task`
@@ -187,14 +142,5 @@ Create or update a Wealthbox task
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Created or updated task data and metadata |
| ↳ `task` | object | Raw task data from Wealthbox |
| ↳ `success` | boolean | Operation success indicator |
| ↳ `metadata` | object | Operation metadata |
| ↳ `itemId` | string | ID of the created/updated task |
| ↳ `taskId` | string | ID of the created/updated task |
| ↳ `itemType` | string | Type of item \(task\) |
| ↳ `itemId` | string | ID of the created/updated task |
| ↳ `taskId` | string | ID of the created/updated task |
| ↳ `itemType` | string | Type of item \(task\) |

View File

@@ -47,12 +47,6 @@ Get a summary and metadata for a specific Wikipedia page.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `summary` | object | Wikipedia page summary and metadata |
| ↳ `title` | string | Page title |
| ↳ `extract` | string | Page extract/summary text |
| ↳ `description` | string | Short page description |
| ↳ `thumbnail` | object | Thumbnail image data |
| ↳ `content_urls` | object | URLs to access the page |
| ↳ `pageid` | number | Wikipedia page ID |
### `wikipedia_search`
@@ -70,8 +64,6 @@ Search for Wikipedia pages by title or content.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `searchResults` | array | Array of matching Wikipedia pages |
| `totalHits` | number | Total number of search results found |
| `query` | string | The search query that was executed |
### `wikipedia_content`
@@ -88,11 +80,6 @@ Get the full HTML content of a Wikipedia page.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | object | Full HTML content and metadata of the Wikipedia page |
| ↳ `title` | string | Page title |
| ↳ `pageid` | number | Wikipedia page ID |
| ↳ `html` | string | Full HTML content of the page |
| ↳ `revision` | number | Page revision number |
| ↳ `timestamp` | string | Last modified timestamp |
### `wikipedia_random`
@@ -108,10 +95,5 @@ Get a random Wikipedia page.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `randomPage` | object | Random Wikipedia page data |
| ↳ `title` | string | Page title |
| ↳ `extract` | string | Page extract/summary |
| ↳ `description` | string | Page description |
| ↳ `thumbnail` | object | Thumbnail image data |
| ↳ `content_urls` | object | URLs to access the page |

View File

@@ -50,20 +50,6 @@ Create a new blog post in WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `post` | object | The created post |
| ↳ `id` | number | Post ID |
| ↳ `date` | string | Post creation date |
| ↳ `modified` | string | Post modification date |
| ↳ `slug` | string | Post slug |
| ↳ `status` | string | Post status |
| ↳ `type` | string | Post type |
| ↳ `link` | string | Post URL |
| ↳ `title` | object | Post title object |
| ↳ `content` | object | Post content object |
| ↳ `excerpt` | object | Post excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `categories` | array | Category IDs |
| ↳ `tags` | array | Tag IDs |
### `wordpress_update_post`
@@ -89,20 +75,6 @@ Update an existing blog post in WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `post` | object | The updated post |
| ↳ `id` | number | Post ID |
| ↳ `date` | string | Post creation date |
| ↳ `modified` | string | Post modification date |
| ↳ `slug` | string | Post slug |
| ↳ `status` | string | Post status |
| ↳ `type` | string | Post type |
| ↳ `link` | string | Post URL |
| ↳ `title` | object | Post title object |
| ↳ `content` | object | Post content object |
| ↳ `excerpt` | object | Post excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `categories` | array | Category IDs |
| ↳ `tags` | array | Tag IDs |
### `wordpress_delete_post`
@@ -122,20 +94,6 @@ Delete a blog post from WordPress.com
| --------- | ---- | ----------- |
| `deleted` | boolean | Whether the post was deleted |
| `post` | object | The deleted post |
| ↳ `id` | number | Post ID |
| ↳ `date` | string | Post creation date |
| ↳ `modified` | string | Post modification date |
| ↳ `slug` | string | Post slug |
| ↳ `status` | string | Post status |
| ↳ `type` | string | Post type |
| ↳ `link` | string | Post URL |
| ↳ `title` | object | Post title object |
| ↳ `content` | object | Post content object |
| ↳ `excerpt` | object | Post excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `categories` | array | Category IDs |
| ↳ `tags` | array | Tag IDs |
### `wordpress_get_post`
@@ -153,20 +111,6 @@ Get a single blog post from WordPress.com by ID
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `post` | object | The retrieved post |
| ↳ `id` | number | Post ID |
| ↳ `date` | string | Post creation date |
| ↳ `modified` | string | Post modification date |
| ↳ `slug` | string | Post slug |
| ↳ `status` | string | Post status |
| ↳ `type` | string | Post type |
| ↳ `link` | string | Post URL |
| ↳ `title` | object | Post title object |
| ↳ `content` | object | Post content object |
| ↳ `excerpt` | object | Post excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `categories` | array | Category IDs |
| ↳ `tags` | array | Tag IDs |
### `wordpress_list_posts`
@@ -192,22 +136,6 @@ List blog posts from WordPress.com with optional filters
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `posts` | array | List of posts |
| ↳ `id` | number | Post ID |
| ↳ `date` | string | Post creation date |
| ↳ `modified` | string | Post modification date |
| ↳ `slug` | string | Post slug |
| ↳ `status` | string | Post status |
| ↳ `type` | string | Post type |
| ↳ `link` | string | Post URL |
| ↳ `title` | object | Post title object |
| ↳ `content` | object | Post content object |
| ↳ `excerpt` | object | Post excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `categories` | array | Category IDs |
| ↳ `tags` | array | Tag IDs |
| `total` | number | Total number of posts |
| `totalPages` | number | Total number of pages |
### `wordpress_create_page`
@@ -232,20 +160,6 @@ Create a new page in WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `page` | object | The created page |
| ↳ `id` | number | Page ID |
| ↳ `date` | string | Page creation date |
| ↳ `modified` | string | Page modification date |
| ↳ `slug` | string | Page slug |
| ↳ `status` | string | Page status |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Page URL |
| ↳ `title` | object | Page title object |
| ↳ `content` | object | Page content object |
| ↳ `excerpt` | object | Page excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `parent` | number | Parent page ID |
| ↳ `menu_order` | number | Menu order |
### `wordpress_update_page`
@@ -271,20 +185,6 @@ Update an existing page in WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `page` | object | The updated page |
| ↳ `id` | number | Page ID |
| ↳ `date` | string | Page creation date |
| ↳ `modified` | string | Page modification date |
| ↳ `slug` | string | Page slug |
| ↳ `status` | string | Page status |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Page URL |
| ↳ `title` | object | Page title object |
| ↳ `content` | object | Page content object |
| ↳ `excerpt` | object | Page excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `parent` | number | Parent page ID |
| ↳ `menu_order` | number | Menu order |
### `wordpress_delete_page`
@@ -304,20 +204,6 @@ Delete a page from WordPress.com
| --------- | ---- | ----------- |
| `deleted` | boolean | Whether the page was deleted |
| `page` | object | The deleted page |
| ↳ `id` | number | Page ID |
| ↳ `date` | string | Page creation date |
| ↳ `modified` | string | Page modification date |
| ↳ `slug` | string | Page slug |
| ↳ `status` | string | Page status |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Page URL |
| ↳ `title` | object | Page title object |
| ↳ `content` | object | Page content object |
| ↳ `excerpt` | object | Page excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `parent` | number | Parent page ID |
| ↳ `menu_order` | number | Menu order |
### `wordpress_get_page`
@@ -335,20 +221,6 @@ Get a single page from WordPress.com by ID
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `page` | object | The retrieved page |
| ↳ `id` | number | Page ID |
| ↳ `date` | string | Page creation date |
| ↳ `modified` | string | Page modification date |
| ↳ `slug` | string | Page slug |
| ↳ `status` | string | Page status |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Page URL |
| ↳ `title` | object | Page title object |
| ↳ `content` | object | Page content object |
| ↳ `excerpt` | object | Page excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `parent` | number | Parent page ID |
| ↳ `menu_order` | number | Menu order |
### `wordpress_list_pages`
@@ -372,22 +244,6 @@ List pages from WordPress.com with optional filters
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pages` | array | List of pages |
| ↳ `id` | number | Page ID |
| ↳ `date` | string | Page creation date |
| ↳ `modified` | string | Page modification date |
| ↳ `slug` | string | Page slug |
| ↳ `status` | string | Page status |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Page URL |
| ↳ `title` | object | Page title object |
| ↳ `content` | object | Page content object |
| ↳ `excerpt` | object | Page excerpt object |
| ↳ `author` | number | Author ID |
| ↳ `featured_media` | number | Featured media ID |
| ↳ `parent` | number | Parent page ID |
| ↳ `menu_order` | number | Menu order |
| `total` | number | Total number of pages |
| `totalPages` | number | Total number of result pages |
### `wordpress_upload_media`
@@ -410,18 +266,6 @@ Upload a media file (image, video, document) to WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `media` | object | The uploaded media item |
| ↳ `id` | number | Media ID |
| ↳ `date` | string | Upload date |
| ↳ `slug` | string | Media slug |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Media page URL |
| ↳ `title` | object | Media title object |
| ↳ `caption` | object | Media caption object |
| ↳ `alt_text` | string | Alt text |
| ↳ `media_type` | string | Media type \(image, video, etc.\) |
| ↳ `mime_type` | string | MIME type |
| ↳ `source_url` | string | Direct URL to the media file |
| ↳ `media_details` | object | Media details \(dimensions, etc.\) |
### `wordpress_get_media`
@@ -439,18 +283,6 @@ Get a single media item from WordPress.com by ID
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `media` | object | The retrieved media item |
| ↳ `id` | number | Media ID |
| ↳ `date` | string | Upload date |
| ↳ `slug` | string | Media slug |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Media page URL |
| ↳ `title` | object | Media title object |
| ↳ `caption` | object | Media caption object |
| ↳ `alt_text` | string | Alt text |
| ↳ `media_type` | string | Media type \(image, video, etc.\) |
| ↳ `mime_type` | string | MIME type |
| ↳ `source_url` | string | Direct URL to the media file |
| ↳ `media_details` | object | Media details \(dimensions, etc.\) |
### `wordpress_list_media`
@@ -474,20 +306,6 @@ List media items from the WordPress.com media library
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `media` | array | List of media items |
| ↳ `id` | number | Media ID |
| ↳ `date` | string | Upload date |
| ↳ `slug` | string | Media slug |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Media page URL |
| ↳ `title` | object | Media title object |
| ↳ `caption` | object | Media caption object |
| ↳ `alt_text` | string | Alt text |
| ↳ `media_type` | string | Media type \(image, video, etc.\) |
| ↳ `mime_type` | string | MIME type |
| ↳ `source_url` | string | Direct URL to the media file |
| ↳ `media_details` | object | Media details \(dimensions, etc.\) |
| `total` | number | Total number of media items |
| `totalPages` | number | Total number of result pages |
### `wordpress_delete_media`
@@ -507,18 +325,6 @@ Delete a media item from WordPress.com
| --------- | ---- | ----------- |
| `deleted` | boolean | Whether the media was deleted |
| `media` | object | The deleted media item |
| ↳ `id` | number | Media ID |
| ↳ `date` | string | Upload date |
| ↳ `slug` | string | Media slug |
| ↳ `type` | string | Content type |
| ↳ `link` | string | Media page URL |
| ↳ `title` | object | Media title object |
| ↳ `caption` | object | Media caption object |
| ↳ `alt_text` | string | Alt text |
| ↳ `media_type` | string | Media type \(image, video, etc.\) |
| ↳ `mime_type` | string | MIME type |
| ↳ `source_url` | string | Direct URL to the media file |
| ↳ `media_details` | object | Media details \(dimensions, etc.\) |
### `wordpress_create_comment`
@@ -541,17 +347,6 @@ Create a new comment on a WordPress.com post
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comment` | object | The created comment |
| ↳ `id` | number | Comment ID |
| ↳ `post` | number | Post ID |
| ↳ `parent` | number | Parent comment ID |
| ↳ `author` | number | Author user ID |
| ↳ `author_name` | string | Author display name |
| ↳ `author_email` | string | Author email |
| ↳ `author_url` | string | Author URL |
| ↳ `date` | string | Comment date |
| ↳ `content` | object | Comment content object |
| ↳ `link` | string | Comment permalink |
| ↳ `status` | string | Comment status |
### `wordpress_list_comments`
@@ -575,19 +370,6 @@ List comments from WordPress.com with optional filters
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comments` | array | List of comments |
| ↳ `id` | number | Comment ID |
| ↳ `post` | number | Post ID |
| ↳ `parent` | number | Parent comment ID |
| ↳ `author` | number | Author user ID |
| ↳ `author_name` | string | Author display name |
| ↳ `author_email` | string | Author email |
| ↳ `author_url` | string | Author URL |
| ↳ `date` | string | Comment date |
| ↳ `content` | object | Comment content object |
| ↳ `link` | string | Comment permalink |
| ↳ `status` | string | Comment status |
| `total` | number | Total number of comments |
| `totalPages` | number | Total number of result pages |
### `wordpress_update_comment`
@@ -607,17 +389,6 @@ Update a comment in WordPress.com (content or status)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `comment` | object | The updated comment |
| ↳ `id` | number | Comment ID |
| ↳ `post` | number | Post ID |
| ↳ `parent` | number | Parent comment ID |
| ↳ `author` | number | Author user ID |
| ↳ `author_name` | string | Author display name |
| ↳ `author_email` | string | Author email |
| ↳ `author_url` | string | Author URL |
| ↳ `date` | string | Comment date |
| ↳ `content` | object | Comment content object |
| ↳ `link` | string | Comment permalink |
| ↳ `status` | string | Comment status |
### `wordpress_delete_comment`
@@ -637,17 +408,6 @@ Delete a comment from WordPress.com
| --------- | ---- | ----------- |
| `deleted` | boolean | Whether the comment was deleted |
| `comment` | object | The deleted comment |
| ↳ `id` | number | Comment ID |
| ↳ `post` | number | Post ID |
| ↳ `parent` | number | Parent comment ID |
| ↳ `author` | number | Author user ID |
| ↳ `author_name` | string | Author display name |
| ↳ `author_email` | string | Author email |
| ↳ `author_url` | string | Author URL |
| ↳ `date` | string | Comment date |
| ↳ `content` | object | Comment content object |
| ↳ `link` | string | Comment permalink |
| ↳ `status` | string | Comment status |
### `wordpress_create_category`
@@ -668,14 +428,6 @@ Create a new category in WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `category` | object | The created category |
| ↳ `id` | number | Category ID |
| ↳ `count` | number | Number of posts in this category |
| ↳ `description` | string | Category description |
| ↳ `link` | string | Category archive URL |
| ↳ `name` | string | Category name |
| ↳ `slug` | string | Category slug |
| ↳ `taxonomy` | string | Taxonomy name |
| ↳ `parent` | number | Parent category ID |
### `wordpress_list_categories`
@@ -696,16 +448,6 @@ List categories from WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `categories` | array | List of categories |
| ↳ `id` | number | Category ID |
| ↳ `count` | number | Number of posts in this category |
| ↳ `description` | string | Category description |
| ↳ `link` | string | Category archive URL |
| ↳ `name` | string | Category name |
| ↳ `slug` | string | Category slug |
| ↳ `taxonomy` | string | Taxonomy name |
| ↳ `parent` | number | Parent category ID |
| `total` | number | Total number of categories |
| `totalPages` | number | Total number of result pages |
### `wordpress_create_tag`
@@ -725,13 +467,6 @@ Create a new tag in WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tag` | object | The created tag |
| ↳ `id` | number | Tag ID |
| ↳ `count` | number | Number of posts with this tag |
| ↳ `description` | string | Tag description |
| ↳ `link` | string | Tag archive URL |
| ↳ `name` | string | Tag name |
| ↳ `slug` | string | Tag slug |
| ↳ `taxonomy` | string | Taxonomy name |
### `wordpress_list_tags`
@@ -752,15 +487,6 @@ List tags from WordPress.com
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tags` | array | List of tags |
| ↳ `id` | number | Tag ID |
| ↳ `count` | number | Number of posts with this tag |
| ↳ `description` | string | Tag description |
| ↳ `link` | string | Tag archive URL |
| ↳ `name` | string | Tag name |
| ↳ `slug` | string | Tag slug |
| ↳ `taxonomy` | string | Taxonomy name |
| `total` | number | Total number of tags |
| `totalPages` | number | Total number of result pages |
### `wordpress_get_current_user`
@@ -777,18 +503,6 @@ Get information about the currently authenticated WordPress.com user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | The current user |
| ↳ `id` | number | User ID |
| ↳ `username` | string | Username |
| ↳ `name` | string | Display name |
| ↳ `first_name` | string | First name |
| ↳ `last_name` | string | Last name |
| ↳ `email` | string | Email address |
| ↳ `url` | string | User website URL |
| ↳ `description` | string | User bio |
| ↳ `link` | string | Author archive URL |
| ↳ `slug` | string | User slug |
| ↳ `roles` | array | User roles |
| ↳ `avatar_urls` | object | Avatar URLs at different sizes |
### `wordpress_list_users`
@@ -810,20 +524,6 @@ List users from WordPress.com (requires admin privileges)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `users` | array | List of users |
| ↳ `id` | number | User ID |
| ↳ `username` | string | Username |
| ↳ `name` | string | Display name |
| ↳ `first_name` | string | First name |
| ↳ `last_name` | string | Last name |
| ↳ `email` | string | Email address |
| ↳ `url` | string | User website URL |
| ↳ `description` | string | User bio |
| ↳ `link` | string | Author archive URL |
| ↳ `slug` | string | User slug |
| ↳ `roles` | array | User roles |
| ↳ `avatar_urls` | object | Avatar URLs at different sizes |
| `total` | number | Total number of users |
| `totalPages` | number | Total number of result pages |
### `wordpress_get_user`
@@ -841,18 +541,6 @@ Get a specific user from WordPress.com by ID
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | The retrieved user |
| ↳ `id` | number | User ID |
| ↳ `username` | string | Username |
| ↳ `name` | string | Display name |
| ↳ `first_name` | string | First name |
| ↳ `last_name` | string | Last name |
| ↳ `email` | string | Email address |
| ↳ `url` | string | User website URL |
| ↳ `description` | string | User bio |
| ↳ `link` | string | Author archive URL |
| ↳ `slug` | string | User slug |
| ↳ `roles` | array | User roles |
| ↳ `avatar_urls` | object | Avatar URLs at different sizes |
### `wordpress_search_content`
@@ -874,12 +562,5 @@ Search across all content types in WordPress.com (posts, pages, media)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `results` | array | Search results |
| ↳ `id` | number | Content ID |
| ↳ `title` | string | Content title |
| ↳ `url` | string | Content URL |
| ↳ `type` | string | Content type \(post, page, attachment\) |
| ↳ `subtype` | string | Post type slug |
| `total` | number | Total number of results |
| `totalPages` | number | Total number of result pages |

View File

@@ -53,16 +53,6 @@ Post new tweets, reply to tweets, or create polls on X (Twitter)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweet` | object | The newly created tweet data |
| ↳ `id` | string | Tweet ID |
| ↳ `text` | string | Tweet content text |
| ↳ `createdAt` | string | Tweet creation timestamp |
| ↳ `authorId` | string | ID of the tweet author |
| ↳ `conversationId` | string | Conversation thread ID |
| ↳ `attachments` | object | Media or poll attachments |
| ↳ `mediaKeys` | array | Media attachment keys |
| ↳ `pollId` | string | Poll ID if poll attached |
| ↳ `mediaKeys` | array | Media attachment keys |
| ↳ `pollId` | string | Poll ID if poll attached |
### `x_read`
@@ -80,11 +70,6 @@ Read tweet details, including replies and conversation context
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweet` | object | The main tweet data |
| ↳ `id` | string | Tweet ID |
| ↳ `text` | string | Tweet content text |
| ↳ `createdAt` | string | Tweet creation timestamp |
| ↳ `authorId` | string | ID of the tweet author |
| `context` | object | Conversation context including parent and root tweets |
### `x_search`
@@ -105,15 +90,6 @@ Search for tweets using keywords, hashtags, or advanced queries
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tweets` | array | Array of tweets matching the search query |
| ↳ `id` | string | Tweet ID |
| ↳ `text` | string | Tweet content |
| ↳ `createdAt` | string | Creation timestamp |
| ↳ `authorId` | string | Author user ID |
| `includes` | object | Additional data including user profiles and media |
| `meta` | object | Search metadata including result count and pagination tokens |
| ↳ `resultCount` | number | Number of results returned |
| ↳ `newestId` | string | ID of the newest tweet |
| ↳ `oldestId` | string | ID of the oldest tweet |
### `x_user`
@@ -130,17 +106,5 @@ Get user profile information
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `user` | object | X user profile information |
| ↳ `id` | string | User ID |
| ↳ `username` | string | Username without @ symbol |
| ↳ `name` | string | Display name |
| ↳ `description` | string | User bio/description |
| ↳ `verified` | boolean | Whether the user is verified |
| ↳ `metrics` | object | User statistics |
| ↳ `followersCount` | number | Number of followers |
| ↳ `followingCount` | number | Number of users following |
| ↳ `tweetCount` | number | Total number of tweets |
| ↳ `followersCount` | number | Number of followers |
| ↳ `followingCount` | number | Number of users following |
| ↳ `tweetCount` | number | Total number of tweets |

View File

@@ -60,12 +60,6 @@ Search for videos on YouTube using the YouTube Data API. Supports advanced filte
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Array of YouTube videos matching the search query |
| ↳ `videoId` | string | YouTube video ID |
| ↳ `title` | string | Video title |
| ↳ `description` | string | Video description |
| ↳ `thumbnail` | string | Video thumbnail URL |
| `totalResults` | number | Total number of search results available |
| `nextPageToken` | string | Token for accessing the next page of results |
### `youtube_video_details`
@@ -140,13 +134,6 @@ Get all videos from a specific YouTube channel, with sorting options.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Array of videos from the channel |
| ↳ `videoId` | string | YouTube video ID |
| ↳ `title` | string | Video title |
| ↳ `description` | string | Video description |
| ↳ `thumbnail` | string | Video thumbnail URL |
| ↳ `publishedAt` | string | Video publish date |
| `totalResults` | number | Total number of videos in the channel |
| `nextPageToken` | string | Token for accessing the next page of results |
### `youtube_channel_playlists`
@@ -166,14 +153,6 @@ Get all playlists from a specific YouTube channel.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Array of playlists from the channel |
| ↳ `playlistId` | string | YouTube playlist ID |
| ↳ `title` | string | Playlist title |
| ↳ `description` | string | Playlist description |
| ↳ `thumbnail` | string | Playlist thumbnail URL |
| ↳ `itemCount` | number | Number of videos in playlist |
| ↳ `publishedAt` | string | Playlist creation date |
| `totalResults` | number | Total number of playlists in the channel |
| `nextPageToken` | string | Token for accessing the next page of results |
### `youtube_playlist_items`
@@ -193,15 +172,6 @@ Get videos from a YouTube playlist.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Array of videos in the playlist |
| ↳ `videoId` | string | YouTube video ID |
| ↳ `title` | string | Video title |
| ↳ `description` | string | Video description |
| ↳ `thumbnail` | string | Video thumbnail URL |
| ↳ `publishedAt` | string | Date added to playlist |
| ↳ `channelTitle` | string | Channel name |
| ↳ `position` | number | Position in playlist |
| `totalResults` | number | Total number of items in playlist |
| `nextPageToken` | string | Token for accessing the next page of results |
### `youtube_comments`
@@ -222,16 +192,5 @@ Get comments from a YouTube video.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `items` | array | Array of comments from the video |
| ↳ `commentId` | string | Comment ID |
| ↳ `authorDisplayName` | string | Comment author name |
| ↳ `authorChannelUrl` | string | Comment author channel URL |
| ↳ `textDisplay` | string | Comment text \(HTML formatted\) |
| ↳ `textOriginal` | string | Comment text \(plain text\) |
| ↳ `likeCount` | number | Number of likes |
| ↳ `publishedAt` | string | Comment publish date |
| ↳ `updatedAt` | string | Comment last updated date |
| ↳ `replyCount` | number | Number of replies |
| `totalResults` | number | Total number of comments |
| `nextPageToken` | string | Token for accessing the next page of results |

View File

@@ -78,12 +78,6 @@ Retrieve a list of tickets from Zendesk with optional filtering
| --------- | ---- | ----------- |
| `tickets` | array | Array of ticket objects |
| `paging` | object | Pagination information |
| ↳ `next_page` | string | URL for next page of results |
| ↳ `previous_page` | string | URL for previous page of results |
| ↳ `count` | number | Total count of tickets |
| `metadata` | object | Response metadata |
| ↳ `total_returned` | number | Number of tickets returned in this response |
| ↳ `has_more` | boolean | Whether more tickets are available |
### `zendesk_get_ticket`
@@ -273,12 +267,6 @@ Retrieve a list of users from Zendesk with optional filtering
| --------- | ---- | ----------- |
| `users` | array | Array of user objects |
| `paging` | object | Pagination information |
| ↳ `next_page` | string | URL for next page of results |
| ↳ `previous_page` | string | URL for previous page of results |
| ↳ `count` | number | Total count of users |
| `metadata` | object | Response metadata |
| ↳ `total_returned` | number | Number of users returned in this response |
| ↳ `has_more` | boolean | Whether more users are available |
### `zendesk_get_user`
@@ -341,12 +329,6 @@ Search for users in Zendesk using a query string
| --------- | ---- | ----------- |
| `users` | array | Array of user objects |
| `paging` | object | Pagination information |
| ↳ `next_page` | string | URL for next page of results |
| ↳ `previous_page` | string | URL for previous page of results |
| ↳ `count` | number | Total count of users |
| `metadata` | object | Response metadata |
| ↳ `total_returned` | number | Number of users returned in this response |
| ↳ `has_more` | boolean | Whether more users are available |
### `zendesk_create_user`
@@ -483,12 +465,6 @@ Retrieve a list of organizations from Zendesk
| --------- | ---- | ----------- |
| `organizations` | array | Array of organization objects |
| `paging` | object | Pagination information |
| ↳ `next_page` | string | URL for next page of results |
| ↳ `previous_page` | string | URL for previous page of results |
| ↳ `count` | number | Total count of organizations |
| `metadata` | object | Response metadata |
| ↳ `total_returned` | number | Number of organizations returned in this response |
| ↳ `has_more` | boolean | Whether more organizations are available |
### `zendesk_get_organization`
@@ -531,12 +507,6 @@ Autocomplete organizations in Zendesk by name prefix (for name matching/autocomp
| --------- | ---- | ----------- |
| `organizations` | array | Array of organization objects |
| `paging` | object | Pagination information |
| ↳ `next_page` | string | URL for next page of results |
| ↳ `previous_page` | string | URL for previous page of results |
| ↳ `count` | number | Total count of organizations |
| `metadata` | object | Response metadata |
| ↳ `total_returned` | number | Number of organizations returned in this response |
| ↳ `has_more` | boolean | Whether more organizations are available |
### `zendesk_create_organization`
@@ -652,12 +622,6 @@ Unified search across tickets, users, and organizations in Zendesk
| --------- | ---- | ----------- |
| `results` | array | Array of result objects |
| `paging` | object | Pagination information |
| ↳ `next_page` | string | URL for next page of results |
| ↳ `previous_page` | string | URL for previous page of results |
| ↳ `count` | number | Total count of results |
| `metadata` | object | Response metadata |
| ↳ `total_returned` | number | Number of results returned in this response |
| ↳ `has_more` | boolean | Whether more results are available |
### `zendesk_search_count`

View File

@@ -69,22 +69,6 @@ Create a new Zoom meeting
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `meeting` | object | The created meeting with all its properties |
| ↳ `id` | number | Meeting ID |
| ↳ `uuid` | string | Meeting UUID |
| ↳ `host_id` | string | Host user ID |
| ↳ `host_email` | string | Host email |
| ↳ `topic` | string | Meeting topic |
| ↳ `type` | number | Meeting type |
| ↳ `status` | string | Meeting status |
| ↳ `start_time` | string | Start time |
| ↳ `duration` | number | Duration in minutes |
| ↳ `timezone` | string | Timezone |
| ↳ `agenda` | string | Meeting agenda |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `start_url` | string | Host start URL |
| ↳ `join_url` | string | Participant join URL |
| ↳ `password` | string | Meeting password |
| ↳ `settings` | object | Meeting settings |
### `zoom_list_meetings`
@@ -105,11 +89,6 @@ List all meetings for a Zoom user
| --------- | ---- | ----------- |
| `meetings` | array | List of meetings |
| `pageInfo` | object | Pagination information |
| ↳ `pageCount` | number | Total number of pages |
| ↳ `pageNumber` | number | Current page number |
| ↳ `pageSize` | number | Number of records per page |
| ↳ `totalRecords` | number | Total number of records |
| ↳ `nextPageToken` | string | Token for next page |
### `zoom_get_meeting`
@@ -128,24 +107,6 @@ Get details of a specific Zoom meeting
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `meeting` | object | The meeting details |
| ↳ `id` | number | Meeting ID |
| ↳ `uuid` | string | Meeting UUID |
| ↳ `host_id` | string | Host user ID |
| ↳ `host_email` | string | Host email |
| ↳ `topic` | string | Meeting topic |
| ↳ `type` | number | Meeting type |
| ↳ `status` | string | Meeting status |
| ↳ `start_time` | string | Start time |
| ↳ `duration` | number | Duration in minutes |
| ↳ `timezone` | string | Timezone |
| ↳ `agenda` | string | Meeting agenda |
| ↳ `created_at` | string | Creation timestamp |
| ↳ `start_url` | string | Host start URL |
| ↳ `join_url` | string | Participant join URL |
| ↳ `password` | string | Meeting password |
| ↳ `settings` | object | Meeting settings |
| ↳ `recurrence` | object | Recurrence settings |
| ↳ `occurrences` | array | Meeting occurrences |
### `zoom_update_meeting`
@@ -232,11 +193,6 @@ List all cloud recordings for a Zoom user
| --------- | ---- | ----------- |
| `recordings` | array | List of recordings |
| `pageInfo` | object | Pagination information |
| ↳ `from` | string | Start date of query range |
| ↳ `to` | string | End date of query range |
| ↳ `pageSize` | number | Number of records per page |
| ↳ `totalRecords` | number | Total number of records |
| ↳ `nextPageToken` | string | Token for next page |
### `zoom_get_meeting_recordings`
@@ -255,14 +211,6 @@ Get all recordings for a specific Zoom meeting
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `recording` | object | The meeting recording with all files |
| ↳ `uuid` | string | Meeting UUID |
| ↳ `id` | number | Meeting ID |
| ↳ `topic` | string | Meeting topic |
| ↳ `start_time` | string | Meeting start time |
| ↳ `duration` | number | Meeting duration in minutes |
| ↳ `total_size` | number | Total size of recordings in bytes |
| ↳ `share_url` | string | URL to share recordings |
| ↳ `recording_files` | array | List of recording files |
### `zoom_delete_recording`
@@ -300,8 +248,5 @@ List participants from a past Zoom meeting
| --------- | ---- | ----------- |
| `participants` | array | List of meeting participants |
| `pageInfo` | object | Pagination information |
| ↳ `pageSize` | number | Number of records per page |
| ↳ `totalRecords` | number | Total number of records |
| ↳ `nextPageToken` | string | Token for next page |

View File

@@ -15,7 +15,6 @@ import {
renderPlanWelcomeEmail,
renderUsageThresholdEmail,
renderWelcomeEmail,
renderWorkflowNotificationEmail,
renderWorkspaceInvitationEmail,
} from '@/components/emails'
@@ -109,51 +108,6 @@ const emailTemplates = {
message:
'I have 10 years of experience building scalable distributed systems. Most recently, I led a team at a Series B startup where we scaled from 100K to 10M users.',
}),
// Notification emails
'workflow-notification-success': () =>
renderWorkflowNotificationEmail({
workflowName: 'Customer Onboarding Flow',
status: 'success',
trigger: 'api',
duration: '2.3s',
cost: '$0.0042',
logUrl: 'https://sim.ai/workspace/ws_123/logs?search=exec_abc123',
}),
'workflow-notification-error': () =>
renderWorkflowNotificationEmail({
workflowName: 'Customer Onboarding Flow',
status: 'error',
trigger: 'webhook',
duration: '1.1s',
cost: '$0.0021',
logUrl: 'https://sim.ai/workspace/ws_123/logs?search=exec_abc123',
}),
'workflow-notification-alert': () =>
renderWorkflowNotificationEmail({
workflowName: 'Customer Onboarding Flow',
status: 'error',
trigger: 'schedule',
duration: '45.2s',
cost: '$0.0156',
logUrl: 'https://sim.ai/workspace/ws_123/logs?search=exec_abc123',
alertReason: '3 consecutive failures detected',
}),
'workflow-notification-full': () =>
renderWorkflowNotificationEmail({
workflowName: 'Data Processing Pipeline',
status: 'success',
trigger: 'api',
duration: '12.5s',
cost: '$0.0234',
logUrl: 'https://sim.ai/workspace/ws_123/logs?search=exec_abc123',
finalOutput: { processed: 150, skipped: 3, status: 'completed' },
rateLimits: {
sync: { requestsPerMinute: 60, remaining: 45 },
async: { requestsPerMinute: 120, remaining: 98 },
},
usageData: { currentPeriodCost: 12.45, limit: 50, percentUsed: 24.9 },
}),
} as const
type EmailTemplate = keyof typeof emailTemplates
@@ -177,12 +131,6 @@ export async function GET(request: NextRequest) {
'payment-failed',
],
Careers: ['careers-confirmation', 'careers-submission'],
Notifications: [
'workflow-notification-success',
'workflow-notification-error',
'workflow-notification-alert',
'workflow-notification-full',
],
}
const categoryHtml = Object.entries(categories)

View File

@@ -14,7 +14,6 @@ const updateFolderSchema = z.object({
color: z.string().optional(),
isExpanded: z.boolean().optional(),
parentId: z.string().nullable().optional(),
sortOrder: z.number().int().min(0).optional(),
})
// PUT - Update a folder
@@ -39,7 +38,7 @@ export async function PUT(request: NextRequest, { params }: { params: Promise<{
return NextResponse.json({ error: `Validation failed: ${errorMessages}` }, { status: 400 })
}
const { name, color, isExpanded, parentId, sortOrder } = validationResult.data
const { name, color, isExpanded, parentId } = validationResult.data
// Verify the folder exists
const existingFolder = await db
@@ -82,12 +81,12 @@ export async function PUT(request: NextRequest, { params }: { params: Promise<{
}
}
const updates: Record<string, unknown> = { updatedAt: new Date() }
// Update the folder
const updates: any = { updatedAt: new Date() }
if (name !== undefined) updates.name = name.trim()
if (color !== undefined) updates.color = color
if (isExpanded !== undefined) updates.isExpanded = isExpanded
if (parentId !== undefined) updates.parentId = parentId || null
if (sortOrder !== undefined) updates.sortOrder = sortOrder
const [updatedFolder] = await db
.update(workflowFolder)

View File

@@ -1,91 +0,0 @@
import { db } from '@sim/db'
import { workflowFolder } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq, inArray } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { generateRequestId } from '@/lib/core/utils/request'
import { getUserEntityPermissions } from '@/lib/workspaces/permissions/utils'
const logger = createLogger('FolderReorderAPI')
const ReorderSchema = z.object({
workspaceId: z.string(),
updates: z.array(
z.object({
id: z.string(),
sortOrder: z.number().int().min(0),
parentId: z.string().nullable().optional(),
})
),
})
export async function PUT(req: NextRequest) {
const requestId = generateRequestId()
const session = await getSession()
if (!session?.user?.id) {
logger.warn(`[${requestId}] Unauthorized folder reorder attempt`)
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
try {
const body = await req.json()
const { workspaceId, updates } = ReorderSchema.parse(body)
const permission = await getUserEntityPermissions(session.user.id, 'workspace', workspaceId)
if (!permission || permission === 'read') {
logger.warn(
`[${requestId}] User ${session.user.id} lacks write permission for workspace ${workspaceId}`
)
return NextResponse.json({ error: 'Write access required' }, { status: 403 })
}
const folderIds = updates.map((u) => u.id)
const existingFolders = await db
.select({ id: workflowFolder.id, workspaceId: workflowFolder.workspaceId })
.from(workflowFolder)
.where(inArray(workflowFolder.id, folderIds))
const validIds = new Set(
existingFolders.filter((f) => f.workspaceId === workspaceId).map((f) => f.id)
)
const validUpdates = updates.filter((u) => validIds.has(u.id))
if (validUpdates.length === 0) {
return NextResponse.json({ error: 'No valid folders to update' }, { status: 400 })
}
await db.transaction(async (tx) => {
for (const update of validUpdates) {
const updateData: Record<string, unknown> = {
sortOrder: update.sortOrder,
updatedAt: new Date(),
}
if (update.parentId !== undefined) {
updateData.parentId = update.parentId
}
await tx.update(workflowFolder).set(updateData).where(eq(workflowFolder.id, update.id))
}
})
logger.info(
`[${requestId}] Reordered ${validUpdates.length} folders in workspace ${workspaceId}`
)
return NextResponse.json({ success: true, updated: validUpdates.length })
} catch (error) {
if (error instanceof z.ZodError) {
logger.warn(`[${requestId}] Invalid folder reorder data`, { errors: error.errors })
return NextResponse.json(
{ error: 'Invalid request data', details: error.errors },
{ status: 400 }
)
}
logger.error(`[${requestId}] Error reordering folders`, error)
return NextResponse.json({ error: 'Failed to reorder folders' }, { status: 500 })
}
}

View File

@@ -58,7 +58,7 @@ export async function POST(request: NextRequest) {
}
const body = await request.json()
const { name, workspaceId, parentId, color, sortOrder: providedSortOrder } = body
const { name, workspaceId, parentId, color } = body
if (!name || !workspaceId) {
return NextResponse.json({ error: 'Name and workspace ID are required' }, { status: 400 })
@@ -81,26 +81,25 @@ export async function POST(request: NextRequest) {
// Generate a new ID
const id = crypto.randomUUID()
// Use transaction to ensure sortOrder consistency
const newFolder = await db.transaction(async (tx) => {
let sortOrder: number
if (providedSortOrder !== undefined) {
sortOrder = providedSortOrder
} else {
const existingFolders = await tx
.select({ sortOrder: workflowFolder.sortOrder })
.from(workflowFolder)
.where(
and(
eq(workflowFolder.workspaceId, workspaceId),
parentId ? eq(workflowFolder.parentId, parentId) : isNull(workflowFolder.parentId)
)
// Get the next sort order for the parent (or root level)
// Consider all folders in the workspace, not just those created by current user
const existingFolders = await tx
.select({ sortOrder: workflowFolder.sortOrder })
.from(workflowFolder)
.where(
and(
eq(workflowFolder.workspaceId, workspaceId),
parentId ? eq(workflowFolder.parentId, parentId) : isNull(workflowFolder.parentId)
)
.orderBy(desc(workflowFolder.sortOrder))
.limit(1)
)
.orderBy(desc(workflowFolder.sortOrder))
.limit(1)
sortOrder = existingFolders.length > 0 ? existingFolders[0].sortOrder + 1 : 0
}
const nextSortOrder = existingFolders.length > 0 ? existingFolders[0].sortOrder + 1 : 0
// Insert the new folder within the same transaction
const [folder] = await tx
.insert(workflowFolder)
.values({
@@ -110,7 +109,7 @@ export async function POST(request: NextRequest) {
workspaceId,
parentId: parentId || null,
color: color || '#6B7280',
sortOrder,
sortOrder: nextSortOrder,
})
.returning()

View File

@@ -1,297 +0,0 @@
import { db } from '@sim/db'
import { permissions, workflow, workflowExecutionLogs } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq, sql } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { generateRequestId } from '@/lib/core/utils/request'
import { buildFilterConditions, LogFilterParamsSchema } from '@/lib/logs/filters'
const logger = createLogger('LogsStatsAPI')
export const revalidate = 0
const StatsQueryParamsSchema = LogFilterParamsSchema.extend({
segmentCount: z.coerce.number().optional().default(72),
})
export interface SegmentStats {
timestamp: string
totalExecutions: number
successfulExecutions: number
avgDurationMs: number
}
export interface WorkflowStats {
workflowId: string
workflowName: string
segments: SegmentStats[]
overallSuccessRate: number
totalExecutions: number
totalSuccessful: number
}
export interface DashboardStatsResponse {
workflows: WorkflowStats[]
aggregateSegments: SegmentStats[]
totalRuns: number
totalErrors: number
avgLatency: number
timeBounds: {
start: string
end: string
}
segmentMs: number
}
export async function GET(request: NextRequest) {
const requestId = generateRequestId()
try {
const session = await getSession()
if (!session?.user?.id) {
logger.warn(`[${requestId}] Unauthorized logs stats access attempt`)
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const userId = session.user.id
try {
const { searchParams } = new URL(request.url)
const params = StatsQueryParamsSchema.parse(Object.fromEntries(searchParams.entries()))
const workspaceFilter = eq(workflowExecutionLogs.workspaceId, params.workspaceId)
const commonFilters = buildFilterConditions(params, { useSimpleLevelFilter: true })
const whereCondition = commonFilters ? and(workspaceFilter, commonFilters) : workspaceFilter
const boundsQuery = await db
.select({
minTime: sql<string>`MIN(${workflowExecutionLogs.startedAt})`,
maxTime: sql<string>`MAX(${workflowExecutionLogs.startedAt})`,
})
.from(workflowExecutionLogs)
.innerJoin(workflow, eq(workflowExecutionLogs.workflowId, workflow.id))
.innerJoin(
permissions,
and(
eq(permissions.entityType, 'workspace'),
eq(permissions.entityId, workflowExecutionLogs.workspaceId),
eq(permissions.userId, userId)
)
)
.where(whereCondition)
const bounds = boundsQuery[0]
const now = new Date()
let startTime: Date
let endTime: Date
if (!bounds?.minTime || !bounds?.maxTime) {
endTime = now
startTime = new Date(now.getTime() - 24 * 60 * 60 * 1000)
} else {
startTime = new Date(bounds.minTime)
endTime = new Date(Math.max(new Date(bounds.maxTime).getTime(), now.getTime()))
}
const totalMs = Math.max(1, endTime.getTime() - startTime.getTime())
const segmentMs = Math.max(60000, Math.floor(totalMs / params.segmentCount))
const statsQuery = await db
.select({
workflowId: workflowExecutionLogs.workflowId,
workflowName: workflow.name,
segmentIndex:
sql<number>`FLOOR(EXTRACT(EPOCH FROM (${workflowExecutionLogs.startedAt} - ${startTime}::timestamp)) * 1000 / ${segmentMs})`.as(
'segment_index'
),
totalExecutions: sql<number>`COUNT(*)`.as('total_executions'),
successfulExecutions:
sql<number>`COUNT(*) FILTER (WHERE ${workflowExecutionLogs.level} != 'error')`.as(
'successful_executions'
),
avgDurationMs:
sql<number>`COALESCE(AVG(${workflowExecutionLogs.totalDurationMs}) FILTER (WHERE ${workflowExecutionLogs.totalDurationMs} > 0), 0)`.as(
'avg_duration_ms'
),
})
.from(workflowExecutionLogs)
.innerJoin(workflow, eq(workflowExecutionLogs.workflowId, workflow.id))
.innerJoin(
permissions,
and(
eq(permissions.entityType, 'workspace'),
eq(permissions.entityId, workflowExecutionLogs.workspaceId),
eq(permissions.userId, userId)
)
)
.where(whereCondition)
.groupBy(
workflowExecutionLogs.workflowId,
workflow.name,
sql`FLOOR(EXTRACT(EPOCH FROM (${workflowExecutionLogs.startedAt} - ${startTime}::timestamp)) * 1000 / ${segmentMs})`
)
.orderBy(workflowExecutionLogs.workflowId, sql`segment_index`)
const workflowMap = new Map<
string,
{
workflowId: string
workflowName: string
segments: Map<number, SegmentStats>
totalExecutions: number
totalSuccessful: number
}
>()
for (const row of statsQuery) {
const segmentIndex = Math.min(
params.segmentCount - 1,
Math.max(0, Math.floor(Number(row.segmentIndex)))
)
if (!workflowMap.has(row.workflowId)) {
workflowMap.set(row.workflowId, {
workflowId: row.workflowId,
workflowName: row.workflowName,
segments: new Map(),
totalExecutions: 0,
totalSuccessful: 0,
})
}
const wf = workflowMap.get(row.workflowId)!
wf.totalExecutions += Number(row.totalExecutions)
wf.totalSuccessful += Number(row.successfulExecutions)
const existing = wf.segments.get(segmentIndex)
if (existing) {
const oldTotal = existing.totalExecutions
const newTotal = oldTotal + Number(row.totalExecutions)
existing.totalExecutions = newTotal
existing.successfulExecutions += Number(row.successfulExecutions)
existing.avgDurationMs =
newTotal > 0
? (existing.avgDurationMs * oldTotal +
Number(row.avgDurationMs || 0) * Number(row.totalExecutions)) /
newTotal
: 0
} else {
wf.segments.set(segmentIndex, {
timestamp: new Date(startTime.getTime() + segmentIndex * segmentMs).toISOString(),
totalExecutions: Number(row.totalExecutions),
successfulExecutions: Number(row.successfulExecutions),
avgDurationMs: Number(row.avgDurationMs || 0),
})
}
}
const workflows: WorkflowStats[] = []
for (const wf of workflowMap.values()) {
const segments: SegmentStats[] = []
for (let i = 0; i < params.segmentCount; i++) {
const existing = wf.segments.get(i)
if (existing) {
segments.push(existing)
} else {
segments.push({
timestamp: new Date(startTime.getTime() + i * segmentMs).toISOString(),
totalExecutions: 0,
successfulExecutions: 0,
avgDurationMs: 0,
})
}
}
workflows.push({
workflowId: wf.workflowId,
workflowName: wf.workflowName,
segments,
totalExecutions: wf.totalExecutions,
totalSuccessful: wf.totalSuccessful,
overallSuccessRate:
wf.totalExecutions > 0 ? (wf.totalSuccessful / wf.totalExecutions) * 100 : 100,
})
}
workflows.sort((a, b) => {
const errA = a.overallSuccessRate < 100 ? 1 - a.overallSuccessRate / 100 : 0
const errB = b.overallSuccessRate < 100 ? 1 - b.overallSuccessRate / 100 : 0
if (errA !== errB) return errB - errA
return a.workflowName.localeCompare(b.workflowName)
})
const aggregateSegments: SegmentStats[] = []
let totalRuns = 0
let totalErrors = 0
let weightedLatencySum = 0
let latencyCount = 0
for (let i = 0; i < params.segmentCount; i++) {
let segTotal = 0
let segSuccess = 0
let segWeightedLatency = 0
let segLatencyCount = 0
for (const wf of workflows) {
const seg = wf.segments[i]
segTotal += seg.totalExecutions
segSuccess += seg.successfulExecutions
if (seg.avgDurationMs > 0 && seg.totalExecutions > 0) {
segWeightedLatency += seg.avgDurationMs * seg.totalExecutions
segLatencyCount += seg.totalExecutions
}
}
totalRuns += segTotal
totalErrors += segTotal - segSuccess
weightedLatencySum += segWeightedLatency
latencyCount += segLatencyCount
aggregateSegments.push({
timestamp: new Date(startTime.getTime() + i * segmentMs).toISOString(),
totalExecutions: segTotal,
successfulExecutions: segSuccess,
avgDurationMs: segLatencyCount > 0 ? segWeightedLatency / segLatencyCount : 0,
})
}
const avgLatency = latencyCount > 0 ? weightedLatencySum / latencyCount : 0
const response: DashboardStatsResponse = {
workflows,
aggregateSegments,
totalRuns,
totalErrors,
avgLatency,
timeBounds: {
start: startTime.toISOString(),
end: endTime.toISOString(),
},
segmentMs,
}
return NextResponse.json(response, { status: 200 })
} catch (validationError) {
if (validationError instanceof z.ZodError) {
logger.warn(`[${requestId}] Invalid logs stats request parameters`, {
errors: validationError.errors,
})
return NextResponse.json(
{
error: 'Invalid request parameters',
details: validationError.errors,
},
{ status: 400 }
)
}
throw validationError
}
} catch (error: any) {
logger.error(`[${requestId}] logs stats fetch error`, error)
return NextResponse.json({ error: error.message }, { status: 500 })
}
}

View File

@@ -20,7 +20,6 @@ const UpdateWorkflowSchema = z.object({
description: z.string().optional(),
color: z.string().optional(),
folderId: z.string().nullable().optional(),
sortOrder: z.number().int().min(0).optional(),
})
/**
@@ -439,12 +438,12 @@ export async function PUT(request: NextRequest, { params }: { params: Promise<{
return NextResponse.json({ error: 'Access denied' }, { status: 403 })
}
const updateData: Record<string, unknown> = { updatedAt: new Date() }
// Build update object
const updateData: any = { updatedAt: new Date() }
if (updates.name !== undefined) updateData.name = updates.name
if (updates.description !== undefined) updateData.description = updates.description
if (updates.color !== undefined) updateData.color = updates.color
if (updates.folderId !== undefined) updateData.folderId = updates.folderId
if (updates.sortOrder !== undefined) updateData.sortOrder = updates.sortOrder
// Update the workflow
const [updatedWorkflow] = await db

View File

@@ -1,91 +0,0 @@
import { db } from '@sim/db'
import { workflow } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { eq, inArray } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
import { generateRequestId } from '@/lib/core/utils/request'
import { getUserEntityPermissions } from '@/lib/workspaces/permissions/utils'
const logger = createLogger('WorkflowReorderAPI')
const ReorderSchema = z.object({
workspaceId: z.string(),
updates: z.array(
z.object({
id: z.string(),
sortOrder: z.number().int().min(0),
folderId: z.string().nullable().optional(),
})
),
})
export async function PUT(req: NextRequest) {
const requestId = generateRequestId()
const session = await getSession()
if (!session?.user?.id) {
logger.warn(`[${requestId}] Unauthorized reorder attempt`)
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
try {
const body = await req.json()
const { workspaceId, updates } = ReorderSchema.parse(body)
const permission = await getUserEntityPermissions(session.user.id, 'workspace', workspaceId)
if (!permission || permission === 'read') {
logger.warn(
`[${requestId}] User ${session.user.id} lacks write permission for workspace ${workspaceId}`
)
return NextResponse.json({ error: 'Write access required' }, { status: 403 })
}
const workflowIds = updates.map((u) => u.id)
const existingWorkflows = await db
.select({ id: workflow.id, workspaceId: workflow.workspaceId })
.from(workflow)
.where(inArray(workflow.id, workflowIds))
const validIds = new Set(
existingWorkflows.filter((w) => w.workspaceId === workspaceId).map((w) => w.id)
)
const validUpdates = updates.filter((u) => validIds.has(u.id))
if (validUpdates.length === 0) {
return NextResponse.json({ error: 'No valid workflows to update' }, { status: 400 })
}
await db.transaction(async (tx) => {
for (const update of validUpdates) {
const updateData: Record<string, unknown> = {
sortOrder: update.sortOrder,
updatedAt: new Date(),
}
if (update.folderId !== undefined) {
updateData.folderId = update.folderId
}
await tx.update(workflow).set(updateData).where(eq(workflow.id, update.id))
}
})
logger.info(
`[${requestId}] Reordered ${validUpdates.length} workflows in workspace ${workspaceId}`
)
return NextResponse.json({ success: true, updated: validUpdates.length })
} catch (error) {
if (error instanceof z.ZodError) {
logger.warn(`[${requestId}] Invalid reorder data`, { errors: error.errors })
return NextResponse.json(
{ error: 'Invalid request data', details: error.errors },
{ status: 400 }
)
}
logger.error(`[${requestId}] Error reordering workflows`, error)
return NextResponse.json({ error: 'Failed to reorder workflows' }, { status: 500 })
}
}

View File

@@ -1,7 +1,7 @@
import { db } from '@sim/db'
import { workflow } from '@sim/db/schema'
import { createLogger } from '@sim/logger'
import { and, eq, isNull, max } from 'drizzle-orm'
import { eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSession } from '@/lib/auth'
@@ -17,7 +17,6 @@ const CreateWorkflowSchema = z.object({
color: z.string().optional().default('#3972F6'),
workspaceId: z.string().optional(),
folderId: z.string().nullable().optional(),
sortOrder: z.number().int().optional(),
})
// GET /api/workflows - Get workflows for user (optionally filtered by workspaceId)
@@ -90,14 +89,7 @@ export async function POST(req: NextRequest) {
try {
const body = await req.json()
const {
name,
description,
color,
workspaceId,
folderId,
sortOrder: providedSortOrder,
} = CreateWorkflowSchema.parse(body)
const { name, description, color, workspaceId, folderId } = CreateWorkflowSchema.parse(body)
if (workspaceId) {
const workspacePermission = await getUserEntityPermissions(
@@ -135,28 +127,11 @@ export async function POST(req: NextRequest) {
// Silently fail
})
let sortOrder: number
if (providedSortOrder !== undefined) {
sortOrder = providedSortOrder
} else {
const folderCondition = folderId ? eq(workflow.folderId, folderId) : isNull(workflow.folderId)
const [maxResult] = await db
.select({ maxOrder: max(workflow.sortOrder) })
.from(workflow)
.where(
workspaceId
? and(eq(workflow.workspaceId, workspaceId), folderCondition)
: and(eq(workflow.userId, session.user.id), folderCondition)
)
sortOrder = (maxResult?.maxOrder ?? -1) + 1
}
await db.insert(workflow).values({
id: workflowId,
userId: session.user.id,
workspaceId: workspaceId || null,
folderId: folderId || null,
sortOrder,
name,
description,
color,
@@ -177,7 +152,6 @@ export async function POST(req: NextRequest) {
color,
workspaceId,
folderId,
sortOrder,
createdAt: now,
updatedAt: now,
})

View File

@@ -80,6 +80,7 @@ const updateNotificationSchema = z
levelFilter: levelFilterSchema.optional(),
triggerFilter: triggerFilterSchema.optional(),
includeFinalOutput: z.boolean().optional(),
includeTraceSpans: z.boolean().optional(),
includeRateLimits: z.boolean().optional(),
includeUsageData: z.boolean().optional(),
alertConfig: alertConfigSchema.optional(),
@@ -146,6 +147,7 @@ export async function GET(request: NextRequest, { params }: RouteParams) {
levelFilter: subscription.levelFilter,
triggerFilter: subscription.triggerFilter,
includeFinalOutput: subscription.includeFinalOutput,
includeTraceSpans: subscription.includeTraceSpans,
includeRateLimits: subscription.includeRateLimits,
includeUsageData: subscription.includeUsageData,
webhookConfig: subscription.webhookConfig,
@@ -220,6 +222,7 @@ export async function PUT(request: NextRequest, { params }: RouteParams) {
if (data.triggerFilter !== undefined) updateData.triggerFilter = data.triggerFilter
if (data.includeFinalOutput !== undefined)
updateData.includeFinalOutput = data.includeFinalOutput
if (data.includeTraceSpans !== undefined) updateData.includeTraceSpans = data.includeTraceSpans
if (data.includeRateLimits !== undefined) updateData.includeRateLimits = data.includeRateLimits
if (data.includeUsageData !== undefined) updateData.includeUsageData = data.includeUsageData
if (data.alertConfig !== undefined) updateData.alertConfig = data.alertConfig
@@ -257,6 +260,7 @@ export async function PUT(request: NextRequest, { params }: RouteParams) {
levelFilter: subscription.levelFilter,
triggerFilter: subscription.triggerFilter,
includeFinalOutput: subscription.includeFinalOutput,
includeTraceSpans: subscription.includeTraceSpans,
includeRateLimits: subscription.includeRateLimits,
includeUsageData: subscription.includeUsageData,
webhookConfig: subscription.webhookConfig,

View File

@@ -5,14 +5,8 @@ import { createLogger } from '@sim/logger'
import { and, eq } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { v4 as uuidv4 } from 'uuid'
import {
type EmailRateLimitsData,
type EmailUsageData,
renderWorkflowNotificationEmail,
} from '@/components/emails'
import { getSession } from '@/lib/auth'
import { decryptSecret } from '@/lib/core/security/encryption'
import { getBaseUrl } from '@/lib/core/utils/urls'
import { sendEmail } from '@/lib/messaging/email/mailer'
import { getUserEntityPermissions } from '@/lib/workspaces/permissions/utils'
@@ -73,23 +67,29 @@ function buildTestPayload(subscription: typeof workspaceNotificationSubscription
data.finalOutput = { message: 'This is a test notification', test: true }
}
if (subscription.includeTraceSpans) {
data.traceSpans = [
{
id: 'span_test_1',
name: 'Test Block',
type: 'block',
status: 'success',
startTime: new Date(timestamp - 5000).toISOString(),
endTime: new Date(timestamp).toISOString(),
duration: 5000,
},
]
}
if (subscription.includeRateLimits) {
data.rateLimits = {
sync: {
requestsPerMinute: 150,
remaining: 45,
resetAt: new Date(timestamp + 60000).toISOString(),
},
async: {
requestsPerMinute: 1000,
remaining: 50,
resetAt: new Date(timestamp + 60000).toISOString(),
},
sync: { limit: 150, remaining: 45, resetAt: new Date(timestamp + 60000).toISOString() },
async: { limit: 1000, remaining: 50, resetAt: new Date(timestamp + 60000).toISOString() },
}
}
if (subscription.includeUsageData) {
data.usage = { currentPeriodCost: 2.45, limit: 20, percentUsed: 12.25, isExceeded: false }
data.usage = { currentPeriodCost: 2.45, limit: 20, plan: 'pro', isExceeded: false }
}
return { payload, timestamp }
@@ -157,26 +157,23 @@ async function testEmail(subscription: typeof workspaceNotificationSubscription.
const { payload } = buildTestPayload(subscription)
const data = (payload as Record<string, unknown>).data as Record<string, unknown>
const baseUrl = getBaseUrl()
const logUrl = `${baseUrl}/workspace/${subscription.workspaceId}/logs`
const html = await renderWorkflowNotificationEmail({
workflowName: data.workflowName as string,
status: data.status as 'success' | 'error',
trigger: data.trigger as string,
duration: `${data.totalDurationMs}ms`,
cost: `$${(((data.cost as Record<string, unknown>)?.total as number) || 0).toFixed(4)}`,
logUrl,
finalOutput: data.finalOutput,
rateLimits: data.rateLimits as EmailRateLimitsData | undefined,
usageData: data.usage as EmailUsageData | undefined,
})
const result = await sendEmail({
to: subscription.emailRecipients,
subject: `[Test] Workflow Execution: ${data.workflowName}`,
html,
text: `This is a test notification from Sim.\n\nWorkflow: ${data.workflowName}\nStatus: ${data.status}\nDuration: ${data.totalDurationMs}ms\n\nView Log: ${logUrl}\n\nThis notification is configured for workspace notifications.`,
text: `This is a test notification from Sim Studio.\n\nWorkflow: ${data.workflowName}\nStatus: ${data.status}\nDuration: ${data.totalDurationMs}ms\n\nThis notification is configured for workspace notifications.`,
html: `
<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto;">
<h2 style="color: #7F2FFF;">Test Notification</h2>
<p>This is a test notification from Sim Studio.</p>
<table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
<tr><td style="padding: 8px; border: 1px solid #eee;"><strong>Workflow</strong></td><td style="padding: 8px; border: 1px solid #eee;">${data.workflowName}</td></tr>
<tr><td style="padding: 8px; border: 1px solid #eee;"><strong>Status</strong></td><td style="padding: 8px; border: 1px solid #eee;">${data.status}</td></tr>
<tr><td style="padding: 8px; border: 1px solid #eee;"><strong>Duration</strong></td><td style="padding: 8px; border: 1px solid #eee;">${data.totalDurationMs}ms</td></tr>
</table>
<p style="color: #666; font-size: 12px;">This notification is configured for workspace notifications.</p>
</div>
`,
emailType: 'notifications',
})
@@ -230,7 +227,7 @@ async function testSlack(
elements: [
{
type: 'mrkdwn',
text: 'This is a test notification from Sim workspace notifications.',
text: 'This is a test notification from Sim Studio workspace notifications.',
},
],
},

View File

@@ -83,6 +83,7 @@ const createNotificationSchema = z
levelFilter: levelFilterSchema.default(['info', 'error']),
triggerFilter: triggerFilterSchema.default([...CORE_TRIGGER_TYPES]),
includeFinalOutput: z.boolean().default(false),
includeTraceSpans: z.boolean().default(false),
includeRateLimits: z.boolean().default(false),
includeUsageData: z.boolean().default(false),
alertConfig: alertConfigSchema.optional(),
@@ -137,6 +138,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
levelFilter: workspaceNotificationSubscription.levelFilter,
triggerFilter: workspaceNotificationSubscription.triggerFilter,
includeFinalOutput: workspaceNotificationSubscription.includeFinalOutput,
includeTraceSpans: workspaceNotificationSubscription.includeTraceSpans,
includeRateLimits: workspaceNotificationSubscription.includeRateLimits,
includeUsageData: workspaceNotificationSubscription.includeUsageData,
webhookConfig: workspaceNotificationSubscription.webhookConfig,
@@ -238,6 +240,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
levelFilter: data.levelFilter,
triggerFilter: data.triggerFilter,
includeFinalOutput: data.includeFinalOutput,
includeTraceSpans: data.includeTraceSpans,
includeRateLimits: data.includeRateLimits,
includeUsageData: data.includeUsageData,
alertConfig: data.alertConfig || null,
@@ -263,6 +266,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
levelFilter: subscription.levelFilter,
triggerFilter: subscription.triggerFilter,
includeFinalOutput: subscription.includeFinalOutput,
includeTraceSpans: subscription.includeTraceSpans,
includeRateLimits: subscription.includeRateLimits,
includeUsageData: subscription.includeUsageData,
webhookConfig: subscription.webhookConfig,

View File

@@ -13,7 +13,6 @@ const logger = createLogger('Workspaces')
const createWorkspaceSchema = z.object({
name: z.string().trim().min(1, 'Name is required'),
skipDefaultWorkflow: z.boolean().optional().default(false),
})
// Get all workspaces for the current user
@@ -64,9 +63,9 @@ export async function POST(req: Request) {
}
try {
const { name, skipDefaultWorkflow } = createWorkspaceSchema.parse(await req.json())
const { name } = createWorkspaceSchema.parse(await req.json())
const newWorkspace = await createWorkspace(session.user.id, name, skipDefaultWorkflow)
const newWorkspace = await createWorkspace(session.user.id, name)
return NextResponse.json({ workspace: newWorkspace })
} catch (error) {
@@ -81,7 +80,7 @@ async function createDefaultWorkspace(userId: string, userName?: string | null)
return createWorkspace(userId, workspaceName)
}
async function createWorkspace(userId: string, name: string, skipDefaultWorkflow = false) {
async function createWorkspace(userId: string, name: string) {
const workspaceId = crypto.randomUUID()
const workflowId = crypto.randomUUID()
const now = new Date()
@@ -98,6 +97,7 @@ async function createWorkspace(userId: string, name: string, skipDefaultWorkflow
updatedAt: now,
})
// Create admin permissions for the workspace owner
await tx.insert(permissions).values({
id: crypto.randomUUID(),
entityType: 'workspace' as const,
@@ -108,41 +108,37 @@ async function createWorkspace(userId: string, name: string, skipDefaultWorkflow
updatedAt: now,
})
if (!skipDefaultWorkflow) {
await tx.insert(workflow).values({
id: workflowId,
userId,
workspaceId,
folderId: null,
name: 'default-agent',
description: 'Your first workflow - start building here!',
color: '#3972F6',
lastSynced: now,
createdAt: now,
updatedAt: now,
isDeployed: false,
runCount: 0,
variables: {},
})
}
// Create initial workflow for the workspace (empty canvas)
// Create the workflow
await tx.insert(workflow).values({
id: workflowId,
userId,
workspaceId,
folderId: null,
name: 'default-agent',
description: 'Your first workflow - start building here!',
color: '#3972F6',
lastSynced: now,
createdAt: now,
updatedAt: now,
isDeployed: false,
runCount: 0,
variables: {},
})
logger.info(
skipDefaultWorkflow
? `Created workspace ${workspaceId} for user ${userId}`
: `Created workspace ${workspaceId} with initial workflow ${workflowId} for user ${userId}`
`Created workspace ${workspaceId} with initial workflow ${workflowId} for user ${userId}`
)
})
if (!skipDefaultWorkflow) {
const { workflowState } = buildDefaultWorkflowArtifacts()
const seedResult = await saveWorkflowToNormalizedTables(workflowId, workflowState)
const { workflowState } = buildDefaultWorkflowArtifacts()
const seedResult = await saveWorkflowToNormalizedTables(workflowId, workflowState)
if (!seedResult.success) {
throw new Error(seedResult.error || 'Failed to seed default workflow state')
}
if (!seedResult.success) {
throw new Error(seedResult.error || 'Failed to seed default workflow state')
}
} catch (error) {
logger.error(`Failed to create workspace ${workspaceId}:`, error)
logger.error(`Failed to create workspace ${workspaceId} with initial workflow:`, error)
throw error
}

View File

@@ -3,9 +3,9 @@
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { Loader2 } from 'lucide-react'
import { Skeleton } from '@/components/ui/skeleton'
import { formatLatency } from '@/app/workspace/[workspaceId]/logs/utils'
import type { DashboardStatsResponse, WorkflowStats } from '@/hooks/queries/logs'
import { formatLatency, parseDuration } from '@/app/workspace/[workspaceId]/logs/utils'
import { useFilterStore } from '@/stores/logs/filters/store'
import type { WorkflowLog } from '@/stores/logs/filters/types'
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
import { LineChart, WorkflowsList } from './components'
@@ -26,6 +26,10 @@ interface WorkflowExecution {
overallSuccessRate: number
}
const DEFAULT_SEGMENTS = 72
const MIN_SEGMENT_PX = 10
const MIN_SEGMENT_MS = 60000
const SKELETON_BAR_HEIGHTS = [
45, 72, 38, 85, 52, 68, 30, 90, 55, 42, 78, 35, 88, 48, 65, 28, 82, 58, 40, 75, 32, 95, 50, 70,
]
@@ -116,32 +120,13 @@ function DashboardSkeleton() {
}
interface DashboardProps {
stats?: DashboardStatsResponse
logs: WorkflowLog[]
isLoading: boolean
error?: Error | null
}
/**
* Converts server WorkflowStats to the internal WorkflowExecution format.
*/
function toWorkflowExecution(wf: WorkflowStats): WorkflowExecution {
return {
workflowId: wf.workflowId,
workflowName: wf.workflowName,
overallSuccessRate: wf.overallSuccessRate,
segments: wf.segments.map((seg) => ({
timestamp: seg.timestamp,
totalExecutions: seg.totalExecutions,
successfulExecutions: seg.successfulExecutions,
hasExecutions: seg.totalExecutions > 0,
successRate:
seg.totalExecutions > 0 ? (seg.successfulExecutions / seg.totalExecutions) * 100 : 100,
avgDurationMs: seg.avgDurationMs,
})),
}
}
export default function Dashboard({ stats, isLoading, error }: DashboardProps) {
export default function Dashboard({ logs, isLoading, error }: DashboardProps) {
const [segmentCount, setSegmentCount] = useState<number>(DEFAULT_SEGMENTS)
const [selectedSegments, setSelectedSegments] = useState<Record<string, number[]>>({})
const [lastAnchorIndices, setLastAnchorIndices] = useState<Record<string, number>>({})
const barsAreaRef = useRef<HTMLDivElement | null>(null)
@@ -152,32 +137,182 @@ export default function Dashboard({ stats, isLoading, error }: DashboardProps) {
const expandedWorkflowId = workflowIds.length === 1 ? workflowIds[0] : null
const { executions, aggregateSegments, segmentMs } = useMemo(() => {
if (!stats) {
return { executions: [], aggregateSegments: [], segmentMs: 0 }
}
const workflowExecutions = stats.workflows.map(toWorkflowExecution)
return {
executions: workflowExecutions,
aggregateSegments: stats.aggregateSegments,
segmentMs: stats.segmentMs,
}
}, [stats])
const lastExecutionByWorkflow = useMemo(() => {
const map = new Map<string, number>()
for (const wf of executions) {
for (let i = wf.segments.length - 1; i >= 0; i--) {
if (wf.segments[i].totalExecutions > 0) {
map.set(wf.workflowId, new Date(wf.segments[i].timestamp).getTime())
break
}
for (const log of logs) {
const wfId = log.workflowId
if (!wfId) continue
const ts = new Date(log.createdAt).getTime()
const existing = map.get(wfId)
if (!existing || ts > existing) {
map.set(wfId, ts)
}
}
return map
}, [executions])
}, [logs])
const timeBounds = useMemo(() => {
if (logs.length === 0) {
const now = new Date()
return { start: now, end: now }
}
let minTime = Number.POSITIVE_INFINITY
let maxTime = Number.NEGATIVE_INFINITY
for (const log of logs) {
const ts = new Date(log.createdAt).getTime()
if (ts < minTime) minTime = ts
if (ts > maxTime) maxTime = ts
}
const end = new Date(Math.max(maxTime, Date.now()))
const start = new Date(minTime)
return { start, end }
}, [logs])
const { executions, aggregateSegments, segmentMs } = useMemo(() => {
const allWorkflowsList = Object.values(allWorkflows)
if (allWorkflowsList.length === 0) {
return { executions: [], aggregateSegments: [], segmentMs: 0 }
}
const { start, end } =
logs.length > 0
? timeBounds
: { start: new Date(Date.now() - 24 * 60 * 60 * 1000), end: new Date() }
const totalMs = Math.max(1, end.getTime() - start.getTime())
const calculatedSegmentMs = Math.max(
MIN_SEGMENT_MS,
Math.floor(totalMs / Math.max(1, segmentCount))
)
const logsByWorkflow = new Map<string, WorkflowLog[]>()
for (const log of logs) {
const wfId = log.workflowId
if (!logsByWorkflow.has(wfId)) {
logsByWorkflow.set(wfId, [])
}
logsByWorkflow.get(wfId)!.push(log)
}
const workflowExecutions: WorkflowExecution[] = []
for (const workflow of allWorkflowsList) {
const workflowLogs = logsByWorkflow.get(workflow.id) || []
const segments: WorkflowExecution['segments'] = Array.from(
{ length: segmentCount },
(_, i) => ({
timestamp: new Date(start.getTime() + i * calculatedSegmentMs).toISOString(),
hasExecutions: false,
totalExecutions: 0,
successfulExecutions: 0,
successRate: 100,
avgDurationMs: 0,
})
)
const durations: number[][] = Array.from({ length: segmentCount }, () => [])
for (const log of workflowLogs) {
const logTime = new Date(log.createdAt).getTime()
const idx = Math.min(
segmentCount - 1,
Math.max(0, Math.floor((logTime - start.getTime()) / calculatedSegmentMs))
)
segments[idx].totalExecutions += 1
segments[idx].hasExecutions = true
if (log.level !== 'error') {
segments[idx].successfulExecutions += 1
}
const duration = parseDuration({ duration: log.duration ?? undefined })
if (duration !== null && duration > 0) {
durations[idx].push(duration)
}
}
let totalExecs = 0
let totalSuccess = 0
for (let i = 0; i < segmentCount; i++) {
const seg = segments[i]
totalExecs += seg.totalExecutions
totalSuccess += seg.successfulExecutions
if (seg.totalExecutions > 0) {
seg.successRate = (seg.successfulExecutions / seg.totalExecutions) * 100
}
if (durations[i].length > 0) {
seg.avgDurationMs = Math.round(
durations[i].reduce((sum, d) => sum + d, 0) / durations[i].length
)
}
}
const overallSuccessRate = totalExecs > 0 ? (totalSuccess / totalExecs) * 100 : 100
workflowExecutions.push({
workflowId: workflow.id,
workflowName: workflow.name,
segments,
overallSuccessRate,
})
}
workflowExecutions.sort((a, b) => {
const errA = a.overallSuccessRate < 100 ? 1 - a.overallSuccessRate / 100 : 0
const errB = b.overallSuccessRate < 100 ? 1 - b.overallSuccessRate / 100 : 0
if (errA !== errB) return errB - errA
return a.workflowName.localeCompare(b.workflowName)
})
const aggSegments: {
timestamp: string
totalExecutions: number
successfulExecutions: number
avgDurationMs: number
}[] = Array.from({ length: segmentCount }, (_, i) => ({
timestamp: new Date(start.getTime() + i * calculatedSegmentMs).toISOString(),
totalExecutions: 0,
successfulExecutions: 0,
avgDurationMs: 0,
}))
const weightedDurationSums: number[] = Array(segmentCount).fill(0)
const executionCounts: number[] = Array(segmentCount).fill(0)
for (const wf of workflowExecutions) {
wf.segments.forEach((s, i) => {
aggSegments[i].totalExecutions += s.totalExecutions
aggSegments[i].successfulExecutions += s.successfulExecutions
if (s.avgDurationMs && s.avgDurationMs > 0 && s.totalExecutions > 0) {
weightedDurationSums[i] += s.avgDurationMs * s.totalExecutions
executionCounts[i] += s.totalExecutions
}
})
}
aggSegments.forEach((seg, i) => {
if (executionCounts[i] > 0) {
seg.avgDurationMs = weightedDurationSums[i] / executionCounts[i]
}
})
return {
executions: workflowExecutions,
aggregateSegments: aggSegments,
segmentMs: calculatedSegmentMs,
}
}, [logs, timeBounds, segmentCount, allWorkflows])
const filteredExecutions = useMemo(() => {
let filtered = executions
@@ -376,12 +511,37 @@ export default function Dashboard({ stats, isLoading, error }: DashboardProps) {
useEffect(() => {
setSelectedSegments({})
setLastAnchorIndices({})
}, [stats, timeRange, workflowIds, searchQuery])
}, [logs, timeRange, workflowIds, searchQuery])
useEffect(() => {
if (!barsAreaRef.current) return
const el = barsAreaRef.current
let debounceId: ReturnType<typeof setTimeout> | null = null
const ro = new ResizeObserver(([entry]) => {
const w = entry?.contentRect?.width || 720
const n = Math.max(36, Math.min(96, Math.floor(w / MIN_SEGMENT_PX)))
if (debounceId) clearTimeout(debounceId)
debounceId = setTimeout(() => {
setSegmentCount(n)
}, 150)
})
ro.observe(el)
const rect = el.getBoundingClientRect()
if (rect?.width) {
const n = Math.max(36, Math.min(96, Math.floor(rect.width / MIN_SEGMENT_PX)))
setSegmentCount(n)
}
return () => {
if (debounceId) clearTimeout(debounceId)
ro.disconnect()
}
}, [])
if (isLoading) {
return <DashboardSkeleton />
}
// Show error state
if (error) {
return (
<div className='mt-[24px] flex flex-1 items-center justify-center'>

View File

@@ -136,6 +136,7 @@ export function NotificationSettings({
levelFilter: ['info', 'error'] as LogLevel[],
triggerFilter: [...CORE_TRIGGER_TYPES] as CoreTriggerType[],
includeFinalOutput: false,
includeTraceSpans: false,
includeRateLimits: false,
includeUsageData: false,
webhookUrl: '',
@@ -202,6 +203,7 @@ export function NotificationSettings({
levelFilter: ['info', 'error'],
triggerFilter: [...CORE_TRIGGER_TYPES],
includeFinalOutput: false,
includeTraceSpans: false,
includeRateLimits: false,
includeUsageData: false,
webhookUrl: '',
@@ -420,6 +422,7 @@ export function NotificationSettings({
levelFilter: formData.levelFilter,
triggerFilter: formData.triggerFilter,
includeFinalOutput: formData.includeFinalOutput,
includeTraceSpans: formData.includeTraceSpans,
includeRateLimits: formData.includeRateLimits,
includeUsageData: formData.includeUsageData,
alertConfig,
@@ -471,6 +474,7 @@ export function NotificationSettings({
levelFilter: subscription.levelFilter as LogLevel[],
triggerFilter: subscription.triggerFilter as CoreTriggerType[],
includeFinalOutput: subscription.includeFinalOutput,
includeTraceSpans: subscription.includeTraceSpans,
includeRateLimits: subscription.includeRateLimits,
includeUsageData: subscription.includeUsageData,
webhookUrl: subscription.webhookConfig?.url || '',
@@ -826,6 +830,7 @@ export function NotificationSettings({
<Combobox
options={[
{ label: 'Final Output', value: 'includeFinalOutput' },
{ label: 'Trace Spans', value: 'includeTraceSpans' },
{ label: 'Rate Limits', value: 'includeRateLimits' },
{ label: 'Usage Data', value: 'includeUsageData' },
]}
@@ -833,6 +838,7 @@ export function NotificationSettings({
multiSelectValues={
[
formData.includeFinalOutput && 'includeFinalOutput',
formData.includeTraceSpans && 'includeTraceSpans',
formData.includeRateLimits && 'includeRateLimits',
formData.includeUsageData && 'includeUsageData',
].filter(Boolean) as string[]
@@ -841,6 +847,7 @@ export function NotificationSettings({
setFormData({
...formData,
includeFinalOutput: values.includes('includeFinalOutput'),
includeTraceSpans: values.includes('includeTraceSpans'),
includeRateLimits: values.includes('includeRateLimits'),
includeUsageData: values.includes('includeUsageData'),
})
@@ -849,11 +856,13 @@ export function NotificationSettings({
overlayContent={(() => {
const labels: Record<string, string> = {
includeFinalOutput: 'Final Output',
includeTraceSpans: 'Trace Spans',
includeRateLimits: 'Rate Limits',
includeUsageData: 'Usage Data',
}
const selected = [
formData.includeFinalOutput && 'includeFinalOutput',
formData.includeTraceSpans && 'includeTraceSpans',
formData.includeRateLimits && 'includeRateLimits',
formData.includeUsageData && 'includeUsageData',
].filter(Boolean) as string[]

View File

@@ -11,7 +11,7 @@ import {
} from '@/lib/logs/filters'
import { parseQuery, queryToApiParams } from '@/lib/logs/query-parser'
import { useFolders } from '@/hooks/queries/folders'
import { useDashboardStats, useLogDetail, useLogsList } from '@/hooks/queries/logs'
import { useDashboardLogs, useLogDetail, useLogsList } from '@/hooks/queries/logs'
import { useDebounce } from '@/hooks/use-debounce'
import { useFilterStore } from '@/stores/logs/filters/store'
import type { WorkflowLog } from '@/stores/logs/filters/types'
@@ -130,7 +130,7 @@ export default function Logs() {
[timeRange, startDate, endDate, level, workflowIds, folderIds, triggers, debouncedSearchQuery]
)
const dashboardStatsQuery = useDashboardStats(workspaceId, dashboardFilters, {
const dashboardLogsQuery = useDashboardLogs(workspaceId, dashboardFilters, {
enabled: Boolean(workspaceId) && isInitialized.current,
refetchInterval: isLive ? 5000 : false,
})
@@ -417,9 +417,9 @@ export default function Logs() {
className={cn('flex min-h-0 flex-1 flex-col pr-[24px]', !isDashboardView && 'hidden')}
>
<Dashboard
stats={dashboardStatsQuery.data}
isLoading={dashboardStatsQuery.isLoading}
error={dashboardStatsQuery.error}
logs={dashboardLogsQuery.data ?? []}
isLoading={!dashboardLogsQuery.data}
error={dashboardLogsQuery.error}
/>
</div>

View File

@@ -8,7 +8,6 @@ import {
extractFieldsFromSchema,
parseResponseFormatSafely,
} from '@/lib/core/utils/response-format'
import { getToolOutputs } from '@/lib/workflows/blocks/block-outputs'
import { getBlock } from '@/blocks'
import { useWorkflowDiffStore } from '@/stores/workflow-diff/store'
import { useSubBlockStore } from '@/stores/workflows/subblock/store'
@@ -129,10 +128,6 @@ export function OutputSelect({
? baselineWorkflow.blocks?.[block.id]?.subBlocks?.responseFormat?.value
: subBlockValues?.[block.id]?.responseFormat
const responseFormat = parseResponseFormatSafely(responseFormatValue, block.id)
const operationValue =
shouldUseBaseline && baselineWorkflow
? baselineWorkflow.blocks?.[block.id]?.subBlocks?.operation?.value
: subBlockValues?.[block.id]?.operation
let outputsToProcess: Record<string, unknown> = {}
@@ -146,12 +141,7 @@ export function OutputSelect({
outputsToProcess = blockConfig?.outputs || {}
}
} else {
const toolOutputs =
blockConfig && typeof operationValue === 'string'
? getToolOutputs(blockConfig, operationValue)
: {}
outputsToProcess =
Object.keys(toolOutputs).length > 0 ? toolOutputs : blockConfig?.outputs || {}
outputsToProcess = blockConfig?.outputs || {}
}
if (Object.keys(outputsToProcess).length === 0) return

View File

@@ -20,13 +20,7 @@ import {
extractFieldsFromSchema,
parseResponseFormatSafely,
} from '@/lib/core/utils/response-format'
import {
getBlockOutputPaths,
getBlockOutputType,
getOutputPathsFromSchema,
getToolOutputPaths,
getToolOutputType,
} from '@/lib/workflows/blocks/block-outputs'
import { getBlockOutputPaths, getBlockOutputType } from '@/lib/workflows/blocks/block-outputs'
import { TRIGGER_TYPES } from '@/lib/workflows/triggers/triggers'
import { KeyboardNavigationHandler } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/tag-dropdown/components/keyboard-navigation-handler'
import type {
@@ -44,6 +38,7 @@ import { useSubBlockStore } from '@/stores/workflows/subblock/store'
import { normalizeName } from '@/stores/workflows/utils'
import { useWorkflowStore } from '@/stores/workflows/workflow/store'
import type { BlockState } from '@/stores/workflows/workflow/types'
import { getTool } from '@/tools/utils'
const logger = createLogger('TagDropdown')
@@ -73,12 +68,6 @@ interface TagDropdownProps {
inputRef?: React.RefObject<HTMLTextAreaElement | HTMLInputElement>
}
interface TagComputationResult {
tags: string[]
variableInfoMap: Record<string, { type: string; id: string }>
blockTagGroups: BlockTagGroup[]
}
/**
* Checks if the tag trigger (`<`) should show the tag dropdown.
*
@@ -229,6 +218,161 @@ const getOutputTypeForPath = (
return 'any'
}
/**
* Recursively generates all output paths from an outputs schema.
*
* @remarks
* Traverses nested objects and arrays to build dot-separated paths
* for all leaf values in the schema.
*
* @param outputs - The outputs schema object
* @param prefix - Current path prefix for recursion
* @returns Array of dot-separated paths to all output fields
*/
const generateOutputPaths = (outputs: Record<string, any>, prefix = ''): string[] => {
const paths: string[] = []
for (const [key, value] of Object.entries(outputs)) {
const currentPath = prefix ? `${prefix}.${key}` : key
if (typeof value === 'string') {
paths.push(currentPath)
} else if (typeof value === 'object' && value !== null) {
if ('type' in value && typeof value.type === 'string') {
const hasNestedProperties =
((value.type === 'object' || value.type === 'json') && value.properties) ||
(value.type === 'array' && value.items?.properties) ||
(value.type === 'array' &&
value.items &&
typeof value.items === 'object' &&
!('type' in value.items))
if (!hasNestedProperties) {
paths.push(currentPath)
}
if ((value.type === 'object' || value.type === 'json') && value.properties) {
paths.push(...generateOutputPaths(value.properties, currentPath))
} else if (value.type === 'array' && value.items?.properties) {
paths.push(...generateOutputPaths(value.items.properties, currentPath))
} else if (
value.type === 'array' &&
value.items &&
typeof value.items === 'object' &&
!('type' in value.items)
) {
paths.push(...generateOutputPaths(value.items, currentPath))
}
} else {
const subPaths = generateOutputPaths(value, currentPath)
paths.push(...subPaths)
}
} else {
paths.push(currentPath)
}
}
return paths
}
/**
* Recursively generates all output paths with their types from an outputs schema.
*
* @remarks
* Similar to generateOutputPaths but also captures the type information
* for each path, useful for displaying type hints in the UI.
*
* @param outputs - The outputs schema object
* @param prefix - Current path prefix for recursion
* @returns Array of objects containing path and type for each output field
*/
const generateOutputPathsWithTypes = (
outputs: Record<string, any>,
prefix = ''
): Array<{ path: string; type: string }> => {
const paths: Array<{ path: string; type: string }> = []
for (const [key, value] of Object.entries(outputs)) {
const currentPath = prefix ? `${prefix}.${key}` : key
if (typeof value === 'string') {
paths.push({ path: currentPath, type: value })
} else if (typeof value === 'object' && value !== null) {
if ('type' in value && typeof value.type === 'string') {
if (value.type === 'array' && value.items?.properties) {
paths.push({ path: currentPath, type: 'array' })
const subPaths = generateOutputPathsWithTypes(value.items.properties, currentPath)
paths.push(...subPaths)
} else if ((value.type === 'object' || value.type === 'json') && value.properties) {
paths.push({ path: currentPath, type: value.type })
const subPaths = generateOutputPathsWithTypes(value.properties, currentPath)
paths.push(...subPaths)
} else {
paths.push({ path: currentPath, type: value.type })
}
} else {
const subPaths = generateOutputPathsWithTypes(value, currentPath)
paths.push(...subPaths)
}
} else {
paths.push({ path: currentPath, type: 'any' })
}
}
return paths
}
/**
* Generates output paths for a tool-based block.
*
* @param blockConfig - The block configuration containing tools config
* @param operation - The selected operation for the tool
* @returns Array of output paths for the tool, or empty array on error
*/
const generateToolOutputPaths = (blockConfig: BlockConfig, operation: string): string[] => {
if (!blockConfig?.tools?.config?.tool) return []
try {
const toolId = blockConfig.tools.config.tool({ operation })
if (!toolId) return []
const toolConfig = getTool(toolId)
if (!toolConfig?.outputs) return []
return generateOutputPaths(toolConfig.outputs)
} catch (error) {
logger.warn('Failed to get tool outputs for operation', { operation, error })
return []
}
}
/**
* Gets the output type for a specific path in a tool's outputs.
*
* @param blockConfig - The block configuration containing tools config
* @param operation - The selected operation for the tool
* @param path - The dot-separated path to the output field
* @returns The type of the output field, or 'any' if not found
*/
const getToolOutputType = (blockConfig: BlockConfig, operation: string, path: string): string => {
if (!blockConfig?.tools?.config?.tool) return 'any'
try {
const toolId = blockConfig.tools.config.tool({ operation })
if (!toolId) return 'any'
const toolConfig = getTool(toolId)
if (!toolConfig?.outputs) return 'any'
const pathsWithTypes = generateOutputPathsWithTypes(toolConfig.outputs)
const matchingPath = pathsWithTypes.find((p) => p.path === path)
return matchingPath?.type || 'any'
} catch (error) {
logger.warn('Failed to get tool output type for path', { path, error })
return 'any'
}
}
/**
* Calculates the viewport position of the caret in a textarea/input.
*
@@ -457,16 +601,14 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
[inputValue, cursorPosition]
)
const emptyVariableInfoMap: Record<string, { type: string; id: string }> = {}
/**
* Computes tags, variable info, and block tag groups
*/
const { tags, variableInfoMap, blockTagGroups } = useMemo<TagComputationResult>(() => {
const { tags, variableInfoMap, blockTagGroups } = useMemo(() => {
if (activeSourceBlockId) {
const sourceBlock = blocks[activeSourceBlockId]
if (!sourceBlock) {
return { tags: [], variableInfoMap: emptyVariableInfoMap, blockTagGroups: [] }
return { tags: [], variableInfoMap: {}, blockTagGroups: [] }
}
const blockConfig = getBlock(sourceBlock.type)
@@ -477,7 +619,7 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
const blockName = sourceBlock.name || sourceBlock.type
const normalizedBlockName = normalizeName(blockName)
const outputPaths = getOutputPathsFromSchema(mockConfig.outputs)
const outputPaths = generateOutputPaths(mockConfig.outputs)
const blockTags = outputPaths.map((path) => `${normalizedBlockName}.${path}`)
const blockTagGroups: BlockTagGroup[] = [
@@ -490,9 +632,9 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
},
]
return { tags: blockTags, variableInfoMap: emptyVariableInfoMap, blockTagGroups }
return { tags: blockTags, variableInfoMap: {}, blockTagGroups }
}
return { tags: [], variableInfoMap: emptyVariableInfoMap, blockTagGroups: [] }
return { tags: [], variableInfoMap: {}, blockTagGroups: [] }
}
const blockName = sourceBlock.name || sourceBlock.type
@@ -635,7 +777,7 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
const operationValue =
mergedSubBlocks?.operation?.value ?? getSubBlockValue(activeSourceBlockId, 'operation')
const toolOutputPaths = operationValue
? getToolOutputPaths(blockConfig, operationValue)
? generateToolOutputPaths(blockConfig, operationValue)
: []
if (toolOutputPaths.length > 0) {
@@ -668,12 +810,12 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
},
]
return { tags: blockTags, variableInfoMap: emptyVariableInfoMap, blockTagGroups }
return { tags: blockTags, variableInfoMap: {}, blockTagGroups }
}
const hasInvalidBlocks = Object.values(blocks).some((block) => !block || !block.type)
if (hasInvalidBlocks) {
return { tags: [], variableInfoMap: emptyVariableInfoMap, blockTagGroups: [] }
return { tags: [], variableInfoMap: {}, blockTagGroups: [] }
}
const starterBlock = Object.values(blocks).find((block) => block.type === 'starter')
@@ -839,7 +981,7 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
const blockName = accessibleBlock.name || accessibleBlock.type
const normalizedBlockName = normalizeName(blockName)
const outputPaths = getOutputPathsFromSchema(mockConfig.outputs)
const outputPaths = generateOutputPaths(mockConfig.outputs)
let blockTags = outputPaths.map((path) => `${normalizedBlockName}.${path}`)
blockTags = ensureRootTag(blockTags, normalizedBlockName)
@@ -967,7 +1109,7 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
const operationValue =
mergedSubBlocks?.operation?.value ?? getSubBlockValue(accessibleBlockId, 'operation')
const toolOutputPaths = operationValue
? getToolOutputPaths(blockConfig, operationValue)
? generateToolOutputPaths(blockConfig, operationValue)
: []
if (toolOutputPaths.length > 0) {
@@ -1041,7 +1183,7 @@ export const TagDropdown: React.FC<TagDropdownProps> = ({
const filteredTags = useMemo(() => {
if (!searchTerm) return tags
return tags.filter((tag: string) => tag.toLowerCase().includes(searchTerm))
return tags.filter((tag) => tag.toLowerCase().includes(searchTerm))
}, [tags, searchTerm])
const { variableTags, filteredBlockTagGroups } = useMemo(() => {

View File

@@ -36,8 +36,6 @@ interface FolderItemProps {
onDragEnter?: (e: React.DragEvent<HTMLElement>) => void
onDragLeave?: (e: React.DragEvent<HTMLElement>) => void
}
onDragStart?: () => void
onDragEnd?: () => void
}
/**
@@ -48,13 +46,7 @@ interface FolderItemProps {
* @param props - Component props
* @returns Folder item with drag and expand support
*/
export function FolderItem({
folder,
level,
hoverHandlers,
onDragStart: onDragStartProp,
onDragEnd: onDragEndProp,
}: FolderItemProps) {
export function FolderItem({ folder, level, hoverHandlers }: FolderItemProps) {
const params = useParams()
const router = useRouter()
const workspaceId = params.workspaceId as string
@@ -143,6 +135,11 @@ export function FolderItem({
}
}, [createFolderMutation, workspaceId, folder.id, expandFolder])
/**
* Drag start handler - sets folder data for drag operation
*
* @param e - React drag event
*/
const onDragStart = useCallback(
(e: React.DragEvent) => {
if (isEditing) {
@@ -152,25 +149,14 @@ export function FolderItem({
e.dataTransfer.setData('folder-id', folder.id)
e.dataTransfer.effectAllowed = 'move'
onDragStartProp?.()
},
[folder.id, onDragStartProp]
[folder.id]
)
const {
isDragging,
shouldPreventClickRef,
handleDragStart,
handleDragEnd: handleDragEndBase,
} = useItemDrag({
const { isDragging, shouldPreventClickRef, handleDragStart, handleDragEnd } = useItemDrag({
onDragStart,
})
const handleDragEnd = useCallback(() => {
handleDragEndBase()
onDragEndProp?.()
}, [handleDragEndBase, onDragEndProp])
const {
isOpen: isContextMenuOpen,
position,

View File

@@ -29,8 +29,6 @@ interface WorkflowItemProps {
active: boolean
level: number
onWorkflowClick: (workflowId: string, shiftKey: boolean, metaKey: boolean) => void
onDragStart?: () => void
onDragEnd?: () => void
}
/**
@@ -40,14 +38,7 @@ interface WorkflowItemProps {
* @param props - Component props
* @returns Workflow item with drag and selection support
*/
export function WorkflowItem({
workflow,
active,
level,
onWorkflowClick,
onDragStart: onDragStartProp,
onDragEnd: onDragEndProp,
}: WorkflowItemProps) {
export function WorkflowItem({ workflow, active, level, onWorkflowClick }: WorkflowItemProps) {
const params = useParams()
const workspaceId = params.workspaceId as string
const { selectedWorkflows } = useFolderStore()
@@ -113,7 +104,30 @@ export function WorkflowItem({
[workflow.id, updateWorkflow]
)
const isEditingRef = useRef(false)
/**
* Drag start handler - handles workflow dragging with multi-selection support
*
* @param e - React drag event
*/
const onDragStart = useCallback(
(e: React.DragEvent) => {
if (isEditing) {
e.preventDefault()
return
}
const workflowIds =
isSelected && selectedWorkflows.size > 1 ? Array.from(selectedWorkflows) : [workflow.id]
e.dataTransfer.setData('workflow-ids', JSON.stringify(workflowIds))
e.dataTransfer.effectAllowed = 'move'
},
[isSelected, selectedWorkflows, workflow.id]
)
const { isDragging, shouldPreventClickRef, handleDragStart, handleDragEnd } = useItemDrag({
onDragStart,
})
const {
isOpen: isContextMenuOpen,
@@ -218,43 +232,6 @@ export function WorkflowItem({
itemId: workflow.id,
})
isEditingRef.current = isEditing
const onDragStart = useCallback(
(e: React.DragEvent) => {
if (isEditingRef.current) {
e.preventDefault()
return
}
const currentSelection = useFolderStore.getState().selectedWorkflows
const isCurrentlySelected = currentSelection.has(workflow.id)
const workflowIds =
isCurrentlySelected && currentSelection.size > 1
? Array.from(currentSelection)
: [workflow.id]
e.dataTransfer.setData('workflow-ids', JSON.stringify(workflowIds))
e.dataTransfer.effectAllowed = 'move'
onDragStartProp?.()
},
[workflow.id, onDragStartProp]
)
const {
isDragging,
shouldPreventClickRef,
handleDragStart,
handleDragEnd: handleDragEndBase,
} = useItemDrag({
onDragStart,
})
const handleDragEnd = useCallback(() => {
handleDragEndBase()
onDragEndProp?.()
}, [handleDragEndBase, onDragEndProp])
/**
* Handle double-click on workflow name to enter rename mode
*/

View File

@@ -1,6 +1,6 @@
'use client'
import { memo, useCallback, useEffect, useMemo } from 'react'
import { useCallback, useEffect, useMemo } from 'react'
import clsx from 'clsx'
import { useParams, usePathname } from 'next/navigation'
import { FolderItem } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/workflow-list/components/folder-item/folder-item'
@@ -14,6 +14,9 @@ import { useFolderStore } from '@/stores/folders/store'
import type { FolderTreeNode } from '@/stores/folders/types'
import type { WorkflowMetadata } from '@/stores/workflows/registry/types'
/**
* Constants for tree layout and styling
*/
const TREE_SPACING = {
INDENT_PER_LEVEL: 20,
} as const
@@ -26,24 +29,12 @@ interface WorkflowListProps {
scrollContainerRef: React.RefObject<HTMLDivElement | null>
}
const DropIndicatorLine = memo(function DropIndicatorLine({
show,
level = 0,
}: {
show: boolean
level?: number
}) {
if (!show) return null
return (
<div
className='pointer-events-none absolute right-0 left-0 z-20 flex items-center'
style={{ paddingLeft: `${level * TREE_SPACING.INDENT_PER_LEVEL}px` }}
>
<div className='h-[2px] flex-1 rounded-full bg-[#33b4ff]/70' />
</div>
)
})
/**
* WorkflowList component displays workflows organized by folders with drag-and-drop support.
*
* @param props - Component props
* @returns Workflow list with folders and drag-drop support
*/
export function WorkflowList({
regularWorkflows,
isLoading = false,
@@ -57,21 +48,20 @@ export function WorkflowList({
const workflowId = params.workflowId as string
const { isLoading: foldersLoading } = useFolders(workspaceId)
const { getFolderTree, expandedFolders, getFolderPath, setExpanded } = useFolderStore()
const {
dropIndicator,
dropTargetId,
isDragging,
setScrollContainer,
createWorkflowDragHandlers,
createFolderDragHandlers,
createEmptyFolderDropZone,
createFolderContentDropZone,
createRootDropZone,
handleDragStart,
handleDragEnd,
createItemDragHandlers,
createRootDragHandlers,
createFolderHeaderHoverHandlers,
} = useDragDrop()
// Set scroll container when ref changes
useEffect(() => {
if (scrollContainerRef.current) {
setScrollContainer(scrollContainerRef.current)
@@ -86,22 +76,23 @@ export function WorkflowList({
return activeWorkflow?.folderId || null
}, [workflowId, regularWorkflows, isLoading, foldersLoading])
const workflowsByFolder = useMemo(() => {
const grouped = regularWorkflows.reduce(
(acc, workflow) => {
const folderId = workflow.folderId || 'root'
if (!acc[folderId]) acc[folderId] = []
acc[folderId].push(workflow)
return acc
},
{} as Record<string, WorkflowMetadata[]>
)
for (const folderId of Object.keys(grouped)) {
grouped[folderId].sort((a, b) => a.sortOrder - b.sortOrder)
}
return grouped
}, [regularWorkflows])
const workflowsByFolder = useMemo(
() =>
regularWorkflows.reduce(
(acc, workflow) => {
const folderId = workflow.folderId || 'root'
if (!acc[folderId]) acc[folderId] = []
acc[folderId].push(workflow)
return acc
},
{} as Record<string, WorkflowMetadata[]>
),
[regularWorkflows]
)
/**
* Build a flat list of all workflow IDs in display order for range selection
*/
const orderedWorkflowIds = useMemo(() => {
const ids: string[] = []
@@ -115,10 +106,12 @@ export function WorkflowList({
}
}
// Collect from folders first
for (const folder of folderTree) {
collectWorkflowIds(folder)
}
// Then collect root workflows
const rootWorkflows = workflowsByFolder.root || []
for (const workflow of rootWorkflows) {
ids.push(workflow.id)
@@ -127,24 +120,30 @@ export function WorkflowList({
return ids
}, [folderTree, workflowsByFolder])
// Workflow selection hook - uses active workflow ID as anchor for range selection
const { handleWorkflowClick } = useWorkflowSelection({
workflowIds: orderedWorkflowIds,
activeWorkflowId: workflowId,
})
const isWorkflowActive = useCallback(
(wfId: string) => pathname === `/workspace/${workspaceId}/w/${wfId}`,
(workflowId: string) => pathname === `/workspace/${workspaceId}/w/${workflowId}`,
[pathname, workspaceId]
)
/**
* Auto-expand folders and select active workflow.
*/
useEffect(() => {
if (!workflowId || isLoading || foldersLoading) return
// Expand folder path to reveal workflow
if (activeWorkflowFolderId) {
const folderPath = getFolderPath(activeWorkflowFolderId)
folderPath.forEach((folder) => setExpanded(folder.id, true))
}
// Select workflow if not already selected
const { selectedWorkflows, selectOnly } = useFolderStore.getState()
if (!selectedWorkflows.has(workflowId)) {
selectOnly(workflowId)
@@ -152,40 +151,23 @@ export function WorkflowList({
}, [workflowId, activeWorkflowFolderId, isLoading, foldersLoading, getFolderPath, setExpanded])
const renderWorkflowItem = useCallback(
(workflow: WorkflowMetadata, level: number, folderId: string | null = null) => {
const showBefore =
dropIndicator?.targetId === workflow.id && dropIndicator?.position === 'before'
const showAfter =
dropIndicator?.targetId === workflow.id && dropIndicator?.position === 'after'
return (
<div key={workflow.id} className='relative'>
<DropIndicatorLine show={showBefore} level={level} />
<div
style={{ paddingLeft: `${level * TREE_SPACING.INDENT_PER_LEVEL}px` }}
{...createWorkflowDragHandlers(workflow.id, folderId)}
>
<WorkflowItem
workflow={workflow}
active={isWorkflowActive(workflow.id)}
level={level}
onWorkflowClick={handleWorkflowClick}
onDragStart={() => handleDragStart('workflow', folderId)}
onDragEnd={handleDragEnd}
/>
</div>
<DropIndicatorLine show={showAfter} level={level} />
(workflow: WorkflowMetadata, level: number, parentFolderId: string | null = null) => (
<div key={workflow.id} className='relative' {...createItemDragHandlers(parentFolderId)}>
<div
style={{
paddingLeft: `${level * TREE_SPACING.INDENT_PER_LEVEL}px`,
}}
>
<WorkflowItem
workflow={workflow}
active={isWorkflowActive(workflow.id)}
level={level}
onWorkflowClick={handleWorkflowClick}
/>
</div>
)
},
[
dropIndicator,
isWorkflowActive,
createWorkflowDragHandlers,
handleWorkflowClick,
handleDragStart,
handleDragEnd,
]
</div>
),
[isWorkflowActive, createItemDragHandlers, handleWorkflowClick]
)
const renderFolderSection = useCallback(
@@ -197,75 +179,45 @@ export function WorkflowList({
const workflowsInFolder = workflowsByFolder[folder.id] || []
const isExpanded = expandedFolders.has(folder.id)
const hasChildren = workflowsInFolder.length > 0 || folder.children.length > 0
const showBefore =
dropIndicator?.targetId === folder.id && dropIndicator?.position === 'before'
const showAfter = dropIndicator?.targetId === folder.id && dropIndicator?.position === 'after'
const showInside =
dropIndicator?.targetId === folder.id && dropIndicator?.position === 'inside'
const childItems: Array<{
type: 'folder' | 'workflow'
id: string
sortOrder: number
data: FolderTreeNode | WorkflowMetadata
}> = []
for (const childFolder of folder.children) {
childItems.push({
type: 'folder',
id: childFolder.id,
sortOrder: childFolder.sortOrder,
data: childFolder,
})
}
for (const workflow of workflowsInFolder) {
childItems.push({
type: 'workflow',
id: workflow.id,
sortOrder: workflow.sortOrder,
data: workflow,
})
}
childItems.sort((a, b) => a.sortOrder - b.sortOrder)
const isDropTarget = dropTargetId === folder.id
return (
<div key={folder.id} className='relative'>
<DropIndicatorLine show={showBefore} level={level} />
{/* Drop target highlight overlay - covers entire folder section */}
<div key={folder.id} className='relative' {...createFolderDragHandlers(folder.id)}>
{/* Drop target highlight overlay - always rendered for stable DOM */}
<div
className={clsx(
'pointer-events-none absolute inset-0 z-10 rounded-[4px] transition-opacity duration-75',
showInside && isDragging ? 'bg-[#33b4ff1a] opacity-100' : 'opacity-0'
isDropTarget && isDragging ? 'bg-gray-400/20 opacity-100' : 'opacity-0'
)}
/>
<div
style={{ paddingLeft: `${level * TREE_SPACING.INDENT_PER_LEVEL}px` }}
{...createFolderDragHandlers(folder.id, parentFolderId)}
{...createItemDragHandlers(folder.id)}
>
<FolderItem
folder={folder}
level={level}
onDragStart={() => handleDragStart('folder', parentFolderId)}
onDragEnd={handleDragEnd}
hoverHandlers={createFolderHeaderHoverHandlers(folder.id)}
/>
</div>
<DropIndicatorLine show={showAfter} level={level} />
{isExpanded && (hasChildren || isDragging) && (
<div className='relative' {...createFolderContentDropZone(folder.id)}>
{isExpanded && hasChildren && (
<div className='relative' {...createItemDragHandlers(folder.id)}>
{/* Vertical line - positioned to align under folder chevron */}
<div
className='pointer-events-none absolute top-0 bottom-0 w-px bg-[var(--border)]'
style={{ left: `${level * TREE_SPACING.INDENT_PER_LEVEL + 12}px` }}
/>
<div className='mt-[2px] space-y-[2px] pl-[2px]'>
{childItems.map((item) =>
item.type === 'folder'
? renderFolderSection(item.data as FolderTreeNode, level + 1, folder.id)
: renderWorkflowItem(item.data as WorkflowMetadata, level + 1, folder.id)
)}
{!hasChildren && isDragging && (
<div className='h-[24px]' {...createEmptyFolderDropZone(folder.id)} />
{workflowsInFolder.map((workflow: WorkflowMetadata) =>
renderWorkflowItem(workflow, level + 1, folder.id)
)}
{folder.children.map((childFolder) => (
<div key={childFolder.id} className='relative'>
{renderFolderSection(childFolder, level + 1, folder.id)}
</div>
))}
</div>
</div>
)}
@@ -275,47 +227,29 @@ export function WorkflowList({
[
workflowsByFolder,
expandedFolders,
dropIndicator,
dropTargetId,
isDragging,
createFolderDragHandlers,
createEmptyFolderDropZone,
createFolderContentDropZone,
handleDragStart,
handleDragEnd,
createItemDragHandlers,
createFolderHeaderHoverHandlers,
renderWorkflowItem,
]
)
const rootDropZoneHandlers = createRootDropZone()
const handleRootDragEvents = createRootDragHandlers()
const rootWorkflows = workflowsByFolder.root || []
const isRootDropTarget = dropTargetId === 'root'
const hasRootWorkflows = rootWorkflows.length > 0
const hasFolders = folderTree.length > 0
const rootItems = useMemo(() => {
const items: Array<{
type: 'folder' | 'workflow'
id: string
sortOrder: number
data: FolderTreeNode | WorkflowMetadata
}> = []
for (const folder of folderTree) {
items.push({ type: 'folder', id: folder.id, sortOrder: folder.sortOrder, data: folder })
}
for (const workflow of rootWorkflows) {
items.push({
type: 'workflow',
id: workflow.id,
sortOrder: workflow.sortOrder,
data: workflow,
})
}
return items.sort((a, b) => a.sortOrder - b.sortOrder)
}, [folderTree, rootWorkflows])
const hasRootItems = rootItems.length > 0
const showRootInside = dropIndicator?.targetId === 'root' && dropIndicator?.position === 'inside'
/**
* Handle click on empty space to revert to active workflow selection
*/
const handleContainerClick = useCallback(
(e: React.MouseEvent<HTMLDivElement>) => {
// Only handle clicks directly on the container (empty space)
if (e.target !== e.currentTarget) return
const { selectOnly, clearSelection } = useFolderStore.getState()
workflowId ? selectOnly(workflowId) : clearSelection()
},
@@ -324,23 +258,36 @@ export function WorkflowList({
return (
<div className='flex min-h-full flex-col pb-[8px]' onClick={handleContainerClick}>
{/* Folders Section */}
{hasFolders && (
<div className='mb-[2px] space-y-[2px]'>
{folderTree.map((folder) => renderFolderSection(folder, 0))}
</div>
)}
{/* Root Workflows Section - Expands to fill remaining space */}
<div
className={clsx('relative flex-1 rounded-[4px]', !hasRootItems && 'min-h-[26px]')}
{...rootDropZoneHandlers}
className={clsx('relative flex-1', !hasRootWorkflows && 'min-h-[26px]')}
{...handleRootDragEvents}
>
{/* Root drop target highlight overlay */}
{/* Root drop target highlight overlay - always rendered for stable DOM */}
<div
className={clsx(
'pointer-events-none absolute inset-0 z-10 rounded-[4px] transition-opacity duration-75',
showRootInside && isDragging ? 'bg-[#33b4ff1a] opacity-100' : 'opacity-0'
isRootDropTarget && isDragging ? 'bg-gray-400/20 opacity-100' : 'opacity-0'
)}
/>
<div className='space-y-[2px]'>
{rootItems.map((item) =>
item.type === 'folder'
? renderFolderSection(item.data as FolderTreeNode, 0, null)
: renderWorkflowItem(item.data as WorkflowMetadata, 0, null)
)}
{rootWorkflows.map((workflow: WorkflowMetadata) => (
<WorkflowItem
key={workflow.id}
workflow={workflow}
active={isWorkflowActive(workflow.id)}
level={0}
onWorkflowClick={handleWorkflowClick}
/>
))}
</div>
</div>

View File

@@ -1,6 +1,6 @@
export { useAutoScroll } from './use-auto-scroll'
export { useContextMenu } from './use-context-menu'
export { type DropIndicator, useDragDrop } from './use-drag-drop'
export { useDragDrop } from './use-drag-drop'
export { useFolderExpand } from './use-folder-expand'
export { useFolderOperations } from './use-folder-operations'
export { useItemDrag } from './use-item-drag'

View File

@@ -1,40 +1,47 @@
import { useCallback, useEffect, useRef, useState } from 'react'
import { createLogger } from '@sim/logger'
import { useParams } from 'next/navigation'
import { useReorderFolders } from '@/hooks/queries/folders'
import { useReorderWorkflows } from '@/hooks/queries/workflows'
import { useUpdateFolder } from '@/hooks/queries/folders'
import { useFolderStore } from '@/stores/folders/store'
import { useWorkflowRegistry } from '@/stores/workflows/registry/store'
const logger = createLogger('WorkflowList:DragDrop')
const SCROLL_THRESHOLD = 60
const SCROLL_SPEED = 8
const HOVER_EXPAND_DELAY = 400
/**
* Constants for auto-scroll behavior
*/
const SCROLL_THRESHOLD = 60 // Distance from edge to trigger scroll
const SCROLL_SPEED = 8 // Pixels per frame
export interface DropIndicator {
targetId: string
position: 'before' | 'after' | 'inside'
folderId: string | null
}
/**
* Constants for folder auto-expand on hover during drag
*/
const HOVER_EXPAND_DELAY = 400 // Milliseconds to wait before expanding folder
/**
* Custom hook for handling drag and drop operations for workflows and folders.
* Includes auto-scrolling, drop target highlighting, and hover-to-expand.
*
* @returns Drag and drop state and event handlers
*/
export function useDragDrop() {
const [dropIndicator, setDropIndicator] = useState<DropIndicator | null>(null)
const [dropTargetId, setDropTargetId] = useState<string | null>(null)
const [isDragging, setIsDragging] = useState(false)
const [hoverFolderId, setHoverFolderId] = useState<string | null>(null)
const scrollContainerRef = useRef<HTMLDivElement | null>(null)
const scrollIntervalRef = useRef<number | null>(null)
const hoverExpandTimerRef = useRef<number | null>(null)
const lastDragYRef = useRef<number>(0)
const draggedTypeRef = useRef<'workflow' | 'folder' | null>(null)
const draggedSourceFolderRef = useRef<string | null>(null)
const params = useParams()
const workspaceId = params.workspaceId as string | undefined
const reorderWorkflowsMutation = useReorderWorkflows()
const reorderFoldersMutation = useReorderFolders()
const updateFolderMutation = useUpdateFolder()
const { setExpanded, expandedFolders } = useFolderStore()
const { updateWorkflow } = useWorkflowRegistry()
/**
* Auto-scroll handler - scrolls container when dragging near edges
*/
const handleAutoScroll = useCallback(() => {
if (!scrollContainerRef.current || !isDragging) return
@@ -42,17 +49,22 @@ export function useDragDrop() {
const rect = container.getBoundingClientRect()
const mouseY = lastDragYRef.current
// Only scroll if mouse is within container bounds
if (mouseY < rect.top || mouseY > rect.bottom) return
// Calculate distance from top and bottom edges
const distanceFromTop = mouseY - rect.top
const distanceFromBottom = rect.bottom - mouseY
let scrollDelta = 0
// Scroll up if near top and not at scroll top
if (distanceFromTop < SCROLL_THRESHOLD && container.scrollTop > 0) {
const intensity = Math.max(0, Math.min(1, 1 - distanceFromTop / SCROLL_THRESHOLD))
scrollDelta = -SCROLL_SPEED * intensity
} else if (distanceFromBottom < SCROLL_THRESHOLD) {
}
// Scroll down if near bottom and not at scroll bottom
else if (distanceFromBottom < SCROLL_THRESHOLD) {
const maxScroll = container.scrollHeight - container.clientHeight
if (container.scrollTop < maxScroll) {
const intensity = Math.max(0, Math.min(1, 1 - distanceFromBottom / SCROLL_THRESHOLD))
@@ -65,9 +77,12 @@ export function useDragDrop() {
}
}, [isDragging])
/**
* Start auto-scroll animation loop
*/
useEffect(() => {
if (isDragging) {
scrollIntervalRef.current = window.setInterval(handleAutoScroll, 10)
scrollIntervalRef.current = window.setInterval(handleAutoScroll, 10) // ~100fps for smoother response
} else {
if (scrollIntervalRef.current) {
clearInterval(scrollIntervalRef.current)
@@ -82,17 +97,30 @@ export function useDragDrop() {
}
}, [isDragging, handleAutoScroll])
/**
* Handle hover folder changes - start/clear expand timer
*/
useEffect(() => {
// Clear existing timer when hover folder changes
if (hoverExpandTimerRef.current) {
clearTimeout(hoverExpandTimerRef.current)
hoverExpandTimerRef.current = null
}
if (!isDragging || !hoverFolderId) return
if (expandedFolders.has(hoverFolderId)) return
// Don't start timer if not dragging or no folder is hovered
if (!isDragging || !hoverFolderId) {
return
}
// Don't expand if folder is already expanded
if (expandedFolders.has(hoverFolderId)) {
return
}
// Start timer to expand folder after delay
hoverExpandTimerRef.current = window.setTimeout(() => {
setExpanded(hoverFolderId, true)
logger.info(`Auto-expanded folder ${hoverFolderId} during drag`)
}, HOVER_EXPAND_DELAY)
return () => {
@@ -103,471 +131,249 @@ export function useDragDrop() {
}
}, [hoverFolderId, isDragging, expandedFolders, setExpanded])
/**
* Cleanup hover state when dragging stops
*/
useEffect(() => {
if (!isDragging) {
setHoverFolderId(null)
setDropIndicator(null)
draggedTypeRef.current = null
}
}, [isDragging])
const calculateDropPosition = useCallback(
(e: React.DragEvent, element: HTMLElement): 'before' | 'after' => {
const rect = element.getBoundingClientRect()
const midY = rect.top + rect.height / 2
return e.clientY < midY ? 'before' : 'after'
},
[]
)
const calculateFolderDropPosition = useCallback(
(e: React.DragEvent, element: HTMLElement): 'before' | 'inside' | 'after' => {
const rect = element.getBoundingClientRect()
const relativeY = e.clientY - rect.top
const height = rect.height
// Top 25% = before, middle 50% = inside, bottom 25% = after
if (relativeY < height * 0.25) return 'before'
if (relativeY > height * 0.75) return 'after'
return 'inside'
},
[]
)
type SiblingItem = { type: 'folder' | 'workflow'; id: string; sortOrder: number }
const getDestinationFolderId = useCallback((indicator: DropIndicator): string | null => {
return indicator.position === 'inside'
? indicator.targetId === 'root'
? null
: indicator.targetId
: indicator.folderId
}, [])
const calculateInsertIndex = useCallback(
(remaining: SiblingItem[], indicator: DropIndicator): number => {
return indicator.position === 'inside'
? remaining.length
: remaining.findIndex((item) => item.id === indicator.targetId) +
(indicator.position === 'after' ? 1 : 0)
},
[]
)
const buildAndSubmitUpdates = useCallback(
async (newOrder: SiblingItem[], destinationFolderId: string | null) => {
const indexed = newOrder.map((item, i) => ({ ...item, sortOrder: i }))
const folderUpdates = indexed
.filter((item) => item.type === 'folder')
.map((item) => ({ id: item.id, sortOrder: item.sortOrder, parentId: destinationFolderId }))
const workflowUpdates = indexed
.filter((item) => item.type === 'workflow')
.map((item) => ({ id: item.id, sortOrder: item.sortOrder, folderId: destinationFolderId }))
await Promise.all(
[
folderUpdates.length > 0 &&
reorderFoldersMutation.mutateAsync({
workspaceId: workspaceId!,
updates: folderUpdates,
}),
workflowUpdates.length > 0 &&
reorderWorkflowsMutation.mutateAsync({
workspaceId: workspaceId!,
updates: workflowUpdates,
}),
].filter(Boolean)
)
},
[workspaceId, reorderFoldersMutation, reorderWorkflowsMutation]
)
const isLeavingElement = useCallback((e: React.DragEvent<HTMLElement>): boolean => {
const relatedTarget = e.relatedTarget as HTMLElement | null
const currentTarget = e.currentTarget as HTMLElement
return !relatedTarget || !currentTarget.contains(relatedTarget)
}, [])
const initDragOver = useCallback((e: React.DragEvent<HTMLElement>, stopPropagation = true) => {
e.preventDefault()
if (stopPropagation) e.stopPropagation()
lastDragYRef.current = e.clientY
setIsDragging(true)
}, [])
const getSiblingItems = useCallback((folderId: string | null): SiblingItem[] => {
const currentFolders = useFolderStore.getState().folders
const currentWorkflows = useWorkflowRegistry.getState().workflows
return [
...Object.values(currentFolders)
.filter((f) => f.parentId === folderId)
.map((f) => ({ type: 'folder' as const, id: f.id, sortOrder: f.sortOrder })),
...Object.values(currentWorkflows)
.filter((w) => w.folderId === folderId)
.map((w) => ({ type: 'workflow' as const, id: w.id, sortOrder: w.sortOrder })),
].sort((a, b) => a.sortOrder - b.sortOrder)
}, [])
const setNormalizedDropIndicator = useCallback(
(indicator: DropIndicator | null) => {
setDropIndicator((prev) => {
let next: DropIndicator | null = indicator
if (indicator && indicator.position === 'after' && indicator.targetId !== 'root') {
const siblings = getSiblingItems(indicator.folderId)
const currentIdx = siblings.findIndex((s) => s.id === indicator.targetId)
const nextSibling = siblings[currentIdx + 1]
if (nextSibling) {
next = {
targetId: nextSibling.id,
position: 'before',
folderId: indicator.folderId,
}
}
}
if (
prev?.targetId === next?.targetId &&
prev?.position === next?.position &&
prev?.folderId === next?.folderId
) {
return prev
}
return next
})
},
[getSiblingItems]
)
const isNoOpMove = useCallback(
(
indicator: DropIndicator,
draggedIds: string[],
draggedType: 'folder' | 'workflow',
destinationFolderId: string | null,
currentFolderId: string | null | undefined
): boolean => {
if (indicator.position !== 'inside' && draggedIds.includes(indicator.targetId)) {
return true
}
if (currentFolderId !== destinationFolderId) {
return false
}
const siblingItems = getSiblingItems(destinationFolderId)
const remaining = siblingItems.filter(
(item) => !(item.type === draggedType && draggedIds.includes(item.id))
)
const insertAt = calculateInsertIndex(remaining, indicator)
const originalIdx = siblingItems.findIndex(
(item) => item.type === draggedType && item.id === draggedIds[0]
)
return insertAt === originalIdx
},
[getSiblingItems, calculateInsertIndex]
)
/**
* Moves one or more workflows to a target folder
*
* @param workflowIds - Array of workflow IDs to move
* @param targetFolderId - Target folder ID or null for root
*/
const handleWorkflowDrop = useCallback(
async (workflowIds: string[], indicator: DropIndicator) => {
if (!workflowIds.length || !workspaceId) return
async (workflowIds: string[], targetFolderId: string | null) => {
if (!workflowIds.length) {
logger.warn('No workflows to move')
return
}
try {
const destinationFolderId = getDestinationFolderId(indicator)
const currentWorkflows = useWorkflowRegistry.getState().workflows
const firstWorkflow = currentWorkflows[workflowIds[0]]
if (
isNoOpMove(
indicator,
workflowIds,
'workflow',
destinationFolderId,
firstWorkflow?.folderId
)
) {
return
}
const siblingItems = getSiblingItems(destinationFolderId)
const movingSet = new Set(workflowIds)
const remaining = siblingItems.filter(
(item) => !(item.type === 'workflow' && movingSet.has(item.id))
await Promise.all(
workflowIds.map((workflowId) => updateWorkflow(workflowId, { folderId: targetFolderId }))
)
const moving = workflowIds
.map((id) => ({
type: 'workflow' as const,
id,
sortOrder: currentWorkflows[id]?.sortOrder ?? 0,
}))
.sort((a, b) => a.sortOrder - b.sortOrder)
const insertAt = calculateInsertIndex(remaining, indicator)
const newOrder: SiblingItem[] = [
...remaining.slice(0, insertAt),
...moving,
...remaining.slice(insertAt),
]
await buildAndSubmitUpdates(newOrder, destinationFolderId)
logger.info(`Moved ${workflowIds.length} workflow(s)`)
} catch (error) {
logger.error('Failed to reorder workflows:', error)
logger.error('Failed to move workflows:', error)
}
},
[
getDestinationFolderId,
getSiblingItems,
calculateInsertIndex,
isNoOpMove,
buildAndSubmitUpdates,
]
[updateWorkflow]
)
const handleFolderDrop = useCallback(
async (draggedFolderId: string, indicator: DropIndicator) => {
if (!draggedFolderId || !workspaceId) return
/**
* Moves a folder to a new parent folder, with validation
*
* @param draggedFolderId - ID of the folder being moved
* @param targetFolderId - Target folder ID or null for root
*/
const handleFolderMove = useCallback(
async (draggedFolderId: string, targetFolderId: string | null) => {
if (!draggedFolderId) {
logger.warn('No folder to move')
return
}
try {
const folderStore = useFolderStore.getState()
const currentFolders = folderStore.folders
const draggedFolderPath = folderStore.getFolderPath(draggedFolderId)
const targetParentId = getDestinationFolderId(indicator)
// Prevent moving folder into its own descendant
if (
targetFolderId &&
draggedFolderPath.some((ancestor) => ancestor.id === targetFolderId)
) {
logger.info('Cannot move folder into its own descendant')
return
}
if (draggedFolderId === targetParentId) {
// Prevent moving folder into itself
if (draggedFolderId === targetFolderId) {
logger.info('Cannot move folder into itself')
return
}
if (targetParentId) {
const targetPath = folderStore.getFolderPath(targetParentId)
if (targetPath.some((f) => f.id === draggedFolderId)) {
logger.info('Cannot move folder into its own descendant')
return
}
}
const draggedFolder = currentFolders[draggedFolderId]
if (
isNoOpMove(
indicator,
[draggedFolderId],
'folder',
targetParentId,
draggedFolder?.parentId
)
) {
if (!workspaceId) {
logger.warn('No workspaceId available for folder move')
return
}
const siblingItems = getSiblingItems(targetParentId)
const remaining = siblingItems.filter(
(item) => !(item.type === 'folder' && item.id === draggedFolderId)
)
const insertAt = calculateInsertIndex(remaining, indicator)
const newOrder: SiblingItem[] = [
...remaining.slice(0, insertAt),
{ type: 'folder', id: draggedFolderId, sortOrder: 0 },
...remaining.slice(insertAt),
]
await buildAndSubmitUpdates(newOrder, targetParentId)
await updateFolderMutation.mutateAsync({
workspaceId,
id: draggedFolderId,
updates: { parentId: targetFolderId },
})
logger.info(`Moved folder to ${targetFolderId ? `folder ${targetFolderId}` : 'root'}`)
} catch (error) {
logger.error('Failed to reorder folder:', error)
logger.error('Failed to move folder:', error)
}
},
[
workspaceId,
getDestinationFolderId,
getSiblingItems,
calculateInsertIndex,
isNoOpMove,
buildAndSubmitUpdates,
]
[updateFolderMutation, workspaceId]
)
const handleDrop = useCallback(
async (e: React.DragEvent) => {
/**
* Handles drop events for both workflows and folders
*
* @param e - React drag event
* @param targetFolderId - Target folder ID or null for root
*/
const handleFolderDrop = useCallback(
async (e: React.DragEvent, targetFolderId: string | null) => {
e.preventDefault()
e.stopPropagation()
const indicator = dropIndicator
setDropIndicator(null)
setDropTargetId(null)
setIsDragging(false)
if (!indicator) return
try {
// Check if dropping workflows
const workflowIdsData = e.dataTransfer.getData('workflow-ids')
if (workflowIdsData) {
const workflowIds = JSON.parse(workflowIdsData) as string[]
await handleWorkflowDrop(workflowIds, indicator)
await handleWorkflowDrop(workflowIds, targetFolderId)
return
}
// Check if dropping a folder
const folderIdData = e.dataTransfer.getData('folder-id')
if (folderIdData) {
await handleFolderDrop(folderIdData, indicator)
if (folderIdData && targetFolderId !== folderIdData) {
await handleFolderMove(folderIdData, targetFolderId)
}
} catch (error) {
logger.error('Failed to handle drop:', error)
}
},
[dropIndicator, handleWorkflowDrop, handleFolderDrop]
)
const createWorkflowDragHandlers = useCallback(
(workflowId: string, folderId: string | null) => ({
onDragOver: (e: React.DragEvent<HTMLElement>) => {
initDragOver(e)
const isSameFolder = draggedSourceFolderRef.current === folderId
if (isSameFolder) {
const position = calculateDropPosition(e, e.currentTarget)
setNormalizedDropIndicator({ targetId: workflowId, position, folderId })
} else {
setNormalizedDropIndicator({
targetId: folderId || 'root',
position: 'inside',
folderId: null,
})
}
},
onDrop: handleDrop,
}),
[initDragOver, calculateDropPosition, setNormalizedDropIndicator, handleDrop]
[handleWorkflowDrop, handleFolderMove]
)
/**
* Creates drag event handlers for a specific folder section
* These handlers are attached to the entire folder section container
*
* @param folderId - Folder ID to create handlers for
* @returns Object containing drag event handlers
*/
const createFolderDragHandlers = useCallback(
(folderId: string, parentFolderId: string | null) => ({
(folderId: string) => ({
onDragEnter: (e: React.DragEvent<HTMLElement>) => {
e.preventDefault()
setIsDragging(true)
},
onDragOver: (e: React.DragEvent<HTMLElement>) => {
initDragOver(e)
if (draggedTypeRef.current === 'folder') {
const isSameParent = draggedSourceFolderRef.current === parentFolderId
if (isSameParent) {
const position = calculateDropPosition(e, e.currentTarget)
setNormalizedDropIndicator({ targetId: folderId, position, folderId: parentFolderId })
} else {
setNormalizedDropIndicator({
targetId: folderId,
position: 'inside',
folderId: parentFolderId,
})
setHoverFolderId(folderId)
}
} else {
// Workflow being dragged over a folder
const isSameParent = draggedSourceFolderRef.current === parentFolderId
if (isSameParent) {
// Same level - use three zones: top=before, middle=inside, bottom=after
const position = calculateFolderDropPosition(e, e.currentTarget)
setNormalizedDropIndicator({ targetId: folderId, position, folderId: parentFolderId })
if (position === 'inside') {
setHoverFolderId(folderId)
} else {
setHoverFolderId(null)
}
} else {
// Different container - drop into folder
setNormalizedDropIndicator({
targetId: folderId,
position: 'inside',
folderId: parentFolderId,
})
setHoverFolderId(folderId)
}
}
e.preventDefault()
lastDragYRef.current = e.clientY
setDropTargetId(folderId)
setIsDragging(true)
},
onDragLeave: (e: React.DragEvent<HTMLElement>) => {
if (isLeavingElement(e)) setHoverFolderId(null)
e.preventDefault()
const relatedTarget = e.relatedTarget as HTMLElement | null
const currentTarget = e.currentTarget as HTMLElement
// Only clear if we're leaving the folder section completely
if (!relatedTarget || !currentTarget.contains(relatedTarget)) {
setDropTargetId(null)
}
},
onDrop: handleDrop,
onDrop: (e: React.DragEvent<HTMLElement>) => handleFolderDrop(e, folderId),
}),
[
initDragOver,
calculateDropPosition,
calculateFolderDropPosition,
setNormalizedDropIndicator,
isLeavingElement,
handleDrop,
]
[handleFolderDrop]
)
const createEmptyFolderDropZone = useCallback(
(folderId: string) => ({
onDragOver: (e: React.DragEvent<HTMLElement>) => {
initDragOver(e)
setNormalizedDropIndicator({ targetId: folderId, position: 'inside', folderId })
},
onDrop: handleDrop,
}),
[initDragOver, setNormalizedDropIndicator, handleDrop]
)
const createFolderContentDropZone = useCallback(
(folderId: string) => ({
/**
* Creates drag event handlers for items (workflows/folders) that belong to a parent folder
* When dragging over an item, highlights the parent folder section
*
* @param parentFolderId - Parent folder ID or null for root
* @returns Object containing drag event handlers
*/
const createItemDragHandlers = useCallback(
(parentFolderId: string | null) => ({
onDragOver: (e: React.DragEvent<HTMLElement>) => {
e.preventDefault()
e.stopPropagation()
lastDragYRef.current = e.clientY
setDropTargetId(parentFolderId || 'root')
setIsDragging(true)
if (e.target === e.currentTarget && draggedSourceFolderRef.current !== folderId) {
setNormalizedDropIndicator({ targetId: folderId, position: 'inside', folderId: null })
}
},
onDrop: handleDrop,
}),
[setNormalizedDropIndicator, handleDrop]
)
const createRootDropZone = useCallback(
() => ({
onDragOver: (e: React.DragEvent<HTMLElement>) => {
initDragOver(e, false)
if (e.target === e.currentTarget) {
setNormalizedDropIndicator({ targetId: 'root', position: 'inside', folderId: null })
}
},
onDragLeave: (e: React.DragEvent<HTMLElement>) => {
if (isLeavingElement(e)) setNormalizedDropIndicator(null)
},
onDrop: handleDrop,
}),
[initDragOver, setNormalizedDropIndicator, isLeavingElement, handleDrop]
)
const handleDragStart = useCallback(
(type: 'workflow' | 'folder', sourceFolderId: string | null) => {
draggedTypeRef.current = type
draggedSourceFolderRef.current = sourceFolderId
setIsDragging(true)
},
[]
)
const handleDragEnd = useCallback(() => {
setIsDragging(false)
setDropIndicator(null)
draggedTypeRef.current = null
draggedSourceFolderRef.current = null
setHoverFolderId(null)
}, [])
/**
* Creates drag event handlers for the root drop zone
*
* @returns Object containing drag event handlers for root
*/
const createRootDragHandlers = useCallback(
() => ({
onDragEnter: (e: React.DragEvent<HTMLElement>) => {
e.preventDefault()
setIsDragging(true)
},
onDragOver: (e: React.DragEvent<HTMLElement>) => {
e.preventDefault()
lastDragYRef.current = e.clientY
setDropTargetId('root')
setIsDragging(true)
},
onDragLeave: (e: React.DragEvent<HTMLElement>) => {
e.preventDefault()
const relatedTarget = e.relatedTarget as HTMLElement | null
const currentTarget = e.currentTarget as HTMLElement
// Only clear if we're leaving the root completely
if (!relatedTarget || !currentTarget.contains(relatedTarget)) {
setDropTargetId(null)
}
},
onDrop: (e: React.DragEvent<HTMLElement>) => handleFolderDrop(e, null),
}),
[handleFolderDrop]
)
/**
* Creates drag event handlers for folder header (the clickable part)
* These handlers trigger folder expansion on hover during drag
*
* @param folderId - Folder ID to handle hover for
* @returns Object containing drag event handlers for folder header
*/
const createFolderHeaderHoverHandlers = useCallback(
(folderId: string) => ({
onDragEnter: (e: React.DragEvent<HTMLElement>) => {
if (isDragging) {
setHoverFolderId(folderId)
}
},
onDragLeave: (e: React.DragEvent<HTMLElement>) => {
const relatedTarget = e.relatedTarget as HTMLElement | null
const currentTarget = e.currentTarget as HTMLElement
// Only clear if we're leaving the folder header completely
if (!relatedTarget || !currentTarget.contains(relatedTarget)) {
setHoverFolderId(null)
}
},
}),
[isDragging]
)
/**
* Set the scroll container ref for auto-scrolling
*
* @param element - Scrollable container element
*/
const setScrollContainer = useCallback((element: HTMLDivElement | null) => {
scrollContainerRef.current = element
}, [])
return {
dropIndicator,
dropTargetId,
isDragging,
setScrollContainer,
createWorkflowDragHandlers,
createFolderDragHandlers,
createEmptyFolderDropZone,
createFolderContentDropZone,
createRootDropZone,
handleDragStart,
handleDragEnd,
createItemDragHandlers,
createRootDragHandlers,
createFolderHeaderHoverHandlers,
}
}

View File

@@ -64,7 +64,6 @@ export function useExportWorkspace({ onSuccess }: UseExportWorkspaceProps = {})
id: folder.id,
name: folder.name,
parentId: folder.parentId,
sortOrder: folder.sortOrder,
})
)

View File

@@ -7,7 +7,6 @@ import {
extractWorkflowsFromFiles,
extractWorkflowsFromZip,
parseWorkflowJson,
sanitizePathSegment,
} from '@/lib/workflows/operations/import-export'
import { folderKeys, useCreateFolder } from '@/hooks/queries/folders'
import { useCreateWorkflow, workflowKeys } from '@/hooks/queries/workflows'
@@ -41,7 +40,7 @@ export function useImportWorkflow({ workspaceId }: UseImportWorkflowProps) {
* Import a single workflow
*/
const importSingleWorkflow = useCallback(
async (content: string, filename: string, folderId?: string, sortOrder?: number) => {
async (content: string, filename: string, folderId?: string) => {
const { data: workflowData, errors: parseErrors } = parseWorkflowJson(content)
if (!workflowData || parseErrors.length > 0) {
@@ -61,7 +60,6 @@ export function useImportWorkflow({ workspaceId }: UseImportWorkflowProps) {
description: workflowData.metadata?.description || 'Imported from JSON',
workspaceId,
folderId: folderId || undefined,
sortOrder,
})
const newWorkflowId = result.id
@@ -142,55 +140,6 @@ export function useImportWorkflow({ workspaceId }: UseImportWorkflowProps) {
})
const folderMap = new Map<string, string>()
if (metadata?.folders && metadata.folders.length > 0) {
type ExportedFolder = {
id: string
name: string
parentId: string | null
sortOrder?: number
}
const foldersById = new Map<string, ExportedFolder>(
metadata.folders.map((f) => [f.id, f])
)
const oldIdToNewId = new Map<string, string>()
const buildPath = (folderId: string): string => {
const pathParts: string[] = []
let currentId: string | null = folderId
while (currentId && foldersById.has(currentId)) {
const folder: ExportedFolder = foldersById.get(currentId)!
pathParts.unshift(sanitizePathSegment(folder.name))
currentId = folder.parentId
}
return pathParts.join('/')
}
const createFolderRecursive = async (folder: ExportedFolder): Promise<string> => {
if (oldIdToNewId.has(folder.id)) {
return oldIdToNewId.get(folder.id)!
}
let parentId = importFolder.id
if (folder.parentId && foldersById.has(folder.parentId)) {
parentId = await createFolderRecursive(foldersById.get(folder.parentId)!)
}
const newFolder = await createFolderMutation.mutateAsync({
name: folder.name,
workspaceId,
parentId,
sortOrder: folder.sortOrder,
})
oldIdToNewId.set(folder.id, newFolder.id)
folderMap.set(buildPath(folder.id), newFolder.id)
return newFolder.id
}
for (const folder of metadata.folders) {
await createFolderRecursive(folder)
}
}
for (const workflow of extractedWorkflows) {
try {
let targetFolderId = importFolder.id
@@ -198,17 +147,15 @@ export function useImportWorkflow({ workspaceId }: UseImportWorkflowProps) {
if (workflow.folderPath.length > 0) {
const folderPathKey = workflow.folderPath.join('/')
if (folderMap.has(folderPathKey)) {
targetFolderId = folderMap.get(folderPathKey)!
} else {
if (!folderMap.has(folderPathKey)) {
let parentId = importFolder.id
for (let i = 0; i < workflow.folderPath.length; i++) {
const pathSegment = workflow.folderPath.slice(0, i + 1).join('/')
const folderNameForSegment = workflow.folderPath[i]
if (!folderMap.has(pathSegment)) {
const subFolder = await createFolderMutation.mutateAsync({
name: folderNameForSegment,
name: workflow.folderPath[i],
workspaceId,
parentId,
})
@@ -218,15 +165,15 @@ export function useImportWorkflow({ workspaceId }: UseImportWorkflowProps) {
parentId = folderMap.get(pathSegment)!
}
}
targetFolderId = folderMap.get(folderPathKey)!
}
targetFolderId = folderMap.get(folderPathKey)!
}
const workflowId = await importSingleWorkflow(
workflow.content,
workflow.name,
targetFolderId,
workflow.sortOrder
targetFolderId
)
if (workflowId) importedWorkflowIds.push(workflowId)
} catch (error) {

View File

@@ -5,7 +5,6 @@ import {
extractWorkflowName,
extractWorkflowsFromZip,
parseWorkflowJson,
sanitizePathSegment,
} from '@/lib/workflows/operations/import-export'
import { useCreateFolder } from '@/hooks/queries/folders'
import { useWorkflowDiffStore } from '@/stores/workflow-diff/store'
@@ -60,7 +59,7 @@ export function useImportWorkspace({ onSuccess }: UseImportWorkspaceProps = {})
const createResponse = await fetch('/api/workspaces', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: workspaceName, skipDefaultWorkflow: true }),
body: JSON.stringify({ name: workspaceName }),
})
if (!createResponse.ok) {
@@ -72,55 +71,6 @@ export function useImportWorkspace({ onSuccess }: UseImportWorkspaceProps = {})
const folderMap = new Map<string, string>()
if (metadata?.folders && metadata.folders.length > 0) {
type ExportedFolder = {
id: string
name: string
parentId: string | null
sortOrder?: number
}
const foldersById = new Map<string, ExportedFolder>(
metadata.folders.map((f) => [f.id, f])
)
const oldIdToNewId = new Map<string, string>()
const buildPath = (folderId: string): string => {
const pathParts: string[] = []
let currentId: string | null = folderId
while (currentId && foldersById.has(currentId)) {
const folder: ExportedFolder = foldersById.get(currentId)!
pathParts.unshift(sanitizePathSegment(folder.name))
currentId = folder.parentId
}
return pathParts.join('/')
}
const createFolderRecursive = async (folder: ExportedFolder): Promise<string> => {
if (oldIdToNewId.has(folder.id)) {
return oldIdToNewId.get(folder.id)!
}
let parentId: string | undefined
if (folder.parentId && foldersById.has(folder.parentId)) {
parentId = await createFolderRecursive(foldersById.get(folder.parentId)!)
}
const newFolder = await createFolderMutation.mutateAsync({
name: folder.name,
workspaceId: newWorkspace.id,
parentId,
sortOrder: folder.sortOrder,
})
oldIdToNewId.set(folder.id, newFolder.id)
folderMap.set(buildPath(folder.id), newFolder.id)
return newFolder.id
}
for (const folder of metadata.folders) {
await createFolderRecursive(folder)
}
}
for (const workflow of extractedWorkflows) {
try {
const { data: workflowData, errors: parseErrors } = parseWorkflowJson(workflow.content)
@@ -134,10 +84,9 @@ export function useImportWorkspace({ onSuccess }: UseImportWorkspaceProps = {})
if (workflow.folderPath.length > 0) {
const folderPathKey = workflow.folderPath.join('/')
if (folderMap.has(folderPathKey)) {
targetFolderId = folderMap.get(folderPathKey)!
} else {
let parentId: string | undefined
if (!folderMap.has(folderPathKey)) {
let parentId: string | null = null
for (let i = 0; i < workflow.folderPath.length; i++) {
const pathSegment = workflow.folderPath.slice(0, i + 1).join('/')
@@ -145,7 +94,7 @@ export function useImportWorkspace({ onSuccess }: UseImportWorkspaceProps = {})
const subFolder = await createFolderMutation.mutateAsync({
name: workflow.folderPath[i],
workspaceId: newWorkspace.id,
parentId,
parentId: parentId || undefined,
})
folderMap.set(pathSegment, subFolder.id)
parentId = subFolder.id
@@ -153,8 +102,9 @@ export function useImportWorkspace({ onSuccess }: UseImportWorkspaceProps = {})
parentId = folderMap.get(pathSegment)!
}
}
targetFolderId = folderMap.get(folderPathKey) || null
}
targetFolderId = folderMap.get(folderPathKey) || null
}
const workflowName = extractWorkflowName(workflow.content, workflow.name)

View File

@@ -172,7 +172,7 @@ async function executeWebhookJobInternal(
const workflowVariables = (wfRows[0]?.variables as Record<string, any>) || {}
// Merge subblock states (matching workflow-execution pattern)
const mergedStates = mergeSubblockState(blocks)
const mergedStates = mergeSubblockState(blocks, {})
// Create serialized workflow
const serializer = new Serializer()

View File

@@ -10,17 +10,12 @@ import { createLogger } from '@sim/logger'
import { task } from '@trigger.dev/sdk'
import { and, eq, isNull, lte, or, sql } from 'drizzle-orm'
import { v4 as uuidv4 } from 'uuid'
import {
type EmailRateLimitsData,
type EmailUsageData,
renderWorkflowNotificationEmail,
} from '@/components/emails'
import { checkUsageStatus } from '@/lib/billing/calculations/usage-monitor'
import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription'
import { RateLimiter } from '@/lib/core/rate-limiter'
import { decryptSecret } from '@/lib/core/security/encryption'
import { getBaseUrl } from '@/lib/core/utils/urls'
import type { WorkflowExecutionLog } from '@/lib/logs/types'
import type { TraceSpan, WorkflowExecutionLog } from '@/lib/logs/types'
import { sendEmail } from '@/lib/messaging/email/mailer'
import type { AlertConfig } from '@/lib/notifications/alert-rules'
@@ -50,8 +45,9 @@ interface NotificationPayload {
totalDurationMs: number
cost?: Record<string, unknown>
finalOutput?: unknown
rateLimits?: EmailRateLimitsData
usage?: EmailUsageData
traceSpans?: unknown[]
rateLimits?: Record<string, unknown>
usage?: Record<string, unknown>
}
}
@@ -98,6 +94,10 @@ async function buildPayload(
payload.data.finalOutput = executionData.finalOutput
}
if (subscription.includeTraceSpans && executionData.traceSpans) {
payload.data.traceSpans = executionData.traceSpans as unknown[]
}
if (subscription.includeRateLimits && userId) {
try {
const userSubscription = await getHighestPrioritySubscription(userId)
@@ -251,6 +251,18 @@ function formatAlertReason(alertConfig: AlertConfig): string {
}
}
function formatJsonForEmail(data: unknown, label: string): string {
if (!data) return ''
const json = JSON.stringify(data, null, 2)
const escapedJson = json.replace(/</g, '&lt;').replace(/>/g, '&gt;')
return `
<div style="margin-top: 20px;">
<h3 style="color: #1a1a1a; font-size: 14px; margin-bottom: 8px;">${label}</h3>
<pre style="background: #f5f5f5; padding: 12px; border-radius: 6px; overflow-x: auto; font-size: 12px; color: #333; white-space: pre-wrap; word-wrap: break-word;">${escapedJson}</pre>
</div>
`
}
async function deliverEmail(
subscription: typeof workspaceNotificationSubscription.$inferSelect,
payload: NotificationPayload,
@@ -263,7 +275,8 @@ async function deliverEmail(
const isError = payload.data.status !== 'success'
const statusText = isError ? 'Error' : 'Success'
const logUrl = buildLogUrl(subscription.workspaceId, payload.data.executionId)
const alertReason = alertConfig ? formatAlertReason(alertConfig) : undefined
const baseUrl = getBaseUrl()
const alertReason = alertConfig ? formatAlertReason(alertConfig) : null
// Build subject line
const subject = alertReason
@@ -272,36 +285,113 @@ async function deliverEmail(
? `Error Alert: ${payload.data.workflowName}`
: `Workflow Completed: ${payload.data.workflowName}`
// Build plain text for fallback
let includedDataHtml = ''
let includedDataText = ''
if (payload.data.finalOutput) {
includedDataHtml += formatJsonForEmail(payload.data.finalOutput, 'Final Output')
includedDataText += `\n\nFinal Output:\n${JSON.stringify(payload.data.finalOutput, null, 2)}`
}
if (payload.data.rateLimits) {
includedDataText += `\n\nRate Limits:\n${JSON.stringify(payload.data.rateLimits, null, 2)}`
}
if (payload.data.usage) {
includedDataText += `\n\nUsage Data:\n${JSON.stringify(payload.data.usage, null, 2)}`
if (
payload.data.traceSpans &&
Array.isArray(payload.data.traceSpans) &&
payload.data.traceSpans.length > 0
) {
includedDataHtml += formatJsonForEmail(payload.data.traceSpans, 'Trace Spans')
includedDataText += `\n\nTrace Spans:\n${JSON.stringify(payload.data.traceSpans, null, 2)}`
}
// Render the email using the shared template
const html = await renderWorkflowNotificationEmail({
workflowName: payload.data.workflowName || 'Unknown Workflow',
status: payload.data.status,
trigger: payload.data.trigger,
duration: formatDuration(payload.data.totalDurationMs),
cost: formatCost(payload.data.cost),
logUrl,
alertReason,
finalOutput: payload.data.finalOutput,
rateLimits: payload.data.rateLimits,
usageData: payload.data.usage,
})
if (payload.data.rateLimits) {
includedDataHtml += formatJsonForEmail(payload.data.rateLimits, 'Rate Limits')
includedDataText += `\n\nRate Limits:\n${JSON.stringify(payload.data.rateLimits, null, 2)}`
}
if (payload.data.usage) {
includedDataHtml += formatJsonForEmail(payload.data.usage, 'Usage Data')
includedDataText += `\n\nUsage Data:\n${JSON.stringify(payload.data.usage, null, 2)}`
}
const result = await sendEmail({
to: subscription.emailRecipients,
subject,
html,
html: `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body style="background-color: #f5f5f7; font-family: HelveticaNeue, Helvetica, Arial, sans-serif; margin: 0; padding: 0;">
<div style="max-width: 580px; margin: 30px auto; background-color: #ffffff; border-radius: 5px; overflow: hidden;">
<!-- Header with Logo -->
<div style="padding: 30px 0; text-align: center;">
<img src="${baseUrl}/logo/reverse/text/medium.png" width="114" alt="Sim Studio" style="margin: 0 auto;" />
</div>
<!-- Section Border -->
<div style="display: flex; width: 100%;">
<div style="border-bottom: 1px solid #eeeeee; width: 249px;"></div>
<div style="border-bottom: 1px solid #6F3DFA; width: 102px;"></div>
<div style="border-bottom: 1px solid #eeeeee; width: 249px;"></div>
</div>
<!-- Content -->
<div style="padding: 5px 30px 20px 30px;">
<h2 style="font-size: 20px; color: #333333; margin: 20px 0;">
${alertReason ? 'Alert Triggered' : isError ? 'Workflow Execution Failed' : 'Workflow Execution Completed'}
</h2>
${alertReason ? `<p style="color: #d97706; background: #fef3c7; padding: 12px; border-radius: 6px; margin-bottom: 20px; font-size: 14px;"><strong>Reason:</strong> ${alertReason}</p>` : ''}
<table style="width: 100%; border-collapse: collapse; margin-bottom: 20px;">
<tr style="border-bottom: 1px solid #eee;">
<td style="padding: 12px 0; color: #666; width: 140px;">Workflow</td>
<td style="padding: 12px 0; color: #333; font-weight: 500;">${payload.data.workflowName}</td>
</tr>
<tr style="border-bottom: 1px solid #eee;">
<td style="padding: 12px 0; color: #666;">Status</td>
<td style="padding: 12px 0; color: ${isError ? '#ef4444' : '#22c55e'}; font-weight: 500;">${statusText}</td>
</tr>
<tr style="border-bottom: 1px solid #eee;">
<td style="padding: 12px 0; color: #666;">Trigger</td>
<td style="padding: 12px 0; color: #333;">${payload.data.trigger}</td>
</tr>
<tr style="border-bottom: 1px solid #eee;">
<td style="padding: 12px 0; color: #666;">Duration</td>
<td style="padding: 12px 0; color: #333;">${formatDuration(payload.data.totalDurationMs)}</td>
</tr>
<tr style="border-bottom: 1px solid #eee;">
<td style="padding: 12px 0; color: #666;">Cost</td>
<td style="padding: 12px 0; color: #333;">${formatCost(payload.data.cost)}</td>
</tr>
</table>
<a href="${logUrl}" style="display: inline-block; background-color: #6F3DFA; color: #ffffff; font-weight: bold; font-size: 16px; padding: 12px 30px; border-radius: 5px; text-decoration: none; text-align: center; margin: 20px 0;">
View Execution Log →
</a>
${includedDataHtml}
<p style="font-size: 16px; line-height: 1.5; color: #333333; margin-top: 30px;">
Best regards,<br />
The Sim Team
</p>
</div>
</div>
<!-- Footer -->
<div style="max-width: 580px; margin: 0 auto; padding: 20px 0; text-align: center;">
<p style="font-size: 12px; color: #706a7b; margin: 8px 0 0 0;">
© ${new Date().getFullYear()} Sim Studio, All Rights Reserved
</p>
<p style="font-size: 12px; color: #706a7b; margin: 8px 0 0 0;">
<a href="${baseUrl}/privacy" style="color: #706a7b; text-decoration: underline;">Privacy Policy</a> •
<a href="${baseUrl}/terms" style="color: #706a7b; text-decoration: underline;">Terms of Service</a>
</p>
</div>
</body>
</html>
`,
text: `${subject}\n${alertReason ? `\nReason: ${alertReason}\n` : ''}\nWorkflow: ${payload.data.workflowName}\nStatus: ${statusText}\nTrigger: ${payload.data.trigger}\nDuration: ${formatDuration(payload.data.totalDurationMs)}\nCost: ${formatCost(payload.data.cost)}\n\nView Log: ${logUrl}${includedDataText}`,
emailType: 'notifications',
})
@@ -389,6 +479,26 @@ async function deliverSlack(
})
}
if (
payload.data.traceSpans &&
Array.isArray(payload.data.traceSpans) &&
payload.data.traceSpans.length > 0
) {
const spansSummary = (payload.data.traceSpans as TraceSpan[])
.map((span) => {
const status = span.status === 'success' ? '✓' : '✗'
return `${status} ${span.name || 'Unknown'} (${formatDuration(span.duration || 0)})`
})
.join('\n')
blocks.push({
type: 'section',
text: {
type: 'mrkdwn',
text: `*Trace Spans:*\n\`\`\`${spansSummary}\`\`\``,
},
})
}
if (payload.data.rateLimits) {
const limitsStr = JSON.stringify(payload.data.rateLimits, null, 2)
blocks.push({

View File

@@ -1,298 +0,0 @@
import { LangsmithIcon } from '@/components/icons'
import { AuthMode, type BlockConfig } from '@/blocks/types'
import type { LangsmithResponse } from '@/tools/langsmith/types'
export const LangsmithBlock: BlockConfig<LangsmithResponse> = {
type: 'langsmith',
name: 'LangSmith',
description: 'Forward workflow runs to LangSmith for observability',
longDescription:
'Send run data to LangSmith to trace executions, attach metadata, and monitor workflow performance.',
docsLink: 'https://docs.sim.ai/tools/langsmith',
category: 'tools',
bgColor: '#181C1E',
icon: LangsmithIcon,
authMode: AuthMode.ApiKey,
subBlocks: [
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
options: [
{ label: 'Create Run', id: 'langsmith_create_run' },
{ label: 'Create Runs Batch', id: 'langsmith_create_runs_batch' },
],
value: () => 'langsmith_create_run',
},
{
id: 'apiKey',
title: 'API Key',
type: 'short-input',
placeholder: 'Enter your LangSmith API key',
password: true,
required: true,
},
{
id: 'id',
title: 'Run ID',
type: 'short-input',
placeholder: 'Auto-generated if blank',
condition: { field: 'operation', value: 'langsmith_create_run' },
},
{
id: 'name',
title: 'Name',
type: 'short-input',
placeholder: 'Run name',
required: { field: 'operation', value: 'langsmith_create_run' },
condition: { field: 'operation', value: 'langsmith_create_run' },
},
{
id: 'run_type',
title: 'Run Type',
type: 'dropdown',
options: [
{ label: 'Chain', id: 'chain' },
{ label: 'Tool', id: 'tool' },
{ label: 'LLM', id: 'llm' },
{ label: 'Retriever', id: 'retriever' },
{ label: 'Embedding', id: 'embedding' },
{ label: 'Prompt', id: 'prompt' },
{ label: 'Parser', id: 'parser' },
],
value: () => 'chain',
required: { field: 'operation', value: 'langsmith_create_run' },
condition: { field: 'operation', value: 'langsmith_create_run' },
},
{
id: 'start_time',
title: 'Start Time',
type: 'short-input',
placeholder: 'e.g. 2025-01-01T12:00:00Z (defaults to now)',
condition: { field: 'operation', value: 'langsmith_create_run' },
},
{
id: 'end_time',
title: 'End Time',
type: 'short-input',
placeholder: '2025-01-01T12:00:30Z',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'inputs',
title: 'Inputs',
type: 'code',
placeholder: '{"input":"value"}',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'outputs',
title: 'Outputs',
type: 'code',
placeholder: '{"output":"value"}',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'extra',
title: 'Metadata',
type: 'code',
placeholder: '{"ls_model":"gpt-4"}',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'tags',
title: 'Tags',
type: 'code',
placeholder: '["production","workflow"]',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'parent_run_id',
title: 'Parent Run ID',
type: 'short-input',
placeholder: 'Parent run identifier',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'trace_id',
title: 'Trace ID',
type: 'short-input',
placeholder: 'Auto-generated if blank',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'session_id',
title: 'Session ID',
type: 'short-input',
placeholder: 'Session identifier',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'session_name',
title: 'Session Name',
type: 'short-input',
placeholder: 'Session name',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'status',
title: 'Status',
type: 'short-input',
placeholder: 'success',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'error',
title: 'Error',
type: 'long-input',
placeholder: 'Error message',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'dotted_order',
title: 'Dotted Order',
type: 'short-input',
placeholder: 'Defaults to <YYYYMMDDTHHMMSSffffff>Z<id>',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'events',
title: 'Events',
type: 'code',
placeholder: '[{"event":"token","value":1}]',
condition: { field: 'operation', value: 'langsmith_create_run' },
mode: 'advanced',
},
{
id: 'post',
title: 'Post Runs',
type: 'code',
placeholder: '[{"id":"...","name":"...","run_type":"chain","start_time":"..."}]',
condition: { field: 'operation', value: 'langsmith_create_runs_batch' },
wandConfig: {
enabled: true,
generationType: 'json-object',
prompt: `Output ONLY a JSON array with a single LangSmith run object. No explanation.
Required: name (string), run_type ("tool"|"chain"|"llm"|"retriever"|"embedding"|"prompt"|"parser")
Optional: inputs, outputs, tags, extra, session_name, end_time
Fields id, trace_id, dotted_order, start_time are auto-generated if omitted.`,
},
},
{
id: 'patch',
title: 'Patch Runs',
type: 'code',
placeholder: '[{"id":"...","name":"...","run_type":"chain","start_time":"..."}]',
condition: { field: 'operation', value: 'langsmith_create_runs_batch' },
mode: 'advanced',
wandConfig: {
enabled: true,
generationType: 'json-object',
prompt: `Output ONLY a JSON array with a single LangSmith run object to update. No explanation.
Required: id (existing run UUID), name, run_type ("tool"|"chain"|"llm"|"retriever"|"embedding"|"prompt"|"parser")
Common patch fields: outputs, end_time, status, error`,
},
},
],
tools: {
access: ['langsmith_create_run', 'langsmith_create_runs_batch'],
config: {
tool: (params) => params.operation,
params: (params) => {
const parseJsonValue = (value: unknown, label: string) => {
if (value === undefined || value === null || value === '') {
return undefined
}
if (typeof value === 'string') {
try {
return JSON.parse(value)
} catch (error) {
throw new Error(
`Invalid JSON for ${label}: ${error instanceof Error ? error.message : String(error)}`
)
}
}
return value
}
if (params.operation === 'langsmith_create_runs_batch') {
const post = parseJsonValue(params.post, 'post runs')
const patch = parseJsonValue(params.patch, 'patch runs')
if (!post && !patch) {
throw new Error('Provide at least one of post or patch runs')
}
return {
apiKey: params.apiKey,
post,
patch,
}
}
return {
apiKey: params.apiKey,
id: params.id,
name: params.name,
run_type: params.run_type,
start_time: params.start_time,
end_time: params.end_time,
inputs: parseJsonValue(params.inputs, 'inputs'),
run_outputs: parseJsonValue(params.outputs, 'outputs'),
extra: parseJsonValue(params.extra, 'metadata'),
tags: parseJsonValue(params.tags, 'tags'),
parent_run_id: params.parent_run_id,
trace_id: params.trace_id,
session_id: params.session_id,
session_name: params.session_name,
status: params.status,
error: params.error,
dotted_order: params.dotted_order,
events: parseJsonValue(params.events, 'events'),
}
},
},
},
inputs: {
operation: { type: 'string', description: 'Operation to perform' },
apiKey: { type: 'string', description: 'LangSmith API key' },
id: { type: 'string', description: 'Run identifier' },
name: { type: 'string', description: 'Run name' },
run_type: { type: 'string', description: 'Run type' },
start_time: { type: 'string', description: 'Run start time (ISO)' },
end_time: { type: 'string', description: 'Run end time (ISO)' },
inputs: { type: 'json', description: 'Run inputs payload' },
outputs: { type: 'json', description: 'Run outputs payload' },
extra: { type: 'json', description: 'Additional metadata (extra)' },
tags: { type: 'json', description: 'Tags array' },
parent_run_id: { type: 'string', description: 'Parent run ID' },
trace_id: { type: 'string', description: 'Trace ID' },
session_id: { type: 'string', description: 'Session ID' },
session_name: { type: 'string', description: 'Session name' },
status: { type: 'string', description: 'Run status' },
error: { type: 'string', description: 'Error message' },
dotted_order: { type: 'string', description: 'Dotted order string' },
events: { type: 'json', description: 'Events array' },
post: { type: 'json', description: 'Runs to ingest in batch' },
patch: { type: 'json', description: 'Runs to update in batch' },
},
outputs: {
accepted: { type: 'boolean', description: 'Whether ingestion was accepted' },
runId: { type: 'string', description: 'Run ID for single run' },
runIds: { type: 'array', description: 'Run IDs for batch ingest' },
message: { type: 'string', description: 'LangSmith response message' },
messages: { type: 'array', description: 'Per-run response messages' },
},
}

View File

@@ -61,7 +61,6 @@ import { JiraBlock } from '@/blocks/blocks/jira'
import { JiraServiceManagementBlock } from '@/blocks/blocks/jira_service_management'
import { KalshiBlock } from '@/blocks/blocks/kalshi'
import { KnowledgeBlock } from '@/blocks/blocks/knowledge'
import { LangsmithBlock } from '@/blocks/blocks/langsmith'
import { LemlistBlock } from '@/blocks/blocks/lemlist'
import { LinearBlock } from '@/blocks/blocks/linear'
import { LinkedInBlock } from '@/blocks/blocks/linkedin'
@@ -218,7 +217,6 @@ export const registry: Record<string, BlockConfig> = {
jira_service_management: JiraServiceManagementBlock,
kalshi: KalshiBlock,
knowledge: KnowledgeBlock,
langsmith: LangsmithBlock,
lemlist: LemlistBlock,
linear: LinearBlock,
linkedin: LinkedInBlock,

View File

@@ -173,17 +173,6 @@ export const baseStyles = {
margin: 0,
},
/** Code block text (for JSON/code display) */
codeBlock: {
fontSize: typography.fontSize.caption,
lineHeight: typography.lineHeight.caption,
color: colors.textSecondary,
fontFamily: 'monospace',
whiteSpace: 'pre-wrap' as const,
wordWrap: 'break-word' as const,
margin: 0,
},
/** Highlighted info box (e.g., "What you get with Pro") */
infoBox: {
backgroundColor: colors.bgOuter,

View File

@@ -61,7 +61,7 @@ export function EmailFooter({ baseUrl = getBaseUrl(), unsubscribe, messageId }:
<tbody>
<tr>
<td align='left' style={{ padding: '0 8px 0 0' }}>
<Link href={`${baseUrl}/x`} rel='noopener noreferrer'>
<Link href='https://x.com/simdotai' rel='noopener noreferrer'>
<Img
src={`${baseUrl}/static/x-icon.png`}
width='20'
@@ -71,7 +71,7 @@ export function EmailFooter({ baseUrl = getBaseUrl(), unsubscribe, messageId }:
</Link>
</td>
<td align='left' style={{ padding: '0 8px' }}>
<Link href={`${baseUrl}/discord`} rel='noopener noreferrer'>
<Link href='https://discord.gg/Hr4UWYEcTT' rel='noopener noreferrer'>
<Img
src={`${baseUrl}/static/discord-icon.png`}
width='20'
@@ -81,7 +81,7 @@ export function EmailFooter({ baseUrl = getBaseUrl(), unsubscribe, messageId }:
</Link>
</td>
<td align='left' style={{ padding: '0 8px' }}>
<Link href={`${baseUrl}/github`} rel='noopener noreferrer'>
<Link href='https://github.com/simstudioai/sim' rel='noopener noreferrer'>
<Img
src={`${baseUrl}/static/github-icon.png`}
width='20'

Some files were not shown because too many files have changed in this diff Show More