@leadshark/mcp-server 1.0.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 ADDED
@@ -0,0 +1,323 @@
1
+ # @leadshark/mcp-server
2
+
3
+ Talk to your LinkedIn growth engine.
4
+
5
+ The LeadShark MCP server lets you control posts, automations, DMs, and limits
6
+ using natural language inside Cursor, Claude Desktop, OpenClaw, or any MCP-compatible client.
7
+
8
+ ---
9
+
10
+ ## What You Can Do
11
+
12
+ With MCP access, you can:
13
+
14
+ - Inspect your latest LinkedIn posts and performance
15
+ - Create comment → DM automations safely (draft-first)
16
+ - Pause, resume, and modify live automations
17
+ - Schedule posts with automation pre-wired
18
+ - Control daily DM volume or emergency-stop instantly
19
+
20
+ All actions are:
21
+ - auditable
22
+ - rate-limited
23
+ - reversible
24
+
25
+ Everything runs against your existing LeadShark account and respects plan limits.
26
+
27
+ ---
28
+
29
+ ## Who This Is For
30
+
31
+ - Existing power-users already running LeadShark automations
32
+ - Founders using Cursor or Claude as a daily control surface
33
+ - Operators who want to manage LinkedIn growth without dashboards
34
+
35
+ ## Who This Is Not For
36
+
37
+ - Users new to LeadShark or new to automations
38
+ - Fully autonomous agents without human review
39
+ - High-frequency bot orchestration or spam workflows
40
+
41
+ There is a human-in-the-loop control layer by design.
42
+
43
+ ---
44
+
45
+ ## Requirements
46
+
47
+ - **LeadShark Pro+ or Apex subscription** (MCP access is Pro+ exclusive as of Feb 2026)
48
+ - **API Key** – generate one at https://apex.leadshark.io/docs/api
49
+ - **Node.js 18+**
50
+
51
+ ---
52
+
53
+ ## Installation
54
+
55
+ ```bash
56
+ npm install -g @leadshark/mcp-server
57
+ ```
58
+
59
+ This installs the `leadshark-mcp` command globally.
60
+
61
+ ---
62
+
63
+ ## Configuration
64
+
65
+ ### Cursor
66
+
67
+ Add the following to your Cursor MCP config (`~/.cursor/mcp.json`):
68
+
69
+ ```json
70
+ {
71
+ "mcpServers": {
72
+ "leadshark": {
73
+ "command": "leadshark-mcp",
74
+ "env": {
75
+ "LEADSHARK_API_KEY": "your_api_key_here"
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ Restart Cursor after saving.
83
+
84
+ ---
85
+
86
+ ### Claude Desktop (macOS)
87
+
88
+ Add the following to:
89
+
90
+ `~/Library/Application Support/Claude/claude_desktop_config.json`
91
+
92
+ ```json
93
+ {
94
+ "mcpServers": {
95
+ "leadshark": {
96
+ "command": "leadshark-mcp",
97
+ "env": {
98
+ "LEADSHARK_API_KEY": "your_api_key_here"
99
+ }
100
+ }
101
+ }
102
+ }
103
+ ```
104
+
105
+ Restart Claude Desktop after saving.
106
+
107
+ ---
108
+
109
+ ## Verify Setup
110
+
111
+ Once connected, try:
112
+
113
+ ```
114
+ "Show me my recent LinkedIn posts"
115
+ ```
116
+
117
+ If configured correctly, LeadShark will return your latest posts with engagement
118
+ and automation status (if exists).
119
+
120
+ ---
121
+
122
+ ## Tool Mental Model
123
+
124
+ Think of the MCP tools as verbs on your growth system:
125
+
126
+ * **Inspect**
127
+
128
+ * `list_recent_posts`
129
+ * `list_automations`
130
+
131
+ * **Create**
132
+
133
+ * `create_automation`
134
+ * `schedule_post_with_automation`
135
+
136
+ * **Modify**
137
+
138
+ * `edit_automation`
139
+ * `set_daily_dm_limit`
140
+
141
+ You describe intent. MCP handles sequencing, safety, and execution.
142
+
143
+ ---
144
+
145
+ ## Available Tools
146
+
147
+ ### `list_recent_posts`
148
+
149
+ Fetch your latest LinkedIn posts with engagement stats and automation status.
150
+
151
+ Examples:
152
+
153
+ ```
154
+ "Show me my recent LinkedIn posts"
155
+ "What are my top performing posts?"
156
+ ```
157
+
158
+ ---
159
+
160
+ ### `create_automation`
161
+
162
+ Create a new automation for a LinkedIn post.
163
+ All automations are created as **Draft** by default for safety.
164
+
165
+ Examples:
166
+
167
+ ```
168
+ "Create an automation for my latest post — DM anyone who comments 'interested' with my ebook link"
169
+ "Set up a comment automation that replies 'DM sent!' and sends the PDF"
170
+ ```
171
+
172
+ ---
173
+
174
+ ### `list_automations`
175
+
176
+ List all your automations with status and performance metrics.
177
+
178
+ Examples:
179
+
180
+ ```
181
+ "Show me all my running automations"
182
+ "Which automations have sent the most DMs?"
183
+ ```
184
+
185
+ ---
186
+
187
+ ### `edit_automation`
188
+
189
+ Update automation status, keywords, templates, or settings.
190
+
191
+ Examples:
192
+
193
+ ```
194
+ "Pause all my automations"
195
+ "Add the keyword 'want' to my ebook automation"
196
+ "Change the DM template to include a personalized greeting"
197
+ ```
198
+
199
+ ---
200
+
201
+ ### `schedule_post_with_automation`
202
+
203
+ Schedule a LinkedIn post with an optional pre-configured automation.
204
+
205
+ Examples:
206
+
207
+ ```
208
+ "Schedule this post for tomorrow at 9am with an automation that DMs the link"
209
+ "Post my new content at 2pm EST with comment replies enabled"
210
+ ```
211
+
212
+ ---
213
+
214
+ ### `set_daily_dm_limit`
215
+
216
+ Control your daily DM sending rate.
217
+ Setting the limit to `0` acts as an emergency stop.
218
+
219
+ Examples:
220
+
221
+ ```
222
+ "Set my daily DM limit to 100"
223
+ "Emergency stop — pause all DM sending"
224
+ ```
225
+
226
+ ---
227
+
228
+ ## Safety by Design
229
+
230
+ The MCP server is intentionally conservative.
231
+
232
+ * New automations always start as Draft
233
+ * Automations cannot be deleted via MCP
234
+ * DM volume respects your daily limits
235
+ * Emergency stops require confirmation
236
+ * Every action is logged and attributable
237
+
238
+ ---
239
+
240
+ ## Example Workflows
241
+
242
+ ### Quick Post Automation
243
+
244
+ Goal: deliver lead magnets with ease.
245
+
246
+ ```
247
+ You:
248
+ "Create a draft automation for my latest post.
249
+ Trigger on 'interested' or 'send'.
250
+ Reply with 'check your DMs 👀'
251
+ DM them my lead magnet link."
252
+ ```
253
+
254
+ Result:
255
+
256
+ * Draft automation created
257
+ * No messages sent yet
258
+ * Ready for review and activation
259
+
260
+ ---
261
+
262
+ ### Bulk Automation Management
263
+
264
+ ```
265
+ You:
266
+ "Pause all my running automations except the OpenClaw post"
267
+ ```
268
+
269
+ MCP will:
270
+
271
+ * Inspect all automations
272
+ * Pause the correct set
273
+ * Leave the specified automation running
274
+
275
+ ---
276
+
277
+ ### Scheduled Campaign
278
+
279
+ ```
280
+ You:
281
+ "Schedule my new post for 9am tomorrow with full automation.
282
+ Keywords: clawdbot, clawd, openclaw, 🦞.
283
+ DM my calendar link + github gist.
284
+ Auto-like all comments."
285
+ ```
286
+
287
+ Result:
288
+
289
+ * Post is scheduled (with pre-automation details)
290
+ * Automation activates automatically when the post goes live
291
+ * Starts delivering the resource to everyone who comments the keyword
292
+
293
+ ---
294
+
295
+ ## Environment Variables
296
+
297
+ | Variable | Required | Default | Description |
298
+ | ------------------- | -------- | --------------------------- | ------------------------------------------- |
299
+ | `LEADSHARK_API_KEY` | Yes | — | Your LeadShark API key |
300
+ | `LEADSHARK_API_URL` | No | `https://apex.leadshark.io` | API base URL |
301
+
302
+ ---
303
+
304
+ ## Rate Limits
305
+
306
+ * **100 requests/minute** burst
307
+ * **250 requests/hour** hourly limit
308
+ * **1000 requests/day** daily limit
309
+ * If getting 429 (rate-limit) errors, fallback exponentially.
310
+
311
+ ---
312
+
313
+ ## Support
314
+
315
+ * MCP Docs: [https://apex.leadshark.io/docs/mcp](https://apex.leadshark.io/docs/mcp)
316
+ * API Docs: [https://apex.leadshark.io/docs/api](https://apex.leadshark.io/docs/api)
317
+ * Support: [info@leadshark.io](mailto:info@leadshark.io)
318
+
319
+ ---
320
+
321
+ ## License
322
+
323
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,327 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
+ const API_BASE_URL = process.env.LEADSHARK_API_URL || 'https://apex.leadshark.io';
8
+ const API_KEY = process.env.LEADSHARK_API_KEY;
9
+ if (!API_KEY) {
10
+ console.error('Error: LEADSHARK_API_KEY environment variable is required');
11
+ process.exit(1);
12
+ }
13
+ /**
14
+ * Make authenticated request to LeadShark API
15
+ */
16
+ async function apiRequest(endpoint, method = 'GET', body) {
17
+ const url = `${API_BASE_URL}${endpoint}`;
18
+ const response = await fetch(url, {
19
+ method,
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ 'x-api-key': API_KEY,
23
+ },
24
+ ...(body && { body: JSON.stringify(body) }),
25
+ });
26
+ const data = await response.json();
27
+ if (!response.ok) {
28
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, data.error || `API error: ${response.status}`);
29
+ }
30
+ return data;
31
+ }
32
+ /**
33
+ * Tool definitions matching MCP spec
34
+ */
35
+ const TOOLS = [
36
+ {
37
+ name: 'list_recent_posts',
38
+ description: 'Fetch your latest LinkedIn posts with engagement stats. Returns whether an automation already exists for each post.',
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ limit: {
43
+ type: 'number',
44
+ description: 'Number of posts to fetch (1-20, default: 5)',
45
+ minimum: 1,
46
+ maximum: 20,
47
+ },
48
+ },
49
+ },
50
+ },
51
+ {
52
+ name: 'create_automation',
53
+ description: 'Create a new automation for a LinkedIn post. Always created as Draft - you must activate it separately. Supports keywords, DM templates, comment replies, and settings like auto-connect and auto-like.',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ post_url: {
58
+ type: 'string',
59
+ description: 'LinkedIn post URL to automate',
60
+ },
61
+ instruction: {
62
+ type: 'string',
63
+ description: 'Natural language instruction describing what the automation should do',
64
+ },
65
+ keywords: {
66
+ type: 'array',
67
+ items: { type: 'string' },
68
+ description: 'Trigger keywords (e.g., ["interested", "send", "want"])',
69
+ },
70
+ dm_templates: {
71
+ type: 'array',
72
+ items: { type: 'string' },
73
+ description: 'DM message templates. Use {{firstName}}, {{fullName}}, {{linkedinUsername}}',
74
+ },
75
+ comment_reply_templates: {
76
+ type: 'array',
77
+ items: { type: 'string' },
78
+ description: 'Comment reply templates. Use {{fullNameMention}} for @mentions',
79
+ },
80
+ offer_url: {
81
+ type: 'string',
82
+ description: 'URL to include in DM (e.g., lead magnet link)',
83
+ },
84
+ settings: {
85
+ type: 'object',
86
+ properties: {
87
+ auto_connect: { type: 'boolean', description: 'Send connection requests to commenters' },
88
+ auto_like: { type: 'boolean', description: 'Like all comments automatically' },
89
+ follow_up_enabled: { type: 'boolean', description: 'Enable follow-up DMs' },
90
+ follow_up_delay_minutes: { type: 'number', description: 'Delay before follow-up (1-10080)' },
91
+ follow_up_template: { type: 'string', description: 'Follow-up message template' },
92
+ },
93
+ },
94
+ },
95
+ required: ['post_url'],
96
+ },
97
+ },
98
+ {
99
+ name: 'list_automations',
100
+ description: 'List all your automations with status, settings, and performance stats. Filter by status if needed.',
101
+ inputSchema: {
102
+ type: 'object',
103
+ properties: {
104
+ status: {
105
+ type: 'string',
106
+ enum: ['all', 'Running', 'Paused', 'Draft'],
107
+ description: 'Filter by status (default: all)',
108
+ },
109
+ },
110
+ },
111
+ },
112
+ {
113
+ name: 'edit_automation',
114
+ description: 'Update an automation. Can change status (Running/Paused/Draft), keywords, DM templates, comment replies, and all settings. Only include fields you want to change.',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ automation_id: {
119
+ type: 'string',
120
+ description: 'UUID of the automation to edit',
121
+ },
122
+ updates: {
123
+ type: 'object',
124
+ properties: {
125
+ status: {
126
+ type: 'string',
127
+ enum: ['Running', 'Paused', 'Draft'],
128
+ description: 'New status',
129
+ },
130
+ keywords: {
131
+ type: 'array',
132
+ items: { type: 'string' },
133
+ description: 'Updated keywords',
134
+ },
135
+ dm_templates: {
136
+ type: 'array',
137
+ items: { type: 'string' },
138
+ description: 'Updated DM templates',
139
+ },
140
+ comment_reply_templates: {
141
+ type: 'array',
142
+ items: { type: 'string' },
143
+ description: 'Updated comment reply templates',
144
+ },
145
+ settings: {
146
+ type: 'object',
147
+ properties: {
148
+ auto_connect: { type: 'boolean' },
149
+ auto_like: { type: 'boolean' },
150
+ follow_up_enabled: { type: 'boolean' },
151
+ follow_up_delay_minutes: { type: 'number' },
152
+ follow_up_only_if_no_response: { type: 'boolean' },
153
+ follow_up_template: { type: 'string' },
154
+ },
155
+ },
156
+ },
157
+ },
158
+ },
159
+ required: ['automation_id', 'updates'],
160
+ },
161
+ },
162
+ {
163
+ name: 'schedule_post_with_automation',
164
+ description: 'Schedule a LinkedIn post for future publishing with optional automation. The automation activates automatically when the post goes live.',
165
+ inputSchema: {
166
+ type: 'object',
167
+ properties: {
168
+ post_content: {
169
+ type: 'string',
170
+ description: 'The LinkedIn post content (max 3000 chars)',
171
+ },
172
+ scheduled_for: {
173
+ type: 'string',
174
+ description: 'ISO 8601 datetime for publishing (e.g., 2026-02-03T09:00:00Z)',
175
+ },
176
+ timezone: {
177
+ type: 'string',
178
+ description: 'Timezone (e.g., America/New_York). Defaults to UTC.',
179
+ },
180
+ automation: {
181
+ type: 'object',
182
+ description: 'Optional automation to attach',
183
+ properties: {
184
+ keywords: { type: 'array', items: { type: 'string' } },
185
+ offer_url: { type: 'string' },
186
+ dm_template: { type: 'string' },
187
+ comment_reply: { type: 'string' },
188
+ settings: {
189
+ type: 'object',
190
+ properties: {
191
+ auto_connect: { type: 'boolean' },
192
+ auto_like: { type: 'boolean' },
193
+ follow_up_enabled: { type: 'boolean' },
194
+ follow_up_delay_minutes: { type: 'number' },
195
+ follow_up_template: { type: 'string' },
196
+ },
197
+ },
198
+ },
199
+ },
200
+ },
201
+ required: ['post_content', 'scheduled_for'],
202
+ },
203
+ },
204
+ {
205
+ name: 'set_daily_dm_limit',
206
+ description: 'Set your daily DM sending limit. Setting to 0 is an emergency stop - all DM sending pauses immediately. Requires confirm: true for destructive changes.',
207
+ inputSchema: {
208
+ type: 'object',
209
+ properties: {
210
+ limit: {
211
+ type: 'number',
212
+ description: 'New daily DM limit (0-250). Use 0 for emergency stop.',
213
+ minimum: 0,
214
+ maximum: 250,
215
+ },
216
+ confirm: {
217
+ type: 'boolean',
218
+ description: 'Required when setting limit to 0',
219
+ },
220
+ },
221
+ required: ['limit'],
222
+ },
223
+ },
224
+ ];
225
+ /**
226
+ * Handle tool calls
227
+ */
228
+ async function handleToolCall(name, args) {
229
+ switch (name) {
230
+ case 'list_recent_posts': {
231
+ const limit = args.limit || 5;
232
+ return apiRequest(`/api/mcp/posts?limit=${limit}`);
233
+ }
234
+ case 'create_automation': {
235
+ return apiRequest('/api/mcp/automations', 'POST', {
236
+ post_url: args.post_url,
237
+ instruction: args.instruction,
238
+ keywords: args.keywords,
239
+ dm_templates: args.dm_templates,
240
+ comment_reply_templates: args.comment_reply_templates,
241
+ offer_url: args.offer_url,
242
+ settings: args.settings,
243
+ });
244
+ }
245
+ case 'list_automations': {
246
+ const status = args.status || 'all';
247
+ return apiRequest(`/api/mcp/automations?status=${status}`);
248
+ }
249
+ case 'edit_automation': {
250
+ return apiRequest(`/api/mcp/automations/${args.automation_id}`, 'PATCH', {
251
+ updates: args.updates,
252
+ });
253
+ }
254
+ case 'schedule_post_with_automation': {
255
+ return apiRequest('/api/mcp/scheduled-posts', 'POST', {
256
+ post_content: args.post_content,
257
+ scheduled_for: args.scheduled_for,
258
+ timezone: args.timezone,
259
+ automation: args.automation,
260
+ });
261
+ }
262
+ case 'set_daily_dm_limit': {
263
+ return apiRequest('/api/mcp/dm-limit', 'POST', {
264
+ limit: args.limit,
265
+ confirm: args.confirm,
266
+ });
267
+ }
268
+ default:
269
+ throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
270
+ }
271
+ }
272
+ /**
273
+ * Initialize and run the MCP server
274
+ */
275
+ async function main() {
276
+ const server = new index_js_1.Server({
277
+ name: 'leadshark',
278
+ version: '1.0.0',
279
+ }, {
280
+ capabilities: {
281
+ tools: {},
282
+ },
283
+ });
284
+ // List available tools
285
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
286
+ tools: TOOLS,
287
+ }));
288
+ // Handle tool calls
289
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
290
+ const { name, arguments: args } = request.params;
291
+ try {
292
+ const result = await handleToolCall(name, args || {});
293
+ return {
294
+ content: [
295
+ {
296
+ type: 'text',
297
+ text: JSON.stringify(result, null, 2),
298
+ },
299
+ ],
300
+ };
301
+ }
302
+ catch (error) {
303
+ if (error instanceof types_js_1.McpError) {
304
+ throw error;
305
+ }
306
+ const message = error instanceof Error ? error.message : 'Unknown error';
307
+ return {
308
+ content: [
309
+ {
310
+ type: 'text',
311
+ text: JSON.stringify({ error: message }, null, 2),
312
+ },
313
+ ],
314
+ isError: true,
315
+ };
316
+ }
317
+ });
318
+ // Start server with stdio transport
319
+ const transport = new stdio_js_1.StdioServerTransport();
320
+ await server.connect(transport);
321
+ console.error('LeadShark MCP Server running on stdio');
322
+ }
323
+ main().catch((error) => {
324
+ console.error('Fatal error:', error);
325
+ process.exit(1);
326
+ });
327
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@leadshark/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "LeadShark MCP Server - Control LinkedIn automations with natural language",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "leadshark-mcp": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "ts-node src/index.ts",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "keywords": [
15
+ "mcp",
16
+ "leadshark",
17
+ "linkedin",
18
+ "automation",
19
+ "cursor",
20
+ "claude"
21
+ ],
22
+ "author": "LeadShark",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/leadshark/mcp-server"
27
+ },
28
+ "dependencies": {
29
+ "@modelcontextprotocol/sdk": "^1.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.0.0",
33
+ "typescript": "^5.0.0",
34
+ "ts-node": "^10.9.0"
35
+ },
36
+ "engines": {
37
+ "node": ">=18"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md"
42
+ ]
43
+ }