From 2e490ce6142d66623d09f42b980d0abec6a00d68 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:23:24 -0800 Subject: [PATCH 01/12] feat: add slackbot.skills.create method Co-Authored-By: Claude --- .changeset/slackbot-skills-create.md | 5 ++ packages/web-api/src/methods.ts | 12 ++++ packages/web-api/src/types/request/index.ts | 1 + .../web-api/src/types/request/slackbot.ts | 42 +++++++++++ .../response/SlackbotSkillsCreateResponse.ts | 54 ++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 70 +++++++++++++++++++ 7 files changed, 185 insertions(+) create mode 100644 .changeset/slackbot-skills-create.md create mode 100644 packages/web-api/src/types/request/slackbot.ts create mode 100644 packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts create mode 100644 packages/web-api/test/types/methods/slackbot.test-d.ts diff --git a/.changeset/slackbot-skills-create.md b/.changeset/slackbot-skills-create.md new file mode 100644 index 000000000..10b4f9647 --- /dev/null +++ b/.changeset/slackbot-skills-create.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.create`](https://docs.slack.dev/reference/methods/slackbot.skills.create) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 640249ff2..73a38ebfe 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -234,6 +234,7 @@ import type { SearchAllArguments, SearchFilesArguments, SearchMessagesArguments, + SlackbotSkillsCreateArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, SlackListsCreateArguments, @@ -518,6 +519,7 @@ import type { SearchAllResponse, SearchFilesResponse, SearchMessagesResponse, + SlackbotSkillsCreateResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, SlackListsCreateResponse, @@ -2350,6 +2352,16 @@ export abstract class Methods extends EventEmitter { messages: bindApiCall(this, 'search.messages'), }; + public readonly slackbot = { + skills: { + /** + * @description Creates a skill from markdown instructions, or turns an existing canvas the caller owns into a skill. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.create `slackbot.skills.create` API reference}. + */ + create: bindApiCall(this, 'slackbot.skills.create'), + }, + }; + public readonly slackLists = { access: { /** diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index f38ebbf54..dc2253690 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -291,6 +291,7 @@ export type { SearchFilesArguments, SearchMessagesArguments, } from './search'; +export type { SlackbotSkillsCreateArguments } from './slackbot'; export type { SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts new file mode 100644 index 000000000..c671707fb --- /dev/null +++ b/packages/web-api/src/types/request/slackbot.ts @@ -0,0 +1,42 @@ +import type { TokenOverridable } from './common'; + +// https://docs.slack.dev/reference/methods/slackbot.skills.create +export type SlackbotSkillsCreateArguments = TokenOverridable & { + /** @description Human-readable label. Max 255 characters; not unique. */ + display_name: string; +} & ( + | { + /** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */ + instructions: string; + canvas_id?: never; + } + | { + instructions?: never; + /** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */ + canvas_id: string; + } + ) & { + /** @description When Slackbot should use the skill. Max 400 characters. */ + description?: string; + /** @description One of the skill categories. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */ + example_prompt?: string; + /** + * @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant + * access to it. + */ + mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; + }; diff --git a/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts new file mode 100644 index 000000000..09a6e94c8 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsCreateResponse = WebAPICallResult & { + error?: string; + invalid_mcp_servers?: InvalidmcpServer[]; + needed?: string; + ok?: boolean; + provided?: string; + skill?: Skill; + warning?: string; +}; + +export interface InvalidmcpServer { + app_id?: string; + server_id?: string; + service_type?: string; +} + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index fe0e41999..791c9b66d 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -292,6 +292,7 @@ export { RtmStartResponse } from './RtmStartResponse'; export { SearchAllResponse } from './SearchAllResponse'; export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; +export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; export { SlackListsCreateResponse } from './SlackListsCreateResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts new file mode 100644 index 000000000..f41cee435 --- /dev/null +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -0,0 +1,70 @@ +import { expectAssignable, expectError } from 'tsd'; +import { WebClient } from '../../../src/WebClient'; + +const web = new WebClient('TOKEN'); + +// slackbot.skills.create +// -- sad path +expectError(web.slackbot.skills.create()); // lacking argument +expectError(web.slackbot.skills.create({})); // empty argument +expectError( + web.slackbot.skills.create({ + instructions: '# Purpose', // missing display_name + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', // missing instructions or canvas_id + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', // both instructions and canvas_id + canvas_id: 'F1234', + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', + category: 'cooking', // invalid category + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', + mcp_servers: ['A1234'], // mcp_servers are objects + }), +); +expectError( + web.slackbot.skills.create({ + display_name: 'Daily priorities', + instructions: '# Purpose', + mcp_servers: [{ app_id: 'A1234' }], // missing service_type + }), +); +// -- happy path +expectAssignable>([ + { + display_name: 'Daily priorities', + instructions: '# Purpose\nSuggest the three most important things to work on today.', + }, +]); +expectAssignable>([ + { + display_name: 'Daily priorities', + canvas_id: 'F1234', + }, +]); +expectAssignable>([ + { + display_name: 'Daily priorities', + instructions: '# Purpose\nSuggest the three most important things to work on today.', + description: 'Reviews information from Slack and your calendar to suggest priorities for the day.', + category: 'productivity', + example_prompt: 'Run {skill} for today', + mcp_servers: [{ service_type: 'app', app_id: 'A1234', server_id: 'Amcp1234' }], + }, +]); From 2a3e5d861400c350751e2af8add6f7d6384460c9 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:23:39 -0800 Subject: [PATCH 02/12] feat: add slackbot.skills.info method Co-Authored-By: Claude --- .changeset/slackbot-skills-info.md | 5 ++ packages/web-api/src/methods.ts | 7 +++ packages/web-api/src/types/request/index.ts | 5 +- .../web-api/src/types/request/slackbot.ts | 6 +++ .../response/SlackbotSkillsInfoResponse.ts | 47 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 11 +++++ 7 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 .changeset/slackbot-skills-info.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts diff --git a/.changeset/slackbot-skills-info.md b/.changeset/slackbot-skills-info.md new file mode 100644 index 000000000..260e61a98 --- /dev/null +++ b/.changeset/slackbot-skills-info.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.info`](https://docs.slack.dev/reference/methods/slackbot.skills.info) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 73a38ebfe..707f2b08b 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -235,6 +235,7 @@ import type { SearchFilesArguments, SearchMessagesArguments, SlackbotSkillsCreateArguments, + SlackbotSkillsInfoArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, SlackListsCreateArguments, @@ -520,6 +521,7 @@ import type { SearchFilesResponse, SearchMessagesResponse, SlackbotSkillsCreateResponse, + SlackbotSkillsInfoResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, SlackListsCreateResponse, @@ -2359,6 +2361,11 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.create `slackbot.skills.create` API reference}. */ create: bindApiCall(this, 'slackbot.skills.create'), + /** + * @description Returns one Slackbot skill, including its instructions. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. + */ + info: bindApiCall(this, 'slackbot.skills.info'), }, }; diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index dc2253690..85a88c2f2 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -291,7 +291,10 @@ export type { SearchFilesArguments, SearchMessagesArguments, } from './search'; -export type { SlackbotSkillsCreateArguments } from './slackbot'; +export type { + SlackbotSkillsCreateArguments, + SlackbotSkillsInfoArguments, +} from './slackbot'; export type { SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index c671707fb..f5b22f555 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -40,3 +40,9 @@ export type SlackbotSkillsCreateArguments = TokenOverridable & { */ mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; }; + +// https://docs.slack.dev/reference/methods/slackbot.skills.info +export interface SlackbotSkillsInfoArguments extends TokenOverridable { + /** @description Skill to fetch: a canvas file ID or a `builtin:` reference. */ + skill_id: string; +} diff --git a/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts new file mode 100644 index 000000000..430e21eb1 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts @@ -0,0 +1,47 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsInfoResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + skill?: Skill; + warning?: string; +}; + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 791c9b66d..740c55c52 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -293,6 +293,7 @@ export { SearchAllResponse } from './SearchAllResponse'; export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; +export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; export { SlackListsCreateResponse } from './SlackListsCreateResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index f41cee435..221d1d9dc 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -68,3 +68,14 @@ expectAssignable>([ mcp_servers: [{ service_type: 'app', app_id: 'A1234', server_id: 'Amcp1234' }], }, ]); + +// slackbot.skills.info +// -- sad path +expectError(web.slackbot.skills.info()); // lacking argument +expectError(web.slackbot.skills.info({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); From 9388e228ec6b14b6350ddd485d25fe0d88b9b2de Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:23:55 -0800 Subject: [PATCH 03/12] feat: add slackbot.skills.update method Co-Authored-By: Claude --- .changeset/slackbot-skills-update.md | 5 ++ packages/web-api/src/methods.ts | 7 +++ packages/web-api/src/types/request/index.ts | 1 + .../web-api/src/types/request/slackbot.ts | 31 +++++++++++ .../response/SlackbotSkillsUpdateResponse.ts | 54 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 42 +++++++++++++++ 7 files changed, 141 insertions(+) create mode 100644 .changeset/slackbot-skills-update.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts diff --git a/.changeset/slackbot-skills-update.md b/.changeset/slackbot-skills-update.md new file mode 100644 index 000000000..626ef663b --- /dev/null +++ b/.changeset/slackbot-skills-update.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.update`](https://docs.slack.dev/reference/methods/slackbot.skills.update) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 707f2b08b..67ad8e158 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -236,6 +236,7 @@ import type { SearchMessagesArguments, SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, SlackListsCreateArguments, @@ -522,6 +523,7 @@ import type { SearchMessagesResponse, SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, + SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, SlackListsCreateResponse, @@ -2366,6 +2368,11 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. */ info: bindApiCall(this, 'slackbot.skills.info'), + /** + * @description Changes a Slackbot skill's instructions or metadata. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.update `slackbot.skills.update` API reference}. + */ + update: bindApiCall(this, 'slackbot.skills.update'), }, }; diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 85a88c2f2..96e214256 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -294,6 +294,7 @@ export type { export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsUpdateArguments, } from './slackbot'; export type { SlackListsAccessDeleteArguments, diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index f5b22f555..bc7a881fc 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -46,3 +46,34 @@ export interface SlackbotSkillsInfoArguments extends TokenOverridable { /** @description Skill to fetch: a canvas file ID or a `builtin:` reference. */ skill_id: string; } + +// https://docs.slack.dev/reference/methods/slackbot.skills.update +export interface SlackbotSkillsUpdateArguments extends TokenOverridable { + /** @description Skill to change. */ + skill_id: string; + /** @description Human-readable label. Max 255 characters. */ + display_name?: string; + /** @description Markdown that replaces the whole document. */ + instructions?: string; + /** @description When Slackbot should use the skill. Max 400 characters. Send an empty string to clear. */ + description?: string; + /** @description One of the skill categories. Send an empty string to clear. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management' + | ''; + /** @description Max 200 characters. May contain `{skill}`. Send an empty string to clear. */ + example_prompt?: string; + /** @description Apps the skill needs. Replaces the whole list; send `[]` to clear. */ + mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; +} diff --git a/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts new file mode 100644 index 000000000..bedf5cbc0 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsUpdateResponse = WebAPICallResult & { + error?: string; + invalid_mcp_servers?: InvalidmcpServer[]; + needed?: string; + ok?: boolean; + provided?: string; + skill?: Skill; + warning?: string; +}; + +export interface InvalidmcpServer { + app_id?: string; + server_id?: string; + service_type?: string; +} + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 740c55c52..3bd37fa38 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -294,6 +294,7 @@ export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; +export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; export { SlackListsCreateResponse } from './SlackListsCreateResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 221d1d9dc..7757fbbf5 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -79,3 +79,45 @@ expectAssignable>([ skill_id: 'F1234', }, ]); + +// slackbot.skills.update +// -- sad path +expectError(web.slackbot.skills.update()); // lacking argument +expectError(web.slackbot.skills.update({})); // empty argument +expectError( + web.slackbot.skills.update({ + display_name: 'Daily priorities', // missing skill_id + }), +); +expectError( + web.slackbot.skills.update({ + skill_id: 'F1234', + category: 'cooking', // invalid category + }), +); +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); +expectAssignable>([ + { + skill_id: 'F1234', + description: '', + category: '', + example_prompt: '', + mcp_servers: [], + }, +]); +expectAssignable>([ + { + skill_id: 'F1234', + display_name: 'Daily priorities', + instructions: '# Purpose\nSuggest the three most important things to work on today.', + description: 'Reviews information from Slack and your calendar to suggest priorities for the day.', + category: 'productivity', + example_prompt: 'Run {skill} for today', + mcp_servers: [{ service_type: 'app', app_id: 'A1234' }], + }, +]); From 671248b9a0192af55f0da983ad29869c2cdb9551 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:24:10 -0800 Subject: [PATCH 04/12] feat: add slackbot.skills.list method Co-Authored-By: Claude --- .changeset/slackbot-skills-list.md | 5 ++ packages/web-api/src/methods.ts | 10 ++++ packages/web-api/src/types/request/index.ts | 1 + .../web-api/src/types/request/slackbot.ts | 35 +++++++++++++ .../response/SlackbotSkillsListResponse.ts | 52 +++++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 24 +++++++++ 7 files changed, 128 insertions(+) create mode 100644 .changeset/slackbot-skills-list.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsListResponse.ts diff --git a/.changeset/slackbot-skills-list.md b/.changeset/slackbot-skills-list.md new file mode 100644 index 000000000..4c7f84f23 --- /dev/null +++ b/.changeset/slackbot-skills-list.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.list`](https://docs.slack.dev/reference/methods/slackbot.skills.list) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 67ad8e158..81b563c9c 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -236,6 +236,7 @@ import type { SearchMessagesArguments, SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, SlackListsAccessSetArguments, @@ -523,6 +524,7 @@ import type { SearchMessagesResponse, SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, + SlackbotSkillsListResponse, SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, SlackListsAccessSetResponse, @@ -2368,6 +2370,14 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. */ info: bindApiCall(this, 'slackbot.skills.info'), + /** + * @description Lists Slackbot skills from the caller's point of view. Instructions are not included. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.list `slackbot.skills.list` API reference}. + */ + list: bindApiCallWithOptionalArgument( + this, + 'slackbot.skills.list', + ), /** * @description Changes a Slackbot skill's instructions or metadata. * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.update `slackbot.skills.update` API reference}. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 96e214256..aed4ed407 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -294,6 +294,7 @@ export type { export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, } from './slackbot'; export type { diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index bc7a881fc..19ef9559c 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -1,3 +1,5 @@ +import type { OptionalArgument } from '../helpers'; + import type { TokenOverridable } from './common'; // https://docs.slack.dev/reference/methods/slackbot.skills.create @@ -47,6 +49,39 @@ export interface SlackbotSkillsInfoArguments extends TokenOverridable { skill_id: string; } +// https://docs.slack.dev/reference/methods/slackbot.skills.list +export type SlackbotSkillsListArguments = OptionalArgument< + TokenOverridable & { + /** + * @description `library`: skills enabled for the caller, including auto-enabled skills and skills from skill + * sets. `owned`: skills the caller created. `catalog`: the organization's official skills. + */ + filter?: 'catalog' | 'library' | 'owned'; + /** @description Only return skills in this category. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** + * @description Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` + * attribute returned by a previous request's `response_metadata`. Must be used with the same `filter` and + * `category`. + */ + cursor?: string; + /** @description The maximum number of skills to return. Fewer may be returned even when more remain. */ + limit?: number; + } +>; + // https://docs.slack.dev/reference/methods/slackbot.skills.update export interface SlackbotSkillsUpdateArguments extends TokenOverridable { /** @description Skill to change. */ diff --git a/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts new file mode 100644 index 000000000..70b003d47 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsListResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; + skills?: Skill[]; + warning?: string; +}; + +export interface ResponseMetadata { + next_cursor?: string; +} + +export interface Skill { + access?: string; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + example_prompt?: string; + id?: string; + instructions?: string; + is_official?: boolean; + library_count?: number; + mcp_servers?: McpServer[]; + name?: string; + permalink?: string; + type?: string; + usage_count?: number; + visibility?: string; +} + +export interface McpServer { + app_id?: string; + display_name?: string; + is_available?: boolean; + server_id?: string; + service_type?: string; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 3bd37fa38..df445250c 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -294,6 +294,7 @@ export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; +export { SlackbotSkillsListResponse } from './SlackbotSkillsListResponse'; export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; export { SlackListsAccessSetResponse } from './SlackListsAccessSetResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 7757fbbf5..411168ea8 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -80,6 +80,30 @@ expectAssignable>([ }, ]); +// slackbot.skills.list +// -- sad path +expectError( + web.slackbot.skills.list({ + filter: 'shared', // invalid filter + }), +); +expectError( + web.slackbot.skills.list({ + category: 'cooking', // invalid category + }), +); +// -- happy path +expectAssignable>([]); // no arg is fine +expectAssignable>([{}]); // empty arg is fine +expectAssignable>([ + { + filter: 'owned', + category: 'engineering', + cursor: 'dGVhbTpDMDYxRkE1UEI=', + limit: 100, + }, +]); + // slackbot.skills.update // -- sad path expectError(web.slackbot.skills.update()); // lacking argument From b389a93c665e1031ef9ce45679e03a7842f3967b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:24:26 -0800 Subject: [PATCH 05/12] feat: add slackbot.skills.library.add method Co-Authored-By: Claude --- .changeset/slackbot-skills-library-add.md | 5 +++++ packages/web-api/src/methods.ts | 12 ++++++++++++ packages/web-api/src/types/request/index.ts | 1 + packages/web-api/src/types/request/slackbot.ts | 6 ++++++ .../SlackbotSkillsLibraryAddResponse.ts | 17 +++++++++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/slackbot.test-d.ts | 11 +++++++++++ 7 files changed, 53 insertions(+) create mode 100644 .changeset/slackbot-skills-library-add.md create mode 100644 packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts diff --git a/.changeset/slackbot-skills-library-add.md b/.changeset/slackbot-skills-library-add.md new file mode 100644 index 000000000..e7984512b --- /dev/null +++ b/.changeset/slackbot-skills-library-add.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`slackbot.skills.library.add`](https://docs.slack.dev/reference/methods/slackbot.skills.library.add) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 81b563c9c..4b5a35ee4 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -236,6 +236,7 @@ import type { SearchMessagesArguments, SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsLibraryAddArguments, SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, SlackListsAccessDeleteArguments, @@ -524,6 +525,7 @@ import type { SearchMessagesResponse, SlackbotSkillsCreateResponse, SlackbotSkillsInfoResponse, + SlackbotSkillsLibraryAddResponse, SlackbotSkillsListResponse, SlackbotSkillsUpdateResponse, SlackListsAccessDeleteResponse, @@ -2370,6 +2372,16 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}. */ info: bindApiCall(this, 'slackbot.skills.info'), + library: { + /** + * @description Turns a skill on in the caller's Slackbot library. + * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.library.add `slackbot.skills.library.add` API reference}. + */ + add: bindApiCall( + this, + 'slackbot.skills.library.add', + ), + }, /** * @description Lists Slackbot skills from the caller's point of view. Instructions are not included. * @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.list `slackbot.skills.list` API reference}. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index aed4ed407..a5255bd44 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -294,6 +294,7 @@ export type { export type { SlackbotSkillsCreateArguments, SlackbotSkillsInfoArguments, + SlackbotSkillsLibraryAddArguments, SlackbotSkillsListArguments, SlackbotSkillsUpdateArguments, } from './slackbot'; diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index 19ef9559c..d45996c33 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -49,6 +49,12 @@ export interface SlackbotSkillsInfoArguments extends TokenOverridable { skill_id: string; } +// https://docs.slack.dev/reference/methods/slackbot.skills.library.add +export interface SlackbotSkillsLibraryAddArguments extends TokenOverridable { + /** @description Skill to turn on for the caller. */ + skill_id: string; +} + // https://docs.slack.dev/reference/methods/slackbot.skills.list export type SlackbotSkillsListArguments = OptionalArgument< TokenOverridable & { diff --git a/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts new file mode 100644 index 000000000..2f1802bb2 --- /dev/null +++ b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts @@ -0,0 +1,17 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type SlackbotSkillsLibraryAddResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index df445250c..94d4ec718 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -294,6 +294,7 @@ export { SearchFilesResponse } from './SearchFilesResponse'; export { SearchMessagesResponse } from './SearchMessagesResponse'; export { SlackbotSkillsCreateResponse } from './SlackbotSkillsCreateResponse'; export { SlackbotSkillsInfoResponse } from './SlackbotSkillsInfoResponse'; +export { SlackbotSkillsLibraryAddResponse } from './SlackbotSkillsLibraryAddResponse'; export { SlackbotSkillsListResponse } from './SlackbotSkillsListResponse'; export { SlackbotSkillsUpdateResponse } from './SlackbotSkillsUpdateResponse'; export { SlackListsAccessDeleteResponse } from './SlackListsAccessDeleteResponse'; diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index 411168ea8..bb6d0fc8a 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -80,6 +80,17 @@ expectAssignable>([ }, ]); +// slackbot.skills.library.add +// -- sad path +expectError(web.slackbot.skills.library.add()); // lacking argument +expectError(web.slackbot.skills.library.add({})); // empty argument +// -- happy path +expectAssignable>([ + { + skill_id: 'F1234', + }, +]); + // slackbot.skills.list // -- sad path expectError( From d6940d8a6f2aae1bf8ed252ec6beaa8175f7111f Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:28 -0800 Subject: [PATCH 06/12] chore(web-api): regenerate SlackbotSkillsCreateResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsCreateResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts index 09a6e94c8..a905ce5d3 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsCreateResponse.ts @@ -14,6 +14,7 @@ export type SlackbotSkillsCreateResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; skill?: Skill; warning?: string; }; @@ -24,6 +25,10 @@ export interface InvalidmcpServer { service_type?: string; } +export interface ResponseMetadata { + messages?: string[]; +} + export interface Skill { access?: string; category?: string; From a257224ffb5bce901024da283dec98de42496c57 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:36 -0800 Subject: [PATCH 07/12] chore(web-api): regenerate SlackbotSkillsInfoResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../web-api/src/types/response/SlackbotSkillsInfoResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts index 430e21eb1..6951d658e 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsInfoResponse.ts @@ -13,10 +13,15 @@ export type SlackbotSkillsInfoResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; skill?: Skill; warning?: string; }; +export interface ResponseMetadata { + messages?: string[]; +} + export interface Skill { access?: string; category?: string; From ee357112d01e965e7d2b0808ffe3ef3ea0628efc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:43 -0800 Subject: [PATCH 08/12] chore(web-api): regenerate SlackbotSkillsUpdateResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsUpdateResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts index bedf5cbc0..d9f0ac45f 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsUpdateResponse.ts @@ -14,6 +14,7 @@ export type SlackbotSkillsUpdateResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; skill?: Skill; warning?: string; }; @@ -24,6 +25,10 @@ export interface InvalidmcpServer { service_type?: string; } +export interface ResponseMetadata { + messages?: string[]; +} + export interface Skill { access?: string; category?: string; From 0ea5bb16a90f7ff118a54c6733d4275946c37e10 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 22:59:52 -0800 Subject: [PATCH 09/12] chore(web-api): regenerate SlackbotSkillsListResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../web-api/src/types/response/SlackbotSkillsListResponse.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts index 70b003d47..012b80158 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsListResponse.ts @@ -19,6 +19,7 @@ export type SlackbotSkillsListResponse = WebAPICallResult & { }; export interface ResponseMetadata { + messages?: string[]; next_cursor?: string; } From dcf9224a53e2ba12afeebbc9ebe423c9779e0634 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 11 Nov 2026 23:00:01 -0800 Subject: [PATCH 10/12] chore(web-api): regenerate SlackbotSkillsLibraryAddResponse from the recorded java-slack-sdk sample Co-Authored-By: Claude --- .../src/types/response/SlackbotSkillsLibraryAddResponse.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts index 2f1802bb2..df8b9dc8d 100644 --- a/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts +++ b/packages/web-api/src/types/response/SlackbotSkillsLibraryAddResponse.ts @@ -13,5 +13,10 @@ export type SlackbotSkillsLibraryAddResponse = WebAPICallResult & { needed?: string; ok?: boolean; provided?: string; + response_metadata?: ResponseMetadata; warning?: string; }; + +export interface ResponseMetadata { + messages?: string[]; +} From f081dce57d9ef74f0222ea85f58f247929a0275e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 12 Nov 2026 16:34:45 -0800 Subject: [PATCH 11/12] refactor: accept instructions or canvas_id as optional slackbot.skills.create arguments Leaves the exactly-one-of check to the API, which returns invalid_arguments, and the JSDoc. Also line-breaks the mcp_servers object type. Co-Authored-By: Claude --- .../web-api/src/types/request/slackbot.ts | 70 +++++++++---------- .../test/types/methods/slackbot.test-d.ts | 17 ++--- 2 files changed, 38 insertions(+), 49 deletions(-) diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index c671707fb..2734bd8e1 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -1,42 +1,38 @@ import type { TokenOverridable } from './common'; // https://docs.slack.dev/reference/methods/slackbot.skills.create -export type SlackbotSkillsCreateArguments = TokenOverridable & { +export interface SlackbotSkillsCreateArguments extends TokenOverridable { /** @description Human-readable label. Max 255 characters; not unique. */ display_name: string; -} & ( - | { - /** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */ - instructions: string; - canvas_id?: never; - } - | { - instructions?: never; - /** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */ - canvas_id: string; - } - ) & { - /** @description When Slackbot should use the skill. Max 400 characters. */ - description?: string; - /** @description One of the skill categories. */ - category?: - | 'communication' - | 'customer_support' - | 'data_and_analytics' - | 'engineering' - | 'other' - | 'product_management' - | 'productivity' - | 'professional_development' - | 'project_management' - | 'sales' - | 'system' - | 'team_management'; - /** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */ - example_prompt?: string; - /** - * @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant - * access to it. - */ - mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; - }; + /** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */ + instructions?: string; + /** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */ + canvas_id?: string; + /** @description When Slackbot should use the skill. Max 400 characters. */ + description?: string; + /** @description One of the skill categories. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */ + example_prompt?: string; + /** + * @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant + * access to it. + */ + mcp_servers?: { + service_type: string; + app_id?: string; + server_id?: string; + }[]; +} diff --git a/packages/web-api/test/types/methods/slackbot.test-d.ts b/packages/web-api/test/types/methods/slackbot.test-d.ts index f41cee435..b10644bbb 100644 --- a/packages/web-api/test/types/methods/slackbot.test-d.ts +++ b/packages/web-api/test/types/methods/slackbot.test-d.ts @@ -12,18 +12,6 @@ expectError( instructions: '# Purpose', // missing display_name }), ); -expectError( - web.slackbot.skills.create({ - display_name: 'Daily priorities', // missing instructions or canvas_id - }), -); -expectError( - web.slackbot.skills.create({ - display_name: 'Daily priorities', - instructions: '# Purpose', // both instructions and canvas_id - canvas_id: 'F1234', - }), -); expectError( web.slackbot.skills.create({ display_name: 'Daily priorities', @@ -46,6 +34,11 @@ expectError( }), ); // -- happy path +expectAssignable>([ + { + display_name: 'Daily priorities', // the api requires exactly one of instructions or canvas_id + }, +]); expectAssignable>([ { display_name: 'Daily priorities', From d74ff884cc12a61a3389e744c1429455a736d910 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 12 Nov 2026 16:35:43 -0800 Subject: [PATCH 12/12] refactor: line-break the slackbot.skills.update mcp_servers object type Co-Authored-By: Claude --- packages/web-api/src/types/request/slackbot.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/web-api/src/types/request/slackbot.ts b/packages/web-api/src/types/request/slackbot.ts index 42a3c99ab..b02660638 100644 --- a/packages/web-api/src/types/request/slackbot.ts +++ b/packages/web-api/src/types/request/slackbot.ts @@ -70,5 +70,9 @@ export interface SlackbotSkillsUpdateArguments extends TokenOverridable { /** @description Max 200 characters. May contain `{skill}`. Send an empty string to clear. */ example_prompt?: string; /** @description Apps the skill needs. Replaces the whole list; send `[]` to clear. */ - mcp_servers?: { service_type: string; app_id?: string; server_id?: string }[]; + mcp_servers?: { + service_type: string; + app_id?: string; + server_id?: string; + }[]; }