Agents
Hand Rasket to an AI agent and it can set up your account the way a person would: a key, a domain and its DNS, a first send, and on to broadcasts and automations. There is one recipe of twelve steps, written once — this page, the skill, the rules file and the MCP server all read the same one.
Install it in your agent
Claude Code
The skill is a folder: SKILL.md with the recipe and its rules, three small Node scripts, and two references. Put it in the project and ask the agent to set Rasket up.
mkdir -p .claude/skills
cp -r rasket-setup .claude/skills/Download SKILL.md; its scripts/ and references/ sit beside it under /skills/rasket-setup/.
Cursor
Save the rules file as .cursor/rules/rasket.mdc. It carries the same recipe in the SDK's vocabulary, and the client's rules.
Windsurf
The same file, saved as .windsurf/rules/rasket.mdc.
Or connect over MCP
An MCP client needs no key: it signs in with OAuth and holds only the scopes you approve. The toolset parameter narrows the server to the tools setting up and sending need, and arrives with the full tool catalogue.
claude mcp add --transport http rasket "https://api.rasket.com/mcp?toolset=setup,send"{
"mcpServers": {
"rasket": {
"url": "https://api.rasket.com/mcp?toolset=setup,send"
}
}
}Every script, sample and file here reads the key from RASKET_API_KEY. Export it in the agent's shell; never paste a key into a chat or a file.
The MCP server page covers the boundary, the budgets and every tool.
The recipe
Twelve steps, in order. Each names its call on every surface and what it needs: a scope for an MCP client, otherwise a key permission. What “done” looks like and the failure each step most often meets are in the skill.
| # | Step | REST | Node SDK | MCP tool | Needs |
|---|---|---|---|---|---|
| 1 | Create an API key | POST /api-keys | apiKeys.create | — | a full_access key |
| 2 | Add a domain | POST /domains | domains.create | create_domain | domains:write |
| 3 | Publish its DNS records | GET /domains/{domain_id} | domains.get | get_domain_records | domains:read |
| 4 | Verify the domain | POST /domains/{domain_id}/verify | domains.verify | verify_domain | domains:write |
| 5 | Set the sender identity | PATCH /team | team.update | update_team | team:write |
| 6 | Send an email | POST /emails | emails.send | send_email | emails:send |
| 7 | Add a webhook and check its signature | POST /webhooks | webhooks.create | create_webhook | webhooks:write |
| 8 | Create and publish a template | POST /templates/{id}/publish | templates.publish | publish_template | templates:write |
| 9 | Add a contact | POST /contacts | contacts.create | create_contact | contacts:write |
| 10 | Create a segment | POST /segments | segments.create | create_segment | segments:write |
| 11 | Send a broadcast | POST /broadcasts/{id}/send | broadcasts.send | send_broadcast | broadcasts:write |
| 12 | Create an automation | POST /automations | automations.create | create_automation | automations:write |
The Python client names every method the same way in snake_case — api_keys.create for apiKeys.create. A step marked “not yet” names something still on its way; an agent skips it and says so.
Where an agent reads the docs
| Address | What it is |
|---|---|
/openapi.json | The whole API as an OpenAPI document. |
/llms.txt | An index of every docs page, written for a model to read. |
/llms-full.txt | Every docs page, one after another, in one file. |
/docs/<page>.md | Any docs page as Markdown — or request the page itself with Accept: text/markdown. |
/skills/rasket-setup/ | The skill and the rules file on this page, as files. |
All of these are served by this site, not the API origin. The OpenAPI address, the Markdown pages and the two llms files arrive with the machine-readable docs; until then the API serves its document at /api/v1/openapi.json.
The SDKs
npm install rasketpip install rasketBoth are published as rasket, on the npm registry and on PyPI. The Node SDK page covers the client in full.