chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:20:06 +08:00
commit f4548892ad
1138 changed files with 185224 additions and 0 deletions
@@ -0,0 +1,11 @@
{
"name": "slack-by-salesforce",
"description": "Official Slack MCP server for interactive and collaborative workflows. Surface insights, draft messages, and engage teams directly within Slack from Claude Cowork.",
"version": "1.0.0",
"author": {
"name": "Salesforce",
"url": "https://slack.com"
},
"homepage": "https://github.com/slackapi/slack-mcp-plugin",
"license": "MIT"
}
+12
View File
@@ -0,0 +1,12 @@
{
"mcpServers": {
"slack": {
"type": "http",
"url": "https://mcp.slack.com/mcp",
"oauth": {
"clientId": "1601185624273.8899143856786",
"callbackPort": 3118
}
}
}
}
+16
View File
@@ -0,0 +1,16 @@
# Slack Plugin
This plugin integrates Slack with Claude Code, providing tools to search, read, and send messages in Slack.
## Commands
- `/slack:summarize-channel <channel-name>` — Summarize recent activity in a Slack channel
- `/slack:find-discussions <topic>` — Find discussions about a specific topic across Slack channels
- `/slack:draft-announcement <topic>` — Draft a well-formatted Slack announcement and save it as a draft
- `/slack:standup` — Generate a standup update based on your recent Slack activity
- `/slack:channel-digest <channel1, channel2, ...>` — Get a digest of recent activity across multiple Slack channels
## Skills
- **slack-messaging** — Guidance for composing well-formatted Slack messages using mrkdwn syntax
- **slack-search** — Guidance for effectively searching Slack to find messages, files, channels, and people
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2020- Slack Technologies, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+108
View File
@@ -0,0 +1,108 @@
# Slack Plugin
This repository contains the configuration needed to integrate Slack with Cursor IDE and Claude Code. The plugin enables your agents to interact directly with your Slack workspace, allowing you to search messages, send communications, manage canvases, and more—all through natural language.
## Features
The Slack MCP server provides the following capabilities:
- **Search**: Find messages, files, users, and channels (both public and private)
- **Messaging**: Send messages, retrieve channel histories, and access threaded conversations
- **Canvas**: Create and share formatted documents, export content as markdown
- **User Management**: Retrieve user profiles including custom fields and status information
## Prerequisites
Before setting up the Slack MCP server, ensure you have:
- Cursor IDE or Claude Code CLI installed
- Access to a Slack workspace with MCP integration approved by your workspace admin
## Installation
Choose the installation method for your IDE:
### Claude Code
If you're using Claude Code CLI, you can install this as a plugin by cloning it locally:
```bash
git clone https://github.com/slackapi/slack-mcp-plugin.git
cd slack-mcp-plugin
claude --plugin-dir ./
```
The Slack MCP server will be automatically configured when the plugin loads. You will be prompted to authenticate into your Slack workspace via OAuth.
The Claude plugin uses the following MCP configuration (`.mcp.json`):
```json
{
"mcpServers": {
"slack": {
"type": "http",
"url": "https://mcp.slack.com/mcp",
"oauth": {
"clientId": "1601185624273.8899143856786",
"callbackPort": 3118
}
}
}
}
```
### Cursor
You can use the following Add to Cursor button or follow the steps below to manually configure the Slack MCP server in Cursor:
[![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=slack&config=eyJ1cmwiOiJodHRwczovL21jcC5zbGFjay5jb20vbWNwIiwiYXV0aCI6eyJDTElFTlRfSUQiOiIzNjYwNzUzMTkyNjI2Ljg5MDM0NjkyMjg5ODIifX0%3D)
#### Step 1: Open Cursor Settings
Navigate to **Cursor → Settings → Cursor Settings** (or use the keyboard shortcut `Cmd+,` on macOS, `Ctrl+,` on Windows/Linux).
#### Step 2: Navigate to MCP Tab
In the Settings interface, click on the **MCP** tab to access MCP server configurations.
#### Step 3: Add Slack MCP Configuration
Add the following configuration to connect to the remote Slack MCP server:
```json
{
"mcpServers": {
"slack": {
"url": "https://mcp.slack.com/mcp",
"auth": {
"CLIENT_ID": "3660753192626.8903469228982"
}
}
}
}
```
Save the configuration. You will also see a connect button once added. Click that to authenticate into your Slack Workspace.
## Usage Examples
Once configured, you can interact with Slack through your AI assistant using natural language:
- **Search messages**: "Search for messages about the product launch in the last week"
- **Send messages**: "Send a message to #general channel saying the deployment is complete"
- **Find users**: "Who is the user with email john@example.com?"
- **Access threads**: "Show me the conversation thread from that message"
- **Create canvases**: "Create a canvas document with our meeting notes"
## Documentation & Resources
- [Official Slack MCP Server Documentation](https://docs.slack.dev/ai/mcp-server/)
## Notes & Limitations
- **Remote server only**: This configuration connects to Slack's hosted MCP server. No local installation is required or supported.
- **Admin approval required**: Your Slack workspace administrator must approve MCP integration before you can use this feature.
## Questions or Issues?
For questions about the Slack MCP server or integration issues, please refer to the [official Slack documentation](https://docs.slack.dev/ai/mcp-server/) or contact your workspace administrator.
@@ -0,0 +1,34 @@
---
description: Get a digest of recent activity across multiple Slack channels
---
Given the comma-separated channel names provided in $ARGUMENTS (strip leading `#` and whitespace from each):
1. Parse the argument into individual channel names. Strip leading `#` and whitespace from each name.
2. For each channel:
a. Use `slack_search_channels` to find the channel ID.
b. Use `slack_read_channel` to read recent messages (use a limit of 50 messages per channel to keep things manageable).
c. Summarize the key activity in that channel: main topics, decisions, questions, and notable messages.
3. Present the digest in this format:
```
*Channel Digest — <today's date>*
*#channel-1*
- Summary point 1
- Summary point 2
*#channel-2*
- Summary point 1
- Summary point 2
...
```
4. For each channel, keep the summary to 3-5 bullet points maximum. Focus on what's actionable or noteworthy.
5. If a channel has no recent activity, note that it's been quiet and mention when the last message was posted (if visible).
6. If a channel name can't be found, let the user know and continue with the remaining channels.
@@ -0,0 +1,27 @@
---
description: Draft a well-formatted Slack announcement and save it as a draft
---
Given the topic or context provided in $ARGUMENTS:
1. Ask the user the following clarifying questions (skip any that are already clear from the provided context):
- Which channel should this announcement be posted in?
- Who is the target audience?
- What is the key message or call to action?
- Is there a deadline or date to highlight?
- What tone is appropriate — formal, casual, or urgent?
2. Compose the announcement following Slack formatting best practices:
- Use Slack's mrkdwn syntax: `*bold*` for emphasis (not `**bold**`), `_italic_` for secondary emphasis, `>` for callouts.
- Lead with the most important information — don't bury the point.
- Use a clear, descriptive opening line that works as a headline.
- Keep paragraphs short (2-3 sentences max).
- Use bullet points for lists of items or action steps.
- Include relevant emoji sparingly to aid scanning (e.g., :mega: for announcements, :calendar: for dates, :point_right: for action items).
- End with a clear call to action or next step if applicable.
3. Present the draft to the user for review. Offer to adjust tone, length, or formatting.
4. Once the user approves, use `slack_search_channels` to find the target channel ID, then use `slack_send_message_draft` to create the draft in Slack.
5. Let the user know the draft is ready in Slack and they can review and send it from the Slack client.
@@ -0,0 +1,15 @@
---
description: Find discussions about a specific topic across Slack channels
---
Given the topic provided in $ARGUMENTS:
1. Use the `slack_search_public` tool to search for messages matching the topic. Use the topic as a natural language question first for semantic results.
2. If semantic results are sparse, follow up with a keyword search using key terms from the topic.
3. For the most relevant results, use `slack_read_thread` to fetch full thread conversations so you capture the complete discussion context.
4. Present the results organized by relevance:
- For each discussion found, show: the channel name, who started it, a brief summary of the conversation, and the date.
- Group related discussions together if they span multiple channels.
- Highlight any conclusions, decisions, or unresolved questions.
5. Limit output to the top 5-10 most relevant discussions to keep results manageable.
6. If no results are found, suggest alternative search terms or broader queries the user could try.
+31
View File
@@ -0,0 +1,31 @@
---
description: Generate a standup update based on your recent Slack activity
---
1. Use `slack_read_user_profile` (with no user_id) to get the current user's profile information, including their user ID and display name.
2. Search for the user's recent messages using `slack_search_public` with the filter `from:<@USER_ID>` and `after:` set to yesterday's date. This captures messages from the last working day.
3. Review the messages found and categorize them into standup themes:
- **What I worked on** — Topics, projects, or tasks the user discussed or contributed to
- **What I'm working on next** — Any mentions of upcoming work, plans, or follow-ups
- **Blockers** — Any questions asked that went unanswered, issues raised, or explicit mentions of being stuck
4. For messages in threads, use `slack_read_thread` to get the full context so you can accurately describe what the user contributed.
5. Format the standup as:
```
*Standup for <display name> — <today's date>*
*Done:*
- Item 1
- Item 2
*Doing:*
- Item 1
*Blockers:*
- None / Item 1
```
6. Present the standup to the user for review. They can edit, adjust, or ask you to post it to a specific channel.
@@ -0,0 +1,16 @@
---
description: Summarize recent activity in a Slack channel
---
Given the channel name provided in $ARGUMENTS (strip any leading `#`):
1. Use the `slack_search_channels` tool to find the channel ID for the provided channel name. Strip any leading `#` from the argument before searching.
2. Use the `slack_read_channel` tool to read recent messages from the channel (default limit of 100 messages).
3. For any messages that have threads with replies, use `slack_read_thread` to read the thread contents so the summary captures threaded discussions.
4. Produce a concise summary organized by topic or theme. The summary should include:
- An overview of the main topics discussed
- Key decisions or action items mentioned
- Notable announcements or updates
- Active threads and their conclusions (if any)
5. Keep the summary scannable — use short bullet points grouped by topic. Mention who said what when it's relevant (e.g., decisions, action items).
6. If the channel has very little recent activity, say so and note the last time a message was posted.
@@ -0,0 +1,58 @@
---
name: slack-messaging
description: Guidance for composing well-formatted, effective Slack messages using mrkdwn syntax
---
# Slack Messaging Best Practices
This skill provides guidance for composing well-formatted, effective Slack messages.
## When to Use
Apply this skill whenever composing, drafting, or helping the user write a Slack message — including when using `slack_send_message`, `slack_send_message_draft`, or `slack_create_canvas`.
## Slack Formatting (mrkdwn)
Slack uses its own markup syntax called **mrkdwn**, which differs from standard Markdown. Always use mrkdwn when composing Slack messages:
| Format | Syntax | Notes |
|--------|--------|-------|
| Bold | `*text*` | Single asterisks, NOT double |
| Italic | `_text_` | Underscores |
| Strikethrough | `~text~` | Tildes |
| Code (inline) | `` `code` `` | Backticks |
| Code block | `` ```code``` `` | Triple backticks |
| Quote | `> text` | Angle bracket |
| Link | `<url\|display text>` | Pipe-separated in angle brackets |
| User mention | `<@U123456>` | User ID in angle brackets |
| Channel mention | `<#C123456>` | Channel ID in angle brackets |
| Bulleted list | `- item` or `• item` | Dash or bullet character |
| Numbered list | `1. item` | Number followed by period |
### Common Mistakes to Avoid
- Do NOT use `**bold**` (double asterisks) — Slack uses `*bold*` (single asterisks)
- Do NOT use `## headers` — Slack does not support Markdown headers. Use `*bold text*` on its own line instead.
- Do NOT use `[text](url)` for links — Slack uses `<url|text>` format
- Do NOT use `---` for horizontal rules — Slack does not render these
## Message Structure Guidelines
- **Lead with the point.** Put the most important information in the first line. Many people read Slack on mobile or in notifications where only the first line shows.
- **Keep it short.** Aim for 1-3 short paragraphs. If the message is long, consider using a Canvas instead.
- **Use line breaks generously.** Walls of text are hard to read. Separate distinct thoughts with blank lines.
- **Use bullet points for lists.** Anything with 3+ items should be a list, not a run-on sentence.
- **Bold key information.** Use `*bold*` for names, dates, deadlines, and action items so they stand out when scanning.
## Thread vs. Channel Etiquette
- **Reply in threads** when responding to a specific message to keep the main channel clean.
- **Use `reply_broadcast`** (also post to channel) only when the reply contains information everyone needs to see.
- **Post in the channel** (not a thread) when starting a new topic, making an announcement, or asking a question to the whole group.
- **Don't start a new thread** to continue an existing conversation — find and reply to the original message.
## Tone and Audience
- Match the tone to the channel — `#general` is usually more formal than `#random`.
- Use emoji reactions instead of reply messages for simple acknowledgments (though note: the MCP tools can't add reactions, so suggest the user do this manually if appropriate).
- When writing announcements, use a clear structure: context, key info, call to action.
@@ -0,0 +1,97 @@
---
name: slack-search
description: Guidance for effectively searching Slack to find messages, files, channels, and people
---
# Slack Search
This skill provides guidance for effectively searching Slack to find messages, files, and information.
## When to Use
Apply this skill whenever you need to find information in Slack — including when a user asks you to locate messages, conversations, files, or people, or when you need to gather context before answering a question about what's happening in Slack.
## Search Tools Overview
| Tool | Use When |
|------|----------|
| `slack_search_public` | Searching public channels only. Does not require user consent. |
| `slack_search_public_and_private` | Searching all channels including private, DMs, and group DMs. Requires user consent. |
| `slack_search_channels` | Finding channels by name or description. |
| `slack_search_users` | Finding people by name, email, or role. |
## Search Strategy
### Start Broad, Then Narrow
1. Begin with a simple keyword or natural language question.
2. If too many results, add filters (`in:`, `from:`, date ranges).
3. If too few results, remove filters and try synonyms or related terms.
### Choose the Right Search Mode
- **Natural language questions** (e.g., "What is the deadline for project X?") — Best for fuzzy, conceptual searches where you don't know exact keywords.
- **Keyword search** (e.g., `project X deadline`) — Best for finding specific, exact content.
### Use Multiple Searches
Don't rely on a single search. Break complex questions into smaller searches:
- Search for the topic first
- Then search for specific people's contributions
- Then search in specific channels
## Search Modifiers Reference
### Location Filters
- `in:channel-name` — Search within a specific channel
- `in:<#C123456>` — Search in channel by ID
- `-in:channel-name` — Exclude a channel
- `in:<@U123456>` — Search in DMs with a user
### User Filters
- `from:<@U123456>` — Messages from a specific user (by ID)
- `from:username` — Messages from a user (by Slack username)
- `to:me` — Messages sent directly to you
### Content Filters
- `is:thread` — Only threaded messages
- `has:pin` — Pinned messages
- `has:link` — Messages containing links
- `has:file` — Messages with file attachments
- `has::emoji:` — Messages with a specific reaction
### Date Filters
- `before:YYYY-MM-DD` — Messages before a date
- `after:YYYY-MM-DD` — Messages after a date
- `on:YYYY-MM-DD` — Messages on a specific date
- `during:month` — Messages during a specific month (e.g., `during:january`)
### Text Matching
- `"exact phrase"` — Match an exact phrase
- `-word` — Exclude messages containing a word
- `wild*` — Wildcard matching (minimum 3 characters before `*`)
## File Search
To search for files, use the `content_types="files"` parameter with type filters:
- `type:images` — Image files
- `type:documents` — Document files
- `type:pdfs` — PDF files
- `type:spreadsheets` — Spreadsheet files
- `type:canvases` — Slack Canvases
Example: `content_types="files" type:pdfs budget after:2025-01-01`
## Following Up on Results
After finding relevant messages:
- Use `slack_read_thread` to get the full thread context for any threaded message.
- Use `slack_read_channel` with `oldest`/`latest` timestamps to read surrounding messages for context.
- Use `slack_read_user_profile` to identify who a user is when their ID appears in results.
## Common Pitfalls
- **Boolean operators don't work.** `AND`, `OR`, `NOT` are not supported. Use spaces (implicit AND) and `-` for exclusion.
- **Parentheses don't work.** Don't try to group search terms with `()`.
- **Search is not real-time.** Very recent messages (last few seconds) may not appear in search results. Use `slack_read_channel` for the most recent messages.
- **Private channel access.** Use `slack_search_public_and_private` when you need to include private channels, but note this requires user consent.