@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,10 @@
|
|
|
1
|
+
export const analyticsTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_get_funnel_stats',
|
|
4
|
+
description: 'Get aggregate statistics for all your funnel pages. Returns per-funnel breakdown of total leads, qualified leads, unqualified leads, page views, conversion rate (views-to-leads), and qualification rate.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {},
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
];
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export const brandKitTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_get_brand_kit',
|
|
4
|
+
description: 'Get the user\'s brand kit / business context. Returns business description, type, credibility markers, pain points, templates, processes, tools, questions, results, tone, style profile, and any saved ideation results.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {},
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: 'magnetlab_update_brand_kit',
|
|
12
|
+
description: 'Create or update the user\'s brand kit. This is the foundation for AI-powered ideation and content generation. Provide as much business context as possible for better results.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
business_description: { type: 'string', description: 'What your business does and who you serve' },
|
|
17
|
+
business_type: { type: 'string', description: 'Business category (e.g. "B2B SaaS", "Agency")' },
|
|
18
|
+
credibility_markers: {
|
|
19
|
+
type: 'array',
|
|
20
|
+
items: { type: 'string' },
|
|
21
|
+
description: 'Social proof and credentials',
|
|
22
|
+
},
|
|
23
|
+
urgent_pains: {
|
|
24
|
+
type: 'array',
|
|
25
|
+
items: { type: 'string' },
|
|
26
|
+
description: 'Top audience pain points',
|
|
27
|
+
},
|
|
28
|
+
templates: {
|
|
29
|
+
type: 'array',
|
|
30
|
+
items: { type: 'string' },
|
|
31
|
+
description: 'Templates/frameworks you use',
|
|
32
|
+
},
|
|
33
|
+
processes: {
|
|
34
|
+
type: 'array',
|
|
35
|
+
items: { type: 'string' },
|
|
36
|
+
description: 'Key processes or methods',
|
|
37
|
+
},
|
|
38
|
+
tools: {
|
|
39
|
+
type: 'array',
|
|
40
|
+
items: { type: 'string' },
|
|
41
|
+
description: 'Tools you recommend',
|
|
42
|
+
},
|
|
43
|
+
frequent_questions: {
|
|
44
|
+
type: 'array',
|
|
45
|
+
items: { type: 'string' },
|
|
46
|
+
description: 'Common prospect questions',
|
|
47
|
+
},
|
|
48
|
+
results: {
|
|
49
|
+
type: 'array',
|
|
50
|
+
items: { type: 'string' },
|
|
51
|
+
description: 'Typical outcomes you deliver',
|
|
52
|
+
},
|
|
53
|
+
success_example: { type: 'string', description: 'A specific client success story' },
|
|
54
|
+
audience_tools: {
|
|
55
|
+
type: 'array',
|
|
56
|
+
items: { type: 'string' },
|
|
57
|
+
description: 'Tools your audience currently uses',
|
|
58
|
+
},
|
|
59
|
+
preferred_tone: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'Writing tone (e.g. "conversational", "professional", "bold")',
|
|
62
|
+
},
|
|
63
|
+
style_profile: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
description: 'Advanced style profile settings (AI-extracted)',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'magnetlab_extract_business_context',
|
|
72
|
+
description: 'Extract business context from unstructured content (e.g. an offer document, LinkedIn about section, or sales page). Paste the text and the AI will parse out business description, pain points, credibility markers, etc. to populate your brand kit.',
|
|
73
|
+
inputSchema: {
|
|
74
|
+
type: 'object',
|
|
75
|
+
properties: {
|
|
76
|
+
content: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'The raw text to extract business context from (min 50 characters)',
|
|
79
|
+
},
|
|
80
|
+
content_type: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
enum: ['offer-doc', 'linkedin', 'sales-page', 'other'],
|
|
83
|
+
description: 'Type of content for better extraction (optional)',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['content'],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
];
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
export const contentPipelineTools = [
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Transcripts
|
|
4
|
+
// ============================================================
|
|
5
|
+
{
|
|
6
|
+
name: 'magnetlab_list_transcripts',
|
|
7
|
+
description: 'List all call transcripts in the AI Brain. Shows source (paste/grain/fireflies), title, date, duration, and whether ideas/knowledge have been extracted from each transcript.',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {},
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'magnetlab_submit_transcript',
|
|
15
|
+
description: 'Submit a call transcript for AI processing. The transcript is analyzed to extract knowledge entries (insights, questions, pain points) and content ideas. Minimum 100 characters.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
transcript: { type: 'string', description: 'Full transcript text (min 100 characters)' },
|
|
20
|
+
title: { type: 'string', description: 'Title/label for this transcript (optional)' },
|
|
21
|
+
},
|
|
22
|
+
required: ['transcript'],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'magnetlab_delete_transcript',
|
|
27
|
+
description: 'Delete a transcript and all its extracted knowledge entries and content ideas (cascading delete).',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {
|
|
31
|
+
id: { type: 'string', description: 'Transcript UUID' },
|
|
32
|
+
},
|
|
33
|
+
required: ['id'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
// ============================================================
|
|
37
|
+
// Knowledge Base (AI Brain)
|
|
38
|
+
// ============================================================
|
|
39
|
+
{
|
|
40
|
+
name: 'magnetlab_search_knowledge',
|
|
41
|
+
description: 'Semantic search across the AI Brain knowledge base. Uses pgvector embeddings for similarity matching. Filter by category: insight, question, pain_point, success_story, objection, framework, quote, market_intel.',
|
|
42
|
+
inputSchema: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
properties: {
|
|
45
|
+
query: { type: 'string', description: 'Natural language search query' },
|
|
46
|
+
category: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
enum: ['insight', 'question', 'pain_point', 'success_story', 'objection', 'framework', 'quote', 'market_intel'],
|
|
49
|
+
description: 'Filter by knowledge category',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: ['query'],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'magnetlab_browse_knowledge',
|
|
57
|
+
description: 'Browse knowledge base entries by category. Returns recent entries without search. Use for exploring what the AI Brain contains.',
|
|
58
|
+
inputSchema: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
properties: {
|
|
61
|
+
category: {
|
|
62
|
+
type: 'string',
|
|
63
|
+
enum: ['insight', 'question', 'pain_point', 'success_story', 'objection', 'framework', 'quote', 'market_intel'],
|
|
64
|
+
description: 'Category to browse (default: insight)',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'magnetlab_get_knowledge_tags',
|
|
71
|
+
description: 'Get all tags used in the knowledge base with their usage counts. Useful for understanding what topics are covered.',
|
|
72
|
+
inputSchema: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'magnetlab_get_knowledge_clusters',
|
|
79
|
+
description: 'Get topic clusters from the knowledge base. Groups related knowledge entries together to show themes and patterns.',
|
|
80
|
+
inputSchema: {
|
|
81
|
+
type: 'object',
|
|
82
|
+
properties: {},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
// ============================================================
|
|
86
|
+
// Content Ideas
|
|
87
|
+
// ============================================================
|
|
88
|
+
{
|
|
89
|
+
name: 'magnetlab_list_ideas',
|
|
90
|
+
description: 'List content ideas extracted from transcripts. Filter by status, content pillar, or content type. Ideas have title, core insight, why they are post-worthy, and a relevance score.',
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
properties: {
|
|
94
|
+
status: {
|
|
95
|
+
type: 'string',
|
|
96
|
+
enum: ['extracted', 'selected', 'writing', 'written', 'scheduled', 'published', 'archived'],
|
|
97
|
+
description: 'Filter by idea status',
|
|
98
|
+
},
|
|
99
|
+
pillar: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
enum: ['moments_that_matter', 'teaching_promotion', 'human_personal', 'collaboration_social_proof'],
|
|
102
|
+
description: 'Filter by content pillar',
|
|
103
|
+
},
|
|
104
|
+
content_type: {
|
|
105
|
+
type: 'string',
|
|
106
|
+
enum: ['story', 'insight', 'tip', 'framework', 'case_study', 'question', 'listicle', 'contrarian'],
|
|
107
|
+
description: 'Filter by content type',
|
|
108
|
+
},
|
|
109
|
+
limit: { type: 'number', default: 50, description: 'Max results' },
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'magnetlab_get_idea',
|
|
115
|
+
description: 'Get full details of a content idea including its transcript context and writing status.',
|
|
116
|
+
inputSchema: {
|
|
117
|
+
type: 'object',
|
|
118
|
+
properties: {
|
|
119
|
+
id: { type: 'string', description: 'Content idea UUID' },
|
|
120
|
+
},
|
|
121
|
+
required: ['id'],
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'magnetlab_update_idea_status',
|
|
126
|
+
description: 'Update the status of a content idea. Use to mark ideas as selected for writing, archive them, etc.',
|
|
127
|
+
inputSchema: {
|
|
128
|
+
type: 'object',
|
|
129
|
+
properties: {
|
|
130
|
+
idea_id: { type: 'string', description: 'Content idea UUID' },
|
|
131
|
+
status: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
enum: ['extracted', 'selected', 'writing', 'written', 'scheduled', 'published', 'archived'],
|
|
134
|
+
description: 'New status',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
required: ['idea_id', 'status'],
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'magnetlab_delete_idea',
|
|
142
|
+
description: 'Delete a content idea.',
|
|
143
|
+
inputSchema: {
|
|
144
|
+
type: 'object',
|
|
145
|
+
properties: {
|
|
146
|
+
id: { type: 'string', description: 'Content idea UUID' },
|
|
147
|
+
},
|
|
148
|
+
required: ['id'],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'magnetlab_write_post_from_idea',
|
|
153
|
+
description: 'Generate a LinkedIn post draft from a content idea using AI. The idea\'s insight, context, and pillar are used to write an engaging post.',
|
|
154
|
+
inputSchema: {
|
|
155
|
+
type: 'object',
|
|
156
|
+
properties: {
|
|
157
|
+
idea_id: { type: 'string', description: 'Content idea UUID to write from' },
|
|
158
|
+
},
|
|
159
|
+
required: ['idea_id'],
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
// ============================================================
|
|
163
|
+
// Pipeline Posts
|
|
164
|
+
// ============================================================
|
|
165
|
+
{
|
|
166
|
+
name: 'magnetlab_list_posts',
|
|
167
|
+
description: 'List posts in the content pipeline. Filter by status (draft, review, approved, scheduled, published, archived) or buffer status.',
|
|
168
|
+
inputSchema: {
|
|
169
|
+
type: 'object',
|
|
170
|
+
properties: {
|
|
171
|
+
status: {
|
|
172
|
+
type: 'string',
|
|
173
|
+
enum: ['draft', 'review', 'approved', 'scheduled', 'published', 'archived'],
|
|
174
|
+
description: 'Filter by post status',
|
|
175
|
+
},
|
|
176
|
+
is_buffer: {
|
|
177
|
+
type: 'boolean',
|
|
178
|
+
description: 'Filter for buffer posts only (true) or non-buffer (false)',
|
|
179
|
+
},
|
|
180
|
+
limit: { type: 'number', default: 50, description: 'Max results' },
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: 'magnetlab_get_post',
|
|
186
|
+
description: 'Get full details of a pipeline post including draft and final content, hook score, polish notes, and scheduling info.',
|
|
187
|
+
inputSchema: {
|
|
188
|
+
type: 'object',
|
|
189
|
+
properties: {
|
|
190
|
+
id: { type: 'string', description: 'Pipeline post UUID' },
|
|
191
|
+
},
|
|
192
|
+
required: ['id'],
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'magnetlab_update_post',
|
|
197
|
+
description: 'Update a pipeline post. Can change content, status, scheduling, or other fields.',
|
|
198
|
+
inputSchema: {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
id: { type: 'string', description: 'Pipeline post UUID' },
|
|
202
|
+
draft_content: { type: 'string', description: 'Updated draft content' },
|
|
203
|
+
final_content: { type: 'string', description: 'Updated final content' },
|
|
204
|
+
status: {
|
|
205
|
+
type: 'string',
|
|
206
|
+
enum: ['draft', 'review', 'approved', 'scheduled', 'published', 'archived'],
|
|
207
|
+
},
|
|
208
|
+
dm_template: { type: 'string', description: 'DM template text' },
|
|
209
|
+
cta_word: { type: 'string', description: 'CTA keyword' },
|
|
210
|
+
},
|
|
211
|
+
required: ['id'],
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'magnetlab_delete_post',
|
|
216
|
+
description: 'Delete a pipeline post.',
|
|
217
|
+
inputSchema: {
|
|
218
|
+
type: 'object',
|
|
219
|
+
properties: {
|
|
220
|
+
id: { type: 'string', description: 'Pipeline post UUID' },
|
|
221
|
+
},
|
|
222
|
+
required: ['id'],
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
name: 'magnetlab_polish_post',
|
|
227
|
+
description: 'Run AI polish on a pipeline post. Detects AI patterns, improves hook strength, and refines the writing. Returns changes made and a hook score.',
|
|
228
|
+
inputSchema: {
|
|
229
|
+
type: 'object',
|
|
230
|
+
properties: {
|
|
231
|
+
id: { type: 'string', description: 'Pipeline post UUID' },
|
|
232
|
+
},
|
|
233
|
+
required: ['id'],
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
name: 'magnetlab_publish_post',
|
|
238
|
+
description: 'Publish a pipeline post immediately (marks as published, triggers LeadShark if connected).',
|
|
239
|
+
inputSchema: {
|
|
240
|
+
type: 'object',
|
|
241
|
+
properties: {
|
|
242
|
+
id: { type: 'string', description: 'Pipeline post UUID' },
|
|
243
|
+
},
|
|
244
|
+
required: ['id'],
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'magnetlab_schedule_post',
|
|
249
|
+
description: 'Schedule a pipeline post for future publishing.',
|
|
250
|
+
inputSchema: {
|
|
251
|
+
type: 'object',
|
|
252
|
+
properties: {
|
|
253
|
+
post_id: { type: 'string', description: 'Pipeline post UUID' },
|
|
254
|
+
scheduled_time: {
|
|
255
|
+
type: 'string',
|
|
256
|
+
format: 'date-time',
|
|
257
|
+
description: 'ISO 8601 datetime for publishing',
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
required: ['post_id', 'scheduled_time'],
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: 'magnetlab_get_posts_by_date_range',
|
|
265
|
+
description: 'Get all pipeline posts within a date range. Useful for viewing the content calendar.',
|
|
266
|
+
inputSchema: {
|
|
267
|
+
type: 'object',
|
|
268
|
+
properties: {
|
|
269
|
+
start_date: { type: 'string', format: 'date', description: 'Start date (YYYY-MM-DD)' },
|
|
270
|
+
end_date: { type: 'string', format: 'date', description: 'End date (YYYY-MM-DD)' },
|
|
271
|
+
},
|
|
272
|
+
required: ['start_date', 'end_date'],
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
name: 'magnetlab_quick_write',
|
|
277
|
+
description: 'Quickly write a LinkedIn post on any topic using AI. Optionally specify a writing style or template to follow.',
|
|
278
|
+
inputSchema: {
|
|
279
|
+
type: 'object',
|
|
280
|
+
properties: {
|
|
281
|
+
topic: { type: 'string', description: 'Topic or prompt for the post' },
|
|
282
|
+
style: { type: 'string', description: 'Writing style ID to use (optional)' },
|
|
283
|
+
template: { type: 'string', description: 'Template ID to follow (optional)' },
|
|
284
|
+
},
|
|
285
|
+
required: ['topic'],
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
// ============================================================
|
|
289
|
+
// Schedule & Autopilot
|
|
290
|
+
// ============================================================
|
|
291
|
+
{
|
|
292
|
+
name: 'magnetlab_list_posting_slots',
|
|
293
|
+
description: 'List all posting time slots. These define when autopilot publishes posts (day of week + time).',
|
|
294
|
+
inputSchema: {
|
|
295
|
+
type: 'object',
|
|
296
|
+
properties: {},
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
name: 'magnetlab_create_posting_slot',
|
|
301
|
+
description: 'Create a new posting time slot for the autopilot schedule.',
|
|
302
|
+
inputSchema: {
|
|
303
|
+
type: 'object',
|
|
304
|
+
properties: {
|
|
305
|
+
day_of_week: {
|
|
306
|
+
type: 'number',
|
|
307
|
+
description: 'Day of week (0=Sunday, 1=Monday, ..., 6=Saturday)',
|
|
308
|
+
},
|
|
309
|
+
time: { type: 'string', description: 'Time in HH:mm format (24h)' },
|
|
310
|
+
},
|
|
311
|
+
required: ['day_of_week', 'time'],
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: 'magnetlab_delete_posting_slot',
|
|
316
|
+
description: 'Delete a posting time slot.',
|
|
317
|
+
inputSchema: {
|
|
318
|
+
type: 'object',
|
|
319
|
+
properties: {
|
|
320
|
+
id: { type: 'string', description: 'Posting slot UUID' },
|
|
321
|
+
},
|
|
322
|
+
required: ['id'],
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: 'magnetlab_get_autopilot_status',
|
|
327
|
+
description: 'Get current autopilot status: buffer size (how many posts ready), next scheduled slot, and content pillar distribution.',
|
|
328
|
+
inputSchema: {
|
|
329
|
+
type: 'object',
|
|
330
|
+
properties: {},
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: 'magnetlab_trigger_autopilot',
|
|
335
|
+
description: 'Trigger the autopilot to generate new posts. It draws from content ideas and the knowledge base to fill the buffer. Configure batch size and buffer target.',
|
|
336
|
+
inputSchema: {
|
|
337
|
+
type: 'object',
|
|
338
|
+
properties: {
|
|
339
|
+
posts_per_batch: {
|
|
340
|
+
type: 'number',
|
|
341
|
+
description: 'How many posts to generate (1-10, default: 3)',
|
|
342
|
+
},
|
|
343
|
+
buffer_target: {
|
|
344
|
+
type: 'number',
|
|
345
|
+
description: 'Target buffer size to maintain (1-20, default: 5)',
|
|
346
|
+
},
|
|
347
|
+
auto_publish: {
|
|
348
|
+
type: 'boolean',
|
|
349
|
+
description: 'Auto-publish generated posts (default: false)',
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
name: 'magnetlab_get_buffer',
|
|
356
|
+
description: 'Get the current content buffer (posts queued for publishing). Review and approve/reject these before they auto-publish.',
|
|
357
|
+
inputSchema: {
|
|
358
|
+
type: 'object',
|
|
359
|
+
properties: {},
|
|
360
|
+
},
|
|
361
|
+
},
|
|
362
|
+
// ============================================================
|
|
363
|
+
// Writing Styles & Templates
|
|
364
|
+
// ============================================================
|
|
365
|
+
{
|
|
366
|
+
name: 'magnetlab_list_writing_styles',
|
|
367
|
+
description: 'List active writing styles. These are AI-extracted style profiles from LinkedIn creators that guide how posts are written.',
|
|
368
|
+
inputSchema: {
|
|
369
|
+
type: 'object',
|
|
370
|
+
properties: {},
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
name: 'magnetlab_extract_writing_style',
|
|
375
|
+
description: 'Extract a writing style profile from a LinkedIn creator\'s URL. Analyzes their posts to capture tone, formatting, hook patterns, and voice characteristics.',
|
|
376
|
+
inputSchema: {
|
|
377
|
+
type: 'object',
|
|
378
|
+
properties: {
|
|
379
|
+
linkedin_url: {
|
|
380
|
+
type: 'string',
|
|
381
|
+
description: 'LinkedIn profile URL to extract style from',
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
required: ['linkedin_url'],
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
name: 'magnetlab_get_writing_style',
|
|
389
|
+
description: 'Get full details of a writing style profile including analyzed posts and style characteristics.',
|
|
390
|
+
inputSchema: {
|
|
391
|
+
type: 'object',
|
|
392
|
+
properties: {
|
|
393
|
+
id: { type: 'string', description: 'Writing style UUID' },
|
|
394
|
+
},
|
|
395
|
+
required: ['id'],
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
name: 'magnetlab_list_templates',
|
|
400
|
+
description: 'List post templates. Templates provide reusable structures (hooks, frameworks, CTAs) for consistent post writing.',
|
|
401
|
+
inputSchema: {
|
|
402
|
+
type: 'object',
|
|
403
|
+
properties: {
|
|
404
|
+
limit: { type: 'number', default: 50, description: 'Max results' },
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
name: 'magnetlab_match_template',
|
|
410
|
+
description: 'Find the best matching templates for a content idea. Uses semantic similarity to suggest templates that fit the idea\'s topic and style.',
|
|
411
|
+
inputSchema: {
|
|
412
|
+
type: 'object',
|
|
413
|
+
properties: {
|
|
414
|
+
idea_id: { type: 'string', description: 'Content idea UUID to match against' },
|
|
415
|
+
},
|
|
416
|
+
required: ['idea_id'],
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
// ============================================================
|
|
420
|
+
// Content Planner
|
|
421
|
+
// ============================================================
|
|
422
|
+
{
|
|
423
|
+
name: 'magnetlab_get_plan',
|
|
424
|
+
description: 'Get the current content plan. Shows the planned content calendar with assigned ideas, templates, and statuses.',
|
|
425
|
+
inputSchema: {
|
|
426
|
+
type: 'object',
|
|
427
|
+
properties: {},
|
|
428
|
+
},
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
name: 'magnetlab_generate_plan',
|
|
432
|
+
description: 'Generate a new content plan using AI. Creates a balanced mix of content types and pillars across the specified number of weeks.',
|
|
433
|
+
inputSchema: {
|
|
434
|
+
type: 'object',
|
|
435
|
+
properties: {
|
|
436
|
+
week_count: { type: 'number', description: 'Number of weeks to plan (default: 1)' },
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
name: 'magnetlab_approve_plan',
|
|
442
|
+
description: 'Approve a generated content plan. Converts planned items into pipeline posts ready for writing.',
|
|
443
|
+
inputSchema: {
|
|
444
|
+
type: 'object',
|
|
445
|
+
properties: {
|
|
446
|
+
plan_id: { type: 'string', description: 'Content plan UUID to approve' },
|
|
447
|
+
},
|
|
448
|
+
required: ['plan_id'],
|
|
449
|
+
},
|
|
450
|
+
},
|
|
451
|
+
// ============================================================
|
|
452
|
+
// Business Context (Content Pipeline)
|
|
453
|
+
// ============================================================
|
|
454
|
+
{
|
|
455
|
+
name: 'magnetlab_get_business_context',
|
|
456
|
+
description: 'Get the content pipeline business context. This is separate from the brand kit and focuses on content strategy (pillars, audience, topics).',
|
|
457
|
+
inputSchema: {
|
|
458
|
+
type: 'object',
|
|
459
|
+
properties: {},
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
name: 'magnetlab_update_business_context',
|
|
464
|
+
description: 'Update the content pipeline business context used for AI content generation.',
|
|
465
|
+
inputSchema: {
|
|
466
|
+
type: 'object',
|
|
467
|
+
properties: {
|
|
468
|
+
context: {
|
|
469
|
+
type: 'object',
|
|
470
|
+
description: 'Business context fields to update',
|
|
471
|
+
},
|
|
472
|
+
},
|
|
473
|
+
required: ['context'],
|
|
474
|
+
},
|
|
475
|
+
},
|
|
476
|
+
];
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export const emailSequenceTools = [
|
|
2
|
+
{
|
|
3
|
+
name: 'magnetlab_get_email_sequence',
|
|
4
|
+
description: 'Get the email sequence (welcome drip) for a specific lead magnet. Returns the sequence of emails with subject, body, day offset, and reply trigger for each email. Returns null if no sequence exists yet.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
9
|
+
},
|
|
10
|
+
required: ['lead_magnet_id'],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'magnetlab_generate_email_sequence',
|
|
15
|
+
description: 'Generate a 5-email welcome sequence for a lead magnet using AI. Creates personalized emails based on the lead magnet content and brand kit. Set useAI=false for template-based defaults.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
20
|
+
use_ai: {
|
|
21
|
+
type: 'boolean',
|
|
22
|
+
default: true,
|
|
23
|
+
description: 'Use AI generation (true) or template defaults (false)',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ['lead_magnet_id'],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'magnetlab_update_email_sequence',
|
|
31
|
+
description: 'Update emails in a sequence or change its status. When emails are edited, sync status resets to draft. Each email needs: day (number), subject, body, and replyTrigger (keyword).',
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
36
|
+
emails: {
|
|
37
|
+
type: 'array',
|
|
38
|
+
items: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
day: { type: 'number', description: 'Day offset from opt-in (e.g. 0, 1, 3, 5, 7)' },
|
|
42
|
+
subject: { type: 'string', description: 'Email subject line' },
|
|
43
|
+
body: { type: 'string', description: 'Email body (supports HTML)' },
|
|
44
|
+
reply_trigger: { type: 'string', description: 'Keyword that triggers this email type' },
|
|
45
|
+
},
|
|
46
|
+
required: ['day', 'subject', 'body', 'reply_trigger'],
|
|
47
|
+
},
|
|
48
|
+
description: 'Full email array (replaces existing)',
|
|
49
|
+
},
|
|
50
|
+
status: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
enum: ['draft', 'synced', 'active'],
|
|
53
|
+
description: 'Set sequence status',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
required: ['lead_magnet_id'],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'magnetlab_activate_email_sequence',
|
|
61
|
+
description: 'Activate an email sequence to start sending to new leads. Syncs with the email provider (Loops/Resend).',
|
|
62
|
+
inputSchema: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
lead_magnet_id: { type: 'string', description: 'Lead magnet UUID' },
|
|
66
|
+
},
|
|
67
|
+
required: ['lead_magnet_id'],
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
];
|