whamlink-mcp
# whamlink-mcp
An [MCP](https://modelcontextprotocol.io) server for [whamlink](https://whamlink.com) — let any MCP client (Claude Desktop, IDEs, agents) publish a single file to a permanent, shareable link.
## Setup
1. Get an API key: register at <https://whamlink.com/app>, then create a key under **Keys**.
2. Add the server to your MCP client config, passing the key via `WHAMLINK_API_KEY`.
### Claude Desktop (`claude_desktop_config.json`)
```json
{
"mcpServers": {
"whamlink": {
"command": "npx",
"args": ["-y", "whamlink-mcp"],
"env": { "WHAMLINK_API_KEY": "wl_your_key_here" }
}
}
}
```
Running from source instead of npm: `"command": "node", "args": ["/path/to/whamlink/mcp/dist/index.js"]` (after `npm install && npm run build` in `mcp/`).
### Environment
- `WHAMLINK_API_KEY` (optional) — your whamlink API key. If unset, the server still starts; the agent can `register` to create an account in-session (save the returned key here to persist).
- `WHAMLINK_BASE_URL` (optional) — defaults to `https://whamlink.com`.
## Tools
| Tool | What it does |
|------|--------------|
| `register` | Create an account on the user's behalf (consent + real email). Lets a new user go zero-to-published without setting a key first. |
| `publish_link` | Publish HTML / Markdown / PDF / image / text → a permanent URL. Public by default; set `visibility` to `private` / `password` / `email` to gate it. |
| `list_links` | List your published links (id, slug, mode, visibility, URL). |
| `set_link_access` | Change a link's visibility, password, shared-email list, `allowNetwork`, or title. |
| `replace_link_content` | Replace a link's content in place — the URL stays the same. |
| `delete_link` | Permanently delete a link. |
> PDF and image files aren't supported over MCP (tool args are JSON, which can't carry binary) — use the [whamlink dashboard](https://whamlink.com/app) or the multipart API for those.
**Never publish secrets, API keys, or private data.** Public links are unlisted but anyone with the URL can view them; use `private`/`password`/`email` visibility for anything sensitive.
## Develop
```bash
npm install
npm run build
npm test
```
TDQS
Scored across 6 tools
Each tool targets a distinct operation: account registration, link creation, listing, deletion, content replacement, and access control. There is no overlap in functionality.
All tools use snake_case and generally follow verb_noun pattern (delete_link, list_links, publish_link, replace_link_content, set_link_access). However, 'register' is a single verb without a noun, breaking the pattern slightly.
With 6 tools, the server provides a focused set covering the core lifecycle of links (create, read, update, delete, access management) plus account setup. This is well-scoped.
The set covers CRUD and access control for text links. A minor gap is the lack of a tool to retrieve a single link's full details (list_links returns all, but may not include all fields). The file upload limitation is noted, but that's a domain constraint.