@bubblelab/bubble-core 0.1.38 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/bubble-bundle.d.ts +73 -73
  2. package/dist/bubbles/service-bubble/agi-inc.d.ts +60 -60
  3. package/dist/bubbles/service-bubble/airtable.d.ts +132 -132
  4. package/dist/bubbles/service-bubble/apify/apify.d.ts +4 -4
  5. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +88 -71
  6. package/dist/bubbles/service-bubble/ashby/ashby.d.ts.map +1 -1
  7. package/dist/bubbles/service-bubble/ashby/ashby.js +25 -6
  8. package/dist/bubbles/service-bubble/ashby/ashby.js.map +1 -1
  9. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +18 -3
  10. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts.map +1 -1
  11. package/dist/bubbles/service-bubble/ashby/ashby.schema.js +9 -5
  12. package/dist/bubbles/service-bubble/ashby/ashby.schema.js.map +1 -1
  13. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +23 -23
  14. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +63 -63
  15. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +142 -92
  16. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts.map +1 -1
  17. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js +104 -2
  18. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.js.map +1 -1
  19. package/dist/bubbles/service-bubble/crustdata/index.d.ts +1 -1
  20. package/dist/bubbles/service-bubble/crustdata/index.d.ts.map +1 -1
  21. package/dist/bubbles/service-bubble/crustdata/index.js +2 -0
  22. package/dist/bubbles/service-bubble/crustdata/index.js.map +1 -1
  23. package/dist/bubbles/service-bubble/eleven-labs.d.ts +32 -32
  24. package/dist/bubbles/service-bubble/firecrawl.d.ts +156 -156
  25. package/dist/bubbles/service-bubble/followupboss.d.ts +230 -230
  26. package/dist/bubbles/service-bubble/fullenrich/fullenrich.d.ts +108 -108
  27. package/dist/bubbles/service-bubble/github.d.ts +124 -124
  28. package/dist/bubbles/service-bubble/gmail.d.ts +70 -70
  29. package/dist/bubbles/service-bubble/google-calendar.d.ts +36 -36
  30. package/dist/bubbles/service-bubble/google-drive.d.ts +58 -58
  31. package/dist/bubbles/service-bubble/google-sheets/google-sheets.d.ts +30 -30
  32. package/dist/bubbles/service-bubble/http.d.ts +8 -8
  33. package/dist/bubbles/service-bubble/jira/jira.d.ts +33 -33
  34. package/dist/bubbles/service-bubble/notion/notion.d.ts +80 -80
  35. package/dist/bubbles/service-bubble/resend.d.ts +8 -8
  36. package/dist/bubbles/service-bubble/slack/slack.d.ts +112 -112
  37. package/dist/bubbles/service-bubble/storage.d.ts +30 -30
  38. package/dist/bubbles/service-bubble/telegram.d.ts +214 -214
  39. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +12 -12
  40. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +138 -138
  41. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +42 -6
  42. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -1
  43. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +18 -7
  44. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -1
  45. package/dist/bubbles/tool-bubble/google-maps-tool.d.ts +24 -24
  46. package/dist/bubbles/tool-bubble/instagram-tool.d.ts +4 -4
  47. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +346 -346
  48. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +4 -4
  49. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +165 -165
  50. package/dist/bubbles/tool-bubble/people-search-tool.d.ts.map +1 -1
  51. package/dist/bubbles/tool-bubble/people-search-tool.js +28 -13
  52. package/dist/bubbles/tool-bubble/people-search-tool.js.map +1 -1
  53. package/dist/bubbles/tool-bubble/people-search-utils.d.ts +19 -0
  54. package/dist/bubbles/tool-bubble/people-search-utils.d.ts.map +1 -0
  55. package/dist/bubbles/tool-bubble/people-search-utils.js +268 -0
  56. package/dist/bubbles/tool-bubble/people-search-utils.js.map +1 -0
  57. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
  58. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +4 -4
  59. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +102 -102
  60. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +4 -4
  61. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +4 -4
  62. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +34 -34
  63. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +8 -8
  64. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +4 -4
  65. package/dist/bubbles.json +56 -77
  66. package/package.json +2 -2
package/dist/bubbles.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-01-25T21:48:19.506Z",
3
+ "generatedAt": "2026-01-26T01:21:53.073Z",
4
4
  "totalCount": 56,
5
5
  "bubbles": [
6
6
  {
@@ -9,7 +9,6 @@
9
9
  "type": "service",
10
10
  "shortDescription": "Simple hello world bubble for testing purposes",
11
11
  "useCase": "- Testing the bubble execution system",
12
- "inputSchema": "{\n name: string // Name to include in the greeting message,\n message: string | undefined // Custom greeting message,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
13
12
  "outputSchema": "{\n greeting: string // The generated greeting message,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
14
13
  "inputJsonSchema": {
15
14
  "type": "object",
@@ -69,7 +68,6 @@
69
68
  "type": "service",
70
69
  "shortDescription": "AI agent with LangGraph for tool-enabled conversations, multimodal support, and JSON mode",
71
70
  "useCase": "- Add tools to enhance the AI agent's capabilities (web-search-tool, web-scrape-tool)",
72
- "inputSchema": "{\n message: string // The message or question to send to the AI agent,\n images: { type: \"base64\", data: string // Base64 encoded image data (without data:image/... prefix), mimeType: string // MIME type of the image (e.g., image/png, image/jpeg), description: string | undefined // Optional description or context for the image } | { type: \"url\", url: string // URL to the image (http/https), description: string | undefined // Optional description or context for the image }[] // Array of base64 encoded images to include with the message (for multimodal AI models). Example: [{type: \"base64\", data: \"base64...\", mimeType: \"image/png\", description: \"A beautiful image of a cat\"}] or [{type: \"url\", url: \"https://example.com/image.png\", description: \"A beautiful image of a cat\"}],\n conversationHistory: { role: \"user\" | \"assistant\" | \"tool\" // The role of the message sender, content: string // The message content, toolCallId: string | undefined // Tool call ID for tool messages, name: string | undefined // Tool name for tool messages }[] | undefined // Previous conversation messages for multi-turn conversations. When provided, messages are sent as separate turns to enable KV cache optimization. Format: [{role: \"user\", content: \"...\"}, {role: \"assistant\", content: \"...\"}, ...],\n systemPrompt: string // System prompt that defines the AI agents behavior and personality,\n name: string | undefined // A friendly name for the AI agent,\n model: { model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // AI model to use (format: provider/model-name)., temperature: number // Temperature for response randomness (0 = deterministic, 2 = very random), maxTokens: number | undefined // Maximum number of tokens to generate in response, keep at default of 40000 unless the response is expected to be certain length, reasoningEffort: \"low\" | \"medium\" | \"high\" | undefined // Reasoning effort for model. If not specified, uses primary model reasoningEffort., maxRetries: number // Maximum number of retries for API calls (default: 3). Useful for handling transient errors like 503 Service Unavailable., provider: string[] | undefined // Providers for ai agent (open router only)., jsonMode: boolean // When true, returns clean JSON response, you must provide the exact JSON schema in the system prompt, backupModel: { model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // Backup AI model to use if the primary model fails (format: provider/model-name)., temperature: number | undefined // Temperature for backup model. If not specified, uses primary model temperature., maxTokens: number | undefined // Max tokens for backup model. If not specified, uses primary model maxTokens., reasoningEffort: \"low\" | \"medium\" | \"high\" | undefined // Reasoning effort for backup model. If not specified, uses primary model reasoningEffort., maxRetries: number | undefined // Max retries for backup model. If not specified, uses primary model maxRetries. } | undefined // Backup model configuration to use if the primary model fails. } // AI model configuration including provider, temperature, and tokens, retries, and json mode. Always include this.,\n tools: { name: \"web-search-tool\" | \"web-scrape-tool\" | \"web-crawl-tool\" | \"web-extract-tool\" | \"research-agent-tool\" | \"reddit-scrape-tool\" | \"instagram-tool\" | \"list-bubbles-tool\" | \"get-bubble-details-tool\" | \"get-trigger-detail-tool\" | \"bubbleflow-validation-tool\" | \"code-edit-tool\" | \"chart-js-tool\" | \"amazon-shopping-tool\" | \"linkedin-tool\" | \"tiktok-tool\" | \"twitter-tool\" | \"google-maps-tool\" | \"youtube-tool\" | \"people-search-tool\" | \"sql-query-tool\" // Name of the tool type or tool bubble to enable for the AI agent, config: Record<string, unknown> | undefined // Configuration for the tool or tool bubble }[] // Array of pre-registered tools the AI agent can use. Can be tool types (web-search-tool, web-scrape-tool, web-crawl-tool, web-extract-tool, instagram-tool). If using image models, set the tools to [],\n customTools: { name: string // Unique name for your custom tool (e.g., \"calculate-tax\"), description: string // Description of what the tool does - helps the AI know when to use it, schema: unknown // Zod schema object defining the tool parameters. Can be either a plain object (e.g., { amount: z.number() }) or a Zod object directly (e.g., z.object({ amount: z.number() }))., func: unknown // Async function that executes the tool logic. Receives params matching the schema and returns a result. }[] | undefined // Array of custom runtime-defined tools with their own schemas and functions. Use this to add domain-specific tools without pre-registration. Example: [{ name: \"calculate-tax\", description: \"Calculates sales tax\", schema: { amount: z.number() }, func: async (input) => {...} }],\n maxIterations: number // Maximum number of iterations for the agent workflow, 5 iterations per turn of conversation,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime),\n streaming: boolean // Enable real-time streaming of tokens, tool calls, and iteration progress,\n expectedOutputSchema: unknown | undefined // Zod schema or JSON schema string that defines the expected structure of the AI response. When provided, automatically enables JSON mode and instructs the AI to output in the exact format. Example: z.object({ summary: z.string(), items: z.array(z.object({ name: z.string(), score: z.number() })) })\n}",
73
71
  "outputSchema": "{\n response: string // The AI agents final response to the user message. For text responses, returns plain text. If JSON mode is enabled, returns a JSON string. For image generation models (like gemini-2.5-flash-image-preview), returns base64-encoded image data with data URI format (data:image/png;base64,...),\n toolCalls: { tool: string // Name of the tool that was called, input: unknown // Input parameters passed to the tool, output: unknown // Output returned by the tool }[] // Array of tool calls made during the conversation,\n iterations: number // Number of back-and-forth iterations in the agent workflow,\n error: string // Error message of the run, undefined if successful,\n success: boolean // Whether the agent execution completed successfully\n}",
74
72
  "inputJsonSchema": {
75
73
  "type": "object",
@@ -533,7 +531,6 @@
533
531
  "type": "service",
534
532
  "shortDescription": "Execute PostgreSQL queries with operation validation",
535
533
  "useCase": "- Data retrieval with SELECT queries",
536
- "inputSchema": "{\n ignoreSSL: boolean // Ignore SSL certificate errors when connecting to the database,\n query: unknown // SQL query to execute against the PostgreSQL database (use parameterized queries with $1, $2, etc.),\n allowedOperations: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"WITH\" | \"EXPLAIN\" | \"ANALYZE\" | \"SHOW\" | \"DESCRIBE\" | \"DESC\" | \"CREATE\"[] // List of allowed SQL operations for security (defaults to read-only operations),\n parameters: unknown[] | undefined // Parameters for parameterized queries (e.g., [value1, value2] for $1, $2),\n timeout: number // Query timeout in milliseconds (default: 30 seconds, max recommended: 300000),\n maxRows: number // Maximum number of rows to return to prevent large result sets (default: 1000),\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
537
534
  "outputSchema": "{\n rows: Record<string, unknown>[] // Array of result rows, each row is an object with column names as keys,\n rowCount: number | null // Number of rows affected by the query (null for SELECT queries),\n command: string // SQL command that was executed (SELECT, INSERT, UPDATE, DELETE),\n fields: { name: string // Column name, dataTypeID: number // PostgreSQL data type identifier }[] | undefined // Metadata about the columns returned by the query,\n executionTime: number // Query execution time in milliseconds,\n success: boolean // Whether the query executed successfully,\n error: string // Error message if query execution failed (empty string if successful),\n cleanedJSONString: string // Clean JSON string representation of the row data, suitable for AI prompts and integrations\n}",
538
535
  "inputJsonSchema": {
539
536
  "type": "object",
@@ -691,7 +688,6 @@
691
688
  "type": "service",
692
689
  "shortDescription": "Slack integration for messaging and workspace management",
693
690
  "useCase": "General purpose bubble for various workflow needs",
694
- "inputSchema": "Complex schema - see usage example for structure",
695
691
  "outputSchema": "Complex schema - see usage example for structure",
696
692
  "inputJsonSchema": {
697
693
  "anyOf": [
@@ -3927,7 +3923,6 @@
3927
3923
  "type": "service",
3928
3924
  "shortDescription": "Telegram Bot API integration for messaging and bot management",
3929
3925
  "useCase": "- Send text messages, photos, and documents to chats",
3930
- "inputSchema": "Complex schema - see usage example for structure",
3931
3926
  "outputSchema": "Complex schema - see usage example for structure",
3932
3927
  "inputJsonSchema": {
3933
3928
  "anyOf": [
@@ -7325,7 +7320,6 @@
7325
7320
  "type": "service",
7326
7321
  "shortDescription": "Email sending service via Resend API",
7327
7322
  "useCase": "- Send transactional emails with HTML and text content",
7328
- "inputSchema": "Complex schema - see usage example for structure",
7329
7323
  "outputSchema": "Complex schema - see usage example for structure",
7330
7324
  "inputJsonSchema": {
7331
7325
  "anyOf": [
@@ -7618,7 +7612,6 @@
7618
7612
  "type": "service",
7619
7613
  "shortDescription": "Makes HTTP requests to external APIs and services",
7620
7614
  "useCase": "- Calling external REST APIs",
7621
- "inputSchema": "{\n url: string // The URL to make the HTTP request to,\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"HEAD\" | \"OPTIONS\" // HTTP method to use (default: GET),\n headers: Record<string, string> | undefined // HTTP headers to include in the request,\n body: unknown | undefined // Request body (string or JSON object),\n timeout: number // Request timeout in milliseconds (default: 30000, max: 120000),\n followRedirects: boolean // Whether to follow HTTP redirects (default: true),\n authType: \"none\" | \"bearer\" | \"basic\" | \"api-key\" | \"api-key-header\" | \"custom\" // Authentication type: none (default), bearer (Authorization: Bearer), basic (Authorization: Basic), api-key (X-API-Key), api-key-header (Api-Key), custom (user-specified header),\n authHeader: string | undefined // Custom header name when authType is \"custom\" (e.g., \"X-Custom-Auth\"),\n credentials: Record<string, string> | undefined // Optional credentials for authentication (injected at runtime)\n}",
7622
7615
  "outputSchema": "{\n status: number // HTTP status code,\n statusText: string // HTTP status text,\n headers: Record<string, string> // Response headers,\n body: string // Response body as string,\n json: unknown | undefined // Parsed JSON response (if applicable),\n success: boolean // Whether the request was successful (HTTP 2xx status codes),\n error: string // Error message if request failed,\n responseTime: number // Response time in milliseconds,\n size: number // Response size in bytes\n}",
7623
7616
  "inputJsonSchema": {
7624
7617
  "type": "object",
@@ -7768,7 +7761,6 @@
7768
7761
  "type": "service",
7769
7762
  "shortDescription": "Cloudflare R2 storage operations for file management",
7770
7763
  "useCase": "- Generate presigned upload URLs for client-side file uploads",
7771
- "inputSchema": "Complex schema - see usage example for structure",
7772
7764
  "outputSchema": "Complex schema - see usage example for structure",
7773
7765
  "inputJsonSchema": {
7774
7766
  "anyOf": [
@@ -8278,7 +8270,6 @@
8278
8270
  "type": "service",
8279
8271
  "shortDescription": "Google Drive integration for file management",
8280
8272
  "useCase": "- Upload files and documents to Google Drive",
8281
- "inputSchema": "Complex schema - see usage example for structure",
8282
8273
  "outputSchema": "Complex schema - see usage example for structure",
8283
8274
  "inputJsonSchema": {
8284
8275
  "anyOf": [
@@ -9403,7 +9394,6 @@
9403
9394
  "type": "service",
9404
9395
  "shortDescription": "Gmail integration for email management",
9405
9396
  "useCase": "- Send and receive emails with rich formatting",
9406
- "inputSchema": "Complex schema - see usage example for structure",
9407
9397
  "outputSchema": "Complex schema - see usage example for structure",
9408
9398
  "inputJsonSchema": {
9409
9399
  "anyOf": [
@@ -11417,7 +11407,6 @@
11417
11407
  "type": "service",
11418
11408
  "shortDescription": "Google Sheets integration for spreadsheet operations",
11419
11409
  "useCase": "- Read and write spreadsheet data with flexible ranges",
11420
- "inputSchema": "Complex schema - see usage example for structure",
11421
11410
  "outputSchema": "Complex schema - see usage example for structure",
11422
11411
  "inputJsonSchema": {
11423
11412
  "anyOf": [
@@ -12809,7 +12798,6 @@
12809
12798
  "type": "service",
12810
12799
  "shortDescription": "Google Calendar integration for managing events",
12811
12800
  "useCase": "- List calendars and events with filters and pagination",
12812
- "inputSchema": "Complex schema - see usage example for structure",
12813
12801
  "outputSchema": "Complex schema - see usage example for structure",
12814
12802
  "inputJsonSchema": {
12815
12803
  "anyOf": [
@@ -14176,7 +14164,6 @@
14176
14164
  "type": "service",
14177
14165
  "shortDescription": "Discover and run specialized Apify actors for complex web scraping tasks not covered by standard tools",
14178
14166
  "useCase": "- Discovering available actors and their schemas then",
14179
- "inputSchema": "{\n actorId: string | undefined // The Apify actor to run. Examples: \"apify/instagram-scraper\", \"apify/reddit-scraper\", etc. Required when running an actor, not needed for discovery mode.,\n search: string | undefined // Search query to discover available Apify actors. When provided, this triggers discovery mode to search for actors matching the query and return their schemas and information.,\n limit: number | undefined // Maximum number of actors to return in discovery mode (default: 20, max: 100),\n input: Record<string, unknown> // Input parameters for the actor. Structure depends on the specific actor being used. Not used in discovery mode.,\n waitForFinish: boolean | undefined // Whether to wait for the actor run to complete before returning,\n timeout: number | undefined // Maximum time to wait for actor completion in milliseconds (default: 120000),\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
14180
14167
  "outputSchema": "{\n runId: string // Apify actor run ID,\n status: string // Actor run status (READY, RUNNING, SUCCEEDED, FAILED, etc.),\n datasetId: string | undefined // Dataset ID where results are stored,\n items: unknown[] | undefined // Array of scraped items (if waitForFinish is true). Structure depends on the actor. For discovery mode, contains actor information with schemas.,\n itemsCount: number | undefined // Total number of items scraped,\n consoleUrl: string // URL to view the actor run in Apify console,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed,\n discoveredActors: { id: string // Actor ID (e.g., \"apify/instagram-scraper\"), name: string // Full actor path (e.g., \"beauty/linkedin-jobs-scraper\"), description: string | null | undefined // Actor description, inputSchemaUrl: string // URL to the actor input schema page. Use the web scrape tool to scrape from this URL (e.g., https://apify.com/apify/google-search-scraper/input-schema) to get the input/output schema details., stars: number | null | undefined // Actor rating (if available), usage: { totalRuns: number | undefined, usersCount: number | undefined } | null | undefined // Basic usage stats, requiresRental: boolean | undefined // Whether this actor requires rental/private access (filtered out when true) }[] | undefined // Discovered actors with description and input schema URL (only present in discovery mode)\n}",
14181
14168
  "inputJsonSchema": {
14182
14169
  "type": "object",
@@ -14338,7 +14325,6 @@
14338
14325
  "type": "service",
14339
14326
  "shortDescription": "GitHub API integration for repository operations",
14340
14327
  "useCase": "- Code review automation and PR management",
14341
- "inputSchema": "Complex schema - see usage example for structure",
14342
14328
  "outputSchema": "Complex schema - see usage example for structure",
14343
14329
  "inputJsonSchema": {
14344
14330
  "anyOf": [
@@ -15984,7 +15970,6 @@
15984
15970
  "type": "service",
15985
15971
  "shortDescription": "Follow Up Boss CRM integration",
15986
15972
  "useCase": "- Manage contacts/people with full CRUD operations",
15987
- "inputSchema": "Complex schema - see usage example for structure",
15988
15973
  "outputSchema": "Complex schema - see usage example for structure",
15989
15974
  "inputJsonSchema": {
15990
15975
  "anyOf": [
@@ -19488,7 +19473,6 @@
19488
19473
  "type": "service",
19489
19474
  "shortDescription": "Notion API integration for pages, databases, and blocks",
19490
19475
  "useCase": "- Content management and automation",
19491
- "inputSchema": "Complex schema - see usage example for structure",
19492
19476
  "outputSchema": "Complex schema - see usage example for structure",
19493
19477
  "inputJsonSchema": {
19494
19478
  "anyOf": [
@@ -30624,7 +30608,6 @@
30624
30608
  "type": "workflow",
30625
30609
  "shortDescription": "Analyzes database schema structure and metadata",
30626
30610
  "useCase": "General purpose bubble for various workflow needs",
30627
- "inputSchema": "{\n dataSourceType: \"postgresql\" // Data source type to analyze,\n ignoreSSLErrors: boolean // Ignore SSL certificate errors,\n includeMetadata: boolean // Include enum values and column constraints,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime),\n injectedMetadata: { tables: Record<string, Record<string, string>> | undefined, tableNotes: Record<string, string> | undefined, rules: string[] | undefined } | undefined // Additional database context injected from user credentials metadata\n}",
30628
30611
  "outputSchema": "{\n success: boolean,\n error: string,\n databaseSchema: { rawData: Record<string, unknown>[] | undefined, cleanedJSON: string | undefined, tableCount: number | undefined, tableNames: string[] | undefined } | undefined,\n analysisSummary: { dataSourceType: string, connectionSuccessful: boolean, analysisTimestamp: unknown } | undefined\n}",
30629
30612
  "inputJsonSchema": {
30630
30613
  "type": "object",
@@ -30760,7 +30743,6 @@
30760
30743
  "type": "workflow",
30761
30744
  "shortDescription": "Data analyst-powered Slack notifications that tell compelling stories",
30762
30745
  "useCase": "General purpose bubble for various workflow needs",
30763
- "inputSchema": "{\n contentToFormat: string // Raw content or data to format for Slack,\n originalUserQuery: string | undefined // Original user question or context,\n targetChannel: string // Slack channel name (without #) or channel ID,\n messageTitle: string | undefined // Custom title for the Slack message,\n messageStyle: \"professional\" | \"casual\" | \"technical\" | \"concise\" | \"detailed\" // Style and tone for message formatting,\n includeFormatting: boolean // Include emojis and rich Slack formatting,\n maxMessageLength: number // Maximum message length for Slack,\n aiModel: { model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\", temperature: number, maxTokens: number } | undefined // AI model settings for content formatting,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
30764
30746
  "outputSchema": "{\n success: boolean,\n error: string,\n messageInfo: { messageTimestamp: string | undefined, channelId: string | undefined, channelName: string | undefined, formattedMessage: string | undefined, messageLength: number | undefined } | undefined,\n formattingInfo: { modelUsed: string | undefined, wasTruncated: boolean, originalLength: number | undefined } | undefined\n}",
30765
30747
  "inputJsonSchema": {
30766
30748
  "type": "object",
@@ -30929,7 +30911,6 @@
30929
30911
  "type": "workflow",
30930
30912
  "shortDescription": "AI-powered Slack bot that answers data questions by querying databases",
30931
30913
  "useCase": "General purpose bubble for various workflow needs",
30932
- "inputSchema": "{\n slackChannel: string // Slack channel ID where the bot will respond,\n slackThreadTs: string | undefined // Thread timestamp if replying to a thread,\n userQuestion: string // The user question from Slack,\n userName: string | undefined // Name of the user asking the question,\n name: string // Name of the AI assistant (e.g., \"DataBot\", \"Analytics Assistant\"),\n dataSourceType: \"postgresql\" | \"mysql\" | \"sqlite\" | \"mariadb\" | \"mssql\" // Type of database to analyze,\n databaseUrl: string | undefined // Database connection URL (if not using credentials),\n ignoreSSLErrors: boolean // Ignore SSL certificate errors for database connection,\n aiModel: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // AI model to use for query generation,\n temperature: number // Temperature for AI responses (lower = more focused),\n verbosity: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" // Response verbosity level (1=concise, 5=comprehensive),\n technicality: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" // Technical complexity level (1=plain English, 5=expert),\n includeQuery: boolean // Include the SQL query in the response,\n includeExplanation: boolean // Include query explanation in the response,\n injectedMetadata: { tables: Record<string, Record<string, string>> | undefined, tableNotes: Record<string, string> | undefined, rules: string[] | undefined } | undefined // Additional database context injected from user credentials metadata,\n additionalContext: string | undefined // Additional context about how to answer the question,\n maxQueries: number // Maximum number of queries to run,\n credentials: Record<string, string> | undefined // Credentials for various services\n}",
30933
30914
  "outputSchema": "{\n success: boolean // Whether the workflow completed successfully,\n error: string // Error message if workflow failed,\n query: string | undefined // Generated SQL query,\n queryExplanation: string | undefined // Explanation of the query,\n queryResults: Record<string, unknown>[] | undefined // Results from the database query,\n formattedResponse: string | undefined // Formatted response for Slack,\n slackBlocks: unknown[] | undefined // Slack block kit formatted message,\n slackMessageTs: string | undefined // Timestamp of sent Slack message,\n isDataQuestion: boolean | undefined // Whether the question was data-related,\n metadata: { executionTime: number // Total execution time in milliseconds, rowCount: number | undefined // Number of rows returned, wordCount: number | undefined // Word count of response } | undefined\n}",
30934
30915
  "inputJsonSchema": {
30935
30916
  "type": "object",
@@ -31186,7 +31167,6 @@
31186
31167
  "type": "service",
31187
31168
  "shortDescription": "AI agent for creating well-formatted Slack messages with adjustable verbosity and technicality",
31188
31169
  "useCase": "General purpose bubble for various workflow needs",
31189
- "inputSchema": "{\n message: string // The message or question to send to the AI agent,\n verbosity: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" // Response verbosity level (1-5): 1=concise bullet points, 5=comprehensive explanations,\n technicality: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" // Technical complexity level (1-5): 1=plain English, 5=expert terminology,\n includeBlockKit: boolean // Include Slack Block Kit JSON for rich formatting,\n includeQuery: boolean // Include the query that was executed in the response,\n includeExplanation: boolean // Include explanation of what the query does and why it was chosen,\n model: { model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // AI model to use (format: provider/model-name), temperature: number // Temperature for response randomness (0 = deterministic, 2 = very random), maxTokens: number | undefined // Maximum number of tokens to generate in response } // AI model configuration including provider, temperature, and tokens,\n tools: { name: string // Name of the tool bubble to enable for the AI agent, config: Record<string, unknown> | undefined // Configuration for the tool bubble }[] // Array of tool bubbles the AI agent can use,\n maxIterations: number // Maximum number of iterations for the agent workflow,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime),\n additionalContext: string | undefined // Additional context about how to answer the question\n}",
31190
31170
  "outputSchema": "{\n response: string // The AI agents formatted response in Slack markdown,\n blocks: { type: \"section\" | \"header\" | \"divider\" | \"context\" | \"actions\" | \"input\" | \"file\" | \"image\", text: { type: \"plain_text\" | \"mrkdwn\", text: string, emoji: boolean | undefined, verbatim: boolean | undefined } | undefined, block_id: string | undefined, accessory: unknown | undefined, fields: { type: \"plain_text\" | \"mrkdwn\", text: string, emoji: boolean | undefined, verbatim: boolean | undefined }[] | undefined, element: unknown | undefined, label: unknown | undefined, hint: unknown | undefined, optional: boolean | undefined, alt_text: string | undefined, image_url: string | undefined, title: { type: \"plain_text\", text: string, emoji: boolean | undefined } | undefined, elements: { type: \"plain_text\" | \"mrkdwn\", text: string, emoji: boolean | undefined, verbatim: boolean | undefined }[] | undefined }[] | undefined // Slack Block Kit formatted blocks for rich message display,\n metadata: { verbosityLevel: string // Applied verbosity level, technicalityLevel: string // Applied technicality level, wordCount: number // Total word count of response, blockCount: number | undefined // Number of Slack blocks generated } // Metadata about the formatting,\n toolCalls: { tool: string // Name of the tool that was called, input: unknown // Input parameters passed to the tool, output: unknown // Output returned by the tool }[] | undefined // Array of tool calls made during the conversation,\n iterations: number // Number of back-and-forth iterations in the agent workflow,\n error: string // Error message of the run, undefined if successful,\n success: boolean // Whether the agent execution completed successfully\n}",
31191
31171
  "inputJsonSchema": {
31192
31172
  "type": "object",
@@ -31586,7 +31566,6 @@
31586
31566
  "type": "workflow",
31587
31567
  "shortDescription": "PDF form field operations (discover, fill, analyze, validate, convert-to-images, convert-to-markdown)",
31588
31568
  "useCase": "General purpose bubble for various workflow needs",
31589
- "inputSchema": "Complex schema - see usage example for structure",
31590
31569
  "outputSchema": "Complex schema - see usage example for structure",
31591
31570
  "inputJsonSchema": {
31592
31571
  "anyOf": [
@@ -32270,7 +32249,6 @@
32270
32249
  "type": "workflow",
32271
32250
  "shortDescription": "PDF OCR workflow: identify fields or autofill forms using AI analysis",
32272
32251
  "useCase": "- **Identify**: Form schema generation, document structure analysis",
32273
- "inputSchema": "Complex schema - see usage example for structure",
32274
32252
  "outputSchema": "Complex schema - see usage example for structure",
32275
32253
  "inputJsonSchema": {
32276
32254
  "anyOf": [
@@ -32884,7 +32862,6 @@
32884
32862
  "type": "workflow",
32885
32863
  "shortDescription": "Generate Document workflow: convert markdown to structured formats using AI",
32886
32864
  "useCase": "General purpose bubble for various workflow needs",
32887
- "inputSchema": "{\n documents: { content: string, index: number, metadata: { originalFilename: string | undefined, pageCount: number | undefined, uploadedImages: { pageNumber: number, fileName: string, fileUrl: string | undefined }[] | undefined } | undefined }[] // Array of document objects with content, index, and metadata,\n outputDescription: string // Description of what the user wants to extract (e.g., \"expense tracking with vendor, amount, date, category\"),\n outputFormat: \"html\" | \"csv\" | \"json\" // Output format for the structured data,\n aiOptions: { model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // AI model to use for document analysis, temperature: number // Temperature for AI responses (lower = more consistent), maxTokens: number // Maximum tokens for AI response, jsonMode: boolean // Enable JSON mode to ensure clean JSON output } // AI agent configuration options,\n credentials: Record<string, string> | undefined // Credentials for AI model access (GOOGLE_GEMINI_CRED, OPENAI_CRED, etc.)\n}",
32888
32865
  "outputSchema": "{\n columns: { name: string // Column name, type: \"string\" | \"number\" | \"integer\" | \"float\" | \"date\" | \"boolean\" // Data type of the column, description: string // Description of what this column contains }[] // Column definitions for the structured data,\n rows: Record<string, unknown>[] // Array of data rows extracted from documents,\n metadata: { totalDocuments: number // Number of documents processed, totalRows: number // Number of data rows extracted, totalColumns: number // Number of columns in the result, processingTime: number // Processing time in milliseconds, extractedFrom: string[] // Summary of document sources } // Metadata about the extraction process,\n generatedFiles: { html: string | undefined // Generated HTML table, csv: string | undefined // Generated CSV data, json: string | undefined // Generated JSON data } // Generated files in requested formats,\n aiAnalysis: { model: string // AI model used, iterations: number // Number of AI iterations, processingTime: number | undefined // AI processing time } // AI analysis metadata,\n success: boolean // Whether the workflow completed successfully,\n error: string // Error message if workflow failed\n}",
32889
32866
  "inputJsonSchema": {
32890
32867
  "type": "object",
@@ -33213,7 +33190,6 @@
33213
33190
  "type": "workflow",
33214
33191
  "shortDescription": "Parse Document workflow: convert PDFs/images to markdown using AI vision",
33215
33192
  "useCase": "General purpose bubble for various workflow needs",
33216
- "inputSchema": "{\n documentData: string // Base64 encoded document data (PDF or image) OR R2 file URL starting with https://,\n documentType: \"pdf\" | \"image\" // Type of document being processed,\n isFileUrl: boolean | undefined // Set to true if documentData is an R2 file URL instead of base64,\n conversionOptions: { preserveStructure: boolean // Maintain original document structure and hierarchy, includeVisualDescriptions: boolean // Include detailed descriptions of charts, images, and diagrams, extractNumericalData: boolean // Extract specific numerical values from charts and tables, combinePages: boolean // Deprecated: Pages are always kept separate with clear headers } // Options for document conversion and parsing,\n imageOptions: { format: \"png\" | \"jpeg\" // Output image format for PDF conversion, quality: number // Image quality (0.1-1.0, higher = better quality), dpi: number // Output DPI for PDF conversion (higher = better quality), pages: number[] | undefined // Specific page numbers to process (1-indexed) } // Options for PDF to images conversion,\n aiOptions: { model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // AI model to use for document analysis and conversion, temperature: number // Temperature for AI responses (balanced for accuracy vs recitation), maxTokens: number // Maximum tokens for AI response, jsonMode: boolean // Use JSON mode for structured output } // AI agent configuration options,\n storageOptions: { uploadImages: boolean // Whether to upload converted page images to S3, bucketName: string | undefined // S3 bucket name for image uploads, pageImageUrls: { pageNumber: number, uploadUrl: string, fileName: string }[] | undefined // Pre-generated upload URLs for page images, userId: string | undefined // User ID for secure file isolation } | undefined // Storage options for uploading page images,\n credentials: Record<string, string> | undefined // Credentials for AI model access (GOOGLE_GEMINI_CRED, OPENAI_CRED, etc.)\n}",
33217
33193
  "outputSchema": "{\n markdown: string // Generated markdown content from the document,\n pages: { pageNumber: number // Page number (1-indexed), markdown: string // Markdown content for this page, hasCharts: boolean // Whether this page contains charts or graphs, hasTables: boolean // Whether this page contains tables, hasImages: boolean // Whether this page contains images }[] // Per-page analysis results,\n metadata: { totalPages: number // Total number of pages processed, processedPages: number // Number of pages successfully processed, hasVisualElements: boolean // Whether document contains charts, tables, or images, processingTime: number // Total processing time in milliseconds, imageFormat: string // Image format used for conversion, imageDpi: number // DPI used for image conversion } // Metadata about the parsing process,\n conversionSummary: { totalCharacters: number // Total characters in generated markdown, tablesExtracted: number // Number of tables converted to markdown, chartsDescribed: number // Number of charts and graphs described, imagesDescribed: number // Number of images described } // Summary of conversion results,\n aiAnalysis: { model: string // AI model used for analysis, iterations: number // Number of AI iterations, processingTime: number // AI processing time in milliseconds } // AI analysis metadata,\n uploadedImages: { pageNumber: number, fileName: string, fileUrl: string | undefined, uploaded: boolean }[] | undefined // Information about uploaded page images,\n success: boolean // Whether the workflow completed successfully,\n error: string // Error message if workflow failed\n}",
33218
33194
  "inputJsonSchema": {
33219
33195
  "type": "object",
@@ -33632,8 +33608,7 @@
33632
33608
  "type": "tool",
33633
33609
  "shortDescription": "Provides detailed information about a specific bubble, including schema, parameters, and documentation",
33634
33610
  "useCase": "- AI agent understanding of specific bubble capabilities",
33635
- "inputSchema": "{\n bubbleName: string // The name of the bubble to get details about,\n includeInputSchema: boolean | undefined // Include input parameter schema in the response,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
33636
- "outputSchema": "{\n name: string // Name of the bubble,\n alias: string | undefined // Short alias for the bubble,\n inputSchema: string | undefined // String representation of the input parameter schema types,\n outputSchema: string // String representation of the output schema types,\n usageExample: string // Code example showing how to use the bubble,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
33611
+ "outputSchema": "{\n name: string // Name of the bubble,\n alias: string | undefined // Short alias for the bubble,\n longDescription: string | undefined // Detailed description of the bubble,\n inputSchema: string | undefined // String representation of the input parameter schema types,\n outputSchema: string // String representation of the output schema types,\n usageExample: string // Code example showing how to use the bubble,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
33637
33612
  "inputJsonSchema": {
33638
33613
  "type": "object",
33639
33614
  "properties": {
@@ -33642,17 +33617,25 @@
33642
33617
  "minLength": 1,
33643
33618
  "description": "The name of the bubble to get details about"
33644
33619
  },
33645
- "includeInputSchema": {
33646
- "type": "boolean",
33647
- "default": false,
33648
- "description": "Include input parameter schema in the response"
33649
- },
33650
33620
  "credentials": {
33651
33621
  "type": "object",
33652
33622
  "additionalProperties": {
33653
33623
  "type": "string"
33654
33624
  },
33655
33625
  "description": "Object mapping credential types to values (injected at runtime)"
33626
+ },
33627
+ "config": {
33628
+ "type": "object",
33629
+ "properties": {
33630
+ "includeLongDescription": {
33631
+ "type": "boolean"
33632
+ },
33633
+ "includeInputSchema": {
33634
+ "type": "boolean"
33635
+ }
33636
+ },
33637
+ "additionalProperties": false,
33638
+ "description": "Tool configuration injected at runtime from AI agent"
33656
33639
  }
33657
33640
  },
33658
33641
  "required": [
@@ -33671,6 +33654,10 @@
33671
33654
  "type": "string",
33672
33655
  "description": "Short alias for the bubble"
33673
33656
  },
33657
+ "longDescription": {
33658
+ "type": "string",
33659
+ "description": "Detailed description of the bubble"
33660
+ },
33674
33661
  "inputSchema": {
33675
33662
  "type": "string",
33676
33663
  "description": "String representation of the input parameter schema types"
@@ -33701,7 +33688,7 @@
33701
33688
  ],
33702
33689
  "additionalProperties": false
33703
33690
  },
33704
- "usageExample": "// Example usage of get-bubble-details-tool bubble\nconst getBubbleDetailsTool = new GetBubbleDetailsTool({\n bubbleName: \"example string\", // The name of the bubble to get details about,\n includeInputSchema: false // default, // Include input parameter schema in the response,\n});\n\nconst result = await getBubbleDetailsTool.action();\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`${metadata.name} failed: ${result.error}`);\n}\n\n// outputSchema for result.data:\n// {\n// name: string // Name of the bubble,\n// alias: string | undefined // Short alias for the bubble,\n// inputSchema: string | undefined // String representation of the input parameter schema types,\n// outputSchema: string // String representation of the output schema types,\n// usageExample: string // Code example showing how to use the bubble,\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
33691
+ "usageExample": "// Example usage of get-bubble-details-tool bubble\nconst getBubbleDetailsTool = new GetBubbleDetailsTool({\n bubbleName: \"example string\", // The name of the bubble to get details about,\n config: { includeLongDescription: true, includeInputSchema: true }, // Tool configuration injected at runtime from AI agent,\n});\n\nconst result = await getBubbleDetailsTool.action();\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`${metadata.name} failed: ${result.error}`);\n}\n\n// outputSchema for result.data:\n// {\n// name: string // Name of the bubble,\n// alias: string | undefined // Short alias for the bubble,\n// longDescription: string | undefined // Detailed description of the bubble,\n// inputSchema: string | undefined // String representation of the input parameter schema types,\n// outputSchema: string // String representation of the output schema types,\n// usageExample: string // Code example showing how to use the bubble,\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
33705
33692
  "requiredCredentials": []
33706
33693
  },
33707
33694
  {
@@ -33710,7 +33697,6 @@
33710
33697
  "type": "tool",
33711
33698
  "shortDescription": "Provides detailed information about BubbleFlow trigger types including setup guides and payload schemas",
33712
33699
  "useCase": "- Understanding how to configure a specific trigger (Slack, Cron, Webhook)",
33713
- "inputSchema": "{\n triggerType: string | undefined // The trigger type to get details about (e.g., 'slack/bot_mentioned', 'webhook/http'). If not provided, returns a list of all available triggers.,\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
33714
33700
  "outputSchema": "{\n triggerType: string | undefined // The requested trigger type,\n serviceName: string | undefined // Service name for logo lookup (e.g., Slack, Cron),\n friendlyName: string | undefined // Human-friendly trigger name,\n description: string | undefined // Description of what this trigger does,\n setupGuide: string | undefined // Markdown setup guide for configuring this trigger,\n payloadSchema: string | undefined // JSON Schema string for the payload,\n payloadTypeInterface: string | undefined // TypeScript interface name to use for the payload (e.g., SlackMentionEvent),\n availableTriggers: { type: string, friendlyName: string, description: string }[] | undefined // List of all available triggers (when no specific trigger requested),\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
33715
33701
  "inputJsonSchema": {
33716
33702
  "type": "object",
@@ -33808,7 +33794,6 @@
33808
33794
  "type": "tool",
33809
33795
  "shortDescription": "Lists all available bubbles in the registry",
33810
33796
  "useCase": "- AI agent discovery of available capabilities",
33811
- "inputSchema": "Complex schema - see usage example for structure",
33812
33797
  "outputSchema": "{\n bubbles: { name: string // Name of the bubble, alias: string | undefined // Short alias for the bubble, shortDescription: string // Brief description of the bubble functionality, useCase: string // Primary use cases for the bubble, type: string // Type of bubble (service, workflow, tool) }[] // Array of bubble information objects,\n totalCount: number // Total number of bubbles in the registry,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
33813
33798
  "inputJsonSchema": {
33814
33799
  "type": "object",
@@ -33884,7 +33869,6 @@
33884
33869
  "type": "tool",
33885
33870
  "shortDescription": "Execute read-only SQL queries against PostgreSQL databases for data analysis",
33886
33871
  "useCase": "- AI agents performing iterative database exploration",
33887
- "inputSchema": "{\n query: string // SQL query to execute (SELECT, WITH, EXPLAIN, ANALYZE, SHOW, DESCRIBE only),\n reasoning: string // Explain why you're running this specific query and what you hope to learn from it,\n credentials: Record<string, string> | undefined // Database credentials (injected at runtime),\n config: Record<string, unknown> | undefined // Configuration for the tool bubble\n}",
33888
33872
  "outputSchema": "{\n rows: Record<string, unknown>[] | undefined // Array of query result rows as objects,\n rowCount: number // Number of rows returned by the query,\n executionTime: number // Query execution time in milliseconds,\n fields: { name: string // Name of the column, dataTypeID: number | undefined // PostgreSQL data type ID for the column }[] | undefined // Array of column metadata from the query result,\n success: boolean // Whether the query execution was successful,\n error: string // Error message if query execution failed\n}",
33889
33873
  "inputJsonSchema": {
33890
33874
  "type": "object",
@@ -33984,7 +33968,6 @@
33984
33968
  "type": "tool",
33985
33969
  "shortDescription": "Generate Chart.js configurations from data for interactive visualizations",
33986
33970
  "useCase": "- Converting SQL query results into visual charts",
33987
- "inputSchema": "{\n data: Record<string, unknown>[] // Array of data objects (typically from SQL query results),\n chartType: \"line\" | \"bar\" | \"pie\" | \"doughnut\" | \"radar\" | \"scatter\" | \"bubble\" | \"polarArea\" // Type of chart to generate,\n xColumn: string | undefined // Column name to use for X-axis (auto-detected if not provided),\n yColumn: string | undefined // Column name to use for Y-axis (auto-detected if not provided),\n groupByColumn: string | undefined // Column to group data by for multiple series,\n options: { title: string | undefined // Chart title, xAxisLabel: string | undefined // X-axis label, yAxisLabel: string | undefined // Y-axis label, colorScheme: \"default\" | \"viridis\" | \"plasma\" | \"inferno\" | \"magma\" | \"blues\" | \"greens\" | \"reds\" | \"oranges\" | \"categorical\" // Color scheme for the chart, responsive: boolean // Make chart responsive, maintainAspectRatio: boolean // Maintain aspect ratio, showLegend: boolean // Show chart legend, showTooltips: boolean // Show tooltips on hover } | undefined // Chart customization options,\n advancedConfig: Record<string, unknown> | undefined // Advanced Chart.js configuration object (overrides simple options),\n reasoning: string // Explain why this chart type and configuration was chosen,\n generateFile: boolean // Generate an actual chart image file (PNG format),\n filePath: string | undefined // Custom file path for generated chart (defaults to temp directory),\n fileName: string | undefined // Custom file name for generated chart (defaults to auto-generated name),\n width: number | undefined // Chart width in pixels (default: 800),\n height: number | undefined // Chart height in pixels (default: 600),\n credentials: Record<string, string> | undefined // Credentials (HIDDEN from AI - injected at runtime),\n config: Record<string, unknown> | undefined // Configuration for the tool bubble (HIDDEN from AI - injected at runtime)\n}",
33988
33971
  "outputSchema": "{\n chartConfig: Record<string, unknown> // Complete Chart.js configuration object,\n chartType: string // Chart type that was generated,\n datasetCount: number // Number of datasets in the chart,\n dataPointCount: number // Total number of data points,\n suggestedSize: { width: number, height: number } // Suggested canvas size for the chart,\n metadata: { xColumn: string | undefined, yColumn: string | undefined, groupByColumn: string | undefined, colorScheme: string, generatedAt: string } // Metadata about chart generation,\n filePath: string | undefined // Path to generated chart file (if generateFile was true),\n fileExists: boolean | undefined // Whether the generated file exists on disk,\n fileSize: number | undefined // Size of generated file in bytes,\n success: boolean,\n error: string\n}",
33989
33972
  "inputJsonSchema": {
33990
33973
  "type": "object",
@@ -34235,7 +34218,6 @@
34235
34218
  "type": "tool",
34236
34219
  "shortDescription": "Validates BubbleFlow TypeScript code for syntax and structure",
34237
34220
  "useCase": "- When an AI agent needs to validate user-provided BubbleFlow code",
34238
- "inputSchema": "{\n code: string // TypeScript code to validate,\n options: { includeDetails: boolean // Include detailed bubble analysis, strictMode: boolean // Enable strict TypeScript validation } | undefined // Validation configuration options,\n credentials: Record<string, string> | undefined // Credentials (HIDDEN from AI - injected at runtime),\n config: Record<string, unknown> | undefined // Configuration for the validation tool (HIDDEN from AI - injected at runtime)\n}",
34239
34221
  "outputSchema": "{\n valid: boolean // Whether the code is valid,\n errors: string[] | undefined // List of validation errors if any,\n bubbleCount: number | undefined // Number of bubbles found in the code,\n bubbles: { variableName: string // Variable name assigned to the bubble, bubbleName: string // Type of bubble (e.g., postgresql, slack), className: string // Bubble class name (e.g., PostgreSQLBubble), hasAwait: boolean // Whether the bubble call is awaited, hasActionCall: boolean // Whether .action() is called, parameterCount: number // Number of parameters passed to the bubble }[] | undefined,\n variableTypes: { name: string // Variable name, type: string // Variable type, line: number // Line number, column: number // Column number }[] | undefined // Details about each bubble found,\n metadata: { validatedAt: string // Timestamp when validation was performed, codeLength: number // Length of the code in characters, strictMode: boolean // Whether strict mode was used },\n success: boolean // Whether the validation operation was successful,\n error: string // Error message if validation failed\n}",
34240
34222
  "inputJsonSchema": {
34241
34223
  "type": "object",
@@ -34419,7 +34401,6 @@
34419
34401
  "type": "tool",
34420
34402
  "shortDescription": "Applies code edits to BubbleFlow files using Morph Fast Apply",
34421
34403
  "useCase": "- When an AI agent needs to make edits to BubbleFlow code",
34422
- "inputSchema": "{\n initialCode: string // The original code to be edited,\n instructions: string // A single sentence instruction in first person describing what changes are being made (e.g., \"I am adding error handling to the user auth and removing the old auth functions\"). Used to help disambiguate uncertainty in the edit.,\n codeEdit: string // The code changes to apply. Specify ONLY the precise lines of code that you wish to edit. Use \"// ... existing code ...\" to represent unchanged sections. DO NOT omit spans of pre-existing code without using the marker, as this may cause inadvertent deletion.,\n morphModel: string | undefined // Morph model to use for applying edits via OpenRouter,\n credentials: Record<string, string> | undefined // Credentials (HIDDEN from AI - injected at runtime),\n config: Record<string, unknown> | undefined // Configuration for the edit tool (HIDDEN from AI - injected at runtime)\n}",
34423
34404
  "outputSchema": "{\n mergedCode: string // The final code after applying edits,\n applied: boolean // Whether the edit was successfully applied,\n diff: string | undefined // Unified diff showing the changes made (if available),\n metadata: { editedAt: string // Timestamp when edit was performed, originalLength: number // Length of original code in characters, finalLength: number // Length of final code in characters, morphModel: string // Morph model used for the edit },\n success: boolean // Whether the edit operation was successful,\n error: string // Error message if edit failed\n}",
34424
34405
  "inputJsonSchema": {
34425
34406
  "type": "object",
@@ -34533,7 +34514,6 @@
34533
34514
  "type": "tool",
34534
34515
  "shortDescription": "Performs web searches using Firecrawl to find current information from the web",
34535
34516
  "useCase": "- Finding current events and news",
34536
- "inputSchema": "{\n query: string // The search query to execute,\n limit: number // Maximum number of search results to return,\n categories: \"research\" | \"pdf\" | \"github\"[] // Categories to find most relevant search results (research, pdf, github),\n location: string | undefined // Location parameter for search results (e.g., \"us\", \"uk\"),\n credentials: Record<string, string> | undefined // Required credentials including FIRECRAWL_API_KEY\n}",
34537
34517
  "outputSchema": "{\n results: { title: string // Title of the search result, url: string // URL of the search result, content: string // Content snippet from the search result }[] // Array of search results with title, URL, and content,\n query: string // The original search query,\n totalResults: number // Number of results returned,\n searchEngine: string // Search engine used (Firecrawl),\n creditsUsed: number // Number of credits used,\n success: boolean // Whether the search was successful,\n error: string // Error message if search failed\n}",
34538
34518
  "inputJsonSchema": {
34539
34519
  "type": "object",
@@ -34657,7 +34637,6 @@
34657
34637
  "type": "tool",
34658
34638
  "shortDescription": "Scrapes content from a single web page. Useful after web-search-tool to get the full content of a page. Also useful if you need to understand a site's structure or content.",
34659
34639
  "useCase": "General purpose bubble for various workflow needs",
34660
- "inputSchema": "{\n url: string // The URL to scrape content from,\n format: \"markdown\" | \"html\" // Content format to extract (default: markdown), only use html if looking for particular html elements,\n onlyMainContent: boolean // Extract only main content, filtering out navigation/footers,\n credentials: Record<string, string> | undefined // Required credentials including FIRECRAWL_API_KEY\n}",
34661
34640
  "outputSchema": "{\n content: string // Scraped content in requested format,\n title: string // Page title if available,\n url: string // The original URL that was scraped,\n format: string // Format of the returned content,\n success: boolean // Whether the scraping was successful,\n error: string // Error message if scraping failed,\n creditsUsed: number // Number of credits used,\n metadata: { statusCode: number | undefined, loadTime: number | undefined } | undefined // Additional metadata about the scrape\n}",
34662
34641
  "inputJsonSchema": {
34663
34642
  "type": "object",
@@ -34762,7 +34741,6 @@
34762
34741
  "type": "tool",
34763
34742
  "shortDescription": "Extracts structured data from web pages using Firecrawl AI-powered extraction with custom prompts and schemas",
34764
34743
  "useCase": "General purpose bubble for various workflow needs",
34765
- "inputSchema": "{\n url: string // The URL to extract structured data from,\n prompt: string // Detailed prompt describing what data to extract from the web page,\n schema: string // JSON schema string defining the structure of the data to extract,\n timeout: number | undefined // Timeout in milliseconds for the extraction (default: 30000),\n credentials: Record<string, string> | undefined // Required credentials including FIRECRAWL_API_KEY\n}",
34766
34744
  "outputSchema": "{\n url: string // The original URL that was processed,\n success: boolean // Whether the extraction was successful,\n error: string // Error message if extraction failed,\n extractedData: unknown // The extracted structured data matching the provided schema,\n metadata: { extractionTime: number | undefined, pageTitle: string | undefined, statusCode: number | undefined } | undefined // Additional metadata about the extraction\n}",
34767
34745
  "inputJsonSchema": {
34768
34746
  "type": "object",
@@ -34858,7 +34836,6 @@
34858
34836
  "type": "tool",
34859
34837
  "shortDescription": "AI-powered research agent that searches and scrapes the internet to gather structured information",
34860
34838
  "useCase": "- Market research with structured competitor analysis",
34861
- "inputSchema": "{\n task: string // The research task that requires searching the internet and gathering information,\n expectedResultSchema: unknown // Zod schema or JSON schema string that defines the expected structure of the research result. Example: z.object({ trends: z.array(z.string()).describe(\"An array of trends\"), summary: z.string().describe(\"A summary of the trends\") }) or JSON.stringify({ type: \"object\", properties: { trends: { type: \"array\", items: { type: \"string\" } }, summary: { type: \"string\" } } }),\n model: \"openai/gpt-5\" | \"openai/gpt-5-mini\" | \"openai/gpt-5.1\" | \"openai/gpt-5.2\" | \"google/gemini-2.5-pro\" | \"google/gemini-2.5-flash\" | \"google/gemini-2.5-flash-lite\" | \"google/gemini-2.5-flash-image-preview\" | \"google/gemini-3-pro-preview\" | \"google/gemini-3-pro-image-preview\" | \"google/gemini-3-flash-preview\" | \"anthropic/claude-sonnet-4-5\" | \"anthropic/claude-opus-4-5\" | \"anthropic/claude-haiku-4-5\" | \"openrouter/x-ai/grok-code-fast-1\" | \"openrouter/z-ai/glm-4.6\" | \"openrouter/anthropic/claude-sonnet-4.5\" | \"openrouter/google/gemini-3-pro-preview\" | \"openrouter/morph/morph-v3-large\" | \"openrouter/x-ai/grok-4.1-fast\" | \"openrouter/openai/gpt-oss-120b\" | \"openrouter/deepseek/deepseek-chat-v3.1\" // Model to use for the research agent (default: google/gemini-3-pro-preview),\n maxTokens: number | undefined // Maximum number of tokens for the research agent (default: 40000),\n maxIterations: number // Maximum number of iterations for the research agent (default: 100),\n credentials: Record<string, string> | undefined // Required credentials\n}",
34862
34839
  "outputSchema": "{\n result: unknown // The research result matching the expected JSON schema structure, parsed to object,\n summary: string // 1-2 sentence summary of what research was conducted and completed,\n sourcesUsed: string[] // Array of URLs and sources that were searched and scraped during research,\n iterationsUsed: number // Number of AI agent iterations used to complete the research,\n success: boolean // Whether the research task was completed successfully,\n error: string // Error message if research failed\n}",
34863
34840
  "inputJsonSchema": {
34864
34841
  "type": "object",
@@ -34988,7 +34965,6 @@
34988
34965
  "type": "tool",
34989
34966
  "shortDescription": "Scrapes posts from any Reddit subreddit with flexible filtering and sorting options",
34990
34967
  "useCase": "General purpose bubble for various workflow needs",
34991
- "inputSchema": "{\n subreddit: unknown // Name of the subreddit to scrape (with or without r/ prefix),\n limit: number // Maximum number of posts to fetch (1-1000, default: 25),\n sort: \"hot\" | \"new\" | \"top\" | \"rising\" // Sorting method for posts (default: hot),\n timeFilter: \"hour\" | \"day\" | \"week\" | \"month\" | \"year\" | \"all\" | undefined // Time filter for \"top\" sort (only applies when sort=top),\n filterToday: boolean // Filter results to only include posts from today,\n includeStickied: boolean // Include stickied/pinned posts in results,\n minScore: number | undefined // Minimum upvote score required for posts,\n credentials: Record<string, string> | undefined // Optional credentials for enhanced features\n}",
34992
34968
  "outputSchema": "{\n posts: { title: string // Post title, url: string // Post URL (external link or Reddit permalink), author: string // Username of the post author, score: number // Post upvote score, numComments: number // Number of comments on the post, createdUtc: number // Post creation timestamp (Unix UTC), postUrl: string // Reddit url to the post, selftext: string // Post content text (for text posts/self posts). Empty for link posts which don't have text content., subreddit: string // Subreddit name, postHint: string | null | undefined // Post type hint (image, video, link, etc.), isSelf: boolean // Whether this is a text post (true) or link post (false), thumbnail: string | undefined // Thumbnail image URL if available, domain: string | undefined // Domain of external link, flair: string | undefined // Post flair text }[] // Array of scraped Reddit posts,\n metadata: { subreddit: string // Subreddit that was scraped, requestedLimit: number // Number of posts requested, actualCount: number // Actual number of posts returned, filteredCount: number // Number of posts after filtering, sort: string // Sorting method used, timeFilter: string | undefined // Time filter used (if any), scrapedAt: string // ISO timestamp when scraping occurred, apiEndpoint: string // Reddit API endpoint used } // Metadata about the scraping operation,\n success: boolean // Whether the scraping was successful,\n error: string // Error message if scraping failed\n}",
34993
34969
  "inputJsonSchema": {
34994
34970
  "type": "object",
@@ -35219,7 +35195,6 @@
35219
35195
  "type": "tool",
35220
35196
  "shortDescription": "Scrape Instagram profiles and posts with a simple, unified interface. Works with individual user profiles and hashtags.",
35221
35197
  "useCase": "**",
35222
- "inputSchema": "{\n operation: \"scrapeProfile\" | \"scrapeHashtag\" // Operation to perform: scrapeProfile for user profiles, scrapeHashtag for hashtag posts,\n profiles: string[] | undefined // Instagram usernames or profile URLs to scrape (for scrapeProfile operation). Examples: [\"@username\", \"https://www.instagram.com/username/\"],\n hashtags: string[] | undefined // Hashtags to scrape (for scrapeHashtag operation). Examples: [\"ai\", \"tech\"] or [\"https://www.instagram.com/explore/tags/ai\"],\n limit: number | undefined // Maximum number of posts to fetch (default: 20 for profiles, 50 for hashtags),\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
35223
35198
  "outputSchema": "{\n operation: \"scrapeProfile\" | \"scrapeHashtag\" // Operation that was performed,\n posts: { url: string | null // Post URL, caption: string | null // Post caption text, likesCount: number | null // Number of likes, commentsCount: number | null // Number of comments, ownerUsername: string | null // Post owner username, timestamp: string | null // Post timestamp (ISO format), type: \"image\" | \"video\" | \"carousel\" | null // Post media type, displayUrl: string | null // Main display image URL, hashtags: string[] | null // Hashtags in the post }[] // Array of Instagram posts scraped,\n profiles: { username: string // Instagram username, fullName: string | null // Full name, bio: string | null // Profile bio, followersCount: number | null // Number of followers, followingCount: number | null // Number of following, postsCount: number | null // Total posts, isVerified: boolean | null // Verification status, profilePicUrl: string | null // Profile picture URL }[] | undefined // Profile information for each scraped profile (only for scrapeProfile operation),\n scrapedHashtags: string[] | undefined // List of hashtags that were scraped (only for scrapeHashtag operation),\n scrapedProfiles: string[] | undefined // List of profile usernames that were scraped (only for scrapeProfile operation),\n totalPosts: number // Total number of posts scraped,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
35224
35199
  "inputJsonSchema": {
35225
35200
  "type": "object",
@@ -35457,7 +35432,6 @@
35457
35432
  "type": "tool",
35458
35433
  "shortDescription": "Scrape LinkedIn posts by profile or search by keyword. Get engagement metrics, media, and complete metadata.",
35459
35434
  "useCase": "**",
35460
- "inputSchema": "{\n operation: \"scrapePosts\" | \"searchPosts\" | \"scrapeJobs\" // Operation to perform: scrapePosts (profiles), searchPosts (keywords), or scrapeJobs,\n username: string | undefined // LinkedIn username (for scrapePosts operation). Examples: \"satyanadella\", \"billgates\",\n keyword: string | undefined // Keyword or phrase to search for (for searchPosts/scrapeJobs). Examples: \"AI\", \"hiring\", \"Software Engineer\",\n location: string | undefined // Location for job search (e.g. \"San Francisco\", \"Remote\") (scrapeJobs only),\n jobType: \"full-time\" | \"part-time\" | \"contract\" | \"temporary\" | \"internship\"[] | undefined // Filter by job type (scrapeJobs only),\n workplaceType: \"on-site\" | \"remote\" | \"hybrid\"[] | undefined // Filter by workplace type (scrapeJobs only),\n experienceLevel: \"internship\" | \"entry-level\" | \"associate\" | \"mid-senior\" | \"director\" | \"executive\"[] | undefined // Filter by experience level (scrapeJobs only),\n sortBy: \"relevance\" | \"date_posted\" | undefined // Sort results by relevance or date posted (for searchPosts operation, default: relevance),\n dateFilter: \"past-24h\" | \"past-week\" | \"past-month\" | undefined // Filter posts/jobs by date range (searchPosts/scrapeJobs). Options: past-24h, past-week, past-month. Leave empty for no date filter.,\n limit: number | undefined // Maximum number of items to fetch (default: 50),\n pageNumber: number | undefined // Page number for pagination (default: 1),\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
35461
35435
  "outputSchema": "{\n operation: \"scrapePosts\" | \"searchPosts\" | \"scrapeJobs\" // Operation that was performed,\n jobs: { id: string | null // Job ID, title: string | null // Job title, company: { name: string | null, url: string | null, logo: string | null } | null // Company info, location: string | null // Job location, description: string | null // Job description, employmentType: string | null // Employment type, seniorityLevel: string | null // Seniority level, postedAt: string | null // Posted date, url: string | null // Job URL, applyUrl: string | null // Apply URL, salary: { from: number | null, to: number | null, currency: string | null, period: string | null } | null // Salary info, skills: string[] | null // Required skills }[] | undefined // Array of LinkedIn jobs,\n posts: { urn: string | null // Post URN, fullUrn: string | null // Full URN with prefix, postedAt: { date: string | null // Post date (formatted string), relative: string | null // Relative time (e.g., \"2 days ago\"), timestamp: number | null // Unix timestamp in milliseconds } | null // When post was created, text: string | null // Post text content, url: string | null // Post URL, postType: string | null // Post type (regular, quote, etc), author: { firstName: string | null // Author first name, lastName: string | null // Author last name, headline: string | null // Author headline/title, username: string | null // Author username, profileUrl: string | null // Author profile URL, profilePicture: string | null // Author profile picture URL } | null // Post author information, stats: { totalReactions: number | null // Total number of reactions, like: number | null // Number of likes, support: number | null // Number of support reactions, love: number | null // Number of love reactions, insight: number | null // Number of insight reactions, celebrate: number | null // Number of celebrate reactions, funny: number | null // Number of funny reactions, comments: number | null // Number of comments, reposts: number | null // Number of reposts } | null // Post engagement statistics, media: { type: string | null // Media type (image, video, images), url: string | null // Media URL, thumbnail: string | null // Media thumbnail URL, images: { url: string | null, width: number | null, height: number | null }[] | null // Array of images for multi-image posts } | null // Post media content, article: { url: string | null, title: string | null, subtitle: string | null, thumbnail: string | null } | null // Shared article information, document: { title: string | null, pageCount: number | null, url: string | null, thumbnail: string | null } | null // Shared document information, resharedPost: { urn: string | null, postedAt: { date: string | null // Post date (formatted string), relative: string | null // Relative time (e.g., \"2 days ago\"), timestamp: number | null // Unix timestamp in milliseconds } | null, text: string | null, url: string | null, postType: string | null, author: { firstName: string | null // Author first name, lastName: string | null // Author last name, headline: string | null // Author headline/title, username: string | null // Author username, profileUrl: string | null // Author profile URL, profilePicture: string | null // Author profile picture URL } | null, stats: { totalReactions: number | null // Total number of reactions, like: number | null // Number of likes, support: number | null // Number of support reactions, love: number | null // Number of love reactions, insight: number | null // Number of insight reactions, celebrate: number | null // Number of celebrate reactions, funny: number | null // Number of funny reactions, comments: number | null // Number of comments, reposts: number | null // Number of reposts } | null, media: { type: string | null // Media type (image, video, images), url: string | null // Media URL, thumbnail: string | null // Media thumbnail URL, images: { url: string | null, width: number | null, height: number | null }[] | null // Array of images for multi-image posts } | null } | null // Original post that was reshared }[] // Array of LinkedIn posts,\n username: string | undefined // LinkedIn username that was scraped (only for scrapePosts operation),\n paginationToken: string | null | undefined // Token for fetching next page of results (only for scrapePosts operation),\n keyword: string | undefined // Search keyword that was used (only for searchPosts operation),\n totalResults: number | null | undefined // Total results available (only for searchPosts operation),\n hasNextPage: boolean | null | undefined // Whether there are more results (only for searchPosts operation),\n totalPosts: number // Total number of posts found,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
35462
35436
  "inputJsonSchema": {
35463
35437
  "type": "object",
@@ -36296,7 +36270,6 @@
36296
36270
  "type": "tool",
36297
36271
  "shortDescription": "Scrape TikTok profiles, videos, and hashtags.",
36298
36272
  "useCase": "General purpose bubble for various workflow needs",
36299
- "inputSchema": "{\n operation: \"scrapeProfile\" | \"scrapeHashtag\" | \"scrapeVideo\" // Operation to perform,\n profiles: string[] | undefined // TikTok profile URLs to scrape (for scrapeProfile),\n hashtags: string[] | undefined // Hashtags to scrape (for scrapeHashtag),\n videoUrls: string[] | undefined // Video URLs to scrape (for scrapeVideo),\n limit: number | undefined // Number of results in total to fetch,\n shouldDownloadVideos: boolean | undefined // Whether to download video files,\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
36300
36273
  "outputSchema": "{\n operation: \"scrapeProfile\" | \"scrapeHashtag\" | \"scrapeVideo\" // Operation that was performed,\n videos: { id: string | null // Video ID, text: string | null // Video caption/description, createTime: number | null // Creation timestamp, createTimeISO: string | null // Creation time (ISO format), author: { id: string | null // Author user ID, uniqueId: string | null // Author username, nickname: string | null // Author display name, avatarThumb: string | null // Author avatar URL, signature: string | null // Author bio/signature, verified: boolean | null // Whether author is verified, followerCount: number | null // Number of followers, followingCount: number | null // Number of following, videoCount: number | null // Total number of videos, heartCount: number | null // Total likes received } | null // Video author information, stats: { diggCount: number | null // Number of likes, shareCount: number | null // Number of shares, commentCount: number | null // Number of comments, playCount: number | null // Number of plays/views, collectCount: number | null // Number of times collected } | null // Video engagement statistics, videoUrl: string | null // Video URL, webVideoUrl: string | null // Web video URL, covers: string[] | null // Array of cover image URLs, hashtags: { name: string | null }[] | null // Hashtags used in the video }[] // Array of scraped videos,\n totalVideos: number // Total number of videos scraped,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
36301
36274
  "inputJsonSchema": {
36302
36275
  "type": "object",
@@ -36589,7 +36562,6 @@
36589
36562
  "type": "tool",
36590
36563
  "shortDescription": "Scrape Twitter/X profiles, tweets, and search results with a simple, unified interface.",
36591
36564
  "useCase": "**",
36592
- "inputSchema": "{\n operation: \"scrapeProfile\" | \"search\" | \"scrapeUrl\" // Operation to perform: scrapeProfile (get tweets from user handles), search (search tweets by query), scrapeUrl (scrape specific Twitter URLs),\n twitterHandles: string[] | undefined // [scrapeProfile] Twitter handles/usernames to scrape (without @). Example: [\"elonmusk\", \"OpenAI\"],\n searchTerms: string[] | undefined // [search] Search queries. Supports advanced search syntax: https://github.com/igorbrigadir/twitter-advanced-search. Example: [\"AI news\", \"#machinelearning\"],\n startUrls: string[] | undefined // [scrapeUrl] Direct Twitter URLs to scrape. Supports Tweet, Profile, Search, or List URLs. Example: [\"https://twitter.com/elonmusk/status/123456\"],\n maxItems: number | undefined // Maximum number of tweets to return (default: 20, max: 1000),\n sort: \"Top\" | \"Latest\" | undefined // [search only] Sort results by \"Top\" (most relevant) or \"Latest\" (most recent),\n tweetLanguage: string | undefined // Filter tweets by language using ISO 639-1 code (e.g., \"en\" for English, \"es\" for Spanish),\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
36593
36565
  "outputSchema": "{\n operation: \"scrapeProfile\" | \"search\" | \"scrapeUrl\" // Operation that was performed,\n tweets: { id: string | null // Tweet ID, url: string | null // Tweet URL, text: string | null // Tweet text content, author: { id: string | null // User ID, name: string | null // User display name, userName: string | null // User handle (username), description: string | null // User bio, isVerified: boolean | null // Whether user is verified, isBlueVerified: boolean | null // Whether user has Twitter Blue, profilePicture: string | null // Profile picture URL, followers: number | null // Number of followers, following: number | null // Number of following, tweetsCount: number | null // Total number of tweets, url: string | null // Profile URL, createdAt: string | null // Account creation date } | null // Tweet author information, createdAt: string | null // Tweet creation date (ISO format), stats: { retweetCount: number | null, replyCount: number | null, likeCount: number | null, quoteCount: number | null, viewCount: number | null, bookmarkCount: number | null } | null // Tweet engagement statistics, lang: string | null // Tweet language code, media: { type: string | null, url: string | null, width: number | null, height: number | null, duration: number | null }[] | null // Media attachments, entities: { hashtags: string[] | null, urls: string[] | null, mentions: string[] | null } | null // Tweet entities, isRetweet: boolean | null, isQuote: boolean | null, isReply: boolean | null }[] // Array of scraped tweets,\n totalTweets: number // Total number of tweets scraped,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
36594
36566
  "inputJsonSchema": {
36595
36567
  "type": "object",
@@ -36956,7 +36928,6 @@
36956
36928
  "type": "tool",
36957
36929
  "shortDescription": "Scrape Google Maps business listings, reviews, and place data.",
36958
36930
  "useCase": "General purpose bubble for various workflow needs",
36959
- "inputSchema": "{\n operation: \"search\" // Operation (only search supported),\n queries: string[] // Search queries (e.g. \"restaurants in NYC\"),\n location: string | undefined // Location to focus search (e.g. \"New York, USA\"),\n limit: number | undefined // Maximum number of places to scrape per query,\n language: string | undefined // Result language,\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
36960
36931
  "outputSchema": "{\n operation: \"search\" // Operation performed,\n places: { title: string | null // Place name, placeId: string | null // Place ID, url: string | null // Place URL, address: string | null // Full address, category: string | null // Primary category, website: string | null // Website URL, phone: string | null // Phone number, rating: number | null // Average rating, reviewsCount: number | null // Total reviews, priceLevel: string | null // Price level, isAdvertisement: boolean | null // Is sponsored, location: { lat: number | null, lng: number | null } | null // Coordinates, openingHours: { day: string | null, hours: unknown }[] | null // Opening hours, reviews: { name: string | null // Reviewer name, rating: number | null // Rating (1-5), text: string | null // Review text, publishedAtDate: string | null // Publish date, likesCount: number | null // Number of likes, responseFromOwnerText: string | null // Owner response }[] | null // Recent reviews, imageUrls: string[] | null // Image URLs, additionalInfo: Record<string, string[]> | null // Additional attributes (accessibility, amenities, etc.) }[] // Found places,\n totalPlaces: number // Total places found,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
36961
36932
  "inputJsonSchema": {
36962
36933
  "type": "object",
@@ -37254,7 +37225,6 @@
37254
37225
  "type": "tool",
37255
37226
  "shortDescription": "Search YouTube videos, extract transcripts, and scrape channel content with a simple interface",
37256
37227
  "useCase": "General purpose bubble for various workflow needs",
37257
- "inputSchema": "{\n operation: \"searchVideos\" | \"getTranscript\" | \"scrapeChannel\" // Operation: searchVideos for search/URLs, getTranscript for transcripts, scrapeChannel for channel videos. Not all videos will have transcript available.,\n searchQueries: string[] | undefined // Search queries for YouTube (for searchVideos). Examples: [\"AI tutorials\", \"react hooks\"],\n videoUrls: string[] | undefined // Direct YouTube URLs - videos, channels, playlists (for searchVideos or getTranscript),\n channelUrl: string | undefined // YouTube channel URL (for scrapeChannel operation),\n videoUrl: string | undefined // Single video URL for transcript extraction (for getTranscript),\n maxResults: number | undefined // Max videos to fetch (default: 20),\n includeShorts: boolean | undefined // Include YouTube Shorts in results,\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
37258
37228
  "outputSchema": "{\n operation: \"searchVideos\" | \"getTranscript\" | \"scrapeChannel\" // Operation performed,\n videos: { title: string | null // Video title, id: string | null // YouTube video ID, url: string | null // Video URL, viewCount: number | null // Number of views, likes: number | null // Number of likes, date: string | null // Upload date (ISO format), channelName: string | null // Channel name, channelUrl: string | null // Channel URL, subscribers: number | null // Number of channel subscribers, duration: string | null // Video duration (HH:MM:SS), description: string | null // Video description, comments: number | null // Number of comments, thumbnail: string | null // Thumbnail URL }[] | undefined // Array of YouTube videos,\n transcript: { start: string | null // Start time in seconds, duration: string | null // Duration in seconds, text: string | null // Transcript text }[] | undefined // Video transcript with timestamps,\n fullTranscriptText: string | undefined // Complete transcript as plain text,\n totalResults: number // Total number of results,\n success: boolean // Whether operation succeeded,\n error: string // Error message if failed\n}",
37259
37229
  "inputJsonSchema": {
37260
37230
  "type": "object",
@@ -37485,7 +37455,6 @@
37485
37455
  "type": "tool",
37486
37456
  "shortDescription": "Multi-page web crawling tool for exploring entire websites and subdomains.",
37487
37457
  "useCase": "General purpose bubble for various workflow needs",
37488
- "inputSchema": "{\n url: string // The root URL to crawl and extract content from,\n format: \"markdown\" // Output format for crawled content,\n onlyMainContent: boolean // Extract only main content, filtering out navigation/footers,\n maxPages: number | undefined // Maximum number of pages to crawl,\n crawlDepth: number | undefined // Maximum depth to crawl,\n includePaths: string[] | undefined // URL patterns to include in crawl (regex patterns), Example: [\"^/blog/.*$\", \"^/docs/.*$\"],\n excludePaths: string[] | undefined // URL patterns to exclude from crawl (regex patterns), [\"^/admin/.*$\", \"^/private/.*$\"],\n waitFor: number // Time to wait for dynamic content in milliseconds,\n credentials: Record<string, string> | undefined // Required credentials including FIRECRAWL_API_KEY\n}",
37489
37458
  "outputSchema": "{\n url: string // The original URL that was crawled,\n success: boolean // Whether the crawl operation was successful,\n error: string // Error message if crawl failed,\n pages: { url: string, title: string | undefined, content: string, depth: number | undefined }[] // Array of crawled pages with content,\n totalPages: number // Total number of pages crawled,\n creditsUsed: number // Number of credits used,\n metadata: { loadTime: number | undefined, crawlDepth: number | undefined, maxPagesReached: boolean | undefined } | undefined // Additional metadata about the crawl operation\n}",
37490
37459
  "inputJsonSchema": {
37491
37460
  "type": "object",
@@ -37646,7 +37615,6 @@
37646
37615
  "type": "service",
37647
37616
  "shortDescription": "Eleven Labs integration for Conversational AI",
37648
37617
  "useCase": "- Generate signed URLs for secure WebSocket connections to agents",
37649
- "inputSchema": "Complex schema - see usage example for structure",
37650
37618
  "outputSchema": "Complex schema - see usage example for structure",
37651
37619
  "inputJsonSchema": {
37652
37620
  "anyOf": [
@@ -38066,7 +38034,6 @@
38066
38034
  "type": "service",
38067
38035
  "shortDescription": "AGI Agent integration for browser automation and task execution",
38068
38036
  "useCase": "- Internet research and data extraction",
38069
- "inputSchema": "Complex schema - see usage example for structure",
38070
38037
  "outputSchema": "Complex schema - see usage example for structure",
38071
38038
  "inputJsonSchema": {
38072
38039
  "anyOf": [
@@ -39164,7 +39131,6 @@
39164
39131
  "type": "service",
39165
39132
  "shortDescription": "Airtable integration for managing records in bases and tables",
39166
39133
  "useCase": "- List records with filtering, sorting, and pagination",
39167
- "inputSchema": "Complex schema - see usage example for structure",
39168
39134
  "outputSchema": "Complex schema - see usage example for structure",
39169
39135
  "inputJsonSchema": {
39170
39136
  "anyOf": [
@@ -40787,7 +40753,6 @@
40787
40753
  "type": "service",
40788
40754
  "shortDescription": "Firecrawl API integration for web crawl operations.",
40789
40755
  "useCase": "- Add web knowledge to your RAG chatbots and AI assistants.",
40790
- "inputSchema": "Complex schema - see usage example for structure",
40791
40756
  "outputSchema": "Complex schema - see usage example for structure",
40792
40757
  "inputJsonSchema": {
40793
40758
  "anyOf": [
@@ -48678,7 +48643,6 @@
48678
48643
  "type": "service",
48679
48644
  "shortDescription": "InsForge is the backend built for AI-assisted development. Connect InsForge with any agent. Add authentication, database, storage, functions, and AI integrations to your app in seconds.",
48680
48645
  "useCase": "General purpose bubble for various workflow needs",
48681
- "inputSchema": "{\n query: string // SQL query to execute against the InsForge database,\n allowedOperations: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"CREATE\" | \"WITH\" | \"EXPLAIN\"[] // List of allowed SQL operations for security (defaults to read-only operations),\n parameters: unknown[] | undefined // Parameters for parameterized queries (e.g., [value1, value2] for $1, $2),\n timeout: number // Query timeout in milliseconds (default: 30 seconds),\n maxRows: number // Maximum number of rows to return (default: 1000),\n credentials: Record<string, string> | undefined // Object mapping credential types to values (injected at runtime)\n}",
48682
48646
  "outputSchema": "{\n rows: Record<string, unknown>[] // Array of result rows,\n rowCount: number | null // Number of rows affected by the query,\n command: string // SQL command that was executed,\n executionTime: number // Query execution time in milliseconds,\n success: boolean // Whether the query executed successfully,\n error: string // Error message if query execution failed,\n cleanedJSONString: string // Clean JSON string representation of the row data\n}",
48683
48647
  "inputJsonSchema": {
48684
48648
  "type": "object",
@@ -48801,7 +48765,6 @@
48801
48765
  "type": "service",
48802
48766
  "shortDescription": "Browser automation service using BrowserBase cloud browsers",
48803
48767
  "useCase": "- Automated shopping workflows (Amazon, etc.)",
48804
- "inputSchema": "Complex schema - see usage example for structure",
48805
48768
  "outputSchema": "Complex schema - see usage example for structure",
48806
48769
  "inputJsonSchema": {
48807
48770
  "anyOf": [
@@ -49631,7 +49594,6 @@
49631
49594
  "type": "tool",
49632
49595
  "shortDescription": "Comprehensive people search by company, title, location, skills, with optional email enrichment",
49633
49596
  "useCase": "General purpose bubble for various workflow needs",
49634
- "inputSchema": "{\n companyName: string | undefined // Current company name to search within (e.g., \"Google\", \"Microsoft\"),\n companyLinkedinUrl: string | undefined // Company LinkedIn URL for precise matching (e.g., \"https://www.linkedin.com/company/google\"),\n jobTitle: string | undefined // Current job title to search for (e.g., \"Software Engineer\", \"CEO\"). Use jobTitles array for multiple titles.,\n jobTitles: string[] | undefined // Multiple job titles to search for with OR logic (e.g., [\"Senior Hardware Engineer\", \"Technical Product Manager\"]). Use this when searching for people with any of several roles.,\n location: string | undefined // Location/region to filter by with fuzzy matching (e.g., \"San Francisco Bay Area\", \"New York\"),\n locationRadius: { location: string // Center point location (e.g., \"San Francisco\", \"New York City\"), radiusMiles: number // Search radius in miles (e.g., 75) } | undefined // Geographic radius search - find people within X miles of a location,\n skills: string[] | undefined // Skills to filter by (e.g., [\"Python\", \"Machine Learning\", \"React\"]),\n languages: string[] | undefined // Languages spoken (e.g., [\"English\", \"Spanish\", \"Mandarin\"]),\n minYearsExperience: number | undefined // Minimum total years of professional experience,\n maxYearsExperience: number | undefined // Maximum total years of professional experience,\n seniorityLevels: string[] | undefined // Seniority levels (e.g., [\"CXO\", \"Vice President\", \"Director\", \"Manager\", \"Senior\", \"Entry\"]),\n functionCategories: string[] | undefined // Job function categories (e.g., [\"Engineering\", \"Sales\", \"Marketing\", \"Finance\", \"Operations\", \"HR\"]),\n companyIndustries: string[] | undefined // Company industries to filter by with fuzzy matching (e.g., [\"Technology\", \"SaaS\", \"Finance\", \"Fintech\"]). Uses fuzzy text search, so partial terms like \"Technology\" will match \"IT Services and IT Consulting\", \"Software Development\", etc. Multiple values use OR logic.,\n minCompanyHeadcount: number | undefined // Minimum company employee count (e.g., 100 for companies with 100+ employees),\n maxCompanyHeadcount: number | undefined // Maximum company employee count (e.g., 1000 for companies under 1000 employees),\n minYearsAtCompany: number | undefined // Minimum years at current company (tenure filter),\n pastCompanyName: string | undefined // Past company name - find people who previously worked at a company,\n pastJobTitle: string | undefined // Past job title - find people who previously held a specific title,\n schoolName: string | undefined // School/university name (e.g., \"Stanford University\", \"MIT\"),\n country: string | undefined // Country to filter by (e.g., \"United States\", \"United Kingdom\", \"Germany\"),\n city: string | undefined // City to filter by (e.g., \"San Francisco\", \"New York\", \"London\"),\n recentlyChangedJobs: boolean | undefined // Filter to people who recently changed jobs (useful for outreach),\n minConnections: number | undefined // Minimum number of LinkedIn connections,\n excludeCompanies: string[] | undefined // Company names to exclude from results,\n excludeProfiles: string[] | undefined // LinkedIn profile URLs to exclude from results,\n limit: number | undefined // Maximum results to return (default: 100, max: 1000),\n enrichEmails: boolean | undefined // Enrich emails for found people using FullEnrich. Requires FULLENRICH_API_KEY credential. Costs 1 credit per work email, 3 credits per personal email.,\n includePersonalEmails: boolean | undefined // When enrichEmails is true, also search for personal emails (costs 3 additional credits per person),\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
49635
49597
  "outputSchema": "{\n people: { name: string | null // Full name, title: string | null // Current job title, headline: string | null // LinkedIn headline, linkedinUrl: string | null // LinkedIn profile URL, profilePictureUrl: string | null // Profile picture URL, emails: string[] | null // Email addresses, twitterHandle: string | null // Twitter/X handle, websites: string[] | null // Personal/professional websites, enrichedWorkEmail: string | null | undefined // Work email found via FullEnrich, enrichedPersonalEmail: string | null | undefined // Personal email found via FullEnrich, enrichedWorkEmails: { email: string, status: string | undefined }[] | null | undefined // All work emails found via FullEnrich, enrichedPersonalEmails: { email: string, status: string | undefined }[] | null | undefined // All personal emails found via FullEnrich, seniorityLevel: string | null // Seniority level (CXO, Vice President, Director, etc.), yearsOfExperience: number | null // Total years of professional experience, recentlyChangedJobs: boolean | null // Whether this person recently changed jobs, location: string | null // Location/region, locationCity: string | null // City, locationCountry: string | null // Country, skills: string[] | null // Professional skills, languages: string[] | null // Languages spoken, summary: string | null // Professional summary, numConnections: number | null // Number of LinkedIn connections, currentEmployers: { title: string | null // Job title, companyName: string | null // Company name, companyLinkedinUrl: string | null // Company LinkedIn URL, companyDomainUrl: string | null // Company website domain, seniorityLevel: string | null // Seniority level, functionCategory: string | null // Function category, startDate: unknown | null // Start date, yearsAtCompany: number | null // Years at company, companyHeadcount: number | null // Company headcount, companyIndustries: string[] | null // Company industries }[] | null // Current employment, pastEmployers: { title: string | null // Job title, companyName: string | null // Company name, startDate: unknown | null // Start date, endDate: unknown | null // End date }[] | null // Past employment, education: { instituteName: string | null // Institution name, degreeName: string | null // Degree name, fieldOfStudy: string | null // Field of study }[] | null // Education history }[] // List of people found,\n totalCount: number // Total number of people available,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
49636
49598
  "inputJsonSchema": {
49637
49599
  "type": "object",
@@ -49707,14 +49669,14 @@
49707
49669
  "items": {
49708
49670
  "type": "string"
49709
49671
  },
49710
- "description": "Seniority levels (e.g., [\"CXO\", \"Vice President\", \"Director\", \"Manager\", \"Senior\", \"Entry\"])"
49672
+ "description": "Seniority levels. Valid values: Owner / Partner, CXO, Vice President, Director, Experienced Manager, Entry Level Manager, Strategic, Senior, Entry Level, In Training. Examples: [\"CXO\", \"Vice President\", \"Director\", \"Experienced Manager\", \"Senior\"]"
49711
49673
  },
49712
49674
  "functionCategories": {
49713
49675
  "type": "array",
49714
49676
  "items": {
49715
49677
  "type": "string"
49716
49678
  },
49717
- "description": "Job function categories (e.g., [\"Engineering\", \"Sales\", \"Marketing\", \"Finance\", \"Operations\", \"HR\"])"
49679
+ "description": "Job function categories. Valid values: Accounting, Administrative, Arts and Design, Business Development, Community and Social Services, Consulting, Education, Engineering, Entrepreneurship, Finance, Healthcare Services, Human Resources, Information Technology, Legal, Marketing, Media and Communication, Military and Protective Services, Operations, Product Management, Program and Project Management, Purchasing, Quality Assurance, Real Estate, Research, Sales, Customer Success and Support. Examples: [\"Engineering\", \"Sales\", \"Marketing\", \"Finance\", \"Operations\", \"Human Resources\"]"
49718
49680
  },
49719
49681
  "companyIndustries": {
49720
49682
  "type": "array",
@@ -50177,7 +50139,7 @@
50177
50139
  ],
50178
50140
  "additionalProperties": false
50179
50141
  },
50180
- "usageExample": "// Example usage of people-search-tool bubble\nconst peopleSearchTool = new PeopleSearchTool({\n companyName: \"example string\", // Current company name to search within (e.g., \"Google\", \"Microsoft\"),\n companyLinkedinUrl: \"example string\", // Company LinkedIn URL for precise matching (e.g., \"https://www.linkedin.com/company/google\"),\n jobTitle: \"example string\", // Current job title to search for (e.g., \"Software Engineer\", \"CEO\"). Use jobTitles array for multiple titles.,\n jobTitles: [\"example string\"], // Multiple job titles to search for with OR logic (e.g., [\"Senior Hardware Engineer\", \"Technical Product Manager\"]). Use this when searching for people with any of several roles.,\n location: \"example string\", // Location/region to filter by with fuzzy matching (e.g., \"San Francisco Bay Area\", \"New York\"),\n locationRadius: { location: \"example string\" // Center point location (e.g., \"San Francisco\", \"New York City\"), radiusMiles: 42 // Search radius in miles (e.g., 75) }, // Geographic radius search - find people within X miles of a location,\n skills: [\"example string\"], // Skills to filter by (e.g., [\"Python\", \"Machine Learning\", \"React\"]),\n languages: [\"example string\"], // Languages spoken (e.g., [\"English\", \"Spanish\", \"Mandarin\"]),\n minYearsExperience: 42, // Minimum total years of professional experience,\n maxYearsExperience: 42, // Maximum total years of professional experience,\n seniorityLevels: [\"example string\"], // Seniority levels (e.g., [\"CXO\", \"Vice President\", \"Director\", \"Manager\", \"Senior\", \"Entry\"]),\n functionCategories: [\"example string\"], // Job function categories (e.g., [\"Engineering\", \"Sales\", \"Marketing\", \"Finance\", \"Operations\", \"HR\"]),\n companyIndustries: [\"example string\"], // Company industries to filter by with fuzzy matching (e.g., [\"Technology\", \"SaaS\", \"Finance\", \"Fintech\"]). Uses fuzzy text search, so partial terms like \"Technology\" will match \"IT Services and IT Consulting\", \"Software Development\", etc. Multiple values use OR logic.,\n minCompanyHeadcount: 42, // Minimum company employee count (e.g., 100 for companies with 100+ employees),\n maxCompanyHeadcount: 42, // Maximum company employee count (e.g., 1000 for companies under 1000 employees),\n minYearsAtCompany: 42, // Minimum years at current company (tenure filter),\n pastCompanyName: \"example string\", // Past company name - find people who previously worked at a company,\n pastJobTitle: \"example string\", // Past job title - find people who previously held a specific title,\n schoolName: \"example string\", // School/university name (e.g., \"Stanford University\", \"MIT\"),\n country: \"example string\", // Country to filter by (e.g., \"United States\", \"United Kingdom\", \"Germany\"),\n city: \"example string\", // City to filter by (e.g., \"San Francisco\", \"New York\", \"London\"),\n recentlyChangedJobs: true, // Filter to people who recently changed jobs (useful for outreach),\n minConnections: 42, // Minimum number of LinkedIn connections,\n excludeCompanies: [\"example string\"], // Company names to exclude from results,\n excludeProfiles: [\"example string\"], // LinkedIn profile URLs to exclude from results,\n limit: 100 // default, // Maximum results to return (default: 100, max: 1000),\n enrichEmails: false // default, // Enrich emails for found people using FullEnrich. Requires FULLENRICH_API_KEY credential. Costs 1 credit per work email, 3 credits per personal email.,\n includePersonalEmails: false // default, // When enrichEmails is true, also search for personal emails (costs 3 additional credits per person),\n});\n\nconst result = await peopleSearchTool.action();\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`${metadata.name} failed: ${result.error}`);\n}\n\n// outputSchema for result.data:\n// {\n// people: { name: string | null // Full name, title: string | null // Current job title, headline: string | null // LinkedIn headline, linkedinUrl: string | null // LinkedIn profile URL, profilePictureUrl: string | null // Profile picture URL, emails: string[] | null // Email addresses, twitterHandle: string | null // Twitter/X handle, websites: string[] | null // Personal/professional websites, enrichedWorkEmail: string | null | undefined // Work email found via FullEnrich, enrichedPersonalEmail: string | null | undefined // Personal email found via FullEnrich, enrichedWorkEmails: { email: string, status: string | undefined }[] | null | undefined // All work emails found via FullEnrich, enrichedPersonalEmails: { email: string, status: string | undefined }[] | null | undefined // All personal emails found via FullEnrich, seniorityLevel: string | null // Seniority level (CXO, Vice President, Director, etc.), yearsOfExperience: number | null // Total years of professional experience, recentlyChangedJobs: boolean | null // Whether this person recently changed jobs, location: string | null // Location/region, locationCity: string | null // City, locationCountry: string | null // Country, skills: string[] | null // Professional skills, languages: string[] | null // Languages spoken, summary: string | null // Professional summary, numConnections: number | null // Number of LinkedIn connections, currentEmployers: { title: string | null // Job title, companyName: string | null // Company name, companyLinkedinUrl: string | null // Company LinkedIn URL, companyDomainUrl: string | null // Company website domain, seniorityLevel: string | null // Seniority level, functionCategory: string | null // Function category, startDate: unknown | null // Start date, yearsAtCompany: number | null // Years at company, companyHeadcount: number | null // Company headcount, companyIndustries: string[] | null // Company industries }[] | null // Current employment, pastEmployers: { title: string | null // Job title, companyName: string | null // Company name, startDate: unknown | null // Start date, endDate: unknown | null // End date }[] | null // Past employment, education: { instituteName: string | null // Institution name, degreeName: string | null // Degree name, fieldOfStudy: string | null // Field of study }[] | null // Education history }[] // List of people found,\n// totalCount: number // Total number of people available,\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
50142
+ "usageExample": "// Example usage of people-search-tool bubble\nconst peopleSearchTool = new PeopleSearchTool({\n companyName: \"example string\", // Current company name to search within (e.g., \"Google\", \"Microsoft\"),\n companyLinkedinUrl: \"example string\", // Company LinkedIn URL for precise matching (e.g., \"https://www.linkedin.com/company/google\"),\n jobTitle: \"example string\", // Current job title to search for (e.g., \"Software Engineer\", \"CEO\"). Use jobTitles array for multiple titles.,\n jobTitles: [\"example string\"], // Multiple job titles to search for with OR logic (e.g., [\"Senior Hardware Engineer\", \"Technical Product Manager\"]). Use this when searching for people with any of several roles.,\n location: \"example string\", // Location/region to filter by with fuzzy matching (e.g., \"San Francisco Bay Area\", \"New York\"),\n locationRadius: { location: \"example string\" // Center point location (e.g., \"San Francisco\", \"New York City\"), radiusMiles: 42 // Search radius in miles (e.g., 75) }, // Geographic radius search - find people within X miles of a location,\n skills: [\"example string\"], // Skills to filter by (e.g., [\"Python\", \"Machine Learning\", \"React\"]),\n languages: [\"example string\"], // Languages spoken (e.g., [\"English\", \"Spanish\", \"Mandarin\"]),\n minYearsExperience: 42, // Minimum total years of professional experience,\n maxYearsExperience: 42, // Maximum total years of professional experience,\n seniorityLevels: [\"example string\"], // Seniority levels. Valid values: Owner / Partner, CXO, Vice President, Director, Experienced Manager, Entry Level Manager, Strategic, Senior, Entry Level, In Training. Examples: [\"CXO\", \"Vice President\", \"Director\", \"Experienced Manager\", \"Senior\"],\n functionCategories: [\"example string\"], // Job function categories. Valid values: Accounting, Administrative, Arts and Design, Business Development, Community and Social Services, Consulting, Education, Engineering, Entrepreneurship, Finance, Healthcare Services, Human Resources, Information Technology, Legal, Marketing, Media and Communication, Military and Protective Services, Operations, Product Management, Program and Project Management, Purchasing, Quality Assurance, Real Estate, Research, Sales, Customer Success and Support. Examples: [\"Engineering\", \"Sales\", \"Marketing\", \"Finance\", \"Operations\", \"Human Resources\"],\n companyIndustries: [\"example string\"], // Company industries to filter by with fuzzy matching (e.g., [\"Technology\", \"SaaS\", \"Finance\", \"Fintech\"]). Uses fuzzy text search, so partial terms like \"Technology\" will match \"IT Services and IT Consulting\", \"Software Development\", etc. Multiple values use OR logic.,\n minCompanyHeadcount: 42, // Minimum company employee count (e.g., 100 for companies with 100+ employees),\n maxCompanyHeadcount: 42, // Maximum company employee count (e.g., 1000 for companies under 1000 employees),\n minYearsAtCompany: 42, // Minimum years at current company (tenure filter),\n pastCompanyName: \"example string\", // Past company name - find people who previously worked at a company,\n pastJobTitle: \"example string\", // Past job title - find people who previously held a specific title,\n schoolName: \"example string\", // School/university name (e.g., \"Stanford University\", \"MIT\"),\n country: \"example string\", // Country to filter by (e.g., \"United States\", \"United Kingdom\", \"Germany\"),\n city: \"example string\", // City to filter by (e.g., \"San Francisco\", \"New York\", \"London\"),\n recentlyChangedJobs: true, // Filter to people who recently changed jobs (useful for outreach),\n minConnections: 42, // Minimum number of LinkedIn connections,\n excludeCompanies: [\"example string\"], // Company names to exclude from results,\n excludeProfiles: [\"example string\"], // LinkedIn profile URLs to exclude from results,\n limit: 100 // default, // Maximum results to return (default: 100, max: 1000),\n enrichEmails: false // default, // Enrich emails for found people using FullEnrich. Requires FULLENRICH_API_KEY credential. Costs 1 credit per work email, 3 credits per personal email.,\n includePersonalEmails: false // default, // When enrichEmails is true, also search for personal emails (costs 3 additional credits per person),\n});\n\nconst result = await peopleSearchTool.action();\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`${metadata.name} failed: ${result.error}`);\n}\n\n// outputSchema for result.data:\n// {\n// people: { name: string | null // Full name, title: string | null // Current job title, headline: string | null // LinkedIn headline, linkedinUrl: string | null // LinkedIn profile URL, profilePictureUrl: string | null // Profile picture URL, emails: string[] | null // Email addresses, twitterHandle: string | null // Twitter/X handle, websites: string[] | null // Personal/professional websites, enrichedWorkEmail: string | null | undefined // Work email found via FullEnrich, enrichedPersonalEmail: string | null | undefined // Personal email found via FullEnrich, enrichedWorkEmails: { email: string, status: string | undefined }[] | null | undefined // All work emails found via FullEnrich, enrichedPersonalEmails: { email: string, status: string | undefined }[] | null | undefined // All personal emails found via FullEnrich, seniorityLevel: string | null // Seniority level (CXO, Vice President, Director, etc.), yearsOfExperience: number | null // Total years of professional experience, recentlyChangedJobs: boolean | null // Whether this person recently changed jobs, location: string | null // Location/region, locationCity: string | null // City, locationCountry: string | null // Country, skills: string[] | null // Professional skills, languages: string[] | null // Languages spoken, summary: string | null // Professional summary, numConnections: number | null // Number of LinkedIn connections, currentEmployers: { title: string | null // Job title, companyName: string | null // Company name, companyLinkedinUrl: string | null // Company LinkedIn URL, companyDomainUrl: string | null // Company website domain, seniorityLevel: string | null // Seniority level, functionCategory: string | null // Function category, startDate: unknown | null // Start date, yearsAtCompany: number | null // Years at company, companyHeadcount: number | null // Company headcount, companyIndustries: string[] | null // Company industries }[] | null // Current employment, pastEmployers: { title: string | null // Job title, companyName: string | null // Company name, startDate: unknown | null // Start date, endDate: unknown | null // End date }[] | null // Past employment, education: { instituteName: string | null // Institution name, degreeName: string | null // Degree name, fieldOfStudy: string | null // Field of study }[] | null // Education history }[] // List of people found,\n// totalCount: number // Total number of people available,\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
50181
50143
  "requiredCredentials": [
50182
50144
  "CRUSTDATA_API_KEY",
50183
50145
  "FULLENRICH_API_KEY"
@@ -50189,7 +50151,6 @@
50189
50151
  "type": "tool",
50190
50152
  "shortDescription": "Amazon shopping automation - add to cart, view cart, checkout, search products",
50191
50153
  "useCase": "General purpose bubble for various workflow needs",
50192
- "inputSchema": "Complex schema - see usage example for structure",
50193
50154
  "outputSchema": "Complex schema - see usage example for structure",
50194
50155
  "inputJsonSchema": {
50195
50156
  "anyOf": [
@@ -50775,7 +50736,6 @@
50775
50736
  "type": "service",
50776
50737
  "shortDescription": "Crustdata API for company data enrichment and people search",
50777
50738
  "useCase": "- Lead generation and sales prospecting",
50778
- "inputSchema": "Complex schema - see usage example for structure",
50779
50739
  "outputSchema": "Complex schema - see usage example for structure",
50780
50740
  "inputJsonSchema": {
50781
50741
  "anyOf": [
@@ -50882,7 +50842,7 @@
50882
50842
  "properties": {
50883
50843
  "column": {
50884
50844
  "type": "string",
50885
- "description": "Field to filter on (e.g., \"current_employers.title\", \"region\")"
50845
+ "description": "Field to filter on (e.g., \"current_employers.title\", \"current_employers.function_category\", \"region\"). For function_category, use PersonFunctionEnum values. For seniority_level, use PersonSeniorityLevelEnum values."
50886
50846
  },
50887
50847
  "type": {
50888
50848
  "type": "string",
@@ -50959,7 +50919,7 @@
50959
50919
  "additionalProperties": false
50960
50920
  }
50961
50921
  ],
50962
- "description": "Value(s) to match"
50922
+ "description": "Value(s) to match. For function_category and seniority_level, use enum values."
50963
50923
  }
50964
50924
  },
50965
50925
  "required": [
@@ -50989,7 +50949,7 @@
50989
50949
  "properties": {
50990
50950
  "column": {
50991
50951
  "type": "string",
50992
- "description": "Field to filter on (e.g., \"current_employers.title\", \"region\")"
50952
+ "description": "Field to filter on (e.g., \"current_employers.title\", \"current_employers.function_category\", \"region\"). For function_category, use PersonFunctionEnum values. For seniority_level, use PersonSeniorityLevelEnum values."
50993
50953
  },
50994
50954
  "type": {
50995
50955
  "type": "string",
@@ -51066,7 +51026,7 @@
51066
51026
  "additionalProperties": false
51067
51027
  }
51068
51028
  ],
51069
- "description": "Value(s) to match"
51029
+ "description": "Value(s) to match. For function_category and seniority_level, use enum values."
51070
51030
  }
51071
51031
  },
51072
51032
  "required": [
@@ -53024,7 +52984,7 @@
53024
52984
  }
53025
52985
  ]
53026
52986
  },
53027
- "usageExample": "// Identify example\nconst crustdata_identify = new CrustdataBubble({\n operation: \"identify\", // Identify a company and get its Crustdata ID (FREE)\n query_company_name: \"example string\", // Company name to search for\n query_company_website: \"example string\", // Company website domain (e.g., \"stripe.com\")\n query_company_linkedin_url: \"example string\", // Company LinkedIn URL\n count: 1 // default, // Maximum number of results to return (default: 1, max: 25)\n});\n\nconst result = await crustdata_identify.action();\n// outputSchema for result.data when operation === 'identify':\n// {\n// operation: \"identify\" // Company identification operation,\n// success: boolean // Whether the operation was successful,\n// results: { company_id: number | null | undefined, company_name: string | null | undefined, linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, linkedin_headcount: number | null | undefined, score: number | null | undefined }[] | undefined // Array of matching companies,\n// error: string // Error message if operation failed\n// }\n\n\n// Enrich example\nconst crustdata_enrich = new CrustdataBubble({\n operation: \"enrich\", // Enrich company data with contacts (1 credit)\n company_domain: \"example string\", // Company website domain (e.g., \"stripe.com\")\n company_linkedin_url: \"example string\", // Company LinkedIn URL\n company_id: 42, // Crustdata company ID (from identify operation)\n fields: \"decision_makers,cxos,founders.profiles\" // default, // Comma-separated fields to retrieve (default: \"decision_makers,cxos,founders.profiles\")\n enrich_realtime: false // default, // If true, fetch fresh data from LinkedIn (slower but more accurate)\n});\n\nconst result = await crustdata_enrich.action();\n// outputSchema for result.data when operation === 'enrich':\n// {\n// operation: \"enrich\" // Company enrichment operation,\n// success: boolean // Whether the operation was successful,\n// company: { name: string | null | undefined, linkedin_id: string | null | undefined, linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_website: string | null | undefined, hq_country: string | null | undefined, hq_city: string | null | undefined, year_founded: string | null | undefined, headcount: number | null | undefined, linkedin_headcount: number | null | undefined, linkedin_followers: number | null | undefined, industry: string | null | undefined, description: string | null | undefined, all_industries: string[] | null | undefined, estimated_revenue: string | null | undefined, funding_stage: string | null | undefined, total_funding: string | null | undefined, last_funding_round_date: string | null | undefined, last_funding_round_type: string | null | undefined } | null | undefined // Enriched company information,\n// decision_makers: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, location: string | null | undefined, profile_picture_url: string | null | undefined, title: string | null | undefined, emails: string[] | null | undefined, twitter_handle: string | null | undefined, github_profile_id: string | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, summary: string | null | undefined, current_positions: { title: string | null | undefined, company_name: string | null | undefined, company_linkedin_url: string | null | undefined, start_date: unknown | null | undefined, description: string | null | undefined }[] | null | undefined, past_positions: { title: string | null | undefined, company_name: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, education: { institute_name: string | null | undefined, degree_name: string | null | undefined, field_of_study: string | null | undefined }[] | null | undefined }[] | null | undefined // Decision makers at the company,\n// cxos: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, location: string | null | undefined, profile_picture_url: string | null | undefined, title: string | null | undefined, emails: string[] | null | undefined, twitter_handle: string | null | undefined, github_profile_id: string | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, summary: string | null | undefined, current_positions: { title: string | null | undefined, company_name: string | null | undefined, company_linkedin_url: string | null | undefined, start_date: unknown | null | undefined, description: string | null | undefined }[] | null | undefined, past_positions: { title: string | null | undefined, company_name: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, education: { institute_name: string | null | undefined, degree_name: string | null | undefined, field_of_study: string | null | undefined }[] | null | undefined }[] | null | undefined // C-level executives at the company,\n// founders: { profiles: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, location: string | null | undefined, profile_picture_url: string | null | undefined, title: string | null | undefined, emails: string[] | null | undefined, twitter_handle: string | null | undefined, github_profile_id: string | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, summary: string | null | undefined, current_positions: { title: string | null | undefined, company_name: string | null | undefined, company_linkedin_url: string | null | undefined, start_date: unknown | null | undefined, description: string | null | undefined }[] | null | undefined, past_positions: { title: string | null | undefined, company_name: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, education: { institute_name: string | null | undefined, degree_name: string | null | undefined, field_of_study: string | null | undefined }[] | null | undefined }[] | null | undefined } | null | undefined // Founders of the company,\n// error: string // Error message if operation failed\n// }\n\n\n// Person Search Db example\nconst crustdata_person_search_db = new CrustdataBubble({\n operation: \"person_search_db\", // Search people in database with advanced filtering (3 credits per 100 results)\n filters: { column: \"example string\" // Field to filter on (e.g., \"current_employers.title\", \"region\"), type: \"=\" // options: \"=\", \"!=\", \"in\", \"not_in\", \">\", \"<\", \"=>\", \"=<\", \"(.)\", \"[.]\", \"geo_distance\" // Filter operator, value: { location: \"example string\" // Center point location name (e.g., \"San Francisco\"), distance: 42 // Radius distance, unit: \"km\" // options: \"km\", \"mi\", \"miles\", \"m\", \"meters\", \"ft\", \"feet\" // Distance unit (default: km) } // Value(s) to match }, // Filter conditions - single condition or nested AND/OR groups\n sorts: [{ column: \"example string\" // Field to sort by (e.g., \"years_of_experience_raw\", \"num_of_connections\"), order: \"asc\" // options: \"asc\", \"desc\" // Sort order }], // Sort criteria to order results\n cursor: \"example string\", // Pagination cursor from previous response\n limit: 20 // default, // Results per page (default: 20, max: 1,000)\n preview: false // default, // Preview mode returns basic profile details (0 credits)\n post_processing: { exclude_profiles: [\"example string\"] // LinkedIn profile URLs to exclude (max 50,000), exclude_names: [\"example string\"] // Names to exclude from results }, // Post-processing options like excluding profiles or names\n});\n\nconst result = await crustdata_person_search_db.action();\n// outputSchema for result.data when operation === 'person_search_db':\n// {\n// operation: \"person_search_db\" // PersonDB search operation,\n// success: boolean // Whether the operation was successful,\n// profiles: { person_id: number | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, summary: string | null | undefined, region: string | null | undefined, location_details: { city: string | null | undefined, state: string | null | undefined, country: string | null | undefined, continent: string | null | undefined } | null | undefined, location_city: string | null | undefined, location_state: string | null | undefined, location_country: string | null | undefined, linkedin_profile_url: string | null | undefined, flagship_profile_url: string | null | undefined, profile_picture_url: string | null | undefined, num_of_connections: number | null | undefined, years_of_experience_raw: number | null | undefined, recently_changed_jobs: boolean | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, current_employers: { title: string | null | undefined, company_name: string | null | undefined, name: string | null | undefined, linkedin_id: string | null | undefined, company_linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_hq_location: string | null | undefined, company_type: string | null | undefined, company_headcount_latest: number | null | undefined, company_headcount_range: string | null | undefined, company_industries: string[] | null | undefined, seniority_level: string | null | undefined, function_category: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined, years_at_company_raw: number | null | undefined, description: string | null | undefined, location: string | null | undefined }[] | null | undefined, past_employers: { title: string | null | undefined, company_name: string | null | undefined, name: string | null | undefined, linkedin_id: string | null | undefined, company_linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_hq_location: string | null | undefined, company_type: string | null | undefined, company_headcount_latest: number | null | undefined, company_headcount_range: string | null | undefined, company_industries: string[] | null | undefined, seniority_level: string | null | undefined, function_category: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined, years_at_company_raw: number | null | undefined, description: string | null | undefined, location: string | null | undefined }[] | null | undefined, all_employers: { title: string | null | undefined, company_name: string | null | undefined, name: string | null | undefined, linkedin_id: string | null | undefined, company_linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_hq_location: string | null | undefined, company_type: string | null | undefined, company_headcount_latest: number | null | undefined, company_headcount_range: string | null | undefined, company_industries: string[] | null | undefined, seniority_level: string | null | undefined, function_category: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined, years_at_company_raw: number | null | undefined, description: string | null | undefined, location: string | null | undefined }[] | null | undefined, education_background: { degree_name: string | null | undefined, institute_name: string | null | undefined, field_of_study: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, certifications: { name: string | null | undefined, issued_date: unknown | null | undefined, issuing_authority: string | null | undefined }[] | null | undefined, honors: { title: string | null | undefined, issued_date: unknown | null | undefined, issuer: string | null | undefined }[] | null | undefined, emails: string[] | null | undefined, websites: string[] | null | undefined, twitter_handle: string | null | undefined }[] | undefined // Array of people profiles found,\n// total_count: number | undefined // Total number of profiles matching the search criteria,\n// next_cursor: string | undefined // Cursor for fetching the next page of results,\n// error: string // Error message if operation failed\n// }\n\n\n// Person Enrich example\nconst crustdata_person_enrich = new CrustdataBubble({\n operation: \"person_enrich\", // Enrich LinkedIn profiles with comprehensive data (3-5 credits per profile)\n linkedin_profile_url: \"example string\", // Comma-separated LinkedIn profile URLs to enrich (max 25). Example: \"https://www.linkedin.com/in/dvdhsu/\"\n business_email: \"example string\", // Comma-separated business emails for reverse lookup (max 25). Mutually exclusive with linkedin_profile_url.\n enrich_realtime: false // default, // If true, fetch fresh data from LinkedIn in real-time (5 credits vs 3 for database)\n fields: \"example string\", // Comma-separated fields to include in response. Use \"business_email\" to discover work emails (+2 credits). Default returns standard profile fields.\n preview: false // default, // Preview mode returns basic profile details only (0 credits, access controlled)\n});\n\nconst result = await crustdata_person_enrich.action();\n// outputSchema for result.data when operation === 'person_enrich':\n// {\n// operation: \"person_enrich\" // Person enrichment operation,\n// success: boolean // Whether the operation was successful,\n// profiles: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, location: string | null | undefined, email: string | null | undefined, title: string | null | undefined, last_updated: string | null | undefined, headline: string | null | undefined, summary: string | null | undefined, num_of_connections: number | null | undefined, profile_picture_url: string | null | undefined, profile_picture_permalink: string | null | undefined, twitter_handle: string | null | undefined, languages: string[] | null | undefined, linkedin_joined_date: string | null | undefined, linkedin_verifications: string[] | null | undefined, linkedin_open_to_cards: string[] | null | undefined, skills: string[] | null | undefined, all_employers: string[] | null | undefined, all_employers_company_id: number[] | null | undefined, all_titles: string[] | null | undefined, all_schools: string[] | null | undefined, all_degrees: string[] | null | undefined, current_employers: { employer_name: string | null | undefined, employer_linkedin_id: string | null | undefined, employer_logo_url: string | null | undefined, employer_linkedin_description: string | null | undefined, employer_company_id: number[] | null | undefined, employer_company_website_domain: string[] | null | undefined, domains: string[] | null | undefined, employee_position_id: number | null | undefined, employee_title: string | null | undefined, employee_description: string | null | undefined, employee_location: string | null | undefined, start_date: string | null | undefined, end_date: string | null | undefined, is_default: boolean | null | undefined, business_emails: Record<string, { verification_status: string | null | undefined // Email verification status, last_validated_at: string | null | undefined // Last validation date }> | null | undefined // Business emails with verification metadata }[] | null | undefined, past_employers: { employer_name: string | null | undefined, employer_linkedin_id: string | null | undefined, employer_logo_url: string | null | undefined, employer_linkedin_description: string | null | undefined, employer_company_id: number[] | null | undefined, employer_company_website_domain: string[] | null | undefined, domains: string[] | null | undefined, employee_position_id: number | null | undefined, employee_title: string | null | undefined, employee_description: string | null | undefined, employee_location: string | null | undefined, start_date: string | null | undefined, end_date: string | null | undefined, is_default: boolean | null | undefined, business_emails: Record<string, { verification_status: string | null | undefined // Email verification status, last_validated_at: string | null | undefined // Last validation date }> | null | undefined // Business emails with verification metadata }[] | null | undefined, education_background: { degree_name: string | null | undefined, institute_name: string | null | undefined, institute_linkedin_id: string | null | undefined, institute_linkedin_url: string | null | undefined, institute_logo_url: string | null | undefined, field_of_study: string | null | undefined, start_date: string | null | undefined, end_date: string | null | undefined, activities_and_societies: string | null | undefined }[] | null | undefined, certifications: { name: string | null | undefined, issued_date: string | null | undefined, expiration_date: string | null | undefined, url: string | null | undefined, issuer_organization: string | null | undefined, issuer_organization_linkedin_id: string | null | undefined, certification_id: string | null | undefined }[] | null | undefined, honors: { title: string | null | undefined, issued_date: string | null | undefined, description: string | null | undefined, issuer: string | null | undefined, media_urls: string[] | null | undefined, associated_organization_linkedin_id: string | null | undefined, associated_organization: string | null | undefined }[] | null | undefined, business_email: string[] | null | undefined, enriched_realtime: boolean | null | undefined, query_linkedin_profile_urn_or_slug: string[] | null | undefined, score: number | null | undefined }[] | undefined // Array of enriched person profiles,\n// errors: { linkedin_profile_url: string | null | undefined, business_email: string | null | undefined, error: string | undefined, error_code: string | undefined, message: string | undefined }[] | undefined // Array of errors for profiles that could not be enriched,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`crustdata failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
52987
+ "usageExample": "// Identify example\nconst crustdata_identify = new CrustdataBubble({\n operation: \"identify\", // Identify a company and get its Crustdata ID (FREE)\n query_company_name: \"example string\", // Company name to search for\n query_company_website: \"example string\", // Company website domain (e.g., \"stripe.com\")\n query_company_linkedin_url: \"example string\", // Company LinkedIn URL\n count: 1 // default, // Maximum number of results to return (default: 1, max: 25)\n});\n\nconst result = await crustdata_identify.action();\n// outputSchema for result.data when operation === 'identify':\n// {\n// operation: \"identify\" // Company identification operation,\n// success: boolean // Whether the operation was successful,\n// results: { company_id: number | null | undefined, company_name: string | null | undefined, linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, linkedin_headcount: number | null | undefined, score: number | null | undefined }[] | undefined // Array of matching companies,\n// error: string // Error message if operation failed\n// }\n\n\n// Enrich example\nconst crustdata_enrich = new CrustdataBubble({\n operation: \"enrich\", // Enrich company data with contacts (1 credit)\n company_domain: \"example string\", // Company website domain (e.g., \"stripe.com\")\n company_linkedin_url: \"example string\", // Company LinkedIn URL\n company_id: 42, // Crustdata company ID (from identify operation)\n fields: \"decision_makers,cxos,founders.profiles\" // default, // Comma-separated fields to retrieve (default: \"decision_makers,cxos,founders.profiles\")\n enrich_realtime: false // default, // If true, fetch fresh data from LinkedIn (slower but more accurate)\n});\n\nconst result = await crustdata_enrich.action();\n// outputSchema for result.data when operation === 'enrich':\n// {\n// operation: \"enrich\" // Company enrichment operation,\n// success: boolean // Whether the operation was successful,\n// company: { name: string | null | undefined, linkedin_id: string | null | undefined, linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_website: string | null | undefined, hq_country: string | null | undefined, hq_city: string | null | undefined, year_founded: string | null | undefined, headcount: number | null | undefined, linkedin_headcount: number | null | undefined, linkedin_followers: number | null | undefined, industry: string | null | undefined, description: string | null | undefined, all_industries: string[] | null | undefined, estimated_revenue: string | null | undefined, funding_stage: string | null | undefined, total_funding: string | null | undefined, last_funding_round_date: string | null | undefined, last_funding_round_type: string | null | undefined } | null | undefined // Enriched company information,\n// decision_makers: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, location: string | null | undefined, profile_picture_url: string | null | undefined, title: string | null | undefined, emails: string[] | null | undefined, twitter_handle: string | null | undefined, github_profile_id: string | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, summary: string | null | undefined, current_positions: { title: string | null | undefined, company_name: string | null | undefined, company_linkedin_url: string | null | undefined, start_date: unknown | null | undefined, description: string | null | undefined }[] | null | undefined, past_positions: { title: string | null | undefined, company_name: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, education: { institute_name: string | null | undefined, degree_name: string | null | undefined, field_of_study: string | null | undefined }[] | null | undefined }[] | null | undefined // Decision makers at the company,\n// cxos: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, location: string | null | undefined, profile_picture_url: string | null | undefined, title: string | null | undefined, emails: string[] | null | undefined, twitter_handle: string | null | undefined, github_profile_id: string | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, summary: string | null | undefined, current_positions: { title: string | null | undefined, company_name: string | null | undefined, company_linkedin_url: string | null | undefined, start_date: unknown | null | undefined, description: string | null | undefined }[] | null | undefined, past_positions: { title: string | null | undefined, company_name: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, education: { institute_name: string | null | undefined, degree_name: string | null | undefined, field_of_study: string | null | undefined }[] | null | undefined }[] | null | undefined // C-level executives at the company,\n// founders: { profiles: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, location: string | null | undefined, profile_picture_url: string | null | undefined, title: string | null | undefined, emails: string[] | null | undefined, twitter_handle: string | null | undefined, github_profile_id: string | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, summary: string | null | undefined, current_positions: { title: string | null | undefined, company_name: string | null | undefined, company_linkedin_url: string | null | undefined, start_date: unknown | null | undefined, description: string | null | undefined }[] | null | undefined, past_positions: { title: string | null | undefined, company_name: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, education: { institute_name: string | null | undefined, degree_name: string | null | undefined, field_of_study: string | null | undefined }[] | null | undefined }[] | null | undefined } | null | undefined // Founders of the company,\n// error: string // Error message if operation failed\n// }\n\n\n// Person Search Db example\nconst crustdata_person_search_db = new CrustdataBubble({\n operation: \"person_search_db\", // Search people in database with advanced filtering (3 credits per 100 results)\n filters: { column: \"example string\" // Field to filter on (e.g., \"current_employers.title\", \"current_employers.function_category\", \"region\"). For function_category, use PersonFunctionEnum values. For seniority_level, use PersonSeniorityLevelEnum values., type: \"=\" // options: \"=\", \"!=\", \"in\", \"not_in\", \">\", \"<\", \"=>\", \"=<\", \"(.)\", \"[.]\", \"geo_distance\" // Filter operator, value: { location: \"example string\" // Center point location name (e.g., \"San Francisco\"), distance: 42 // Radius distance, unit: \"km\" // options: \"km\", \"mi\", \"miles\", \"m\", \"meters\", \"ft\", \"feet\" // Distance unit (default: km) } // Value(s) to match. For function_category and seniority_level, use enum values. }, // Filter conditions - single condition or nested AND/OR groups\n sorts: [{ column: \"example string\" // Field to sort by (e.g., \"years_of_experience_raw\", \"num_of_connections\"), order: \"asc\" // options: \"asc\", \"desc\" // Sort order }], // Sort criteria to order results\n cursor: \"example string\", // Pagination cursor from previous response\n limit: 20 // default, // Results per page (default: 20, max: 1,000)\n preview: false // default, // Preview mode returns basic profile details (0 credits)\n post_processing: { exclude_profiles: [\"example string\"] // LinkedIn profile URLs to exclude (max 50,000), exclude_names: [\"example string\"] // Names to exclude from results }, // Post-processing options like excluding profiles or names\n});\n\nconst result = await crustdata_person_search_db.action();\n// outputSchema for result.data when operation === 'person_search_db':\n// {\n// operation: \"person_search_db\" // PersonDB search operation,\n// success: boolean // Whether the operation was successful,\n// profiles: { person_id: number | undefined, name: string | null | undefined, first_name: string | null | undefined, last_name: string | null | undefined, headline: string | null | undefined, summary: string | null | undefined, region: string | null | undefined, location_details: { city: string | null | undefined, state: string | null | undefined, country: string | null | undefined, continent: string | null | undefined } | null | undefined, location_city: string | null | undefined, location_state: string | null | undefined, location_country: string | null | undefined, linkedin_profile_url: string | null | undefined, flagship_profile_url: string | null | undefined, profile_picture_url: string | null | undefined, num_of_connections: number | null | undefined, years_of_experience_raw: number | null | undefined, recently_changed_jobs: boolean | null | undefined, skills: string[] | null | undefined, languages: string[] | null | undefined, current_employers: { title: string | null | undefined, company_name: string | null | undefined, name: string | null | undefined, linkedin_id: string | null | undefined, company_linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_hq_location: string | null | undefined, company_type: string | null | undefined, company_headcount_latest: number | null | undefined, company_headcount_range: string | null | undefined, company_industries: string[] | null | undefined, seniority_level: string | null | undefined, function_category: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined, years_at_company_raw: number | null | undefined, description: string | null | undefined, location: string | null | undefined }[] | null | undefined, past_employers: { title: string | null | undefined, company_name: string | null | undefined, name: string | null | undefined, linkedin_id: string | null | undefined, company_linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_hq_location: string | null | undefined, company_type: string | null | undefined, company_headcount_latest: number | null | undefined, company_headcount_range: string | null | undefined, company_industries: string[] | null | undefined, seniority_level: string | null | undefined, function_category: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined, years_at_company_raw: number | null | undefined, description: string | null | undefined, location: string | null | undefined }[] | null | undefined, all_employers: { title: string | null | undefined, company_name: string | null | undefined, name: string | null | undefined, linkedin_id: string | null | undefined, company_linkedin_profile_url: string | null | undefined, company_website_domain: string | null | undefined, company_hq_location: string | null | undefined, company_type: string | null | undefined, company_headcount_latest: number | null | undefined, company_headcount_range: string | null | undefined, company_industries: string[] | null | undefined, seniority_level: string | null | undefined, function_category: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined, years_at_company_raw: number | null | undefined, description: string | null | undefined, location: string | null | undefined }[] | null | undefined, education_background: { degree_name: string | null | undefined, institute_name: string | null | undefined, field_of_study: string | null | undefined, start_date: unknown | null | undefined, end_date: unknown | null | undefined }[] | null | undefined, certifications: { name: string | null | undefined, issued_date: unknown | null | undefined, issuing_authority: string | null | undefined }[] | null | undefined, honors: { title: string | null | undefined, issued_date: unknown | null | undefined, issuer: string | null | undefined }[] | null | undefined, emails: string[] | null | undefined, websites: string[] | null | undefined, twitter_handle: string | null | undefined }[] | undefined // Array of people profiles found,\n// total_count: number | undefined // Total number of profiles matching the search criteria,\n// next_cursor: string | undefined // Cursor for fetching the next page of results,\n// error: string // Error message if operation failed\n// }\n\n\n// Person Enrich example\nconst crustdata_person_enrich = new CrustdataBubble({\n operation: \"person_enrich\", // Enrich LinkedIn profiles with comprehensive data (3-5 credits per profile)\n linkedin_profile_url: \"example string\", // Comma-separated LinkedIn profile URLs to enrich (max 25). Example: \"https://www.linkedin.com/in/dvdhsu/\"\n business_email: \"example string\", // Comma-separated business emails for reverse lookup (max 25). Mutually exclusive with linkedin_profile_url.\n enrich_realtime: false // default, // If true, fetch fresh data from LinkedIn in real-time (5 credits vs 3 for database)\n fields: \"example string\", // Comma-separated fields to include in response. Use \"business_email\" to discover work emails (+2 credits). Default returns standard profile fields.\n preview: false // default, // Preview mode returns basic profile details only (0 credits, access controlled)\n});\n\nconst result = await crustdata_person_enrich.action();\n// outputSchema for result.data when operation === 'person_enrich':\n// {\n// operation: \"person_enrich\" // Person enrichment operation,\n// success: boolean // Whether the operation was successful,\n// profiles: { linkedin_profile_url: string | null | undefined, linkedin_flagship_url: string | null | undefined, name: string | null | undefined, location: string | null | undefined, email: string | null | undefined, title: string | null | undefined, last_updated: string | null | undefined, headline: string | null | undefined, summary: string | null | undefined, num_of_connections: number | null | undefined, profile_picture_url: string | null | undefined, profile_picture_permalink: string | null | undefined, twitter_handle: string | null | undefined, languages: string[] | null | undefined, linkedin_joined_date: string | null | undefined, linkedin_verifications: string[] | null | undefined, linkedin_open_to_cards: string[] | null | undefined, skills: string[] | null | undefined, all_employers: string[] | null | undefined, all_employers_company_id: number[] | null | undefined, all_titles: string[] | null | undefined, all_schools: string[] | null | undefined, all_degrees: string[] | null | undefined, current_employers: { employer_name: string | null | undefined, employer_linkedin_id: string | null | undefined, employer_logo_url: string | null | undefined, employer_linkedin_description: string | null | undefined, employer_company_id: number[] | null | undefined, employer_company_website_domain: string[] | null | undefined, domains: string[] | null | undefined, employee_position_id: number | null | undefined, employee_title: string | null | undefined, employee_description: string | null | undefined, employee_location: string | null | undefined, start_date: string | null | undefined, end_date: string | null | undefined, is_default: boolean | null | undefined, business_emails: Record<string, { verification_status: string | null | undefined // Email verification status, last_validated_at: string | null | undefined // Last validation date }> | null | undefined // Business emails with verification metadata }[] | null | undefined, past_employers: { employer_name: string | null | undefined, employer_linkedin_id: string | null | undefined, employer_logo_url: string | null | undefined, employer_linkedin_description: string | null | undefined, employer_company_id: number[] | null | undefined, employer_company_website_domain: string[] | null | undefined, domains: string[] | null | undefined, employee_position_id: number | null | undefined, employee_title: string | null | undefined, employee_description: string | null | undefined, employee_location: string | null | undefined, start_date: string | null | undefined, end_date: string | null | undefined, is_default: boolean | null | undefined, business_emails: Record<string, { verification_status: string | null | undefined // Email verification status, last_validated_at: string | null | undefined // Last validation date }> | null | undefined // Business emails with verification metadata }[] | null | undefined, education_background: { degree_name: string | null | undefined, institute_name: string | null | undefined, institute_linkedin_id: string | null | undefined, institute_linkedin_url: string | null | undefined, institute_logo_url: string | null | undefined, field_of_study: string | null | undefined, start_date: string | null | undefined, end_date: string | null | undefined, activities_and_societies: string | null | undefined }[] | null | undefined, certifications: { name: string | null | undefined, issued_date: string | null | undefined, expiration_date: string | null | undefined, url: string | null | undefined, issuer_organization: string | null | undefined, issuer_organization_linkedin_id: string | null | undefined, certification_id: string | null | undefined }[] | null | undefined, honors: { title: string | null | undefined, issued_date: string | null | undefined, description: string | null | undefined, issuer: string | null | undefined, media_urls: string[] | null | undefined, associated_organization_linkedin_id: string | null | undefined, associated_organization: string | null | undefined }[] | null | undefined, business_email: string[] | null | undefined, enriched_realtime: boolean | null | undefined, query_linkedin_profile_urn_or_slug: string[] | null | undefined, score: number | null | undefined }[] | undefined // Array of enriched person profiles,\n// errors: { linkedin_profile_url: string | null | undefined, business_email: string | null | undefined, error: string | undefined, error_code: string | undefined, message: string | undefined }[] | undefined // Array of errors for profiles that could not be enriched,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`crustdata failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
53028
52988
  "requiredCredentials": [
53029
52989
  "CRUSTDATA_API_KEY"
53030
52990
  ]
@@ -53035,7 +52995,6 @@
53035
52995
  "type": "tool",
53036
52996
  "shortDescription": "Get key contacts (executives, decision makers) from any company for lead generation",
53037
52997
  "useCase": "General purpose bubble for various workflow needs",
53038
- "inputSchema": "{\n companyIdentifier: string // Company name, domain (e.g., \"stripe.com\"), or LinkedIn URL. Auto-detects type.,\n limit: number | undefined // Maximum contacts to return (default: 10),\n credentials: Record<string, string> | undefined // Required credentials (auto-injected)\n}",
53039
52998
  "outputSchema": "{\n contacts: { name: string | null // Full name, title: string | null // Current job title, headline: string | null // LinkedIn headline, linkedinUrl: string | null // LinkedIn profile URL, profilePictureUrl: string | null // Profile picture URL, emails: string[] | null // Email addresses, twitterHandle: string | null // Twitter/X handle, role: \"cxo\" | \"decision_maker\" | \"founder\" // Role classification, location: string | null // Location, skills: string[] | null // Professional skills, languages: string[] | null // Languages spoken, summary: string | null // Professional summary, currentEmployment: { title: string | null // Job title, companyName: string | null // Company name, companyLinkedinUrl: string | null // Company LinkedIn URL, startDate: unknown | null // Start date, description: string | null // Role description }[] | null // Current employment positions, pastEmployment: { title: string | null // Job title, companyName: string | null // Company name, startDate: unknown | null // Start date, endDate: unknown | null // End date }[] | null // Past employment positions, education: { instituteName: string | null // Institution name, degreeName: string | null // Degree name, fieldOfStudy: string | null // Field of study }[] | null // Education history }[] // List of contacts at the company,\n company: { name: string | null // Company name, linkedinUrl: string | null // Company LinkedIn URL, website: string | null // Company website, industry: string | null // Industry, description: string | null // Company description, headcount: number | null // Employee count, hqCity: string | null // Headquarters city, hqCountry: string | null // Headquarters country, yearFounded: number | null // Year founded, fundingStage: string | null // Funding stage, totalFunding: string | null // Total funding raised } | null // Company information,\n totalContacts: number // Total number of contacts found,\n success: boolean // Whether the operation was successful,\n error: string // Error message if operation failed\n}",
53040
52999
  "inputJsonSchema": {
53041
53000
  "type": "object",
@@ -53408,7 +53367,6 @@
53408
53367
  "type": "service",
53409
53368
  "shortDescription": "Jira integration for issue tracking and project management",
53410
53369
  "useCase": "General purpose bubble for various workflow needs",
53411
- "inputSchema": "Complex schema - see usage example for structure",
53412
53370
  "outputSchema": "Complex schema - see usage example for structure",
53413
53371
  "inputJsonSchema": {
53414
53372
  "anyOf": [
@@ -55187,7 +55145,6 @@
55187
55145
  "type": "service",
55188
55146
  "shortDescription": "Ashby ATS integration for candidate management",
55189
55147
  "useCase": "General purpose bubble for various workflow needs",
55190
- "inputSchema": "Complex schema - see usage example for structure",
55191
55148
  "outputSchema": "Complex schema - see usage example for structure",
55192
55149
  "inputJsonSchema": {
55193
55150
  "anyOf": [
@@ -55287,10 +55244,33 @@
55287
55244
  "minLength": 1,
55288
55245
  "description": "Candidate's full name (first and last name)"
55289
55246
  },
55290
- "email": {
55291
- "type": "string",
55292
- "format": "email",
55293
- "description": "Candidate's primary email address"
55247
+ "emails": {
55248
+ "type": "array",
55249
+ "items": {
55250
+ "type": "object",
55251
+ "properties": {
55252
+ "email": {
55253
+ "type": "string",
55254
+ "format": "email",
55255
+ "description": "Email address"
55256
+ },
55257
+ "type": {
55258
+ "type": "string",
55259
+ "enum": [
55260
+ "Personal",
55261
+ "Work",
55262
+ "Other"
55263
+ ],
55264
+ "description": "Type of email (Personal, Work, or Other)"
55265
+ }
55266
+ },
55267
+ "required": [
55268
+ "email",
55269
+ "type"
55270
+ ],
55271
+ "additionalProperties": false
55272
+ },
55273
+ "description": "Candidate's email addresses with type. The Personal email becomes the primary email, others become alternates."
55294
55274
  },
55295
55275
  "phone_number": {
55296
55276
  "type": "string",
@@ -56643,7 +56623,7 @@
56643
56623
  }
56644
56624
  ]
56645
56625
  },
56646
- "usageExample": "// List Candidates example\nconst ashby_list_candidates = new AshbyBubble({\n operation: \"list_candidates\", // List all candidates with optional filtering\n limit: 100 // default, // Maximum number of candidates to return (1-100)\n cursor: \"example string\", // Pagination cursor for fetching subsequent pages\n status: \"Hired\" // options: \"Hired\", \"Archived\", \"Active\", \"Lead\", // Filter candidates by application status\n job_id: \"example string\", // Filter candidates by specific job ID\n created_after: 42, // Unix timestamp in milliseconds to filter candidates created after this time\n});\n\nconst result = await ashby_list_candidates.action();\n// outputSchema for result.data when operation === 'list_candidates':\n// {\n// operation: \"list_candidates\" // List candidates operation,\n// success: boolean // Whether the operation was successful,\n// candidates: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, emailAddresses: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email }[] | undefined // All email addresses, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, phoneNumbers: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone }[] | undefined // All phone numbers, socialLinks: { url: string // Social link URL, type: string // Type of social link (e.g., LinkedIn, GitHub) }[] | undefined // Social media links, tags: { id: string // Tag ID, title: string // Tag title, isArchived: boolean | undefined // Whether the tag is archived }[] | undefined // Tags assigned to candidate, position: string | undefined | null // Current position, company: string | undefined | null // Current company, school: string | undefined | null // School, applicationIds: string[] | undefined // IDs of applications for this candidate, resumeFileHandle: { id: string // File ID, name: string // File name, handle: string // File handle for download } | undefined | null // Resume file handle, fileHandles: { id: string // File ID, name: string // File name, handle: string // File handle for download }[] | undefined // All file handles, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values }[] | undefined // List of candidates,\n// next_cursor: string | undefined // Cursor for fetching the next page of results,\n// more_data_available: boolean | undefined // Whether more data is available,\n// sync_token: string | undefined // Token for incremental sync,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Candidate example\nconst ashby_get_candidate = new AshbyBubble({\n operation: \"get_candidate\", // Get detailed information about a specific candidate\n candidate_id: \"example string\", // UUID of the candidate to retrieve\n});\n\nconst result = await ashby_get_candidate.action();\n// outputSchema for result.data when operation === 'get_candidate':\n// {\n// operation: \"get_candidate\" // Get candidate operation,\n// success: boolean // Whether the operation was successful,\n// candidate: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values } | undefined // Candidate details,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Candidate example\nconst ashby_create_candidate = new AshbyBubble({\n operation: \"create_candidate\", // Create a new candidate\n name: \"example string\", // Candidate's full name (first and last name)\n email: \"example string\", // Candidate's primary email address\n phone_number: \"example string\", // Candidate's primary phone number\n linkedin_url: \"example string\", // URL to the candidate's LinkedIn profile\n github_url: \"example string\", // URL to the candidate's GitHub profile\n website: \"example string\", // URL of the candidate's website\n source_id: \"example string\", // The source ID to set on the candidate\n credited_to_user_id: \"example string\", // The ID of the user the candidate will be credited to\n tag: \"example string\", // Optional tag to add to the candidate. Can be a tag ID (UUID) or tag name. If a name is provided, the tag will be created first.\n});\n\nconst result = await ashby_create_candidate.action();\n// outputSchema for result.data when operation === 'create_candidate':\n// {\n// operation: \"create_candidate\" // Create candidate operation,\n// success: boolean // Whether the operation was successful,\n// candidate: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values } | undefined // Created candidate details,\n// error: string // Error message if operation failed\n// }\n\n\n// Search Candidates example\nconst ashby_search_candidates = new AshbyBubble({\n operation: \"search_candidates\", // Search for candidates by email or name\n email: \"example string\", // Search by candidate email address\n name: \"example string\", // Search by candidate name\n});\n\nconst result = await ashby_search_candidates.action();\n// outputSchema for result.data when operation === 'search_candidates':\n// {\n// operation: \"search_candidates\" // Search candidates operation,\n// success: boolean // Whether the operation was successful,\n// candidates: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values }[] | undefined // List of matching candidates,\n// error: string // Error message if operation failed\n// }\n\n\n// Add Tag example\nconst ashby_add_tag = new AshbyBubble({\n operation: \"add_tag\", // Add a tag to a candidate\n candidate_id: \"example string\", // UUID of the candidate\n tag_id: \"example string\", // UUID of the tag to add\n});\n\nconst result = await ashby_add_tag.action();\n// outputSchema for result.data when operation === 'add_tag':\n// {\n// operation: \"add_tag\" // Add tag operation,\n// success: boolean // Whether the operation was successful,\n// candidate: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values } | undefined // Updated candidate details,\n// error: string // Error message if operation failed\n// }\n\n\n// List Tags example\nconst ashby_list_tags = new AshbyBubble({\n operation: \"list_tags\", // List all candidate tags\n include_archived: false // default, // Whether to include archived tags\n});\n\nconst result = await ashby_list_tags.action();\n// outputSchema for result.data when operation === 'list_tags':\n// {\n// operation: \"list_tags\" // List tags operation,\n// success: boolean // Whether the operation was successful,\n// tags: { id: string // Tag ID, title: string // Tag title, isArchived: boolean | undefined // Whether the tag is archived }[] | undefined // List of candidate tags,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Tag example\nconst ashby_create_tag = new AshbyBubble({\n operation: \"create_tag\", // Create a new candidate tag\n title: \"example string\", // Title of the tag to create\n});\n\nconst result = await ashby_create_tag.action();\n// outputSchema for result.data when operation === 'create_tag':\n// {\n// operation: \"create_tag\" // Create tag operation,\n// success: boolean // Whether the operation was successful,\n// tag: { id: string // Tag ID, title: string // Tag title, isArchived: boolean | undefined // Whether the tag is archived } | undefined // Created tag details,\n// error: string // Error message if operation failed\n// }\n\n\n// List Custom Fields example\nconst ashby_list_custom_fields = new AshbyBubble({\n operation: \"list_custom_fields\", // List all custom field definitions\n limit: 100 // default, // Maximum number of custom fields to return (1-100)\n cursor: \"example string\", // Pagination cursor for fetching subsequent pages\n sync_token: \"example string\", // Token for incremental synchronization\n});\n\nconst result = await ashby_list_custom_fields.action();\n// outputSchema for result.data when operation === 'list_custom_fields':\n// {\n// operation: \"list_custom_fields\" // List custom fields operation,\n// success: boolean // Whether the operation was successful,\n// custom_fields: { id: string // Custom field ID (UUID), isPrivate: boolean // Whether the field is private, title: string // Custom field title, objectType: string // Object type this field applies to (e.g., Application, Candidate), isArchived: boolean // Whether the field is archived, fieldType: string // Type of field (e.g., MultiValueSelect, String, Number), selectableValues: { label: string // Display label for the value, value: string // Value identifier, isArchived: boolean // Whether the value is archived }[] | undefined // Available values for select-type fields }[] | undefined // List of custom field definitions,\n// next_cursor: string | undefined // Cursor for fetching the next page of results,\n// more_data_available: boolean | undefined // Whether more data is available,\n// sync_token: string | undefined // Token for incremental sync,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`ashby failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
56626
+ "usageExample": "// List Candidates example\nconst ashby_list_candidates = new AshbyBubble({\n operation: \"list_candidates\", // List all candidates with optional filtering\n limit: 100 // default, // Maximum number of candidates to return (1-100)\n cursor: \"example string\", // Pagination cursor for fetching subsequent pages\n status: \"Hired\" // options: \"Hired\", \"Archived\", \"Active\", \"Lead\", // Filter candidates by application status\n job_id: \"example string\", // Filter candidates by specific job ID\n created_after: 42, // Unix timestamp in milliseconds to filter candidates created after this time\n});\n\nconst result = await ashby_list_candidates.action();\n// outputSchema for result.data when operation === 'list_candidates':\n// {\n// operation: \"list_candidates\" // List candidates operation,\n// success: boolean // Whether the operation was successful,\n// candidates: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, emailAddresses: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email }[] | undefined // All email addresses, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, phoneNumbers: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone }[] | undefined // All phone numbers, socialLinks: { url: string // Social link URL, type: string // Type of social link (e.g., LinkedIn, GitHub) }[] | undefined // Social media links, tags: { id: string // Tag ID, title: string // Tag title, isArchived: boolean | undefined // Whether the tag is archived }[] | undefined // Tags assigned to candidate, position: string | undefined | null // Current position, company: string | undefined | null // Current company, school: string | undefined | null // School, applicationIds: string[] | undefined // IDs of applications for this candidate, resumeFileHandle: { id: string // File ID, name: string // File name, handle: string // File handle for download } | undefined | null // Resume file handle, fileHandles: { id: string // File ID, name: string // File name, handle: string // File handle for download }[] | undefined // All file handles, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values }[] | undefined // List of candidates,\n// next_cursor: string | undefined // Cursor for fetching the next page of results,\n// more_data_available: boolean | undefined // Whether more data is available,\n// sync_token: string | undefined // Token for incremental sync,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Candidate example\nconst ashby_get_candidate = new AshbyBubble({\n operation: \"get_candidate\", // Get detailed information about a specific candidate\n candidate_id: \"example string\", // UUID of the candidate to retrieve\n});\n\nconst result = await ashby_get_candidate.action();\n// outputSchema for result.data when operation === 'get_candidate':\n// {\n// operation: \"get_candidate\" // Get candidate operation,\n// success: boolean // Whether the operation was successful,\n// candidate: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values } | undefined // Candidate details,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Candidate example\nconst ashby_create_candidate = new AshbyBubble({\n operation: \"create_candidate\", // Create a new candidate\n name: \"example string\", // Candidate's full name (first and last name)\n emails: [{ email: \"example string\" // Email address, type: \"Personal\" // options: \"Personal\", \"Work\", \"Other\" // Type of email (Personal, Work, or Other) }], // Candidate's email addresses with type. The Personal email becomes the primary email, others become alternates.\n phone_number: \"example string\", // Candidate's primary phone number\n linkedin_url: \"example string\", // URL to the candidate's LinkedIn profile\n github_url: \"example string\", // URL to the candidate's GitHub profile\n website: \"example string\", // URL of the candidate's website\n source_id: \"example string\", // The source ID to set on the candidate\n credited_to_user_id: \"example string\", // The ID of the user the candidate will be credited to\n tag: \"example string\", // Optional tag to add to the candidate. Can be a tag ID (UUID) or tag name. If a name is provided, the tag will be created first.\n});\n\nconst result = await ashby_create_candidate.action();\n// outputSchema for result.data when operation === 'create_candidate':\n// {\n// operation: \"create_candidate\" // Create candidate operation,\n// success: boolean // Whether the operation was successful,\n// candidate: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values } | undefined // Created candidate details,\n// error: string // Error message if operation failed\n// }\n\n\n// Search Candidates example\nconst ashby_search_candidates = new AshbyBubble({\n operation: \"search_candidates\", // Search for candidates by email or name\n email: \"example string\", // Search by candidate email address\n name: \"example string\", // Search by candidate name\n});\n\nconst result = await ashby_search_candidates.action();\n// outputSchema for result.data when operation === 'search_candidates':\n// {\n// operation: \"search_candidates\" // Search candidates operation,\n// success: boolean // Whether the operation was successful,\n// candidates: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values }[] | undefined // List of matching candidates,\n// error: string // Error message if operation failed\n// }\n\n\n// Add Tag example\nconst ashby_add_tag = new AshbyBubble({\n operation: \"add_tag\", // Add a tag to a candidate\n candidate_id: \"example string\", // UUID of the candidate\n tag_id: \"example string\", // UUID of the tag to add\n});\n\nconst result = await ashby_add_tag.action();\n// outputSchema for result.data when operation === 'add_tag':\n// {\n// operation: \"add_tag\" // Add tag operation,\n// success: boolean // Whether the operation was successful,\n// candidate: { id: string // Unique candidate identifier (UUID), createdAt: string | undefined // ISO 8601 creation timestamp, updatedAt: string | undefined // ISO 8601 update timestamp, name: string // Full name of the candidate, primaryEmailAddress: { value: string // Email address value, type: \"Personal\" | \"Work\" | \"Other\" // Type of email, isPrimary: boolean // Whether this is the primary email } | undefined | null // Primary email address, primaryPhoneNumber: { value: string // Phone number value, type: \"Personal\" | \"Work\" | \"Other\" // Type of phone, isPrimary: boolean // Whether this is the primary phone } | undefined | null // Primary phone number, customFields: { id: string // Custom field ID, title: string // Custom field title, value: unknown // Custom field value, isPrivate: boolean | undefined // Whether the field is private }[] | undefined // Custom field values } | undefined // Updated candidate details,\n// error: string // Error message if operation failed\n// }\n\n\n// List Tags example\nconst ashby_list_tags = new AshbyBubble({\n operation: \"list_tags\", // List all candidate tags\n include_archived: false // default, // Whether to include archived tags\n});\n\nconst result = await ashby_list_tags.action();\n// outputSchema for result.data when operation === 'list_tags':\n// {\n// operation: \"list_tags\" // List tags operation,\n// success: boolean // Whether the operation was successful,\n// tags: { id: string // Tag ID, title: string // Tag title, isArchived: boolean | undefined // Whether the tag is archived }[] | undefined // List of candidate tags,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Tag example\nconst ashby_create_tag = new AshbyBubble({\n operation: \"create_tag\", // Create a new candidate tag\n title: \"example string\", // Title of the tag to create\n});\n\nconst result = await ashby_create_tag.action();\n// outputSchema for result.data when operation === 'create_tag':\n// {\n// operation: \"create_tag\" // Create tag operation,\n// success: boolean // Whether the operation was successful,\n// tag: { id: string // Tag ID, title: string // Tag title, isArchived: boolean | undefined // Whether the tag is archived } | undefined // Created tag details,\n// error: string // Error message if operation failed\n// }\n\n\n// List Custom Fields example\nconst ashby_list_custom_fields = new AshbyBubble({\n operation: \"list_custom_fields\", // List all custom field definitions\n limit: 100 // default, // Maximum number of custom fields to return (1-100)\n cursor: \"example string\", // Pagination cursor for fetching subsequent pages\n sync_token: \"example string\", // Token for incremental synchronization\n});\n\nconst result = await ashby_list_custom_fields.action();\n// outputSchema for result.data when operation === 'list_custom_fields':\n// {\n// operation: \"list_custom_fields\" // List custom fields operation,\n// success: boolean // Whether the operation was successful,\n// custom_fields: { id: string // Custom field ID (UUID), isPrivate: boolean // Whether the field is private, title: string // Custom field title, objectType: string // Object type this field applies to (e.g., Application, Candidate), isArchived: boolean // Whether the field is archived, fieldType: string // Type of field (e.g., MultiValueSelect, String, Number), selectableValues: { label: string // Display label for the value, value: string // Value identifier, isArchived: boolean // Whether the value is archived }[] | undefined // Available values for select-type fields }[] | undefined // List of custom field definitions,\n// next_cursor: string | undefined // Cursor for fetching the next page of results,\n// more_data_available: boolean | undefined // Whether more data is available,\n// sync_token: string | undefined // Token for incremental sync,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`ashby failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
56647
56627
  "requiredCredentials": [
56648
56628
  "ASHBY_CRED"
56649
56629
  ]
@@ -56654,7 +56634,6 @@
56654
56634
  "type": "service",
56655
56635
  "shortDescription": "B2B contact enrichment for emails, phones, and LinkedIn data",
56656
56636
  "useCase": "- Enrich leads with work emails and phone numbers",
56657
- "inputSchema": "Complex schema - see usage example for structure",
56658
56637
  "outputSchema": "Complex schema - see usage example for structure",
56659
56638
  "inputJsonSchema": {
56660
56639
  "anyOf": [