[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M76T6M19WK79VMEJS23GS1CF":3,"skill-same:01M76T6M19WK79VMEJS23GS1CF":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":15,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":13,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":39,"install":40,"resources":53},"01M76T6M19WK79VMEJS23GS1CF","slack",null,"Slack API integration with managed OAuth. Send messages, manage channels, search conversations, and interact with Slack workspaces. Use this skill when users want to post messages, list channels, get user info, or automate Slack workflows. For other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).","meghal86\u002Fstacksignal","meghal86","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F37388715?v=4","01M6CS2EW8SK89GH52R2ZEN8QQ","01M728J5CGY456EETEFG6HJBTM",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fslack\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fslack\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: slack\ndescription: |\n  Slack API integration with managed OAuth. Send messages, manage channels, search conversations, and interact with Slack workspaces. Use this skill when users want to post messages, list channels, get user info, or automate Slack workflows. For other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\ncompatibility: Requires network access and valid Maton API key\nmetadata:\n  author: maton\n  version: \"1.0\"\n  clawdbot:\n    emoji: 🧠\n    requires:\n      env:\n        - MATON_API_KEY\n---\n\n# Slack\n\nAccess the Slack API with managed OAuth authentication. Send messages, manage channels, list users, and automate Slack workflows.\n\n## Quick Start\n\n```bash\n# Post a message to a channel\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'channel': 'C0123456789', 'text': 'Hello from Maton!'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps:\u002F\u002Fgateway.maton.ai\u002Fslack\u002F{method}\n```\n\nThe gateway proxies requests to `slack.com` and automatically injects your OAuth token.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https:\u002F\u002Fmaton.ai)\n2. Go to [maton.ai\u002Fsettings](https:\u002F\u002Fmaton.ai\u002Fsettings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Slack OAuth connections at `https:\u002F\u002Fctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections?app=slack&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'slack'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\": \"21fd90f9-5935-43cd-b6c8-bde9d915ca80\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2025-12-08T07:20:53.488460Z\",\n    \"last_updated_time\": \"2026-01-31T20:03:32.593153Z\",\n    \"url\": \"https:\u002F\u002Fconnect.maton.ai\u002F?session_token=...\",\n    \"app\": \"slack\",\n    \"metadata\": {}\n  }\n}\n```\n\nOpen the returned `url` in a browser to complete OAuth authorization.\n\n### Delete Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Specifying Connection\n\nIf you have multiple Slack connections, specify which one to use with the `Maton-Connection` header:\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'channel': 'C0123456789', 'text': 'Hello!'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\n## API Reference\n\n### Post Message\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.postMessage\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"text\": \"Hello, world!\"\n}\n```\n\nWith blocks:\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.postMessage\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"blocks\": [\n    {\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"*Bold* and _italic_\"}}\n  ]\n}\n```\n\n### Post Thread Reply\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.postMessage\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"thread_ts\": \"1234567890.123456\",\n  \"text\": \"This is a reply in a thread\"\n}\n```\n\n### Update Message\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.update\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"ts\": \"1234567890.123456\",\n  \"text\": \"Updated message\"\n}\n```\n\n### Delete Message\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.delete\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"ts\": \"1234567890.123456\"\n}\n```\n\n### List Channels\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.list?types=public_channel,private_channel\n```\n\n### Get Channel Info\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.info?channel=C0123456789\n```\n\n### Get Channel Members\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.members?channel=C0123456789&limit=100\n```\n\n### List Messages in Channel\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.history?channel=C0123456789&limit=100\n```\n\n### Get Thread Replies\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.replies?channel=C0123456789&ts=1234567890.123456\n```\n\n### List Users\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fusers.list\n```\n\n### Get User Info\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fusers.info?user=U0123456789\n```\n\n### Search Messages\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fsearch.messages?query=keyword\n```\n\n### Open DM Conversation\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fconversations.open\nContent-Type: application\u002Fjson\n\n{\n  \"users\": \"U0123456789\"\n}\n```\n\n### Add Reaction\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Freactions.add\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"name\": \"thumbsup\",\n  \"timestamp\": \"1234567890.123456\"\n}\n```\n\n### Upload File\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Ffiles.upload\nContent-Type: multipart\u002Fform-data\n\nchannels=C0123456789\ncontent=file content here\nfilename=example.txt\n```\n\n### Auth Test\n\nGet current user and team info:\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fauth.test\n```\n\n## Code Examples\n\n### JavaScript\n\n```javascript\nconst response = await fetch('https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application\u002Fjson',\n    'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n  },\n  body: JSON.stringify({ channel: 'C0123456', text: 'Hello!' })\n});\n```\n\n### Python\n\n```python\nimport os\nimport requests\n\nresponse = requests.post(\n    'https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    json={'channel': 'C0123456', 'text': 'Hello!'}\n)\n```\n\n## Notes\n\n- Channel IDs start with `C` (public), `G` (private\u002Fgroup), or `D` (DM)\n- User IDs start with `U`, Team IDs start with `T`\n- Message timestamps (`ts`) are used as unique identifiers\n- Use `mrkdwn` type for Slack-flavored markdown formatting\n- Thread replies use `thread_ts` to reference the parent message\n- IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets (`fields[]`, `sort[]`, `records[]`) to disable glob parsing\n- IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments. You may get \"Invalid API key\" errors when piping.\n\n## Error Handling\n\n| Status | Meaning |\n|--------|---------|\n| 400 | Missing Slack connection |\n| 401 | Invalid or missing Maton API key |\n| 429 | Rate limited (10 req\u002Fsec per account) |\n| 4xx\u002F5xx | Passthrough error from Slack API |\n\n### Troubleshooting: API Key Issues\n\n1. Check that the `MATON_API_KEY` environment variable is set:\n\n```bash\necho $MATON_API_KEY\n```\n\n2. Verify the API key is valid by listing connections:\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Troubleshooting: Invalid App Name\n\n1. Ensure your URL path starts with `slack`. For example:\n\n- Correct: `https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage`\n- Incorrect: `https:\u002F\u002Fgateway.maton.ai\u002Fapi\u002Fchat.postMessage`\n\n## Resources\n\n- [Slack API Overview](https:\u002F\u002Fapi.slack.com\u002Fapis)\n- [Post Message](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fchat.postMessage)\n- [Update Message](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fchat.update)\n- [Delete Message](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fchat.delete)\n- [List Channels](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fconversations.list)\n- [Channel History](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fconversations.history)\n- [Thread Replies](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fconversations.replies)\n- [List Users](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fusers.list)\n- [Get User Info](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fusers.info)\n- [Search Messages](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fsearch.messages)\n- [Block Kit Reference](https:\u002F\u002Fapi.slack.com\u002Freference\u002Fblock-kit)\n- [LLM Reference](https:\u002F\u002Fdocs.slack.dev\u002Fllms.txt)\n- [Maton Community](https:\u002F\u002Fdiscord.com\u002Finvite\u002FdBfFAcefs2)\n- [Maton Support](mailto:support@maton.ai)\n","# Slack\n\nAccess the Slack API with managed OAuth authentication. Send messages, manage channels, list users, and automate Slack workflows.\n\n## Quick Start\n\n```bash\n# Post a message to a channel\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'channel': 'C0123456789', 'text': 'Hello from Maton!'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps:\u002F\u002Fgateway.maton.ai\u002Fslack\u002F{method}\n```\n\nThe gateway proxies requests to `slack.com` and automatically injects your OAuth token.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https:\u002F\u002Fmaton.ai)\n2. Go to [maton.ai\u002Fsettings](https:\u002F\u002Fmaton.ai\u002Fsettings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Slack OAuth connections at `https:\u002F\u002Fctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections?app=slack&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'slack'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\": \"21fd90f9-5935-43cd-b6c8-bde9d915ca80\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2025-12-08T07:20:53.488460Z\",\n    \"last_updated_time\": \"2026-01-31T20:03:32.593153Z\",\n    \"url\": \"https:\u002F\u002Fconnect.maton.ai\u002F?session_token=...\",\n    \"app\": \"slack\",\n    \"metadata\": {}\n  }\n}\n```\n\nOpen the returned `url` in a browser to complete OAuth authorization.\n\n### Delete Connection\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections\u002F{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Specifying Connection\n\nIf you have multiple Slack connections, specify which one to use with the `Maton-Connection` header:\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'channel': 'C0123456789', 'text': 'Hello!'}).encode()\nreq = urllib.request.Request('https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')\nreq.add_header('Content-Type', 'application\u002Fjson')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\n## API Reference\n\n### Post Message\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.postMessage\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"text\": \"Hello, world!\"\n}\n```\n\nWith blocks:\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.postMessage\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"blocks\": [\n    {\"type\": \"section\", \"text\": {\"type\": \"mrkdwn\", \"text\": \"*Bold* and _italic_\"}}\n  ]\n}\n```\n\n### Post Thread Reply\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.postMessage\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"thread_ts\": \"1234567890.123456\",\n  \"text\": \"This is a reply in a thread\"\n}\n```\n\n### Update Message\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.update\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"ts\": \"1234567890.123456\",\n  \"text\": \"Updated message\"\n}\n```\n\n### Delete Message\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fchat.delete\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"ts\": \"1234567890.123456\"\n}\n```\n\n### List Channels\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.list?types=public_channel,private_channel\n```\n\n### Get Channel Info\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.info?channel=C0123456789\n```\n\n### Get Channel Members\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.members?channel=C0123456789&limit=100\n```\n\n### List Messages in Channel\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.history?channel=C0123456789&limit=100\n```\n\n### Get Thread Replies\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fconversations.replies?channel=C0123456789&ts=1234567890.123456\n```\n\n### List Users\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fusers.list\n```\n\n### Get User Info\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fusers.info?user=U0123456789\n```\n\n### Search Messages\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fsearch.messages?query=keyword\n```\n\n### Open DM Conversation\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Fconversations.open\nContent-Type: application\u002Fjson\n\n{\n  \"users\": \"U0123456789\"\n}\n```\n\n### Add Reaction\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Freactions.add\nContent-Type: application\u002Fjson\n\n{\n  \"channel\": \"C0123456789\",\n  \"name\": \"thumbsup\",\n  \"timestamp\": \"1234567890.123456\"\n}\n```\n\n### Upload File\n\n```bash\nPOST \u002Fslack\u002Fapi\u002Ffiles.upload\nContent-Type: multipart\u002Fform-data\n\nchannels=C0123456789\ncontent=file content here\nfilename=example.txt\n```\n\n### Auth Test\n\nGet current user and team info:\n\n```bash\nGET \u002Fslack\u002Fapi\u002Fauth.test\n```\n\n## Code Examples\n\n### JavaScript\n\n```javascript\nconst response = await fetch('https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application\u002Fjson',\n    'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n  },\n  body: JSON.stringify({ channel: 'C0123456', text: 'Hello!' })\n});\n```\n\n### Python\n\n```python\nimport os\nimport requests\n\nresponse = requests.post(\n    'https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    json={'channel': 'C0123456', 'text': 'Hello!'}\n)\n```\n\n## Notes\n\n- Channel IDs start with `C` (public), `G` (private\u002Fgroup), or `D` (DM)\n- User IDs start with `U`, Team IDs start with `T`\n- Message timestamps (`ts`) are used as unique identifiers\n- Use `mrkdwn` type for Slack-flavored markdown formatting\n- Thread replies use `thread_ts` to reference the parent message\n- IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets (`fields[]`, `sort[]`, `records[]`) to disable glob parsing\n- IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments. You may get \"Invalid API key\" errors when piping.\n\n## Error Handling\n\n| Status | Meaning |\n|--------|---------|\n| 400 | Missing Slack connection |\n| 401 | Invalid or missing Maton API key |\n| 429 | Rate limited (10 req\u002Fsec per account) |\n| 4xx\u002F5xx | Passthrough error from Slack API |\n\n### Troubleshooting: API Key Issues\n\n1. Check that the `MATON_API_KEY` environment variable is set:\n\n```bash\necho $MATON_API_KEY\n```\n\n2. Verify the API key is valid by listing connections:\n\n```bash\npython \u003C\u003C'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https:\u002F\u002Fctrl.maton.ai\u002Fconnections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Troubleshooting: Invalid App Name\n\n1. Ensure your URL path starts with `slack`. For example:\n\n- Correct: `https:\u002F\u002Fgateway.maton.ai\u002Fslack\u002Fapi\u002Fchat.postMessage`\n- Incorrect: `https:\u002F\u002Fgateway.maton.ai\u002Fapi\u002Fchat.postMessage`\n\n## Resources\n\n- [Slack API Overview](https:\u002F\u002Fapi.slack.com\u002Fapis)\n- [Post Message](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fchat.postMessage)\n- [Update Message](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fchat.update)\n- [Delete Message](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fchat.delete)\n- [List Channels](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fconversations.list)\n- [Channel History](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fconversations.history)\n- [Thread Replies](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fconversations.replies)\n- [List Users](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fusers.list)\n- [Get User Info](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fusers.info)\n- [Search Messages](https:\u002F\u002Fapi.slack.com\u002Fmethods\u002Fsearch.messages)\n- [Block Kit Reference](https:\u002F\u002Fapi.slack.com\u002Freference\u002Fblock-kit)\n- [LLM Reference](https:\u002F\u002Fdocs.slack.dev\u002Fllms.txt)\n- [Maton Community](https:\u002F\u002Fdiscord.com\u002Finvite\u002FdBfFAcefs2)\n- [Maton Support](mailto:support@maton.ai)\n",{"name":5,"metadata":24,"description":32,"compatibility":33},{"author":25,"version":26,"clawdbot":27},"maton","1.0",{"emoji":28,"requires":29},"🧠",{"env":30},[31],"MATON_API_KEY","Slack API integration with managed OAuth. Send messages, manage channels, search conversations, and interact with Slack workspaces. Use this skill when users want to post messages, list channels, get user info, or automate Slack workflows. For other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\n","Requires network access and valid Maton API key","main","54afe4b75ed2eb8f0feabb2f5b57dfa4bcbb3c44",".agents\u002Fskills\u002Fslack","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal","https:\u002F\u002Fgithub.com\u002Fmeghal86","2026-05-17 14:11:28",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add meghal86\u002Fstacksignal --skill slack",{"tool":46,"command":47},"bunx","bunx skills add meghal86\u002Fstacksignal --skill slack",{"tool":49,"command":50},"pnpm","pnpm dlx skills add meghal86\u002Fstacksignal --skill slack","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fslack\u002FSKILL.md",true,[54,60],{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"_meta.json","REFERENCE","参考文档",974,"https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fslack\u002F_meta.json",{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":15},"LICENSE.txt","LICENSE","许可证",1072,[66,75,83,91,99,106],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":70,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":74},"01M78XH0FRP65NYEDHF2BT7NB1","zvukogram","Text-to-Speech via Zvukogram API with SSML support. Use when you need to generate speech from text, create podcasts, voice notifications, or work with audio. Supports speed control, stress marks, English word transcription, and audio fragment merging.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzvukogram\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzvukogram\u002FSKILL.md",[],[],"2026-11-15 14:19:17",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":79,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":74},"01M78XEND5ASXYB6MN8AQQGJAF","zohomail","Zoho Mail API integration with managed OAuth. Send, receive, and manage emails, folders, and labels.\nUse this skill when users want to send emails, read messages, manage folders, or work with email labels in Zoho Mail.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzohomail\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzohomail\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":87,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":74},"01M78XEBBV3C6DRZFAJXP6RDKS","zoho-recruit","Zoho Recruit API integration with managed OAuth. Manage candidates, job openings, interviews, and recruitment workflows.\nUse this skill when users want to read, create, update, or search recruitment data like candidates, job openings, interviews, and applications in Zoho Recruit.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-recruit\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-recruit\u002FSKILL.md",[],[],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":95,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":74},"01M78XE5CQG75DZWYSKGXFR99T","zoho-people","Zoho People API integration with managed OAuth. Manage employees, departments, designations, attendance, and leave.\nUse this skill when users want to read, create, update, or query HR data like employees, departments, designations, and forms in Zoho People.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-people\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-people\u002FSKILL.md",[],[],{"skillNo":100,"name":101,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":102,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":74},"01M78XDZKMZAJYFJJFT7MR5ZN2","zoho-mail","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-mail\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-mail\u002FSKILL.md",[],[],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":110,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":74},"01M78XDST8JK0WVDA1F3VPNWXD","zoho-inventory","Zoho Inventory API integration with managed OAuth. Manage items, sales orders, invoices, purchase orders, bills, contacts, and shipments.\nUse this skill when users want to read, create, update, or delete inventory items, sales orders, invoices, purchase orders, bills, or other inventory records in Zoho Inventory.\nFor other third party apps, use the api-gateway skill (https:\u002F\u002Fclawhub.ai\u002Fbyungkyu\u002Fapi-gateway).\nRequires network access and valid Maton API key.","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-inventory\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmeghal86\u002Fstacksignal\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzoho-inventory\u002FSKILL.md",[],[]]