Skip to main content

MCP server to operate Slack Lists

Project description

Slack Lists MCP Server

An MCP (Model Context Protocol) server for managing Slack Lists. This server provides tools to create, read, update, and delete items in Slack Lists, with advanced filtering capabilities.

Features

  • ✨ Full CRUD operations for Slack List items
  • 🔍 Advanced filtering with multiple operators
  • 📑 Pagination support for large lists
  • 🏗️ Dynamic column structure discovery
  • 🎯 Type-safe operations with validation
  • 🚀 Async/await support for better performance

Installation

Configure in Claude Desktop

Add to your Claude Desktop configuration file:

{
  "mcpServers": {
    "slack-lists": {
      "command": "uvx",
      "args": ["slack-lists-mcp"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token"
      }
    }
  }
}

Configuration

Environment Variables

Variable Description Required Default
SLACK_BOT_TOKEN Slack Bot User OAuth Token -
DEFAULT_LIST_ID Default list ID to use when not specified in tool calls -
LOG_LEVEL Logging level (DEBUG, INFO, WARNING, ERROR) INFO
SLACK_API_TIMEOUT Timeout for Slack API calls (seconds) 30
SLACK_RETRY_COUNT Number of retries for failed API calls 3
DEBUG_MODE Enable debug mode false

Setting up Slack Bot

  1. Create a Slack App at api.slack.com
  2. Add the following OAuth scopes to your Bot Token:
    • lists:read - Read list items
    • lists:write - Create and update list items
  3. Install the app to your workspace
  4. Copy the Bot User OAuth Token (starts with xoxb-)

Using Default List ID

You can set a default list ID using the DEFAULT_LIST_ID environment variable. This allows you to omit the list_id parameter from tool calls when working with a specific list.

Example configuration:

{
  "mcpServers": {
    "slack-lists": {
      "command": "uvx",
      "args": ["slack-lists-mcp"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
        "DEFAULT_LIST_ID": "F1234567890"
      }
    }
  }
}

With this configuration, you can call tools without specifying list_id:

  • add_list_item with just initial_fields
  • list_items with just limit and filters
  • get_list_structure with no parameters

Available Tools

1. get_list_structure

Get the column structure of a Slack List.

Parameters:

  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)

Returns: Column definitions including IDs, names, types, and options

2. add_list_item

Add a new item to a Slack List.

Parameters:

  • initial_fields (required): Array of field objects with column_id and value
  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)

Example (Simplified format):

{
  "list_id": "F1234567890",
  "initial_fields": [
    {
      "column_id": "Col123",
      "text": "Task Name"  // Simple text format
    },
    {
      "column_id": "Col456",
      "select": "OptABC123"  // Single select value
    },
    {
      "column_id": "Col789",
      "user": "U1234567"  // Single user ID
    },
    {
      "column_id": "Col012",
      "checkbox": false
    }
  ]
}

Example (Full rich_text format - also supported):

{
  "list_id": "F1234567890",
  "initial_fields": [
    {
      "column_id": "Col123",
      "rich_text": [{
        "type": "rich_text",
        "elements": [{
          "type": "rich_text_section",
          "elements": [{"type": "text", "text": "Task Name"}]
        }]
      }]
    },
    {
      "column_id": "Col456",
      "select": ["OptABC123"]  // Array format
    }
  ]
}

3. update_list_item

Update existing items in a Slack List.

Parameters:

  • cells (required): Array of cell objects with row_id, column_id, and value
  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)

Field Formats: (Same as add_list_item)

  • Text fields: Can use simple text key (auto-converted to rich_text)
  • Select fields: Can use single value (auto-wrapped in array)
  • User fields: Can use single user ID (auto-wrapped in array)
  • Checkbox fields: Boolean value

Example (Simplified format):

{
  "list_id": "F1234567890",
  "cells": [
    {
      "row_id": "Rec123",
      "column_id": "Col123",
      "text": "Updated Task Name"  // Simple text format
    },
    {
      "row_id": "Rec123",
      "column_id": "Col456",
      "checkbox": true
    },
    {
      "row_id": "Rec123",
      "column_id": "Col789",
      "select": "OptXYZ456"  // Single select value
    }
  ]
}

4. delete_list_item

Delete an item from a Slack List.

Parameters:

  • item_id (required): The ID of the item to delete
  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)

5. get_list_item

Get a specific item from a Slack List.

Parameters:

  • item_id (required): The ID of the item
  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)
  • include_is_subscribed (optional): Include subscription status

6. list_items

List all items in a Slack List with optional filtering.

Parameters:

  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)
  • limit (optional): Maximum number of items (default: 100)
  • cursor (optional): Pagination cursor
  • archived (optional): Filter for archived items
  • filters (optional): Column-based filters

Filter Operators:

  • equals: Exact match
  • not_equals: Not equal to value
  • contains: Contains substring (case-insensitive)
  • not_contains: Does not contain substring
  • in: Value is in the provided list
  • not_in: Value is not in the provided list

Example with filters:

{
  "list_id": "F1234567890",
  "filters": {
    "name": {"contains": "Task"},
    "todo_completed": {"equals": false},
    "todo_assignee": {"in": ["U123", "U456"]}
  }
}

7. get_list_info

Get metadata about a Slack List.

Parameters:

  • list_id (optional): The ID of the list (uses DEFAULT_LIST_ID env var if not provided)

Development

Setup

# Clone the repository
git clone https://github.com/ppspps824/slack-lists-mcp.git
cd slack-lists-mcp

# Install dependencies
uv sync

Running in Development Mode

# Run with FastMCP dev mode (with auto-reload)
uv run fastmcp dev src/slack_lists_mcp/server.py:mcp

# Or run directly
uv run slack-lists-mcp

Testing

# Run all tests
uv run pytest

# Run with coverage
uv run pytest --cov=slack_lists_mcp

# Run specific test file
uv run pytest tests/test_server.py -v

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (uv run pytest)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

License

MIT License - see LICENSE file for details

Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slack_lists_mcp-0.1.6.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slack_lists_mcp-0.1.6-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file slack_lists_mcp-0.1.6.tar.gz.

File metadata

  • Download URL: slack_lists_mcp-0.1.6.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for slack_lists_mcp-0.1.6.tar.gz
Algorithm Hash digest
SHA256 e09e2207d8fcf3c81b3d0674fb9aaad401e51be356fa80eea097a70f9179e007
MD5 546d836a990202f280dcbbc4b3196b8f
BLAKE2b-256 f9ff75da8bc0f702058742d6dae39e83c1e570b198baec182ca1056f3cd85b31

See more details on using hashes here.

File details

Details for the file slack_lists_mcp-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for slack_lists_mcp-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 288273d70d8233932b55025421120f5b739678361093eda9349a7e757796061f
MD5 7c8b7ed8dc652178866d488dc83915f7
BLAKE2b-256 7ae8160fcec1bdb1c1b068ab07c7cfb6c395a723157ea673a49fb0c7197bb3cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page