slack-file-upload-mcp
Allows uploading local files to Slack channels, DMs, or thread replies with an optional message, title, and filename override.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@slack-file-upload-mcpupload ~/Downloads/report.csv to #general with message 'Q3 numbers attached'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
slack-file-upload-mcp
A one-tool MCP server that does the thing the normal Slack MCP can't: post a local file to Slack, with a message.
The Slack MCP sends text (slack_send_message) and reads files, but has no way to put a file from your disk into a channel. Run this alongside it and an agent can share a screenshot, CSV, log, or PDF directly.
The tool
slack_upload_file
Arg | Required | Meaning |
| ✅ | Absolute local path ( |
| ✅ | Channel id ( |
| Text posted with the file (Slack's | |
| File title in Slack. Defaults to the filename. | |
| Override the stored name. Defaults to the local basename. | |
| Post as a reply in this thread instead of the channel root. |
Returns one line: Uploaded report.csv (4821 bytes) to C09ABCD1234 · file_id=F0… · ts=1756… · https://…. The ts is the share timestamp, so the Slack MCP can thread replies under the uploaded file.
Uploads go through Slack's current files.getUploadURLExternal → upload → files.completeUploadExternal flow (via slack_sdk's files_upload_v2); the retired files.upload endpoint is not used.
Related MCP server: Notion Uploader MCP
Setup
Token. A user token (
xoxp-…) or bot token (xoxb-…) with:files:write— required.channels:read+groups:read— only needed to resolve#name→ id. Passing aC…id works without them.im:write— only needed to DM aU…user id.
A bot token must be invited to the channel (
/invite @yourapp); a user token posts as you.manifest.yamlin this repo creates an app with exactly those scopes: api.slack.com/apps → Create New App → From a manifest → pick the workspace → paste the file → Create → Install to Workspace (admin approval may be required) → OAuth & Permissions → copy the User OAuth Token (xoxp-…).It's deliberately a separate app from any existing one: adding a scope to an installed app forces a reinstall, which rotates that app's token and breaks whatever else was using it.
Register the server (token lives in the MCP env, not in the repo):
claude mcp add slack-file-upload --scope user \ --env SLACK_MCP_TOKEN=xoxp-your-token \ -- uv run --directory /path/to/slack-file-upload-mcp slack-file-upload-mcp serveVerify:
SLACK_MCP_TOKEN=… uv run slack-file-upload-mcp whoami
Configuration
Env var | Default | Purpose |
| — | The token. Falls back to |
| unset (any path) | Comma-separated directory prefixes the server may read from. Set it to confine a prompt-injected agent to e.g. |
|
| Reject files larger than this before contacting Slack. Slack's own ceiling is 1 GB. |
Guardrails
Path must be absolute and resolve to an existing regular file; directories and symlink targets outside
SLACK_FILE_UPLOAD_ALLOWED_DIRSare rejected (the path isresolve()d before the allowlist check).Empty files are rejected up front — Slack's upload-URL endpoint requires a non-zero length and fails opaquely on 0 bytes.
Slack API errors are translated into actionable text (
not_in_channel→ "invite the app to the channel",missing_scope→ which scopes).
CLI
uv run slack-file-upload-mcp serve # stdio MCP (also the bare default)
uv run slack-file-upload-mcp whoami # verify the token
uv run slack-file-upload-mcp upload ~/x.png '#general' -m 'here you go'upload runs the exact code path the MCP tool runs — useful for smoke tests without a client.
Tests
uv run pytest # offline; the Slack client is stubbedThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables uploading files to Notion with complete workflow support including file upload, automatic page attachment, and download URL generation. Supports files up to 20MB with custom naming and metadata handling.21
- FlicenseBqualityDmaintenanceEnables uploading images and files to Notion pages from Cursor chat, supporting multiple attachment types like image blocks, file blocks, cover images, and icons.2
- FlicenseNot gradedqualityDmaintenanceEnables file operations (PDF, Office, images, archives, media) through natural language, with tools for reading, writing, converting, and analyzing files locally.1
- AlicenseNot gradedqualityCmaintenanceEnables local file exchange between users and CLI agents via a web UI and MCP server, allowing agents to read/uploads and deliver artifacts without copy-paste.MIT
Related MCP Connectors
File uploads for AI agents. Upload, list, and manage files. No signup required.
Upload any file, get a tracked shareable link. DocSend for AI agents.
Securely search and manage workspace context files for AI agents and teams.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/shivankj11/slack-file-upload-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server