The slim.to MCP server
slim.to speaks the Model Context Protocol in two forms:
- Hosted remote server —
https://slim.to/mcp(Streamable HTTP + OAuth). Zero install: paste the URL into claude.ai or ChatGPT connectors, sign in, done. Auth is OAuth (the client handles it), or a Bearerslim_…personal API key for clients that let you set one. Its upload tools are content-based —create_link_from_contentandreplace_link_content(text or base64) — since a hosted client can't read your disk; replace updates an existing link in place so the URL and analytics survive. Manage authorized apps in Dashboard → Settings → Connected apps. - Local stdio server —
slimto-mcp(this package). Runs on your machine, so assistants like Claude Desktop/Code can upload any local file by path.
The rest of this page covers the local server; the per-platform how-tos cover connecting the hosted one. Once connected either way, you can say things like:
- "Turn this report into a slim.to link" — right after the assistant wrote it
- "Shorten https://example.com/signup with the slug
launch" - "Did anyone open the proposal I sent yesterday?"
Tools
| Tool | Arguments | Returns |
|---|---|---|
create_link_from_file |
file_path (required), title, slug, password, domain |
The tracked short link + file info |
create_short_link |
target_url (required), title, slug, password, expires_at, domain |
The tracked short link |
replace_link_file |
link (id, slug, or short URL), file_path |
Swaps the file behind an existing link — same URL, analytics intact |
list_links |
query, page |
Your links, newest first (20/page) |
get_link_analytics |
link — an id, slug, or full short URL |
Views, unique viewers, time spent, device/country/referrer breakdowns, recent sessions |
Files over 30 MB are handled automatically via the two-step direct-to-storage upload.
Hosted-server tools for large content
The hosted server (https://slim.to/mcp) adds tools that exist because a
remote client has to move content through the model itself:
| Tool | Purpose |
|---|---|
source_url (arg on create/replace) |
slim.to downloads the content itself from a public https URL — fastest path, and impossible to truncate |
sha256 / expected_bytes (args) |
slim.to verifies the received content and publishes nothing on mismatch, so a truncated upload fails loudly instead of going live corrupted |
start_content_upload → append_content_chunk → finish_content_upload |
Send oversized content in parts; reassembled server-side in order. Missing parts block publication; a bad part can be re-sent |
delete_link |
Permanently remove a link (requires confirm: true) |
Publishing something big? In order of preference:
source_urlif the content is already at a publicly readable URL — slim.to fetches it anonymously, so a private or login-gated link (including an unshared Claude artifact) will not work.- Otherwise chunk it. Note this makes a large upload reliable, not fast: content that exists only in the assistant's context still has to be written out token by token, which is the real cost for big files.
- Pass
sha256/expected_bytesonly if you computed them programmatically — a guessed digest can never match and will block publication.
Setup
You need:
- A personal API key — create one in Dashboard → Settings → API keys.
- Python ≥ 3.10 with
uv(recommended) or pip.
The server lives in the mcp/ directory of the slim.to repo (PyPI publication
is planned; until then install from the repo path):
# with uv — no install step, runs in an ephemeral env
uvx --from /path/to/slimto/mcp slimto-mcp
# or with pip
pip install /path/to/slimto/mcp # then the `slimto-mcp` command is on PATH
It speaks MCP over stdio — your MCP client launches it as a subprocess.
Configuration
| Env var | Required | Default |
|---|---|---|
SLIMTO_API_KEY |
yes | — |
SLIMTO_API_BASE |
no | https://slim.to |
The standard client config block (adapt per client — see the how-tos):
{
"mcpServers": {
"slimto": {
"command": "uvx",
"args": ["--from", "/path/to/slimto/mcp", "slimto-mcp"],
"env": {
"SLIMTO_API_KEY": "slim_your_key_here"
}
}
}
}
Client setup guides
- Claude — Claude Desktop, Claude Code
- OpenAI — Agents SDK (ChatGPT needs a remote server; see the guide)
- Gemini — Gemini CLI, Google GenAI SDK
Troubleshooting
- "SLIMTO_API_KEY is not set" — the env block isn't reaching the server; double-check the client config and restart the client.
- 401 Invalid or revoked API key — the key was revoked or mistyped; create a fresh one.
- 403 Plan limit reached — you're at your plan's active-link cap; delete a link or upgrade.
- 429 Rate limit exceeded — more than 120 requests in a minute on this key.
- File type not supported — only
pdf,png,jpg,jpeg,gif,html,zip,mp4. - Testing against local dev? Set
SLIMTO_API_BASE=http://localhost:8000.