@bubblelab/bubble-core 0.1.254 → 0.1.261

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 (54) hide show
  1. package/dist/bubble-bundle.d.ts +148 -31
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +9 -0
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
  6. package/dist/bubbles/service-bubble/ai-agent.js +9 -2
  7. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
  8. package/dist/bubbles/service-bubble/asana/asana.d.ts +1232 -0
  9. package/dist/bubbles/service-bubble/asana/asana.d.ts.map +1 -0
  10. package/dist/bubbles/service-bubble/asana/asana.js +809 -0
  11. package/dist/bubbles/service-bubble/asana/asana.js.map +1 -0
  12. package/dist/bubbles/service-bubble/asana/asana.schema.d.ts +1169 -0
  13. package/dist/bubbles/service-bubble/asana/asana.schema.d.ts.map +1 -0
  14. package/dist/bubbles/service-bubble/asana/asana.schema.js +740 -0
  15. package/dist/bubbles/service-bubble/asana/asana.schema.js.map +1 -0
  16. package/dist/bubbles/service-bubble/asana/index.d.ts +3 -0
  17. package/dist/bubbles/service-bubble/asana/index.d.ts.map +1 -0
  18. package/dist/bubbles/service-bubble/asana/index.js +3 -0
  19. package/dist/bubbles/service-bubble/asana/index.js.map +1 -0
  20. package/dist/bubbles/service-bubble/confluence/confluence.d.ts +2 -2
  21. package/dist/bubbles/service-bubble/confluence/confluence.schema.d.ts +2 -2
  22. package/dist/bubbles/service-bubble/discord/discord.d.ts +778 -0
  23. package/dist/bubbles/service-bubble/discord/discord.d.ts.map +1 -0
  24. package/dist/bubbles/service-bubble/discord/discord.js +370 -0
  25. package/dist/bubbles/service-bubble/discord/discord.js.map +1 -0
  26. package/dist/bubbles/service-bubble/discord/discord.schema.d.ts +739 -0
  27. package/dist/bubbles/service-bubble/discord/discord.schema.d.ts.map +1 -0
  28. package/dist/bubbles/service-bubble/discord/discord.schema.js +352 -0
  29. package/dist/bubbles/service-bubble/discord/discord.schema.js.map +1 -0
  30. package/dist/bubbles/service-bubble/discord/index.d.ts +3 -0
  31. package/dist/bubbles/service-bubble/discord/index.d.ts.map +1 -0
  32. package/dist/bubbles/service-bubble/discord/index.js +3 -0
  33. package/dist/bubbles/service-bubble/discord/index.js.map +1 -0
  34. package/dist/bubbles/service-bubble/salesforce/index.d.ts +3 -0
  35. package/dist/bubbles/service-bubble/salesforce/index.d.ts.map +1 -0
  36. package/dist/bubbles/service-bubble/salesforce/index.js +3 -0
  37. package/dist/bubbles/service-bubble/salesforce/index.js.map +1 -0
  38. package/dist/bubbles/service-bubble/salesforce/salesforce.d.ts +209 -0
  39. package/dist/bubbles/service-bubble/salesforce/salesforce.d.ts.map +1 -0
  40. package/dist/bubbles/service-bubble/salesforce/salesforce.js +221 -0
  41. package/dist/bubbles/service-bubble/salesforce/salesforce.js.map +1 -0
  42. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.d.ts +179 -0
  43. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.d.ts.map +1 -0
  44. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.js +127 -0
  45. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.js.map +1 -0
  46. package/dist/bubbles/service-bubble/snowflake/snowflake.d.ts.map +1 -1
  47. package/dist/bubbles/service-bubble/snowflake/snowflake.js +1 -1
  48. package/dist/bubbles/service-bubble/snowflake/snowflake.js.map +1 -1
  49. package/dist/bubbles.json +3945 -4
  50. package/dist/index.d.ts +6 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +3 -0
  53. package/dist/index.js.map +1 -1
  54. package/package.json +2 -2
package/dist/bubbles.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-03-26T06:52:51.923Z",
4
- "totalCount": 77,
3
+ "generatedAt": "2026-03-31T02:26:37.931Z",
4
+ "totalCount": 80,
5
5
  "bubbles": [
6
6
  {
7
7
  "name": "hello-world",
@@ -338,7 +338,7 @@
338
338
  ],
339
339
  "additionalProperties": false,
340
340
  "default": {
341
- "model": "google/gemini-2.5-flash-lite"
341
+ "model": "google/gemini-3-flash-preview"
342
342
  },
343
343
  "description": "Backup model configuration to use if the primary model fails."
344
344
  }
@@ -348,7 +348,7 @@
348
348
  ],
349
349
  "additionalProperties": false,
350
350
  "default": {
351
- "model": "google/gemini-2.5-flash-lite",
351
+ "model": "google/gemini-3-flash-preview",
352
352
  "temperature": 1,
353
353
  "maxTokens": 65536,
354
354
  "maxRetries": 3,
@@ -81876,6 +81876,3947 @@
81876
81876
  "requiredCredentials": [
81877
81877
  "SNOWFLAKE_CRED"
81878
81878
  ]
81879
+ },
81880
+ {
81881
+ "name": "salesforce",
81882
+ "alias": "",
81883
+ "type": "service",
81884
+ "shortDescription": "Salesforce CRM integration for accounts, contacts, and SOQL queries",
81885
+ "useCase": "General purpose bubble for various workflow needs",
81886
+ "outputSchema": "Complex schema - see usage example for structure",
81887
+ "inputJsonSchema": {
81888
+ "anyOf": [
81889
+ {
81890
+ "type": "object",
81891
+ "properties": {
81892
+ "operation": {
81893
+ "type": "string",
81894
+ "enum": [
81895
+ "get_account"
81896
+ ],
81897
+ "description": "Retrieve a Salesforce Account record by its ID"
81898
+ },
81899
+ "record_id": {
81900
+ "type": "string",
81901
+ "minLength": 1,
81902
+ "description": "Salesforce record ID (15 or 18 character ID, e.g. \"001xx000003DGbYAAW\")"
81903
+ },
81904
+ "fields": {
81905
+ "type": "array",
81906
+ "items": {
81907
+ "type": "string"
81908
+ },
81909
+ "description": "List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId"
81910
+ },
81911
+ "credentials": {
81912
+ "type": "object",
81913
+ "additionalProperties": {
81914
+ "type": "string"
81915
+ },
81916
+ "description": "Object mapping credential types to values (injected at runtime)"
81917
+ }
81918
+ },
81919
+ "required": [
81920
+ "operation",
81921
+ "record_id"
81922
+ ],
81923
+ "additionalProperties": false
81924
+ },
81925
+ {
81926
+ "type": "object",
81927
+ "properties": {
81928
+ "operation": {
81929
+ "type": "string",
81930
+ "enum": [
81931
+ "search_accounts"
81932
+ ],
81933
+ "description": "Search Salesforce Account records by field values using SOQL WHERE conditions"
81934
+ },
81935
+ "where_clause": {
81936
+ "type": "string",
81937
+ "description": "SOQL WHERE clause for filtering accounts (e.g. \"Name = 'Acme Corp'\" or \"AccountNumber = 'BIZ-12345'\" or \"Industry = 'Technology' AND BillingState = 'CA'\")"
81938
+ },
81939
+ "fields": {
81940
+ "type": "array",
81941
+ "items": {
81942
+ "type": "string"
81943
+ },
81944
+ "description": "List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId"
81945
+ },
81946
+ "limit": {
81947
+ "type": "number",
81948
+ "minimum": 1,
81949
+ "maximum": 2000,
81950
+ "default": 100,
81951
+ "description": "Maximum number of results to return (1-2000, default 100)"
81952
+ },
81953
+ "credentials": {
81954
+ "type": "object",
81955
+ "additionalProperties": {
81956
+ "type": "string"
81957
+ },
81958
+ "description": "Object mapping credential types to values (injected at runtime)"
81959
+ }
81960
+ },
81961
+ "required": [
81962
+ "operation",
81963
+ "where_clause"
81964
+ ],
81965
+ "additionalProperties": false
81966
+ },
81967
+ {
81968
+ "type": "object",
81969
+ "properties": {
81970
+ "operation": {
81971
+ "type": "string",
81972
+ "enum": [
81973
+ "get_contact"
81974
+ ],
81975
+ "description": "Retrieve a Salesforce Contact record by its ID"
81976
+ },
81977
+ "record_id": {
81978
+ "type": "string",
81979
+ "minLength": 1,
81980
+ "description": "Salesforce record ID (15 or 18 character ID, e.g. \"001xx000003DGbYAAW\")"
81981
+ },
81982
+ "fields": {
81983
+ "type": "array",
81984
+ "items": {
81985
+ "type": "string"
81986
+ },
81987
+ "description": "List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId"
81988
+ },
81989
+ "credentials": {
81990
+ "type": "object",
81991
+ "additionalProperties": {
81992
+ "type": "string"
81993
+ },
81994
+ "description": "Object mapping credential types to values (injected at runtime)"
81995
+ }
81996
+ },
81997
+ "required": [
81998
+ "operation",
81999
+ "record_id"
82000
+ ],
82001
+ "additionalProperties": false
82002
+ },
82003
+ {
82004
+ "type": "object",
82005
+ "properties": {
82006
+ "operation": {
82007
+ "type": "string",
82008
+ "enum": [
82009
+ "search_contacts"
82010
+ ],
82011
+ "description": "Search Salesforce Contact records by field values using SOQL WHERE conditions"
82012
+ },
82013
+ "where_clause": {
82014
+ "type": "string",
82015
+ "description": "SOQL WHERE clause for filtering contacts (e.g. \"Email = 'john@example.com'\" or \"LastName = 'Smith'\" or \"AccountId = '001xx000003DGbY'\")"
82016
+ },
82017
+ "fields": {
82018
+ "type": "array",
82019
+ "items": {
82020
+ "type": "string"
82021
+ },
82022
+ "description": "List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId"
82023
+ },
82024
+ "limit": {
82025
+ "type": "number",
82026
+ "minimum": 1,
82027
+ "maximum": 2000,
82028
+ "default": 100,
82029
+ "description": "Maximum number of results to return (1-2000, default 100)"
82030
+ },
82031
+ "credentials": {
82032
+ "type": "object",
82033
+ "additionalProperties": {
82034
+ "type": "string"
82035
+ },
82036
+ "description": "Object mapping credential types to values (injected at runtime)"
82037
+ }
82038
+ },
82039
+ "required": [
82040
+ "operation",
82041
+ "where_clause"
82042
+ ],
82043
+ "additionalProperties": false
82044
+ },
82045
+ {
82046
+ "type": "object",
82047
+ "properties": {
82048
+ "operation": {
82049
+ "type": "string",
82050
+ "enum": [
82051
+ "query"
82052
+ ],
82053
+ "description": "Execute an arbitrary SOQL (Salesforce Object Query Language) query"
82054
+ },
82055
+ "soql": {
82056
+ "type": "string",
82057
+ "minLength": 1,
82058
+ "description": "Full SOQL query string (e.g. \"SELECT Id, Name, Industry FROM Account WHERE AnnualRevenue > 1000000 ORDER BY Name LIMIT 10\")"
82059
+ },
82060
+ "credentials": {
82061
+ "type": "object",
82062
+ "additionalProperties": {
82063
+ "type": "string"
82064
+ },
82065
+ "description": "Object mapping credential types to values (injected at runtime)"
82066
+ }
82067
+ },
82068
+ "required": [
82069
+ "operation",
82070
+ "soql"
82071
+ ],
82072
+ "additionalProperties": false
82073
+ }
82074
+ ]
82075
+ },
82076
+ "outputJsonSchema": {
82077
+ "anyOf": [
82078
+ {
82079
+ "type": "object",
82080
+ "properties": {
82081
+ "operation": {
82082
+ "type": "string",
82083
+ "enum": [
82084
+ "get_account"
82085
+ ]
82086
+ },
82087
+ "success": {
82088
+ "type": "boolean"
82089
+ },
82090
+ "record": {
82091
+ "type": "object",
82092
+ "additionalProperties": {},
82093
+ "description": "A Salesforce record with its fields"
82094
+ },
82095
+ "error": {
82096
+ "type": "string"
82097
+ }
82098
+ },
82099
+ "required": [
82100
+ "operation",
82101
+ "success",
82102
+ "error"
82103
+ ],
82104
+ "additionalProperties": false
82105
+ },
82106
+ {
82107
+ "type": "object",
82108
+ "properties": {
82109
+ "operation": {
82110
+ "type": "string",
82111
+ "enum": [
82112
+ "search_accounts"
82113
+ ]
82114
+ },
82115
+ "success": {
82116
+ "type": "boolean"
82117
+ },
82118
+ "records": {
82119
+ "type": "array",
82120
+ "items": {
82121
+ "type": "object",
82122
+ "additionalProperties": {},
82123
+ "description": "A Salesforce record with its fields"
82124
+ }
82125
+ },
82126
+ "totalSize": {
82127
+ "type": "number"
82128
+ },
82129
+ "done": {
82130
+ "type": "boolean"
82131
+ },
82132
+ "error": {
82133
+ "type": "string"
82134
+ }
82135
+ },
82136
+ "required": [
82137
+ "operation",
82138
+ "success",
82139
+ "error"
82140
+ ],
82141
+ "additionalProperties": false
82142
+ },
82143
+ {
82144
+ "type": "object",
82145
+ "properties": {
82146
+ "operation": {
82147
+ "type": "string",
82148
+ "enum": [
82149
+ "get_contact"
82150
+ ]
82151
+ },
82152
+ "success": {
82153
+ "type": "boolean"
82154
+ },
82155
+ "record": {
82156
+ "type": "object",
82157
+ "additionalProperties": {},
82158
+ "description": "A Salesforce record with its fields"
82159
+ },
82160
+ "error": {
82161
+ "type": "string"
82162
+ }
82163
+ },
82164
+ "required": [
82165
+ "operation",
82166
+ "success",
82167
+ "error"
82168
+ ],
82169
+ "additionalProperties": false
82170
+ },
82171
+ {
82172
+ "type": "object",
82173
+ "properties": {
82174
+ "operation": {
82175
+ "type": "string",
82176
+ "enum": [
82177
+ "search_contacts"
82178
+ ]
82179
+ },
82180
+ "success": {
82181
+ "type": "boolean"
82182
+ },
82183
+ "records": {
82184
+ "type": "array",
82185
+ "items": {
82186
+ "type": "object",
82187
+ "additionalProperties": {},
82188
+ "description": "A Salesforce record with its fields"
82189
+ }
82190
+ },
82191
+ "totalSize": {
82192
+ "type": "number"
82193
+ },
82194
+ "done": {
82195
+ "type": "boolean"
82196
+ },
82197
+ "error": {
82198
+ "type": "string"
82199
+ }
82200
+ },
82201
+ "required": [
82202
+ "operation",
82203
+ "success",
82204
+ "error"
82205
+ ],
82206
+ "additionalProperties": false
82207
+ },
82208
+ {
82209
+ "type": "object",
82210
+ "properties": {
82211
+ "operation": {
82212
+ "type": "string",
82213
+ "enum": [
82214
+ "query"
82215
+ ]
82216
+ },
82217
+ "success": {
82218
+ "type": "boolean"
82219
+ },
82220
+ "records": {
82221
+ "type": "array",
82222
+ "items": {
82223
+ "type": "object",
82224
+ "additionalProperties": {}
82225
+ }
82226
+ },
82227
+ "totalSize": {
82228
+ "type": "number"
82229
+ },
82230
+ "done": {
82231
+ "type": "boolean"
82232
+ },
82233
+ "error": {
82234
+ "type": "string"
82235
+ }
82236
+ },
82237
+ "required": [
82238
+ "operation",
82239
+ "success",
82240
+ "error"
82241
+ ],
82242
+ "additionalProperties": false
82243
+ }
82244
+ ]
82245
+ },
82246
+ "usageExample": "// Get Account example\nconst salesforce_get_account = new SalesforceBubble({\n operation: \"get_account\", // Retrieve a Salesforce Account record by its ID\n record_id: \"example string\", // Salesforce record ID (15 or 18 character ID, e.g. \"001xx000003DGbYAAW\")\n fields: [\"example string\"], // List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId\n});\n\nconst result = await salesforce_get_account.action();\n// outputSchema for result.data when operation === 'get_account':\n// {\n// operation: \"get_account\",\n// success: boolean,\n// record: Record<string, unknown> | undefined // A Salesforce record with its fields,\n// error: string\n// }\n\n\n// Search Accounts example\nconst salesforce_search_accounts = new SalesforceBubble({\n operation: \"search_accounts\", // Search Salesforce Account records by field values using SOQL WHERE conditions\n where_clause: \"example string\", // SOQL WHERE clause for filtering accounts (e.g. \"Name = 'Acme Corp'\" or \"AccountNumber = 'BIZ-12345'\" or \"Industry = 'Technology' AND BillingState = 'CA'\")\n fields: [\"example string\"], // List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId\n limit: 100 // default, // Maximum number of results to return (1-2000, default 100)\n});\n\nconst result = await salesforce_search_accounts.action();\n// outputSchema for result.data when operation === 'search_accounts':\n// {\n// operation: \"search_accounts\",\n// success: boolean,\n// records: Record<string, unknown>[] | undefined,\n// totalSize: number | undefined,\n// done: boolean | undefined,\n// error: string\n// }\n\n\n// Get Contact example\nconst salesforce_get_contact = new SalesforceBubble({\n operation: \"get_contact\", // Retrieve a Salesforce Contact record by its ID\n record_id: \"example string\", // Salesforce record ID (15 or 18 character ID, e.g. \"001xx000003DGbYAAW\")\n fields: [\"example string\"], // List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId\n});\n\nconst result = await salesforce_get_contact.action();\n// outputSchema for result.data when operation === 'get_contact':\n// {\n// operation: \"get_contact\",\n// success: boolean,\n// record: Record<string, unknown> | undefined // A Salesforce record with its fields,\n// error: string\n// }\n\n\n// Search Contacts example\nconst salesforce_search_contacts = new SalesforceBubble({\n operation: \"search_contacts\", // Search Salesforce Contact records by field values using SOQL WHERE conditions\n where_clause: \"example string\", // SOQL WHERE clause for filtering contacts (e.g. \"Email = 'john@example.com'\" or \"LastName = 'Smith'\" or \"AccountId = '001xx000003DGbY'\")\n fields: [\"example string\"], // List of field API names to include in the response. If not specified, all accessible fields are returned. Common Account fields: Id, Name, Industry, BillingCity, AnnualRevenue, Website, Phone, AccountNumber, Type, OwnerId\n limit: 100 // default, // Maximum number of results to return (1-2000, default 100)\n});\n\nconst result = await salesforce_search_contacts.action();\n// outputSchema for result.data when operation === 'search_contacts':\n// {\n// operation: \"search_contacts\",\n// success: boolean,\n// records: Record<string, unknown>[] | undefined,\n// totalSize: number | undefined,\n// done: boolean | undefined,\n// error: string\n// }\n\n\n// Query example\nconst salesforce_query = new SalesforceBubble({\n operation: \"query\", // Execute an arbitrary SOQL (Salesforce Object Query Language) query\n soql: \"example string\", // Full SOQL query string (e.g. \"SELECT Id, Name, Industry FROM Account WHERE AnnualRevenue > 1000000 ORDER BY Name LIMIT 10\")\n});\n\nconst result = await salesforce_query.action();\n// outputSchema for result.data when operation === 'query':\n// {\n// operation: \"query\",\n// success: boolean,\n// records: Record<string, unknown>[] | undefined,\n// totalSize: number | undefined,\n// done: boolean | undefined,\n// error: string\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`salesforce failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
82247
+ "requiredCredentials": [
82248
+ "SALESFORCE_CRED"
82249
+ ]
82250
+ },
82251
+ {
82252
+ "name": "asana",
82253
+ "alias": "",
82254
+ "type": "service",
82255
+ "shortDescription": "Asana integration for tasks, projects, and team collaboration",
82256
+ "useCase": "General purpose bubble for various workflow needs",
82257
+ "outputSchema": "Complex schema - see usage example for structure",
82258
+ "inputJsonSchema": {
82259
+ "anyOf": [
82260
+ {
82261
+ "type": "object",
82262
+ "properties": {
82263
+ "operation": {
82264
+ "type": "string",
82265
+ "enum": [
82266
+ "list_tasks"
82267
+ ],
82268
+ "description": "List tasks in a project, section, or assigned to a user. Provide at least one of project, section, or assignee."
82269
+ },
82270
+ "project": {
82271
+ "type": "string",
82272
+ "description": "[ONEOF:scope] Project GID to list tasks from"
82273
+ },
82274
+ "section": {
82275
+ "type": "string",
82276
+ "description": "[ONEOF:scope] Section GID to list tasks from"
82277
+ },
82278
+ "assignee": {
82279
+ "type": "string",
82280
+ "description": "[ONEOF:scope] User GID or \"me\" to list tasks assigned to this user (requires workspace)"
82281
+ },
82282
+ "workspace": {
82283
+ "type": "string",
82284
+ "description": "Workspace GID (required when filtering by assignee, auto-filled from credential if not provided)"
82285
+ },
82286
+ "completed_since": {
82287
+ "type": "string",
82288
+ "description": "Only return tasks completed since this date (ISO 8601 format, e.g. \"2024-01-01T00:00:00Z\"). Use \"now\" to only show incomplete tasks."
82289
+ },
82290
+ "modified_since": {
82291
+ "type": "string",
82292
+ "description": "Only return tasks modified since this date (ISO 8601 format)"
82293
+ },
82294
+ "opt_fields": {
82295
+ "type": "array",
82296
+ "items": {
82297
+ "type": "string"
82298
+ },
82299
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
82300
+ },
82301
+ "limit": {
82302
+ "type": "number",
82303
+ "minimum": 1,
82304
+ "maximum": 100,
82305
+ "default": 50,
82306
+ "description": "Maximum number of results to return (1-100, default 50)"
82307
+ },
82308
+ "credentials": {
82309
+ "type": "object",
82310
+ "additionalProperties": {
82311
+ "type": "string"
82312
+ },
82313
+ "description": "Object mapping credential types to values (injected at runtime)"
82314
+ }
82315
+ },
82316
+ "required": [
82317
+ "operation"
82318
+ ],
82319
+ "additionalProperties": false
82320
+ },
82321
+ {
82322
+ "type": "object",
82323
+ "properties": {
82324
+ "operation": {
82325
+ "type": "string",
82326
+ "enum": [
82327
+ "get_task"
82328
+ ],
82329
+ "description": "Get detailed information about a specific task"
82330
+ },
82331
+ "task_gid": {
82332
+ "type": "string",
82333
+ "minLength": 1,
82334
+ "description": "Asana task GID (globally unique identifier)"
82335
+ },
82336
+ "opt_fields": {
82337
+ "type": "array",
82338
+ "items": {
82339
+ "type": "string"
82340
+ },
82341
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
82342
+ },
82343
+ "credentials": {
82344
+ "type": "object",
82345
+ "additionalProperties": {
82346
+ "type": "string"
82347
+ },
82348
+ "description": "Object mapping credential types to values (injected at runtime)"
82349
+ }
82350
+ },
82351
+ "required": [
82352
+ "operation",
82353
+ "task_gid"
82354
+ ],
82355
+ "additionalProperties": false
82356
+ },
82357
+ {
82358
+ "type": "object",
82359
+ "properties": {
82360
+ "operation": {
82361
+ "type": "string",
82362
+ "enum": [
82363
+ "create_task"
82364
+ ],
82365
+ "description": "Create a new task in a project or workspace"
82366
+ },
82367
+ "name": {
82368
+ "type": "string",
82369
+ "minLength": 1,
82370
+ "description": "Name/title of the task"
82371
+ },
82372
+ "notes": {
82373
+ "type": "string",
82374
+ "description": "Description/notes for the task"
82375
+ },
82376
+ "html_notes": {
82377
+ "type": "string",
82378
+ "description": "HTML-formatted description (overrides notes if provided)"
82379
+ },
82380
+ "assignee": {
82381
+ "type": "string",
82382
+ "description": "User GID to assign the task to, or \"me\""
82383
+ },
82384
+ "due_on": {
82385
+ "type": "string",
82386
+ "description": "Due date in YYYY-MM-DD format (e.g. \"2024-12-31\")"
82387
+ },
82388
+ "due_at": {
82389
+ "type": "string",
82390
+ "description": "Due date and time in ISO 8601 format (e.g. \"2024-12-31T17:00:00Z\")"
82391
+ },
82392
+ "start_on": {
82393
+ "type": "string",
82394
+ "description": "Start date in YYYY-MM-DD format"
82395
+ },
82396
+ "projects": {
82397
+ "type": "array",
82398
+ "items": {
82399
+ "type": "string"
82400
+ },
82401
+ "description": "Array of project GIDs to add this task to"
82402
+ },
82403
+ "memberships": {
82404
+ "type": "array",
82405
+ "items": {
82406
+ "type": "object",
82407
+ "properties": {
82408
+ "project": {
82409
+ "type": "string",
82410
+ "description": "Project GID"
82411
+ },
82412
+ "section": {
82413
+ "type": "string",
82414
+ "description": "Section GID within the project"
82415
+ }
82416
+ },
82417
+ "required": [
82418
+ "project",
82419
+ "section"
82420
+ ],
82421
+ "additionalProperties": false
82422
+ },
82423
+ "description": "Array of project/section memberships for the task"
82424
+ },
82425
+ "tags": {
82426
+ "type": "array",
82427
+ "items": {
82428
+ "type": "string"
82429
+ },
82430
+ "description": "Array of tag GIDs to add to this task"
82431
+ },
82432
+ "parent": {
82433
+ "type": "string",
82434
+ "description": "Parent task GID to create this as a subtask"
82435
+ },
82436
+ "workspace": {
82437
+ "type": "string",
82438
+ "description": "Workspace GID (required if no project specified, auto-filled from credential)"
82439
+ },
82440
+ "custom_fields": {
82441
+ "type": "object",
82442
+ "additionalProperties": {
82443
+ "anyOf": [
82444
+ {
82445
+ "type": "string"
82446
+ },
82447
+ {
82448
+ "type": "number"
82449
+ }
82450
+ ]
82451
+ },
82452
+ "description": "Custom field values as { custom_field_gid: value }. For enum fields, use the enum option GID as the value."
82453
+ },
82454
+ "credentials": {
82455
+ "type": "object",
82456
+ "additionalProperties": {
82457
+ "type": "string"
82458
+ },
82459
+ "description": "Object mapping credential types to values (injected at runtime)"
82460
+ }
82461
+ },
82462
+ "required": [
82463
+ "operation",
82464
+ "name"
82465
+ ],
82466
+ "additionalProperties": false
82467
+ },
82468
+ {
82469
+ "type": "object",
82470
+ "properties": {
82471
+ "operation": {
82472
+ "type": "string",
82473
+ "enum": [
82474
+ "update_task"
82475
+ ],
82476
+ "description": "Update an existing task (name, assignee, due date, status, etc.)"
82477
+ },
82478
+ "task_gid": {
82479
+ "type": "string",
82480
+ "minLength": 1,
82481
+ "description": "Asana task GID (globally unique identifier)"
82482
+ },
82483
+ "name": {
82484
+ "type": "string",
82485
+ "description": "New name/title for the task"
82486
+ },
82487
+ "notes": {
82488
+ "type": "string",
82489
+ "description": "New description/notes for the task"
82490
+ },
82491
+ "html_notes": {
82492
+ "type": "string",
82493
+ "description": "New HTML-formatted description"
82494
+ },
82495
+ "assignee": {
82496
+ "type": "string",
82497
+ "nullable": true,
82498
+ "description": "User GID to assign the task to, \"me\", or null to unassign"
82499
+ },
82500
+ "due_on": {
82501
+ "type": "string",
82502
+ "nullable": true,
82503
+ "description": "Due date in YYYY-MM-DD format, or null to clear"
82504
+ },
82505
+ "due_at": {
82506
+ "type": "string",
82507
+ "nullable": true,
82508
+ "description": "Due date and time in ISO 8601 format, or null to clear"
82509
+ },
82510
+ "start_on": {
82511
+ "type": "string",
82512
+ "nullable": true,
82513
+ "description": "Start date in YYYY-MM-DD format, or null to clear"
82514
+ },
82515
+ "completed": {
82516
+ "type": "boolean",
82517
+ "description": "Set to true to mark complete, false to mark incomplete"
82518
+ },
82519
+ "custom_fields": {
82520
+ "type": "object",
82521
+ "additionalProperties": {
82522
+ "anyOf": [
82523
+ {
82524
+ "type": "string"
82525
+ },
82526
+ {
82527
+ "type": "number"
82528
+ },
82529
+ {
82530
+ "enum": [
82531
+ "null"
82532
+ ],
82533
+ "nullable": true
82534
+ }
82535
+ ]
82536
+ },
82537
+ "description": "Custom field values to update as { custom_field_gid: value }"
82538
+ },
82539
+ "credentials": {
82540
+ "type": "object",
82541
+ "additionalProperties": {
82542
+ "type": "string"
82543
+ },
82544
+ "description": "Object mapping credential types to values (injected at runtime)"
82545
+ }
82546
+ },
82547
+ "required": [
82548
+ "operation",
82549
+ "task_gid"
82550
+ ],
82551
+ "additionalProperties": false
82552
+ },
82553
+ {
82554
+ "type": "object",
82555
+ "properties": {
82556
+ "operation": {
82557
+ "type": "string",
82558
+ "enum": [
82559
+ "delete_task"
82560
+ ],
82561
+ "description": "Delete a task permanently"
82562
+ },
82563
+ "task_gid": {
82564
+ "type": "string",
82565
+ "minLength": 1,
82566
+ "description": "Asana task GID (globally unique identifier)"
82567
+ },
82568
+ "credentials": {
82569
+ "type": "object",
82570
+ "additionalProperties": {
82571
+ "type": "string"
82572
+ },
82573
+ "description": "Object mapping credential types to values (injected at runtime)"
82574
+ }
82575
+ },
82576
+ "required": [
82577
+ "operation",
82578
+ "task_gid"
82579
+ ],
82580
+ "additionalProperties": false
82581
+ },
82582
+ {
82583
+ "type": "object",
82584
+ "properties": {
82585
+ "operation": {
82586
+ "type": "string",
82587
+ "enum": [
82588
+ "search_tasks"
82589
+ ],
82590
+ "description": "Search for tasks in a workspace using text and/or filters"
82591
+ },
82592
+ "workspace": {
82593
+ "type": "string",
82594
+ "description": "Workspace GID to search in (auto-filled from credential)"
82595
+ },
82596
+ "text": {
82597
+ "type": "string",
82598
+ "description": "Text to search for in task names and descriptions"
82599
+ },
82600
+ "assignee": {
82601
+ "type": "string",
82602
+ "description": "Filter by assignee user GID or \"me\""
82603
+ },
82604
+ "projects": {
82605
+ "type": "array",
82606
+ "items": {
82607
+ "type": "string"
82608
+ },
82609
+ "description": "Filter by project GID(s)"
82610
+ },
82611
+ "completed": {
82612
+ "type": "boolean",
82613
+ "description": "Filter by completion status (true=completed, false=incomplete)"
82614
+ },
82615
+ "is_subtask": {
82616
+ "type": "boolean",
82617
+ "description": "Filter by subtask status"
82618
+ },
82619
+ "sort_by": {
82620
+ "type": "string",
82621
+ "enum": [
82622
+ "due_date",
82623
+ "created_at",
82624
+ "completed_at",
82625
+ "likes",
82626
+ "modified_at"
82627
+ ],
82628
+ "default": "modified_at",
82629
+ "description": "Sort results by this field"
82630
+ },
82631
+ "sort_ascending": {
82632
+ "type": "boolean",
82633
+ "default": false,
82634
+ "description": "Sort in ascending order (default false = descending)"
82635
+ },
82636
+ "opt_fields": {
82637
+ "type": "array",
82638
+ "items": {
82639
+ "type": "string"
82640
+ },
82641
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
82642
+ },
82643
+ "limit": {
82644
+ "type": "number",
82645
+ "minimum": 1,
82646
+ "maximum": 100,
82647
+ "default": 50,
82648
+ "description": "Maximum number of results to return (1-100, default 50)"
82649
+ },
82650
+ "credentials": {
82651
+ "type": "object",
82652
+ "additionalProperties": {
82653
+ "type": "string"
82654
+ },
82655
+ "description": "Object mapping credential types to values (injected at runtime)"
82656
+ }
82657
+ },
82658
+ "required": [
82659
+ "operation"
82660
+ ],
82661
+ "additionalProperties": false
82662
+ },
82663
+ {
82664
+ "type": "object",
82665
+ "properties": {
82666
+ "operation": {
82667
+ "type": "string",
82668
+ "enum": [
82669
+ "add_task_to_section"
82670
+ ],
82671
+ "description": "Add a task to a specific section within a project"
82672
+ },
82673
+ "task_gid": {
82674
+ "type": "string",
82675
+ "minLength": 1,
82676
+ "description": "Asana task GID (globally unique identifier)"
82677
+ },
82678
+ "section_gid": {
82679
+ "type": "string",
82680
+ "minLength": 1,
82681
+ "description": "Section GID to add the task to"
82682
+ },
82683
+ "insert_before": {
82684
+ "type": "string",
82685
+ "description": "Task GID to insert before in the section"
82686
+ },
82687
+ "insert_after": {
82688
+ "type": "string",
82689
+ "description": "Task GID to insert after in the section"
82690
+ },
82691
+ "credentials": {
82692
+ "type": "object",
82693
+ "additionalProperties": {
82694
+ "type": "string"
82695
+ },
82696
+ "description": "Object mapping credential types to values (injected at runtime)"
82697
+ }
82698
+ },
82699
+ "required": [
82700
+ "operation",
82701
+ "task_gid",
82702
+ "section_gid"
82703
+ ],
82704
+ "additionalProperties": false
82705
+ },
82706
+ {
82707
+ "type": "object",
82708
+ "properties": {
82709
+ "operation": {
82710
+ "type": "string",
82711
+ "enum": [
82712
+ "set_dependencies"
82713
+ ],
82714
+ "description": "Set dependencies for a task (tasks that must be completed before this one)"
82715
+ },
82716
+ "task_gid": {
82717
+ "type": "string",
82718
+ "minLength": 1,
82719
+ "description": "Asana task GID (globally unique identifier)"
82720
+ },
82721
+ "dependencies": {
82722
+ "type": "array",
82723
+ "items": {
82724
+ "type": "string"
82725
+ },
82726
+ "description": "Array of task GIDs that this task depends on"
82727
+ },
82728
+ "credentials": {
82729
+ "type": "object",
82730
+ "additionalProperties": {
82731
+ "type": "string"
82732
+ },
82733
+ "description": "Object mapping credential types to values (injected at runtime)"
82734
+ }
82735
+ },
82736
+ "required": [
82737
+ "operation",
82738
+ "task_gid",
82739
+ "dependencies"
82740
+ ],
82741
+ "additionalProperties": false
82742
+ },
82743
+ {
82744
+ "type": "object",
82745
+ "properties": {
82746
+ "operation": {
82747
+ "type": "string",
82748
+ "enum": [
82749
+ "list_projects"
82750
+ ],
82751
+ "description": "List projects in a workspace or team"
82752
+ },
82753
+ "workspace": {
82754
+ "type": "string",
82755
+ "description": "[ONEOF:scope] Workspace GID (auto-filled from credential if not provided)"
82756
+ },
82757
+ "team": {
82758
+ "type": "string",
82759
+ "description": "[ONEOF:scope] Team GID to list projects for"
82760
+ },
82761
+ "archived": {
82762
+ "type": "boolean",
82763
+ "default": false,
82764
+ "description": "Include archived projects (default false)"
82765
+ },
82766
+ "opt_fields": {
82767
+ "type": "array",
82768
+ "items": {
82769
+ "type": "string"
82770
+ },
82771
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
82772
+ },
82773
+ "limit": {
82774
+ "type": "number",
82775
+ "minimum": 1,
82776
+ "maximum": 100,
82777
+ "default": 50,
82778
+ "description": "Maximum number of results to return (1-100, default 50)"
82779
+ },
82780
+ "credentials": {
82781
+ "type": "object",
82782
+ "additionalProperties": {
82783
+ "type": "string"
82784
+ },
82785
+ "description": "Object mapping credential types to values (injected at runtime)"
82786
+ }
82787
+ },
82788
+ "required": [
82789
+ "operation"
82790
+ ],
82791
+ "additionalProperties": false
82792
+ },
82793
+ {
82794
+ "type": "object",
82795
+ "properties": {
82796
+ "operation": {
82797
+ "type": "string",
82798
+ "enum": [
82799
+ "get_project"
82800
+ ],
82801
+ "description": "Get detailed information about a specific project"
82802
+ },
82803
+ "project_gid": {
82804
+ "type": "string",
82805
+ "minLength": 1,
82806
+ "description": "Asana project GID"
82807
+ },
82808
+ "opt_fields": {
82809
+ "type": "array",
82810
+ "items": {
82811
+ "type": "string"
82812
+ },
82813
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
82814
+ },
82815
+ "credentials": {
82816
+ "type": "object",
82817
+ "additionalProperties": {
82818
+ "type": "string"
82819
+ },
82820
+ "description": "Object mapping credential types to values (injected at runtime)"
82821
+ }
82822
+ },
82823
+ "required": [
82824
+ "operation",
82825
+ "project_gid"
82826
+ ],
82827
+ "additionalProperties": false
82828
+ },
82829
+ {
82830
+ "type": "object",
82831
+ "properties": {
82832
+ "operation": {
82833
+ "type": "string",
82834
+ "enum": [
82835
+ "create_project"
82836
+ ],
82837
+ "description": "Create a new project in a workspace or team"
82838
+ },
82839
+ "name": {
82840
+ "type": "string",
82841
+ "minLength": 1,
82842
+ "description": "Name of the project"
82843
+ },
82844
+ "notes": {
82845
+ "type": "string",
82846
+ "description": "Description/notes for the project"
82847
+ },
82848
+ "workspace": {
82849
+ "type": "string",
82850
+ "description": "Workspace GID (auto-filled from credential)"
82851
+ },
82852
+ "team": {
82853
+ "type": "string",
82854
+ "description": "Team GID (required for organization workspaces, optional for personal workspaces)"
82855
+ },
82856
+ "color": {
82857
+ "type": "string",
82858
+ "description": "Project color (e.g. \"dark-pink\", \"dark-green\", \"dark-blue\", \"dark-red\", \"dark-orange\", \"dark-purple\", \"dark-warm-gray\", \"light-pink\", \"light-green\", \"light-blue\", \"light-red\", \"light-orange\", \"light-purple\", \"light-warm-gray\")"
82859
+ },
82860
+ "layout": {
82861
+ "type": "string",
82862
+ "enum": [
82863
+ "board",
82864
+ "list",
82865
+ "timeline",
82866
+ "calendar"
82867
+ ],
82868
+ "default": "list",
82869
+ "description": "Project layout/view type (default \"list\")"
82870
+ },
82871
+ "is_template": {
82872
+ "type": "boolean",
82873
+ "description": "Whether to create as a project template"
82874
+ },
82875
+ "public": {
82876
+ "type": "boolean",
82877
+ "description": "Whether the project is public to the organization (default true)"
82878
+ },
82879
+ "credentials": {
82880
+ "type": "object",
82881
+ "additionalProperties": {
82882
+ "type": "string"
82883
+ },
82884
+ "description": "Object mapping credential types to values (injected at runtime)"
82885
+ }
82886
+ },
82887
+ "required": [
82888
+ "operation",
82889
+ "name"
82890
+ ],
82891
+ "additionalProperties": false
82892
+ },
82893
+ {
82894
+ "type": "object",
82895
+ "properties": {
82896
+ "operation": {
82897
+ "type": "string",
82898
+ "enum": [
82899
+ "update_project"
82900
+ ],
82901
+ "description": "Update an existing project"
82902
+ },
82903
+ "project_gid": {
82904
+ "type": "string",
82905
+ "minLength": 1,
82906
+ "description": "Asana project GID"
82907
+ },
82908
+ "name": {
82909
+ "type": "string",
82910
+ "description": "New name for the project"
82911
+ },
82912
+ "notes": {
82913
+ "type": "string",
82914
+ "description": "New description/notes"
82915
+ },
82916
+ "color": {
82917
+ "type": "string",
82918
+ "description": "New project color"
82919
+ },
82920
+ "archived": {
82921
+ "type": "boolean",
82922
+ "description": "Set to true to archive, false to unarchive"
82923
+ },
82924
+ "public": {
82925
+ "type": "boolean",
82926
+ "description": "Set project visibility"
82927
+ },
82928
+ "due_on": {
82929
+ "type": "string",
82930
+ "nullable": true,
82931
+ "description": "Project due date in YYYY-MM-DD format, or null to clear"
82932
+ },
82933
+ "start_on": {
82934
+ "type": "string",
82935
+ "nullable": true,
82936
+ "description": "Project start date in YYYY-MM-DD format, or null to clear"
82937
+ },
82938
+ "credentials": {
82939
+ "type": "object",
82940
+ "additionalProperties": {
82941
+ "type": "string"
82942
+ },
82943
+ "description": "Object mapping credential types to values (injected at runtime)"
82944
+ }
82945
+ },
82946
+ "required": [
82947
+ "operation",
82948
+ "project_gid"
82949
+ ],
82950
+ "additionalProperties": false
82951
+ },
82952
+ {
82953
+ "type": "object",
82954
+ "properties": {
82955
+ "operation": {
82956
+ "type": "string",
82957
+ "enum": [
82958
+ "list_sections"
82959
+ ],
82960
+ "description": "List sections in a project"
82961
+ },
82962
+ "project_gid": {
82963
+ "type": "string",
82964
+ "minLength": 1,
82965
+ "description": "Asana project GID"
82966
+ },
82967
+ "opt_fields": {
82968
+ "type": "array",
82969
+ "items": {
82970
+ "type": "string"
82971
+ },
82972
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
82973
+ },
82974
+ "limit": {
82975
+ "type": "number",
82976
+ "minimum": 1,
82977
+ "maximum": 100,
82978
+ "default": 50,
82979
+ "description": "Maximum number of results to return (1-100, default 50)"
82980
+ },
82981
+ "credentials": {
82982
+ "type": "object",
82983
+ "additionalProperties": {
82984
+ "type": "string"
82985
+ },
82986
+ "description": "Object mapping credential types to values (injected at runtime)"
82987
+ }
82988
+ },
82989
+ "required": [
82990
+ "operation",
82991
+ "project_gid"
82992
+ ],
82993
+ "additionalProperties": false
82994
+ },
82995
+ {
82996
+ "type": "object",
82997
+ "properties": {
82998
+ "operation": {
82999
+ "type": "string",
83000
+ "enum": [
83001
+ "create_section"
83002
+ ],
83003
+ "description": "Create a new section in a project"
83004
+ },
83005
+ "project_gid": {
83006
+ "type": "string",
83007
+ "minLength": 1,
83008
+ "description": "Asana project GID"
83009
+ },
83010
+ "name": {
83011
+ "type": "string",
83012
+ "minLength": 1,
83013
+ "description": "Name of the section"
83014
+ },
83015
+ "insert_before": {
83016
+ "type": "string",
83017
+ "description": "Section GID to insert before"
83018
+ },
83019
+ "insert_after": {
83020
+ "type": "string",
83021
+ "description": "Section GID to insert after"
83022
+ },
83023
+ "credentials": {
83024
+ "type": "object",
83025
+ "additionalProperties": {
83026
+ "type": "string"
83027
+ },
83028
+ "description": "Object mapping credential types to values (injected at runtime)"
83029
+ }
83030
+ },
83031
+ "required": [
83032
+ "operation",
83033
+ "project_gid",
83034
+ "name"
83035
+ ],
83036
+ "additionalProperties": false
83037
+ },
83038
+ {
83039
+ "type": "object",
83040
+ "properties": {
83041
+ "operation": {
83042
+ "type": "string",
83043
+ "enum": [
83044
+ "add_comment"
83045
+ ],
83046
+ "description": "Add a comment to a task"
83047
+ },
83048
+ "task_gid": {
83049
+ "type": "string",
83050
+ "minLength": 1,
83051
+ "description": "Asana task GID (globally unique identifier)"
83052
+ },
83053
+ "text": {
83054
+ "type": "string",
83055
+ "description": "[ONEOF:body] Plain text comment body"
83056
+ },
83057
+ "html_text": {
83058
+ "type": "string",
83059
+ "description": "[ONEOF:body] HTML-formatted comment body (e.g. \"<body>Great work!</body>\")"
83060
+ },
83061
+ "credentials": {
83062
+ "type": "object",
83063
+ "additionalProperties": {
83064
+ "type": "string"
83065
+ },
83066
+ "description": "Object mapping credential types to values (injected at runtime)"
83067
+ }
83068
+ },
83069
+ "required": [
83070
+ "operation",
83071
+ "task_gid"
83072
+ ],
83073
+ "additionalProperties": false
83074
+ },
83075
+ {
83076
+ "type": "object",
83077
+ "properties": {
83078
+ "operation": {
83079
+ "type": "string",
83080
+ "enum": [
83081
+ "get_task_stories"
83082
+ ],
83083
+ "description": "Get comments and activity stories for a task"
83084
+ },
83085
+ "task_gid": {
83086
+ "type": "string",
83087
+ "minLength": 1,
83088
+ "description": "Asana task GID (globally unique identifier)"
83089
+ },
83090
+ "opt_fields": {
83091
+ "type": "array",
83092
+ "items": {
83093
+ "type": "string"
83094
+ },
83095
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83096
+ },
83097
+ "limit": {
83098
+ "type": "number",
83099
+ "minimum": 1,
83100
+ "maximum": 100,
83101
+ "default": 50,
83102
+ "description": "Maximum number of results to return (1-100, default 50)"
83103
+ },
83104
+ "credentials": {
83105
+ "type": "object",
83106
+ "additionalProperties": {
83107
+ "type": "string"
83108
+ },
83109
+ "description": "Object mapping credential types to values (injected at runtime)"
83110
+ }
83111
+ },
83112
+ "required": [
83113
+ "operation",
83114
+ "task_gid"
83115
+ ],
83116
+ "additionalProperties": false
83117
+ },
83118
+ {
83119
+ "type": "object",
83120
+ "properties": {
83121
+ "operation": {
83122
+ "type": "string",
83123
+ "enum": [
83124
+ "list_users"
83125
+ ],
83126
+ "description": "List users in a workspace"
83127
+ },
83128
+ "workspace": {
83129
+ "type": "string",
83130
+ "description": "Workspace GID (auto-filled from credential)"
83131
+ },
83132
+ "opt_fields": {
83133
+ "type": "array",
83134
+ "items": {
83135
+ "type": "string"
83136
+ },
83137
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83138
+ },
83139
+ "limit": {
83140
+ "type": "number",
83141
+ "minimum": 1,
83142
+ "maximum": 100,
83143
+ "default": 50,
83144
+ "description": "Maximum number of results to return (1-100, default 50)"
83145
+ },
83146
+ "credentials": {
83147
+ "type": "object",
83148
+ "additionalProperties": {
83149
+ "type": "string"
83150
+ },
83151
+ "description": "Object mapping credential types to values (injected at runtime)"
83152
+ }
83153
+ },
83154
+ "required": [
83155
+ "operation"
83156
+ ],
83157
+ "additionalProperties": false
83158
+ },
83159
+ {
83160
+ "type": "object",
83161
+ "properties": {
83162
+ "operation": {
83163
+ "type": "string",
83164
+ "enum": [
83165
+ "get_user"
83166
+ ],
83167
+ "description": "Get details about a specific user"
83168
+ },
83169
+ "user_gid": {
83170
+ "type": "string",
83171
+ "minLength": 1,
83172
+ "description": "User GID or \"me\" for the authenticated user"
83173
+ },
83174
+ "opt_fields": {
83175
+ "type": "array",
83176
+ "items": {
83177
+ "type": "string"
83178
+ },
83179
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83180
+ },
83181
+ "credentials": {
83182
+ "type": "object",
83183
+ "additionalProperties": {
83184
+ "type": "string"
83185
+ },
83186
+ "description": "Object mapping credential types to values (injected at runtime)"
83187
+ }
83188
+ },
83189
+ "required": [
83190
+ "operation",
83191
+ "user_gid"
83192
+ ],
83193
+ "additionalProperties": false
83194
+ },
83195
+ {
83196
+ "type": "object",
83197
+ "properties": {
83198
+ "operation": {
83199
+ "type": "string",
83200
+ "enum": [
83201
+ "list_teams"
83202
+ ],
83203
+ "description": "List teams in a workspace/organization"
83204
+ },
83205
+ "workspace": {
83206
+ "type": "string",
83207
+ "description": "Workspace GID (auto-filled from credential)"
83208
+ },
83209
+ "opt_fields": {
83210
+ "type": "array",
83211
+ "items": {
83212
+ "type": "string"
83213
+ },
83214
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83215
+ },
83216
+ "limit": {
83217
+ "type": "number",
83218
+ "minimum": 1,
83219
+ "maximum": 100,
83220
+ "default": 50,
83221
+ "description": "Maximum number of results to return (1-100, default 50)"
83222
+ },
83223
+ "credentials": {
83224
+ "type": "object",
83225
+ "additionalProperties": {
83226
+ "type": "string"
83227
+ },
83228
+ "description": "Object mapping credential types to values (injected at runtime)"
83229
+ }
83230
+ },
83231
+ "required": [
83232
+ "operation"
83233
+ ],
83234
+ "additionalProperties": false
83235
+ },
83236
+ {
83237
+ "type": "object",
83238
+ "properties": {
83239
+ "operation": {
83240
+ "type": "string",
83241
+ "enum": [
83242
+ "list_team_members"
83243
+ ],
83244
+ "description": "List members of a team"
83245
+ },
83246
+ "team_gid": {
83247
+ "type": "string",
83248
+ "minLength": 1,
83249
+ "description": "Team GID"
83250
+ },
83251
+ "opt_fields": {
83252
+ "type": "array",
83253
+ "items": {
83254
+ "type": "string"
83255
+ },
83256
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83257
+ },
83258
+ "limit": {
83259
+ "type": "number",
83260
+ "minimum": 1,
83261
+ "maximum": 100,
83262
+ "default": 50,
83263
+ "description": "Maximum number of results to return (1-100, default 50)"
83264
+ },
83265
+ "credentials": {
83266
+ "type": "object",
83267
+ "additionalProperties": {
83268
+ "type": "string"
83269
+ },
83270
+ "description": "Object mapping credential types to values (injected at runtime)"
83271
+ }
83272
+ },
83273
+ "required": [
83274
+ "operation",
83275
+ "team_gid"
83276
+ ],
83277
+ "additionalProperties": false
83278
+ },
83279
+ {
83280
+ "type": "object",
83281
+ "properties": {
83282
+ "operation": {
83283
+ "type": "string",
83284
+ "enum": [
83285
+ "list_tags"
83286
+ ],
83287
+ "description": "List tags in a workspace"
83288
+ },
83289
+ "workspace": {
83290
+ "type": "string",
83291
+ "description": "Workspace GID (auto-filled from credential)"
83292
+ },
83293
+ "opt_fields": {
83294
+ "type": "array",
83295
+ "items": {
83296
+ "type": "string"
83297
+ },
83298
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83299
+ },
83300
+ "limit": {
83301
+ "type": "number",
83302
+ "minimum": 1,
83303
+ "maximum": 100,
83304
+ "default": 50,
83305
+ "description": "Maximum number of results to return (1-100, default 50)"
83306
+ },
83307
+ "credentials": {
83308
+ "type": "object",
83309
+ "additionalProperties": {
83310
+ "type": "string"
83311
+ },
83312
+ "description": "Object mapping credential types to values (injected at runtime)"
83313
+ }
83314
+ },
83315
+ "required": [
83316
+ "operation"
83317
+ ],
83318
+ "additionalProperties": false
83319
+ },
83320
+ {
83321
+ "type": "object",
83322
+ "properties": {
83323
+ "operation": {
83324
+ "type": "string",
83325
+ "enum": [
83326
+ "create_tag"
83327
+ ],
83328
+ "description": "Create a new tag"
83329
+ },
83330
+ "name": {
83331
+ "type": "string",
83332
+ "minLength": 1,
83333
+ "description": "Name of the tag"
83334
+ },
83335
+ "workspace": {
83336
+ "type": "string",
83337
+ "description": "Workspace GID (auto-filled from credential)"
83338
+ },
83339
+ "color": {
83340
+ "type": "string",
83341
+ "description": "Tag color (e.g. \"dark-pink\", \"dark-green\", \"light-blue\")"
83342
+ },
83343
+ "credentials": {
83344
+ "type": "object",
83345
+ "additionalProperties": {
83346
+ "type": "string"
83347
+ },
83348
+ "description": "Object mapping credential types to values (injected at runtime)"
83349
+ }
83350
+ },
83351
+ "required": [
83352
+ "operation",
83353
+ "name"
83354
+ ],
83355
+ "additionalProperties": false
83356
+ },
83357
+ {
83358
+ "type": "object",
83359
+ "properties": {
83360
+ "operation": {
83361
+ "type": "string",
83362
+ "enum": [
83363
+ "add_tag_to_task"
83364
+ ],
83365
+ "description": "Add a tag to a task"
83366
+ },
83367
+ "task_gid": {
83368
+ "type": "string",
83369
+ "minLength": 1,
83370
+ "description": "Asana task GID (globally unique identifier)"
83371
+ },
83372
+ "tag_gid": {
83373
+ "type": "string",
83374
+ "minLength": 1,
83375
+ "description": "Tag GID to add"
83376
+ },
83377
+ "credentials": {
83378
+ "type": "object",
83379
+ "additionalProperties": {
83380
+ "type": "string"
83381
+ },
83382
+ "description": "Object mapping credential types to values (injected at runtime)"
83383
+ }
83384
+ },
83385
+ "required": [
83386
+ "operation",
83387
+ "task_gid",
83388
+ "tag_gid"
83389
+ ],
83390
+ "additionalProperties": false
83391
+ },
83392
+ {
83393
+ "type": "object",
83394
+ "properties": {
83395
+ "operation": {
83396
+ "type": "string",
83397
+ "enum": [
83398
+ "remove_tag_from_task"
83399
+ ],
83400
+ "description": "Remove a tag from a task"
83401
+ },
83402
+ "task_gid": {
83403
+ "type": "string",
83404
+ "minLength": 1,
83405
+ "description": "Asana task GID (globally unique identifier)"
83406
+ },
83407
+ "tag_gid": {
83408
+ "type": "string",
83409
+ "minLength": 1,
83410
+ "description": "Tag GID to remove"
83411
+ },
83412
+ "credentials": {
83413
+ "type": "object",
83414
+ "additionalProperties": {
83415
+ "type": "string"
83416
+ },
83417
+ "description": "Object mapping credential types to values (injected at runtime)"
83418
+ }
83419
+ },
83420
+ "required": [
83421
+ "operation",
83422
+ "task_gid",
83423
+ "tag_gid"
83424
+ ],
83425
+ "additionalProperties": false
83426
+ },
83427
+ {
83428
+ "type": "object",
83429
+ "properties": {
83430
+ "operation": {
83431
+ "type": "string",
83432
+ "enum": [
83433
+ "list_workspaces"
83434
+ ],
83435
+ "description": "List all workspaces the authenticated user has access to"
83436
+ },
83437
+ "opt_fields": {
83438
+ "type": "array",
83439
+ "items": {
83440
+ "type": "string"
83441
+ },
83442
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83443
+ },
83444
+ "limit": {
83445
+ "type": "number",
83446
+ "minimum": 1,
83447
+ "maximum": 100,
83448
+ "default": 50,
83449
+ "description": "Maximum number of results to return (1-100, default 50)"
83450
+ },
83451
+ "credentials": {
83452
+ "type": "object",
83453
+ "additionalProperties": {
83454
+ "type": "string"
83455
+ },
83456
+ "description": "Object mapping credential types to values (injected at runtime)"
83457
+ }
83458
+ },
83459
+ "required": [
83460
+ "operation"
83461
+ ],
83462
+ "additionalProperties": false
83463
+ },
83464
+ {
83465
+ "type": "object",
83466
+ "properties": {
83467
+ "operation": {
83468
+ "type": "string",
83469
+ "enum": [
83470
+ "list_custom_fields"
83471
+ ],
83472
+ "description": "List custom field settings for a project"
83473
+ },
83474
+ "project_gid": {
83475
+ "type": "string",
83476
+ "minLength": 1,
83477
+ "description": "Asana project GID"
83478
+ },
83479
+ "opt_fields": {
83480
+ "type": "array",
83481
+ "items": {
83482
+ "type": "string"
83483
+ },
83484
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83485
+ },
83486
+ "limit": {
83487
+ "type": "number",
83488
+ "minimum": 1,
83489
+ "maximum": 100,
83490
+ "default": 50,
83491
+ "description": "Maximum number of results to return (1-100, default 50)"
83492
+ },
83493
+ "credentials": {
83494
+ "type": "object",
83495
+ "additionalProperties": {
83496
+ "type": "string"
83497
+ },
83498
+ "description": "Object mapping credential types to values (injected at runtime)"
83499
+ }
83500
+ },
83501
+ "required": [
83502
+ "operation",
83503
+ "project_gid"
83504
+ ],
83505
+ "additionalProperties": false
83506
+ },
83507
+ {
83508
+ "type": "object",
83509
+ "properties": {
83510
+ "operation": {
83511
+ "type": "string",
83512
+ "enum": [
83513
+ "list_attachments"
83514
+ ],
83515
+ "description": "List attachments on a task"
83516
+ },
83517
+ "task_gid": {
83518
+ "type": "string",
83519
+ "minLength": 1,
83520
+ "description": "Asana task GID (globally unique identifier)"
83521
+ },
83522
+ "opt_fields": {
83523
+ "type": "array",
83524
+ "items": {
83525
+ "type": "string"
83526
+ },
83527
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83528
+ },
83529
+ "limit": {
83530
+ "type": "number",
83531
+ "minimum": 1,
83532
+ "maximum": 100,
83533
+ "default": 50,
83534
+ "description": "Maximum number of results to return (1-100, default 50)"
83535
+ },
83536
+ "credentials": {
83537
+ "type": "object",
83538
+ "additionalProperties": {
83539
+ "type": "string"
83540
+ },
83541
+ "description": "Object mapping credential types to values (injected at runtime)"
83542
+ }
83543
+ },
83544
+ "required": [
83545
+ "operation",
83546
+ "task_gid"
83547
+ ],
83548
+ "additionalProperties": false
83549
+ },
83550
+ {
83551
+ "type": "object",
83552
+ "properties": {
83553
+ "operation": {
83554
+ "type": "string",
83555
+ "enum": [
83556
+ "list_subtasks"
83557
+ ],
83558
+ "description": "List subtasks (children) of a task"
83559
+ },
83560
+ "task_gid": {
83561
+ "type": "string",
83562
+ "minLength": 1,
83563
+ "description": "Asana task GID (globally unique identifier)"
83564
+ },
83565
+ "opt_fields": {
83566
+ "type": "array",
83567
+ "items": {
83568
+ "type": "string"
83569
+ },
83570
+ "description": "Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])"
83571
+ },
83572
+ "limit": {
83573
+ "type": "number",
83574
+ "minimum": 1,
83575
+ "maximum": 100,
83576
+ "default": 50,
83577
+ "description": "Maximum number of results to return (1-100, default 50)"
83578
+ },
83579
+ "credentials": {
83580
+ "type": "object",
83581
+ "additionalProperties": {
83582
+ "type": "string"
83583
+ },
83584
+ "description": "Object mapping credential types to values (injected at runtime)"
83585
+ }
83586
+ },
83587
+ "required": [
83588
+ "operation",
83589
+ "task_gid"
83590
+ ],
83591
+ "additionalProperties": false
83592
+ },
83593
+ {
83594
+ "type": "object",
83595
+ "properties": {
83596
+ "operation": {
83597
+ "type": "string",
83598
+ "enum": [
83599
+ "add_task_to_project"
83600
+ ],
83601
+ "description": "Add a task to a project (task can belong to multiple projects)"
83602
+ },
83603
+ "task_gid": {
83604
+ "type": "string",
83605
+ "minLength": 1,
83606
+ "description": "Asana task GID (globally unique identifier)"
83607
+ },
83608
+ "project_gid": {
83609
+ "type": "string",
83610
+ "minLength": 1,
83611
+ "description": "Asana project GID"
83612
+ },
83613
+ "section_gid": {
83614
+ "type": "string",
83615
+ "description": "Optional section GID to place the task in within the project"
83616
+ },
83617
+ "credentials": {
83618
+ "type": "object",
83619
+ "additionalProperties": {
83620
+ "type": "string"
83621
+ },
83622
+ "description": "Object mapping credential types to values (injected at runtime)"
83623
+ }
83624
+ },
83625
+ "required": [
83626
+ "operation",
83627
+ "task_gid",
83628
+ "project_gid"
83629
+ ],
83630
+ "additionalProperties": false
83631
+ },
83632
+ {
83633
+ "type": "object",
83634
+ "properties": {
83635
+ "operation": {
83636
+ "type": "string",
83637
+ "enum": [
83638
+ "remove_task_from_project"
83639
+ ],
83640
+ "description": "Remove a task from a project (task still exists, just no longer in this project)"
83641
+ },
83642
+ "task_gid": {
83643
+ "type": "string",
83644
+ "minLength": 1,
83645
+ "description": "Asana task GID (globally unique identifier)"
83646
+ },
83647
+ "project_gid": {
83648
+ "type": "string",
83649
+ "minLength": 1,
83650
+ "description": "Asana project GID"
83651
+ },
83652
+ "credentials": {
83653
+ "type": "object",
83654
+ "additionalProperties": {
83655
+ "type": "string"
83656
+ },
83657
+ "description": "Object mapping credential types to values (injected at runtime)"
83658
+ }
83659
+ },
83660
+ "required": [
83661
+ "operation",
83662
+ "task_gid",
83663
+ "project_gid"
83664
+ ],
83665
+ "additionalProperties": false
83666
+ },
83667
+ {
83668
+ "type": "object",
83669
+ "properties": {
83670
+ "operation": {
83671
+ "type": "string",
83672
+ "enum": [
83673
+ "update_section"
83674
+ ],
83675
+ "description": "Rename or reorder a section"
83676
+ },
83677
+ "section_gid": {
83678
+ "type": "string",
83679
+ "minLength": 1,
83680
+ "description": "Section GID to update"
83681
+ },
83682
+ "name": {
83683
+ "type": "string",
83684
+ "description": "New name for the section"
83685
+ },
83686
+ "credentials": {
83687
+ "type": "object",
83688
+ "additionalProperties": {
83689
+ "type": "string"
83690
+ },
83691
+ "description": "Object mapping credential types to values (injected at runtime)"
83692
+ }
83693
+ },
83694
+ "required": [
83695
+ "operation",
83696
+ "section_gid"
83697
+ ],
83698
+ "additionalProperties": false
83699
+ },
83700
+ {
83701
+ "type": "object",
83702
+ "properties": {
83703
+ "operation": {
83704
+ "type": "string",
83705
+ "enum": [
83706
+ "delete_section"
83707
+ ],
83708
+ "description": "Delete a section from a project (tasks in it are NOT deleted, they become unsectioned)"
83709
+ },
83710
+ "section_gid": {
83711
+ "type": "string",
83712
+ "minLength": 1,
83713
+ "description": "Section GID to delete"
83714
+ },
83715
+ "credentials": {
83716
+ "type": "object",
83717
+ "additionalProperties": {
83718
+ "type": "string"
83719
+ },
83720
+ "description": "Object mapping credential types to values (injected at runtime)"
83721
+ }
83722
+ },
83723
+ "required": [
83724
+ "operation",
83725
+ "section_gid"
83726
+ ],
83727
+ "additionalProperties": false
83728
+ },
83729
+ {
83730
+ "type": "object",
83731
+ "properties": {
83732
+ "operation": {
83733
+ "type": "string",
83734
+ "enum": [
83735
+ "delete_project"
83736
+ ],
83737
+ "description": "Permanently delete a project and all its tasks"
83738
+ },
83739
+ "project_gid": {
83740
+ "type": "string",
83741
+ "minLength": 1,
83742
+ "description": "Asana project GID"
83743
+ },
83744
+ "credentials": {
83745
+ "type": "object",
83746
+ "additionalProperties": {
83747
+ "type": "string"
83748
+ },
83749
+ "description": "Object mapping credential types to values (injected at runtime)"
83750
+ }
83751
+ },
83752
+ "required": [
83753
+ "operation",
83754
+ "project_gid"
83755
+ ],
83756
+ "additionalProperties": false
83757
+ }
83758
+ ]
83759
+ },
83760
+ "outputJsonSchema": {
83761
+ "anyOf": [
83762
+ {
83763
+ "type": "object",
83764
+ "properties": {
83765
+ "operation": {
83766
+ "type": "string",
83767
+ "enum": [
83768
+ "list_tasks"
83769
+ ]
83770
+ },
83771
+ "success": {
83772
+ "type": "boolean"
83773
+ },
83774
+ "tasks": {
83775
+ "type": "array",
83776
+ "items": {
83777
+ "type": "object",
83778
+ "additionalProperties": {},
83779
+ "description": "An Asana resource object with its fields"
83780
+ }
83781
+ },
83782
+ "error": {
83783
+ "type": "string"
83784
+ }
83785
+ },
83786
+ "required": [
83787
+ "operation",
83788
+ "success",
83789
+ "error"
83790
+ ],
83791
+ "additionalProperties": false
83792
+ },
83793
+ {
83794
+ "type": "object",
83795
+ "properties": {
83796
+ "operation": {
83797
+ "type": "string",
83798
+ "enum": [
83799
+ "get_task"
83800
+ ]
83801
+ },
83802
+ "success": {
83803
+ "type": "boolean"
83804
+ },
83805
+ "task": {
83806
+ "type": "object",
83807
+ "additionalProperties": {},
83808
+ "description": "An Asana resource object with its fields"
83809
+ },
83810
+ "error": {
83811
+ "type": "string"
83812
+ }
83813
+ },
83814
+ "required": [
83815
+ "operation",
83816
+ "success",
83817
+ "error"
83818
+ ],
83819
+ "additionalProperties": false
83820
+ },
83821
+ {
83822
+ "type": "object",
83823
+ "properties": {
83824
+ "operation": {
83825
+ "type": "string",
83826
+ "enum": [
83827
+ "create_task"
83828
+ ]
83829
+ },
83830
+ "success": {
83831
+ "type": "boolean"
83832
+ },
83833
+ "task": {
83834
+ "type": "object",
83835
+ "additionalProperties": {},
83836
+ "description": "An Asana resource object with its fields"
83837
+ },
83838
+ "error": {
83839
+ "type": "string"
83840
+ }
83841
+ },
83842
+ "required": [
83843
+ "operation",
83844
+ "success",
83845
+ "error"
83846
+ ],
83847
+ "additionalProperties": false
83848
+ },
83849
+ {
83850
+ "type": "object",
83851
+ "properties": {
83852
+ "operation": {
83853
+ "type": "string",
83854
+ "enum": [
83855
+ "update_task"
83856
+ ]
83857
+ },
83858
+ "success": {
83859
+ "type": "boolean"
83860
+ },
83861
+ "task": {
83862
+ "type": "object",
83863
+ "additionalProperties": {},
83864
+ "description": "An Asana resource object with its fields"
83865
+ },
83866
+ "error": {
83867
+ "type": "string"
83868
+ }
83869
+ },
83870
+ "required": [
83871
+ "operation",
83872
+ "success",
83873
+ "error"
83874
+ ],
83875
+ "additionalProperties": false
83876
+ },
83877
+ {
83878
+ "type": "object",
83879
+ "properties": {
83880
+ "operation": {
83881
+ "type": "string",
83882
+ "enum": [
83883
+ "delete_task"
83884
+ ]
83885
+ },
83886
+ "success": {
83887
+ "type": "boolean"
83888
+ },
83889
+ "error": {
83890
+ "type": "string"
83891
+ }
83892
+ },
83893
+ "required": [
83894
+ "operation",
83895
+ "success",
83896
+ "error"
83897
+ ],
83898
+ "additionalProperties": false
83899
+ },
83900
+ {
83901
+ "type": "object",
83902
+ "properties": {
83903
+ "operation": {
83904
+ "type": "string",
83905
+ "enum": [
83906
+ "search_tasks"
83907
+ ]
83908
+ },
83909
+ "success": {
83910
+ "type": "boolean"
83911
+ },
83912
+ "tasks": {
83913
+ "type": "array",
83914
+ "items": {
83915
+ "type": "object",
83916
+ "additionalProperties": {},
83917
+ "description": "An Asana resource object with its fields"
83918
+ }
83919
+ },
83920
+ "error": {
83921
+ "type": "string"
83922
+ }
83923
+ },
83924
+ "required": [
83925
+ "operation",
83926
+ "success",
83927
+ "error"
83928
+ ],
83929
+ "additionalProperties": false
83930
+ },
83931
+ {
83932
+ "type": "object",
83933
+ "properties": {
83934
+ "operation": {
83935
+ "type": "string",
83936
+ "enum": [
83937
+ "add_task_to_section"
83938
+ ]
83939
+ },
83940
+ "success": {
83941
+ "type": "boolean"
83942
+ },
83943
+ "error": {
83944
+ "type": "string"
83945
+ }
83946
+ },
83947
+ "required": [
83948
+ "operation",
83949
+ "success",
83950
+ "error"
83951
+ ],
83952
+ "additionalProperties": false
83953
+ },
83954
+ {
83955
+ "type": "object",
83956
+ "properties": {
83957
+ "operation": {
83958
+ "type": "string",
83959
+ "enum": [
83960
+ "set_dependencies"
83961
+ ]
83962
+ },
83963
+ "success": {
83964
+ "type": "boolean"
83965
+ },
83966
+ "error": {
83967
+ "type": "string"
83968
+ }
83969
+ },
83970
+ "required": [
83971
+ "operation",
83972
+ "success",
83973
+ "error"
83974
+ ],
83975
+ "additionalProperties": false
83976
+ },
83977
+ {
83978
+ "type": "object",
83979
+ "properties": {
83980
+ "operation": {
83981
+ "type": "string",
83982
+ "enum": [
83983
+ "list_projects"
83984
+ ]
83985
+ },
83986
+ "success": {
83987
+ "type": "boolean"
83988
+ },
83989
+ "projects": {
83990
+ "type": "array",
83991
+ "items": {
83992
+ "type": "object",
83993
+ "additionalProperties": {},
83994
+ "description": "An Asana resource object with its fields"
83995
+ }
83996
+ },
83997
+ "error": {
83998
+ "type": "string"
83999
+ }
84000
+ },
84001
+ "required": [
84002
+ "operation",
84003
+ "success",
84004
+ "error"
84005
+ ],
84006
+ "additionalProperties": false
84007
+ },
84008
+ {
84009
+ "type": "object",
84010
+ "properties": {
84011
+ "operation": {
84012
+ "type": "string",
84013
+ "enum": [
84014
+ "get_project"
84015
+ ]
84016
+ },
84017
+ "success": {
84018
+ "type": "boolean"
84019
+ },
84020
+ "project": {
84021
+ "type": "object",
84022
+ "additionalProperties": {},
84023
+ "description": "An Asana resource object with its fields"
84024
+ },
84025
+ "error": {
84026
+ "type": "string"
84027
+ }
84028
+ },
84029
+ "required": [
84030
+ "operation",
84031
+ "success",
84032
+ "error"
84033
+ ],
84034
+ "additionalProperties": false
84035
+ },
84036
+ {
84037
+ "type": "object",
84038
+ "properties": {
84039
+ "operation": {
84040
+ "type": "string",
84041
+ "enum": [
84042
+ "create_project"
84043
+ ]
84044
+ },
84045
+ "success": {
84046
+ "type": "boolean"
84047
+ },
84048
+ "project": {
84049
+ "type": "object",
84050
+ "additionalProperties": {},
84051
+ "description": "An Asana resource object with its fields"
84052
+ },
84053
+ "error": {
84054
+ "type": "string"
84055
+ }
84056
+ },
84057
+ "required": [
84058
+ "operation",
84059
+ "success",
84060
+ "error"
84061
+ ],
84062
+ "additionalProperties": false
84063
+ },
84064
+ {
84065
+ "type": "object",
84066
+ "properties": {
84067
+ "operation": {
84068
+ "type": "string",
84069
+ "enum": [
84070
+ "update_project"
84071
+ ]
84072
+ },
84073
+ "success": {
84074
+ "type": "boolean"
84075
+ },
84076
+ "project": {
84077
+ "type": "object",
84078
+ "additionalProperties": {},
84079
+ "description": "An Asana resource object with its fields"
84080
+ },
84081
+ "error": {
84082
+ "type": "string"
84083
+ }
84084
+ },
84085
+ "required": [
84086
+ "operation",
84087
+ "success",
84088
+ "error"
84089
+ ],
84090
+ "additionalProperties": false
84091
+ },
84092
+ {
84093
+ "type": "object",
84094
+ "properties": {
84095
+ "operation": {
84096
+ "type": "string",
84097
+ "enum": [
84098
+ "list_sections"
84099
+ ]
84100
+ },
84101
+ "success": {
84102
+ "type": "boolean"
84103
+ },
84104
+ "sections": {
84105
+ "type": "array",
84106
+ "items": {
84107
+ "type": "object",
84108
+ "additionalProperties": {},
84109
+ "description": "An Asana resource object with its fields"
84110
+ }
84111
+ },
84112
+ "error": {
84113
+ "type": "string"
84114
+ }
84115
+ },
84116
+ "required": [
84117
+ "operation",
84118
+ "success",
84119
+ "error"
84120
+ ],
84121
+ "additionalProperties": false
84122
+ },
84123
+ {
84124
+ "type": "object",
84125
+ "properties": {
84126
+ "operation": {
84127
+ "type": "string",
84128
+ "enum": [
84129
+ "create_section"
84130
+ ]
84131
+ },
84132
+ "success": {
84133
+ "type": "boolean"
84134
+ },
84135
+ "section": {
84136
+ "type": "object",
84137
+ "additionalProperties": {},
84138
+ "description": "An Asana resource object with its fields"
84139
+ },
84140
+ "error": {
84141
+ "type": "string"
84142
+ }
84143
+ },
84144
+ "required": [
84145
+ "operation",
84146
+ "success",
84147
+ "error"
84148
+ ],
84149
+ "additionalProperties": false
84150
+ },
84151
+ {
84152
+ "type": "object",
84153
+ "properties": {
84154
+ "operation": {
84155
+ "type": "string",
84156
+ "enum": [
84157
+ "add_comment"
84158
+ ]
84159
+ },
84160
+ "success": {
84161
+ "type": "boolean"
84162
+ },
84163
+ "story": {
84164
+ "type": "object",
84165
+ "additionalProperties": {},
84166
+ "description": "An Asana resource object with its fields"
84167
+ },
84168
+ "error": {
84169
+ "type": "string"
84170
+ }
84171
+ },
84172
+ "required": [
84173
+ "operation",
84174
+ "success",
84175
+ "error"
84176
+ ],
84177
+ "additionalProperties": false
84178
+ },
84179
+ {
84180
+ "type": "object",
84181
+ "properties": {
84182
+ "operation": {
84183
+ "type": "string",
84184
+ "enum": [
84185
+ "get_task_stories"
84186
+ ]
84187
+ },
84188
+ "success": {
84189
+ "type": "boolean"
84190
+ },
84191
+ "stories": {
84192
+ "type": "array",
84193
+ "items": {
84194
+ "type": "object",
84195
+ "additionalProperties": {},
84196
+ "description": "An Asana resource object with its fields"
84197
+ }
84198
+ },
84199
+ "error": {
84200
+ "type": "string"
84201
+ }
84202
+ },
84203
+ "required": [
84204
+ "operation",
84205
+ "success",
84206
+ "error"
84207
+ ],
84208
+ "additionalProperties": false
84209
+ },
84210
+ {
84211
+ "type": "object",
84212
+ "properties": {
84213
+ "operation": {
84214
+ "type": "string",
84215
+ "enum": [
84216
+ "list_users"
84217
+ ]
84218
+ },
84219
+ "success": {
84220
+ "type": "boolean"
84221
+ },
84222
+ "users": {
84223
+ "type": "array",
84224
+ "items": {
84225
+ "type": "object",
84226
+ "additionalProperties": {},
84227
+ "description": "An Asana resource object with its fields"
84228
+ }
84229
+ },
84230
+ "error": {
84231
+ "type": "string"
84232
+ }
84233
+ },
84234
+ "required": [
84235
+ "operation",
84236
+ "success",
84237
+ "error"
84238
+ ],
84239
+ "additionalProperties": false
84240
+ },
84241
+ {
84242
+ "type": "object",
84243
+ "properties": {
84244
+ "operation": {
84245
+ "type": "string",
84246
+ "enum": [
84247
+ "get_user"
84248
+ ]
84249
+ },
84250
+ "success": {
84251
+ "type": "boolean"
84252
+ },
84253
+ "user": {
84254
+ "type": "object",
84255
+ "additionalProperties": {},
84256
+ "description": "An Asana resource object with its fields"
84257
+ },
84258
+ "error": {
84259
+ "type": "string"
84260
+ }
84261
+ },
84262
+ "required": [
84263
+ "operation",
84264
+ "success",
84265
+ "error"
84266
+ ],
84267
+ "additionalProperties": false
84268
+ },
84269
+ {
84270
+ "type": "object",
84271
+ "properties": {
84272
+ "operation": {
84273
+ "type": "string",
84274
+ "enum": [
84275
+ "list_teams"
84276
+ ]
84277
+ },
84278
+ "success": {
84279
+ "type": "boolean"
84280
+ },
84281
+ "teams": {
84282
+ "type": "array",
84283
+ "items": {
84284
+ "type": "object",
84285
+ "additionalProperties": {},
84286
+ "description": "An Asana resource object with its fields"
84287
+ }
84288
+ },
84289
+ "error": {
84290
+ "type": "string"
84291
+ }
84292
+ },
84293
+ "required": [
84294
+ "operation",
84295
+ "success",
84296
+ "error"
84297
+ ],
84298
+ "additionalProperties": false
84299
+ },
84300
+ {
84301
+ "type": "object",
84302
+ "properties": {
84303
+ "operation": {
84304
+ "type": "string",
84305
+ "enum": [
84306
+ "list_team_members"
84307
+ ]
84308
+ },
84309
+ "success": {
84310
+ "type": "boolean"
84311
+ },
84312
+ "users": {
84313
+ "type": "array",
84314
+ "items": {
84315
+ "type": "object",
84316
+ "additionalProperties": {},
84317
+ "description": "An Asana resource object with its fields"
84318
+ }
84319
+ },
84320
+ "error": {
84321
+ "type": "string"
84322
+ }
84323
+ },
84324
+ "required": [
84325
+ "operation",
84326
+ "success",
84327
+ "error"
84328
+ ],
84329
+ "additionalProperties": false
84330
+ },
84331
+ {
84332
+ "type": "object",
84333
+ "properties": {
84334
+ "operation": {
84335
+ "type": "string",
84336
+ "enum": [
84337
+ "list_tags"
84338
+ ]
84339
+ },
84340
+ "success": {
84341
+ "type": "boolean"
84342
+ },
84343
+ "tags": {
84344
+ "type": "array",
84345
+ "items": {
84346
+ "type": "object",
84347
+ "additionalProperties": {},
84348
+ "description": "An Asana resource object with its fields"
84349
+ }
84350
+ },
84351
+ "error": {
84352
+ "type": "string"
84353
+ }
84354
+ },
84355
+ "required": [
84356
+ "operation",
84357
+ "success",
84358
+ "error"
84359
+ ],
84360
+ "additionalProperties": false
84361
+ },
84362
+ {
84363
+ "type": "object",
84364
+ "properties": {
84365
+ "operation": {
84366
+ "type": "string",
84367
+ "enum": [
84368
+ "create_tag"
84369
+ ]
84370
+ },
84371
+ "success": {
84372
+ "type": "boolean"
84373
+ },
84374
+ "tag": {
84375
+ "type": "object",
84376
+ "additionalProperties": {},
84377
+ "description": "An Asana resource object with its fields"
84378
+ },
84379
+ "error": {
84380
+ "type": "string"
84381
+ }
84382
+ },
84383
+ "required": [
84384
+ "operation",
84385
+ "success",
84386
+ "error"
84387
+ ],
84388
+ "additionalProperties": false
84389
+ },
84390
+ {
84391
+ "type": "object",
84392
+ "properties": {
84393
+ "operation": {
84394
+ "type": "string",
84395
+ "enum": [
84396
+ "add_tag_to_task"
84397
+ ]
84398
+ },
84399
+ "success": {
84400
+ "type": "boolean"
84401
+ },
84402
+ "error": {
84403
+ "type": "string"
84404
+ }
84405
+ },
84406
+ "required": [
84407
+ "operation",
84408
+ "success",
84409
+ "error"
84410
+ ],
84411
+ "additionalProperties": false
84412
+ },
84413
+ {
84414
+ "type": "object",
84415
+ "properties": {
84416
+ "operation": {
84417
+ "type": "string",
84418
+ "enum": [
84419
+ "remove_tag_from_task"
84420
+ ]
84421
+ },
84422
+ "success": {
84423
+ "type": "boolean"
84424
+ },
84425
+ "error": {
84426
+ "type": "string"
84427
+ }
84428
+ },
84429
+ "required": [
84430
+ "operation",
84431
+ "success",
84432
+ "error"
84433
+ ],
84434
+ "additionalProperties": false
84435
+ },
84436
+ {
84437
+ "type": "object",
84438
+ "properties": {
84439
+ "operation": {
84440
+ "type": "string",
84441
+ "enum": [
84442
+ "list_workspaces"
84443
+ ]
84444
+ },
84445
+ "success": {
84446
+ "type": "boolean"
84447
+ },
84448
+ "workspaces": {
84449
+ "type": "array",
84450
+ "items": {
84451
+ "type": "object",
84452
+ "additionalProperties": {},
84453
+ "description": "An Asana resource object with its fields"
84454
+ }
84455
+ },
84456
+ "error": {
84457
+ "type": "string"
84458
+ }
84459
+ },
84460
+ "required": [
84461
+ "operation",
84462
+ "success",
84463
+ "error"
84464
+ ],
84465
+ "additionalProperties": false
84466
+ },
84467
+ {
84468
+ "type": "object",
84469
+ "properties": {
84470
+ "operation": {
84471
+ "type": "string",
84472
+ "enum": [
84473
+ "list_custom_fields"
84474
+ ]
84475
+ },
84476
+ "success": {
84477
+ "type": "boolean"
84478
+ },
84479
+ "custom_fields": {
84480
+ "type": "array",
84481
+ "items": {
84482
+ "type": "object",
84483
+ "additionalProperties": {},
84484
+ "description": "An Asana resource object with its fields"
84485
+ }
84486
+ },
84487
+ "error": {
84488
+ "type": "string"
84489
+ }
84490
+ },
84491
+ "required": [
84492
+ "operation",
84493
+ "success",
84494
+ "error"
84495
+ ],
84496
+ "additionalProperties": false
84497
+ },
84498
+ {
84499
+ "type": "object",
84500
+ "properties": {
84501
+ "operation": {
84502
+ "type": "string",
84503
+ "enum": [
84504
+ "list_attachments"
84505
+ ]
84506
+ },
84507
+ "success": {
84508
+ "type": "boolean"
84509
+ },
84510
+ "attachments": {
84511
+ "type": "array",
84512
+ "items": {
84513
+ "type": "object",
84514
+ "additionalProperties": {},
84515
+ "description": "An Asana resource object with its fields"
84516
+ }
84517
+ },
84518
+ "error": {
84519
+ "type": "string"
84520
+ }
84521
+ },
84522
+ "required": [
84523
+ "operation",
84524
+ "success",
84525
+ "error"
84526
+ ],
84527
+ "additionalProperties": false
84528
+ },
84529
+ {
84530
+ "type": "object",
84531
+ "properties": {
84532
+ "operation": {
84533
+ "type": "string",
84534
+ "enum": [
84535
+ "list_subtasks"
84536
+ ]
84537
+ },
84538
+ "success": {
84539
+ "type": "boolean"
84540
+ },
84541
+ "tasks": {
84542
+ "type": "array",
84543
+ "items": {
84544
+ "type": "object",
84545
+ "additionalProperties": {},
84546
+ "description": "An Asana resource object with its fields"
84547
+ }
84548
+ },
84549
+ "error": {
84550
+ "type": "string"
84551
+ }
84552
+ },
84553
+ "required": [
84554
+ "operation",
84555
+ "success",
84556
+ "error"
84557
+ ],
84558
+ "additionalProperties": false
84559
+ },
84560
+ {
84561
+ "type": "object",
84562
+ "properties": {
84563
+ "operation": {
84564
+ "type": "string",
84565
+ "enum": [
84566
+ "add_task_to_project"
84567
+ ]
84568
+ },
84569
+ "success": {
84570
+ "type": "boolean"
84571
+ },
84572
+ "error": {
84573
+ "type": "string"
84574
+ }
84575
+ },
84576
+ "required": [
84577
+ "operation",
84578
+ "success",
84579
+ "error"
84580
+ ],
84581
+ "additionalProperties": false
84582
+ },
84583
+ {
84584
+ "type": "object",
84585
+ "properties": {
84586
+ "operation": {
84587
+ "type": "string",
84588
+ "enum": [
84589
+ "remove_task_from_project"
84590
+ ]
84591
+ },
84592
+ "success": {
84593
+ "type": "boolean"
84594
+ },
84595
+ "error": {
84596
+ "type": "string"
84597
+ }
84598
+ },
84599
+ "required": [
84600
+ "operation",
84601
+ "success",
84602
+ "error"
84603
+ ],
84604
+ "additionalProperties": false
84605
+ },
84606
+ {
84607
+ "type": "object",
84608
+ "properties": {
84609
+ "operation": {
84610
+ "type": "string",
84611
+ "enum": [
84612
+ "update_section"
84613
+ ]
84614
+ },
84615
+ "success": {
84616
+ "type": "boolean"
84617
+ },
84618
+ "section": {
84619
+ "type": "object",
84620
+ "additionalProperties": {},
84621
+ "description": "An Asana resource object with its fields"
84622
+ },
84623
+ "error": {
84624
+ "type": "string"
84625
+ }
84626
+ },
84627
+ "required": [
84628
+ "operation",
84629
+ "success",
84630
+ "error"
84631
+ ],
84632
+ "additionalProperties": false
84633
+ },
84634
+ {
84635
+ "type": "object",
84636
+ "properties": {
84637
+ "operation": {
84638
+ "type": "string",
84639
+ "enum": [
84640
+ "delete_section"
84641
+ ]
84642
+ },
84643
+ "success": {
84644
+ "type": "boolean"
84645
+ },
84646
+ "error": {
84647
+ "type": "string"
84648
+ }
84649
+ },
84650
+ "required": [
84651
+ "operation",
84652
+ "success",
84653
+ "error"
84654
+ ],
84655
+ "additionalProperties": false
84656
+ },
84657
+ {
84658
+ "type": "object",
84659
+ "properties": {
84660
+ "operation": {
84661
+ "type": "string",
84662
+ "enum": [
84663
+ "delete_project"
84664
+ ]
84665
+ },
84666
+ "success": {
84667
+ "type": "boolean"
84668
+ },
84669
+ "error": {
84670
+ "type": "string"
84671
+ }
84672
+ },
84673
+ "required": [
84674
+ "operation",
84675
+ "success",
84676
+ "error"
84677
+ ],
84678
+ "additionalProperties": false
84679
+ }
84680
+ ]
84681
+ },
84682
+ "usageExample": "// List Tasks example\nconst asana_list_tasks = new AsanaBubble({\n operation: \"list_tasks\", // List tasks in a project, section, or assigned to a user. Provide at least one of project, section, or assignee.\n project: \"example string\", // [ONEOF:scope] Project GID to list tasks from\n section: \"example string\", // [ONEOF:scope] Section GID to list tasks from\n assignee: \"example string\", // [ONEOF:scope] User GID or \"me\" to list tasks assigned to this user (requires workspace)\n workspace: \"example string\", // Workspace GID (required when filtering by assignee, auto-filled from credential if not provided)\n completed_since: \"example string\", // Only return tasks completed since this date (ISO 8601 format, e.g. \"2024-01-01T00:00:00Z\"). Use \"now\" to only show incomplete tasks.\n modified_since: \"example string\", // Only return tasks modified since this date (ISO 8601 format)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_tasks.action();\n// outputSchema for result.data when operation === 'list_tasks':\n// {\n// operation: \"list_tasks\",\n// success: boolean,\n// tasks: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Get Task example\nconst asana_get_task = new AsanaBubble({\n operation: \"get_task\", // Get detailed information about a specific task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n});\n\nconst result = await asana_get_task.action();\n// outputSchema for result.data when operation === 'get_task':\n// {\n// operation: \"get_task\",\n// success: boolean,\n// task: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Create Task example\nconst asana_create_task = new AsanaBubble({\n operation: \"create_task\", // Create a new task in a project or workspace\n name: \"example string\", // Name/title of the task\n notes: \"example string\", // Description/notes for the task\n html_notes: \"example string\", // HTML-formatted description (overrides notes if provided)\n assignee: \"example string\", // User GID to assign the task to, or \"me\"\n due_on: \"example string\", // Due date in YYYY-MM-DD format (e.g. \"2024-12-31\")\n due_at: \"example string\", // Due date and time in ISO 8601 format (e.g. \"2024-12-31T17:00:00Z\")\n start_on: \"example string\", // Start date in YYYY-MM-DD format\n projects: [\"example string\"], // Array of project GIDs to add this task to\n memberships: [{ project: \"example string\" // Project GID, section: \"example string\" // Section GID within the project }], // Array of project/section memberships for the task\n tags: [\"example string\"], // Array of tag GIDs to add to this task\n parent: \"example string\", // Parent task GID to create this as a subtask\n workspace: \"example string\", // Workspace GID (required if no project specified, auto-filled from credential)\n custom_fields: { \"example_key\": \"example string\" }, // Custom field values as { custom_field_gid: value }. For enum fields, use the enum option GID as the value.\n});\n\nconst result = await asana_create_task.action();\n// outputSchema for result.data when operation === 'create_task':\n// {\n// operation: \"create_task\",\n// success: boolean,\n// task: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Update Task example\nconst asana_update_task = new AsanaBubble({\n operation: \"update_task\", // Update an existing task (name, assignee, due date, status, etc.)\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n name: \"example string\", // New name/title for the task\n notes: \"example string\", // New description/notes for the task\n html_notes: \"example string\", // New HTML-formatted description\n assignee: \"example string\", // User GID to assign the task to, \"me\", or null to unassign\n due_on: \"example string\", // Due date in YYYY-MM-DD format, or null to clear\n due_at: \"example string\", // Due date and time in ISO 8601 format, or null to clear\n start_on: \"example string\", // Start date in YYYY-MM-DD format, or null to clear\n completed: true, // Set to true to mark complete, false to mark incomplete\n custom_fields: { \"example_key\": \"example string\" }, // Custom field values to update as { custom_field_gid: value }\n});\n\nconst result = await asana_update_task.action();\n// outputSchema for result.data when operation === 'update_task':\n// {\n// operation: \"update_task\",\n// success: boolean,\n// task: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Delete Task example\nconst asana_delete_task = new AsanaBubble({\n operation: \"delete_task\", // Delete a task permanently\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n});\n\nconst result = await asana_delete_task.action();\n// outputSchema for result.data when operation === 'delete_task':\n// {\n// operation: \"delete_task\",\n// success: boolean,\n// error: string\n// }\n\n\n// Search Tasks example\nconst asana_search_tasks = new AsanaBubble({\n operation: \"search_tasks\", // Search for tasks in a workspace using text and/or filters\n workspace: \"example string\", // Workspace GID to search in (auto-filled from credential)\n text: \"example string\", // Text to search for in task names and descriptions\n assignee: \"example string\", // Filter by assignee user GID or \"me\"\n projects: [\"example string\"], // Filter by project GID(s)\n completed: true, // Filter by completion status (true=completed, false=incomplete)\n is_subtask: true, // Filter by subtask status\n sort_by: \"due_date\" // options: \"due_date\", \"created_at\", \"completed_at\", \"likes\", \"modified_at\", // Sort results by this field\n sort_ascending: false // default, // Sort in ascending order (default false = descending)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_search_tasks.action();\n// outputSchema for result.data when operation === 'search_tasks':\n// {\n// operation: \"search_tasks\",\n// success: boolean,\n// tasks: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Add Task To Section example\nconst asana_add_task_to_section = new AsanaBubble({\n operation: \"add_task_to_section\", // Add a task to a specific section within a project\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n section_gid: \"example string\", // Section GID to add the task to\n insert_before: \"example string\", // Task GID to insert before in the section\n insert_after: \"example string\", // Task GID to insert after in the section\n});\n\nconst result = await asana_add_task_to_section.action();\n// outputSchema for result.data when operation === 'add_task_to_section':\n// {\n// operation: \"add_task_to_section\",\n// success: boolean,\n// error: string\n// }\n\n\n// Set Dependencies example\nconst asana_set_dependencies = new AsanaBubble({\n operation: \"set_dependencies\", // Set dependencies for a task (tasks that must be completed before this one)\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n dependencies: [\"example string\"], // Array of task GIDs that this task depends on\n});\n\nconst result = await asana_set_dependencies.action();\n// outputSchema for result.data when operation === 'set_dependencies':\n// {\n// operation: \"set_dependencies\",\n// success: boolean,\n// error: string\n// }\n\n\n// List Projects example\nconst asana_list_projects = new AsanaBubble({\n operation: \"list_projects\", // List projects in a workspace or team\n workspace: \"example string\", // [ONEOF:scope] Workspace GID (auto-filled from credential if not provided)\n team: \"example string\", // [ONEOF:scope] Team GID to list projects for\n archived: false // default, // Include archived projects (default false)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_projects.action();\n// outputSchema for result.data when operation === 'list_projects':\n// {\n// operation: \"list_projects\",\n// success: boolean,\n// projects: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Get Project example\nconst asana_get_project = new AsanaBubble({\n operation: \"get_project\", // Get detailed information about a specific project\n project_gid: \"example string\", // Asana project GID\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n});\n\nconst result = await asana_get_project.action();\n// outputSchema for result.data when operation === 'get_project':\n// {\n// operation: \"get_project\",\n// success: boolean,\n// project: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Create Project example\nconst asana_create_project = new AsanaBubble({\n operation: \"create_project\", // Create a new project in a workspace or team\n name: \"example string\", // Name of the project\n notes: \"example string\", // Description/notes for the project\n workspace: \"example string\", // Workspace GID (auto-filled from credential)\n team: \"example string\", // Team GID (required for organization workspaces, optional for personal workspaces)\n color: \"example string\", // Project color (e.g. \"dark-pink\", \"dark-green\", \"dark-blue\", \"dark-red\", \"dark-orange\", \"dark-purple\", \"dark-warm-gray\", \"light-pink\", \"light-green\", \"light-blue\", \"light-red\", \"light-orange\", \"light-purple\", \"light-warm-gray\")\n layout: \"board\" // options: \"board\", \"list\", \"timeline\", \"calendar\", // Project layout/view type (default \"list\")\n is_template: true, // Whether to create as a project template\n public: true, // Whether the project is public to the organization (default true)\n});\n\nconst result = await asana_create_project.action();\n// outputSchema for result.data when operation === 'create_project':\n// {\n// operation: \"create_project\",\n// success: boolean,\n// project: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Update Project example\nconst asana_update_project = new AsanaBubble({\n operation: \"update_project\", // Update an existing project\n project_gid: \"example string\", // Asana project GID\n name: \"example string\", // New name for the project\n notes: \"example string\", // New description/notes\n color: \"example string\", // New project color\n archived: true, // Set to true to archive, false to unarchive\n public: true, // Set project visibility\n due_on: \"example string\", // Project due date in YYYY-MM-DD format, or null to clear\n start_on: \"example string\", // Project start date in YYYY-MM-DD format, or null to clear\n});\n\nconst result = await asana_update_project.action();\n// outputSchema for result.data when operation === 'update_project':\n// {\n// operation: \"update_project\",\n// success: boolean,\n// project: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// List Sections example\nconst asana_list_sections = new AsanaBubble({\n operation: \"list_sections\", // List sections in a project\n project_gid: \"example string\", // Asana project GID\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_sections.action();\n// outputSchema for result.data when operation === 'list_sections':\n// {\n// operation: \"list_sections\",\n// success: boolean,\n// sections: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Create Section example\nconst asana_create_section = new AsanaBubble({\n operation: \"create_section\", // Create a new section in a project\n project_gid: \"example string\", // Asana project GID\n name: \"example string\", // Name of the section\n insert_before: \"example string\", // Section GID to insert before\n insert_after: \"example string\", // Section GID to insert after\n});\n\nconst result = await asana_create_section.action();\n// outputSchema for result.data when operation === 'create_section':\n// {\n// operation: \"create_section\",\n// success: boolean,\n// section: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Add Comment example\nconst asana_add_comment = new AsanaBubble({\n operation: \"add_comment\", // Add a comment to a task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n text: \"example string\", // [ONEOF:body] Plain text comment body\n html_text: \"example string\", // [ONEOF:body] HTML-formatted comment body (e.g. \"<body>Great work!</body>\")\n});\n\nconst result = await asana_add_comment.action();\n// outputSchema for result.data when operation === 'add_comment':\n// {\n// operation: \"add_comment\",\n// success: boolean,\n// story: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Get Task Stories example\nconst asana_get_task_stories = new AsanaBubble({\n operation: \"get_task_stories\", // Get comments and activity stories for a task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_get_task_stories.action();\n// outputSchema for result.data when operation === 'get_task_stories':\n// {\n// operation: \"get_task_stories\",\n// success: boolean,\n// stories: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Users example\nconst asana_list_users = new AsanaBubble({\n operation: \"list_users\", // List users in a workspace\n workspace: \"example string\", // Workspace GID (auto-filled from credential)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_users.action();\n// outputSchema for result.data when operation === 'list_users':\n// {\n// operation: \"list_users\",\n// success: boolean,\n// users: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Get User example\nconst asana_get_user = new AsanaBubble({\n operation: \"get_user\", // Get details about a specific user\n user_gid: \"example string\", // User GID or \"me\" for the authenticated user\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n});\n\nconst result = await asana_get_user.action();\n// outputSchema for result.data when operation === 'get_user':\n// {\n// operation: \"get_user\",\n// success: boolean,\n// user: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// List Teams example\nconst asana_list_teams = new AsanaBubble({\n operation: \"list_teams\", // List teams in a workspace/organization\n workspace: \"example string\", // Workspace GID (auto-filled from credential)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_teams.action();\n// outputSchema for result.data when operation === 'list_teams':\n// {\n// operation: \"list_teams\",\n// success: boolean,\n// teams: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Team Members example\nconst asana_list_team_members = new AsanaBubble({\n operation: \"list_team_members\", // List members of a team\n team_gid: \"example string\", // Team GID\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_team_members.action();\n// outputSchema for result.data when operation === 'list_team_members':\n// {\n// operation: \"list_team_members\",\n// success: boolean,\n// users: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Tags example\nconst asana_list_tags = new AsanaBubble({\n operation: \"list_tags\", // List tags in a workspace\n workspace: \"example string\", // Workspace GID (auto-filled from credential)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_tags.action();\n// outputSchema for result.data when operation === 'list_tags':\n// {\n// operation: \"list_tags\",\n// success: boolean,\n// tags: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Create Tag example\nconst asana_create_tag = new AsanaBubble({\n operation: \"create_tag\", // Create a new tag\n name: \"example string\", // Name of the tag\n workspace: \"example string\", // Workspace GID (auto-filled from credential)\n color: \"example string\", // Tag color (e.g. \"dark-pink\", \"dark-green\", \"light-blue\")\n});\n\nconst result = await asana_create_tag.action();\n// outputSchema for result.data when operation === 'create_tag':\n// {\n// operation: \"create_tag\",\n// success: boolean,\n// tag: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Add Tag To Task example\nconst asana_add_tag_to_task = new AsanaBubble({\n operation: \"add_tag_to_task\", // Add a tag to a task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n tag_gid: \"example string\", // Tag GID to add\n});\n\nconst result = await asana_add_tag_to_task.action();\n// outputSchema for result.data when operation === 'add_tag_to_task':\n// {\n// operation: \"add_tag_to_task\",\n// success: boolean,\n// error: string\n// }\n\n\n// Remove Tag From Task example\nconst asana_remove_tag_from_task = new AsanaBubble({\n operation: \"remove_tag_from_task\", // Remove a tag from a task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n tag_gid: \"example string\", // Tag GID to remove\n});\n\nconst result = await asana_remove_tag_from_task.action();\n// outputSchema for result.data when operation === 'remove_tag_from_task':\n// {\n// operation: \"remove_tag_from_task\",\n// success: boolean,\n// error: string\n// }\n\n\n// List Workspaces example\nconst asana_list_workspaces = new AsanaBubble({\n operation: \"list_workspaces\", // List all workspaces the authenticated user has access to\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_workspaces.action();\n// outputSchema for result.data when operation === 'list_workspaces':\n// {\n// operation: \"list_workspaces\",\n// success: boolean,\n// workspaces: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Custom Fields example\nconst asana_list_custom_fields = new AsanaBubble({\n operation: \"list_custom_fields\", // List custom field settings for a project\n project_gid: \"example string\", // Asana project GID\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_custom_fields.action();\n// outputSchema for result.data when operation === 'list_custom_fields':\n// {\n// operation: \"list_custom_fields\",\n// success: boolean,\n// custom_fields: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Attachments example\nconst asana_list_attachments = new AsanaBubble({\n operation: \"list_attachments\", // List attachments on a task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_attachments.action();\n// outputSchema for result.data when operation === 'list_attachments':\n// {\n// operation: \"list_attachments\",\n// success: boolean,\n// attachments: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Subtasks example\nconst asana_list_subtasks = new AsanaBubble({\n operation: \"list_subtasks\", // List subtasks (children) of a task\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n opt_fields: [\"example string\"], // Optional fields to include in the response (e.g. [\"name\",\"assignee\",\"due_on\",\"notes\",\"completed\",\"custom_fields\",\"tags\",\"memberships\"])\n limit: 50 // default, // Maximum number of results to return (1-100, default 50)\n});\n\nconst result = await asana_list_subtasks.action();\n// outputSchema for result.data when operation === 'list_subtasks':\n// {\n// operation: \"list_subtasks\",\n// success: boolean,\n// tasks: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Add Task To Project example\nconst asana_add_task_to_project = new AsanaBubble({\n operation: \"add_task_to_project\", // Add a task to a project (task can belong to multiple projects)\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n project_gid: \"example string\", // Asana project GID\n section_gid: \"example string\", // Optional section GID to place the task in within the project\n});\n\nconst result = await asana_add_task_to_project.action();\n// outputSchema for result.data when operation === 'add_task_to_project':\n// {\n// operation: \"add_task_to_project\",\n// success: boolean,\n// error: string\n// }\n\n\n// Remove Task From Project example\nconst asana_remove_task_from_project = new AsanaBubble({\n operation: \"remove_task_from_project\", // Remove a task from a project (task still exists, just no longer in this project)\n task_gid: \"example string\", // Asana task GID (globally unique identifier)\n project_gid: \"example string\", // Asana project GID\n});\n\nconst result = await asana_remove_task_from_project.action();\n// outputSchema for result.data when operation === 'remove_task_from_project':\n// {\n// operation: \"remove_task_from_project\",\n// success: boolean,\n// error: string\n// }\n\n\n// Update Section example\nconst asana_update_section = new AsanaBubble({\n operation: \"update_section\", // Rename or reorder a section\n section_gid: \"example string\", // Section GID to update\n name: \"example string\", // New name for the section\n});\n\nconst result = await asana_update_section.action();\n// outputSchema for result.data when operation === 'update_section':\n// {\n// operation: \"update_section\",\n// success: boolean,\n// section: Record<string, unknown> | undefined // An Asana resource object with its fields,\n// error: string\n// }\n\n\n// Delete Section example\nconst asana_delete_section = new AsanaBubble({\n operation: \"delete_section\", // Delete a section from a project (tasks in it are NOT deleted, they become unsectioned)\n section_gid: \"example string\", // Section GID to delete\n});\n\nconst result = await asana_delete_section.action();\n// outputSchema for result.data when operation === 'delete_section':\n// {\n// operation: \"delete_section\",\n// success: boolean,\n// error: string\n// }\n\n\n// Delete Project example\nconst asana_delete_project = new AsanaBubble({\n operation: \"delete_project\", // Permanently delete a project and all its tasks\n project_gid: \"example string\", // Asana project GID\n});\n\nconst result = await asana_delete_project.action();\n// outputSchema for result.data when operation === 'delete_project':\n// {\n// operation: \"delete_project\",\n// success: boolean,\n// error: string\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`asana failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
84683
+ "requiredCredentials": [
84684
+ "ASANA_CRED"
84685
+ ]
84686
+ },
84687
+ {
84688
+ "name": "discord",
84689
+ "alias": "",
84690
+ "type": "service",
84691
+ "shortDescription": "Discord integration for messaging, channels, threads, and server management",
84692
+ "useCase": "General purpose bubble for various workflow needs",
84693
+ "outputSchema": "Complex schema - see usage example for structure",
84694
+ "inputJsonSchema": {
84695
+ "anyOf": [
84696
+ {
84697
+ "type": "object",
84698
+ "properties": {
84699
+ "operation": {
84700
+ "type": "string",
84701
+ "enum": [
84702
+ "send_message"
84703
+ ],
84704
+ "description": "Send a message to a Discord channel. Requires Send Messages permission."
84705
+ },
84706
+ "channel_id": {
84707
+ "type": "string",
84708
+ "minLength": 1,
84709
+ "description": "Discord channel ID (snowflake)"
84710
+ },
84711
+ "content": {
84712
+ "type": "string",
84713
+ "maxLength": 2000,
84714
+ "description": "[ONEOF:body] Message text content (max 2000 chars)"
84715
+ },
84716
+ "embeds": {
84717
+ "type": "array",
84718
+ "items": {
84719
+ "type": "object",
84720
+ "properties": {
84721
+ "title": {
84722
+ "type": "string",
84723
+ "description": "Embed title"
84724
+ },
84725
+ "description": {
84726
+ "type": "string",
84727
+ "description": "Embed description text"
84728
+ },
84729
+ "url": {
84730
+ "type": "string",
84731
+ "format": "uri",
84732
+ "description": "Embed title URL"
84733
+ },
84734
+ "color": {
84735
+ "type": "number",
84736
+ "description": "Embed color as decimal integer (e.g. 0x5865F2 = 5793266)"
84737
+ },
84738
+ "fields": {
84739
+ "type": "array",
84740
+ "items": {
84741
+ "type": "object",
84742
+ "properties": {
84743
+ "name": {
84744
+ "type": "string",
84745
+ "description": "Field name"
84746
+ },
84747
+ "value": {
84748
+ "type": "string",
84749
+ "description": "Field value"
84750
+ },
84751
+ "inline": {
84752
+ "type": "boolean",
84753
+ "description": "Whether to display inline"
84754
+ }
84755
+ },
84756
+ "required": [
84757
+ "name",
84758
+ "value"
84759
+ ],
84760
+ "additionalProperties": false
84761
+ },
84762
+ "description": "Array of embed fields"
84763
+ },
84764
+ "footer": {
84765
+ "type": "object",
84766
+ "properties": {
84767
+ "text": {
84768
+ "type": "string",
84769
+ "description": "Footer text"
84770
+ },
84771
+ "icon_url": {
84772
+ "type": "string",
84773
+ "format": "uri",
84774
+ "description": "Footer icon URL"
84775
+ }
84776
+ },
84777
+ "required": [
84778
+ "text"
84779
+ ],
84780
+ "additionalProperties": false,
84781
+ "description": "Embed footer"
84782
+ },
84783
+ "thumbnail": {
84784
+ "type": "object",
84785
+ "properties": {
84786
+ "url": {
84787
+ "type": "string",
84788
+ "format": "uri",
84789
+ "description": "Thumbnail image URL"
84790
+ }
84791
+ },
84792
+ "required": [
84793
+ "url"
84794
+ ],
84795
+ "additionalProperties": false,
84796
+ "description": "Embed thumbnail"
84797
+ },
84798
+ "image": {
84799
+ "type": "object",
84800
+ "properties": {
84801
+ "url": {
84802
+ "type": "string",
84803
+ "format": "uri",
84804
+ "description": "Image URL"
84805
+ }
84806
+ },
84807
+ "required": [
84808
+ "url"
84809
+ ],
84810
+ "additionalProperties": false,
84811
+ "description": "Embed image"
84812
+ },
84813
+ "author": {
84814
+ "type": "object",
84815
+ "properties": {
84816
+ "name": {
84817
+ "type": "string",
84818
+ "description": "Author name"
84819
+ },
84820
+ "url": {
84821
+ "type": "string",
84822
+ "format": "uri",
84823
+ "description": "Author URL"
84824
+ },
84825
+ "icon_url": {
84826
+ "type": "string",
84827
+ "format": "uri",
84828
+ "description": "Author icon URL"
84829
+ }
84830
+ },
84831
+ "required": [
84832
+ "name"
84833
+ ],
84834
+ "additionalProperties": false,
84835
+ "description": "Embed author"
84836
+ },
84837
+ "timestamp": {
84838
+ "type": "string",
84839
+ "description": "ISO 8601 timestamp for the embed"
84840
+ }
84841
+ },
84842
+ "additionalProperties": false
84843
+ },
84844
+ "maxItems": 10,
84845
+ "description": "[ONEOF:body] Rich embed objects (max 10)"
84846
+ },
84847
+ "tts": {
84848
+ "type": "boolean",
84849
+ "default": false,
84850
+ "description": "Whether this is a text-to-speech message"
84851
+ },
84852
+ "reply_to": {
84853
+ "type": "string",
84854
+ "description": "Message ID to reply to (creates a threaded reply)"
84855
+ },
84856
+ "credentials": {
84857
+ "type": "object",
84858
+ "additionalProperties": {
84859
+ "type": "string"
84860
+ },
84861
+ "description": "Object mapping credential types to values (injected at runtime)"
84862
+ }
84863
+ },
84864
+ "required": [
84865
+ "operation",
84866
+ "channel_id"
84867
+ ],
84868
+ "additionalProperties": false
84869
+ },
84870
+ {
84871
+ "type": "object",
84872
+ "properties": {
84873
+ "operation": {
84874
+ "type": "string",
84875
+ "enum": [
84876
+ "list_messages"
84877
+ ],
84878
+ "description": "Read messages from a Discord channel. Requires Read Message History permission."
84879
+ },
84880
+ "channel_id": {
84881
+ "type": "string",
84882
+ "minLength": 1,
84883
+ "description": "Discord channel ID (snowflake)"
84884
+ },
84885
+ "limit": {
84886
+ "type": "number",
84887
+ "minimum": 1,
84888
+ "maximum": 100,
84889
+ "default": 25,
84890
+ "description": "Maximum number of results to return (1-100, default 25)"
84891
+ },
84892
+ "before": {
84893
+ "type": "string",
84894
+ "description": "Get messages before this message ID (for pagination)"
84895
+ },
84896
+ "after": {
84897
+ "type": "string",
84898
+ "description": "Get messages after this message ID (for pagination)"
84899
+ },
84900
+ "credentials": {
84901
+ "type": "object",
84902
+ "additionalProperties": {
84903
+ "type": "string"
84904
+ },
84905
+ "description": "Object mapping credential types to values (injected at runtime)"
84906
+ }
84907
+ },
84908
+ "required": [
84909
+ "operation",
84910
+ "channel_id"
84911
+ ],
84912
+ "additionalProperties": false
84913
+ },
84914
+ {
84915
+ "type": "object",
84916
+ "properties": {
84917
+ "operation": {
84918
+ "type": "string",
84919
+ "enum": [
84920
+ "edit_message"
84921
+ ],
84922
+ "description": "Edit a message sent by the bot"
84923
+ },
84924
+ "channel_id": {
84925
+ "type": "string",
84926
+ "minLength": 1,
84927
+ "description": "Discord channel ID (snowflake)"
84928
+ },
84929
+ "message_id": {
84930
+ "type": "string",
84931
+ "minLength": 1,
84932
+ "description": "ID of the message to edit"
84933
+ },
84934
+ "content": {
84935
+ "type": "string",
84936
+ "maxLength": 2000,
84937
+ "description": "New message text content"
84938
+ },
84939
+ "embeds": {
84940
+ "type": "array",
84941
+ "items": {
84942
+ "type": "object",
84943
+ "properties": {
84944
+ "title": {
84945
+ "type": "string",
84946
+ "description": "Embed title"
84947
+ },
84948
+ "description": {
84949
+ "type": "string",
84950
+ "description": "Embed description text"
84951
+ },
84952
+ "url": {
84953
+ "type": "string",
84954
+ "format": "uri",
84955
+ "description": "Embed title URL"
84956
+ },
84957
+ "color": {
84958
+ "type": "number",
84959
+ "description": "Embed color as decimal integer (e.g. 0x5865F2 = 5793266)"
84960
+ },
84961
+ "fields": {
84962
+ "type": "array",
84963
+ "items": {
84964
+ "type": "object",
84965
+ "properties": {
84966
+ "name": {
84967
+ "type": "string",
84968
+ "description": "Field name"
84969
+ },
84970
+ "value": {
84971
+ "type": "string",
84972
+ "description": "Field value"
84973
+ },
84974
+ "inline": {
84975
+ "type": "boolean",
84976
+ "description": "Whether to display inline"
84977
+ }
84978
+ },
84979
+ "required": [
84980
+ "name",
84981
+ "value"
84982
+ ],
84983
+ "additionalProperties": false
84984
+ },
84985
+ "description": "Array of embed fields"
84986
+ },
84987
+ "footer": {
84988
+ "type": "object",
84989
+ "properties": {
84990
+ "text": {
84991
+ "type": "string",
84992
+ "description": "Footer text"
84993
+ },
84994
+ "icon_url": {
84995
+ "type": "string",
84996
+ "format": "uri",
84997
+ "description": "Footer icon URL"
84998
+ }
84999
+ },
85000
+ "required": [
85001
+ "text"
85002
+ ],
85003
+ "additionalProperties": false,
85004
+ "description": "Embed footer"
85005
+ },
85006
+ "thumbnail": {
85007
+ "type": "object",
85008
+ "properties": {
85009
+ "url": {
85010
+ "type": "string",
85011
+ "format": "uri",
85012
+ "description": "Thumbnail image URL"
85013
+ }
85014
+ },
85015
+ "required": [
85016
+ "url"
85017
+ ],
85018
+ "additionalProperties": false,
85019
+ "description": "Embed thumbnail"
85020
+ },
85021
+ "image": {
85022
+ "type": "object",
85023
+ "properties": {
85024
+ "url": {
85025
+ "type": "string",
85026
+ "format": "uri",
85027
+ "description": "Image URL"
85028
+ }
85029
+ },
85030
+ "required": [
85031
+ "url"
85032
+ ],
85033
+ "additionalProperties": false,
85034
+ "description": "Embed image"
85035
+ },
85036
+ "author": {
85037
+ "type": "object",
85038
+ "properties": {
85039
+ "name": {
85040
+ "type": "string",
85041
+ "description": "Author name"
85042
+ },
85043
+ "url": {
85044
+ "type": "string",
85045
+ "format": "uri",
85046
+ "description": "Author URL"
85047
+ },
85048
+ "icon_url": {
85049
+ "type": "string",
85050
+ "format": "uri",
85051
+ "description": "Author icon URL"
85052
+ }
85053
+ },
85054
+ "required": [
85055
+ "name"
85056
+ ],
85057
+ "additionalProperties": false,
85058
+ "description": "Embed author"
85059
+ },
85060
+ "timestamp": {
85061
+ "type": "string",
85062
+ "description": "ISO 8601 timestamp for the embed"
85063
+ }
85064
+ },
85065
+ "additionalProperties": false
85066
+ },
85067
+ "maxItems": 10,
85068
+ "description": "New embed objects"
85069
+ },
85070
+ "credentials": {
85071
+ "type": "object",
85072
+ "additionalProperties": {
85073
+ "type": "string"
85074
+ },
85075
+ "description": "Object mapping credential types to values (injected at runtime)"
85076
+ }
85077
+ },
85078
+ "required": [
85079
+ "operation",
85080
+ "channel_id",
85081
+ "message_id"
85082
+ ],
85083
+ "additionalProperties": false
85084
+ },
85085
+ {
85086
+ "type": "object",
85087
+ "properties": {
85088
+ "operation": {
85089
+ "type": "string",
85090
+ "enum": [
85091
+ "delete_message"
85092
+ ],
85093
+ "description": "Delete a message. Bot can delete own messages or others with Manage Messages permission."
85094
+ },
85095
+ "channel_id": {
85096
+ "type": "string",
85097
+ "minLength": 1,
85098
+ "description": "Discord channel ID (snowflake)"
85099
+ },
85100
+ "message_id": {
85101
+ "type": "string",
85102
+ "minLength": 1,
85103
+ "description": "ID of the message to delete"
85104
+ },
85105
+ "credentials": {
85106
+ "type": "object",
85107
+ "additionalProperties": {
85108
+ "type": "string"
85109
+ },
85110
+ "description": "Object mapping credential types to values (injected at runtime)"
85111
+ }
85112
+ },
85113
+ "required": [
85114
+ "operation",
85115
+ "channel_id",
85116
+ "message_id"
85117
+ ],
85118
+ "additionalProperties": false
85119
+ },
85120
+ {
85121
+ "type": "object",
85122
+ "properties": {
85123
+ "operation": {
85124
+ "type": "string",
85125
+ "enum": [
85126
+ "pin_message"
85127
+ ],
85128
+ "description": "Pin a message in a channel. Requires Manage Messages permission."
85129
+ },
85130
+ "channel_id": {
85131
+ "type": "string",
85132
+ "minLength": 1,
85133
+ "description": "Discord channel ID (snowflake)"
85134
+ },
85135
+ "message_id": {
85136
+ "type": "string",
85137
+ "minLength": 1,
85138
+ "description": "ID of the message to pin"
85139
+ },
85140
+ "credentials": {
85141
+ "type": "object",
85142
+ "additionalProperties": {
85143
+ "type": "string"
85144
+ },
85145
+ "description": "Object mapping credential types to values (injected at runtime)"
85146
+ }
85147
+ },
85148
+ "required": [
85149
+ "operation",
85150
+ "channel_id",
85151
+ "message_id"
85152
+ ],
85153
+ "additionalProperties": false
85154
+ },
85155
+ {
85156
+ "type": "object",
85157
+ "properties": {
85158
+ "operation": {
85159
+ "type": "string",
85160
+ "enum": [
85161
+ "add_reaction"
85162
+ ],
85163
+ "description": "Add a reaction emoji to a message. Requires Add Reactions permission."
85164
+ },
85165
+ "channel_id": {
85166
+ "type": "string",
85167
+ "minLength": 1,
85168
+ "description": "Discord channel ID (snowflake)"
85169
+ },
85170
+ "message_id": {
85171
+ "type": "string",
85172
+ "minLength": 1,
85173
+ "description": "ID of the message to react to"
85174
+ },
85175
+ "emoji": {
85176
+ "type": "string",
85177
+ "minLength": 1,
85178
+ "description": "Unicode emoji (e.g. \"👍\") or custom emoji in name:id format (e.g. \"my_emoji:123456\")"
85179
+ },
85180
+ "credentials": {
85181
+ "type": "object",
85182
+ "additionalProperties": {
85183
+ "type": "string"
85184
+ },
85185
+ "description": "Object mapping credential types to values (injected at runtime)"
85186
+ }
85187
+ },
85188
+ "required": [
85189
+ "operation",
85190
+ "channel_id",
85191
+ "message_id",
85192
+ "emoji"
85193
+ ],
85194
+ "additionalProperties": false
85195
+ },
85196
+ {
85197
+ "type": "object",
85198
+ "properties": {
85199
+ "operation": {
85200
+ "type": "string",
85201
+ "enum": [
85202
+ "list_channels"
85203
+ ],
85204
+ "description": "List all channels in a guild/server. Requires View Channels permission."
85205
+ },
85206
+ "guild_id": {
85207
+ "type": "string",
85208
+ "description": "Discord guild/server ID (snowflake). Auto-filled from credential if not provided."
85209
+ },
85210
+ "credentials": {
85211
+ "type": "object",
85212
+ "additionalProperties": {
85213
+ "type": "string"
85214
+ },
85215
+ "description": "Object mapping credential types to values (injected at runtime)"
85216
+ }
85217
+ },
85218
+ "required": [
85219
+ "operation"
85220
+ ],
85221
+ "additionalProperties": false
85222
+ },
85223
+ {
85224
+ "type": "object",
85225
+ "properties": {
85226
+ "operation": {
85227
+ "type": "string",
85228
+ "enum": [
85229
+ "create_channel"
85230
+ ],
85231
+ "description": "Create a new channel in a guild. Requires Manage Channels permission."
85232
+ },
85233
+ "guild_id": {
85234
+ "type": "string",
85235
+ "description": "Discord guild/server ID (snowflake). Auto-filled from credential if not provided."
85236
+ },
85237
+ "name": {
85238
+ "type": "string",
85239
+ "minLength": 1,
85240
+ "maxLength": 100,
85241
+ "description": "Channel name (will be lowercased and hyphenated by Discord)"
85242
+ },
85243
+ "type": {
85244
+ "type": "string",
85245
+ "enum": [
85246
+ "text",
85247
+ "voice",
85248
+ "category",
85249
+ "announcement",
85250
+ "forum"
85251
+ ],
85252
+ "default": "text",
85253
+ "description": "Channel type (default: text)"
85254
+ },
85255
+ "topic": {
85256
+ "type": "string",
85257
+ "maxLength": 1024,
85258
+ "description": "Channel topic/description"
85259
+ },
85260
+ "parent_id": {
85261
+ "type": "string",
85262
+ "description": "Parent category channel ID to nest this channel under"
85263
+ },
85264
+ "nsfw": {
85265
+ "type": "boolean",
85266
+ "description": "Whether channel is NSFW"
85267
+ },
85268
+ "credentials": {
85269
+ "type": "object",
85270
+ "additionalProperties": {
85271
+ "type": "string"
85272
+ },
85273
+ "description": "Object mapping credential types to values (injected at runtime)"
85274
+ }
85275
+ },
85276
+ "required": [
85277
+ "operation",
85278
+ "name"
85279
+ ],
85280
+ "additionalProperties": false
85281
+ },
85282
+ {
85283
+ "type": "object",
85284
+ "properties": {
85285
+ "operation": {
85286
+ "type": "string",
85287
+ "enum": [
85288
+ "delete_channel"
85289
+ ],
85290
+ "description": "Delete a channel. Requires Manage Channels permission. This cannot be undone."
85291
+ },
85292
+ "channel_id": {
85293
+ "type": "string",
85294
+ "minLength": 1,
85295
+ "description": "Discord channel ID (snowflake)"
85296
+ },
85297
+ "credentials": {
85298
+ "type": "object",
85299
+ "additionalProperties": {
85300
+ "type": "string"
85301
+ },
85302
+ "description": "Object mapping credential types to values (injected at runtime)"
85303
+ }
85304
+ },
85305
+ "required": [
85306
+ "operation",
85307
+ "channel_id"
85308
+ ],
85309
+ "additionalProperties": false
85310
+ },
85311
+ {
85312
+ "type": "object",
85313
+ "properties": {
85314
+ "operation": {
85315
+ "type": "string",
85316
+ "enum": [
85317
+ "create_thread"
85318
+ ],
85319
+ "description": "Create a new thread in a channel. Requires Send Messages permission."
85320
+ },
85321
+ "channel_id": {
85322
+ "type": "string",
85323
+ "minLength": 1,
85324
+ "description": "Discord channel ID (snowflake)"
85325
+ },
85326
+ "name": {
85327
+ "type": "string",
85328
+ "minLength": 1,
85329
+ "maxLength": 100,
85330
+ "description": "Thread name"
85331
+ },
85332
+ "message_id": {
85333
+ "type": "string",
85334
+ "description": "Message ID to start thread from (omit to create a thread without a starter message)"
85335
+ },
85336
+ "auto_archive_duration": {
85337
+ "type": "string",
85338
+ "enum": [
85339
+ "60",
85340
+ "1440",
85341
+ "4320",
85342
+ "10080"
85343
+ ],
85344
+ "default": "1440",
85345
+ "description": "Minutes of inactivity before auto-archive: 60 (1hr), 1440 (24hr), 4320 (3d), 10080 (7d)"
85346
+ },
85347
+ "credentials": {
85348
+ "type": "object",
85349
+ "additionalProperties": {
85350
+ "type": "string"
85351
+ },
85352
+ "description": "Object mapping credential types to values (injected at runtime)"
85353
+ }
85354
+ },
85355
+ "required": [
85356
+ "operation",
85357
+ "channel_id",
85358
+ "name"
85359
+ ],
85360
+ "additionalProperties": false
85361
+ },
85362
+ {
85363
+ "type": "object",
85364
+ "properties": {
85365
+ "operation": {
85366
+ "type": "string",
85367
+ "enum": [
85368
+ "list_threads"
85369
+ ],
85370
+ "description": "List active threads in a guild"
85371
+ },
85372
+ "guild_id": {
85373
+ "type": "string",
85374
+ "description": "Discord guild/server ID (snowflake). Auto-filled from credential if not provided."
85375
+ },
85376
+ "credentials": {
85377
+ "type": "object",
85378
+ "additionalProperties": {
85379
+ "type": "string"
85380
+ },
85381
+ "description": "Object mapping credential types to values (injected at runtime)"
85382
+ }
85383
+ },
85384
+ "required": [
85385
+ "operation"
85386
+ ],
85387
+ "additionalProperties": false
85388
+ },
85389
+ {
85390
+ "type": "object",
85391
+ "properties": {
85392
+ "operation": {
85393
+ "type": "string",
85394
+ "enum": [
85395
+ "list_members"
85396
+ ],
85397
+ "description": "List members of a guild/server. Requires Server Members Intent."
85398
+ },
85399
+ "guild_id": {
85400
+ "type": "string",
85401
+ "description": "Discord guild/server ID (snowflake). Auto-filled from credential if not provided."
85402
+ },
85403
+ "limit": {
85404
+ "type": "number",
85405
+ "minimum": 1,
85406
+ "maximum": 1000,
85407
+ "default": 100,
85408
+ "description": "Maximum number of members to return (1-1000, default 100)"
85409
+ },
85410
+ "after": {
85411
+ "type": "string",
85412
+ "description": "Get members after this user ID (for pagination)"
85413
+ },
85414
+ "credentials": {
85415
+ "type": "object",
85416
+ "additionalProperties": {
85417
+ "type": "string"
85418
+ },
85419
+ "description": "Object mapping credential types to values (injected at runtime)"
85420
+ }
85421
+ },
85422
+ "required": [
85423
+ "operation"
85424
+ ],
85425
+ "additionalProperties": false
85426
+ },
85427
+ {
85428
+ "type": "object",
85429
+ "properties": {
85430
+ "operation": {
85431
+ "type": "string",
85432
+ "enum": [
85433
+ "get_guild"
85434
+ ],
85435
+ "description": "Get information about the guild/server"
85436
+ },
85437
+ "guild_id": {
85438
+ "type": "string",
85439
+ "description": "Discord guild/server ID (snowflake). Auto-filled from credential if not provided."
85440
+ },
85441
+ "credentials": {
85442
+ "type": "object",
85443
+ "additionalProperties": {
85444
+ "type": "string"
85445
+ },
85446
+ "description": "Object mapping credential types to values (injected at runtime)"
85447
+ }
85448
+ },
85449
+ "required": [
85450
+ "operation"
85451
+ ],
85452
+ "additionalProperties": false
85453
+ }
85454
+ ]
85455
+ },
85456
+ "outputJsonSchema": {
85457
+ "anyOf": [
85458
+ {
85459
+ "type": "object",
85460
+ "properties": {
85461
+ "operation": {
85462
+ "type": "string",
85463
+ "enum": [
85464
+ "send_message"
85465
+ ]
85466
+ },
85467
+ "success": {
85468
+ "type": "boolean"
85469
+ },
85470
+ "message": {
85471
+ "type": "object",
85472
+ "additionalProperties": {},
85473
+ "description": "A Discord resource object with its fields"
85474
+ },
85475
+ "error": {
85476
+ "type": "string"
85477
+ }
85478
+ },
85479
+ "required": [
85480
+ "operation",
85481
+ "success",
85482
+ "error"
85483
+ ],
85484
+ "additionalProperties": false
85485
+ },
85486
+ {
85487
+ "type": "object",
85488
+ "properties": {
85489
+ "operation": {
85490
+ "type": "string",
85491
+ "enum": [
85492
+ "list_messages"
85493
+ ]
85494
+ },
85495
+ "success": {
85496
+ "type": "boolean"
85497
+ },
85498
+ "messages": {
85499
+ "type": "array",
85500
+ "items": {
85501
+ "type": "object",
85502
+ "additionalProperties": {},
85503
+ "description": "A Discord resource object with its fields"
85504
+ }
85505
+ },
85506
+ "error": {
85507
+ "type": "string"
85508
+ }
85509
+ },
85510
+ "required": [
85511
+ "operation",
85512
+ "success",
85513
+ "error"
85514
+ ],
85515
+ "additionalProperties": false
85516
+ },
85517
+ {
85518
+ "type": "object",
85519
+ "properties": {
85520
+ "operation": {
85521
+ "type": "string",
85522
+ "enum": [
85523
+ "edit_message"
85524
+ ]
85525
+ },
85526
+ "success": {
85527
+ "type": "boolean"
85528
+ },
85529
+ "message": {
85530
+ "type": "object",
85531
+ "additionalProperties": {},
85532
+ "description": "A Discord resource object with its fields"
85533
+ },
85534
+ "error": {
85535
+ "type": "string"
85536
+ }
85537
+ },
85538
+ "required": [
85539
+ "operation",
85540
+ "success",
85541
+ "error"
85542
+ ],
85543
+ "additionalProperties": false
85544
+ },
85545
+ {
85546
+ "type": "object",
85547
+ "properties": {
85548
+ "operation": {
85549
+ "type": "string",
85550
+ "enum": [
85551
+ "delete_message"
85552
+ ]
85553
+ },
85554
+ "success": {
85555
+ "type": "boolean"
85556
+ },
85557
+ "error": {
85558
+ "type": "string"
85559
+ }
85560
+ },
85561
+ "required": [
85562
+ "operation",
85563
+ "success",
85564
+ "error"
85565
+ ],
85566
+ "additionalProperties": false
85567
+ },
85568
+ {
85569
+ "type": "object",
85570
+ "properties": {
85571
+ "operation": {
85572
+ "type": "string",
85573
+ "enum": [
85574
+ "pin_message"
85575
+ ]
85576
+ },
85577
+ "success": {
85578
+ "type": "boolean"
85579
+ },
85580
+ "error": {
85581
+ "type": "string"
85582
+ }
85583
+ },
85584
+ "required": [
85585
+ "operation",
85586
+ "success",
85587
+ "error"
85588
+ ],
85589
+ "additionalProperties": false
85590
+ },
85591
+ {
85592
+ "type": "object",
85593
+ "properties": {
85594
+ "operation": {
85595
+ "type": "string",
85596
+ "enum": [
85597
+ "add_reaction"
85598
+ ]
85599
+ },
85600
+ "success": {
85601
+ "type": "boolean"
85602
+ },
85603
+ "error": {
85604
+ "type": "string"
85605
+ }
85606
+ },
85607
+ "required": [
85608
+ "operation",
85609
+ "success",
85610
+ "error"
85611
+ ],
85612
+ "additionalProperties": false
85613
+ },
85614
+ {
85615
+ "type": "object",
85616
+ "properties": {
85617
+ "operation": {
85618
+ "type": "string",
85619
+ "enum": [
85620
+ "list_channels"
85621
+ ]
85622
+ },
85623
+ "success": {
85624
+ "type": "boolean"
85625
+ },
85626
+ "channels": {
85627
+ "type": "array",
85628
+ "items": {
85629
+ "type": "object",
85630
+ "additionalProperties": {},
85631
+ "description": "A Discord resource object with its fields"
85632
+ }
85633
+ },
85634
+ "error": {
85635
+ "type": "string"
85636
+ }
85637
+ },
85638
+ "required": [
85639
+ "operation",
85640
+ "success",
85641
+ "error"
85642
+ ],
85643
+ "additionalProperties": false
85644
+ },
85645
+ {
85646
+ "type": "object",
85647
+ "properties": {
85648
+ "operation": {
85649
+ "type": "string",
85650
+ "enum": [
85651
+ "create_channel"
85652
+ ]
85653
+ },
85654
+ "success": {
85655
+ "type": "boolean"
85656
+ },
85657
+ "channel": {
85658
+ "type": "object",
85659
+ "additionalProperties": {},
85660
+ "description": "A Discord resource object with its fields"
85661
+ },
85662
+ "error": {
85663
+ "type": "string"
85664
+ }
85665
+ },
85666
+ "required": [
85667
+ "operation",
85668
+ "success",
85669
+ "error"
85670
+ ],
85671
+ "additionalProperties": false
85672
+ },
85673
+ {
85674
+ "type": "object",
85675
+ "properties": {
85676
+ "operation": {
85677
+ "type": "string",
85678
+ "enum": [
85679
+ "delete_channel"
85680
+ ]
85681
+ },
85682
+ "success": {
85683
+ "type": "boolean"
85684
+ },
85685
+ "error": {
85686
+ "type": "string"
85687
+ }
85688
+ },
85689
+ "required": [
85690
+ "operation",
85691
+ "success",
85692
+ "error"
85693
+ ],
85694
+ "additionalProperties": false
85695
+ },
85696
+ {
85697
+ "type": "object",
85698
+ "properties": {
85699
+ "operation": {
85700
+ "type": "string",
85701
+ "enum": [
85702
+ "create_thread"
85703
+ ]
85704
+ },
85705
+ "success": {
85706
+ "type": "boolean"
85707
+ },
85708
+ "thread": {
85709
+ "type": "object",
85710
+ "additionalProperties": {},
85711
+ "description": "A Discord resource object with its fields"
85712
+ },
85713
+ "error": {
85714
+ "type": "string"
85715
+ }
85716
+ },
85717
+ "required": [
85718
+ "operation",
85719
+ "success",
85720
+ "error"
85721
+ ],
85722
+ "additionalProperties": false
85723
+ },
85724
+ {
85725
+ "type": "object",
85726
+ "properties": {
85727
+ "operation": {
85728
+ "type": "string",
85729
+ "enum": [
85730
+ "list_threads"
85731
+ ]
85732
+ },
85733
+ "success": {
85734
+ "type": "boolean"
85735
+ },
85736
+ "threads": {
85737
+ "type": "array",
85738
+ "items": {
85739
+ "type": "object",
85740
+ "additionalProperties": {},
85741
+ "description": "A Discord resource object with its fields"
85742
+ }
85743
+ },
85744
+ "error": {
85745
+ "type": "string"
85746
+ }
85747
+ },
85748
+ "required": [
85749
+ "operation",
85750
+ "success",
85751
+ "error"
85752
+ ],
85753
+ "additionalProperties": false
85754
+ },
85755
+ {
85756
+ "type": "object",
85757
+ "properties": {
85758
+ "operation": {
85759
+ "type": "string",
85760
+ "enum": [
85761
+ "list_members"
85762
+ ]
85763
+ },
85764
+ "success": {
85765
+ "type": "boolean"
85766
+ },
85767
+ "members": {
85768
+ "type": "array",
85769
+ "items": {
85770
+ "type": "object",
85771
+ "additionalProperties": {},
85772
+ "description": "A Discord resource object with its fields"
85773
+ }
85774
+ },
85775
+ "error": {
85776
+ "type": "string"
85777
+ }
85778
+ },
85779
+ "required": [
85780
+ "operation",
85781
+ "success",
85782
+ "error"
85783
+ ],
85784
+ "additionalProperties": false
85785
+ },
85786
+ {
85787
+ "type": "object",
85788
+ "properties": {
85789
+ "operation": {
85790
+ "type": "string",
85791
+ "enum": [
85792
+ "get_guild"
85793
+ ]
85794
+ },
85795
+ "success": {
85796
+ "type": "boolean"
85797
+ },
85798
+ "guild": {
85799
+ "type": "object",
85800
+ "additionalProperties": {},
85801
+ "description": "A Discord resource object with its fields"
85802
+ },
85803
+ "error": {
85804
+ "type": "string"
85805
+ }
85806
+ },
85807
+ "required": [
85808
+ "operation",
85809
+ "success",
85810
+ "error"
85811
+ ],
85812
+ "additionalProperties": false
85813
+ }
85814
+ ]
85815
+ },
85816
+ "usageExample": "// Send Message example\nconst discord_send_message = new DiscordBubble({\n operation: \"send_message\", // Send a message to a Discord channel. Requires Send Messages permission.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n content: \"example string\", // [ONEOF:body] Message text content (max 2000 chars)\n embeds: [{ title: \"example string\" // Embed title, description: \"example string\" // Embed description text, url: \"example string\" // Embed title URL, color: 42 // Embed color as decimal integer (e.g. 0x5865F2 = 5793266), fields: [{ name: \"example string\" // Field name, value: \"example string\" // Field value, inline: true // Whether to display inline }] // Array of embed fields, footer: { text: \"example string\" // Footer text, icon_url: \"example string\" // Footer icon URL } // Embed footer, thumbnail: { url: \"example string\" // Thumbnail image URL } // Embed thumbnail, image: { url: \"example string\" // Image URL } // Embed image, author: { name: \"example string\" // Author name, url: \"example string\" // Author URL, icon_url: \"example string\" // Author icon URL } // Embed author, timestamp: \"example string\" // ISO 8601 timestamp for the embed }], // [ONEOF:body] Rich embed objects (max 10)\n tts: false // default, // Whether this is a text-to-speech message\n reply_to: \"example string\", // Message ID to reply to (creates a threaded reply)\n});\n\nconst result = await discord_send_message.action();\n// outputSchema for result.data when operation === 'send_message':\n// {\n// operation: \"send_message\",\n// success: boolean,\n// message: Record<string, unknown> | undefined // A Discord resource object with its fields,\n// error: string\n// }\n\n\n// List Messages example\nconst discord_list_messages = new DiscordBubble({\n operation: \"list_messages\", // Read messages from a Discord channel. Requires Read Message History permission.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n limit: 25 // default, // Maximum number of results to return (1-100, default 25)\n before: \"example string\", // Get messages before this message ID (for pagination)\n after: \"example string\", // Get messages after this message ID (for pagination)\n});\n\nconst result = await discord_list_messages.action();\n// outputSchema for result.data when operation === 'list_messages':\n// {\n// operation: \"list_messages\",\n// success: boolean,\n// messages: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Edit Message example\nconst discord_edit_message = new DiscordBubble({\n operation: \"edit_message\", // Edit a message sent by the bot\n channel_id: \"example string\", // Discord channel ID (snowflake)\n message_id: \"example string\", // ID of the message to edit\n content: \"example string\", // New message text content\n embeds: [{ title: \"example string\" // Embed title, description: \"example string\" // Embed description text, url: \"example string\" // Embed title URL, color: 42 // Embed color as decimal integer (e.g. 0x5865F2 = 5793266), fields: [{ name: \"example string\" // Field name, value: \"example string\" // Field value, inline: true // Whether to display inline }] // Array of embed fields, footer: { text: \"example string\" // Footer text, icon_url: \"example string\" // Footer icon URL } // Embed footer, thumbnail: { url: \"example string\" // Thumbnail image URL } // Embed thumbnail, image: { url: \"example string\" // Image URL } // Embed image, author: { name: \"example string\" // Author name, url: \"example string\" // Author URL, icon_url: \"example string\" // Author icon URL } // Embed author, timestamp: \"example string\" // ISO 8601 timestamp for the embed }], // New embed objects\n});\n\nconst result = await discord_edit_message.action();\n// outputSchema for result.data when operation === 'edit_message':\n// {\n// operation: \"edit_message\",\n// success: boolean,\n// message: Record<string, unknown> | undefined // A Discord resource object with its fields,\n// error: string\n// }\n\n\n// Delete Message example\nconst discord_delete_message = new DiscordBubble({\n operation: \"delete_message\", // Delete a message. Bot can delete own messages or others with Manage Messages permission.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n message_id: \"example string\", // ID of the message to delete\n});\n\nconst result = await discord_delete_message.action();\n// outputSchema for result.data when operation === 'delete_message':\n// {\n// operation: \"delete_message\",\n// success: boolean,\n// error: string\n// }\n\n\n// Pin Message example\nconst discord_pin_message = new DiscordBubble({\n operation: \"pin_message\", // Pin a message in a channel. Requires Manage Messages permission.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n message_id: \"example string\", // ID of the message to pin\n});\n\nconst result = await discord_pin_message.action();\n// outputSchema for result.data when operation === 'pin_message':\n// {\n// operation: \"pin_message\",\n// success: boolean,\n// error: string\n// }\n\n\n// Add Reaction example\nconst discord_add_reaction = new DiscordBubble({\n operation: \"add_reaction\", // Add a reaction emoji to a message. Requires Add Reactions permission.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n message_id: \"example string\", // ID of the message to react to\n emoji: \"example string\", // Unicode emoji (e.g. \"👍\") or custom emoji in name:id format (e.g. \"my_emoji:123456\")\n});\n\nconst result = await discord_add_reaction.action();\n// outputSchema for result.data when operation === 'add_reaction':\n// {\n// operation: \"add_reaction\",\n// success: boolean,\n// error: string\n// }\n\n\n// List Channels example\nconst discord_list_channels = new DiscordBubble({\n operation: \"list_channels\", // List all channels in a guild/server. Requires View Channels permission.\n guild_id: \"example string\", // Discord guild/server ID (snowflake). Auto-filled from credential if not provided.\n});\n\nconst result = await discord_list_channels.action();\n// outputSchema for result.data when operation === 'list_channels':\n// {\n// operation: \"list_channels\",\n// success: boolean,\n// channels: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Create Channel example\nconst discord_create_channel = new DiscordBubble({\n operation: \"create_channel\", // Create a new channel in a guild. Requires Manage Channels permission.\n guild_id: \"example string\", // Discord guild/server ID (snowflake). Auto-filled from credential if not provided.\n name: \"example string\", // Channel name (will be lowercased and hyphenated by Discord)\n type: \"text\" // options: \"text\", \"voice\", \"category\", \"announcement\", \"forum\", // Channel type (default: text)\n topic: \"example string\", // Channel topic/description\n parent_id: \"example string\", // Parent category channel ID to nest this channel under\n nsfw: true, // Whether channel is NSFW\n});\n\nconst result = await discord_create_channel.action();\n// outputSchema for result.data when operation === 'create_channel':\n// {\n// operation: \"create_channel\",\n// success: boolean,\n// channel: Record<string, unknown> | undefined // A Discord resource object with its fields,\n// error: string\n// }\n\n\n// Delete Channel example\nconst discord_delete_channel = new DiscordBubble({\n operation: \"delete_channel\", // Delete a channel. Requires Manage Channels permission. This cannot be undone.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n});\n\nconst result = await discord_delete_channel.action();\n// outputSchema for result.data when operation === 'delete_channel':\n// {\n// operation: \"delete_channel\",\n// success: boolean,\n// error: string\n// }\n\n\n// Create Thread example\nconst discord_create_thread = new DiscordBubble({\n operation: \"create_thread\", // Create a new thread in a channel. Requires Send Messages permission.\n channel_id: \"example string\", // Discord channel ID (snowflake)\n name: \"example string\", // Thread name\n message_id: \"example string\", // Message ID to start thread from (omit to create a thread without a starter message)\n auto_archive_duration: \"60\" // options: \"60\", \"1440\", \"4320\", \"10080\", // Minutes of inactivity before auto-archive: 60 (1hr), 1440 (24hr), 4320 (3d), 10080 (7d)\n});\n\nconst result = await discord_create_thread.action();\n// outputSchema for result.data when operation === 'create_thread':\n// {\n// operation: \"create_thread\",\n// success: boolean,\n// thread: Record<string, unknown> | undefined // A Discord resource object with its fields,\n// error: string\n// }\n\n\n// List Threads example\nconst discord_list_threads = new DiscordBubble({\n operation: \"list_threads\", // List active threads in a guild\n guild_id: \"example string\", // Discord guild/server ID (snowflake). Auto-filled from credential if not provided.\n});\n\nconst result = await discord_list_threads.action();\n// outputSchema for result.data when operation === 'list_threads':\n// {\n// operation: \"list_threads\",\n// success: boolean,\n// threads: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// List Members example\nconst discord_list_members = new DiscordBubble({\n operation: \"list_members\", // List members of a guild/server. Requires Server Members Intent.\n guild_id: \"example string\", // Discord guild/server ID (snowflake). Auto-filled from credential if not provided.\n limit: 100 // default, // Maximum number of members to return (1-1000, default 100)\n after: \"example string\", // Get members after this user ID (for pagination)\n});\n\nconst result = await discord_list_members.action();\n// outputSchema for result.data when operation === 'list_members':\n// {\n// operation: \"list_members\",\n// success: boolean,\n// members: Record<string, unknown>[] | undefined,\n// error: string\n// }\n\n\n// Get Guild example\nconst discord_get_guild = new DiscordBubble({\n operation: \"get_guild\", // Get information about the guild/server\n guild_id: \"example string\", // Discord guild/server ID (snowflake). Auto-filled from credential if not provided.\n});\n\nconst result = await discord_get_guild.action();\n// outputSchema for result.data when operation === 'get_guild':\n// {\n// operation: \"get_guild\",\n// success: boolean,\n// guild: Record<string, unknown> | undefined // A Discord resource object with its fields,\n// error: string\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`discord failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
85817
+ "requiredCredentials": [
85818
+ "DISCORD_CRED"
85819
+ ]
81879
85820
  }
81880
85821
  ]
81881
85822
  }