Skip to main content
Glama

Slack MCP Server

by oregpt
PLATFORM_INTEGRATION_REPORT.md13.7 kB
# Slack MCP Server - Platform Integration Report **Server Name:** @agenticledger/slack-mcp-server **Version:** 1.0.0 **Date:** 2025-10-31 **Platform:** AgenticLedger AI Agent Platform --- ## Executive Summary This report documents real-world testing of the Slack MCP Server with actual Slack API credentials and production workspace data. All tests were performed against a live Slack workspace to validate functionality, error handling, and performance. **Status:** ⚠️ **TESTING REQUIRED** - This template must be completed with actual test results before submission. --- ## Authentication Testing ### Token Format Validation **Test:** Verify that the server accepts Slack OAuth tokens in the correct format **Credentials Used:** ``` Token Type: User OAuth Token (xoxp-...) Workspace: [YOUR_WORKSPACE_NAME] User: [YOUR_TEST_USER] ``` **Test Steps:** 1. TODO: Obtain Slack OAuth token from https://api.slack.com/apps 2. TODO: Configure token with required scopes 3. TODO: Call conversations_history with token 4. TODO: Verify successful authentication **Expected Result:** ```json { "success": true, "data": { "messages": [...], "channel_id": "C..." } } ``` **Actual Result:** ```json TODO: Paste actual API response here ``` **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ## Tool Testing ### 1. conversations_history **Description:** Retrieves message history from a Slack channel #### Test Case 1.1: Basic Message Retrieval **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "limit": 10 } ``` **Raw Slack API Response:** ```json TODO: Paste actual response from Slack API ``` **Server Response:** ```json TODO: Paste server's standardized response ``` **Validation:** - [ ] Response follows { success, data, error } format - [ ] Messages array populated with real data - [ ] Channel ID correctly resolved - [ ] Pagination cursor provided if has_more=true - [ ] Performance < 2 seconds **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- #### Test Case 1.2: Channel Name Resolution **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "#general", "limit": 5 } ``` **Raw Slack API Response:** ```json TODO: Paste actual response ``` **Server Response:** ```json TODO: Paste response showing channel ID resolution ``` **Validation:** - [ ] #general resolved to channel ID (C...) - [ ] Messages retrieved successfully - [ ] channel_id in response shows resolved ID **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- #### Test Case 1.3: Time-based Limit (7d) **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "limit": "7d" } ``` **Raw Slack API Response:** ```json TODO: Paste response showing messages from last 7 days ``` **Server Response:** ```json TODO: Paste server response ``` **Validation:** - [ ] Time range correctly converted to 'oldest' timestamp - [ ] Only messages from last 7 days included - [ ] No messages older than 7 days present **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### 2. conversations_replies **Description:** Fetches thread messages #### Test Case 2.1: Thread Retrieval **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "thread_ts": "1234567890.123456" } ``` **Raw Slack API Response:** ```json TODO: Paste actual thread messages from Slack API ``` **Server Response:** ```json TODO: Paste server response ``` **Validation:** - [ ] Parent message included as first item - [ ] Thread replies ordered chronologically - [ ] thread_ts preserved in response **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### 3. conversations_search_messages **Description:** Searches messages across workspace #### Test Case 3.1: Basic Search **Request:** ```json { "accessToken": "xoxp-...", "search_query": "deployment", "limit": 10 } ``` **Raw Slack API Response:** ```json TODO: Paste actual search results from Slack API ``` **Server Response:** ```json TODO: Paste server response ``` **Validation:** - [ ] Search results contain query term - [ ] Message metadata included (channel, user, timestamp) - [ ] Total count accurate **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- #### Test Case 3.2: Filtered Search **Request:** ```json { "accessToken": "xoxp-...", "search_query": "meeting", "filter_in_channel": "#engineering", "filter_date_after": "2025-01-01", "limit": 20 } ``` **Raw Slack API Response:** ```json TODO: Paste filtered search results ``` **Server Response:** ```json TODO: Paste server response ``` **Validation:** - [ ] Results only from #engineering channel - [ ] Results only after 2025-01-01 - [ ] Query correctly formatted with filters **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### 4. channels_list **Description:** Lists workspace channels #### Test Case 4.1: Public Channels List **Request:** ```json { "accessToken": "xoxp-...", "channel_types": "public_channel", "limit": 50 } ``` **Raw Slack API Response:** ```json TODO: Paste actual channels list from Slack API ``` **Server Response:** ```json TODO: Paste server response with standardized format ``` **Validation:** - [ ] Channel IDs, names, topics present - [ ] Member counts accurate - [ ] Only public channels included **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- #### Test Case 4.2: Popularity Sorting **Request:** ```json { "accessToken": "xoxp-...", "channel_types": "public_channel,private_channel", "sort": "popularity", "limit": 20 } ``` **Raw Slack API Response:** ```json TODO: Paste unsorted API response ``` **Server Response:** ```json TODO: Paste server response showing sorted channels ``` **Validation:** - [ ] Channels sorted by member_count (descending) - [ ] First channel has highest member count - [ ] Sorting applied correctly **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### 5. conversations_add_message **Description:** Posts messages to channels #### Test Case 5.1: Safety Check (Disabled by Default) **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "payload": "Test message" } ``` **Expected Response:** ```json { "success": false, "error": "Message posting is disabled by default for safety..." } ``` **Actual Response:** ```json TODO: Paste actual response ``` **Validation:** - [ ] Tool correctly disabled without env variable - [ ] Error message clear and actionable **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- #### Test Case 5.2: Enabled Message Posting **Setup:** ```bash export SLACK_MCP_ADD_MESSAGE_TOOL="C1234567890" ``` **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "payload": "Test message from MCP server", "content_type": "text/markdown" } ``` **Raw Slack API Response:** ```json TODO: Paste actual post response from Slack API ``` **Server Response:** ```json TODO: Paste server response ``` **Validation:** - [ ] Message posted successfully - [ ] Message visible in Slack channel - [ ] Message timestamp returned - [ ] Markdown formatted correctly **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ## Error Handling Testing ### Invalid Token **Test:** Verify error handling for invalid/expired tokens **Request:** ```json { "accessToken": "xoxp-invalid-token", "channel_id": "C1234567890" } ``` **Expected Response:** ```json { "success": false, "error": "Invalid or expired authentication credentials" } ``` **Actual Response:** ```json TODO: Paste actual error response ``` **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### Invalid Channel **Test:** Verify error handling for non-existent channels **Request:** ```json { "accessToken": "xoxp-...", "channel_id": "CINVALIDXXX" } ``` **Expected Response:** ```json { "success": false, "error": "Channel not found with the provided ID" } ``` **Actual Response:** ```json TODO: Paste actual error response ``` **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### Missing Required Scope **Test:** Verify error handling for insufficient permissions **Setup:** Use token without required scope **Request:** ```json { "accessToken": "xoxp-limited-scope-token", "search_query": "test" } ``` **Expected Response:** ```json { "success": false, "error": "Token is missing required Slack permissions/scopes" } ``` **Actual Response:** ```json TODO: Paste actual error response ``` **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ### Schema Validation **Test:** Verify Zod schema validation **Request:** ```json { "accessToken": "xoxp-...", "channel_id": 12345 } ``` **Expected Response:** ```json { "success": false, "error": "Validation error: Expected string, received number" } ``` **Actual Response:** ```json TODO: Paste actual validation error ``` **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ## Performance Testing ### Response Time Measurements **Tool:** conversations_history **Channel Size:** TODO: [Small/Medium/Large] **Response Time:** TODO: X.XX seconds **Status:** ⬜ < 2s (Acceptable) | ⬜ > 2s (Needs Optimization) **Tool:** channels_list **Workspace Size:** TODO: XXX channels **Response Time:** TODO: X.XX seconds **Status:** ⬜ < 2s (Acceptable) | ⬜ > 2s (Needs Optimization) **Tool:** conversations_search_messages **Search Scope:** TODO: [Workspace-wide/Filtered] **Response Time:** TODO: X.XX seconds **Status:** ⬜ < 3s (Acceptable) | ⬜ > 3s (Needs Optimization) --- ## Pagination Testing ### conversations_history Pagination **Test:** Verify cursor-based pagination works correctly **Request 1:** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "limit": 10 } ``` **Response 1:** ```json TODO: Paste response with cursor ``` **Request 2 (using cursor):** ```json { "accessToken": "xoxp-...", "channel_id": "C1234567890", "limit": 10, "cursor": "dXNlcl9pZD1..." } ``` **Response 2:** ```json TODO: Paste second page of results ``` **Validation:** - [ ] No duplicate messages between pages - [ ] Cursor correctly continues from previous page - [ ] has_more flag accurate **Status:** ⬜ Not Tested | ✅ Pass | ❌ Fail --- ## Integration Test Script Results **Command Run:** ```bash npm run test:integration ``` **Test Output:** ``` TODO: Paste full test output here showing all tests passing ``` **Summary:** - Total Tests: TODO - Passed: TODO - Failed: TODO - Skipped: TODO --- ## Production Workspace Data Sample **Workspace:** TODO: [Workspace Name] **Total Channels:** TODO: XXX **Total Users:** TODO: XXX **Test Duration:** TODO: XX minutes **API Calls Made:** TODO: XXX **Sample Channel Used:** - **ID:** TODO: C1234567890 - **Name:** TODO: #test-channel - **Member Count:** TODO: XX - **Message Volume:** TODO: ~XXX messages --- ## Known Issues & Limitations ### Issues Found During Testing 1. **Issue:** TODO: Describe any issues found - **Severity:** [Critical/High/Medium/Low] - **Workaround:** TODO - **Fix Status:** [Fixed/In Progress/Planned] 2. **Issue:** TODO - **Severity:** - **Workaround:** - **Fix Status:** ### Confirmed Limitations 1. **Search Scope Requirement:** The `search:read` scope may not be available in all Slack pricing plans 2. **Rate Limiting:** Slack enforces Tier-based rate limiting - implement retry logic for production 3. **Cache:** No user/channel caching implemented yet (future enhancement) --- ## Platform Integration Recommendations ### Configuration ```json { "mcp_server": "@agenticledger/slack-mcp-server", "version": "1.0.0", "authentication": { "type": "oauth", "token_format": "xoxp-... or xoxb-..." }, "environment_variables": { "SLACK_MCP_ADD_MESSAGE_TOOL": "*" }, "required_scopes": [ "channels:history", "groups:history", "im:history", "mpim:history", "channels:read", "users:read" ], "optional_scopes": [ "search:read", "chat:write" ] } ``` ### Monitoring **Recommended Alerts:** - Authentication failures (invalid_auth errors) - Rate limiting (rate_limited errors) - Permission errors (missing_scope errors) - Performance degradation (>2s response times) --- ## Testing Checklist Before submitting this report, ensure: - [ ] All test cases executed with real Slack API - [ ] Actual API requests/responses documented - [ ] No mocked or fake data used - [ ] Integration test script runs successfully - [ ] All 5 tools tested comprehensively - [ ] Error scenarios verified - [ ] Performance measurements recorded - [ ] Pagination tested end-to-end - [ ] Production workspace data included - [ ] Screenshots or logs attached (if applicable) --- ## Conclusion **Overall Status:** ⬜ Ready for Integration | ⬜ Needs Work | ⬜ Not Tested **Recommendation:** TODO: [Approve/Request Changes/Reject] **Notes:** TODO: Add any final notes or observations --- **Tester:** [Your Name] **Date Completed:** [YYYY-MM-DD] **Testing Duration:** [X hours] **Contact:** [Your Email] --- ## Appendix ### Test Environment - **Node.js Version:** TODO: v20.x.x - **OS:** TODO: Windows/Mac/Linux - **MCP SDK Version:** TODO: 0.5.0 - **Slack API Version:** TODO ### Test Credentials Setup ```bash # How to obtain test token: 1. Go to https://api.slack.com/apps 2. Create new app or use existing 3. Navigate to OAuth & Permissions 4. Add required scopes 5. Install app to workspace 6. Copy OAuth token (xoxp-... or xoxb-...) # Set environment variable: export SLACK_TEST_TOKEN="xoxp-your-token-here" export SLACK_TEST_CHANNEL="C1234567890" ``` --- **Document Version:** 1.0.0 **Last Updated:** 2025-10-31 **Platform:** AgenticLedger AI Agent Platform

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oregpt/Agenticledger_MCP_Slack'

If you have feedback or need assistance with the MCP directory API, please join our Discord server