slack-mcp-gateway
Facilitates integration with Slack environments, enabling message dispatching and comprehensive retrieval of workspace member directories to augment collaborative workflows and support automated channel interventions.
Author

AVIMBU
Quick Info
Actions
Tags
Slack Model Context Protocol Conduit
This is an interface allowing the Claude Desktop platform (or any compatible MCP client) to interface with your designated Slack installation for the purposes of dispatching conversational content and querying the complete roster of registered users.
Local Deployment Prerequisites
To successfully execute this component on a local machine, you must incorporate the ensuing configuration stanza into your Claude Desktop MCP Server configuration manifest:
{ "mcpServers": { "mcp-slack-local-link": { "command": "node", "args": ["/path/to/project/dist/index.js"], <---- Substitute this placeholder with the actual project binary location "env": { "SLACK_BOT_USER_OAUTH_TOKEN": "test-bot-token", "SLACK_TEAM_ID": "test-team-id" } }, } }
Once configured, testing this implementation within the Claude Desktop Application should be feasible utilizing sample directives such as:
- "Provide a complete listing of all personnel within my Slack organization."
- "Transmit a welcoming notification to the designated Slack conduit identified by the token
<channel id>."
Executing the service locally requires:
node dist/index.js
While simultaneously maintaining the build process in an auxiliary terminal session:
npm run watch
Required Slack Authorization Scopes
The following permission scopes have been provisioned and are presently accounted for:
| Permission Scope | Detailed Interpretation | Status Implemented |
|---|---|---|
| app_configurations:read | Access application configuration artifacts via Manifest APIs | ❌ |
| app_configurations:write | Write application configuration data and instantiate new applications via Manifest APIs | ❌ |
| app_mentions:read | Observe communications that explicitly address @your_slack_app within subscribed dialogues | ❌ |
| assistant:write | Grant authorization for the Slack application to operate as an automated helper entity | ❌ |
| bookmarks:read | Retrieve the registry of saved bookmarks | ❌ |
| bookmarks:write | Establish, modify, or erase saved bookmarks | ❌ |
| calls:read | Fetch particulars concerning active or concluded voice/video transmissions | ❌ |
| calls:write | Initiate and manage active communication sessions within the workspace | ❌ |
| canvases:read | The Slack application gains capability to access textual and structural elements within Slack Canvases | ❌ |
| canvases:write | The Slack application is empowered to generate, revise, and remove Canvas entities | ❌ |
| channels:history | View message archives and associated material within public channels where the application is present | ❌ |
| channels:join | Permit the application to become a member of public workspace channels | ❌ |
| channels:manage | Administer public channels the application belongs to and create novel ones | ❌ |
| channels:read | Review foundational metadata concerning public channels in the workspace | ❌ |
| channels:write.invites | Extend invitations to workspace participants for public channels | ❌ |
| channels:write.topic | Modify the descriptive text (topic) for public channels | ❌ |
| chat:write | Dispatch textual updates into authorized conduits and dialogues | ✅ |
| chat:write.customize | Send messages leveraging the identity of @your_slack_app, including a bespoke display name and icon | ❌ |
| chat:write.public | Deliver messages to channels where @your_slack_app is not officially a member | ❌ |
| commands | Integrate user-invoked shortcuts or slash command interfaces | ❌ |
| conversations.connect:manage | Allows the Slack application to govern Slack Connect channel relationships | ❌ |
| conversations.connect:read | Receive event notifications pertaining to Slack Connect invitations targeted at subscribed channels | ❌ |
| conversations.connect:write | Formulate Slack Connect invitations for channels the application occupies, and accept incoming invitations | ❌ |
| datastore:read | Inspect and retrieve persisted data from the Slack App Datastore utility | ❌ |
| datastore:write | Inscribe or update data within the Slack App Datastore utility | ❌ |
| dnd:read | View the 'Do Not Disturb' scheduling status for workspace occupants | ❌ |
| emoji:read | Inspect the set of custom graphical symbols available in the workspace | ❌ |
| files:read | Access files shared within channels and dialogues the application monitors | ❌ |
| files:write | Upload, modify, or delete files as the Slack application's representative | ❌ |
| groups:history | Review historical messages and data within private channels to which the application has access | ❌ |
| groups:read | Obtain fundamental details regarding private channels the application is part of | ❌ |
| groups:write | Manage private channels the application belongs to and institute new ones | ❌ |
| groups:write.invites | Extend invitations to users for inclusion in private channels | ❌ |
| groups:write.topic | Set the descriptive header (topic) for private channels | ❌ |
| im:history | See content exchanged in direct messaging threads where the application is present | ❌ |
| im:read | Review basic metadata for direct messaging threads involving the application | ❌ |
| im:write | Initiate one-on-one direct messaging sessions with individuals | ❌ |
| im:write.topic | Set the descriptive header (topic) within direct message threads | ❌ |
| incoming-webhook | Provision one-way notification endpoints to post messages to a predetermined channel | ❌ |
| links.embed:write | Permit the embedding of video player URLs directly within messages | ❌ |
| links:read | Observe external URLs present within message content | ❌ |
| links:write | Enable the rendering of link previews when URLs are posted in messages | ❌ |
| metadata.message:read | Permits the Slack application to examine message auxiliary data within subscribed conversations | ❌ |
| mpim:history | View message archives in group direct messages where the application is a participant | ❌ |
| mpim:read | Review core information regarding group direct message sessions the application is involved in | ❌ |
| mpim:write | Initiate group direct messaging exchanges with multiple users | ❌ |
| mpim:write.topic | Set the descriptive header (topic) for group direct message sessions | ❌ |
| none | Execute certain API calls without requiring explicit scope validation | ❌ |
| pins:read | See content that has been affixed (pinned) within monitored channels/conversations | ❌ |
| pins:write | Attach or detach messages and uploaded resources as pinned items | ❌ |
| reactions:read | View the set of emoji responses and the associated message content in subscribed conversations | ❌ |
| reactions:write | Append or modify emoji reaction markers on messages | ❌ |
| reminders:read | List scheduled reminders established by this specific Slack application | ❌ |
| reminders:write | Create, dismiss, or mark reminders as fulfilled | ❌ |
| remote_files:read | Inspect remote files that have been integrated into the workspace by this application | ❌ |
| remote_files:share | Post remote files to the workspace utilizing a user's authorization context | ❌ |
| remote_files:write | Manage (add, alter, remove) remote files on behalf of a user | ❌ |
| search:read.files | Conduct content searches across files within the workspace | ❌ |
| search:read.im | Conduct content searches within direct message histories | ❌ |
| search:read.mpim | Conduct content searches within group direct message histories | ❌ |
| search:read.private | Conduct content searches within private channel archives | ❌ |
| search:read.public | Conduct content searches within public channel archives | ❌ |
| team.billing:read | Allows the Slack application to read the subscription tier details for installed workspaces | ❌ |
| team.preferences:read | Allows the Slack application to read workspace-level configuration settings | ❌ |
| team:read | Obtain identifying information such as the workspace name, email domain, and visual identity | ❌ |
| tokens.basic | Execute methods that do not necessitate a defined authorization scope | ❌ |
| triggers:read | Query existing Platform trigger configurations | ❌ |
| triggers:write | Define and deploy new Platform trigger configurations | ❌ |
| usergroups:read | View defined user groupings within the workspace | ❌ |
| usergroups:write | Create and manage user group definitions | ❌ |
| users.profile:read | Access detailed profile attributes for workspace members | ❌ |
| users:read | Obtain basic identifying information for workspace occupants | ✅ |
| users:read.email | Retrieve the associated electronic mail addresses for workspace members | ❌ |
| users:write | Set the presence status for the Slack application itself | ❌ |
| workflow.steps:execute | Authorize the application to inject custom operational stages into Workflow Builder executions | ❌ |
| workflows.templates:read | View saved workflow template definitions | ❌ |
| workflows.templates:write | Create and persist new workflow template definitions | ❌ |
Support Contact
Should inquiries arise, please direct correspondence to us via AVIMBU.
WIKIPEDIA: The XMLHttpRequest (XHR) specification outlines a JavaScript object methodology designed to facilitate the transmission of Hypertext Transfer Protocol (HTTP) requests from a client environment (like a web browser) to a remote server. The methods provided enable a web-based application to issue server queries post-initial page rendering and subsequently process the returned data. XHR constitutes a foundational element of Asynchronous JavaScript and XML (Ajax) programming paradigms. Before Ajax adoption, the standard methods for server interaction involved traditional hyperlink traversal and form submissions, processes that typically necessitated a full page reload to display updated content.
== Chronology ==
The fundamental concept underpinning XMLHttpRequest was formulated in the year 2000 by the development team responsible for Microsoft Outlook. This idea was subsequently instantiated within the Internet Explorer 5 browser release (1999). Critically, the initial syntax did not employ the universally recognized XMLHttpRequest identifier. Instead, developers relied upon constructor instantiations such as ActiveXObject("Msxml2.XMLHTTP") and ActiveXObject("Microsoft.XMLHTTP"). As of the release of Internet Explorer 7 (2006), all major web rendering engines adopted the standardized XMLHttpRequest identifier.
The XMLHttpRequest identifier has since solidified its position as the prevailing convention across all primary browser platforms, including Mozilla's Gecko rendering core (2002), Apple's Safari 1.2 (2004), and Opera 8.0 (2005).
=== Formal Standardization === The World Wide Web Consortium (W3C) formally published the initial Working Draft specification for the XMLHttpRequest object on April 5, 2006. A subsequent specification, designated Level 2, was released by the W3C on February 25, 2008. The Level 2 update introduced functionality for monitoring data transfer progress, enabling requests across different security domains (cross-site requests), and managing data transmission as raw byte streams. By the close of 2011, the entirety of the Level 2 enhancements were merged back into the foundational specification. In late 2012, stewardship of the development process transitioned to the WHATWG group, which now maintains the document as a continuously evolving artifact documented using the Web IDL methodology.
== Operational Procedure == Generally, executing a request utilizing XMLHttpRequest necessitates adherence to several sequential programming actions.
- Instantiate an XMLHttpRequest object by invoking its constructor function:
- Invoke the
openmethod to define the transaction type (e.g., GET, POST), specify the target resource Uniform Resource Identifier (URI), and select either synchronous or asynchronous execution flow: - For asynchronous operations, establish an event handler to be notified upon shifts in the request's operational status:
- Commence the transmission by calling the
sendmethod, optionally including payload data: - Process state transitions within the defined event listener. Upon server acknowledgement and successful data receipt, the object's internal state transitions to 4, signifying the 'done' terminal state, with the server response typically residing in the
responseTextproperty by default. Beyond these core steps, XMLHttpRequest offers extensive configuration options to govern request handling and response interpretation. Custom header fields can be appended to tailor server behavior, and data intended for the server must be passed to thesendcall. The received payload can be automatically parsed from JSON format into native JavaScript objects, or it can be processed incrementally as data streams arrive, bypassing the need to wait for the full transmission completion. Furthermore, the request can be prematurely terminated via an abort call or configured with a timeout constraint to prevent indefinite waiting.
