Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
* [#591](https://github.com/slack-ruby/slack-ruby-client/pull/591): Generate AI CHANGELOG entries and PR summaries for automated API update PRs, lock simplecov below 1.1.0 to avoid breaking Coveralls - [@dblock](https://github.com/dblock).
* [#592](https://github.com/slack-ruby/slack-ruby-client/pull/592): Fix a YAML indentation bug in AI CHANGELOG entry generation that broke the automated API update workflow - [@dblock](https://github.com/dblock).
* [#593](https://github.com/slack-ruby/slack-ruby-client/pull/593): Migrate AI CHANGELOG entry generation to Copilot CLI after GitHub Models retirement - [@dblock](https://github.com/dblock).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add entity.acknowledgeCommentAction and entity.presentComments methods - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add admin.apps.mcpServers, admin.apps.mcpServers.permissions, and admin.apps.permissions endpoints - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add a metadata argument to chat.postEphemeral - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Remove required :url validation from admin.emoji.add - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add username, icon_url, and icon_emoji arguments to files.completeUploadExternal - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add format, include_threads, and include_attachments arguments to slackLists.download.start and slackLists.download.get - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add exclude_muted argument to users.conversations - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* [#590](https://github.com/slack-ruby/slack-ruby-client/pull/590): Add new error codes to errors.rb and update slack-api-ref submodule - [@slack-ruby-ci-bot](https://github.com/apps/slack-ruby-ci-bot).
* Your contribution here.

### 3.2.0 (2026/07/05)
Expand Down
21 changes: 21 additions & 0 deletions bin/commands/admin_apps_mcp_servers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true
# This file was auto-generated by lib/tasks/web.rake

module Slack
module Cli
class App
desc 'AdminAppsMcpServers methods.'
command 'admin_apps_mcp_servers' do |g|
g.desc "List third-party app MCP servers approved for an organization, derived from the org's MCP server allowlist. Entries reflect allowlist state, not install/scope liveness: servers of apps that are uninstalled (but not deleted) are still listed."
g.long_desc %( List third-party app MCP servers approved for an organization, derived from the org's MCP server allowlist. Entries reflect allowlist state, not install/scope liveness: servers of apps that are uninstalled (but not deleted) are still listed. )
g.command 'list' do |c|
c.flag 'limit', desc: 'The maximum number of items to return. Must be between 1 - 1000 both inclusive.'
c.flag 'cursor', desc: 'Set cursor to next_cursor returned by the previous call to list items in the next page.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_mcp_servers_list(options))
end
end
end
end
end
end
33 changes: 33 additions & 0 deletions bin/commands/admin_apps_mcp_servers_permissions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# frozen_string_literal: true
# This file was auto-generated by lib/tasks/web.rake

module Slack
module Cli
class App
desc 'AdminAppsMcpServersPermissions methods.'
command 'admin_apps_mcp_servers_permissions' do |g|
g.desc 'List MCP servers for an app with their access control permissions'
g.long_desc %( List MCP servers for an app with their access control permissions )
g.command 'list' do |c|
c.flag 'app_id', desc: 'Encoded ID of the app.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_mcp_servers_permissions_list(options))
end
end

g.desc 'Set the access control permission for who can use an MCP server'
g.long_desc %( Set the access control permission for who can use an MCP server )
g.command 'set' do |c|
c.flag 'app_id', desc: 'Encoded ID of the app.'
c.flag 'server_id', desc: 'Encoded ID of the MCP server.'
c.flag 'permission_type', desc: 'The type of permission that defines who can use this MCP server.'
c.flag 'user_ids', desc: 'List of user IDs to set for named_entities or named_entities_exclude.'
c.flag 'usergroup_ids', desc: 'List of encoded usergroup IDs.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_mcp_servers_permissions_set(options))
end
end
end
end
end
end
54 changes: 54 additions & 0 deletions bin/commands/admin_apps_permissions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# frozen_string_literal: true
# This file was auto-generated by lib/tasks/web.rake

module Slack
module Cli
class App
desc 'AdminAppsPermissions methods.'
command 'admin_apps_permissions' do |g|
g.desc 'Grant permission for entities to access an app that has its permission type set to named_entities'
g.long_desc %( Grant permission for entities to access an app that has its permission type set to named_entities )
g.command 'add' do |c|
c.flag 'app_id', desc: 'Encoded ID of the app.'
c.flag 'user_ids', desc: 'List of user IDs to allow for named_entities visibility.'
c.flag 'usergroup_ids', desc: 'List of encoded usergroup IDs.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_permissions_add(options))
end
end

g.desc 'Returns the permission type of an app and if applicable, includes the entities that have been granted access'
g.long_desc %( Returns the permission type of an app and if applicable, includes the entities that have been granted access )
g.command 'list' do |c|
c.flag 'app_id', desc: 'Encoded ID of the app.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_permissions_list(options))
end
end

g.desc "Revoke an entity's access to an app that has its permission type set to named_entities"
g.long_desc %( Revoke an entity's access to an app that has its permission type set to named_entities )
g.command 'remove' do |c|
c.flag 'app_id', desc: 'Encoded ID of the app.'
c.flag 'user_ids', desc: 'List of user IDs whose named_entities access will be revoked.'
c.flag 'usergroup_ids', desc: 'List of encoded usergroup IDs.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_permissions_remove(options))
end
end

g.desc 'Set the permission type for who can access an app'
g.long_desc %( Set the permission type for who can access an app )
g.command 'set' do |c|
c.flag 'app_id', desc: 'Encoded ID of the app.'
c.flag 'permission_type', desc: 'The type of permission that defines who can access the app.'
c.flag 'user_ids', desc: 'List of user IDs to allow for named_entities visibility.'
c.flag 'usergroup_ids', desc: 'List of encoded usergroup IDs.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.admin_apps_permissions_set(options))
end
end
end
end
end
end
4 changes: 2 additions & 2 deletions bin/commands/canvases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class App
g.long_desc %( Create canvas for a user )
g.command 'create' do |c|
c.flag 'title', desc: 'Title of the newly created canvas.'
c.flag 'document_content', desc: 'Structure describing the type and value of the content to create.'
c.flag 'document_content', desc: 'Structure describing the type and value of the content to create. The markdown content is limited to 1 MiB (1,048,576 characters).'
c.flag 'channel_id', desc: 'Channel ID of the channel the canvas will be tabbed in. This is a required field for free teams.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.canvases_create(options))
Expand All @@ -30,7 +30,7 @@ class App
g.long_desc %( Update an existing canvas )
g.command 'edit' do |c|
c.flag 'canvas_id', desc: 'Encoded ID of the canvas.'
c.flag 'changes', desc: 'List of changes to apply on the specified canvas.'
c.flag 'changes', desc: 'List of changes to apply on the specified canvas. The markdown content of each change is limited to 1 MiB (1,048,576 characters).'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.canvases_edit(options))
end
Expand Down
1 change: 1 addition & 0 deletions bin/commands/chat.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ class App
c.flag 'icon_url', desc: 'URL to an image to use as the icon for this message.'
c.flag 'link_names', desc: 'Find and link channel names and usernames.'
c.flag 'markdown_text', desc: 'Accepts message text formatted in markdown. This argument should not be used in conjunction with blocks or text. Limit this field to 12,000 characters.'
c.flag 'metadata', desc: 'JSON object with an entities array of work object entity metadata, presented as a URL-encoded string. Only entity metadata is supported: ephemeral messages are not persisted and never dispatch message_metadata_* events, so event_type/event_payload message metadata is ignored here. Each entity requires entity_type, entity_payload, external_ref, and url.'
c.flag 'parse', desc: 'Change how messages are treated. Defaults to none. See below.'
c.flag 'text', desc: 'How this field works and whether it is required depends on other fields you use in your API call. See below for more detail.'
c.flag 'thread_ts', desc: "Provide another message's ts value to post this message in a thread. Avoid using a reply's ts value; use its parent's value instead. Ephemeral messages in threads are only shown if there is already an active thread."
Expand Down
2 changes: 1 addition & 1 deletion bin/commands/conversations_canvases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class App
g.long_desc %( Create a channel canvas for a channel )
g.command 'create' do |c|
c.flag 'channel_id', desc: 'Channel ID of the channel the canvas will be tabbed in.'
c.flag 'document_content', desc: 'Structure describing the type and value of the content to create.'
c.flag 'document_content', desc: 'Structure describing the type and value of the content to create. The markdown content is limited to 1 MiB (1,048,576 characters).'
c.flag 'title', desc: 'Title of the newly created canvas.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.conversations_canvases_create(options))
Expand Down
27 changes: 27 additions & 0 deletions bin/commands/entity.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,33 @@ module Cli
class App
desc 'Entity methods.'
command 'entity' do |g|
g.desc 'Acknowledge a comment mutation (edit, delete, or post) on a work object entity. Apps call this endpoint to confirm they have processed a comment action, and the backend emits a dedicated RTM event to the user.'
g.long_desc %( Acknowledge a comment mutation (edit, delete, or post) on a work object entity. Apps call this endpoint to confirm they have processed a comment action, and the backend emits a dedicated RTM event to the user. )
g.command 'acknowledgeCommentAction' do |c|
c.flag 'trigger_id', desc: 'A reference to the original user action that initiated the comment mutation.'
c.flag 'comment', desc: 'The full comment data. Required for edit and post actions. See the comment schema for the full list of properties.'
c.flag 'error', desc: 'Error message if the action failed in the app. When present, signals that the mutation could not be completed.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.entity_acknowledgeCommentAction(options))
end
end

g.desc 'Provide comments for work objects. Apps call this endpoint to send per-user flexpane comment data to the client.'
g.long_desc %( Provide comments for work objects. Apps call this endpoint to send per-user flexpane comment data to the client. )
g.command 'presentComments' do |c|
c.flag 'comments', desc: 'Array of comments to present to the user. See the comment schema for the full list of properties.'
c.flag 'cursor', desc: 'App supplied cursor used for pagination, will be sent in the next request for comments.'
c.flag 'can_post_comment', desc: 'Indicates whether the user has permissions to post comments.'
c.flag 'trigger_id', desc: 'A reference to the original user action that initiated the request.'
c.flag 'delete_action_id', desc: 'The block action id that will be sent when a delete request is initiated for a comment.'
c.flag 'user_auth_required', desc: 'Set to true (or 1) to indicate that the user must authenticate to see the comments data.'
c.flag 'user_auth_url', desc: 'A custom URL to which users are directed for authentication if required.'
c.flag 'error', desc: ''
c.action do |_global_options, options, _args|
puts JSON.dump(@client.entity_presentComments(options))
end
end

g.desc 'Provide custom flexpane behavior for Work Objects. Apps call this endpoint to send per-user flexpane metadata to the client.'
g.long_desc %( Provide custom flexpane behavior for Work Objects. Apps call this endpoint to send per-user flexpane metadata to the client. )
g.command 'presentDetails' do |c|
Expand Down
3 changes: 3 additions & 0 deletions bin/commands/files.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ class App
c.flag 'channels', desc: 'Comma-separated string of channel IDs or user IDs where the file will be shared.'
c.flag 'initial_comment', desc: 'The message text introducing the file in specified channels.'
c.flag 'blocks', desc: 'A JSON-based array of structured rich text blocks, presented as a URL-encoded string. If the initial_comment field is provided, the blocks field is ignored.'
c.flag 'username', desc: "Set your bot's user name for the file share message. Requires the chat:write.customize scope."
c.flag 'icon_url', desc: 'URL to an image to use as the icon for the file share message. Requires the chat:write.customize scope.'
c.flag 'icon_emoji', desc: 'Emoji to use as the icon for the file share message. Overrides icon_url. Requires the chat:write.customize scope.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.files_completeUploadExternal(options))
end
Expand Down
6 changes: 6 additions & 0 deletions bin/commands/slackLists_download.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ class App
g.command 'get' do |c|
c.flag 'list_id', desc: 'ID of the List to export.'
c.flag 'job_id', desc: 'The ID of the recently started job to export the List.'
c.flag 'format', desc: 'Format the export was started with. Must match the format passed to slackLists.download.start. Defaults to csv.'
c.flag 'include_threads', desc: 'Must match the include_threads passed to slackLists.download.start. The returned download_url carries this through so the served export matches what was generated. Only applies when format is json.'
c.flag 'include_attachments', desc: 'Must match the include_attachments passed to slackLists.download.start. The returned download_url carries this through so the served export matches what was generated. Only applies when format is json.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.slackLists_download_get(options))
end
Expand All @@ -21,6 +24,9 @@ class App
g.command 'start' do |c|
c.flag 'list_id', desc: 'ID of the List to export.'
c.flag 'include_archived', desc: ''
c.flag 'format', desc: 'Format of the export. Defaults to csv for backward compatibility. Use json for a complete, hierarchical export.'
c.flag 'include_threads', desc: "Include each item's conversation thread in the export. Only applies when format is json."
c.flag 'include_attachments', desc: 'Include file attachment metadata and access paths in the export. Only applies when format is json.'
c.action do |_global_options, options, _args|
puts JSON.dump(@client.slackLists_download_start(options))
end
Expand Down
1 change: 1 addition & 0 deletions bin/commands/users.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class App
g.command 'conversations' do |c|
c.flag 'cursor', desc: "Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Default value fetches the first 'page' of the collection. See pagination for more detail."
c.flag 'exclude_archived', desc: 'Set to true to exclude archived channels from the list.'
c.flag 'exclude_muted', desc: 'Set to true to exclude muted channels from the list.'
c.flag 'limit', desc: "The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached. Must be an integer with a max value of 999."
c.flag 'team_id', desc: 'encoded team id to list conversations in, required if org token is used.'
c.flag 'types', desc: 'Mix and match channel types by providing a comma-separated list of any combination of public_channel, private_channel, mpim, im.'
Expand Down
6 changes: 6 additions & 0 deletions lib/slack/web/api/endpoints.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
require_relative 'endpoints/admin_apps_activities'
require_relative 'endpoints/admin_apps_approved'
require_relative 'endpoints/admin_apps_config'
require_relative 'endpoints/admin_apps_mcp_servers'
require_relative 'endpoints/admin_apps_mcp_servers_permissions'
require_relative 'endpoints/admin_apps_permissions'
require_relative 'endpoints/admin_apps_requests'
require_relative 'endpoints/admin_apps_restricted'
require_relative 'endpoints/admin_audit_anomaly_allow'
Expand Down Expand Up @@ -118,6 +121,9 @@ module Endpoints
include AdminAppsActivities
include AdminAppsApproved
include AdminAppsConfig
include AdminAppsMcpServers
include AdminAppsMcpServersPermissions
include AdminAppsPermissions
include AdminAppsRequests
include AdminAppsRestricted
include AdminAuditAnomalyAllow
Expand Down
31 changes: 31 additions & 0 deletions lib/slack/web/api/endpoints/admin_apps_mcp_servers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# frozen_string_literal: true
# This file was auto-generated by lib/tasks/web.rake

module Slack
module Web
module Api
module Endpoints
module AdminAppsMcpServers
#
# List third-party app MCP servers approved for an organization, derived from the org's MCP server allowlist. Entries reflect allowlist state, not install/scope liveness: servers of apps that are uninstalled (but not deleted) are still listed.
#
# @option options [integer] :limit
# The maximum number of items to return. Must be between 1 - 1000 both inclusive.
# @option options [string] :cursor
# Set cursor to next_cursor returned by the previous call to list items in the next page.
# @see https://api.slack.com/methods/admin.apps.mcp.servers.list
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.apps.mcp.servers/admin.apps.mcp.servers.list.json
def admin_apps_mcp_servers_list(options = {})
if block_given?
Pagination::Cursor.new(self, :admin_apps_mcp_servers_list, options).each do |page|
yield page
end
else
post('admin.apps.mcp.servers.list', options)
end
end
end
end
end
end
end
Loading
Loading