getting_started
Learn to use AI email inboxes: create, send, receive, search messages, and manage threads with step-by-step guidance.
Instructions
Interactive onboarding guide for ClawAIMail. Shows you everything you can do with your AI email, step by step.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Guide level: "beginner" (default) for basics, "advanced" for power features |
Implementation Reference
- mcp/index.js:334-456 (registration)The tool 'getting_started' is registered via server.tool() with name 'getting_started' and a description about interactive onboarding.
server.tool( 'getting_started', 'Interactive onboarding guide for ClawAIMail. Shows you everything you can do with your AI email, step by step.', { level: z.enum(['beginner', 'advanced']).optional().describe('Guide level: "beginner" (default) for basics, "advanced" for power features') }, async ({ level = 'beginner' }) => { const inbox = await getDefaultInbox(); const hasInbox = inbox && !inbox.error; const email = hasInbox ? (inbox.email || inbox.address) : null; if (level === 'advanced') { return { content: [{ type: 'text', text: JSON.stringify({ title: '🚀 ClawAIMail Advanced Features', features: [ { name: 'Multiple Inboxes', description: 'Create separate inboxes for different purposes (support, notifications, personal)', tool: 'create_inbox', example: { username: 'support' }, result: 'Creates support@clawaimail.com' }, { name: 'Custom Domains', description: 'Want bot@yourdomain.com instead of bot@clawaimail.com? Paid plan users can add their own domain. Steps: 1) POST /v1/domains { domain: "yourdomain.com" } 2) Add the DNS TXT record provided 3) POST /v1/domains/:id/verify to confirm', api_endpoint: 'POST /v1/domains', requires: 'Pro plan ($29/mo) or above', steps: [ 'Call POST /v1/domains with your domain name', 'Add the TXT record to your DNS: _clawaimail.yourdomain.com → verification token', 'Call POST /v1/domains/:id/verify to complete', 'Now create inboxes with: create_inbox(username: "bot", domain: "yourdomain.com")' ] }, { name: 'Email Search', description: 'Search emails by keyword across subject, body, and sender', tool: 'search_emails', example: { query: 'invoice' } }, { name: 'Webhooks', description: 'Get HTTP notifications when new emails arrive. Set up via the REST API: POST /v1/webhooks with { url, events: ["email_received"] }', api_endpoint: 'POST /v1/webhooks' }, { name: 'WebSocket Real-time', description: 'Connect to ws://api.clawaimail.com/v1/ws?key=YOUR_API_KEY for real-time email notifications', protocol: 'WebSocket' }, { name: 'Account & Limits', description: 'Check your plan, usage, and limits', tool: 'account_info' } ], plans: { free: '3 inboxes, 3K emails/month, 100 sends/day', starter: '$5/mo — 10 inboxes, 5K emails/month, unlimited sends', pro: '$29/mo — 50 inboxes, 50K emails/month, custom domains', business: '$99/mo — 200 inboxes, 200K emails/month, everything unlimited' }, tip: 'Want a custom domain like @yourstartup.com? Upgrade to Pro and follow the Custom Domains steps above.' }, null, 2) }] }; } // Beginner guide — step 1 depends on whether user already has an inbox const step1 = hasInbox ? { step: 1, title: '✉️ Your Email is Ready', description: `Your email address is ${email}. Anyone can send emails to this address and you'll receive them.`, done: true, tip: 'Want a different name? Call my_email(preferred_name: "yourname") to create a new one.' } : { step: 1, title: '✉️ Choose Your Email Name', description: 'First, pick a name for your email address! Call my_email(preferred_name: "yourname") to create yourname@clawaimail.com. Pick something memorable — this is your agent\'s identity.', tool: 'my_email', example: { preferred_name: 'jarvis' }, result: 'Creates jarvis@clawaimail.com (or jarvis-xxxx@clawaimail.com if taken)', done: false }; return { content: [{ type: 'text', text: JSON.stringify({ title: '📬 Welcome to ClawAIMail!', subtitle: 'Your AI agent now has its own email address. Follow these steps to get started:', your_email: email || '(not created yet — complete step 1!)', steps: [ step1, { step: 2, title: '📤 Send Your First Email', description: 'Try sending an email to yourself or someone you know.', tool: 'send_email', example: { to: 'someone@gmail.com', subject: 'Hello from my AI agent!', text: 'This email was sent by my AI agent using ClawAIMail.' } }, { step: 3, title: '📥 Check Your Inbox', description: 'See all emails you\'ve received. Ask someone to send a test email to your address!', tool: 'list_messages', tip: 'Use unread: true to see only new messages' }, { step: 4, title: '🔍 Search Emails', description: 'Find specific emails by keyword.', tool: 'search_emails', example: { query: 'hello' } } ], next: 'Want more? Call getting_started(level: "advanced") to learn about custom domains (use your own @yourdomain.com!), webhooks, multiple inboxes, and more.', custom_domain_hint: 'Pro tip: Paid users can use their own domain — e.g. bot@yourstartup.com. Call getting_started(level: "advanced") for details.', help: 'https://clawaimail.com/docs' }, null, 2) }] }; } ); - mcp/index.js:340-456 (handler)The async handler function that executes the tool logic. It takes an optional 'level' parameter ('beginner' or 'advanced'). For 'advanced', it returns a JSON guide of advanced features (multiple inboxes, custom domains, search, webhooks, websockets, account info) and pricing plans. For 'beginner', it returns a step-by-step onboarding guide (steps 1-4) that adapts based on whether the user already has an inbox.
async ({ level = 'beginner' }) => { const inbox = await getDefaultInbox(); const hasInbox = inbox && !inbox.error; const email = hasInbox ? (inbox.email || inbox.address) : null; if (level === 'advanced') { return { content: [{ type: 'text', text: JSON.stringify({ title: '🚀 ClawAIMail Advanced Features', features: [ { name: 'Multiple Inboxes', description: 'Create separate inboxes for different purposes (support, notifications, personal)', tool: 'create_inbox', example: { username: 'support' }, result: 'Creates support@clawaimail.com' }, { name: 'Custom Domains', description: 'Want bot@yourdomain.com instead of bot@clawaimail.com? Paid plan users can add their own domain. Steps: 1) POST /v1/domains { domain: "yourdomain.com" } 2) Add the DNS TXT record provided 3) POST /v1/domains/:id/verify to confirm', api_endpoint: 'POST /v1/domains', requires: 'Pro plan ($29/mo) or above', steps: [ 'Call POST /v1/domains with your domain name', 'Add the TXT record to your DNS: _clawaimail.yourdomain.com → verification token', 'Call POST /v1/domains/:id/verify to complete', 'Now create inboxes with: create_inbox(username: "bot", domain: "yourdomain.com")' ] }, { name: 'Email Search', description: 'Search emails by keyword across subject, body, and sender', tool: 'search_emails', example: { query: 'invoice' } }, { name: 'Webhooks', description: 'Get HTTP notifications when new emails arrive. Set up via the REST API: POST /v1/webhooks with { url, events: ["email_received"] }', api_endpoint: 'POST /v1/webhooks' }, { name: 'WebSocket Real-time', description: 'Connect to ws://api.clawaimail.com/v1/ws?key=YOUR_API_KEY for real-time email notifications', protocol: 'WebSocket' }, { name: 'Account & Limits', description: 'Check your plan, usage, and limits', tool: 'account_info' } ], plans: { free: '3 inboxes, 3K emails/month, 100 sends/day', starter: '$5/mo — 10 inboxes, 5K emails/month, unlimited sends', pro: '$29/mo — 50 inboxes, 50K emails/month, custom domains', business: '$99/mo — 200 inboxes, 200K emails/month, everything unlimited' }, tip: 'Want a custom domain like @yourstartup.com? Upgrade to Pro and follow the Custom Domains steps above.' }, null, 2) }] }; } // Beginner guide — step 1 depends on whether user already has an inbox const step1 = hasInbox ? { step: 1, title: '✉️ Your Email is Ready', description: `Your email address is ${email}. Anyone can send emails to this address and you'll receive them.`, done: true, tip: 'Want a different name? Call my_email(preferred_name: "yourname") to create a new one.' } : { step: 1, title: '✉️ Choose Your Email Name', description: 'First, pick a name for your email address! Call my_email(preferred_name: "yourname") to create yourname@clawaimail.com. Pick something memorable — this is your agent\'s identity.', tool: 'my_email', example: { preferred_name: 'jarvis' }, result: 'Creates jarvis@clawaimail.com (or jarvis-xxxx@clawaimail.com if taken)', done: false }; return { content: [{ type: 'text', text: JSON.stringify({ title: '📬 Welcome to ClawAIMail!', subtitle: 'Your AI agent now has its own email address. Follow these steps to get started:', your_email: email || '(not created yet — complete step 1!)', steps: [ step1, { step: 2, title: '📤 Send Your First Email', description: 'Try sending an email to yourself or someone you know.', tool: 'send_email', example: { to: 'someone@gmail.com', subject: 'Hello from my AI agent!', text: 'This email was sent by my AI agent using ClawAIMail.' } }, { step: 3, title: '📥 Check Your Inbox', description: 'See all emails you\'ve received. Ask someone to send a test email to your address!', tool: 'list_messages', tip: 'Use unread: true to see only new messages' }, { step: 4, title: '🔍 Search Emails', description: 'Find specific emails by keyword.', tool: 'search_emails', example: { query: 'hello' } } ], next: 'Want more? Call getting_started(level: "advanced") to learn about custom domains (use your own @yourdomain.com!), webhooks, multiple inboxes, and more.', custom_domain_hint: 'Pro tip: Paid users can use their own domain — e.g. bot@yourstartup.com. Call getting_started(level: "advanced") for details.', help: 'https://clawaimail.com/docs' }, null, 2) }] }; } ); - mcp/index.js:337-338 (schema)Input schema for the tool: an optional 'level' parameter using z.enum(['beginner', 'advanced']) validated via Zod.
{ level: z.enum(['beginner', 'advanced']).optional().describe('Guide level: "beginner" (default) for basics, "advanced" for power features')