@sequenzy/mcp 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +52 -16
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -31,7 +31,20 @@ var o$=Object.create;var{getPrototypeOf:t$,defineProperty:t4,getOwnPropertyNames
|
|
|
31
31
|
1. Call select_company first to choose which company to work with, OR
|
|
32
32
|
2. Pass companyId explicitly in each tool call
|
|
33
33
|
|
|
34
|
-
The response shows 'companies' (all available) and 'selectedCompanyId' (currently active). All subsequent operations will use the selected company unless you pass a companyId override.`,inputSchema:{type:"object",properties:{}}},{name:"select_company",description:"Select which company to operate on (for user-scoped API keys with access to multiple companies). Use get_account to see available companies. After selecting, all subsequent operations will use this company unless you pass a companyId override.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"The company ID to select (from get_account's companies list)"}},required:["companyId"]}},{name:"create_company",description:"Create a new company/brand. This will parse your website to extract brand information. The tool polls every 20 seconds until the company is fully processed (typically 30-60 seconds).",inputSchema:{type:"object",properties:{name:{type:"string",description:"Company name (optional, will be extracted from domain if not provided)"},domain:{type:"string",description:"The company's website domain (e.g., example.com)"}},required:["domain"]}},{name:"get_company",description:"Get company details and processing status",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"The company ID to check"}},required:["companyId"]}},{name:"create_api_key",description:"Create a new API key for a company. Use this when setting up Sequenzy integration in a project. The returned key should be saved to the project's .env file as SEQUENZY_API_KEY. The key can only be retrieved once at creation time.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the key for"},name:{type:"string",description:"Optional name for the API key (e.g., 'Production', 'Development')"}},required:["companyId"]}},{name:"list_websites",description:"List all configured sender websites/domains",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."}}}},{name:"add_website",description:"Add a new sender website. Takes ~30 seconds to process.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},domain:{type:"string",description:"The domain to add (e.g., example.com)"}},required:["domain"]}},{name:"check_website",description:"Check if a website has been processed and is ready to use",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},domain:{type:"string",description:"The domain to check"}},required:["domain"]}},{name:"get_integration_guide",description:"Get code examples for integrating Sequenzy into your project. Returns code snippets and helpful tips. IMPORTANT: Before implementing, use create_api_key to generate an API key for the company, then save it to the project's .env file as SEQUENZY_API_KEY. For payment/subscription events, the event_tracking guide recommends connecting payment providers (Stripe, Paddle, Dodo, Creem) directly in the dashboard instead of manual tracking.",inputSchema:{type:"object",properties:{framework:{type:"string",description:"Framework/language (nextjs, express, python, etc.)"},use_case:{type:"string",description:"Use case: 'transactional' (sending emails), 'subscribe_form' (adding subscribers), 'event_tracking' (tracking custom events - includes payment provider integration tips)"}}}},{name:"add_subscriber",description:"Add a new subscriber to your list",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to add subscriber to. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"},attributes:{type:"object",description:"Custom attributes (name, plan, etc.)"},tags:{type:"array",items:{type:"string"},description:"Tags to apply to the subscriber"},listIds:{type:"array",items:{type:"string"},description:"List IDs to add subscriber to"}},required:["email"]}},{name:"update_subscriber",description:"Update an existing subscriber's attributes or tags",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"},attributes:{type:"object",description:"Attributes to update"},addTags:{type:"array",items:{type:"string"},description:"Tags to add"},removeTags:{type:"array",items:{type:"string"},description:"Tags to remove"}},required:["email"]}},{name:"remove_subscriber",description:"Unsubscribe or delete a subscriber",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"},hardDelete:{type:"boolean",description:"If true, permanently deletes. If false, just unsubscribes."}},required:["email"]}},{name:"get_subscriber",description:"Get subscriber details and activity history",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"}},required:["email"]}},{name:"search_subscribers",description:"Search subscribers by tags, attributes, or segments",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},query:{type:"string",description:"Search query (email or name)"},tags:{type:"array",items:{type:"string"},description:"Filter by tags"},segmentId:{type:"string",description:"Filter by segment ID"},limit:{type:"number",description:"Maximum results (default 50)"}}}},{name:"list_tags",description:"List all tags in the account",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list tags for. If not provided, uses the currently selected company."}}}},{name:"list_lists",description:"List all subscriber lists",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list lists for. If not provided, uses the currently selected company."}}}},{name:"create_list",description:"Create a new subscriber list",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the list in. If not provided, uses the currently selected company."},name:{type:"string",description:"List name"},description:{type:"string",description:"List description"}},required:["name"]}},{name:"list_segments",description:"List all segments",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list segments for. If not provided, uses the currently selected company."}}}},{name:"create_segment",description:"Create a new segment with filter rules",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the segment in. If not provided, uses the currently selected company."},name:{type:"string",description:"Segment name"},filters:{type:"object",description:"Filter rules for the segment"}},required:["name","filters"]}},{name:"get_segment_count",description:"Get the number of subscribers in a segment",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},segmentId:{type:"string",description:"Segment ID"}},required:["segmentId"]}},{name:"list_templates",description:"List all email templates",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."}}}},{name:"get_template",description:"Get a template's details and content",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},templateId:{type:"string",description:"Template ID"}},required:["templateId"]}},{name:"create_template",description:"Create a new email template",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},name:{type:"string",description:"Template name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"}},required:["name","subject","html"]}},{name:"update_template",description:"Update an existing template",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},templateId:{type:"string",description:"Template ID"},name:{type:"string",description:"Template name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"}},required:["templateId"]}},{name:"delete_template",description:"Delete a template",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},templateId:{type:"string",description:"Template ID"}},required:["templateId"]}},{name:"list_campaigns",description:"List all campaigns",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list campaigns for. If not provided, uses the currently selected company."},status:{type:"string",description:"Filter by status (draft, scheduled, sent)"}}}},{name:"get_campaign",description:"Get campaign details and stats",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID"}},required:["campaignId"]}},{name:"create_campaign",description:"Create a new campaign (as draft)",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the campaign in. If not provided, uses the currently selected company."},name:{type:"string",description:"Campaign name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"},templateId:{type:"string",description:"Use a template instead of html"},segmentId:{type:"string",description:"Target segment ID"}},required:["name","subject"]}},{name:"update_campaign",description:"Update a draft campaign",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID"},name:{type:"string",description:"Campaign name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"}},required:["campaignId"]}},{name:"send_test_email",description:"Send a test email to a single address",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID to test"},to:{type:"string",description:"Email address to send test to"}},required:["campaignId","to"]}},{name:"list_sequences",description:"List all email sequences (automations)",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list sequences for. If not provided, uses the currently selected company."}}}},{name:"get_sequence",description:"Get sequence details and emails",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"create_sequence",description:`Create a new email sequence. Sequenzy will automatically generate the email content using AI based on your company's brand and the goal you specify. The tool polls until emails are generated (typically 30-60 seconds).
|
|
34
|
+
The response shows 'companies' (all available) and 'selectedCompanyId' (currently active). All subsequent operations will use the selected company unless you pass a companyId override.`,inputSchema:{type:"object",properties:{}}},{name:"select_company",description:"Select which company to operate on (for user-scoped API keys with access to multiple companies). Use get_account to see available companies. After selecting, all subsequent operations will use this company unless you pass a companyId override.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"The company ID to select (from get_account's companies list)"}},required:["companyId"]}},{name:"create_company",description:"Create a new company/brand. This will parse your website to extract brand information. The tool polls every 20 seconds until the company is fully processed (typically 30-60 seconds).",inputSchema:{type:"object",properties:{name:{type:"string",description:"Company name (optional, will be extracted from domain if not provided)"},domain:{type:"string",description:"The company's website domain (e.g., example.com)"}},required:["domain"]}},{name:"get_company",description:"Get company details and processing status",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"The company ID to check"}},required:["companyId"]}},{name:"create_api_key",description:"Create a new API key for a company. Use this when setting up Sequenzy integration in a project. The returned key should be saved to the project's .env file as SEQUENZY_API_KEY. The key can only be retrieved once at creation time.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the key for"},name:{type:"string",description:"Optional name for the API key (e.g., 'Production', 'Development')"}},required:["companyId"]}},{name:"list_websites",description:"List all configured sender websites/domains",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."}}}},{name:"add_website",description:"Add a new sender website. Takes ~30 seconds to process.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},domain:{type:"string",description:"The domain to add (e.g., example.com)"}},required:["domain"]}},{name:"check_website",description:"Check if a website has been processed and is ready to use",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},domain:{type:"string",description:"The domain to check"}},required:["domain"]}},{name:"get_integration_guide",description:`Get code examples for integrating Sequenzy into your project.
|
|
35
|
+
|
|
36
|
+
CRITICAL - FOR SAAS/SUBSCRIPTION APPS:
|
|
37
|
+
If the app uses Stripe, Polar, Paddle, Dodo, or Creem - tell the user to connect it in Sequenzy dashboard (Settings → Integrations).
|
|
38
|
+
The native integration automatically handles all payment events and customer tags - no code needed!
|
|
39
|
+
|
|
40
|
+
Only provide manual event tracking code if the user explicitly asks for it.
|
|
41
|
+
|
|
42
|
+
Use cases:
|
|
43
|
+
- 'transactional': Sending one-off emails (welcome, password reset, receipts)
|
|
44
|
+
- 'subscribe_form': Adding subscribers from signup forms
|
|
45
|
+
- 'event_tracking': Tracking CUSTOM events only (not payment events - those come from the integration)
|
|
46
|
+
|
|
47
|
+
Before implementing, use create_api_key to generate an API key and save it to .env as SEQUENZY_API_KEY.`,inputSchema:{type:"object",properties:{framework:{type:"string",description:"Framework/language (nextjs, express, python, etc.)"},use_case:{type:"string",description:"Use case: 'transactional' (sending emails), 'subscribe_form' (adding subscribers), 'event_tracking' (tracking CUSTOM events only - payment events should come from Stripe/Polar/etc integration)"}}}},{name:"add_subscriber",description:"Add a new subscriber to your list",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to add subscriber to. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"},attributes:{type:"object",description:"Custom attributes (name, plan, etc.)"},tags:{type:"array",items:{type:"string"},description:"Tags to apply to the subscriber"},listIds:{type:"array",items:{type:"string"},description:"List IDs to add subscriber to"}},required:["email"]}},{name:"update_subscriber",description:"Update an existing subscriber's attributes or tags",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"},attributes:{type:"object",description:"Attributes to update"},addTags:{type:"array",items:{type:"string"},description:"Tags to add"},removeTags:{type:"array",items:{type:"string"},description:"Tags to remove"}},required:["email"]}},{name:"remove_subscriber",description:"Unsubscribe or delete a subscriber",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"},hardDelete:{type:"boolean",description:"If true, permanently deletes. If false, just unsubscribes."}},required:["email"]}},{name:"get_subscriber",description:"Get subscriber details and activity history",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"}},required:["email"]}},{name:"search_subscribers",description:"Search subscribers by tags, attributes, or segments",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},query:{type:"string",description:"Search query (email or name)"},tags:{type:"array",items:{type:"string"},description:"Filter by tags"},segmentId:{type:"string",description:"Filter by segment ID"},limit:{type:"number",description:"Maximum results (default 50)"}}}},{name:"list_tags",description:"List all tags in the account",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list tags for. If not provided, uses the currently selected company."}}}},{name:"list_lists",description:"List all subscriber lists",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list lists for. If not provided, uses the currently selected company."}}}},{name:"create_list",description:"Create a new subscriber list",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the list in. If not provided, uses the currently selected company."},name:{type:"string",description:"List name"},description:{type:"string",description:"List description"}},required:["name"]}},{name:"list_segments",description:"List all segments",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list segments for. If not provided, uses the currently selected company."}}}},{name:"create_segment",description:"Create a new segment with filter rules",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the segment in. If not provided, uses the currently selected company."},name:{type:"string",description:"Segment name"},filters:{type:"object",description:"Filter rules for the segment"}},required:["name","filters"]}},{name:"get_segment_count",description:"Get the number of subscribers in a segment",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},segmentId:{type:"string",description:"Segment ID"}},required:["segmentId"]}},{name:"list_templates",description:"List all email templates",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."}}}},{name:"get_template",description:"Get a template's details and content",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},templateId:{type:"string",description:"Template ID"}},required:["templateId"]}},{name:"create_template",description:"Create a new email template",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},name:{type:"string",description:"Template name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"}},required:["name","subject","html"]}},{name:"update_template",description:"Update an existing template",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},templateId:{type:"string",description:"Template ID"},name:{type:"string",description:"Template name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"}},required:["templateId"]}},{name:"delete_template",description:"Delete a template",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},templateId:{type:"string",description:"Template ID"}},required:["templateId"]}},{name:"list_campaigns",description:"List all campaigns",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list campaigns for. If not provided, uses the currently selected company."},status:{type:"string",description:"Filter by status (draft, scheduled, sent)"}}}},{name:"get_campaign",description:"Get campaign details and stats",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID"}},required:["campaignId"]}},{name:"create_campaign",description:"Create a new campaign (as draft)",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the campaign in. If not provided, uses the currently selected company."},name:{type:"string",description:"Campaign name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"},templateId:{type:"string",description:"Use a template instead of html"},segmentId:{type:"string",description:"Target segment ID"}},required:["name","subject"]}},{name:"update_campaign",description:"Update a draft campaign",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID"},name:{type:"string",description:"Campaign name"},subject:{type:"string",description:"Email subject line"},html:{type:"string",description:"Email HTML content"}},required:["campaignId"]}},{name:"send_test_email",description:"Send a test email to a single address",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID to test"},to:{type:"string",description:"Email address to send test to"}},required:["campaignId","to"]}},{name:"list_sequences",description:"List all email sequences (automations)",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to list sequences for. If not provided, uses the currently selected company."}}}},{name:"get_sequence",description:"Get sequence details and emails",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"create_sequence",description:`Create a new email sequence. Sequenzy will automatically generate the email content using AI based on your company's brand and the goal you specify. The tool polls until emails are generated (typically 30-60 seconds).
|
|
35
48
|
|
|
36
49
|
IMPORTANT GUIDELINES:
|
|
37
50
|
|
|
@@ -100,19 +113,42 @@ IMPORTANT GUIDELINES:
|
|
|
100
113
|
- Auto-stops when: user logs in again
|
|
101
114
|
- Goal: Bring back inactive users
|
|
102
115
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
- saas
|
|
107
|
-
-
|
|
108
|
-
|
|
109
|
-
|
|
116
|
+
IMPORTANT - PAYMENT PROVIDER INTEGRATION:
|
|
117
|
+
If the app uses Stripe, Polar, Paddle, Dodo, or Creem - tell the user to connect it in Sequenzy dashboard (Settings → Integrations).
|
|
118
|
+
Once connected, the native integration automatically handles:
|
|
119
|
+
- All saas.* events (purchase, cancelled, churn, payment_failed, etc.)
|
|
120
|
+
- All status tags (customer, trial, cancelled, churned, past-due, etc.)
|
|
121
|
+
- Subscription attributes (MRR, plan name, billing interval)
|
|
122
|
+
|
|
123
|
+
Only offer manual tracking if the user explicitly asks for it.
|
|
124
|
+
|
|
125
|
+
CUSTOM EVENTS (these DO require manual tracking):
|
|
126
|
+
- onboarding.completed - User finished setup wizard
|
|
127
|
+
- feature.used - User engaged with a key feature
|
|
128
|
+
- project.created - User created their first project
|
|
129
|
+
- team.invited - User invited a team member
|
|
130
|
+
- milestone.reached - User hit a usage milestone
|
|
131
|
+
For custom events, provide the tracking code snippet from get_integration_guide.
|
|
132
|
+
|
|
133
|
+
BUILT-IN TAGS (auto-applied by payment integrations):
|
|
134
|
+
- "customer" = PAYING customer with active subscription (use this for upgrade sequences, customer-only content)
|
|
135
|
+
- "trial" = Currently on free trial (use for trial conversion sequences)
|
|
136
|
+
- "lead" = Signed up but never paid (use for nurture sequences)
|
|
137
|
+
- "cancelled" = Cancelled but still has access until period ends (use for win-back sequences)
|
|
138
|
+
- "churned" = Subscription ended, no longer paying (use for re-engagement)
|
|
139
|
+
- "past-due" = Payment failed, at risk of churning (use for dunning/recovery sequences)
|
|
140
|
+
- "refunded" = Received a refund
|
|
141
|
+
- "saas.monthly" / "saas.yearly" = Billing interval
|
|
142
|
+
|
|
143
|
+
BUILT-IN EVENTS (auto-fired by payment integrations):
|
|
144
|
+
- saas.purchase, saas.purchase.monthly, saas.purchase.yearly - New subscription
|
|
145
|
+
- saas.cancelled - User cancelled (still has access)
|
|
146
|
+
- saas.churn - Subscription ended
|
|
147
|
+
- saas.payment_failed - Card declined/expired
|
|
148
|
+
- saas.upgrade, saas.downgrade - Plan changes
|
|
149
|
+
- saas.trial_started, saas.trial_will_end, saas.trial_ended - Trial lifecycle
|
|
150
|
+
- saas.refund - Refund issued
|
|
151
|
+
|
|
152
|
+
OTHER BUILT-IN EVENTS:
|
|
110
153
|
- email.opened, email.clicked, email.replied, email.bounced, email.unsubscribed
|
|
111
|
-
|
|
112
|
-
Built-in events (contact lifecycle):
|
|
113
|
-
- contact.subscribed, contact.unsubscribed
|
|
114
|
-
|
|
115
|
-
Built-in tags:
|
|
116
|
-
- Status: lead, customer, cancelled, churned, refunded, past-due, trial
|
|
117
|
-
- Subscription: saas.monthly, saas.yearly
|
|
118
|
-
- Engagement: active, inactive`,inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the sequence in. If not provided, uses the currently selected company."},name:{type:"string",description:"Sequence name (e.g., 'User Onboarding', 'Welcome Series')"},trigger:{type:"string",enum:["contact_added","tag_added","event_received","inactivity","frequency"],description:"Trigger type: 'contact_added' (when added to a list), 'tag_added' (when tag is applied), 'event_received' (when custom event fires), 'inactivity' (when subscriber hasn't performed an event for X days), 'frequency' (when subscriber performs event X times in Y days)"},listId:{type:"string",description:"List ID to trigger on (for contact_added trigger). If not provided, triggers on any list."},tagName:{type:"string",description:"Tag name to trigger on (required for tag_added trigger)"},eventName:{type:"string",description:"Event name to trigger on (required for event_received, inactivity, and frequency triggers)"},inactiveDays:{type:"number",description:"Number of days of inactivity (required for inactivity trigger, must be >= 1)"},minCount:{type:"number",description:"Minimum event count (required for frequency trigger, must be >= 1)"},timeWindowDays:{type:"number",description:"Time window in days for frequency trigger (required for frequency trigger, must be >= 1)"},emailCount:{type:"number",description:"Number of emails in the sequence (default: 5)"},goal:{type:"string",description:"What this sequence should accomplish. Be specific to the app's actual features and user journey. Avoid generic goals that don't match the app's business model."}},required:["name","trigger","goal"]}},{name:"update_sequence",description:"Update an existing sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"},name:{type:"string",description:"Sequence name"},emails:{type:"array",description:"Updated email steps"}},required:["sequenceId"]}},{name:"enable_sequence",description:"Enable/activate a sequence. IMPORTANT: Only call this when the user EXPLICITLY asks to enable or activate a sequence. Never enable sequences automatically after creation - the user must review the content first.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"disable_sequence",description:"Disable/pause a sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"delete_sequence",description:"Delete a sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"send_email",description:"Send a transactional email to a single recipient",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},to:{type:"string",description:"Recipient email address"},subject:{type:"string",description:"Email subject (required if not using templateId)"},html:{type:"string",description:"Email HTML content (required if not using templateId)"},templateId:{type:"string",description:"Template ID to use (alternative to html)"},variables:{type:"object",description:"Variables for template personalization"}},required:["to"]}},{name:"get_stats",description:"Get overview statistics for a time period",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},period:{type:"string",description:"Time period: 7d, 30d, or 90d (default: 7d)"}}}},{name:"get_campaign_stats",description:"Get detailed statistics for a campaign",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID"}},required:["campaignId"]}},{name:"get_sequence_stats",description:"Get statistics for a sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"get_subscriber_activity",description:"Get activity timeline for a subscriber",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"}},required:["email"]}},{name:"generate_email",description:"Generate email HTML content from a prompt",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},prompt:{type:"string",description:"Description of the email to generate"},style:{type:"string",description:"Style: minimal, branded, promotional"},tone:{type:"string",description:"Tone: professional, casual, friendly"}},required:["prompt"]}},{name:"generate_sequence",description:"[DEPRECATED - Use create_sequence instead] Generate a multi-email sequence from a goal. Note: create_sequence now handles AI generation automatically.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},goal:{type:"string",description:"Goal of the sequence (e.g., 'onboard new SaaS trial users')"},emailCount:{type:"number",description:"Number of emails in the sequence (default: 5)"},durationDays:{type:"number",description:"Total duration in days (default: 14)"}},required:["goal"]}},{name:"generate_subject_lines",description:"Generate A/B test subject line variants",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},topic:{type:"string",description:"Topic or context for the subject lines"},count:{type:"number",description:"Number of variants to generate (default: 5)"}},required:["topic"]}}];async function i$(Q,X){try{let Y;switch(Q){case"get_account":{let W=await w("GET","/api/v1/account"),G=d$();Y={...W,selectedCompanyId:G??W.currentCompanyId};break}case"select_company":{let W=X.companyId,G=await w("GET","/api/v1/account"),J=G.companies?.find(($)=>$.id===W);if(!J)throw Error(`Company not found. Available companies: ${G.companies?.map(($)=>`${$.name} (${$.id})`).join(", ")??"none"}`);AX(W),Y={success:!0,message:`Switched to company: ${J.name}`,companyId:J.id,companyName:J.name};break}case"create_company":{let W=await w("POST","/api/v1/companies",{name:X.name,domain:X.domain});if(!W.success)throw Error("Failed to create company");let G=W.company.id,J=6,$=0,z=W.company.status;while(z==="processing"&&$<J){await new Promise((B)=>setTimeout(B,20000)),$++;let H=await w("GET",`/api/v1/companies/${G}`);if(H.success)z=H.company.status}AX(G);let K=await w("GET",`/api/v1/companies/${G}`);Y={success:!0,company:K.company,message:z==="processing"?"Company created but still processing. You can continue using it while processing completes.":`Company '${K.company.name}' created and ready to use.`,autoSelected:!0};break}case"get_company":{let W=X.companyId;Y=await w("GET",`/api/v1/companies/${W}`);break}case"create_api_key":{let W=X.companyId;Y=await w("POST","/api/v1/api-keys",{name:X.name},W);break}case"list_websites":{let W=X.companyId;Y=await w("GET","/api/v1/websites",void 0,W);break}case"add_website":{let W=X.companyId;Y=await w("POST","/api/v1/websites",{domain:X.domain},W);break}case"check_website":{let W=X.companyId;Y=await w("GET",`/api/v1/websites/${X.domain}`,void 0,W);break}case"get_integration_guide":Y=await w("POST","/api/v1/integration-guide",X);break;case"add_subscriber":{let W=X.companyId;Y=await w("POST","/api/v1/subscribers",X,W);break}case"update_subscriber":{let W=X.companyId;Y=await w("PUT",`/api/v1/subscribers/${X.email}`,X,W);break}case"remove_subscriber":{let W=X.companyId;Y=await w("DELETE",`/api/v1/subscribers/${X.email}`,X,W);break}case"get_subscriber":{let W=X.companyId;Y=await w("GET",`/api/v1/subscribers/${X.email}`,void 0,W);break}case"search_subscribers":{let W=X.companyId,G=new URLSearchParams;if(X.query)G.set("query",String(X.query));if(X.tags)G.set("tags",X.tags.join(","));if(X.segmentId)G.set("segmentId",String(X.segmentId));if(X.limit)G.set("limit",String(X.limit));Y=await w("GET",`/api/v1/subscribers?${G}`,void 0,W);break}case"list_tags":{let W=X.companyId;Y=await w("GET","/api/v1/tags",void 0,W);break}case"list_lists":{let W=X.companyId;Y=await w("GET","/api/v1/lists",void 0,W);break}case"create_list":{let W=X.companyId;Y=await w("POST","/api/v1/lists",X,W);break}case"list_segments":{let W=X.companyId;Y=await w("GET","/api/v1/segments",void 0,W);break}case"create_segment":{let W=X.companyId;Y=await w("POST","/api/v1/segments",X,W);break}case"get_segment_count":{let W=X.companyId;Y=await w("GET",`/api/v1/segments/${X.segmentId}/count`,void 0,W);break}case"list_templates":{let W=X.companyId;Y=await w("GET","/api/v1/templates",void 0,W);break}case"get_template":{let W=X.companyId;Y=await w("GET",`/api/v1/templates/${X.templateId}`,void 0,W);break}case"create_template":{let W=X.companyId;Y=await w("POST","/api/v1/templates",X,W);break}case"update_template":{let W=X.companyId;Y=await w("PUT",`/api/v1/templates/${X.templateId}`,X,W);break}case"delete_template":{let W=X.companyId;Y=await w("DELETE",`/api/v1/templates/${X.templateId}`,void 0,W);break}case"list_campaigns":{let W=X.companyId,G=new URLSearchParams;if(X.status)G.set("status",String(X.status));Y=await w("GET",`/api/v1/campaigns?${G}`,void 0,W);break}case"get_campaign":{let W=X.companyId;Y=await w("GET",`/api/v1/campaigns/${X.campaignId}`,void 0,W);break}case"create_campaign":{let W=X.companyId;Y=await w("POST","/api/v1/campaigns",X,W);break}case"update_campaign":{let W=X.companyId;Y=await w("PUT",`/api/v1/campaigns/${X.campaignId}`,X,W);break}case"send_test_email":{let W=X.companyId;Y=await w("POST",`/api/v1/campaigns/${X.campaignId}/test`,{to:X.to},W);break}case"list_sequences":{let W=X.companyId;Y=await w("GET","/api/v1/sequences",void 0,W);break}case"get_sequence":{let W=X.companyId;Y=await w("GET",`/api/v1/sequences/${X.sequenceId}`,void 0,W);break}case"create_sequence":{let W=X.companyId,G=await w("POST","/api/v1/sequences",X,W);if(!G.success){Y=G;break}let J=G.sequence.id,$=6,z=0,K="pending";while(K!=="complete"&&z<$){await new Promise((A)=>setTimeout(A,20000)),z++;let B=await w("GET",`/api/v1/sequences/${J}`,void 0,W);if(B.success)K=B.sequence.enrichmentStatus}let H=await w("GET",`/api/v1/sequences/${J}`,void 0,W);if(H.success)Y={success:!0,sequence:H.sequence,message:H.sequence.enrichmentStatus==="complete"?`Sequence "${H.sequence.name}" created with ${H.sequence.emailCount} AI-generated emails. The sequence is ready to review and enable.`:`Sequence "${H.sequence.name}" created. Email enrichment is still in progress (${H.sequence.enrichedCount}/${H.sequence.emailCount} emails generated). You can check status with get_sequence.`};else Y=H;break}case"update_sequence":{let W=X.companyId;Y=await w("PUT",`/api/v1/sequences/${X.sequenceId}`,X,W);break}case"enable_sequence":{let W=X.companyId;Y=await w("POST",`/api/v1/sequences/${X.sequenceId}/enable`,void 0,W);break}case"disable_sequence":{let W=X.companyId;Y=await w("POST",`/api/v1/sequences/${X.sequenceId}/disable`,void 0,W);break}case"delete_sequence":{let W=X.companyId;Y=await w("DELETE",`/api/v1/sequences/${X.sequenceId}`,void 0,W);break}case"send_email":{let W=X.companyId;Y=await w("POST","/api/v1/transactional/send",X,W);break}case"get_stats":{let W=X.companyId,G=X.period??"7d";Y=await w("GET",`/api/v1/stats?period=${G}`,void 0,W);break}case"get_campaign_stats":{let W=X.companyId;Y=await w("GET",`/api/v1/campaigns/${X.campaignId}/stats`,void 0,W);break}case"get_sequence_stats":{let W=X.companyId;Y=await w("GET",`/api/v1/sequences/${X.sequenceId}/stats`,void 0,W);break}case"get_subscriber_activity":{let W=X.companyId;Y=await w("GET",`/api/v1/subscribers/${X.email}/activity`,void 0,W);break}case"generate_email":{let W=X.companyId;Y=await w("POST","/api/v1/generate/email",X,W);break}case"generate_sequence":{let W=X.companyId;Y=await w("POST","/api/v1/generate/sequence",X,W);break}case"generate_subject_lines":{let W=X.companyId;Y=await w("POST","/api/v1/generate/subjects",X,W);break}default:throw Error(`Unknown tool: ${Q}`)}return{content:[{type:"text",text:JSON.stringify(Y,null,2)}]}}catch(Y){return{content:[{type:"text",text:`Error: ${Y instanceof Error?Y.message:"Unknown error"}`}]}}}var PV=process.env.SEQUENZY_API_URL??"https://api.sequenzy.com",r$=process.env.SEQUENZY_API_KEY,FX=null;if(!r$)console.error("Error: SEQUENZY_API_KEY environment variable is required"),console.error("Run `npx @sequenzy/setup` to configure your API key."),process.exit(1);function d$(){return FX}function AX(Q){FX=Q}var E6=new HX({name:"sequenzy",version:"0.0.1"},{capabilities:{tools:{},resources:{}}});async function w(Q,X,Y,W){let G={"Content-Type":"application/json",Authorization:`Bearer ${r$}`},J=W??FX;if(J)G["x-company-id"]=J;let $=await fetch(`${PV}${X}`,{method:Q,headers:G,body:Y?JSON.stringify(Y):void 0});if(!$.ok){let z=await $.text();throw Error(`API error: ${$.status} - ${z}`)}return $.json()}E6.setRequestHandler(o9,async()=>{return{tools:p$}});E6.setRequestHandler(Q6,async(Q)=>{let{name:X,arguments:Y}=Q.params;return i$(X,Y??{})});E6.setRequestHandler(l9,async()=>{return{resources:l$}});E6.setRequestHandler(p9,async(Q)=>{let{uri:X}=Q.params;return c$(X)});async function bV(){let Q=new BX;await E6.connect(Q),console.error("Sequenzy MCP server running on stdio")}bV().catch((Q)=>{console.error("Fatal error:",Q),process.exit(1)});export{AX as setSelectedCompanyId,d$ as getSelectedCompanyId,w as apiRequest};
|
|
154
|
+
- contact.subscribed, contact.unsubscribed`,inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID to create the sequence in. If not provided, uses the currently selected company."},name:{type:"string",description:"Sequence name (e.g., 'User Onboarding', 'Welcome Series')"},trigger:{type:"string",enum:["contact_added","tag_added","event_received","inactivity","frequency"],description:"Trigger type: 'contact_added' (when added to a list), 'tag_added' (when tag is applied), 'event_received' (when custom event fires), 'inactivity' (when subscriber hasn't performed an event for X days), 'frequency' (when subscriber performs event X times in Y days)"},listId:{type:"string",description:"List ID to trigger on (for contact_added trigger). If not provided, triggers on any list."},tagName:{type:"string",description:"Tag name to trigger on (required for tag_added trigger)"},eventName:{type:"string",description:"Event name to trigger on (required for event_received, inactivity, and frequency triggers)"},inactiveDays:{type:"number",description:"Number of days of inactivity (required for inactivity trigger, must be >= 1)"},minCount:{type:"number",description:"Minimum event count (required for frequency trigger, must be >= 1)"},timeWindowDays:{type:"number",description:"Time window in days for frequency trigger (required for frequency trigger, must be >= 1)"},emailCount:{type:"number",description:"Number of emails in the sequence (default: 5)"},goal:{type:"string",description:"What this sequence should accomplish. Be specific to the app's actual features and user journey. Avoid generic goals that don't match the app's business model."}},required:["name","trigger","goal"]}},{name:"update_sequence",description:"Update an existing sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"},name:{type:"string",description:"Sequence name"},emails:{type:"array",description:"Updated email steps"}},required:["sequenceId"]}},{name:"enable_sequence",description:"Enable/activate a sequence. IMPORTANT: Only call this when the user EXPLICITLY asks to enable or activate a sequence. Never enable sequences automatically after creation - the user must review the content first.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"disable_sequence",description:"Disable/pause a sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"delete_sequence",description:"Delete a sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"send_email",description:"Send a transactional email to a single recipient",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},to:{type:"string",description:"Recipient email address"},subject:{type:"string",description:"Email subject (required if not using templateId)"},html:{type:"string",description:"Email HTML content (required if not using templateId)"},templateId:{type:"string",description:"Template ID to use (alternative to html)"},variables:{type:"object",description:"Variables for template personalization"}},required:["to"]}},{name:"get_stats",description:"Get overview statistics for a time period",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},period:{type:"string",description:"Time period: 7d, 30d, or 90d (default: 7d)"}}}},{name:"get_campaign_stats",description:"Get detailed statistics for a campaign",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},campaignId:{type:"string",description:"Campaign ID"}},required:["campaignId"]}},{name:"get_sequence_stats",description:"Get statistics for a sequence",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},sequenceId:{type:"string",description:"Sequence ID"}},required:["sequenceId"]}},{name:"get_subscriber_activity",description:"Get activity timeline for a subscriber",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},email:{type:"string",description:"Subscriber email address"}},required:["email"]}},{name:"generate_email",description:"Generate email HTML content from a prompt",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},prompt:{type:"string",description:"Description of the email to generate"},style:{type:"string",description:"Style: minimal, branded, promotional"},tone:{type:"string",description:"Tone: professional, casual, friendly"}},required:["prompt"]}},{name:"generate_sequence",description:"[DEPRECATED - Use create_sequence instead] Generate a multi-email sequence from a goal. Note: create_sequence now handles AI generation automatically.",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},goal:{type:"string",description:"Goal of the sequence (e.g., 'onboard new SaaS trial users')"},emailCount:{type:"number",description:"Number of emails in the sequence (default: 5)"},durationDays:{type:"number",description:"Total duration in days (default: 14)"}},required:["goal"]}},{name:"generate_subject_lines",description:"Generate A/B test subject line variants",inputSchema:{type:"object",properties:{companyId:{type:"string",description:"Company ID. If not provided, uses the currently selected company."},topic:{type:"string",description:"Topic or context for the subject lines"},count:{type:"number",description:"Number of variants to generate (default: 5)"}},required:["topic"]}}];async function i$(Q,X){try{let Y;switch(Q){case"get_account":{let W=await w("GET","/api/v1/account"),G=d$();Y={...W,selectedCompanyId:G??W.currentCompanyId};break}case"select_company":{let W=X.companyId,G=await w("GET","/api/v1/account"),J=G.companies?.find(($)=>$.id===W);if(!J)throw Error(`Company not found. Available companies: ${G.companies?.map(($)=>`${$.name} (${$.id})`).join(", ")??"none"}`);AX(W),Y={success:!0,message:`Switched to company: ${J.name}`,companyId:J.id,companyName:J.name};break}case"create_company":{let W=await w("POST","/api/v1/companies",{name:X.name,domain:X.domain});if(!W.success)throw Error("Failed to create company");let G=W.company.id,J=6,$=0,z=W.company.status;while(z==="processing"&&$<J){await new Promise((B)=>setTimeout(B,20000)),$++;let H=await w("GET",`/api/v1/companies/${G}`);if(H.success)z=H.company.status}AX(G);let K=await w("GET",`/api/v1/companies/${G}`);Y={success:!0,company:K.company,message:z==="processing"?"Company created but still processing. You can continue using it while processing completes.":`Company '${K.company.name}' created and ready to use.`,autoSelected:!0};break}case"get_company":{let W=X.companyId;Y=await w("GET",`/api/v1/companies/${W}`);break}case"create_api_key":{let W=X.companyId;Y=await w("POST","/api/v1/api-keys",{name:X.name},W);break}case"list_websites":{let W=X.companyId;Y=await w("GET","/api/v1/websites",void 0,W);break}case"add_website":{let W=X.companyId;Y=await w("POST","/api/v1/websites",{domain:X.domain},W);break}case"check_website":{let W=X.companyId;Y=await w("GET",`/api/v1/websites/${X.domain}`,void 0,W);break}case"get_integration_guide":Y=await w("POST","/api/v1/integration-guide",X);break;case"add_subscriber":{let W=X.companyId;Y=await w("POST","/api/v1/subscribers",X,W);break}case"update_subscriber":{let W=X.companyId;Y=await w("PUT",`/api/v1/subscribers/${X.email}`,X,W);break}case"remove_subscriber":{let W=X.companyId;Y=await w("DELETE",`/api/v1/subscribers/${X.email}`,X,W);break}case"get_subscriber":{let W=X.companyId;Y=await w("GET",`/api/v1/subscribers/${X.email}`,void 0,W);break}case"search_subscribers":{let W=X.companyId,G=new URLSearchParams;if(X.query)G.set("query",String(X.query));if(X.tags)G.set("tags",X.tags.join(","));if(X.segmentId)G.set("segmentId",String(X.segmentId));if(X.limit)G.set("limit",String(X.limit));Y=await w("GET",`/api/v1/subscribers?${G}`,void 0,W);break}case"list_tags":{let W=X.companyId;Y=await w("GET","/api/v1/tags",void 0,W);break}case"list_lists":{let W=X.companyId;Y=await w("GET","/api/v1/lists",void 0,W);break}case"create_list":{let W=X.companyId;Y=await w("POST","/api/v1/lists",X,W);break}case"list_segments":{let W=X.companyId;Y=await w("GET","/api/v1/segments",void 0,W);break}case"create_segment":{let W=X.companyId;Y=await w("POST","/api/v1/segments",X,W);break}case"get_segment_count":{let W=X.companyId;Y=await w("GET",`/api/v1/segments/${X.segmentId}/count`,void 0,W);break}case"list_templates":{let W=X.companyId;Y=await w("GET","/api/v1/templates",void 0,W);break}case"get_template":{let W=X.companyId;Y=await w("GET",`/api/v1/templates/${X.templateId}`,void 0,W);break}case"create_template":{let W=X.companyId;Y=await w("POST","/api/v1/templates",X,W);break}case"update_template":{let W=X.companyId;Y=await w("PUT",`/api/v1/templates/${X.templateId}`,X,W);break}case"delete_template":{let W=X.companyId;Y=await w("DELETE",`/api/v1/templates/${X.templateId}`,void 0,W);break}case"list_campaigns":{let W=X.companyId,G=new URLSearchParams;if(X.status)G.set("status",String(X.status));Y=await w("GET",`/api/v1/campaigns?${G}`,void 0,W);break}case"get_campaign":{let W=X.companyId;Y=await w("GET",`/api/v1/campaigns/${X.campaignId}`,void 0,W);break}case"create_campaign":{let W=X.companyId;Y=await w("POST","/api/v1/campaigns",X,W);break}case"update_campaign":{let W=X.companyId;Y=await w("PUT",`/api/v1/campaigns/${X.campaignId}`,X,W);break}case"send_test_email":{let W=X.companyId;Y=await w("POST",`/api/v1/campaigns/${X.campaignId}/test`,{to:X.to},W);break}case"list_sequences":{let W=X.companyId;Y=await w("GET","/api/v1/sequences",void 0,W);break}case"get_sequence":{let W=X.companyId;Y=await w("GET",`/api/v1/sequences/${X.sequenceId}`,void 0,W);break}case"create_sequence":{let W=X.companyId,G=await w("POST","/api/v1/sequences",X,W);if(!G.success){Y=G;break}let J=G.sequence.id,$=6,z=0,K="pending";while(K!=="complete"&&z<$){await new Promise((A)=>setTimeout(A,20000)),z++;let B=await w("GET",`/api/v1/sequences/${J}`,void 0,W);if(B.success)K=B.sequence.enrichmentStatus}let H=await w("GET",`/api/v1/sequences/${J}`,void 0,W);if(H.success)Y={success:!0,sequence:H.sequence,message:H.sequence.enrichmentStatus==="complete"?`Sequence "${H.sequence.name}" created with ${H.sequence.emailCount} AI-generated emails. The sequence is ready to review and enable.`:`Sequence "${H.sequence.name}" created. Email enrichment is still in progress (${H.sequence.enrichedCount}/${H.sequence.emailCount} emails generated). You can check status with get_sequence.`};else Y=H;break}case"update_sequence":{let W=X.companyId;Y=await w("PUT",`/api/v1/sequences/${X.sequenceId}`,X,W);break}case"enable_sequence":{let W=X.companyId;Y=await w("POST",`/api/v1/sequences/${X.sequenceId}/enable`,void 0,W);break}case"disable_sequence":{let W=X.companyId;Y=await w("POST",`/api/v1/sequences/${X.sequenceId}/disable`,void 0,W);break}case"delete_sequence":{let W=X.companyId;Y=await w("DELETE",`/api/v1/sequences/${X.sequenceId}`,void 0,W);break}case"send_email":{let W=X.companyId;Y=await w("POST","/api/v1/transactional/send",X,W);break}case"get_stats":{let W=X.companyId,G=X.period??"7d";Y=await w("GET",`/api/v1/stats?period=${G}`,void 0,W);break}case"get_campaign_stats":{let W=X.companyId;Y=await w("GET",`/api/v1/campaigns/${X.campaignId}/stats`,void 0,W);break}case"get_sequence_stats":{let W=X.companyId;Y=await w("GET",`/api/v1/sequences/${X.sequenceId}/stats`,void 0,W);break}case"get_subscriber_activity":{let W=X.companyId;Y=await w("GET",`/api/v1/subscribers/${X.email}/activity`,void 0,W);break}case"generate_email":{let W=X.companyId;Y=await w("POST","/api/v1/generate/email",X,W);break}case"generate_sequence":{let W=X.companyId;Y=await w("POST","/api/v1/generate/sequence",X,W);break}case"generate_subject_lines":{let W=X.companyId;Y=await w("POST","/api/v1/generate/subjects",X,W);break}default:throw Error(`Unknown tool: ${Q}`)}return{content:[{type:"text",text:JSON.stringify(Y,null,2)}]}}catch(Y){return{content:[{type:"text",text:`Error: ${Y instanceof Error?Y.message:"Unknown error"}`}]}}}var PV=process.env.SEQUENZY_API_URL??"https://api.sequenzy.com",r$=process.env.SEQUENZY_API_KEY,FX=null;if(!r$)console.error("Error: SEQUENZY_API_KEY environment variable is required"),console.error("Run `npx @sequenzy/setup` to configure your API key."),process.exit(1);function d$(){return FX}function AX(Q){FX=Q}var E6=new HX({name:"sequenzy",version:"0.0.1"},{capabilities:{tools:{},resources:{}}});async function w(Q,X,Y,W){let G={"Content-Type":"application/json",Authorization:`Bearer ${r$}`},J=W??FX;if(J)G["x-company-id"]=J;let $=await fetch(`${PV}${X}`,{method:Q,headers:G,body:Y?JSON.stringify(Y):void 0});if(!$.ok){let z=await $.text();throw Error(`API error: ${$.status} - ${z}`)}return $.json()}E6.setRequestHandler(o9,async()=>{return{tools:p$}});E6.setRequestHandler(Q6,async(Q)=>{let{name:X,arguments:Y}=Q.params;return i$(X,Y??{})});E6.setRequestHandler(l9,async()=>{return{resources:l$}});E6.setRequestHandler(p9,async(Q)=>{let{uri:X}=Q.params;return c$(X)});async function bV(){let Q=new BX;await E6.connect(Q),console.error("Sequenzy MCP server running on stdio")}bV().catch((Q)=>{console.error("Fatal error:",Q),process.exit(1)});export{AX as setSelectedCompanyId,d$ as getSelectedCompanyId,w as apiRequest};
|