Compare commits

..

13 Commits

Author SHA1 Message Date
Vikhyath Mondreti
3d320e50cf address greptile comments 2026-01-12 21:42:56 -08:00
Vikhyath Mondreti
5449aac183 more details 2026-01-12 21:31:13 -08:00
Vikhyath Mondreti
be92f52a8a add more details to skill 2026-01-12 21:30:19 -08:00
Vikhyath Mondreti
709dfcc0fa fix tools 2026-01-12 21:27:51 -08:00
Vikhyath Mondreti
454e53e75b fix tests 2026-01-12 20:47:41 -08:00
Vikhyath Mondreti
981370af44 feat(integrations): claude skills to add integrations, lemlist trigger + tools, remove test webhook url 2026-01-12 20:46:15 -08:00
Vikhyath Mondreti
b6cbee2464 improvement(block-outputs): display metadata properties destructured (#2772)
* improvement(block-outputs):display metadata properties destructured

* add back icons

* fix google calendar

* reuse versioned tool selector

* fix null fields

* github optionality

* fix notion

* review stripe tools metadata

* fix optional tools + types

* fix docs type

* add db row tool + fix copilot versioning recognition
2026-01-12 18:36:21 -08:00
Vikhyath Mondreti
91ed5338cb improvement(byok): make available for all plans (#2782)
* improvement(byok): make available for all plans

* update docs

* address greptile comments
2026-01-12 17:23:47 -08:00
Siddharth Ganesan
d55072a45f feat(copilot): add context7 (#2779)
* Add context7

* Fix edit diff block ring color

* Remove server side impl

* Fix duplicated message on edit old message

* Tables in markdown
2026-01-12 17:08:47 -08:00
Waleed
684ad5aeec feat(tool): added introspection tools for all db integrations (#2780)
* feat(tool): added introspection tools for all db integrations

* added sanitization for sql schema

* ack pr comments, with clarifying comments

* moved util
2026-01-12 13:30:55 -08:00
Waleed
a3dff1027f feat(tools): added workflow tools to agent tools dropdown for discoverability, enforce perms on client for redeploying via the agent (#2778)
* feat(tools): added workflow tools to agent tools dropdown for discoverability, enforce perms on client for redeploying via the agent

* added perms enforcement to workflow block header as well
2026-01-12 11:54:01 -08:00
Waleed
0aec9ef571 feat(export): added the ability to export workflow (#2777)
* feat(export): added the ability to export workflow

* improvement(import): loading animation

* fixed flicker on importing multiple workflows

* ack pr comments

* standardized import/export hooks

* upgraded turborepo

* cleaned up

---------

Co-authored-by: Emir Karabeg <emirkarabeg@berkeley.edu>
2026-01-12 11:25:00 -08:00
Waleed
cb4db20a5f fix(color-picker): confirm color change before updating workflow color (#2776) 2026-01-11 18:47:48 -08:00
679 changed files with 18564 additions and 7245 deletions

View File

@@ -0,0 +1,591 @@
---
description: Create a block configuration for a Sim Studio integration with proper subBlocks, conditions, and tool wiring
argument-hint: <service-name>
---
# Add Block Skill
You are an expert at creating block configurations for Sim Studio. You understand the serializer, subBlock types, conditions, dependsOn, modes, and all UI patterns.
## Your Task
When the user asks you to create a block:
1. Create the block file in `apps/sim/blocks/blocks/{service}.ts`
2. Configure all subBlocks with proper types, conditions, and dependencies
3. Wire up tools correctly
## Block Configuration Structure
```typescript
import { {ServiceName}Icon } from '@/components/icons'
import type { BlockConfig } from '@/blocks/types'
import { AuthMode } from '@/blocks/types'
export const {ServiceName}Block: BlockConfig = {
type: '{service}', // snake_case identifier
name: '{Service Name}', // Human readable
description: 'Brief description', // One sentence
longDescription: 'Detailed description for docs',
docsLink: 'https://docs.sim.ai/tools/{service}',
category: 'tools', // 'tools' | 'blocks' | 'triggers'
bgColor: '#HEXCOLOR', // Brand color
icon: {ServiceName}Icon,
// Auth mode
authMode: AuthMode.OAuth, // or AuthMode.ApiKey
subBlocks: [
// Define all UI fields here
],
tools: {
access: ['tool_id_1', 'tool_id_2'], // Array of tool IDs this block can use
config: {
tool: (params) => `{service}_${params.operation}`, // Tool selector function
params: (params) => ({
// Transform subBlock values to tool params
}),
},
},
inputs: {
// Optional: define expected inputs from other blocks
},
outputs: {
// Define outputs available to downstream blocks
},
}
```
## SubBlock Types Reference
**Critical:** Every subblock `id` must be unique within the block. Duplicate IDs cause conflicts even with different conditions.
### Text Inputs
```typescript
// Single-line input
{ id: 'field', title: 'Label', type: 'short-input', placeholder: '...' }
// Multi-line input
{ id: 'field', title: 'Label', type: 'long-input', placeholder: '...', rows: 6 }
// Password input
{ id: 'apiKey', title: 'API Key', type: 'short-input', password: true }
```
### Selection Inputs
```typescript
// Dropdown (static options)
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
options: [
{ label: 'Create', id: 'create' },
{ label: 'Update', id: 'update' },
],
value: () => 'create', // Default value function
}
// Combobox (searchable dropdown)
{
id: 'field',
title: 'Label',
type: 'combobox',
options: [...],
searchable: true,
}
```
### Code/JSON Inputs
```typescript
{
id: 'code',
title: 'Code',
type: 'code',
language: 'javascript', // 'javascript' | 'json' | 'python'
placeholder: '// Enter code...',
}
```
### OAuth/Credentials
```typescript
{
id: 'credential',
title: 'Account',
type: 'oauth-input',
serviceId: '{service}', // Must match OAuth provider
placeholder: 'Select account',
required: true,
}
```
### Selectors (with dynamic options)
```typescript
// Channel selector (Slack, Discord, etc.)
{
id: 'channel',
title: 'Channel',
type: 'channel-selector',
serviceId: '{service}',
placeholder: 'Select channel',
dependsOn: ['credential'],
}
// Project selector (Jira, etc.)
{
id: 'project',
title: 'Project',
type: 'project-selector',
serviceId: '{service}',
dependsOn: ['credential'],
}
// File selector (Google Drive, etc.)
{
id: 'file',
title: 'File',
type: 'file-selector',
serviceId: '{service}',
mimeType: 'application/pdf',
dependsOn: ['credential'],
}
// User selector
{
id: 'user',
title: 'User',
type: 'user-selector',
serviceId: '{service}',
dependsOn: ['credential'],
}
```
### Other Types
```typescript
// Switch/toggle
{ id: 'enabled', type: 'switch' }
// Slider
{ id: 'temperature', title: 'Temperature', type: 'slider', min: 0, max: 2, step: 0.1 }
// Table (key-value pairs)
{ id: 'headers', title: 'Headers', type: 'table', columns: ['Key', 'Value'] }
// File upload
{
id: 'files',
title: 'Attachments',
type: 'file-upload',
multiple: true,
acceptedTypes: 'image/*,application/pdf',
}
```
## Condition Syntax
Controls when a field is shown based on other field values.
### Simple Condition
```typescript
condition: { field: 'operation', value: 'create' }
// Shows when operation === 'create'
```
### Multiple Values (OR)
```typescript
condition: { field: 'operation', value: ['create', 'update'] }
// Shows when operation is 'create' OR 'update'
```
### Negation
```typescript
condition: { field: 'operation', value: 'delete', not: true }
// Shows when operation !== 'delete'
```
### Compound (AND)
```typescript
condition: {
field: 'operation',
value: 'send',
and: {
field: 'type',
value: 'dm',
not: true,
}
}
// Shows when operation === 'send' AND type !== 'dm'
```
### Complex Example
```typescript
condition: {
field: 'operation',
value: ['list', 'search'],
not: true,
and: {
field: 'authMethod',
value: 'oauth',
}
}
// Shows when operation NOT in ['list', 'search'] AND authMethod === 'oauth'
```
## DependsOn Pattern
Controls when a field is enabled and when its options are refetched.
### Simple Array (all must be set)
```typescript
dependsOn: ['credential']
// Enabled only when credential has a value
// Options refetch when credential changes
dependsOn: ['credential', 'projectId']
// Enabled only when BOTH have values
```
### Complex (all + any)
```typescript
dependsOn: {
all: ['authMethod'], // All must be set
any: ['credential', 'apiKey'] // At least one must be set
}
// Enabled when authMethod is set AND (credential OR apiKey is set)
```
## Required Pattern
Can be boolean or condition-based.
### Simple Boolean
```typescript
required: true
required: false
```
### Conditional Required
```typescript
required: { field: 'operation', value: 'create' }
// Required only when operation === 'create'
required: { field: 'operation', value: ['create', 'update'] }
// Required when operation is 'create' OR 'update'
```
## Mode Pattern (Basic vs Advanced)
Controls which UI view shows the field.
### Mode Options
- `'basic'` - Only in basic view (default UI)
- `'advanced'` - Only in advanced view
- `'both'` - Both views (default if not specified)
- `'trigger'` - Only in trigger configuration
### canonicalParamId Pattern
Maps multiple UI fields to a single serialized parameter:
```typescript
// Basic mode: Visual selector
{
id: 'channel',
title: 'Channel',
type: 'channel-selector',
mode: 'basic',
canonicalParamId: 'channel', // Both map to 'channel' param
dependsOn: ['credential'],
}
// Advanced mode: Manual input
{
id: 'channelId',
title: 'Channel ID',
type: 'short-input',
mode: 'advanced',
canonicalParamId: 'channel', // Both map to 'channel' param
placeholder: 'Enter channel ID manually',
}
```
**How it works:**
- In basic mode: `channel` selector value → `params.channel`
- In advanced mode: `channelId` input value → `params.channel`
- The serializer consolidates based on current mode
**Critical constraints:**
- `canonicalParamId` must NOT match any other subblock's `id` in the same block (causes conflicts)
- `canonicalParamId` must be unique per block (only one basic/advanced pair per canonicalParamId)
- ONLY use `canonicalParamId` to link basic/advanced mode alternatives for the same logical parameter
- Do NOT use it for any other purpose
## WandConfig Pattern
Enables AI-assisted field generation.
```typescript
{
id: 'query',
title: 'Query',
type: 'code',
language: 'json',
wandConfig: {
enabled: true,
prompt: 'Generate a query based on the user request. Return ONLY the JSON.',
placeholder: 'Describe what you want to query...',
generationType: 'json-object', // Optional: affects AI behavior
maintainHistory: true, // Optional: keeps conversation context
},
}
```
### Generation Types
- `'javascript-function-body'` - JS code generation
- `'json-object'` - Raw JSON (adds "no markdown" instruction)
- `'json-schema'` - JSON Schema definitions
- `'sql-query'` - SQL statements
- `'timestamp'` - Adds current date/time context
## Tools Configuration
### Simple Tool Selector
```typescript
tools: {
access: ['service_create', 'service_read', 'service_update'],
config: {
tool: (params) => `service_${params.operation}`,
},
}
```
### With Parameter Transformation
```typescript
tools: {
access: ['service_action'],
config: {
tool: (params) => 'service_action',
params: (params) => ({
id: params.resourceId,
data: typeof params.data === 'string' ? JSON.parse(params.data) : params.data,
}),
},
}
```
### V2 Versioned Tool Selector
```typescript
import { createVersionedToolSelector } from '@/blocks/utils'
tools: {
access: [
'service_create_v2',
'service_read_v2',
'service_update_v2',
],
config: {
tool: createVersionedToolSelector({
baseToolSelector: (params) => `service_${params.operation}`,
suffix: '_v2',
fallbackToolId: 'service_create_v2',
}),
},
}
```
## Outputs Definition
**IMPORTANT:** Block outputs have a simpler schema than tool outputs. Block outputs do NOT support:
- `optional: true` - This is only for tool outputs
- `items` property - This is only for tool outputs with array types
Block outputs only support:
- `type` - The data type ('string', 'number', 'boolean', 'json', 'array')
- `description` - Human readable description
- Nested object structure (for complex types)
```typescript
outputs: {
// Simple outputs
id: { type: 'string', description: 'Resource ID' },
success: { type: 'boolean', description: 'Whether operation succeeded' },
// Use type: 'json' for complex objects or arrays (NOT type: 'array' with items)
items: { type: 'json', description: 'List of items' },
metadata: { type: 'json', description: 'Response metadata' },
// Nested outputs (for structured data)
user: {
id: { type: 'string', description: 'User ID' },
name: { type: 'string', description: 'User name' },
email: { type: 'string', description: 'User email' },
},
}
```
## V2 Block Pattern
When creating V2 blocks (alongside legacy V1):
```typescript
// V1 Block - mark as legacy
export const ServiceBlock: BlockConfig = {
type: 'service',
name: 'Service (Legacy)',
hideFromToolbar: true, // Hide from toolbar
// ... rest of config
}
// V2 Block - visible, uses V2 tools
export const ServiceV2Block: BlockConfig = {
type: 'service_v2',
name: 'Service', // Clean name
hideFromToolbar: false, // Visible
subBlocks: ServiceBlock.subBlocks, // Reuse UI
tools: {
access: ServiceBlock.tools?.access?.map(id => `${id}_v2`) || [],
config: {
tool: createVersionedToolSelector({
baseToolSelector: (params) => (ServiceBlock.tools?.config as any)?.tool(params),
suffix: '_v2',
fallbackToolId: 'service_default_v2',
}),
params: ServiceBlock.tools?.config?.params,
},
},
outputs: {
// Flat, API-aligned outputs (not wrapped in content/metadata)
},
}
```
## Registering Blocks
After creating the block, remind the user to:
1. Import in `apps/sim/blocks/registry.ts`
2. Add to the `registry` object (alphabetically):
```typescript
import { ServiceBlock } from '@/blocks/blocks/service'
export const registry: Record<string, BlockConfig> = {
// ... existing blocks ...
service: ServiceBlock,
}
```
## Complete Example
```typescript
import { ServiceIcon } from '@/components/icons'
import type { BlockConfig } from '@/blocks/types'
import { AuthMode } from '@/blocks/types'
export const ServiceBlock: BlockConfig = {
type: 'service',
name: 'Service',
description: 'Integrate with Service API',
longDescription: 'Full description for documentation...',
docsLink: 'https://docs.sim.ai/tools/service',
category: 'tools',
bgColor: '#FF6B6B',
icon: ServiceIcon,
authMode: AuthMode.OAuth,
subBlocks: [
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
options: [
{ label: 'Create', id: 'create' },
{ label: 'Read', id: 'read' },
{ label: 'Update', id: 'update' },
{ label: 'Delete', id: 'delete' },
],
value: () => 'create',
},
{
id: 'credential',
title: 'Service Account',
type: 'oauth-input',
serviceId: 'service',
placeholder: 'Select account',
required: true,
},
{
id: 'resourceId',
title: 'Resource ID',
type: 'short-input',
placeholder: 'Enter resource ID',
condition: { field: 'operation', value: ['read', 'update', 'delete'] },
required: { field: 'operation', value: ['read', 'update', 'delete'] },
},
{
id: 'name',
title: 'Name',
type: 'short-input',
placeholder: 'Resource name',
condition: { field: 'operation', value: ['create', 'update'] },
required: { field: 'operation', value: 'create' },
},
],
tools: {
access: ['service_create', 'service_read', 'service_update', 'service_delete'],
config: {
tool: (params) => `service_${params.operation}`,
},
},
outputs: {
id: { type: 'string', description: 'Resource ID' },
name: { type: 'string', description: 'Resource name' },
createdAt: { type: 'string', description: 'Creation timestamp' },
},
}
```
## Connecting Blocks with Triggers
If the service supports webhooks, connect the block to its triggers.
```typescript
import { getTrigger } from '@/triggers'
export const ServiceBlock: BlockConfig = {
// ... basic config ...
triggers: {
enabled: true,
available: ['service_event_a', 'service_event_b', 'service_webhook'],
},
subBlocks: [
// Tool subBlocks first...
{ id: 'operation', /* ... */ },
// Then spread trigger subBlocks
...getTrigger('service_event_a').subBlocks,
...getTrigger('service_event_b').subBlocks,
...getTrigger('service_webhook').subBlocks,
],
}
```
See the `/add-trigger` skill for creating triggers.
## Checklist Before Finishing
- [ ] All subBlocks have `id`, `title` (except switch), and `type`
- [ ] Conditions use correct syntax (field, value, not, and)
- [ ] DependsOn set for fields that need other values
- [ ] Required fields marked correctly (boolean or condition)
- [ ] OAuth inputs have correct `serviceId`
- [ ] Tools.access lists all tool IDs
- [ ] Tools.config.tool returns correct tool ID
- [ ] Outputs match tool outputs
- [ ] Block registered in registry.ts
- [ ] If triggers exist: `triggers` config set, trigger subBlocks spread

View File

@@ -0,0 +1,450 @@
---
description: Add a complete integration to Sim Studio (tools, block, icon, registration)
argument-hint: <service-name> [api-docs-url]
---
# Add Integration Skill
You are an expert at adding complete integrations to Sim Studio. This skill orchestrates the full process of adding a new service integration.
## Overview
Adding an integration involves these steps in order:
1. **Research** - Read the service's API documentation
2. **Create Tools** - Build tool configurations for each API operation
3. **Create Block** - Build the block UI configuration
4. **Add Icon** - Add the service's brand icon
5. **Create Triggers** (optional) - If the service supports webhooks
6. **Register** - Register tools, block, and triggers in their registries
7. **Generate Docs** - Run the docs generation script
## Step 1: Research the API
Before writing any code:
1. Use Context7 to find official documentation: `mcp__plugin_context7_context7__resolve-library-id`
2. Or use WebFetch to read API docs directly
3. Identify:
- Authentication method (OAuth, API Key, both)
- Available operations (CRUD, search, etc.)
- Required vs optional parameters
- Response structures
## Step 2: Create Tools
### Directory Structure
```
apps/sim/tools/{service}/
├── index.ts # Barrel exports
├── types.ts # TypeScript interfaces
├── {action1}.ts # Tool for action 1
├── {action2}.ts # Tool for action 2
└── ...
```
### Key Patterns
**types.ts:**
```typescript
import type { ToolResponse } from '@/tools/types'
export interface {Service}{Action}Params {
accessToken: string // For OAuth services
// OR
apiKey: string // For API key services
requiredParam: string
optionalParam?: string
}
export interface {Service}Response extends ToolResponse {
output: {
// Define output structure
}
}
```
**Tool file pattern:**
```typescript
export const {service}{Action}Tool: ToolConfig<Params, Response> = {
id: '{service}_{action}',
name: '{Service} {Action}',
description: '...',
version: '1.0.0',
oauth: { required: true, provider: '{service}' }, // If OAuth
params: {
accessToken: { type: 'string', required: true, visibility: 'hidden', description: '...' },
// ... other params
},
request: { url, method, headers, body },
transformResponse: async (response) => {
const data = await response.json()
return {
success: true,
output: {
field: data.field ?? null, // Always handle nullables
},
}
},
outputs: { /* ... */ },
}
```
### Critical Rules
- `visibility: 'hidden'` for OAuth tokens
- `visibility: 'user-only'` for API keys and user credentials
- `visibility: 'user-or-llm'` for operation parameters
- Always use `?? null` for nullable API response fields
- Always use `?? []` for optional array fields
- Set `optional: true` for outputs that may not exist
- Never output raw JSON dumps - extract meaningful fields
## Step 3: Create Block
### File Location
`apps/sim/blocks/blocks/{service}.ts`
### Block Structure
```typescript
import { {Service}Icon } from '@/components/icons'
import type { BlockConfig } from '@/blocks/types'
import { AuthMode } from '@/blocks/types'
export const {Service}Block: BlockConfig = {
type: '{service}',
name: '{Service}',
description: '...',
longDescription: '...',
docsLink: 'https://docs.sim.ai/tools/{service}',
category: 'tools',
bgColor: '#HEXCOLOR',
icon: {Service}Icon,
authMode: AuthMode.OAuth, // or AuthMode.ApiKey
subBlocks: [
// Operation dropdown
{
id: 'operation',
title: 'Operation',
type: 'dropdown',
options: [
{ label: 'Operation 1', id: 'action1' },
{ label: 'Operation 2', id: 'action2' },
],
value: () => 'action1',
},
// Credential field
{
id: 'credential',
title: '{Service} Account',
type: 'oauth-input',
serviceId: '{service}',
required: true,
},
// Conditional fields per operation
// ...
],
tools: {
access: ['{service}_action1', '{service}_action2'],
config: {
tool: (params) => `{service}_${params.operation}`,
},
},
outputs: { /* ... */ },
}
```
### Key SubBlock Patterns
**Condition-based visibility:**
```typescript
{
id: 'resourceId',
title: 'Resource ID',
type: 'short-input',
condition: { field: 'operation', value: ['read', 'update', 'delete'] },
required: { field: 'operation', value: ['read', 'update', 'delete'] },
}
```
**DependsOn for cascading selectors:**
```typescript
{
id: 'project',
type: 'project-selector',
dependsOn: ['credential'],
},
{
id: 'issue',
type: 'file-selector',
dependsOn: ['credential', 'project'],
}
```
**Basic/Advanced mode for dual UX:**
```typescript
// Basic: Visual selector
{
id: 'channel',
type: 'channel-selector',
mode: 'basic',
canonicalParamId: 'channel',
dependsOn: ['credential'],
},
// Advanced: Manual input
{
id: 'channelId',
type: 'short-input',
mode: 'advanced',
canonicalParamId: 'channel',
}
```
**Critical:**
- `canonicalParamId` must NOT match any other subblock's `id`, must be unique per block, and should only be used to link basic/advanced alternatives for the same parameter.
- `mode` only controls UI visibility, NOT serialization. Without `canonicalParamId`, both basic and advanced field values would be sent.
- Every subblock `id` must be unique within the block. Duplicate IDs cause conflicts even with different conditions.
## Step 4: Add Icon
### File Location
`apps/sim/components/icons.tsx`
### Pattern
```typescript
export function {Service}Icon(props: SVGProps<SVGSVGElement>) {
return (
<svg
{...props}
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
{/* SVG paths from brand assets */}
</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)
If the service supports webhooks, create triggers using the generic `buildTriggerSubBlocks` helper.
### Directory Structure
```
apps/sim/triggers/{service}/
├── index.ts # Barrel exports
├── utils.ts # Trigger options, setup instructions, extra fields
├── {event_a}.ts # Primary trigger (includes dropdown)
├── {event_b}.ts # Secondary triggers (no dropdown)
└── webhook.ts # Generic webhook (optional)
```
### Key Pattern
```typescript
import { buildTriggerSubBlocks } from '@/triggers'
import { {service}TriggerOptions, {service}SetupInstructions, build{Service}ExtraFields } from './utils'
// Primary trigger - includeDropdown: true
export const {service}EventATrigger: TriggerConfig = {
id: '{service}_event_a',
subBlocks: buildTriggerSubBlocks({
triggerId: '{service}_event_a',
triggerOptions: {service}TriggerOptions,
includeDropdown: true, // Only for primary trigger!
setupInstructions: {service}SetupInstructions('Event A'),
extraFields: build{Service}ExtraFields('{service}_event_a'),
}),
// ...
}
// Secondary triggers - no dropdown
export const {service}EventBTrigger: TriggerConfig = {
id: '{service}_event_b',
subBlocks: buildTriggerSubBlocks({
triggerId: '{service}_event_b',
triggerOptions: {service}TriggerOptions,
// No includeDropdown!
setupInstructions: {service}SetupInstructions('Event B'),
extraFields: build{Service}ExtraFields('{service}_event_b'),
}),
// ...
}
```
### Connect to Block
```typescript
import { getTrigger } from '@/triggers'
export const {Service}Block: BlockConfig = {
triggers: {
enabled: true,
available: ['{service}_event_a', '{service}_event_b'],
},
subBlocks: [
// Tool fields...
...getTrigger('{service}_event_a').subBlocks,
...getTrigger('{service}_event_b').subBlocks,
],
}
```
See `/add-trigger` skill for complete documentation.
## Step 6: Register Everything
### Tools Registry (`apps/sim/tools/registry.ts`)
```typescript
// Add import (alphabetically)
import {
{service}Action1Tool,
{service}Action2Tool,
} from '@/tools/{service}'
// Add to tools object (alphabetically)
export const tools: Record<string, ToolConfig> = {
// ... existing tools ...
{service}_action1: {service}Action1Tool,
{service}_action2: {service}Action2Tool,
}
```
### Block Registry (`apps/sim/blocks/registry.ts`)
```typescript
// Add import (alphabetically)
import { {Service}Block } from '@/blocks/blocks/{service}'
// Add to registry (alphabetically)
export const registry: Record<string, BlockConfig> = {
// ... existing blocks ...
{service}: {Service}Block,
}
```
### Trigger Registry (`apps/sim/triggers/registry.ts`) - If triggers exist
```typescript
// Add import (alphabetically)
import {
{service}EventATrigger,
{service}EventBTrigger,
{service}WebhookTrigger,
} from '@/triggers/{service}'
// Add to TRIGGER_REGISTRY (alphabetically)
export const TRIGGER_REGISTRY: TriggerRegistry = {
// ... existing triggers ...
{service}_event_a: {service}EventATrigger,
{service}_event_b: {service}EventBTrigger,
{service}_webhook: {service}WebhookTrigger,
}
```
## Step 7: Generate Docs
Run the documentation generator:
```bash
bun run scripts/generate-docs.ts
```
This creates `apps/docs/content/docs/en/tools/{service}.mdx`
## V2 Integration Pattern
If creating V2 versions (API-aligned outputs):
1. **V2 Tools** - Add `_v2` suffix, version `2.0.0`, flat outputs
2. **V2 Block** - Add `_v2` type, use `createVersionedToolSelector`
3. **V1 Block** - Add `(Legacy)` to name, set `hideFromToolbar: true`
4. **Registry** - Register both versions
```typescript
// In registry
{service}: {Service}Block, // V1 (legacy, hidden)
{service}_v2: {Service}V2Block, // V2 (visible)
```
## Complete Checklist
### Tools
- [ ] Created `tools/{service}/` directory
- [ ] Created `types.ts` with all interfaces
- [ ] Created tool file for each operation
- [ ] All params have correct visibility
- [ ] All nullable fields use `?? null`
- [ ] All optional outputs have `optional: true`
- [ ] Created `index.ts` barrel export
- [ ] Registered all tools in `tools/registry.ts`
### Block
- [ ] Created `blocks/blocks/{service}.ts`
- [ ] Defined operation dropdown with all operations
- [ ] Added credential field (oauth-input or short-input)
- [ ] Added conditional fields per operation
- [ ] Set up dependsOn for cascading selectors
- [ ] Configured tools.access with all tool IDs
- [ ] Configured tools.config.tool selector
- [ ] Defined outputs matching tool outputs
- [ ] Registered block in `blocks/registry.ts`
- [ ] If triggers: set `triggers.enabled` and `triggers.available`
- [ ] If triggers: spread trigger subBlocks with `getTrigger()`
### Icon
- [ ] Added icon to `components/icons.tsx`
- [ ] Icon spreads props correctly
### Triggers (if service supports webhooks)
- [ ] Created `triggers/{service}/` directory
- [ ] Created `utils.ts` with options, instructions, and extra fields helpers
- [ ] Primary trigger uses `includeDropdown: true`
- [ ] Secondary triggers do NOT have `includeDropdown`
- [ ] All triggers use `buildTriggerSubBlocks` helper
- [ ] Created `index.ts` barrel export
- [ ] Registered all triggers in `triggers/registry.ts`
### Docs
- [ ] Ran `bun run scripts/generate-docs.ts`
- [ ] Verified docs file created
## Example Command
When the user asks to add an integration:
```
User: Add a Stripe integration
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. Add the Stripe icon
5. Register everything
6. Generate docs
[Proceed with implementation...]
```
## Common Gotchas
1. **OAuth serviceId must match** - The `serviceId` in oauth-input must match the OAuth provider configuration
2. **Tool IDs are snake_case** - `stripe_create_payment`, not `stripeCreatePayment`
3. **Block type is snake_case** - `type: 'stripe'`, not `type: 'Stripe'`
4. **Alphabetical ordering** - Keep imports and registry entries alphabetically sorted
5. **Required can be conditional** - Use `required: { field: 'op', value: 'create' }` instead of always true
6. **DependsOn clears options** - When a dependency changes, selector options are refetched

View File

@@ -0,0 +1,284 @@
---
description: Create tool configurations for a Sim Studio integration by reading API docs
argument-hint: <service-name> [api-docs-url]
---
# Add Tools Skill
You are an expert at creating tool configurations for Sim Studio integrations. Your job is to read API documentation and create properly structured tool files.
## Your Task
When the user asks you to create tools for a service:
1. Use Context7 or WebFetch to read the service's API documentation
2. Create the tools directory structure
3. Generate properly typed tool configurations
## Directory Structure
Create files in `apps/sim/tools/{service}/`:
```
tools/{service}/
├── index.ts # Barrel export
├── types.ts # Parameter & response types
└── {action}.ts # Individual tool files (one per operation)
```
## Tool Configuration Structure
Every tool MUST follow this exact structure:
```typescript
import type { {ServiceName}{Action}Params } from '@/tools/{service}/types'
import type { ToolConfig } from '@/tools/types'
interface {ServiceName}{Action}Response {
success: boolean
output: {
// Define output structure here
}
}
export const {serviceName}{Action}Tool: ToolConfig<
{ServiceName}{Action}Params,
{ServiceName}{Action}Response
> = {
id: '{service}_{action}', // snake_case, matches tool name
name: '{Service} {Action}', // Human readable
description: 'Brief description', // One sentence
version: '1.0.0',
// OAuth config (if service uses OAuth)
oauth: {
required: true,
provider: '{service}', // Must match OAuth provider ID
},
params: {
// Hidden params (system-injected)
accessToken: {
type: 'string',
required: true,
visibility: 'hidden',
description: 'OAuth access token',
},
// User-only params (credentials, IDs user must provide)
someId: {
type: 'string',
required: true,
visibility: 'user-only',
description: 'The ID of the resource',
},
// User-or-LLM params (can be provided by user OR computed by LLM)
query: {
type: 'string',
required: false, // Use false for optional
visibility: 'user-or-llm',
description: 'Search query',
},
},
request: {
url: (params) => `https://api.service.com/v1/resource/${params.id}`,
method: 'POST',
headers: (params) => ({
Authorization: `Bearer ${params.accessToken}`,
'Content-Type': 'application/json',
}),
body: (params) => ({
// Request body - only for POST/PUT/PATCH
// Trim ID fields to prevent copy-paste whitespace errors:
// userId: params.userId?.trim(),
}),
},
transformResponse: async (response: Response) => {
const data = await response.json()
return {
success: true,
output: {
// Map API response to output
// Use ?? null for nullable fields
// Use ?? [] for optional arrays
},
}
},
outputs: {
// Define each output field
},
}
```
## Critical Rules for Parameters
### Visibility Options
- `'hidden'` - System-injected (OAuth tokens, internal params). User never sees.
- `'user-only'` - User must provide (credentials, account-specific IDs)
- `'user-or-llm'` - User provides OR LLM can compute (search queries, content, filters)
### Parameter Types
- `'string'` - Text values
- `'number'` - Numeric values
- `'boolean'` - True/false
- `'json'` - Complex objects (NOT 'object', use 'json')
- `'file'` - Single file
- `'file[]'` - Multiple files
### Required vs Optional
- Always explicitly set `required: true` or `required: false`
- Optional params should have `required: false`
## Critical Rules for Outputs
### Output Types
- `'string'`, `'number'`, `'boolean'` - Primitives
- `'json'` - Complex objects (use this, NOT 'object')
- `'array'` - Arrays with `items` property
- `'object'` - Objects with `properties` property
### Optional Outputs
Add `optional: true` for fields that may not exist in the response:
```typescript
closedAt: {
type: 'string',
description: 'When the issue was closed',
optional: true,
},
```
### Nested Properties
For complex outputs, define nested structure:
```typescript
metadata: {
type: 'json',
description: 'Response metadata',
properties: {
id: { type: 'string', description: 'Unique ID' },
status: { type: 'string', description: 'Current status' },
count: { type: 'number', description: 'Total count' },
},
},
items: {
type: 'array',
description: 'List of items',
items: {
type: 'object',
properties: {
id: { type: 'string', description: 'Item ID' },
name: { type: 'string', description: 'Item name' },
},
},
},
```
## Critical Rules for transformResponse
### Handle Nullable Fields
ALWAYS use `?? null` for fields that may be undefined:
```typescript
transformResponse: async (response: Response) => {
const data = await response.json()
return {
success: true,
output: {
id: data.id,
title: data.title,
body: data.body ?? null, // May be undefined
assignee: data.assignee ?? null, // May be undefined
labels: data.labels ?? [], // Default to empty array
closedAt: data.closed_at ?? null, // May be undefined
},
}
}
```
### Never Output Raw JSON Dumps
DON'T do this:
```typescript
output: {
data: data, // BAD - raw JSON dump
}
```
DO this instead - extract meaningful fields:
```typescript
output: {
id: data.id,
name: data.name,
status: data.status,
metadata: {
createdAt: data.created_at,
updatedAt: data.updated_at,
},
}
```
## Types File Pattern
Create `types.ts` with interfaces for all params and responses:
```typescript
import type { ToolResponse } from '@/tools/types'
// Parameter interfaces
export interface {Service}{Action}Params {
accessToken: string
requiredField: string
optionalField?: string
}
// Response interfaces (extend ToolResponse)
export interface {Service}{Action}Response extends ToolResponse {
output: {
field1: string
field2: number
optionalField?: string | null
}
}
```
## Index.ts Barrel Export Pattern
```typescript
// Export all tools
export { serviceTool1 } from './{action1}'
export { serviceTool2 } from './{action2}'
// Export types
export * from './types'
```
## Registering Tools
After creating tools, remind the user to:
1. Import tools in `apps/sim/tools/registry.ts`
2. Add to the `tools` object with snake_case keys:
```typescript
import { serviceActionTool } from '@/tools/{service}'
export const tools = {
// ... existing tools ...
{service}_{action}: serviceActionTool,
}
```
## V2 Tool Pattern
If creating V2 tools (API-aligned outputs), use `_v2` suffix:
- Tool ID: `{service}_{action}_v2`
- Variable name: `{action}V2Tool`
- Version: `'2.0.0'`
- Outputs: Flat, API-aligned (no content/metadata wrapper)
## Checklist Before Finishing
- [ ] All params have explicit `required: true` or `required: false`
- [ ] All params have appropriate `visibility`
- [ ] All nullable response fields use `?? null`
- [ ] All optional outputs have `optional: true`
- [ ] No raw JSON dumps in outputs
- [ ] Types file has all interfaces
- [ ] Index.ts exports all tools
- [ ] Tool IDs use snake_case

View File

@@ -0,0 +1,656 @@
---
description: Create webhook triggers for a Sim Studio integration using the generic trigger builder
argument-hint: <service-name>
---
# Add Trigger Skill
You are an expert at creating webhook triggers for Sim Studio. You understand the trigger system, the generic `buildTriggerSubBlocks` helper, and how triggers connect to blocks.
## Your Task
When the user asks you to create triggers for a service:
1. Research what webhook events the service supports
2. Create the trigger files using the generic builder
3. Register triggers and connect them to the block
## Directory Structure
```
apps/sim/triggers/{service}/
├── index.ts # Barrel exports
├── utils.ts # Service-specific helpers (trigger options, setup instructions, extra fields)
├── {event_a}.ts # Primary trigger (includes dropdown)
├── {event_b}.ts # Secondary trigger (no dropdown)
├── {event_c}.ts # Secondary trigger (no dropdown)
└── webhook.ts # Generic webhook trigger (optional, for "all events")
```
## Step 1: Create utils.ts
This file contains service-specific helpers used by all triggers.
```typescript
import type { SubBlockConfig } from '@/blocks/types'
import type { TriggerOutput } from '@/triggers/types'
/**
* Dropdown options for the trigger type selector.
* These appear in the primary trigger's dropdown.
*/
export const {service}TriggerOptions = [
{ label: 'Event A', id: '{service}_event_a' },
{ label: 'Event B', id: '{service}_event_b' },
{ label: 'Event C', id: '{service}_event_c' },
{ label: 'Generic Webhook (All Events)', id: '{service}_webhook' },
]
/**
* Generates HTML setup instructions for the trigger.
* Displayed to users to help them configure webhooks in the external service.
*/
export function {service}SetupInstructions(eventType: string): string {
const instructions = [
'Copy the <strong>Webhook URL</strong> above',
'Go to <strong>{Service} Settings > Webhooks</strong>',
'Click <strong>Add Webhook</strong>',
'Paste the webhook URL',
`Select the <strong>${eventType}</strong> event type`,
'Save the webhook configuration',
'Click "Save" above to activate your trigger',
]
return instructions
.map((instruction, index) =>
`<div class="mb-3"><strong>${index + 1}.</strong> ${instruction}</div>`
)
.join('')
}
/**
* Service-specific extra fields to add to triggers.
* These are inserted between webhookUrl and triggerSave.
*/
export function build{Service}ExtraFields(triggerId: string): SubBlockConfig[] {
return [
{
id: 'projectId',
title: 'Project ID (Optional)',
type: 'short-input',
placeholder: 'Leave empty for all projects',
description: 'Optionally filter to a specific project',
mode: 'trigger',
condition: { field: 'selectedTriggerId', value: triggerId },
},
]
}
/**
* Build outputs for this trigger type.
* Outputs define what data is available to downstream blocks.
*/
export function build{Service}Outputs(): Record<string, TriggerOutput> {
return {
eventType: { type: 'string', description: 'The type of event that triggered this workflow' },
resourceId: { type: 'string', description: 'ID of the affected resource' },
timestamp: { type: 'string', description: 'When the event occurred (ISO 8601)' },
// Nested outputs for complex data
resource: {
id: { type: 'string', description: 'Resource ID' },
name: { type: 'string', description: 'Resource name' },
status: { type: 'string', description: 'Current status' },
},
webhook: { type: 'json', description: 'Full webhook payload' },
}
}
```
## Step 2: Create the Primary Trigger
The **primary trigger** is the first one listed. It MUST include `includeDropdown: true` so users can switch between trigger types.
```typescript
import { {Service}Icon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
build{Service}ExtraFields,
build{Service}Outputs,
{service}SetupInstructions,
{service}TriggerOptions,
} from '@/triggers/{service}/utils'
import type { TriggerConfig } from '@/triggers/types'
/**
* {Service} Event A Trigger
*
* This is the PRIMARY trigger - it includes the dropdown for selecting trigger type.
*/
export const {service}EventATrigger: TriggerConfig = {
id: '{service}_event_a',
name: '{Service} Event A',
provider: '{service}',
description: 'Trigger workflow when Event A occurs',
version: '1.0.0',
icon: {Service}Icon,
subBlocks: buildTriggerSubBlocks({
triggerId: '{service}_event_a',
triggerOptions: {service}TriggerOptions,
includeDropdown: true, // PRIMARY TRIGGER - includes dropdown
setupInstructions: {service}SetupInstructions('Event A'),
extraFields: build{Service}ExtraFields('{service}_event_a'),
}),
outputs: build{Service}Outputs(),
webhook: {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
},
}
```
## Step 3: Create Secondary Triggers
Secondary triggers do NOT include the dropdown (it's already in the primary trigger).
```typescript
import { {Service}Icon } from '@/components/icons'
import { buildTriggerSubBlocks } from '@/triggers'
import {
build{Service}ExtraFields,
build{Service}Outputs,
{service}SetupInstructions,
{service}TriggerOptions,
} from '@/triggers/{service}/utils'
import type { TriggerConfig } from '@/triggers/types'
/**
* {Service} Event B Trigger
*/
export const {service}EventBTrigger: TriggerConfig = {
id: '{service}_event_b',
name: '{Service} Event B',
provider: '{service}',
description: 'Trigger workflow when Event B occurs',
version: '1.0.0',
icon: {Service}Icon,
subBlocks: buildTriggerSubBlocks({
triggerId: '{service}_event_b',
triggerOptions: {service}TriggerOptions,
// NO includeDropdown - secondary trigger
setupInstructions: {service}SetupInstructions('Event B'),
extraFields: build{Service}ExtraFields('{service}_event_b'),
}),
outputs: build{Service}Outputs(),
webhook: {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
},
}
```
## Step 4: Create index.ts Barrel Export
```typescript
export { {service}EventATrigger } from './event_a'
export { {service}EventBTrigger } from './event_b'
export { {service}EventCTrigger } from './event_c'
export { {service}WebhookTrigger } from './webhook'
```
## Step 5: Register Triggers
### Trigger Registry (`apps/sim/triggers/registry.ts`)
```typescript
// Add import
import {
{service}EventATrigger,
{service}EventBTrigger,
{service}EventCTrigger,
{service}WebhookTrigger,
} from '@/triggers/{service}'
// Add to TRIGGER_REGISTRY
export const TRIGGER_REGISTRY: TriggerRegistry = {
// ... existing triggers ...
{service}_event_a: {service}EventATrigger,
{service}_event_b: {service}EventBTrigger,
{service}_event_c: {service}EventCTrigger,
{service}_webhook: {service}WebhookTrigger,
}
```
## Step 6: Connect Triggers to Block
In the block file (`apps/sim/blocks/blocks/{service}.ts`):
```typescript
import { {Service}Icon } from '@/components/icons'
import { getTrigger } from '@/triggers'
import type { BlockConfig } from '@/blocks/types'
export const {Service}Block: BlockConfig = {
type: '{service}',
name: '{Service}',
// ... other config ...
// Enable triggers and list available trigger IDs
triggers: {
enabled: true,
available: [
'{service}_event_a',
'{service}_event_b',
'{service}_event_c',
'{service}_webhook',
],
},
subBlocks: [
// Regular tool subBlocks first
{ id: 'operation', /* ... */ },
{ id: 'credential', /* ... */ },
// ... other tool fields ...
// Then spread ALL trigger subBlocks
...getTrigger('{service}_event_a').subBlocks,
...getTrigger('{service}_event_b').subBlocks,
...getTrigger('{service}_event_c').subBlocks,
...getTrigger('{service}_webhook').subBlocks,
],
// ... tools config ...
}
```
## Automatic Webhook Registration (Preferred)
If the service's API supports programmatic webhook creation, implement automatic webhook registration instead of requiring users to manually configure webhooks. This provides a much better user experience.
### When to Use Automatic Registration
Check the service's API documentation for endpoints like:
- `POST /webhooks` or `POST /hooks` - Create webhook
- `DELETE /webhooks/{id}` - Delete webhook
Services that support this pattern include: Grain, Lemlist, Calendly, Airtable, Webflow, Typeform, etc.
### Implementation Steps
#### 1. Add API Key to Extra Fields
Update your `build{Service}ExtraFields` function to include an API key field:
```typescript
export function build{Service}ExtraFields(triggerId: string): SubBlockConfig[] {
return [
{
id: 'apiKey',
title: 'API Key',
type: 'short-input',
placeholder: 'Enter your {Service} API key',
description: 'Required to create the webhook in {Service}.',
password: true,
required: true,
mode: 'trigger',
condition: { field: 'selectedTriggerId', value: triggerId },
},
// Other optional fields (e.g., campaign filter, project filter)
{
id: 'projectId',
title: 'Project ID (Optional)',
type: 'short-input',
placeholder: 'Leave empty for all projects',
mode: 'trigger',
condition: { field: 'selectedTriggerId', value: triggerId },
},
]
}
```
#### 2. Update Setup Instructions for Automatic Creation
Change instructions to indicate automatic webhook creation:
```typescript
export function {service}SetupInstructions(eventType: string): string {
const instructions = [
'Enter your {Service} API Key above.',
'You can find your API key in {Service} at <strong>Settings > API</strong>.',
`Click <strong>"Save Configuration"</strong> to automatically create the webhook in {Service} for <strong>${eventType}</strong> events.`,
'The webhook will be automatically deleted when you remove this trigger.',
]
return instructions
.map((instruction, index) =>
`<div class="mb-3"><strong>${index + 1}.</strong> ${instruction}</div>`
)
.join('')
}
```
#### 3. Add Webhook Creation to API Route
In `apps/sim/app/api/webhooks/route.ts`, add provider-specific logic after the database save:
```typescript
// --- {Service} specific logic ---
if (savedWebhook && provider === '{service}') {
logger.info(`[${requestId}] {Service} provider detected. Creating webhook subscription.`)
try {
const result = await create{Service}WebhookSubscription(
{
id: savedWebhook.id,
path: savedWebhook.path,
providerConfig: savedWebhook.providerConfig,
},
requestId
)
if (result) {
// Update the webhook record with the external webhook ID
const updatedConfig = {
...(savedWebhook.providerConfig as Record<string, any>),
externalId: result.id,
}
await db
.update(webhook)
.set({
providerConfig: updatedConfig,
updatedAt: new Date(),
})
.where(eq(webhook.id, savedWebhook.id))
savedWebhook.providerConfig = updatedConfig
logger.info(`[${requestId}] Successfully created {Service} webhook`, {
externalHookId: result.id,
webhookId: savedWebhook.id,
})
}
} catch (err) {
logger.error(
`[${requestId}] Error creating {Service} webhook subscription, rolling back webhook`,
err
)
await db.delete(webhook).where(eq(webhook.id, savedWebhook.id))
return NextResponse.json(
{
error: 'Failed to create webhook in {Service}',
details: err instanceof Error ? err.message : 'Unknown error',
},
{ status: 500 }
)
}
}
// --- End {Service} specific logic ---
```
Then add the helper function at the end of the file:
```typescript
async function create{Service}WebhookSubscription(
webhookData: any,
requestId: string
): Promise<{ id: string } | undefined> {
try {
const { path, providerConfig } = webhookData
const { apiKey, triggerId, projectId } = providerConfig || {}
if (!apiKey) {
throw new Error('{Service} API Key is required.')
}
// Map trigger IDs to service event types
const eventTypeMap: Record<string, string | undefined> = {
{service}_event_a: 'eventA',
{service}_event_b: 'eventB',
{service}_webhook: undefined, // Generic - no filter
}
const eventType = eventTypeMap[triggerId]
const notificationUrl = `${getBaseUrl()}/api/webhooks/trigger/${path}`
const requestBody: Record<string, any> = {
url: notificationUrl,
}
if (eventType) {
requestBody.eventType = eventType
}
if (projectId) {
requestBody.projectId = projectId
}
const response = await fetch('https://api.{service}.com/webhooks', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(requestBody),
})
const responseBody = await response.json()
if (!response.ok) {
const errorMessage = responseBody.message || 'Unknown API error'
let userFriendlyMessage = 'Failed to create webhook in {Service}'
if (response.status === 401) {
userFriendlyMessage = 'Invalid API Key. Please verify and try again.'
} else if (errorMessage) {
userFriendlyMessage = `{Service} error: ${errorMessage}`
}
throw new Error(userFriendlyMessage)
}
return { id: responseBody.id }
} catch (error: any) {
logger.error(`Exception during {Service} webhook creation`, { error: error.message })
throw error
}
}
```
#### 4. Add Webhook Deletion to Provider Subscriptions
In `apps/sim/lib/webhooks/provider-subscriptions.ts`:
1. Add a logger:
```typescript
const {service}Logger = createLogger('{Service}Webhook')
```
2. Add the delete function:
```typescript
export async function delete{Service}Webhook(webhook: any, requestId: string): Promise<void> {
try {
const config = getProviderConfig(webhook)
const apiKey = config.apiKey as string | undefined
const externalId = config.externalId as string | undefined
if (!apiKey || !externalId) {
{service}Logger.warn(`[${requestId}] Missing apiKey or externalId, skipping cleanup`)
return
}
const response = await fetch(`https://api.{service}.com/webhooks/${externalId}`, {
method: 'DELETE',
headers: {
Authorization: `Bearer ${apiKey}`,
},
})
if (!response.ok && response.status !== 404) {
{service}Logger.warn(`[${requestId}] Failed to delete webhook (non-fatal): ${response.status}`)
} else {
{service}Logger.info(`[${requestId}] Successfully deleted webhook ${externalId}`)
}
} catch (error) {
{service}Logger.warn(`[${requestId}] Error deleting webhook (non-fatal)`, error)
}
}
```
3. Add to `cleanupExternalWebhook`:
```typescript
export async function cleanupExternalWebhook(...): Promise<void> {
// ... existing providers ...
} else if (webhook.provider === '{service}') {
await delete{Service}Webhook(webhook, requestId)
}
}
```
### Key Points for Automatic Registration
- **API Key visibility**: Always use `password: true` for API key fields
- **Error handling**: Roll back the database webhook if external creation fails
- **External ID storage**: Save the external webhook ID in `providerConfig.externalId`
- **Graceful cleanup**: Don't fail webhook deletion if cleanup fails (use non-fatal logging)
- **User-friendly errors**: Map HTTP status codes to helpful error messages
## The buildTriggerSubBlocks Helper
This is the generic helper from `@/triggers` that creates consistent trigger subBlocks.
### Function Signature
```typescript
interface BuildTriggerSubBlocksOptions {
triggerId: string // e.g., 'service_event_a'
triggerOptions: Array<{ label: string; id: string }> // Dropdown options
includeDropdown?: boolean // true only for primary trigger
setupInstructions: string // HTML instructions
extraFields?: SubBlockConfig[] // Service-specific fields
webhookPlaceholder?: string // Custom placeholder text
}
function buildTriggerSubBlocks(options: BuildTriggerSubBlocksOptions): SubBlockConfig[]
```
### What It Creates
The helper creates this structure:
1. **Dropdown** (only if `includeDropdown: true`) - Trigger type selector
2. **Webhook URL** - Read-only field with copy button
3. **Extra Fields** - Your service-specific fields (filters, options, etc.)
4. **Save Button** - Activates the trigger
5. **Instructions** - Setup guide for users
All fields automatically have:
- `mode: 'trigger'` - Only shown in trigger mode
- `condition: { field: 'selectedTriggerId', value: triggerId }` - Only shown when this trigger is selected
## Trigger Outputs
Trigger outputs use the same schema as block outputs (NOT tool outputs).
**Supported:**
- `type` and `description` for simple fields
- Nested object structure for complex data
**NOT Supported:**
- `optional: true` (tool outputs only)
- `items` property (tool outputs only)
```typescript
export function buildOutputs(): Record<string, TriggerOutput> {
return {
// Simple fields
eventType: { type: 'string', description: 'Event type' },
timestamp: { type: 'string', description: 'When it occurred' },
// Complex data - use type: 'json'
payload: { type: 'json', description: 'Full event payload' },
// Nested structure
resource: {
id: { type: 'string', description: 'Resource ID' },
name: { type: 'string', description: 'Resource name' },
},
}
}
```
## Generic Webhook Trigger Pattern
For services with many event types, create a generic webhook that accepts all events:
```typescript
export const {service}WebhookTrigger: TriggerConfig = {
id: '{service}_webhook',
name: '{Service} Webhook (All Events)',
// ...
subBlocks: buildTriggerSubBlocks({
triggerId: '{service}_webhook',
triggerOptions: {service}TriggerOptions,
setupInstructions: {service}SetupInstructions('All Events'),
extraFields: [
// Event type filter (optional)
{
id: 'eventTypes',
title: 'Event Types',
type: 'dropdown',
multiSelect: true,
options: [
{ label: 'Event A', id: 'event_a' },
{ label: 'Event B', id: 'event_b' },
],
placeholder: 'Leave empty for all events',
mode: 'trigger',
condition: { field: 'selectedTriggerId', value: '{service}_webhook' },
},
// Plus any other service-specific fields
...build{Service}ExtraFields('{service}_webhook'),
],
}),
}
```
## Checklist Before Finishing
### Utils
- [ ] Created `{service}TriggerOptions` array with all trigger IDs
- [ ] Created `{service}SetupInstructions` function with clear steps
- [ ] Created `build{Service}ExtraFields` for service-specific fields
- [ ] Created output builders for each trigger type
### Triggers
- [ ] Primary trigger has `includeDropdown: true`
- [ ] Secondary triggers do NOT have `includeDropdown`
- [ ] All triggers use `buildTriggerSubBlocks` helper
- [ ] All triggers have proper outputs defined
- [ ] Created `index.ts` barrel export
### Registration
- [ ] All triggers imported in `triggers/registry.ts`
- [ ] All triggers added to `TRIGGER_REGISTRY`
- [ ] Block has `triggers.enabled: true`
- [ ] Block has all trigger IDs in `triggers.available`
- [ ] Block spreads all trigger subBlocks: `...getTrigger('id').subBlocks`
### Automatic Webhook Registration (if supported)
- [ ] Added API key field to `build{Service}ExtraFields` with `password: true`
- [ ] Updated setup instructions for automatic webhook creation
- [ ] Added provider-specific logic to `apps/sim/app/api/webhooks/route.ts`
- [ ] Added `create{Service}WebhookSubscription` helper function
- [ ] Added `delete{Service}Webhook` function to `provider-subscriptions.ts`
- [ ] Added provider to `cleanupExternalWebhook` function
### Testing
- [ ] Run `bun run type-check` to verify no TypeScript errors
- [ ] Restart dev server to pick up new triggers
- [ ] Test trigger UI shows correctly in the block
- [ ] Test automatic webhook creation works (if applicable)

View File

@@ -1853,6 +1853,23 @@ export function LinearIcon(props: React.SVGProps<SVGSVGElement>) {
)
}
export function LemlistIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
{...props}
xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 24 24'
width='24'
height='24'
fill='none'
>
<rect width='24' height='24' rx='4' fill='#316BFF' />
<path d='M7 6h2v9h5v2H7V6Z' fill='white' />
<circle cx='17' cy='8' r='2' fill='white' />
</svg>
)
}
export function TelegramIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg

View File

@@ -54,6 +54,7 @@ import {
JiraIcon,
JiraServiceManagementIcon,
KalshiIcon,
LemlistIcon,
LinearIcon,
LinkedInIcon,
LinkupIcon,
@@ -137,7 +138,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
circleback: CirclebackIcon,
clay: ClayIcon,
confluence: ConfluenceIcon,
cursor: CursorIcon,
cursor_v2: CursorIcon,
datadog: DatadogIcon,
discord: DiscordIcon,
dropbox: DropboxIcon,
@@ -149,10 +150,10 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
file: DocumentIcon,
firecrawl: FirecrawlIcon,
fireflies: FirefliesIcon,
github: GithubIcon,
github_v2: GithubIcon,
gitlab: GitLabIcon,
gmail: GmailIcon,
google_calendar: GoogleCalendarIcon,
gmail_v2: GmailIcon,
google_calendar_v2: GoogleCalendarIcon,
google_docs: GoogleDocsIcon,
google_drive: GoogleDriveIcon,
google_forms: GoogleFormsIcon,
@@ -170,12 +171,13 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
image_generator: ImageIcon,
imap: MailServerIcon,
incidentio: IncidentioIcon,
intercom: IntercomIcon,
intercom_v2: IntercomIcon,
jina: JinaAIIcon,
jira: JiraIcon,
jira_service_management: JiraServiceManagementIcon,
kalshi: KalshiIcon,
knowledge: PackageSearchIcon,
lemlist: LemlistIcon,
linear: LinearIcon,
linkedin: LinkedInIcon,
linkup: LinkupIcon,
@@ -190,7 +192,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
mongodb: MongoDBIcon,
mysql: MySQLIcon,
neo4j: Neo4jIcon,
notion: NotionIcon,
notion_v2: NotionIcon,
onedrive: MicrosoftOneDriveIcon,
openai: OpenAIIcon,
outlook: OutlookIcon,
@@ -226,7 +228,6 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
supabase: SupabaseIcon,
tavily: TavilyIcon,
telegram: TelegramIcon,
thinking: BrainIcon,
translate: TranslateIcon,
trello: TrelloIcon,
tts: TTSIcon,

View File

@@ -31,33 +31,6 @@ Define permission groups to control what features and integrations team members
---
## Bring Your Own Key (BYOK)
Use your own API keys for AI model providers instead of Sim Studio's hosted keys.
### Supported Providers
| Provider | Usage |
|----------|-------|
| OpenAI | Knowledge Base embeddings, Agent block |
| Anthropic | Agent block |
| Google | Agent block |
| Mistral | Knowledge Base OCR |
### Setup
1. Navigate to **Settings** → **BYOK** in your workspace
2. Click **Add Key** for your provider
3. Enter your API key and save
<Callout type="warn">
BYOK keys are encrypted at rest. Only organization admins and owners can manage keys.
</Callout>
When configured, workflows use your key instead of Sim Studio's hosted keys. If removed, workflows automatically fall back to hosted keys.
---
## Single Sign-On (SSO)
Enterprise authentication with SAML 2.0 and OIDC support for centralized identity management.
@@ -117,4 +90,3 @@ curl -X POST https://your-instance/api/v1/admin/organizations/{orgId}/members \
### Notes
- Enabling `ACCESS_CONTROL_ENABLED` automatically enables organizations, as access control requires organization membership.
- BYOK is only available on hosted Sim Studio. Self-hosted deployments configure AI provider keys directly via environment variables.

View File

@@ -106,7 +106,28 @@ The model breakdown shows:
## Bring Your Own Key (BYOK)
You can use your own API keys for hosted models (OpenAI, Anthropic, Google, Mistral) in **Settings → BYOK** to pay base prices. Keys are encrypted and apply workspace-wide.
Use your own API keys for AI model providers instead of Sim Studio's hosted keys to pay base prices with no markup.
### Supported Providers
| Provider | Usage |
|----------|-------|
| OpenAI | Knowledge Base embeddings, Agent block |
| Anthropic | Agent block |
| Google | Agent block |
| Mistral | Knowledge Base OCR |
### Setup
1. Navigate to **Settings** → **BYOK** in your workspace
2. Click **Add Key** for your provider
3. Enter your API key and save
<Callout type="info">
BYOK keys are encrypted at rest. Only workspace admins can manage keys.
</Callout>
When configured, workflows use your key instead of Sim Studio's hosted keys. If removed, workflows automatically fall back to hosted keys with the multiplier.
## Cost Optimization Strategies

View File

@@ -198,8 +198,3 @@ Get a list of broken backlinks pointing to a target domain or URL. Useful for id
| `brokenBacklinks` | array | List of broken backlinks |
## Notes
- Category: `tools`
- Type: `ahrefs`

View File

@@ -128,8 +128,3 @@ Update multiple existing records in an Airtable table
| `records` | json | Array of updated Airtable records |
## Notes
- Category: `tools`
- Type: `airtable`

View File

@@ -86,8 +86,3 @@ Run an APIFY actor asynchronously with polling for long-running tasks
| `items` | array | Dataset items \(if completed\) |
## Notes
- Category: `tools`
- Type: `apify`

View File

@@ -61,7 +61,9 @@ Search Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `people` | json | Array of people matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `page` | number | Current page number |
| `per_page` | number | Results per page |
| `total_entries` | number | Total matching entries |
### `apollo_people_enrich`
@@ -86,7 +88,7 @@ Enrich data for a single person using Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `person` | json | Enriched person data from Apollo |
| `metadata` | json | Enrichment metadata including enriched status |
| `enriched` | boolean | Whether the person was successfully enriched |
### `apollo_people_bulk_enrich`
@@ -106,7 +108,8 @@ Enrich data for up to 10 people at once using Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `people` | json | Array of enriched people data |
| `metadata` | json | Bulk enrichment metadata including total and enriched counts |
| `total` | number | Total number of people processed |
| `enriched` | number | Number of people successfully enriched |
### `apollo_organization_search`
@@ -129,7 +132,9 @@ Search Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `organizations` | json | Array of organizations matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `page` | number | Current page number |
| `per_page` | number | Results per page |
| `total_entries` | number | Total matching entries |
### `apollo_organization_enrich`
@@ -148,7 +153,7 @@ Enrich data for a single organization using Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `organization` | json | Enriched organization data from Apollo |
| `metadata` | json | Enrichment metadata including enriched status |
| `enriched` | boolean | Whether the organization was successfully enriched |
### `apollo_organization_bulk_enrich`
@@ -166,7 +171,8 @@ Enrich data for up to 10 organizations at once using Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `organizations` | json | Array of enriched organization data |
| `metadata` | json | Bulk enrichment metadata including total and enriched counts |
| `total` | number | Total number of organizations processed |
| `enriched` | number | Number of organizations successfully enriched |
### `apollo_contact_create`
@@ -189,7 +195,7 @@ Create a new contact in your Apollo database
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | json | Created contact data from Apollo |
| `metadata` | json | Creation metadata including created status |
| `created` | boolean | Whether the contact was successfully created |
### `apollo_contact_update`
@@ -213,7 +219,7 @@ Update an existing contact in your Apollo database
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | json | Updated contact data from Apollo |
| `metadata` | json | Update metadata including updated status |
| `updated` | boolean | Whether the contact was successfully updated |
### `apollo_contact_search`
@@ -234,7 +240,7 @@ Search your team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contacts` | json | Array of contacts matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `pagination` | json | Pagination information |
### `apollo_contact_bulk_create`
@@ -254,7 +260,9 @@ Create up to 100 contacts at once in your Apollo database. Supports deduplicatio
| --------- | ---- | ----------- |
| `created_contacts` | json | Array of newly created contacts |
| `existing_contacts` | json | Array of existing contacts \(when deduplication is enabled\) |
| `metadata` | json | Bulk creation metadata including counts of created and existing contacts |
| `total_submitted` | number | Total number of contacts submitted |
| `created` | number | Number of contacts successfully created |
| `existing` | number | Number of existing contacts found |
### `apollo_contact_bulk_update`
@@ -273,7 +281,9 @@ Update up to 100 existing contacts at once in your Apollo database. Each contact
| --------- | ---- | ----------- |
| `updated_contacts` | json | Array of successfully updated contacts |
| `failed_contacts` | json | Array of contacts that failed to update |
| `metadata` | json | Bulk update metadata including counts of updated and failed contacts |
| `total_submitted` | number | Total number of contacts submitted |
| `updated` | number | Number of contacts successfully updated |
| `failed` | number | Number of contacts that failed to update |
### `apollo_account_create`
@@ -294,7 +304,7 @@ Create a new account (company) in your Apollo database
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `account` | json | Created account data from Apollo |
| `metadata` | json | Creation metadata including created status |
| `created` | boolean | Whether the account was successfully created |
### `apollo_account_update`
@@ -316,7 +326,7 @@ Update an existing account in your Apollo database
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `account` | json | Updated account data from Apollo |
| `metadata` | json | Update metadata including updated status |
| `updated` | boolean | Whether the account was successfully updated |
### `apollo_account_search`
@@ -338,7 +348,7 @@ Search your team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `accounts` | json | Array of accounts matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `pagination` | json | Pagination information |
### `apollo_account_bulk_create`
@@ -357,7 +367,9 @@ Create up to 100 accounts at once in your Apollo database. Note: Apollo does not
| --------- | ---- | ----------- |
| `created_accounts` | json | Array of newly created accounts |
| `failed_accounts` | json | Array of accounts that failed to create |
| `metadata` | json | Bulk creation metadata including counts of created and failed accounts |
| `total_submitted` | number | Total number of accounts submitted |
| `created` | number | Number of accounts successfully created |
| `failed` | number | Number of accounts that failed to create |
### `apollo_account_bulk_update`
@@ -376,7 +388,9 @@ Update up to 1000 existing accounts at once in your Apollo database (higher limi
| --------- | ---- | ----------- |
| `updated_accounts` | json | Array of successfully updated accounts |
| `failed_accounts` | json | Array of accounts that failed to update |
| `metadata` | json | Bulk update metadata including counts of updated and failed accounts |
| `total_submitted` | number | Total number of accounts submitted |
| `updated` | number | Number of accounts successfully updated |
| `failed` | number | Number of accounts that failed to update |
### `apollo_opportunity_create`
@@ -400,7 +414,7 @@ Create a new deal for an account in your Apollo database (master key required)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `opportunity` | json | Created opportunity data from Apollo |
| `metadata` | json | Creation metadata including created status |
| `created` | boolean | Whether the opportunity was successfully created |
### `apollo_opportunity_search`
@@ -423,7 +437,9 @@ Search and list all deals/opportunities in your team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `opportunities` | json | Array of opportunities matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `page` | number | Current page number |
| `per_page` | number | Results per page |
| `total_entries` | number | Total matching entries |
### `apollo_opportunity_get`
@@ -441,7 +457,7 @@ Retrieve complete details of a specific deal/opportunity by ID
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `opportunity` | json | Complete opportunity data from Apollo |
| `metadata` | json | Retrieval metadata including found status |
| `found` | boolean | Whether the opportunity was found |
### `apollo_opportunity_update`
@@ -465,7 +481,7 @@ Update an existing deal/opportunity in your Apollo database
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `opportunity` | json | Updated opportunity data from Apollo |
| `metadata` | json | Update metadata including updated status |
| `updated` | boolean | Whether the opportunity was successfully updated |
### `apollo_sequence_search`
@@ -486,7 +502,9 @@ Search for sequences/campaigns in your team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `sequences` | json | Array of sequences/campaigns matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `page` | number | Current page number |
| `per_page` | number | Results per page |
| `total_entries` | number | Total matching entries |
### `apollo_sequence_add_contacts`
@@ -507,7 +525,8 @@ Add contacts to an Apollo sequence
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contacts_added` | json | Array of contact IDs added to the sequence |
| `metadata` | json | Sequence metadata including sequence_id and total_added count |
| `sequence_id` | string | ID of the sequence contacts were added to |
| `total_added` | number | Total number of contacts added |
### `apollo_task_create`
@@ -530,7 +549,7 @@ Create a new task in Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `task` | json | Created task data from Apollo |
| `metadata` | json | Creation metadata including created status |
| `created` | boolean | Whether the task was successfully created |
### `apollo_task_search`
@@ -552,7 +571,7 @@ Search for tasks in Apollo
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `tasks` | json | Array of tasks matching the search criteria |
| `metadata` | json | Pagination information including page, per_page, and total_entries |
| `pagination` | json | Pagination information |
### `apollo_email_accounts`
@@ -569,11 +588,6 @@ Get list of team
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `email_accounts` | json | Array of team email accounts linked in Apollo |
| `metadata` | json | Metadata including total count of email accounts |
| `total` | number | Total count of email accounts |
## Notes
- Category: `tools`
- Type: `apollo`

View File

@@ -87,8 +87,3 @@ Search for papers by a specific author on ArXiv.
| `authorPapers` | json | Array of papers authored by the specified author |
## Notes
- Category: `tools`
- Type: `arxiv`

View File

@@ -162,8 +162,3 @@ Add a comment (story) to an Asana task
| `created_by` | object | Comment author details |
## Notes
- Category: `tools`
- Type: `asana`

View File

@@ -58,8 +58,3 @@ Runs a browser automation task using BrowserUse
| `steps` | json | Execution steps taken |
## Notes
- Category: `tools`
- Type: `browser_use`

View File

@@ -170,8 +170,3 @@ Cancel a scheduled event
| `resource` | object | Cancellation details |
## Notes
- Category: `tools`
- Type: `calendly`

View File

@@ -57,8 +57,3 @@ Receive meeting notes, action items, transcripts, and recordings when meetings a
## Notes
- Category: `triggers`
- Type: `circleback`

View File

@@ -63,8 +63,3 @@ Populate Clay with data from a JSON file. Enables direct communication and notif
| `metadata` | object | Webhook response metadata |
## Notes
- Category: `tools`
- Type: `clay`

View File

@@ -354,8 +354,3 @@ List all Confluence spaces accessible to the user.
| `spaces` | array | List of spaces |
## Notes
- Category: `tools`
- Type: `confluence`

View File

@@ -1,49 +1,22 @@
---
title: Cursor
description: Launch and manage Cursor cloud agents to work on GitHub repositories
description: Agent identifier
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="cursor"
color="#1E1E1E"
type="cursor_v2"
color="#F5F5F5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Cursor](https://www.cursor.so/) is an AI IDE and cloud-based platform that lets you launch and manage powerful AI agents able to work directly on your GitHub repositories. Cursor agents can automate development tasks, enhance your team's productivity, and collaborate with you by making code changes, responding to natural language instructions, and maintaining conversation history about their activities.
With Cursor, you can:
- **Launch cloud agents for codebases**: Instantly create new AI agents that work on your repositories in the cloud
- **Delegate coding tasks using natural language**: Guide agents with written instructions, amendments, and clarifications
- **Monitor progress and outputs**: Retrieve agent status, view detailed results, and inspect current or completed tasks
- **Access full conversation history**: Review all prompts and AI responses for transparency and auditability
- **Control and manage agent lifecycle**: List active agents, terminate agents, and manage API-based agent launches and follow-ups
In Sim, the Cursor integration enables your agents and workflows to interact programmatically with Cursor cloud agents. This means you can use Sim to:
- List all cloud agents and browse their current state (`cursor_list_agents`)
- Retrieve up-to-date status and outputs for any agent (`cursor_get_agent`)
- View the full conversation history for any coding agent (`cursor_get_conversation`)
- Add follow-up instructions or new prompts to a running agent
- Manage and terminate agents as needed
This integration helps you combine the flexible intelligence of Sim agents with the powerful development automation capabilities of Cursor, making it possible to scale AI-driven development across your projects.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Interact with Cursor Cloud Agents API to launch AI agents that can work on your GitHub repositories. Supports launching agents, adding follow-up instructions, checking status, viewing conversations, and managing agent lifecycle.
## Tools
### `cursor_list_agents`
List all cloud agents for the authenticated user with optional pagination.
List all cloud agents for the authenticated user with optional pagination. Returns API-aligned fields only.
#### Input
@@ -57,12 +30,12 @@ List all cloud agents for the authenticated user with optional pagination.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Human-readable list of agents |
| `metadata` | object | Agent list metadata |
| `agents` | array | Array of agent objects |
| `nextCursor` | string | Pagination cursor for next page |
### `cursor_get_agent`
Retrieve the current status and results of a cloud agent.
Retrieve the current status and results of a cloud agent. Returns API-aligned fields only.
#### Input
@@ -75,12 +48,17 @@ Retrieve the current status and results of a cloud agent.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Human-readable agent details |
| `metadata` | object | Agent metadata |
| `id` | string | Agent ID |
| `name` | string | Agent name |
| `status` | string | Agent status |
| `source` | json | Source repository info |
| `target` | json | Target branch/PR info |
| `summary` | string | Agent summary |
| `createdAt` | string | Creation timestamp |
### `cursor_get_conversation`
Retrieve the conversation history of a cloud agent, including all user prompts and assistant responses.
Retrieve the conversation history of a cloud agent, including all user prompts and assistant responses. Returns API-aligned fields only.
#### Input
@@ -93,12 +71,12 @@ Retrieve the conversation history of a cloud agent, including all user prompts a
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Human-readable conversation history |
| `metadata` | object | Conversation metadata |
| `id` | string | Agent ID |
| `messages` | array | Array of conversation messages |
### `cursor_launch_agent`
Start a new cloud agent to work on a GitHub repository with the given instructions.
Start a new cloud agent to work on a GitHub repository with the given instructions. Returns API-aligned fields only.
#### Input
@@ -119,12 +97,12 @@ Start a new cloud agent to work on a GitHub repository with the given instructio
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message with agent details |
| `metadata` | object | Launch result metadata |
| `id` | string | Agent ID |
| `url` | string | Agent URL |
### `cursor_add_followup`
Add a follow-up instruction to an existing cloud agent.
Add a follow-up instruction to an existing cloud agent. Returns API-aligned fields only.
#### Input
@@ -139,12 +117,11 @@ Add a follow-up instruction to an existing cloud agent.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Result metadata |
| `id` | string | Agent ID |
### `cursor_stop_agent`
Stop a running cloud agent. This pauses the agent without deleting it.
Stop a running cloud agent. Returns API-aligned fields only.
#### Input
@@ -157,12 +134,11 @@ Stop a running cloud agent. This pauses the agent without deleting it.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Result metadata |
| `id` | string | Agent ID |
### `cursor_delete_agent`
Permanently delete a cloud agent. This action cannot be undone.
Permanently delete a cloud agent. Returns API-aligned fields only.
#### Input
@@ -175,12 +151,6 @@ Permanently delete a cloud agent. This action cannot be undone.
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Result metadata |
| `id` | string | Agent ID |
## Notes
- Category: `tools`
- Type: `cursor`

View File

@@ -300,8 +300,3 @@ Cancel a scheduled downtime.
| `success` | boolean | Whether the downtime was successfully canceled |
## Notes
- Category: `tools`
- Type: `datadog`

View File

@@ -735,8 +735,3 @@ Delete a Discord webhook
| `message` | string | Success or error message |
## Notes
- Category: `tools`
- Type: `discord`

View File

@@ -217,8 +217,3 @@ Search for files and folders in Dropbox
| `matches` | array | Search results |
## Notes
- Category: `tools`
- Type: `dropbox`

View File

@@ -61,8 +61,3 @@ Search the web using DuckDuckGo Instant Answers API. Returns instant answers, ab
| `relatedTopics` | array | Array of related topics with URLs and descriptions |
## Notes
- Category: `tools`
- Type: `duckduckgo`

View File

@@ -37,7 +37,7 @@ This integration empowers Sim agents to automate data management tasks within yo
## Usage Instructions
Integrate Amazon DynamoDB into workflows. Supports Get, Put, Query, Scan, Update, and Delete operations on DynamoDB tables.
Integrate Amazon DynamoDB into workflows. Supports Get, Put, Query, Scan, Update, Delete, and Introspect operations on DynamoDB tables.
@@ -185,9 +185,25 @@ Delete an item from a DynamoDB table
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
### `dynamodb_introspect`
Introspect DynamoDB to list tables or get detailed schema information for a specific table
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `region` | string | Yes | AWS region \(e.g., us-east-1\) |
| `accessKeyId` | string | Yes | AWS access key ID |
| `secretAccessKey` | string | Yes | AWS secret access key |
| `tableName` | string | No | Optional table name to get detailed schema. If not provided, lists all tables. |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `tables` | array | List of table names in the region |
| `tableDetails` | object | Detailed schema information for a specific table |
## Notes
- Category: `tools`
- Type: `dynamodb`

View File

@@ -362,9 +362,27 @@ Get comprehensive statistics about the Elasticsearch cluster.
| `nodes` | object | Node statistics including count and versions |
| `indices` | object | Index statistics including document count and store size |
### `elasticsearch_list_indices`
List all indices in the Elasticsearch cluster with their health, status, and statistics.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `deploymentType` | string | Yes | Deployment type: self_hosted or cloud |
| `host` | string | No | Elasticsearch host URL \(for self-hosted\) |
| `cloudId` | string | No | Elastic Cloud ID \(for cloud deployments\) |
| `authMethod` | string | Yes | Authentication method: api_key or basic_auth |
| `apiKey` | string | No | Elasticsearch API key |
| `username` | string | No | Username for basic auth |
| `password` | string | No | Password for basic auth |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Summary message about the indices |
| `indices` | json | Array of index information objects |
## Notes
- Category: `tools`
- Type: `elasticsearch`

View File

@@ -54,8 +54,3 @@ Convert TTS using ElevenLabs voices
| `audioFile` | file | The generated audio file |
## Notes
- Category: `tools`
- Type: `elevenlabs`

View File

@@ -148,8 +148,3 @@ Perform comprehensive research using AI to generate detailed reports with citati
| `research` | array | Comprehensive research findings with citations and summaries |
## Notes
- Category: `tools`
- Type: `exa`

View File

@@ -52,8 +52,3 @@ Parse one or more uploaded files or files from URLs (text, PDF, CSV, images, etc
| `combinedContent` | string | Combined content of all parsed files |
## Notes
- Category: `tools`
- Type: `file`

View File

@@ -176,8 +176,3 @@ Autonomous web data extraction agent. Searches and gathers information based on
| `sources` | object | Array of source URLs used by the agent |
## Notes
- Category: `tools`
- Type: `firecrawl`

View File

@@ -231,8 +231,3 @@ List all contacts from your Fireflies.ai meetings
| `contacts` | array | List of contacts from meetings |
## Notes
- Category: `tools`
- Type: `fireflies`

File diff suppressed because it is too large Load Diff

View File

@@ -427,8 +427,3 @@ Cancel a running GitLab pipeline
| `pipeline` | object | The cancelled GitLab pipeline |
## Notes
- Category: `tools`
- Type: `gitlab`

View File

@@ -1,50 +1,22 @@
---
title: Gmail
description: Send, read, search, and move Gmail messages or trigger workflows from Gmail events
description: Gmail message ID
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="gmail"
color="#E0E0E0"
type="gmail_v2"
color="#F5F5F5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Gmail](https://gmail.com) is Google's popular email service that provides a robust platform for sending, receiving, and managing email communications. With over 1.8 billion active users worldwide, Gmail offers a feature-rich experience with powerful search capabilities, organizational tools, and integration options.
With Gmail, you can:
- **Send and receive emails**: Communicate with contacts through a clean, intuitive interface
- **Organize messages**: Use labels, folders, and filters to keep your inbox organized
- **Search efficiently**: Find specific messages quickly with Google's powerful search technology
- **Automate workflows**: Create filters and rules to automatically process incoming emails
- **Access from anywhere**: Use Gmail across devices with synchronized content and settings
- **Integrate with other services**: Connect with Google Calendar, Drive, and other productivity tools
In Sim, the Gmail integration enables your agents to fully manage emails programmatically with comprehensive automation capabilities. This allows for powerful automation scenarios such as sending notifications, processing incoming messages, extracting information from emails, and managing communication workflows at scale. Your agents can:
- **Compose and send**: Create personalized emails with attachments and send to recipients
- **Read and search**: Find specific messages using Gmail's query syntax and extract content
- **Organize intelligently**: Mark messages as read/unread, archive or unarchive emails, and manage labels
- **Clean up inbox**: Delete messages, move emails between labels, and maintain inbox zero
- **Trigger workflows**: Listen for new emails in real-time, enabling responsive workflows that react to incoming messages
This integration bridges the gap between your AI workflows and email communications, enabling seamless interaction with one of the world's most widely used communication platforms. Whether you're automating customer support responses, processing receipts, managing subscriptions, or coordinating team communications, the Gmail integration provides all the tools you need for comprehensive email automation.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Gmail into the workflow. Can send, read, search, and move emails. Can be used in trigger mode to trigger a workflow when a new email is received.
## Tools
### `gmail_send`
Send emails using Gmail
Send emails using Gmail. Returns API-aligned fields only.
#### Input
@@ -64,12 +36,13 @@ Send emails using Gmail
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Email labels |
### `gmail_draft`
Draft emails using Gmail
Draft emails using Gmail. Returns API-aligned fields only.
#### Input
@@ -89,12 +62,14 @@ Draft emails using Gmail
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Draft metadata |
| `draftId` | string | Draft ID |
| `messageId` | string | Gmail message ID for the draft |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Email labels |
### `gmail_read`
Read emails from Gmail
Read emails from Gmail. Returns API-aligned fields only.
#### Input
@@ -110,13 +85,22 @@ Read emails from Gmail
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Text content of the email |
| `metadata` | json | Metadata of the email |
| `attachments` | file[] | Attachments of the email |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Email labels |
| `from` | string | Sender email address |
| `to` | string | Recipient email address |
| `subject` | string | Email subject |
| `date` | string | Email date |
| `body` | string | Email body text \(best-effort plain text\) |
| `hasAttachments` | boolean | Whether the email has attachments |
| `attachmentCount` | number | Number of attachments |
| `attachments` | file[] | Downloaded attachments \(if enabled\) |
| `results` | json | Summary results when reading multiple messages |
### `gmail_search`
Search emails in Gmail
Search emails in Gmail. Returns API-aligned fields only.
#### Input
@@ -129,12 +113,11 @@ Search emails in Gmail
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Search results summary |
| `metadata` | object | Search metadata |
| `results` | json | Array of search results |
### `gmail_move`
Move emails between Gmail labels/folders
Move emails between labels/folders in Gmail. Returns API-aligned fields only.
#### Input
@@ -148,12 +131,13 @@ Move emails between Gmail labels/folders
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Email labels |
### `gmail_mark_read`
Mark a Gmail message as read
Mark a Gmail message as read. Returns API-aligned fields only.
#### Input
@@ -165,12 +149,13 @@ Mark a Gmail message as read
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
### `gmail_mark_unread`
Mark a Gmail message as unread
Mark a Gmail message as unread. Returns API-aligned fields only.
#### Input
@@ -182,12 +167,13 @@ Mark a Gmail message as unread
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
### `gmail_archive`
Archive a Gmail message (remove from inbox)
Archive a Gmail message (remove from inbox). Returns API-aligned fields only.
#### Input
@@ -199,12 +185,13 @@ Archive a Gmail message (remove from inbox)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
### `gmail_unarchive`
Unarchive a Gmail message (move back to inbox)
Unarchive a Gmail message (move back to inbox). Returns API-aligned fields only.
#### Input
@@ -216,12 +203,13 @@ Unarchive a Gmail message (move back to inbox)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
### `gmail_delete`
Delete a Gmail message (move to trash)
Delete a Gmail message (move to trash). Returns API-aligned fields only.
#### Input
@@ -233,12 +221,13 @@ Delete a Gmail message (move to trash)
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
### `gmail_add_label`
Add label(s) to a Gmail message
Add label(s) to a Gmail message. Returns API-aligned fields only.
#### Input
@@ -251,12 +240,13 @@ Add label(s) to a Gmail message
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
### `gmail_remove_label`
Remove label(s) from a Gmail message
Remove label(s) from a Gmail message. Returns API-aligned fields only.
#### Input
@@ -269,12 +259,8 @@ Remove label(s) from a Gmail message
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message |
| `metadata` | object | Email metadata |
| `id` | string | Gmail message ID |
| `threadId` | string | Gmail thread ID |
| `labelIds` | array | Updated email labels |
## Notes
- Category: `tools`
- Type: `gmail`

View File

@@ -1,41 +1,22 @@
---
title: Google Calendar
description: Manage Google Calendar events
description: Event ID
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="google_calendar"
color="#E0E0E0"
type="google_calendar_v2"
color="#F5F5F5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Google Calendar](https://calendar.google.com) is Google's powerful calendar and scheduling service that provides a comprehensive platform for managing events, meetings, and appointments. With seamless integration across Google's ecosystem and widespread adoption, Google Calendar offers robust features for both personal and professional scheduling needs.
With Google Calendar, you can:
- **Create and manage events**: Schedule meetings, appointments, and reminders with detailed information
- **Send calendar invites**: Automatically notify and coordinate with attendees through email invitations
- **Natural language event creation**: Quickly add events using conversational language like "Meeting with John tomorrow at 3pm"
- **View and search events**: Easily find and access your scheduled events across multiple calendars
- **Manage multiple calendars**: Organize different types of events across various calendars
In Sim, the Google Calendar integration enables your agents to programmatically create, read, and manage calendar events. This allows for powerful automation scenarios such as scheduling meetings, sending calendar invites, checking availability, and managing event details. Your agents can create events with natural language input, send automated calendar invitations to attendees, retrieve event information, and list upcoming events. This integration bridges the gap between your AI workflows and calendar management, enabling seamless scheduling automation and coordination with one of the world's most widely used calendar platforms.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Google Calendar into the workflow. Can create, read, update, and list calendar events.
## Tools
### `google_calendar_create`
Create a new event in Google Calendar
Create a new event in Google Calendar. Returns API-aligned fields only.
#### Input
@@ -55,12 +36,21 @@ Create a new event in Google Calendar
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Event creation confirmation message |
| `metadata` | json | Created event metadata including ID, status, and details |
| `id` | string | Event ID |
| `htmlLink` | string | Event link |
| `status` | string | Event status |
| `summary` | string | Event title |
| `description` | string | Event description |
| `location` | string | Event location |
| `start` | json | Event start |
| `end` | json | Event end |
| `attendees` | json | Event attendees |
| `creator` | json | Event creator |
| `organizer` | json | Event organizer |
### `google_calendar_list`
List events from Google Calendar
List events from Google Calendar. Returns API-aligned fields only.
#### Input
@@ -76,12 +66,13 @@ List events from Google Calendar
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Summary of found events count |
| `metadata` | json | List of events with pagination tokens and event details |
| `nextPageToken` | string | Next page token |
| `timeZone` | string | Calendar time zone |
| `events` | json | List of events |
### `google_calendar_get`
Get a specific event from Google Calendar
Get a specific event from Google Calendar. Returns API-aligned fields only.
#### Input
@@ -94,12 +85,21 @@ Get a specific event from Google Calendar
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Event retrieval confirmation message |
| `metadata` | json | Event details including ID, status, times, and attendees |
| `id` | string | Event ID |
| `htmlLink` | string | Event link |
| `status` | string | Event status |
| `summary` | string | Event title |
| `description` | string | Event description |
| `location` | string | Event location |
| `start` | json | Event start |
| `end` | json | Event end |
| `attendees` | json | Event attendees |
| `creator` | json | Event creator |
| `organizer` | json | Event organizer |
### `google_calendar_quick_add`
Create events from natural language text
Create events from natural language text. Returns API-aligned fields only.
#### Input
@@ -114,12 +114,21 @@ Create events from natural language text
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Event creation confirmation message from natural language |
| `metadata` | json | Created event metadata including parsed details |
| `id` | string | Event ID |
| `htmlLink` | string | Event link |
| `status` | string | Event status |
| `summary` | string | Event title |
| `description` | string | Event description |
| `location` | string | Event location |
| `start` | json | Event start |
| `end` | json | Event end |
| `attendees` | json | Event attendees |
| `creator` | json | Event creator |
| `organizer` | json | Event organizer |
### `google_calendar_invite`
Invite attendees to an existing Google Calendar event
Invite attendees to an existing Google Calendar event. Returns API-aligned fields only.
#### Input
@@ -135,12 +144,16 @@ Invite attendees to an existing Google Calendar event
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Attendee invitation confirmation message with email delivery status |
| `metadata` | json | Updated event metadata including attendee list and details |
| `id` | string | Event ID |
| `htmlLink` | string | Event link |
| `status` | string | Event status |
| `summary` | string | Event title |
| `description` | string | Event description |
| `location` | string | Event location |
| `start` | json | Event start |
| `end` | json | Event end |
| `attendees` | json | Event attendees |
| `creator` | json | Event creator |
| `organizer` | json | Event organizer |
## Notes
- Category: `tools`
- Type: `google_calendar`

View File

@@ -126,8 +126,3 @@ Create a new Google Docs document
| `metadata` | json | Created document metadata including ID, title, and URL |
## Notes
- Category: `tools`
- Type: `google_docs`

View File

@@ -96,13 +96,13 @@ Download a file from Google Drive with complete metadata (exports Google Workspa
| `fileId` | string | Yes | The ID of the file to download |
| `mimeType` | string | No | The MIME type to export Google Workspace files to \(optional\) |
| `fileName` | string | No | Optional filename override |
| `includeRevisions` | boolean | No | Whether to include revision history in the metadata \(default: true\) |
| `includeRevisions` | boolean | No | Whether to include revision history in the metadata \(default: true, returns first 100 revisions\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `file` | object | Downloaded file stored in execution files |
| `file` | object | Downloaded file data |
### `google_drive_list`
@@ -125,8 +125,3 @@ List files and folders in Google Drive with complete metadata
| `files` | array | Array of file metadata objects from Google Drive |
## Notes
- Category: `tools`
- Type: `google_drive`

View File

@@ -49,8 +49,3 @@ Integrate Google Forms into your workflow. Provide a Form ID to list responses,
| `data` | json | Response or list of responses |
## Notes
- Category: `tools`
- Type: `google_forms`

View File

@@ -216,8 +216,3 @@ Check if a user is a member of a Google Group
| `isMember` | boolean | Whether the user is a member of the group |
## Notes
- Category: `tools`
- Type: `google_groups`

View File

@@ -65,8 +65,3 @@ Search the web with the Custom Search API
| `items` | array | Array of search results from Google |
## Notes
- Category: `tools`
- Type: `google_search`

View File

@@ -176,8 +176,3 @@ Append data to the end of a Google Sheets spreadsheet
| `metadata` | json | Spreadsheet metadata including ID and URL |
## Notes
- Category: `tools`
- Type: `google_sheets`

View File

@@ -178,8 +178,3 @@ Generate a thumbnail image of a specific slide in a Google Slides presentation
| `metadata` | json | Operation metadata including presentation ID and page object ID |
## Notes
- Category: `tools`
- Type: `google_slides`

View File

@@ -157,8 +157,3 @@ List matters, or get a specific matter if matterId is provided
| `nextPageToken` | string | Token for fetching next page of results |
## Notes
- Category: `tools`
- Type: `google_vault`

View File

@@ -502,8 +502,3 @@ Create a new folder in Grafana
| `version` | number | Version number of the folder |
## Notes
- Category: `tools`
- Type: `grafana`

View File

@@ -218,8 +218,3 @@ Delete a webhook by ID
| `success` | boolean | True when webhook was successfully deleted |
## Notes
- Category: `tools`
- Type: `grain`

View File

@@ -134,8 +134,3 @@ Check the indexing status of a repository. Use this to verify if a repository is
| `sha` | string | Git commit SHA of the indexed version |
## Notes
- Category: `tools`
- Type: `greptile`

View File

@@ -51,7 +51,7 @@ Retrieve all users from HubSpot account
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `users` | array | Array of HubSpot user objects |
| `metadata` | object | Operation metadata |
| `totalItems` | number | Total number of users returned |
| `success` | boolean | Operation success status |
### `hubspot_list_contacts`
@@ -73,7 +73,7 @@ Retrieve all contacts from HubSpot account with pagination support
| --------- | ---- | ----------- |
| `contacts` | array | Array of HubSpot contact objects |
| `paging` | object | Pagination information |
| `metadata` | object | Operation metadata |
| `metadata` | object | Metadata with totalReturned and hasMore |
| `success` | boolean | Operation success status |
### `hubspot_get_contact`
@@ -94,7 +94,7 @@ Retrieve a single contact by ID or email from HubSpot
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | HubSpot contact object with properties |
| `metadata` | object | Operation metadata |
| `contactId` | string | The retrieved contact ID |
| `success` | boolean | Operation success status |
### `hubspot_create_contact`
@@ -113,7 +113,7 @@ Create a new contact in HubSpot. Requires at least one of: email, firstname, or
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Created HubSpot contact object |
| `metadata` | object | Operation metadata |
| `contactId` | string | The created contact ID |
| `success` | boolean | Operation success status |
### `hubspot_update_contact`
@@ -133,7 +133,7 @@ Update an existing contact in HubSpot by ID or email
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `contact` | object | Updated HubSpot contact object |
| `metadata` | object | Operation metadata |
| `contactId` | string | The updated contact ID |
| `success` | boolean | Operation success status |
### `hubspot_search_contacts`
@@ -158,7 +158,7 @@ Search for contacts in HubSpot using filters, sorting, and queries
| `contacts` | array | Array of matching HubSpot contact objects |
| `total` | number | Total number of matching contacts |
| `paging` | object | Pagination information |
| `metadata` | object | Operation metadata |
| `metadata` | object | Metadata with totalReturned and hasMore |
| `success` | boolean | Operation success status |
### `hubspot_list_companies`
@@ -180,7 +180,7 @@ Retrieve all companies from HubSpot account with pagination support
| --------- | ---- | ----------- |
| `companies` | array | Array of HubSpot company objects |
| `paging` | object | Pagination information |
| `metadata` | object | Operation metadata |
| `metadata` | object | Metadata with totalReturned and hasMore |
| `success` | boolean | Operation success status |
### `hubspot_get_company`
@@ -201,7 +201,7 @@ Retrieve a single company by ID or domain from HubSpot
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | HubSpot company object with properties |
| `metadata` | object | Operation metadata |
| `companyId` | string | The retrieved company ID |
| `success` | boolean | Operation success status |
### `hubspot_create_company`
@@ -220,7 +220,7 @@ Create a new company in HubSpot
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Created HubSpot company object |
| `metadata` | object | Operation metadata |
| `companyId` | string | The created company ID |
| `success` | boolean | Operation success status |
### `hubspot_update_company`
@@ -240,7 +240,7 @@ Update an existing company in HubSpot by ID or domain
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `company` | object | Updated HubSpot company object |
| `metadata` | object | Operation metadata |
| `companyId` | string | The updated company ID |
| `success` | boolean | Operation success status |
### `hubspot_search_companies`
@@ -265,7 +265,7 @@ Search for companies in HubSpot using filters, sorting, and queries
| `companies` | array | Array of matching HubSpot company objects |
| `total` | number | Total number of matching companies |
| `paging` | object | Pagination information |
| `metadata` | object | Operation metadata |
| `metadata` | object | Metadata with totalReturned and hasMore |
| `success` | boolean | Operation success status |
### `hubspot_list_deals`
@@ -287,12 +287,7 @@ Retrieve all deals from HubSpot account with pagination support
| --------- | ---- | ----------- |
| `deals` | array | Array of HubSpot deal objects |
| `paging` | object | Pagination information |
| `metadata` | object | Operation metadata |
| `metadata` | object | Metadata with totalReturned and hasMore |
| `success` | boolean | Operation success status |
## Notes
- Category: `tools`
- Type: `hubspot`

View File

@@ -56,8 +56,3 @@ Generate completions using Hugging Face Inference API
| `output` | object | Chat completion results |
## Notes
- Category: `tools`
- Type: `huggingface`

View File

@@ -190,8 +190,3 @@ Returns the total number of email addresses found for a domain or company.
| `seniority` | object | Breakdown of email addresses by seniority level \(junior, senior, executive\) |
## Notes
- Category: `tools`
- Type: `hunter`

View File

@@ -60,8 +60,3 @@ Generate images using OpenAI
| `output` | object | Generated image data |
## Notes
- Category: `tools`
- Type: `image_generator`

View File

@@ -33,8 +33,3 @@ Connect to any email server via IMAP protocol to trigger workflows when new emai
## Notes
- Category: `triggers`
- Type: `imap`

View File

@@ -841,8 +841,3 @@ Delete an escalation path in incident.io
| `message` | string | Success message |
## Notes
- Category: `tools`
- Type: `incidentio`

View File

@@ -1,41 +1,22 @@
---
title: Intercom
description: Manage contacts, companies, conversations, tickets, and messages in Intercom
description: Contact object with id, type, role, email, phone, name, external_id, created_at, updated_at
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="intercom"
color="#E0E0E0"
type="intercom_v2"
color="#F5F5F5"
/>
{/* MANUAL-CONTENT-START:intro */}
[Intercom](https://www.intercom.com/) is a leading customer communications platform that enables you to manage and automate your interactions with contacts, companies, conversations, tickets, and messages—all in one place. The Intercom integration in Sim lets your agents programmatically manage customer relationships, support requests, and conversations directly from your automated workflows.
With the Intercom tools, you can:
- **Contacts Management:** Create, get, update, list, search, and delete contacts—automate your CRM processes and keep your customer records up-to-date.
- **Company Management:** Create new companies, retrieve company details, and list all companies related to your users or business clients.
- **Conversation Handling:** Get, list, reply to, and search through conversations—allowing agents to track ongoing support threads, provide answers, and automate follow-up actions.
- **Ticket Management:** Create and retrieve tickets programmatically, helping you automate customer service, support issue tracking, and workflow escalations.
- **Send Messages:** Trigger messages to users or leads for onboarding, support, or marketing, all from within your workflow automation.
By integrating Intercom tools into Sim, you empower your workflows to communicate directly with your users, automate customer support processes, manage leads, and streamline communications at scale. Whether you need to create new contacts, keep customer data synchronized, manage support tickets, or send personalized engagement messages, the Intercom tools provide a comprehensive way to manage customer interactions as part of your intelligent automations.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate Intercom into the workflow. Can create, get, update, list, search, and delete contacts; create, get, and list companies; get, list, reply, and search conversations; create and get tickets; and create messages.
## Tools
### `intercom_create_contact`
Create a new contact in Intercom with email, external_id, or role
Create a new contact in Intercom with email, external_id, or role. Returns API-aligned fields only.
#### Input
@@ -62,7 +43,7 @@ Create a new contact in Intercom with email, external_id, or role
### `intercom_get_contact`
Get a single contact by ID from Intercom
Get a single contact by ID from Intercom. Returns API-aligned fields only.
#### Input
@@ -78,7 +59,7 @@ Get a single contact by ID from Intercom
### `intercom_update_contact`
Update an existing contact in Intercom
Update an existing contact in Intercom. Returns API-aligned fields only.
#### Input
@@ -143,7 +124,7 @@ Search for contacts in Intercom using a query
### `intercom_delete_contact`
Delete a contact from Intercom by ID
Delete a contact from Intercom by ID. Returns API-aligned fields only.
#### Input
@@ -157,7 +138,6 @@ Delete a contact from Intercom by ID
| --------- | ---- | ----------- |
| `id` | string | ID of deleted contact |
| `deleted` | boolean | Whether the contact was deleted |
| `metadata` | object | Operation metadata |
### `intercom_create_company`
@@ -277,7 +257,7 @@ Reply to a conversation as an admin in Intercom
### `intercom_search_conversations`
Search for conversations in Intercom using a query
Search for conversations in Intercom using a query. Returns API-aligned fields only.
#### Input
@@ -297,7 +277,7 @@ Search for conversations in Intercom using a query
### `intercom_create_ticket`
Create a new ticket in Intercom
Create a new ticket in Intercom. Returns API-aligned fields only.
#### Input
@@ -319,7 +299,7 @@ Create a new ticket in Intercom
### `intercom_get_ticket`
Retrieve a single ticket by ID from Intercom
Retrieve a single ticket by ID from Intercom. Returns API-aligned fields only.
#### Input
@@ -335,7 +315,7 @@ Retrieve a single ticket by ID from Intercom
### `intercom_create_message`
Create and send a new admin-initiated message in Intercom
Create and send a new admin-initiated message in Intercom. Returns API-aligned fields only.
#### Input
@@ -358,8 +338,3 @@ Create and send a new admin-initiated message in Intercom
| `message` | object | Created message object |
## Notes
- Category: `tools`
- Type: `intercom`

View File

@@ -93,8 +93,3 @@ Search the web and return top 5 results with LLM-friendly content. Each result i
| `results` | array | Array of search results, each containing title, description, url, and LLM-friendly content |
## Notes
- Category: `tools`
- Type: `jina`

View File

@@ -555,8 +555,3 @@ Get Jira users. If an account ID is provided, returns a single user. Otherwise,
| `maxResults` | number | Maximum results per page |
## Notes
- Category: `tools`
- Type: `jira`

View File

@@ -483,8 +483,3 @@ Approve or decline an approval request in Jira Service Management
| `success` | boolean | Whether the operation succeeded |
## Notes
- Category: `tools`
- Type: `jira_service_management`

View File

@@ -382,8 +382,3 @@ Modify the price or quantity of an existing order on Kalshi
| `order` | object | The amended order object |
## Notes
- Category: `tools`
- Type: `kalshi`

View File

@@ -108,8 +108,3 @@ Create a new document in a knowledge base
| `data` | object | Information about the created document |
## Notes
- Category: `blocks`
- Type: `knowledge`

View File

@@ -0,0 +1,95 @@
---
title: Lemlist
description: Manage outreach activities, leads, and send emails via Lemlist
---
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="lemlist"
color="#316BFF"
/>
## Usage Instructions
Integrate Lemlist into your workflow. Retrieve campaign activities and replies, get lead information, and send emails through the Lemlist inbox.
## Tools
### `lemlist_get_activities`
Retrieves campaign activities and steps performed, including email opens, clicks, replies, and other events.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Lemlist API key |
| `type` | string | No | Filter by activity type \(e.g., emailOpened, emailClicked, emailReplied, paused\) |
| `campaignId` | string | No | Filter by campaign ID |
| `leadId` | string | No | Filter by lead ID |
| `isFirst` | boolean | No | Filter for first activity only |
| `limit` | number | No | Number of results per request \(max 100, default 100\) |
| `offset` | number | No | Number of records to skip for pagination |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `activities` | array | List of activities |
### `lemlist_get_lead`
Retrieves lead information by email address or lead ID.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Lemlist API key |
| `email` | string | No | Lead email address \(use either email or id\) |
| `id` | string | No | Lead ID \(use either email or id\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `_id` | string | Lead ID |
| `email` | string | Lead email address |
| `firstName` | string | Lead first name |
| `lastName` | string | Lead last name |
| `companyName` | string | Company name |
| `jobTitle` | string | Job title |
| `companyDomain` | string | Company domain |
| `isPaused` | boolean | Whether the lead is paused |
| `campaignId` | string | Campaign ID the lead belongs to |
| `contactId` | string | Contact ID |
| `emailStatus` | string | Email deliverability status |
### `lemlist_send_email`
Sends an email to a contact through the Lemlist inbox.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `apiKey` | string | Yes | Lemlist API key |
| `sendUserId` | string | Yes | Identifier for the user sending the message |
| `sendUserEmail` | string | Yes | Email address of the sender |
| `sendUserMailboxId` | string | Yes | Mailbox identifier for the sender |
| `contactId` | string | Yes | Recipient contact identifier |
| `leadId` | string | Yes | Associated lead identifier |
| `subject` | string | Yes | Email subject line |
| `message` | string | Yes | Email message body in HTML format |
| `cc` | json | No | Array of CC email addresses |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `ok` | boolean | Whether the email was sent successfully |

View File

@@ -1471,8 +1471,3 @@ List all project statuses in Linear
| `projectStatuses` | array | List of project statuses |
## Notes
- Category: `tools`
- Type: `linear`

View File

@@ -81,8 +81,3 @@ Retrieve your LinkedIn profile information
| `error` | string | Error message if operation failed |
## Notes
- Category: `tools`
- Type: `linkedin`

View File

@@ -60,8 +60,3 @@ Search the web for information using Linkup
| `sources` | array | Array of sources used to compile the answer, each containing name, url, and snippet |
## Notes
- Category: `tools`
- Type: `linkup`

View File

@@ -70,8 +70,8 @@ Retrieve a list of audiences (lists) from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Audiences data and metadata |
| `success` | boolean | Whether the audiences were successfully retrieved |
| `output` | object | Audiences data |
### `mailchimp_get_audience`
@@ -88,8 +88,8 @@ Retrieve details of a specific audience (list) from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Audience data and metadata |
| `success` | boolean | Whether the audience was successfully retrieved |
| `output` | object | Audience data |
### `mailchimp_create_audience`
@@ -150,8 +150,7 @@ Delete an audience (list) from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the audience was successfully deleted |
### `mailchimp_get_members`
@@ -171,8 +170,8 @@ Retrieve a list of members from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Members data and metadata |
| `success` | boolean | Whether the members were successfully retrieved |
| `output` | object | Members data |
### `mailchimp_get_member`
@@ -190,8 +189,8 @@ Retrieve details of a specific member from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Member data and metadata |
| `success` | boolean | Whether the member was successfully retrieved |
| `output` | object | Member data |
### `mailchimp_add_member`
@@ -277,8 +276,7 @@ Delete a member from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the member was successfully deleted |
### `mailchimp_archive_member`
@@ -338,8 +336,8 @@ Retrieve a list of campaigns from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Campaigns data and metadata |
| `success` | boolean | Whether the campaigns were successfully retrieved |
| `output` | object | Campaigns data |
### `mailchimp_get_campaign`
@@ -356,8 +354,8 @@ Retrieve details of a specific campaign from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Campaign data and metadata |
| `success` | boolean | Whether the campaign was successfully retrieved |
| `output` | object | Campaign data |
### `mailchimp_create_campaign`
@@ -414,8 +412,7 @@ Delete a campaign from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the campaign was successfully deleted |
### `mailchimp_send_campaign`
@@ -451,8 +448,7 @@ Schedule a Mailchimp campaign to be sent at a specific time
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Schedule confirmation |
| `success` | boolean | Whether the campaign was successfully scheduled |
### `mailchimp_unschedule_campaign`
@@ -505,7 +501,7 @@ Retrieve the HTML and plain-text content for a Mailchimp campaign
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `success` | boolean | Whether the campaign content was successfully retrieved |
| `output` | object | Campaign content data |
### `mailchimp_set_campaign_content`
@@ -545,8 +541,8 @@ Retrieve a list of automations from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Automations data and metadata |
| `success` | boolean | Whether the automations were successfully retrieved |
| `output` | object | Automations data |
### `mailchimp_get_automation`
@@ -563,8 +559,8 @@ Retrieve details of a specific automation from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Automation data and metadata |
| `success` | boolean | Whether the automation was successfully retrieved |
| `output` | object | Automation data |
### `mailchimp_start_automation`
@@ -638,8 +634,8 @@ Retrieve a list of templates from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Templates data and metadata |
| `success` | boolean | Whether the templates were successfully retrieved |
| `output` | object | Templates data |
### `mailchimp_get_template`
@@ -656,8 +652,8 @@ Retrieve details of a specific template from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Template data and metadata |
| `success` | boolean | Whether the template was successfully retrieved |
| `output` | object | Template data |
### `mailchimp_create_template`
@@ -713,8 +709,7 @@ Delete a template from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the template was successfully deleted |
### `mailchimp_get_campaign_reports`
@@ -732,8 +727,8 @@ Retrieve a list of campaign reports from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Campaign reports data and metadata |
| `success` | boolean | Whether the campaign reports were successfully retrieved |
| `output` | object | Campaign reports data |
### `mailchimp_get_campaign_report`
@@ -750,8 +745,8 @@ Retrieve the report for a specific campaign from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Campaign report data and metadata |
| `success` | boolean | Whether the campaign report was successfully retrieved |
| `output` | object | Campaign report data |
### `mailchimp_get_segments`
@@ -770,8 +765,8 @@ Retrieve a list of segments from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Segments data and metadata |
| `success` | boolean | Whether the segments were successfully retrieved |
| `output` | object | Segments data |
### `mailchimp_get_segment`
@@ -789,8 +784,8 @@ Retrieve details of a specific segment from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Segment data and metadata |
| `success` | boolean | Whether the segment was successfully retrieved |
| `output` | object | Segment data |
### `mailchimp_create_segment`
@@ -849,8 +844,7 @@ Delete a segment from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the segment was successfully deleted |
### `mailchimp_get_segment_members`
@@ -870,8 +864,8 @@ Retrieve members of a specific segment from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Segment members data and metadata |
| `success` | boolean | Whether the segment members were successfully retrieved |
| `output` | object | Segment members data |
### `mailchimp_add_segment_member`
@@ -929,8 +923,8 @@ Retrieve tags associated with a member in a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Member tags data and metadata |
| `success` | boolean | Whether the member tags were successfully retrieved |
| `output` | object | Member tags data |
### `mailchimp_add_member_tags`
@@ -989,8 +983,8 @@ Retrieve a list of merge fields from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Merge fields data and metadata |
| `success` | boolean | Whether the merge fields were successfully retrieved |
| `output` | object | Merge fields data |
### `mailchimp_get_merge_field`
@@ -1008,8 +1002,8 @@ Retrieve details of a specific merge field from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Merge field data and metadata |
| `success` | boolean | Whether the merge field was successfully retrieved |
| `output` | object | Merge field data |
### `mailchimp_create_merge_field`
@@ -1067,8 +1061,7 @@ Delete a merge field from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the merge field was successfully deleted |
### `mailchimp_get_interest_categories`
@@ -1087,8 +1080,8 @@ Retrieve a list of interest categories from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Interest categories data and metadata |
| `success` | boolean | Whether the interest categories were successfully retrieved |
| `output` | object | Interest categories data |
### `mailchimp_get_interest_category`
@@ -1106,8 +1099,8 @@ Retrieve details of a specific interest category from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Interest category data and metadata |
| `success` | boolean | Whether the interest category was successfully retrieved |
| `output` | object | Interest category data |
### `mailchimp_create_interest_category`
@@ -1165,8 +1158,7 @@ Delete an interest category from a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the interest category was successfully deleted |
### `mailchimp_get_interests`
@@ -1186,8 +1178,8 @@ Retrieve a list of interests from an interest category in a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Interests data and metadata |
| `success` | boolean | Whether the interests were successfully retrieved |
| `output` | object | Interests data |
### `mailchimp_get_interest`
@@ -1206,8 +1198,8 @@ Retrieve details of a specific interest from an interest category in a Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Interest data and metadata |
| `success` | boolean | Whether the interest was successfully retrieved |
| `output` | object | Interest data |
### `mailchimp_create_interest`
@@ -1267,8 +1259,7 @@ Delete an interest from an interest category in a Mailchimp audience
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the interest was successfully deleted |
### `mailchimp_get_landing_pages`
@@ -1286,8 +1277,8 @@ Retrieve a list of landing pages from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Landing pages data and metadata |
| `success` | boolean | Whether the landing pages were successfully retrieved |
| `output` | object | Landing pages data |
### `mailchimp_get_landing_page`
@@ -1304,8 +1295,8 @@ Retrieve details of a specific landing page from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Landing page data and metadata |
| `success` | boolean | Whether the landing page was successfully retrieved |
| `output` | object | Landing page data |
### `mailchimp_create_landing_page`
@@ -1360,8 +1351,7 @@ Delete a landing page from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the landing page was successfully deleted |
### `mailchimp_publish_landing_page`
@@ -1415,8 +1405,8 @@ Retrieve a list of batch operations from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Batch operations data and metadata |
| `success` | boolean | Whether the batch operations were successfully retrieved |
| `output` | object | Batch operations data |
### `mailchimp_get_batch_operation`
@@ -1433,8 +1423,8 @@ Retrieve details of a specific batch operation from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Batch operation data and metadata |
| `success` | boolean | Whether the batch operation was successfully retrieved |
| `output` | object | Batch operation data |
### `mailchimp_create_batch_operation`
@@ -1469,12 +1459,6 @@ Delete a batch operation from Mailchimp
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `output` | object | Deletion confirmation |
| `success` | boolean | Whether the batch operation was successfully deleted |
## Notes
- Category: `tools`
- Type: `mailchimp`

View File

@@ -214,8 +214,3 @@ Get details of a specific domain
| `domain` | json | Domain details |
## Notes
- Category: `tools`
- Type: `mailgun`

View File

@@ -96,8 +96,3 @@ Retrieve memories from Mem0 by ID or filter criteria
| `ids` | array | Array of memory IDs that were retrieved |
## Notes
- Category: `tools`
- Type: `mem0`

View File

@@ -97,8 +97,3 @@ Delete memories by conversationId.
| `error` | string | Error message if operation failed |
## Notes
- Category: `blocks`
- Type: `memory`

View File

@@ -51,6 +51,7 @@
"jira_service_management",
"kalshi",
"knowledge",
"lemlist",
"linear",
"linkedin",
"linkup",
@@ -101,7 +102,6 @@
"supabase",
"tavily",
"telegram",
"thinking",
"translate",
"trello",
"tts",

View File

@@ -112,8 +112,3 @@ Create a new worksheet (sheet) in a Microsoft Excel workbook
| `worksheet` | object | Details of the newly created worksheet |
## Notes
- Category: `tools`
- Type: `microsoft_excel`

View File

@@ -294,8 +294,3 @@ Update task details including description, checklist items, and references in Mi
| `metadata` | object | Metadata including taskId |
## Notes
- Category: `tools`
- Type: `microsoft_planner`

View File

@@ -337,8 +337,3 @@ List all members of a Microsoft Teams channel
| `memberCount` | number | Total number of members |
## Notes
- Category: `tools`
- Type: `microsoft_teams`

View File

@@ -59,8 +59,3 @@ Parse PDF documents using Mistral OCR API
| `metadata` | object | Processing metadata including jobId, fileType, pageCount, and usage info |
## Notes
- Category: `tools`
- Type: `mistral_parse`

View File

@@ -172,9 +172,28 @@ Execute MongoDB aggregation pipeline
| `documents` | array | Array of documents returned from aggregation |
| `documentCount` | number | Number of documents returned |
### `mongodb_introspect`
Introspect MongoDB database to list databases, collections, and indexes
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `host` | string | Yes | MongoDB server hostname or IP address |
| `port` | number | Yes | MongoDB server port \(default: 27017\) |
| `database` | string | No | Database name to introspect \(optional - if not provided, lists all databases\) |
| `username` | string | No | MongoDB username |
| `password` | string | No | MongoDB password |
| `authSource` | string | No | Authentication database |
| `ssl` | string | No | SSL connection mode \(disabled, required, preferred\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `databases` | array | Array of database names |
| `collections` | array | Array of collection info with name, type, document count, and indexes |
## Notes
- Category: `tools`
- Type: `mongodb`

View File

@@ -157,9 +157,27 @@ Execute raw SQL query on MySQL database
| `rows` | array | Array of rows returned from the query |
| `rowCount` | number | Number of rows affected |
### `mysql_introspect`
Introspect MySQL database schema to retrieve table structures, columns, and relationships
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `host` | string | Yes | MySQL server hostname or IP address |
| `port` | number | Yes | MySQL server port \(default: 3306\) |
| `database` | string | Yes | Database name to connect to |
| `username` | string | Yes | Database username |
| `password` | string | Yes | Database password |
| `ssl` | string | No | SSL connection mode \(disabled, required, preferred\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `tables` | array | Array of table schemas with columns, keys, and indexes |
| `databases` | array | List of available databases on the server |
## Notes
- Category: `tools`
- Type: `mysql`

View File

@@ -168,9 +168,31 @@ Execute arbitrary Cypher queries on Neo4j graph database for complex operations
| `recordCount` | number | Number of records returned |
| `summary` | json | Execution summary with timing and counters |
### `neo4j_introspect`
Introspect a Neo4j database to discover its schema including node labels, relationship types, properties, constraints, and indexes.
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `host` | string | Yes | Neo4j server hostname or IP address |
| `port` | number | Yes | Neo4j server port \(default: 7687 for Bolt protocol\) |
| `database` | string | Yes | Database name to connect to |
| `username` | string | Yes | Neo4j username |
| `password` | string | Yes | Neo4j password |
| `encryption` | string | No | Connection encryption mode \(enabled, disabled\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `labels` | array | Array of node labels in the database |
| `relationshipTypes` | array | Array of relationship types in the database |
| `nodeSchemas` | array | Array of node schemas with their properties |
| `relationshipSchemas` | array | Array of relationship schemas with their properties |
| `constraints` | array | Array of database constraints |
| `indexes` | array | Array of database indexes |
## Notes
- Category: `tools`
- Type: `neo4j`

View File

@@ -6,36 +6,10 @@ description: Manage Notion pages
import { BlockInfoCard } from "@/components/ui/block-info-card"
<BlockInfoCard
type="notion"
type="notion_v2"
color="#181C1E"
/>
{/* MANUAL-CONTENT-START:intro */}
[Notion](https://www.notion.so) is an all-in-one workspace that combines notes, documents, wikis, and project management tools into a single platform. It offers a flexible and customizable environment where users can create, organize, and collaborate on content in various formats.
With Notion, you can:
- **Create versatile content**: Build documents, wikis, databases, kanban boards, calendars, and more
- **Organize information**: Structure content hierarchically with nested pages and powerful databases
- **Collaborate seamlessly**: Share workspaces and pages with team members for real-time collaboration
- **Customize your workspace**: Design your ideal workflow with flexible templates and building blocks
- **Connect information**: Link between pages and databases to create a knowledge network
- **Access anywhere**: Use Notion across web, desktop, and mobile platforms with automatic syncing
In Sim, the Notion integration enables your agents to interact directly with your Notion workspace programmatically. This allows for powerful automation scenarios such as knowledge management, content creation, and information retrieval. Your agents can:
- **Read Notion pages**: Extract content and metadata from any Notion page.
- **Read Notion databases**: Retrieve database structure and information.
- **Write to pages**: Append new content to existing Notion pages.
- **Create new pages**: Generate new Notion pages under a parent page, with custom titles and content.
- **Query databases**: Search and filter database entries using advanced filter and sort criteria.
- **Search workspace**: Search across your entire Notion workspace for pages or databases matching specific queries.
- **Create new databases**: Programmatically create new databases with custom properties and structure.
This integration bridges the gap between your AI workflows and your knowledge base, enabling seamless documentation and information management. By connecting Sim with Notion, you can automate documentation processes, maintain up-to-date information repositories, generate reports, and organize information intelligently—all through your intelligent agents.
{/* MANUAL-CONTENT-END */}
## Usage Instructions
Integrate with Notion into the workflow. Can read page, read database, create page, create database, append content, query database, and search workspace.
@@ -58,8 +32,11 @@ Read content from a Notion page
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Page content in markdown format with headers, paragraphs, lists, and todos |
| `metadata` | object | Page metadata including title, URL, and timestamps |
| `content` | string | Page content in markdown format |
| `title` | string | Page title |
| `url` | string | Page URL |
| `created_time` | string | Creation timestamp |
| `last_edited_time` | string | Last edit timestamp |
### `notion_read_database`
@@ -75,8 +52,12 @@ Read database information and structure from Notion
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Database information including title, properties schema, and metadata |
| `metadata` | object | Database metadata including title, ID, URL, timestamps, and properties schema |
| `id` | string | Database ID |
| `title` | string | Database title |
| `url` | string | Database URL |
| `created_time` | string | Creation timestamp |
| `last_edited_time` | string | Last edit timestamp |
| `properties` | object | Database properties schema |
### `notion_write`
@@ -93,7 +74,7 @@ Append content to a Notion page
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message confirming content was appended to page |
| `appended` | boolean | Whether content was successfully appended |
### `notion_create_page`
@@ -111,8 +92,11 @@ Create a new page in Notion
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message confirming page creation |
| `metadata` | object | Page metadata including title, page ID, URL, and timestamps |
| `id` | string | Page ID |
| `title` | string | Page title |
| `url` | string | Page URL |
| `created_time` | string | Creation timestamp |
| `last_edited_time` | string | Last edit timestamp |
### `notion_query_database`
@@ -131,8 +115,7 @@ Query and filter Notion database entries with advanced filtering
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Formatted list of database entries with their properties |
| `metadata` | object | Query metadata including total results count, pagination info, and raw results array |
| `results` | array | Array of Notion page objects from the database |
### `notion_search`
@@ -150,8 +133,7 @@ Search across all pages and databases in Notion workspace
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Formatted list of search results including pages and databases |
| `metadata` | object | Search metadata including total results count, pagination info, and raw results array |
| `results` | array | Array of search results \(pages and databases\) |
### `notion_create_database`
@@ -163,18 +145,37 @@ Create a new database in Notion with custom properties
| --------- | ---- | -------- | ----------- |
| `parentId` | string | Yes | ID of the parent page where the database will be created |
| `title` | string | Yes | Title for the new database |
| `properties` | string | No | Database properties as JSON object \(optional, will create a default "Name" property if empty\) |
| `properties` | json | No | Database properties as JSON object \(optional, will create a default "Name" property if empty\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `content` | string | Success message with database details and properties list |
| `metadata` | object | Database metadata including ID, title, URL, creation time, and properties schema |
| `id` | string | Database ID |
| `title` | string | Database title |
| `url` | string | Database URL |
| `created_time` | string | Creation timestamp |
| `properties` | object | Database properties schema |
### `notion_add_database_row`
Add a new row to a Notion database with specified properties
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `databaseId` | string | Yes | ID of the database to add the row to |
| `properties` | json | Yes | Row properties as JSON object matching the database schema \(e.g., \{"Name": \{"title": \[\{"text": \{"content": "Task 1"\}\}\]\}, "Status": \{"select": \{"name": "Done"\}\}\}\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `id` | string | Page/row ID |
| `url` | string | Page/row URL |
| `title` | string | Row title |
| `created_time` | string | Creation timestamp |
| `last_edited_time` | string | Last edit timestamp |
## Notes
- Category: `tools`
- Type: `notion`

View File

@@ -134,8 +134,3 @@ Delete a file or folder from OneDrive
| `fileId` | string | The ID of the deleted file |
## Notes
- Category: `tools`
- Type: `onedrive`

View File

@@ -56,8 +56,3 @@ Generate embeddings from text using OpenAI
| `output` | object | Embeddings generation results |
## Notes
- Category: `tools`
- Type: `openai`

View File

@@ -235,8 +235,3 @@ Copy an Outlook message to another folder
| `destinationFolderId` | string | ID of the destination folder |
## Notes
- Category: `tools`
- Type: `outlook`

View File

@@ -101,8 +101,3 @@ Conduct comprehensive deep research across the web using Parallel AI. Synthesize
| `basis` | array | Citations and sources with reasoning and confidence levels |
## Notes
- Category: `tools`
- Type: `parallel_ai`

View File

@@ -83,8 +83,3 @@ Get ranked search results from Perplexity
| `results` | array | Array of search results |
## Notes
- Category: `tools`
- Type: `perplexity`

View File

@@ -142,8 +142,3 @@ Fetch vectors by ID from a Pinecone index
| `matches` | array | Fetched vectors with ID, values, metadata, and score |
## Notes
- Category: `tools`
- Type: `pinecone`

View File

@@ -55,7 +55,7 @@ Retrieve all deals from Pipedrive with optional filters
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `deals` | array | Array of deal objects from Pipedrive |
| `metadata` | object | Operation metadata |
| `metadata` | object | Pagination metadata for the response |
| `success` | boolean | Operation success status |
### `pipedrive_get_deal`
@@ -73,7 +73,6 @@ Retrieve detailed information about a specific deal
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `deal` | object | Deal object with full details |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_create_deal`
@@ -99,7 +98,6 @@ Create a new deal in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `deal` | object | The created deal object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_update_deal`
@@ -122,7 +120,6 @@ Update an existing deal in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `deal` | object | The updated deal object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_get_files`
@@ -143,7 +140,7 @@ Retrieve files from Pipedrive with optional filters
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `files` | array | Array of file objects from Pipedrive |
| `metadata` | object | Operation metadata |
| `total_items` | number | Total number of files returned |
| `success` | boolean | Operation success status |
### `pipedrive_get_mail_messages`
@@ -162,7 +159,7 @@ Retrieve mail threads from Pipedrive mailbox
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `messages` | array | Array of mail thread objects from Pipedrive mailbox |
| `metadata` | object | Operation metadata |
| `total_items` | number | Total number of mail threads returned |
| `success` | boolean | Operation success status |
### `pipedrive_get_mail_thread`
@@ -180,7 +177,7 @@ Retrieve all messages from a specific mail thread
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `messages` | array | Array of mail message objects from the thread |
| `metadata` | object | Operation metadata including thread ID |
| `metadata` | object | Thread and pagination metadata |
| `success` | boolean | Operation success status |
### `pipedrive_get_pipelines`
@@ -201,7 +198,7 @@ Retrieve all pipelines from Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `pipelines` | array | Array of pipeline objects from Pipedrive |
| `metadata` | object | Operation metadata |
| `total_items` | number | Total number of pipelines returned |
| `success` | boolean | Operation success status |
### `pipedrive_get_pipeline_deals`
@@ -222,7 +219,7 @@ Retrieve all deals in a specific pipeline
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `deals` | array | Array of deal objects from the pipeline |
| `metadata` | object | Operation metadata including pipeline ID |
| `metadata` | object | Pipeline and pagination metadata |
| `success` | boolean | Operation success status |
### `pipedrive_get_projects`
@@ -243,7 +240,7 @@ Retrieve all projects or a specific project from Pipedrive
| --------- | ---- | ----------- |
| `projects` | array | Array of project objects \(when listing all\) |
| `project` | object | Single project object \(when project_id is provided\) |
| `metadata` | object | Operation metadata |
| `total_items` | number | Total number of projects returned |
| `success` | boolean | Operation success status |
### `pipedrive_create_project`
@@ -264,7 +261,6 @@ Create a new project in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `project` | object | The created project object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_get_activities`
@@ -287,7 +283,7 @@ Retrieve activities (tasks) from Pipedrive with optional filters
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `activities` | array | Array of activity objects from Pipedrive |
| `metadata` | object | Operation metadata |
| `total_items` | number | Total number of activities returned |
| `success` | boolean | Operation success status |
### `pipedrive_create_activity`
@@ -313,7 +309,6 @@ Create a new activity (task) in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `activity` | object | The created activity object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_update_activity`
@@ -337,7 +332,6 @@ Update an existing activity (task) in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `activity` | object | The updated activity object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_get_leads`
@@ -361,7 +355,7 @@ Retrieve all leads or a specific lead from Pipedrive
| --------- | ---- | ----------- |
| `leads` | array | Array of lead objects \(when listing all\) |
| `lead` | object | Single lead object \(when lead_id is provided\) |
| `metadata` | object | Operation metadata |
| `total_items` | number | Total number of leads returned |
| `success` | boolean | Operation success status |
### `pipedrive_create_lead`
@@ -386,7 +380,6 @@ Create a new lead in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `lead` | object | The created lead object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_update_lead`
@@ -412,7 +405,6 @@ Update an existing lead in Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `lead` | object | The updated lead object |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
### `pipedrive_delete_lead`
@@ -430,12 +422,6 @@ Delete a specific lead from Pipedrive
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `data` | object | Deletion confirmation data |
| `metadata` | object | Operation metadata |
| `success` | boolean | Operation success status |
## Notes
- Category: `tools`
- Type: `pipedrive`

View File

@@ -333,8 +333,3 @@ Retrieve trade history from Polymarket
| `trades` | array | Array of trade objects |
## Notes
- Category: `tools`
- Type: `polymarket`

View File

@@ -157,9 +157,28 @@ Execute raw SQL query on PostgreSQL database
| `rows` | array | Array of rows returned from the query |
| `rowCount` | number | Number of rows affected |
### `postgresql_introspect`
Introspect PostgreSQL database schema to retrieve table structures, columns, and relationships
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `host` | string | Yes | PostgreSQL server hostname or IP address |
| `port` | number | Yes | PostgreSQL server port \(default: 5432\) |
| `database` | string | Yes | Database name to connect to |
| `username` | string | Yes | Database username |
| `password` | string | Yes | Database password |
| `ssl` | string | No | SSL connection mode \(disabled, required, preferred\) |
| `schema` | string | No | Schema to introspect \(default: public\) |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `tables` | array | Array of table schemas with columns, keys, and indexes |
| `schemas` | array | List of available schemas in the database |
## Notes
- Category: `tools`
- Type: `postgresql`

View File

@@ -77,7 +77,7 @@ Capture multiple events at once in PostHog. Use this for bulk event ingestion to
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `status` | string | Status message indicating whether the batch was captured successfully |
| `eventsProcessed` | number | Number of events processed in the batch |
| `events_processed` | number | Number of events processed in the batch |
### `posthog_list_persons`
@@ -600,9 +600,9 @@ Evaluate feature flags for a specific user or group. This is a public endpoint t
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `featureFlags` | object | Feature flag evaluations \(key-value pairs where values are boolean or string variants\) |
| `featureFlagPayloads` | object | Additional payloads attached to feature flags |
| `errorsWhileComputingFlags` | boolean | Whether there were errors while computing flags |
| `feature_flags` | object | Feature flag evaluations \(key-value pairs where values are boolean or string variants\) |
| `feature_flag_payloads` | object | Additional payloads attached to feature flags |
| `errors_while_computing_flags` | boolean | Whether there were errors while computing flags |
### `posthog_list_experiments`
@@ -1086,8 +1086,3 @@ Get detailed information about a specific organization by ID. Returns comprehens
| `organization` | object | Detailed organization information with settings and features |
## Notes
- Category: `tools`
- Type: `posthog`

View File

@@ -108,8 +108,3 @@ Fetch points by ID from a Qdrant collection
| `status` | string | Status of the fetch operation |
## Notes
- Category: `tools`
- Type: `qdrant`

View File

@@ -165,9 +165,30 @@ Execute raw SQL on Amazon RDS using the Data API
| `rows` | array | Array of rows returned or affected |
| `rowCount` | number | Number of rows affected |
### `rds_introspect`
Introspect Amazon RDS Aurora database schema to retrieve table structures, columns, and relationships
#### Input
| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `region` | string | Yes | AWS region \(e.g., us-east-1\) |
| `accessKeyId` | string | Yes | AWS access key ID |
| `secretAccessKey` | string | Yes | AWS secret access key |
| `resourceArn` | string | Yes | ARN of the Aurora DB cluster |
| `secretArn` | string | Yes | ARN of the Secrets Manager secret containing DB credentials |
| `database` | string | No | Database name \(optional\) |
| `schema` | string | No | Schema to introspect \(default: public for PostgreSQL, database name for MySQL\) |
| `engine` | string | No | Database engine \(aurora-postgresql or aurora-mysql\). Auto-detected if not provided. |
#### Output
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `message` | string | Operation status message |
| `engine` | string | Detected database engine type |
| `tables` | array | Array of table schemas with columns, keys, and indexes |
| `schemas` | array | List of available schemas in the database |
## Notes
- Category: `tools`
- Type: `rds`

View File

@@ -284,8 +284,3 @@ Subscribe or unsubscribe from a subreddit
| `message` | string | Success or error message |
## Notes
- Category: `tools`
- Type: `reddit`

View File

@@ -58,8 +58,3 @@ Send an email using your own Resend API key and from address
| `body` | string | Email body content |
## Notes
- Category: `tools`
- Type: `resend`

View File

@@ -147,8 +147,3 @@ Copy an object within or between AWS S3 buckets
| `metadata` | object | Copy operation metadata |
## Notes
- Category: `tools`
- Type: `s3`

View File

@@ -259,7 +259,7 @@ Get lead(s) from Salesforce
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Lead data |
### `salesforce_create_lead`
@@ -286,8 +286,8 @@ Create a new lead
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Created lead |
| `success` | boolean | Operation success status |
| `output` | object | Created lead data |
### `salesforce_update_lead`
@@ -314,8 +314,8 @@ Update an existing lead
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Updated lead |
| `success` | boolean | Operation success status |
| `output` | object | Updated lead data |
### `salesforce_delete_lead`
@@ -333,8 +333,8 @@ Delete a lead
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Deleted lead |
| `success` | boolean | Operation success status |
| `output` | object | Deleted lead data |
### `salesforce_get_opportunities`
@@ -355,7 +355,7 @@ Get opportunity(ies) from Salesforce
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `success` | boolean | Operation success status |
| `output` | object | Opportunity data |
### `salesforce_create_opportunity`
@@ -380,8 +380,8 @@ Create a new opportunity
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Created opportunity |
| `success` | boolean | Operation success status |
| `output` | object | Created opportunity data |
### `salesforce_update_opportunity`
@@ -406,8 +406,8 @@ Update an existing opportunity
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Updated opportunity |
| `success` | boolean | Operation success status |
| `output` | object | Updated opportunity data |
### `salesforce_delete_opportunity`
@@ -425,8 +425,8 @@ Delete an opportunity
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Deleted opportunity |
| `success` | boolean | Operation success status |
| `output` | object | Deleted opportunity data |
### `salesforce_get_cases`
@@ -447,7 +447,7 @@ Get case(s) from Salesforce
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `success` | boolean | Operation success status |
| `output` | object | Case data |
### `salesforce_create_case`
@@ -472,8 +472,8 @@ Create a new case
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Created case |
| `success` | boolean | Operation success status |
| `output` | object | Created case data |
### `salesforce_update_case`
@@ -495,8 +495,8 @@ Update an existing case
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Updated case |
| `success` | boolean | Operation success status |
| `output` | object | Updated case data |
### `salesforce_delete_case`
@@ -514,8 +514,8 @@ Delete a case
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Deleted case |
| `success` | boolean | Operation success status |
| `output` | object | Deleted case data |
### `salesforce_get_tasks`
@@ -536,7 +536,7 @@ Get task(s) from Salesforce
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `success` | boolean | Operation success status |
| `output` | object | Task data |
### `salesforce_create_task`
@@ -561,8 +561,8 @@ Create a new task
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Created task |
| `success` | boolean | Operation success status |
| `output` | object | Created task data |
### `salesforce_update_task`
@@ -585,8 +585,8 @@ Update an existing task
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Updated task |
| `success` | boolean | Operation success status |
| `output` | object | Updated task data |
### `salesforce_delete_task`
@@ -604,8 +604,8 @@ Delete a task
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success |
| `output` | object | Deleted task |
| `success` | boolean | Operation success status |
| `output` | object | Deleted task data |
### `salesforce_list_reports`
@@ -624,7 +624,7 @@ Get a list of reports accessible by the current user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Reports data |
### `salesforce_get_report`
@@ -643,7 +643,7 @@ Get metadata and describe information for a specific report
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Report metadata |
### `salesforce_run_report`
@@ -664,7 +664,7 @@ Execute a report and retrieve the results
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Report results |
### `salesforce_list_report_types`
@@ -682,7 +682,7 @@ Get a list of available report types
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Report types data |
### `salesforce_list_dashboards`
@@ -701,7 +701,7 @@ Get a list of dashboards accessible by the current user
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Dashboards data |
### `salesforce_get_dashboard`
@@ -720,7 +720,7 @@ Get details and results for a specific dashboard
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Dashboard data |
### `salesforce_refresh_dashboard`
@@ -739,7 +739,7 @@ Refresh a dashboard to get the latest data
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Refreshed dashboard data |
### `salesforce_query`
@@ -758,7 +758,7 @@ Execute a custom SOQL query to retrieve data from Salesforce
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Query results |
### `salesforce_query_more`
@@ -777,7 +777,7 @@ Retrieve additional query results using the nextRecordsUrl from a previous query
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Query results |
### `salesforce_describe_object`
@@ -796,7 +796,7 @@ Get metadata and field information for a Salesforce object
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Object metadata |
### `salesforce_list_objects`
@@ -814,12 +814,7 @@ Get a list of all available Salesforce objects
| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Success status |
| `success` | boolean | Operation success status |
| `output` | object | Objects list |
## Notes
- Category: `tools`
- Type: `salesforce`

View File

@@ -52,8 +52,3 @@ Search the web. Returns the most relevant web results, including title, link, sn
| `cost` | json | Cost information \($0.01\) |
## Notes
- Category: `tools`
- Type: `search`

View File

@@ -400,8 +400,3 @@ Create a new version of an email template in SendGrid
| `updatedAt` | string | Last update timestamp |
## Notes
- Category: `tools`
- Type: `sendgrid`

View File

@@ -303,8 +303,3 @@ Create a deploy record for a Sentry release in a specific environment. Deploys t
| `deploy` | object | The newly created deploy record |
## Notes
- Category: `tools`
- Type: `sentry`

View File

@@ -55,8 +55,3 @@ A powerful web search tool that provides access to Google search results through
| `searchResults` | array | Search results with titles, links, snippets, and type-specific metadata \(date for news, rating for places, imageUrl for images\) |
## Notes
- Category: `tools`
- Type: `serper`

View File

@@ -122,8 +122,3 @@ Delete a record from a ServiceNow table
| `metadata` | json | Operation metadata |
## Notes
- Category: `tools`
- Type: `servicenow`

View File

@@ -181,8 +181,3 @@ Create a directory on a remote SFTP server
| `message` | string | Operation status message |
## Notes
- Category: `tools`
- Type: `sftp`

View File

@@ -189,8 +189,3 @@ Upload files to a SharePoint document library
| `uploadedFiles` | array | Array of uploaded file objects |
## Notes
- Category: `tools`
- Type: `sharepoint`

View File

@@ -442,8 +442,3 @@ Get a specific collection by ID, including its products. Use this to retrieve pr
| `collection` | object | The collection details including its products |
## Notes
- Category: `tools`
- Type: `shopify`

View File

@@ -283,8 +283,3 @@ Add an emoji reaction to a Slack message
| `metadata` | object | Reaction metadata |
## Notes
- Category: `tools`
- Type: `slack`

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