@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 +323 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +327 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
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
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|