Provides comprehensive integration with Slack, including sending messages to channels/DMs, retrieving channel history, managing user lists, uploading files, adding reactions, searching messages, and running Pomodoro timers with automatic notifications.
Slack MCP Server - Complete Implementation
π νλ‘μ νΈ κ°μ
FastMCP v2λ₯Ό μ¬μ©νμ¬ κ΅¬νν μμ ν Slack API μ°λ MCP μλ²μ λλ€. κ³Όμ κ°μ΄λλΌμΈμ λ°λΌ νμ κΈ°λ₯ 4κ°, μ ν κΈ°λ₯ 4κ°, κ·Έλ¦¬κ³ λ³΄λμ€ λ½λͺ¨λλ‘ νμ΄λ¨Έ κΈ°λ₯ 4κ°λ₯Ό λͺ¨λ ꡬννμ΅λλ€.
π― μ£Όμ νΉμ§
β μμ ν UTF-8 νκΈ μ§μ - λͺ¨λ λ©μμ§μμ νκΈ μλ²½ μ§μ
β μ΄μ€ ν ν° μμ€ν - Bot Token + User TokenμΌλ‘ λͺ¨λ κΈ°λ₯ μ§μ
β μ€λ§νΈ νμΌ μ λ‘λ - ν¬κΈ°λ³ μ΅μ μ λ‘λ λ°©μ μλ μ ν
β λ½λͺ¨λλ‘ νμ΄λ¨Έ - μλ μλ¦Ό κΈ°λ₯μ΄ ν¬ν¨λ μκ° κ΄λ¦¬ λꡬ
β λΉλκΈ° μ²λ¦¬ - κ³ μ±λ₯ asyncio κΈ°λ° κ΅¬ν
β μμΈν μλ¬ νΈλ€λ§ - λͺ¨λ API νΈμΆμ λν μ μ ν μμΈ μ²λ¦¬
Related MCP server: Slack Search MCP Server
π κΈ°λ₯ λͺ©λ‘
π΄ νμ κΈ°λ₯ (Required Features - 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. νλ‘μ νΈ μ΄κΈ°ν
2. νκ²½ λ³μ μ€μ
.env νμΌμ μμ±νκ³ λ€μκ³Ό κ°μ΄ μ€μ :
3. Slack App μ€μ
νμν Bot Token Scopes:
μΆκ° User Token Scopes (μ ν κΈ°λ₯μ©):
4. μλ² μ€ν
π‘ μ¬μ©λ² λ° μμ
κΈ°λ³Έ λ©μμ§ μ μ‘
νμΌ μ λ‘λ (μ€λ§νΈ μ²λ¦¬)
λ½λͺ¨λλ‘ νμ΄λ¨Έ μ¬μ©
λ©μμ§ κ²μ (User Token νμ)
ποΈ νλ‘μ νΈ κ΅¬μ‘°
π§ κΈ°μ μ ꡬν μΈλΆμ¬ν
μ΄μ€ ν ν° μμ€ν
Bot Token (xoxb-): μΌλ°μ μΈ λ΄ κΈ°λ₯ (λ©μμ§ μ μ‘, μ±λ μ‘°ν λ±)
User Token (xoxp-): μ¬μ©μ κΆν νμν κΈ°λ₯ (κ²μ, λμ©λ νμΌ μ λ‘λ)
μ€λ§νΈ νμΌ μ λ‘λ μ λ΅
μμ ν μ€νΈ νμΌ (< 50KB): λ©μμ§ λ΄μ©μΌλ‘ μ§μ μ μ‘
μ€κ° νμΌ (50KB - 1MB): μ½λ μ€λν«μΌλ‘ μ λ‘λ
μΌλ° νμΌ (1MB - 100MB): νμ€ νμΌ μ λ‘λ
λμ©λ νμΌ (100MB - 1GB): User TokenμΌλ‘ μ λ‘λ
μ΄λμ©λ νμΌ (> 1GB): νμΌ μ λ³΄λ§ κ³΅μ
λΉλκΈ° μ²λ¦¬ λ° λμμ±
asyncioκΈ°λ° μμ λΉλκΈ° ꡬνλ½λͺ¨λλ‘ νμ΄λ¨Έμ λ³λ ¬ μ€ν μ§μ
λ½(Lock)μ ν΅ν ν΄λΌμ΄μΈνΈ μ΄κΈ°ν μμ μ± λ³΄μ₯
UTF-8 νκΈ μ§μ
π κ°λ° κ³Όμ μμ κ²ͺμ μ΄λ €μκ³Ό ν΄κ²° λ°©λ²
1. ν¨μλ€ κ°μ Input λ³μλͺ ν΅μΌ μ΄λ €μ
λ¬Έμ : API ν¨μλ§λ€ λ§€κ°λ³μ μ΄λ¦μ΄ λ¬λΌμ μΌκ΄μ± λΆμ‘±
channelvschannel_idvschannelstextvsmessagevscontent
ν΄κ²°μ± :
Slack API 곡μ λ¬Έμ κΈ°μ€μΌλ‘ λ³μλͺ ν΅μΌ(ν₯ν μ λ°μ΄νΈ μμ )
λ΄λΆ ν¨μμμλ μΌκ΄λ λ€μ΄λ° 컨벀μ μ μ©
docstringμ λͺ νν λ§€κ°λ³μ μ€λͺ μΆκ°
2. Input-Output λ³μλͺ μ°ΎκΈ° μ΄λ €μ
λ¬Έμ : Slack API μλ΅μ 볡μ‘ν μ€μ²© κ΅¬μ‘°λ‘ νμν λ°μ΄ν° μΆμΆ μ΄λ €μ
ν΄κ²°μ± :
API μλ΅μ λ‘κ·Έλ‘ μΆλ ₯νμ¬ κ΅¬μ‘° νμ
κ³΅ν΅ λ°μ΄ν° μΆμΆ ν¨μ μμ±
μλ΅ λ°μ΄ν° μ κ·ν λ° ν¬λ§·ν
3. Outdated file_upload ν¨μλ₯Ό μ΅μ λ²μ μΌλ‘ μ¬μ©νκΈ°κΉμ§ λ§μ μνμ°©μ€
λ¬Έμ : Slackμ νμΌ μ λ‘λ APIκ° μ¬λ¬ λ² λ³κ²½λμ΄ κΈ°μ‘΄ λ°©μ deprecated
ν΄κ²°μ± :
files.upload(deprecated) βfiles.getUploadURLExternal+files.completeUploadExternalSlack SDKμ κΈ°μ‘΄ REST APIμ νμ΄λΈλ¦¬λ μ κ·Όλ²
νμΌ ν¬κΈ°λ³ λ€λ₯Έ μ λ‘λ μ λ΅ κ΅¬ν
4. User Tokenμ΄ νμν κ²½μ° vs Bot Tokenλ§μΌλ‘ ν΄κ²°λλ κ²½μ°
λ¬Έμ : μ΄λ€ κΈ°λ₯μ μ΄λ€ ν ν°μ΄ νμνμ§ νμ νκΈ° μ΄λ €μ
ν΄κ²°μ± :
κΈ°λ₯λ³ ν ν° μꡬμ¬ν λͺ νν λΆλ₯
μ΄μ€ ν ν° μμ€ν μΌλ‘ μλ μ ν
ν ν° λΆμ‘± μ λͺ νν μλ΄ λ©μμ§
5. GET vs POSTμ μ°¨μ΄
λ¬Έμ : μΈμ GETμ μ°κ³ μΈμ POSTλ₯Ό μ¨μΌ νλμ§ νΌλ
ν΄κ²°μ± :
Slack API λ¬Έμμ HTTP λ©μλ μ νν νμΈ
λ°μ΄ν° μ‘°νλ GET, λ°μ΄ν° μμ±/μμ μ POST
ν΅μΌλ
_make_requestν¨μλ‘ μ²λ¦¬
6. κΈ°ν ν΄κ²°ν μ΄μλ€
Rate Limiting: μ§μ λ°±μ€νμ μ¬μλ λ‘μ§
Error Handling: κ° μλ¬ μ½λλ³ λ§μΆ€ν ν΄κ²° μ μ
UTF-8 Encoding: νκΈ λ©μμ§ μλ²½ μ§μ
Async Safety: λ½λͺ¨λλ‘ νμ΄λ¨Έμ λμ μ€ν μ²λ¦¬
π μ±λ₯ λ° μ νμ¬ν
νμΌ μ λ‘λ μ ν
λ¬΄λ£ νλ: μ΅λ 5GB μν¬μ€νμ΄μ€ μ€ν 리μ§
κ°λ³ νμΌ: μ΅λ 1GB (μ λ£ νλμμ)
Bot Token: μ΅λ 100MB νμΌ μ λ‘λ
User Token: μ΅λ 1GB νμΌ μ λ‘λ
API Rate Limits
Tier 1 λ©μλ: 1+ per minute
Tier 2 λ©μλ: 20+ per minute
Tier 3 λ©μλ: 50+ per minute
Tier 4 λ©μλ: 100+ per minute
π ν μ€νΈ λ°©λ²
1. μ°κ²° ν μ€νΈ
2. κΈ°λ³Έ κΈ°λ₯ ν μ€νΈ
3. κ³ κΈ κΈ°λ₯ ν μ€νΈ
π€ κΈ°μ¬ λ°©λ²
μ΄μ μ 보: GitHub Issues μ¬μ©
κΈ°λ₯ μ μ: Feature Request ν νλ¦Ώ μ¬μ©
μ½λ κΈ°μ¬: Pull Request νμ
λ¬Έμ κ°μ : README λ° docstring κ°μ
π λΌμ΄μ μ€
μ΄ νλ‘μ νΈλ MIT λΌμ΄μ μ€λ₯Ό λ°λ¦ λλ€.
πββοΈ λ¬Έμ λ° μ§μ
κ°λ°μ: JunHyuck Kwon
λ²μ : 8.5.2 (Complete Implementation)
μ΅μ’ μ λ°μ΄νΈ: 2025-06-04
κ³Όμ μμ±λ: β νμ 4κ° + β μ ν 4κ° + β 보λμ€ 4κ° + β μ νΈλ¦¬ν° 4κ° = μ΄ 16κ° κΈ°λ₯ μμ ꡬν
μ΄ νλ‘μ νΈλ₯Ό ν΅ν΄ μ€μ μ 무μμ νμ©ν μ μλ κ³ νμ§ Slack μ°λ λꡬλ₯Ό ꡬμΆν μ μμ΅λλ€! π