matimo-slack
Slack tools for Matimo - send messages, manage channels, upload files, and more.
Installation
pip install matimo matimo-slack
Available Tools (16 Total)
| Category | Tool | Description |
|---|---|---|
| Messaging | slack_send_channel_message |
Post message with markdown/blocks |
slack-send-message |
Post plain message to channel | |
slack_reply_to_message |
Reply in thread | |
slack_send_dm |
Send direct message | |
| Channels | slack-list-channels |
List all channels/DMs |
slack_create_channel |
Create public/private channel | |
slack_join_channel |
Add bot to channel | |
slack_set_channel_topic |
Update channel description/topic | |
| Files | slack_upload_file |
Request an upload URL for a file (modern API, step 1 of 2 - see note below) |
| Reading | slack_get_channel_history |
Read messages from channel |
slack_get_thread_replies |
Get thread replies | |
slack_search_messages |
Search message history | |
| Reactions | slack_add_reaction |
Add emoji reaction to message |
slack_get_reactions |
Get reactions on a message | |
| Users | slack_get_user_info |
Get user profile details |
slack-get-user |
Alias of slack_get_user_info |
⚠️
slack_upload_fileonly performs step 1 of Slack's modern upload flow (files.getUploadURLExternal) - it returns anupload_urlyou mustPUTthe file binary to yourself, then call Slack'sfiles.completeUploadExternaldirectly. Matimo does not ship tools for those remaining two steps.
Quick Start
import asyncio
import os
from matimo import Matimo
from matimo_slack import get_tools_path
async def main():
matimo = await Matimo.init(get_tools_path())
# Send a message
await matimo.execute('slack_send_channel_message', {
'channel': '#general',
'text': 'Hello from Matimo!',
})
# List channels
result = await matimo.execute('slack-list-channels', {})
print(result)
asyncio.run(main())
Authentication
All tools authenticate using a Slack Bot Token:
export SLACK_BOT_TOKEN="xoxb-your-bot-token"
Setting Up a Slack App
- Go to api.slack.com/apps → Create New App → From scratch
- Navigate to OAuth & Permissions and add scopes (see table below)
- Click Install to Workspace and copy the Bot User OAuth Token
- Set
SLACK_BOT_TOKENin your environment
Required OAuth Scopes
| Tool | Slack API Method | Required Scopes |
|---|---|---|
slack_send_channel_message / slack-send-message |
chat.postMessage |
chat:write |
slack_reply_to_message |
chat.postMessage |
chat:write |
slack_send_dm |
conversations.open + chat.postMessage |
im:write, mpim:write |
slack-list-channels |
conversations.list |
channels:read, groups:read, im:read, mpim:read |
slack_create_channel |
conversations.create |
channels:manage, channels:write, groups:write |
slack_join_channel |
conversations.join |
channels:manage |
slack_set_channel_topic |
conversations.setTopic |
conversations:manage |
slack_upload_file |
files.getUploadURLExternal |
files:write |
slack_get_channel_history |
conversations.history |
conversations:history |
slack_get_thread_replies |
conversations.replies |
conversations:history |
slack_search_messages |
search.messages |
search:read |
slack_add_reaction |
reactions.add |
reactions:write |
slack_get_reactions |
reactions.get |
reactions:read |
slack_get_user_info / slack-get-user |
users.info |
users:read |
LangChain Agent Example
from matimo import Matimo
from matimo_slack import get_tools_path
from matimo.integrations.langchain import convert_tools_to_langchain
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
matimo = await Matimo.init(get_tools_path())
lc_tools = convert_tools_to_langchain(
matimo.list_tools(),
matimo,
credentials={'SLACK_BOT_TOKEN': os.environ['SLACK_BOT_TOKEN']},
)
llm = ChatOpenAI(model='gpt-4o-mini')
prompt = ChatPromptTemplate.from_messages([
('system', 'You are a Slack assistant.'),
('human', '{input}'),
('placeholder', '{agent_scratchpad}'),
])
agent = create_tool_calling_agent(llm, lc_tools, prompt)
executor = AgentExecutor(agent=agent, tools=lc_tools)
result = await executor.ainvoke({'input': 'List all public channels'})
Usage Notes
- The bot must be a member of a channel before it can post messages or read history
- Use
slack_upload_file(not the deprecatedfiles.upload) for file uploads slack_search_messagesrequires thesearch:readscope which needs special approval from Slack- Rate limits apply - add delays between rapid API calls in bulk operations
Documentation
Links
- PyPI: https://pypi.org/project/matimo-slack/
- GitHub: https://github.com/tallclub/matimo
- Slack API Docs: https://api.slack.com/
Release files for matimo-slack 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| matimo_slack-0.1.3.tar.gz | 8.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| matimo_slack-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.4 kB
Release files / matimo_slack-0.1.3.tar.gz
| Download URL | matimo_slack-0.1.3.tar.gz |
|---|---|
| Size | 8.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6f57a31cdf54a34817312c61816810fcb7f4d3bed2fbbc240b160fe11318050a
|
|
BLAKE2b-256 checksum How to use checksums |
08f09ffea54f36a440bc114a19697582885c6f33ba85d9796abfb2f386886a3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / matimo_slack-0.1.3-py3-none-any.whl
| Download URL | matimo_slack-0.1.3-py3-none-any.whl |
|---|---|
| Size | 17.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aee01a2742b134d71a0d4502b3bfbef5c41800e94823214e8bd3465235611a04
|
|
BLAKE2b-256 checksum How to use checksums |
10c8d134252c82476743f9fd894384f0463c9b077a96824c660ccd7e79124998
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|