使用说明
Slack MCP服务器-完整实施
📋 项目概述
使用FastMCP v2实现的完整Slack API集成MCP服务器。根据课题指南 4个必需功能, 4个可选功能,还有 奖励波莫多4个计时器功能已全部实施。
🎯 主要功能
- ✅ 完全UTF-8韩文支持 -在所有消息中完全支持韩文
- ✅ 双令牌系统 -通过Bot Token+User Token支持所有功能
- ✅ 上载智能文件 -根据大小自动选择最佳上传方式
- ✅ 波莫多罗计时器 -具有自动通知功能的时间管理工具
- ✅ 异步处理 -基于asyncio的高性能实施
- ✅ 详细的错误处理 -对所有API调用进行适当的异常处理
🚀 功能列表
🔴 必需功能(4个)
-
send_slack_message-发送消息- 向通道或DM发送消息
- 主题回复支持
- 完全UTF-8韩文支持
-
get_slack_channels-查看频道列表- 区分公开/非公开渠道
- 检查成员资格状态
- 过滤存档的频道
-
get_slack_channel_history-查看消息历史记录- 从最新消息开始查看
- 可指定时间范围
- 包含消息元数据
-
send_slack_direct_message-DM传输- 向特定用户发送1:1消息
- 自动创建DM通道
- 过滤机器人用户
🟡 可选功能(Optional Features-4个)
-
get_slack_users-查看用户列表- 按用户类型分类(管理员、成员、来宾、机器人)
- 启用DM的用户筛选
- 详细配置文件信息
-
search_slack_messages-搜索消息(需要User Token)- 基于关键字的整个工作空间搜索
- 排序和过滤选项
- 搜索结果元数据
-
upload_file_to_slack-上载智能文件- 按文件大小优化上载方式
- 支持多种文件格式
- 自动预览和代码加亮
-
add_slack_reaction-添加消息响应- 添加姨妈反应
- 支持多种表情格式
🟢 奖励功能(Bonus Features-4个)
-
start_pomodoro_timer-以波莫多开始计时器- 5种计时器类型(study,work,break,meeting,custom)
- 自动启动/关闭通知
- 自定义时间和消息
-
cancel_pomodoro_timer-取消计时器- 立即停止运行的计时器
- 发送取消通知
-
list_active_timers-活动计时器列表- 当前运行的所有计时器
- 显示进度和剩余时间
-
get_timer_status-查看计时器状态- 特定计时器的详细状态
- 实时进度
🛠️ 实用程序功能
test_slack_connection-测试连接get_workspace_info-关于工作空间get_file_preview-预览文件verify_or_create_file-确认/创建文件
📦 如何安装和运行
1.项目初始化
# 프로젝트 클론 또는 다운로드 후
cd slack-mcp
# uv 패키지 매니저 설치 (없는 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 가상환경 생성 및 활성화
uv venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
# 의존성 설치
uv sync
# 또는
uv pip install -r requirements.txt
2.设置环境变量
.env 创建文件并将其设置为:
# 필수: Slack Bot Token (xoxb-로 시작)
SLACK_BOT_TOKEN=xoxb-your-bot-token-here
# 선택: Slack User Token (xoxp-로 시작) - 검색, 파일업로드용
SLACK_USER_TOKEN=xoxp-your-user-token-here
# 선택: 기본 채널 ID (테스트용)
SLACK_TEST_CHANNEL_ID=C08UZKK9Q4R
# 선택: 로그 레벨
LOG_LEVEL=INFO
3.设置Slack App
需要Bot Token Scopes:
channels:read # 채널 목록 조회
channels:history # 채널 메시지 히스토리 조회
chat:write # 메시지 전송
im:read # DM 채널 읽기
im:write # DM 메시지 전송
im:history # DM 히스토리 조회
users:read # 사용자 정보 조회
reactions:write # 반응 추가
其他User Token Scopes(可选):
search:read # 메시지 검색
files:write # 파일 업로드
4.运行服务器
# MCP 서버 실행
python slack_mcp_server.py
# 또는 직접 실행
uv run slack_mcp_server.py
💡 用法和示例
发送默认消息
# Claude/LLM이 도구 호출 시
send_slack_message(
channel="C08UZKK9Q4R",
text="안녕하세요! MCP에서 보내는 메시지입니다! 🚀"
)
上载文件(智能处理)
# 다양한 크기의 파일을 자동으로 최적 방식으로 업로드
upload_file_to_slack(
file_path="./report.pdf",
channels="C08UZKK9Q4R",
title="분석 보고서",
comment="월간 데이터 분석 결과입니다."
)
使用POMODO计时器
# 수업 타이머 시작 (50분)
start_pomodoro_timer(
timer_type="study",
channel_id="C08UZKK9Q4R",
duration_minutes=50,
custom_name="파이썬 고급 문법 학습"
)
# 활성 타이머 확인
list_active_timers()
# 타이머 취소
cancel_pomodoro_timer("study_20250602_143022_123456")
搜索消息(需要User Token)
# 워크스페이스 전체에서 메시지 검색
search_slack_messages(
query="MCP 서버",
count=10,
sort="timestamp"
)
🏗️ 项目结构
slack-mcp/
├── .env # 환경 변수 (Git 제외)
├── .env.example # 환경 변수 템플릿
├── .gitignore # Git 무시 파일
├── README.md # 이 파일
├── requirements.txt # 의존성 목록
├── pyproject.toml # 프로젝트 설정
├── slack_api_client.py # Slack API 클라이언트 (핵심 모듈)
├── pomodoro_timer.py # 뽀모도로 타이머 모듈
└── slack_mcp_server.py # FastMCP 서버 메인
🔧 技术实施详细信息
双令牌系统
- 机器人令牌(xoxb-):典型的机器人功能(发送消息、查看频道等)
- 用户令牌(xoxp-):需要用户权限的功能(搜索、上载大型文件)
智能文件上传策略
- 小文本文件(<50KB):直接发送到消息内容
- 中间文件(50KB-1MB):上传到代码段
- 常规文件(1MB-100MB):上载标准文件
- 大文件(100MB-1GB):上传到User Token
- 超大文件(>1GB):仅共享文件信息
异步和并发
asyncio实现基于的完全异步- 支持以POMODORO并行运行计时器
- 通过锁定确保客户端初始化的安全性
UTF-8韩文支持
headers = {
'Content-Type': 'application/json; charset=utf-8'
}
🐛 开发过程中遇到的困难和解决方法
1.函数之间的Input变量名难以统一
问题:每个API函数的参数名称不同,不一致
channel兽医channel_id兽医channelstext兽医message兽医content
解决方案:
- Slack API基于官方文档统一变量名(未来将更新)
- 在内部函数中应用一致的命名约定
- 向docstring添加明确的参数说明
async def send_message(
self,
channel: str, # 가능한 부분들은 channel 로 통일 예정
text: str, # 통일: text
thread_ts: Optional[str] = None
) -> Dict[str, Any]:
2.难以找到Input-Output变量名
问题:Slack API响应的复杂嵌套结构难以提取所需数据
解决方案:
- 通过日志输出API响应来确定结构
- 创建通用数据提取函数
- 规范化和格式化响应数据
# 응답 데이터 정규화 예시
formatted_messages.append({
'text': msg.get('text', ''),
'user': msg.get('user', 'Unknown'),
'timestamp': readable_time,
'ts': msg.get('ts', ''),
# ... 필요한 필드만 추출
})
3.在使用最新版本的Outdated file_upload函数之前,犯了很多错误
问题:Slack的文件上传API多次更改,以传统方式deprecated
解决方案:
files.upload(已弃用)→files.getUploadURLExternal+files.completeUploadExternal- Slack SDK与现有REST API的混合方法
- 实施不同文件大小的上载策略
# 새로운 파일 업로드 플로우
# 1. 업로드 URL 요청
upload_response = await self._make_request('files.getUploadURLExternal', 'POST', upload_data)
# 2. 외부 URL로 파일 업로드
async with self._session.put(upload_url, data=file_content) as response:
# 파일 업로드
# 3. 업로드 완료 처리
complete_response = await self._make_request('files.completeUploadExternal', 'POST', complete_data)
4.需要User Token时,仅通过vs Bot Token解决;
问题:很难确定哪些功能需要哪些令牌
解决方案:
- 按功能明确分类令牌要求
- 自动选择双令牌系统
- 代币不足时的明确提示信息
# Bot Token으로 가능한 기능
- 메시지 전송 (chat.postMessage)
- 채널 목록 (conversations.list)
- 사용자 목록 (users.list)
- 파일 업로드 (< 100MB)
# User Token이 필요한 기능
- 메시지 검색 (search.messages)
- 대용량 파일 업로드 (> 100MB)
5.GET与POST的区别
问题:何时使用GET,何时使用POST,令人困惑
解决方案:
- 正确检查Slack API文档中的HTTP方法
- 数据查询GET,数据生成/修改POST
- 统一的
_make_request作为函数处理
# GET: 데이터 조회
await self._make_request('conversations.list', 'GET', params)
await self._make_request('users.list', 'GET', params)
# POST: 데이터 생성/수정
await self._make_request('chat.postMessage', 'POST', data)
await self._make_request('files.getUploadURLExternal', 'POST', data)
6.其他解决的问题
- 速率限制:指数回退和重试逻辑
- 错误处理:针对每个错误代码提出自定义解决方案
- UTF-8编码:完全支持韩文信息
- 异步安全:使用POMODO处理计时器的同时运行
📊 性能和限制
文件上传限制
- 免费计划:高达5GB的工作空间存储
- 单个文件:最高1GB(在付费计划中)
- 机器人令牌:上传高达100MB的文件
- 用户令牌:上传高达1GB的文件
API费率限制
- 第1层方法:每分钟1+
- 第2层方法:每分钟20+
- 第3层方法:每分钟50+
- 第4层方法:100+每分钟
🔍 测试方法
1.测试连接
# 서버 실행 후 Claude에서 테스트
test_slack_connection()
2.基本功能测试
# 채널 목록 조회
get_slack_channels()
# 메시지 전송 테스트
send_slack_message("C08UZKK9Q4R", "테스트 메시지입니다! 🎉")
3.高级功能测试
# 파일 업로드 테스트
upload_file_to_slack("./test.txt", title="테스트 파일")
# 뽀모도로 타이머 테스트
start_pomodoro_timer("work", duration_minutes=25, custom_name="테스트 작업")
🤝 贡献方法
- 问题提示:使用GitHub Issues
- 功能建议:使用Feature Request模板
- 代码贡献:欢迎Pull Request
- 文档增强:README和docstring增强
📄 许可证
此项目符合MIT许可证。
🙋♂️ 联系和支持
- 开发者:权俊赫
- 版本:8.5.2(完整实施)
- 上次更新: 2025-06-04
课题完成度:4个必须+4个选择+4个分享+4个分享+4个分享工具= 共实现16项功能
通过该项目,您可以构建可用于实际工作的高品质Slack集成工具! 🚀
