@magnetlab/mcp 0.1.0
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/README.md +119 -0
- package/dist/client.d.ts +465 -0
- package/dist/client.js +456 -0
- package/dist/constants.d.ts +30 -0
- package/dist/constants.js +87 -0
- package/dist/handlers/analytics.d.ts +5 -0
- package/dist/handlers/analytics.js +11 -0
- package/dist/handlers/brand-kit.d.ts +5 -0
- package/dist/handlers/brand-kit.js +32 -0
- package/dist/handlers/content-pipeline.d.ts +5 -0
- package/dist/handlers/content-pipeline.js +127 -0
- package/dist/handlers/email-sequences.d.ts +5 -0
- package/dist/handlers/email-sequences.js +30 -0
- package/dist/handlers/funnels.d.ts +5 -0
- package/dist/handlers/funnels.js +65 -0
- package/dist/handlers/ideation.d.ts +5 -0
- package/dist/handlers/ideation.js +44 -0
- package/dist/handlers/index.d.ts +24 -0
- package/dist/handlers/index.js +104 -0
- package/dist/handlers/lead-magnets.d.ts +5 -0
- package/dist/handlers/lead-magnets.js +31 -0
- package/dist/handlers/leads.d.ts +5 -0
- package/dist/handlers/leads.js +24 -0
- package/dist/handlers/libraries.d.ts +5 -0
- package/dist/handlers/libraries.js +31 -0
- package/dist/handlers/qualification-forms.d.ts +5 -0
- package/dist/handlers/qualification-forms.js +21 -0
- package/dist/handlers/swipe-file.d.ts +5 -0
- package/dist/handlers/swipe-file.js +31 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +58 -0
- package/dist/tools/analytics.d.ts +2 -0
- package/dist/tools/analytics.js +10 -0
- package/dist/tools/brand-kit.d.ts +2 -0
- package/dist/tools/brand-kit.js +89 -0
- package/dist/tools/content-pipeline.d.ts +2 -0
- package/dist/tools/content-pipeline.js +476 -0
- package/dist/tools/email-sequences.d.ts +2 -0
- package/dist/tools/email-sequences.js +70 -0
- package/dist/tools/funnels.d.ts +2 -0
- package/dist/tools/funnels.js +153 -0
- package/dist/tools/ideation.d.ts +2 -0
- package/dist/tools/ideation.js +161 -0
- package/dist/tools/index.d.ts +66 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/lead-magnets.d.ts +2 -0
- package/dist/tools/lead-magnets.js +101 -0
- package/dist/tools/leads.d.ts +2 -0
- package/dist/tools/leads.js +32 -0
- package/dist/tools/libraries.d.ts +2 -0
- package/dist/tools/libraries.js +83 -0
- package/dist/tools/qualification-forms.d.ts +2 -0
- package/dist/tools/qualification-forms.js +71 -0
- package/dist/tools/swipe-file.d.ts +2 -0
- package/dist/tools/swipe-file.js +46 -0
- package/dist/validation.d.ts +476 -0
- package/dist/validation.js +236 -0
- package/package.json +52 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
export const funnelTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_list_funnels',
|
|
4
|
+
description: 'List all funnel pages for the current user. Returns funnel ID, slug, headline, theme, publish status, and target (lead magnet, library, or external resource).',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {},
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: 'magnetlab_get_funnel',
|
|
12
|
+
description: 'Get full details of a funnel page including all opt-in and thank-you copy, theme settings, qualification form, and publish status.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
id: { type: 'string', description: 'Funnel page UUID' },
|
|
17
|
+
},
|
|
18
|
+
required: ['id'],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'magnetlab_get_funnel_by_target',
|
|
23
|
+
description: 'Find the funnel page associated with a specific lead magnet, library, or external resource. Useful to check if a funnel already exists before creating one.',
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {
|
|
27
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID (for lead_magnet target)' },
|
|
28
|
+
library_id: { type: 'string', description: 'Library UUID (for library target)' },
|
|
29
|
+
external_resource_id: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'External resource UUID (for external_resource target)',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'magnetlab_create_funnel',
|
|
38
|
+
description: 'Create a new funnel/opt-in page. Must target a lead magnet, library, or external resource. Provide a slug (URL-safe name) and optionally customize headline, subline, button text, thank-you copy, theme (light/dark), colors, and VSL/Calendly URLs.',
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
properties: {
|
|
42
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID (for lead_magnet target)' },
|
|
43
|
+
library_id: { type: 'string', description: 'Library UUID (for library target)' },
|
|
44
|
+
external_resource_id: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'External resource UUID (for external_resource target)',
|
|
47
|
+
},
|
|
48
|
+
target_type: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
enum: ['lead_magnet', 'library', 'external_resource'],
|
|
51
|
+
description: 'What this funnel delivers (defaults based on which ID is provided)',
|
|
52
|
+
},
|
|
53
|
+
slug: { type: 'string', description: 'URL slug (e.g. "my-free-guide")' },
|
|
54
|
+
optin_headline: { type: 'string', description: 'Main headline on opt-in page' },
|
|
55
|
+
optin_subline: { type: 'string', description: 'Subheadline text' },
|
|
56
|
+
optin_button_text: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'CTA button text (default: "Get Free Access")',
|
|
59
|
+
},
|
|
60
|
+
optin_social_proof: { type: 'string', description: 'Social proof line (e.g. "500+ downloads")' },
|
|
61
|
+
thankyou_headline: {
|
|
62
|
+
type: 'string',
|
|
63
|
+
description: 'Thank you page headline (default: "Thanks! Check your email.")',
|
|
64
|
+
},
|
|
65
|
+
thankyou_subline: { type: 'string', description: 'Thank you page subheadline' },
|
|
66
|
+
vsl_url: { type: 'string', description: 'Video URL to embed on thank-you page' },
|
|
67
|
+
calendly_url: { type: 'string', description: 'Calendly URL for booking on thank-you page' },
|
|
68
|
+
theme: { type: 'string', enum: ['light', 'dark'], description: 'Page theme (default: dark)' },
|
|
69
|
+
primary_color: { type: 'string', description: 'Primary accent color hex (default: #8b5cf6)' },
|
|
70
|
+
background_style: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
enum: ['solid', 'gradient', 'pattern'],
|
|
73
|
+
description: 'Background style',
|
|
74
|
+
},
|
|
75
|
+
logo_url: { type: 'string', description: 'Logo image URL' },
|
|
76
|
+
qualification_form_id: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'Qualification form UUID to attach (filters leads)',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ['slug'],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'magnetlab_update_funnel',
|
|
86
|
+
description: 'Update an existing funnel page. Change copy, theme, colors, URLs, or qualification form. Only provided fields are updated.',
|
|
87
|
+
inputSchema: {
|
|
88
|
+
type: 'object',
|
|
89
|
+
properties: {
|
|
90
|
+
id: { type: 'string', description: 'Funnel page UUID' },
|
|
91
|
+
slug: { type: 'string', description: 'New URL slug' },
|
|
92
|
+
optin_headline: { type: 'string' },
|
|
93
|
+
optin_subline: { type: 'string' },
|
|
94
|
+
optin_button_text: { type: 'string' },
|
|
95
|
+
optin_social_proof: { type: 'string' },
|
|
96
|
+
thankyou_headline: { type: 'string' },
|
|
97
|
+
thankyou_subline: { type: 'string' },
|
|
98
|
+
vsl_url: { type: 'string' },
|
|
99
|
+
calendly_url: { type: 'string' },
|
|
100
|
+
theme: { type: 'string', enum: ['light', 'dark'] },
|
|
101
|
+
primary_color: { type: 'string' },
|
|
102
|
+
background_style: { type: 'string', enum: ['solid', 'gradient', 'pattern'] },
|
|
103
|
+
logo_url: { type: 'string' },
|
|
104
|
+
qualification_form_id: { type: ['string', 'null'] },
|
|
105
|
+
},
|
|
106
|
+
required: ['id'],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'magnetlab_delete_funnel',
|
|
111
|
+
description: 'Delete a funnel page and all associated leads, page views, and qualification questions. This is permanent.',
|
|
112
|
+
inputSchema: {
|
|
113
|
+
type: 'object',
|
|
114
|
+
properties: {
|
|
115
|
+
id: { type: 'string', description: 'Funnel page UUID' },
|
|
116
|
+
},
|
|
117
|
+
required: ['id'],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'magnetlab_publish_funnel',
|
|
122
|
+
description: 'Publish a funnel page to make it publicly accessible. Returns the live URL (e.g. /p/username/slug). Requires the user to have a username set. Auto-polishes lead magnet content on first publish.',
|
|
123
|
+
inputSchema: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
properties: {
|
|
126
|
+
id: { type: 'string', description: 'Funnel page UUID' },
|
|
127
|
+
},
|
|
128
|
+
required: ['id'],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'magnetlab_unpublish_funnel',
|
|
133
|
+
description: 'Take a funnel page offline. The URL will no longer be accessible.',
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
id: { type: 'string', description: 'Funnel page UUID' },
|
|
138
|
+
},
|
|
139
|
+
required: ['id'],
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'magnetlab_generate_funnel_content',
|
|
144
|
+
description: 'Auto-generate opt-in page copy (headline, subline, button text) based on the lead magnet content using AI.',
|
|
145
|
+
inputSchema: {
|
|
146
|
+
type: 'object',
|
|
147
|
+
properties: {
|
|
148
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID to generate funnel copy for' },
|
|
149
|
+
},
|
|
150
|
+
required: ['lead_magnet_id'],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
];
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
export const ideationTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_ideate_lead_magnets',
|
|
4
|
+
description: 'Generate lead magnet ideas based on your business context. Requires businessDescription and businessType at minimum. Returns a background job ID that you can poll with magnetlab_get_job_status. Ideas are generated using AI and saved to your brand kit.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
business_description: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
description: 'What your business does and who you serve',
|
|
11
|
+
},
|
|
12
|
+
business_type: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'Business category (e.g. "B2B SaaS", "Agency", "Coaching")',
|
|
15
|
+
},
|
|
16
|
+
credibility_markers: {
|
|
17
|
+
type: 'array',
|
|
18
|
+
items: { type: 'string' },
|
|
19
|
+
description: 'Social proof, credentials, results (e.g. "Helped 200+ agencies scale")',
|
|
20
|
+
},
|
|
21
|
+
urgent_pains: {
|
|
22
|
+
type: 'array',
|
|
23
|
+
items: { type: 'string' },
|
|
24
|
+
description: 'Top pain points your audience has',
|
|
25
|
+
},
|
|
26
|
+
templates: {
|
|
27
|
+
type: 'array',
|
|
28
|
+
items: { type: 'string' },
|
|
29
|
+
description: 'Templates/frameworks you use with clients',
|
|
30
|
+
},
|
|
31
|
+
processes: {
|
|
32
|
+
type: 'array',
|
|
33
|
+
items: { type: 'string' },
|
|
34
|
+
description: 'Key processes or methods you follow',
|
|
35
|
+
},
|
|
36
|
+
tools: {
|
|
37
|
+
type: 'array',
|
|
38
|
+
items: { type: 'string' },
|
|
39
|
+
description: 'Tools or software you recommend',
|
|
40
|
+
},
|
|
41
|
+
frequent_questions: {
|
|
42
|
+
type: 'array',
|
|
43
|
+
items: { type: 'string' },
|
|
44
|
+
description: 'Questions your prospects frequently ask',
|
|
45
|
+
},
|
|
46
|
+
results: {
|
|
47
|
+
type: 'array',
|
|
48
|
+
items: { type: 'string' },
|
|
49
|
+
description: 'Typical results/outcomes you deliver',
|
|
50
|
+
},
|
|
51
|
+
success_example: {
|
|
52
|
+
type: 'string',
|
|
53
|
+
description: 'A specific client success story',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
required: ['business_description', 'business_type'],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'magnetlab_extract_content',
|
|
61
|
+
description: 'Run AI content extraction for a lead magnet. Provide the archetype, concept (from ideation), and answers to extraction questions. Returns the extracted structured content.',
|
|
62
|
+
inputSchema: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
66
|
+
archetype: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
enum: [
|
|
69
|
+
'single-breakdown',
|
|
70
|
+
'single-system',
|
|
71
|
+
'focused-toolkit',
|
|
72
|
+
'single-calculator',
|
|
73
|
+
'focused-directory',
|
|
74
|
+
'mini-training',
|
|
75
|
+
'one-story',
|
|
76
|
+
'prompt',
|
|
77
|
+
'assessment',
|
|
78
|
+
'workflow',
|
|
79
|
+
],
|
|
80
|
+
description: 'Content archetype/format',
|
|
81
|
+
},
|
|
82
|
+
concept: { type: 'object', description: 'The concept object from ideation' },
|
|
83
|
+
answers: {
|
|
84
|
+
type: 'object',
|
|
85
|
+
additionalProperties: { type: 'string' },
|
|
86
|
+
description: 'Key-value map of extraction question IDs to user answers',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
required: ['lead_magnet_id', 'archetype', 'concept', 'answers'],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'magnetlab_generate_content',
|
|
94
|
+
description: 'Generate the final lead magnet content from extraction data. Provide the archetype, concept, and answers. Returns structured content ready for publishing.',
|
|
95
|
+
inputSchema: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {
|
|
98
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
99
|
+
archetype: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
enum: [
|
|
102
|
+
'single-breakdown',
|
|
103
|
+
'single-system',
|
|
104
|
+
'focused-toolkit',
|
|
105
|
+
'single-calculator',
|
|
106
|
+
'focused-directory',
|
|
107
|
+
'mini-training',
|
|
108
|
+
'one-story',
|
|
109
|
+
'prompt',
|
|
110
|
+
'assessment',
|
|
111
|
+
'workflow',
|
|
112
|
+
],
|
|
113
|
+
description: 'Content archetype/format',
|
|
114
|
+
},
|
|
115
|
+
concept: { type: 'object', description: 'The concept object from ideation' },
|
|
116
|
+
answers: {
|
|
117
|
+
type: 'object',
|
|
118
|
+
additionalProperties: { type: 'string' },
|
|
119
|
+
description: 'Key-value map of extraction question IDs to user answers',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
required: ['lead_magnet_id', 'archetype', 'concept', 'answers'],
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'magnetlab_write_linkedin_posts',
|
|
127
|
+
description: 'Generate 3 LinkedIn post variations to promote a lead magnet. Returns hooks, bodies, and CTAs optimized for LinkedIn engagement.',
|
|
128
|
+
inputSchema: {
|
|
129
|
+
type: 'object',
|
|
130
|
+
properties: {
|
|
131
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
132
|
+
lead_magnet_title: { type: 'string', description: 'Title of the lead magnet' },
|
|
133
|
+
contents: { type: 'string', description: 'Summary of what the lead magnet contains' },
|
|
134
|
+
problem_solved: { type: 'string', description: 'The core problem this lead magnet solves' },
|
|
135
|
+
},
|
|
136
|
+
required: ['lead_magnet_id', 'lead_magnet_title', 'contents', 'problem_solved'],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'magnetlab_polish_lead_magnet',
|
|
141
|
+
description: 'Polish/refine the generated content for a lead magnet. Improves formatting, readability, and impact. Runs AI enhancement on the extracted content.',
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: 'object',
|
|
144
|
+
properties: {
|
|
145
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
146
|
+
},
|
|
147
|
+
required: ['lead_magnet_id'],
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'magnetlab_get_job_status',
|
|
152
|
+
description: 'Check the status of a background job (e.g. ideation, content generation). Returns current status and result when complete.',
|
|
153
|
+
inputSchema: {
|
|
154
|
+
type: 'object',
|
|
155
|
+
properties: {
|
|
156
|
+
job_id: { type: 'string', description: 'Background job UUID' },
|
|
157
|
+
},
|
|
158
|
+
required: ['job_id'],
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export declare const tools: Tool[];
|
|
3
|
+
export { leadMagnetTools } from './lead-magnets.js';
|
|
4
|
+
export { ideationTools } from './ideation.js';
|
|
5
|
+
export { funnelTools } from './funnels.js';
|
|
6
|
+
export { leadTools } from './leads.js';
|
|
7
|
+
export { analyticsTools } from './analytics.js';
|
|
8
|
+
export { brandKitTools } from './brand-kit.js';
|
|
9
|
+
export { emailSequenceTools } from './email-sequences.js';
|
|
10
|
+
export { contentPipelineTools } from './content-pipeline.js';
|
|
11
|
+
export { swipeFileTools } from './swipe-file.js';
|
|
12
|
+
export { libraryTools } from './libraries.js';
|
|
13
|
+
export { qualificationFormTools } from './qualification-forms.js';
|
|
14
|
+
export declare const toolsByName: Map<string, {
|
|
15
|
+
inputSchema: {
|
|
16
|
+
[x: string]: unknown;
|
|
17
|
+
type: "object";
|
|
18
|
+
properties?: {
|
|
19
|
+
[x: string]: object;
|
|
20
|
+
} | undefined;
|
|
21
|
+
required?: string[] | undefined;
|
|
22
|
+
};
|
|
23
|
+
name: string;
|
|
24
|
+
description?: string | undefined;
|
|
25
|
+
outputSchema?: {
|
|
26
|
+
[x: string]: unknown;
|
|
27
|
+
type: "object";
|
|
28
|
+
properties?: {
|
|
29
|
+
[x: string]: object;
|
|
30
|
+
} | undefined;
|
|
31
|
+
required?: string[] | undefined;
|
|
32
|
+
} | undefined;
|
|
33
|
+
annotations?: {
|
|
34
|
+
title?: string | undefined;
|
|
35
|
+
readOnlyHint?: boolean | undefined;
|
|
36
|
+
destructiveHint?: boolean | undefined;
|
|
37
|
+
idempotentHint?: boolean | undefined;
|
|
38
|
+
openWorldHint?: boolean | undefined;
|
|
39
|
+
} | undefined;
|
|
40
|
+
execution?: {
|
|
41
|
+
taskSupport?: "optional" | "required" | "forbidden" | undefined;
|
|
42
|
+
} | undefined;
|
|
43
|
+
_meta?: {
|
|
44
|
+
[x: string]: unknown;
|
|
45
|
+
} | undefined;
|
|
46
|
+
icons?: {
|
|
47
|
+
src: string;
|
|
48
|
+
mimeType?: string | undefined;
|
|
49
|
+
sizes?: string[] | undefined;
|
|
50
|
+
theme?: "light" | "dark" | undefined;
|
|
51
|
+
}[] | undefined;
|
|
52
|
+
title?: string | undefined;
|
|
53
|
+
}>;
|
|
54
|
+
export declare const toolCategories: {
|
|
55
|
+
leadMagnets: string[];
|
|
56
|
+
ideation: string[];
|
|
57
|
+
funnels: string[];
|
|
58
|
+
leads: string[];
|
|
59
|
+
analytics: string[];
|
|
60
|
+
brandKit: string[];
|
|
61
|
+
emailSequences: string[];
|
|
62
|
+
contentPipeline: string[];
|
|
63
|
+
swipeFile: string[];
|
|
64
|
+
libraries: string[];
|
|
65
|
+
qualificationForms: string[];
|
|
66
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { leadMagnetTools } from './lead-magnets.js';
|
|
2
|
+
import { ideationTools } from './ideation.js';
|
|
3
|
+
import { funnelTools } from './funnels.js';
|
|
4
|
+
import { leadTools } from './leads.js';
|
|
5
|
+
import { analyticsTools } from './analytics.js';
|
|
6
|
+
import { brandKitTools } from './brand-kit.js';
|
|
7
|
+
import { emailSequenceTools } from './email-sequences.js';
|
|
8
|
+
import { contentPipelineTools } from './content-pipeline.js';
|
|
9
|
+
import { swipeFileTools } from './swipe-file.js';
|
|
10
|
+
import { libraryTools } from './libraries.js';
|
|
11
|
+
import { qualificationFormTools } from './qualification-forms.js';
|
|
12
|
+
export const tools = [
|
|
13
|
+
...leadMagnetTools,
|
|
14
|
+
...ideationTools,
|
|
15
|
+
...funnelTools,
|
|
16
|
+
...leadTools,
|
|
17
|
+
...analyticsTools,
|
|
18
|
+
...brandKitTools,
|
|
19
|
+
...emailSequenceTools,
|
|
20
|
+
...contentPipelineTools,
|
|
21
|
+
...swipeFileTools,
|
|
22
|
+
...libraryTools,
|
|
23
|
+
...qualificationFormTools,
|
|
24
|
+
];
|
|
25
|
+
// Re-export individual tool arrays for selective imports
|
|
26
|
+
export { leadMagnetTools } from './lead-magnets.js';
|
|
27
|
+
export { ideationTools } from './ideation.js';
|
|
28
|
+
export { funnelTools } from './funnels.js';
|
|
29
|
+
export { leadTools } from './leads.js';
|
|
30
|
+
export { analyticsTools } from './analytics.js';
|
|
31
|
+
export { brandKitTools } from './brand-kit.js';
|
|
32
|
+
export { emailSequenceTools } from './email-sequences.js';
|
|
33
|
+
export { contentPipelineTools } from './content-pipeline.js';
|
|
34
|
+
export { swipeFileTools } from './swipe-file.js';
|
|
35
|
+
export { libraryTools } from './libraries.js';
|
|
36
|
+
export { qualificationFormTools } from './qualification-forms.js';
|
|
37
|
+
// Tool lookup by name for handler routing
|
|
38
|
+
export const toolsByName = new Map(tools.map((tool) => [tool.name, tool]));
|
|
39
|
+
// Get tool names by category
|
|
40
|
+
export const toolCategories = {
|
|
41
|
+
leadMagnets: leadMagnetTools.map((t) => t.name),
|
|
42
|
+
ideation: ideationTools.map((t) => t.name),
|
|
43
|
+
funnels: funnelTools.map((t) => t.name),
|
|
44
|
+
leads: leadTools.map((t) => t.name),
|
|
45
|
+
analytics: analyticsTools.map((t) => t.name),
|
|
46
|
+
brandKit: brandKitTools.map((t) => t.name),
|
|
47
|
+
emailSequences: emailSequenceTools.map((t) => t.name),
|
|
48
|
+
contentPipeline: contentPipelineTools.map((t) => t.name),
|
|
49
|
+
swipeFile: swipeFileTools.map((t) => t.name),
|
|
50
|
+
libraries: libraryTools.map((t) => t.name),
|
|
51
|
+
qualificationForms: qualificationFormTools.map((t) => t.name),
|
|
52
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export const leadMagnetTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_list_lead_magnets',
|
|
4
|
+
description: 'List all lead magnets for the current user. Returns title, archetype, status, and creation date. Use the status filter to find drafts, published, or in-progress lead magnets.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
status: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
enum: ['draft', 'extracting', 'generating', 'content_ready', 'complete', 'published'],
|
|
11
|
+
description: 'Filter by lead magnet status',
|
|
12
|
+
},
|
|
13
|
+
limit: { type: 'number', default: 50, description: 'Max results to return (1-100)' },
|
|
14
|
+
offset: { type: 'number', default: 0, description: 'Offset for pagination' },
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'magnetlab_get_lead_magnet',
|
|
20
|
+
description: 'Get full details of a single lead magnet including its concept, extracted content, generated content, LinkedIn posts, post variations, DM template, and CTA word.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
id: { type: 'string', description: 'Lead magnet UUID' },
|
|
25
|
+
},
|
|
26
|
+
required: ['id'],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'magnetlab_create_lead_magnet',
|
|
31
|
+
description: 'Create a new lead magnet. Choose an archetype (e.g. single-breakdown, focused-toolkit, assessment) and provide a title. Optionally include concept data, extracted content, or post variations if pre-generated.',
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
title: { type: 'string', description: 'Lead magnet title' },
|
|
36
|
+
archetype: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
enum: [
|
|
39
|
+
'single-breakdown',
|
|
40
|
+
'single-system',
|
|
41
|
+
'focused-toolkit',
|
|
42
|
+
'single-calculator',
|
|
43
|
+
'focused-directory',
|
|
44
|
+
'mini-training',
|
|
45
|
+
'one-story',
|
|
46
|
+
'prompt',
|
|
47
|
+
'assessment',
|
|
48
|
+
'workflow',
|
|
49
|
+
],
|
|
50
|
+
description: 'Content archetype/format',
|
|
51
|
+
},
|
|
52
|
+
concept: { type: 'object', description: 'Concept data (optional, from ideation)' },
|
|
53
|
+
},
|
|
54
|
+
required: ['title', 'archetype'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'magnetlab_delete_lead_magnet',
|
|
59
|
+
description: 'Permanently delete a lead magnet. This also removes associated funnel pages and leads.',
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
id: { type: 'string', description: 'Lead magnet UUID to delete' },
|
|
64
|
+
},
|
|
65
|
+
required: ['id'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'magnetlab_get_lead_magnet_stats',
|
|
70
|
+
description: 'Get performance statistics for a specific lead magnet: page views, leads captured, and conversion rate.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
75
|
+
},
|
|
76
|
+
required: ['lead_magnet_id'],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'magnetlab_analyze_competitor',
|
|
81
|
+
description: 'Analyze a competitor URL to extract insights for lead magnet ideation. Provide a URL to a landing page, lead magnet, or content piece.',
|
|
82
|
+
inputSchema: {
|
|
83
|
+
type: 'object',
|
|
84
|
+
properties: {
|
|
85
|
+
url: { type: 'string', description: 'URL of the competitor content to analyze' },
|
|
86
|
+
},
|
|
87
|
+
required: ['url'],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'magnetlab_analyze_transcript',
|
|
92
|
+
description: 'Analyze a sales call or podcast transcript to extract lead magnet ideas, pain points, and content themes.',
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: 'object',
|
|
95
|
+
properties: {
|
|
96
|
+
transcript: { type: 'string', description: 'Full text of the transcript to analyze' },
|
|
97
|
+
},
|
|
98
|
+
required: ['transcript'],
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const leadTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_list_leads',
|
|
4
|
+
description: 'List captured leads with filtering and pagination. Returns email, name, qualification status, UTM data, and which funnel/lead magnet they came from. Use search to find leads by email or name.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
funnel_id: { type: 'string', description: 'Filter by specific funnel page UUID' },
|
|
9
|
+
lead_magnet_id: { type: 'string', description: 'Filter by lead magnet UUID' },
|
|
10
|
+
qualified: {
|
|
11
|
+
type: 'boolean',
|
|
12
|
+
description: 'Filter by qualification status (true = qualified, false = unqualified)',
|
|
13
|
+
},
|
|
14
|
+
search: { type: 'string', description: 'Search by email or name (case-insensitive)' },
|
|
15
|
+
limit: { type: 'number', default: 50, description: 'Max results (1-100)' },
|
|
16
|
+
offset: { type: 'number', default: 0, description: 'Pagination offset' },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'magnetlab_export_leads',
|
|
22
|
+
description: 'Export leads as CSV file. Filter by funnel, lead magnet, or qualification status. Returns CSV text with headers: email, name, qualified, lead_magnet, funnel_slug, answers, utm_source, utm_medium, utm_campaign, created_at.',
|
|
23
|
+
inputSchema: {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
funnel_id: { type: 'string', description: 'Filter by funnel page UUID' },
|
|
27
|
+
lead_magnet_id: { type: 'string', description: 'Filter by lead magnet UUID' },
|
|
28
|
+
qualified: { type: 'boolean', description: 'Filter by qualification status' },
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export const libraryTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_list_libraries',
|
|
4
|
+
description: 'List all content libraries. Libraries are collections of resources (links, files, documents) that can be gated behind funnel pages.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {},
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: 'magnetlab_get_library',
|
|
12
|
+
description: 'Get full details of a content library including its name, description, and metadata.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
id: { type: 'string', description: 'Library UUID' },
|
|
17
|
+
},
|
|
18
|
+
required: ['id'],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'magnetlab_create_library',
|
|
23
|
+
description: 'Create a new content library. Add items to it afterward, then create a funnel page to gate access.',
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {
|
|
27
|
+
name: { type: 'string', description: 'Library name' },
|
|
28
|
+
description: { type: 'string', description: 'Library description' },
|
|
29
|
+
},
|
|
30
|
+
required: ['name'],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'magnetlab_update_library',
|
|
35
|
+
description: 'Update a library\'s name or description.',
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {
|
|
39
|
+
id: { type: 'string', description: 'Library UUID' },
|
|
40
|
+
name: { type: 'string', description: 'New name' },
|
|
41
|
+
description: { type: 'string', description: 'New description' },
|
|
42
|
+
},
|
|
43
|
+
required: ['id'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'magnetlab_delete_library',
|
|
48
|
+
description: 'Delete a content library and all its items.',
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
id: { type: 'string', description: 'Library UUID' },
|
|
53
|
+
},
|
|
54
|
+
required: ['id'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'magnetlab_list_library_items',
|
|
59
|
+
description: 'List all items in a content library.',
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
library_id: { type: 'string', description: 'Library UUID' },
|
|
64
|
+
},
|
|
65
|
+
required: ['library_id'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'magnetlab_create_library_item',
|
|
70
|
+
description: 'Add a new item to a content library.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
library_id: { type: 'string', description: 'Library UUID' },
|
|
75
|
+
title: { type: 'string', description: 'Item title' },
|
|
76
|
+
url: { type: 'string', description: 'Resource URL' },
|
|
77
|
+
description: { type: 'string', description: 'Item description' },
|
|
78
|
+
type: { type: 'string', description: 'Item type (e.g. link, file, video)' },
|
|
79
|
+
},
|
|
80
|
+
required: ['library_id', 'title'],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|