tinysend
Official TypeScript SDK for the tinysend API. Zero dependencies, fetch-based โ works in Node.js, Bun, Deno, Cloudflare Workers, and browsers.
Power your agent
The publisher's own URL. Not a PlugMCP endpoint.
Host a copy with our keys and logs.
https://mcp.tinysend.com/mcpThe Claude button above opens Claude with the name and URL filled in. You still confirm it there.
claude mcp add --transport http com.tinysend-tinysend https://mcp.tinysend.com/mcpRun in a terminal.
{ "mcpServers": { "com.tinysend-tinysend": { "command": "npx", "args": [ "-y", "mcp-remote", "https://mcp.tinysend.com/mcp" ] } }}claude_desktop_config.json
Remote URL or a command on your machine? How the two installs differ
Run on PlugMCP
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
LaunchFrom the publisher
Official TypeScript SDK for the tinysend API. Zero dependencies, fetch-based โ works in Node.js, Bun, Deno, Cloudflare Workers, and browsers.
Write, send and follow your Tinysend newsletters, and sign up for things with your Tinysend address.
npm install tinysend
Every call needs a bearer token (sk_...).
import { Tinysend } from 'tinysend';
const ts = new Tinysend('sk_...');
// lists
const lists = await ts.lists.list();
const list = await ts.lists.create({ name: 'Weekly Update' });
// subscribers
await ts.subscribers.create(list.id, { email: '[email protected]', verified: true });
// send an email
const post = await ts.posts.create(list.id, {
subject: 'Hello World',
body_html: '<p>Welcome to our newsletter!</p>',
});
await ts.posts.send(list.id, post.id);
// contacts
const contacts = await ts.contacts.list({ search: 'john' });
// mailboxes
const mailboxes = await ts.mailboxes.list();
// stats
const stats = await ts.stats.project();
// webhooks
const hook = await ts.webhooks.create({
url: 'https://example.com/webhook',
events: ['post.sent', 'subscriber.created'],
});
// sender domain (who emails come from)
await ts.sender.set(list.id, { type: 'custom_domain', name: 'James', email: 'james', domain: 'acme.com' });
await ts.sender.check(list.id); // re-check DNS
// custom domain for the archive site
await ts.siteDomains.set(list.id, { domain: 'news.acme.com' });
// waitlists
await ts.lists.join(list.id, { email: '[email protected]' });
await ts.lists.invite(list.id, { count: 100 });
// automations, invites, usage, settings
const automations = await ts.automations.list();
const invites = await ts.invites.list();
const usage = await ts.usage.get();
The SDK covers the full API surface โ verified against the live openapi spec on every release.
import { Tinysend, TinysendError } from 'tinysend';
try {
await ts.lists.get('nonexistent');
} catch (err) {
if (err instanceof TinysendError) {
console.log(err.status); // 404
console.log(err.code); // 'not_found'
console.log(err.message); // 'list not found'
}
}
const ts = new Tinysend('sk_...', {
baseUrl: 'https://api.tinysend.com/v1', // default
fetch: customFetch, // custom fetch implementation
});
MIT
a system operator product
ยฉ 2026 MCP Directory.
Write, send and follow your Tinysend newsletters, and sign up for things with your Tinysend address.
{ "mcpServers": { "com.tinysend-tinysend": { "url": "https://mcp.tinysend.com/mcp", "headers": {} } }}Tools
No tool list yet. Remote servers get one after the first health check.
FAQ
Copy the http config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
No required environment variable is listed on this record.
Tinysend is reached over HTTP.
Last checked 2026-11-13. Write, send and follow your Tinysend newsletters, and sign up for things with your Tinysend address.