[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M739MPTASHNKJDAPXBCC15GE":3,"skill-same:01M739MPTASHNKJDAPXBCC15GE":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M739MPTASHNKJDAPXBCC15GE","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).","Daisuke134\u002Fanicca-products","Daisuke134","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F140220114?v=4","01M7390DDRRWCFY23XFNZJX1WC","Daisuke Narita","01M7390DEWE1ADK4RG1WESQJP6",2,"MIT","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fslack-api\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fslack-api\u002FSKILL.md",[],[],"2026-11-11 15:11:14",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":25,"description":33,"compatibility":34},{"author":26,"version":27,"clawdbot":28},"maton","1.0",{"emoji":29,"requires":30},"🧠",{"env":31},[32],"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","ac785af4882256b3beb3b0e57f84df26431e0896",".claude\u002Fskills\u002Fskills\u002Fslack-api",0,"https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products","https:\u002F\u002Fgithub.com\u002FDaisuke134","2026-11-15 04:43:24",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add Daisuke134\u002Fanicca-products --skill slack",{"tool":48,"command":49},"bunx","bunx skills add Daisuke134\u002Fanicca-products --skill slack",{"tool":51,"command":52},"pnpm","pnpm dlx skills add Daisuke134\u002Fanicca-products --skill slack","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fslack-api\u002FSKILL.md",true,[56,62,66],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"_meta.json","REFERENCE","参考文档",128,"https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fslack-api\u002F_meta.json",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},".clawhub\u002Forigin.json",141,"https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fslack-api\u002F.clawhub\u002Forigin.json",{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":16},"LICENSE.txt","LICENSE","许可证",1072,[72,81,89,97,105,113],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":77,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":20},"01M739TXBRTJVV8HCBWD6N1EY1","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fwebapp-testing\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":85,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":20},"01M739TJS4EBR30NAGP5CRPVYG","theme-factory","Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors\u002Ffonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Ftheme-factory\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Ftheme-factory\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":93,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":20},"01M739TDM2V53QW8394XEZ5J03","slack-gif-creator","Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives. This skill applies when users request animated GIFs or emoji animations for Slack from descriptions like \"make me a GIF for Slack of X doing Y\".","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fslack-gif-creator\u002FSKILL.md",[],[],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":101,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":20},"01M739T6T9TBNP04VNH6X56ADG","skill-creator","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fskill-creator\u002FSKILL.md",[],[],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":109,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":20},"01M739SWSR0B9SP3PB1M57EAA6","mcp-builder","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fmcp-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Fmcp-builder\u002FSKILL.md",[],[],{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":117,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":20},"01M739SHMJR8F5N5EGG8MEA3TM","internal-comms","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Finternal-comms\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDaisuke134\u002Fanicca-products\u002Fblob\u002Fmain\u002F.cursor\u002Fawesome-claude-skills\u002Finternal-comms\u002FSKILL.md",[],[]]