pipeline-mcp 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 +278 -0
- package/TEST_PLAN.md +323 -0
- package/dist/http-server.d.ts +2 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +215 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline-client.d.ts +144 -0
- package/dist/pipeline-client.d.ts.map +1 -0
- package/dist/pipeline-client.js +446 -0
- package/dist/pipeline-client.js.map +1 -0
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +121 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analytics.d.ts +143 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +140 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/campaigns.d.ts +120 -0
- package/dist/tools/campaigns.d.ts.map +1 -0
- package/dist/tools/campaigns.js +152 -0
- package/dist/tools/campaigns.js.map +1 -0
- package/dist/tools/content.d.ts +4 -0
- package/dist/tools/content.d.ts.map +1 -0
- package/dist/tools/content.js +14 -0
- package/dist/tools/content.js.map +1 -0
- package/dist/tools/conversations.d.ts +110 -0
- package/dist/tools/conversations.d.ts.map +1 -0
- package/dist/tools/conversations.js +101 -0
- package/dist/tools/conversations.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +34 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/linkedin.d.ts +48 -0
- package/dist/tools/linkedin.d.ts.map +1 -0
- package/dist/tools/linkedin.js +81 -0
- package/dist/tools/linkedin.js.map +1 -0
- package/dist/tools/prospects.d.ts +250 -0
- package/dist/tools/prospects.d.ts.map +1 -0
- package/dist/tools/prospects.js +184 -0
- package/dist/tools/prospects.js.map +1 -0
- package/dist/tools/search.d.ts +4 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +60 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/signals.d.ts +116 -0
- package/dist/tools/signals.d.ts.map +1 -0
- package/dist/tools/signals.js +167 -0
- package/dist/tools/signals.js.map +1 -0
- package/dist/tools/tables.d.ts +458 -0
- package/dist/tools/tables.d.ts.map +1 -0
- package/dist/tools/tables.js +345 -0
- package/dist/tools/tables.js.map +1 -0
- package/dist/tools/workflows.d.ts +53 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +85 -0
- package/dist/tools/workflows.js.map +1 -0
- package/dist/types.d.ts +476 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
- package/scripts/test-integration.js +208 -0
- package/src/http-server.ts +257 -0
- package/src/index.ts +138 -0
- package/src/pipeline-client.ts +575 -0
- package/src/server.ts +144 -0
- package/src/tools/analytics.ts +149 -0
- package/src/tools/campaigns.ts +160 -0
- package/src/tools/content.ts +12 -0
- package/src/tools/conversations.ts +107 -0
- package/src/tools/index.ts +10 -0
- package/src/tools/linkedin.ts +82 -0
- package/src/tools/prospects.ts +193 -0
- package/src/tools/search.ts +62 -0
- package/src/tools/signals.ts +178 -0
- package/src/tools/tables.ts +362 -0
- package/src/tools/workflows.ts +86 -0
- package/src/types.ts +580 -0
- package/tests/http-server.test.ts +142 -0
- package/tests/pipeline-client.test.ts +388 -0
- package/tests/tools.test.ts +343 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# Pipeline MCP Server
|
|
2
|
+
|
|
3
|
+
MCP (Model Context Protocol) server for [Pipeline](https://pipeline.help) - AI-powered LinkedIn outreach automation.
|
|
4
|
+
|
|
5
|
+
Control your LinkedIn campaigns, manage prospects, track buying signals, monitor workflow performance, and view conversations directly from Claude, ChatGPT, Cursor, or any MCP-compatible AI assistant.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **40 Tools** across 7 categories
|
|
10
|
+
- **Campaign Management** - Create, start, pause, resume, clone campaigns
|
|
11
|
+
- **Prospect Management** - Add, remove, filter prospects by ICP score
|
|
12
|
+
- **Analytics** - Campaign metrics, reply rates, ICP distribution, top performers
|
|
13
|
+
- **LinkedIn Accounts** - Monitor daily usage, check InMail balance
|
|
14
|
+
- **Workflow Monitoring** - Track execution progress, pending and failed actions
|
|
15
|
+
- **Conversations** - View replies, search conversations, get message threads
|
|
16
|
+
- **Signal Tracking** - Monitor buying signals, create trackers, act on signals
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
### Installation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g pipeline-mcp
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or use with npx:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx pipeline-mcp --api-key YOUR_API_KEY
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Claude Code Configuration
|
|
33
|
+
|
|
34
|
+
Add to your Claude Code settings (`~/.claude/settings.json`):
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
"pipeline": {
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "pipeline-mcp", "--api-key", "YOUR_API_KEY"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Claude Desktop Configuration
|
|
48
|
+
|
|
49
|
+
Add to your Claude Desktop config (`claude_desktop_config.json`):
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"pipeline": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["-y", "pipeline-mcp", "--api-key", "YOUR_API_KEY"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Cursor IDE Configuration
|
|
63
|
+
|
|
64
|
+
Add to your Cursor settings:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"mcp": {
|
|
69
|
+
"servers": {
|
|
70
|
+
"pipeline": {
|
|
71
|
+
"command": "npx",
|
|
72
|
+
"args": ["-y", "pipeline-mcp", "--api-key", "YOUR_API_KEY"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Usage Examples
|
|
80
|
+
|
|
81
|
+
Once connected, you can ask your AI assistant:
|
|
82
|
+
|
|
83
|
+
- "How are my campaigns doing?"
|
|
84
|
+
- "Show me prospects with ICP score above 80"
|
|
85
|
+
- "Who replied to my campaigns this week?"
|
|
86
|
+
- "Add linkedin.com/in/johndoe to my VP Sales campaign"
|
|
87
|
+
- "Which campaign has the best reply rate?"
|
|
88
|
+
- "How many InMails do I have left?"
|
|
89
|
+
- "Show me failed actions in my campaign"
|
|
90
|
+
- "What buying signals have been detected?"
|
|
91
|
+
- "Compare my active campaigns side by side"
|
|
92
|
+
- "Clone my best campaign and rename it"
|
|
93
|
+
|
|
94
|
+
## Available Tools
|
|
95
|
+
|
|
96
|
+
### Campaign Management (7 tools)
|
|
97
|
+
|
|
98
|
+
| Tool | Description |
|
|
99
|
+
|------|-------------|
|
|
100
|
+
| `list-campaigns` | List all campaigns with optional status filter |
|
|
101
|
+
| `get-campaign` | Get detailed campaign information |
|
|
102
|
+
| `create-campaign` | Create a new campaign |
|
|
103
|
+
| `start-campaign` | Start campaign execution |
|
|
104
|
+
| `pause-campaign` | Pause a running campaign |
|
|
105
|
+
| `resume-campaign` | Resume a paused campaign |
|
|
106
|
+
| `clone-campaign` | Clone an existing campaign |
|
|
107
|
+
|
|
108
|
+
### Prospect Management (7 tools)
|
|
109
|
+
|
|
110
|
+
| Tool | Description |
|
|
111
|
+
|------|-------------|
|
|
112
|
+
| `list-prospects` | List prospects with ICP score filtering |
|
|
113
|
+
| `get-prospect` | Get prospect details |
|
|
114
|
+
| `add-prospect` | Add a single prospect |
|
|
115
|
+
| `add-prospects-bulk` | Add up to 1000 prospects at once |
|
|
116
|
+
| `remove-prospect` | Remove a prospect |
|
|
117
|
+
| `get-prospect-stats` | Get pipeline breakdown by status |
|
|
118
|
+
| `list-prospect-lists` | List all prospect lists |
|
|
119
|
+
|
|
120
|
+
### Analytics (6 tools)
|
|
121
|
+
|
|
122
|
+
| Tool | Description |
|
|
123
|
+
|------|-------------|
|
|
124
|
+
| `get-campaign-analytics` | Get campaign performance metrics |
|
|
125
|
+
| `get-account-analytics` | Get account-wide analytics |
|
|
126
|
+
| `get-reply-analytics` | Get reply rates and sentiment breakdown |
|
|
127
|
+
| `get-icp-distribution` | Get ICP score distribution across prospects |
|
|
128
|
+
| `compare-campaigns` | Compare multiple campaigns side by side |
|
|
129
|
+
| `get-top-performers` | Get best performing campaigns by metric |
|
|
130
|
+
|
|
131
|
+
### LinkedIn Accounts (4 tools)
|
|
132
|
+
|
|
133
|
+
| Tool | Description |
|
|
134
|
+
|------|-------------|
|
|
135
|
+
| `list-linkedin-accounts` | List connected LinkedIn accounts |
|
|
136
|
+
| `get-linkedin-account` | Get account details and limits |
|
|
137
|
+
| `get-daily-usage` | Get today's usage vs daily limits |
|
|
138
|
+
| `get-inmail-balance` | Check InMail credits remaining |
|
|
139
|
+
|
|
140
|
+
### Workflow Monitoring (4 tools)
|
|
141
|
+
|
|
142
|
+
| Tool | Description |
|
|
143
|
+
|------|-------------|
|
|
144
|
+
| `get-workflow-status` | Get execution status and progress for a campaign |
|
|
145
|
+
| `get-pending-actions` | List pending workflow actions |
|
|
146
|
+
| `get-failed-actions` | List failed actions with error details |
|
|
147
|
+
| `get-execution-progress` | Get progress percentage and ETA |
|
|
148
|
+
|
|
149
|
+
### Conversations (4 tools)
|
|
150
|
+
|
|
151
|
+
| Tool | Description |
|
|
152
|
+
|------|-------------|
|
|
153
|
+
| `list-conversations` | List conversations, filter by campaign or reply status |
|
|
154
|
+
| `get-conversation` | Get full message thread for a conversation |
|
|
155
|
+
| `get-recent-replies` | Get most recent replies across all campaigns |
|
|
156
|
+
| `search-conversations` | Search conversations by keyword |
|
|
157
|
+
|
|
158
|
+
### Signal Tracking (8 tools)
|
|
159
|
+
|
|
160
|
+
| Tool | Description |
|
|
161
|
+
|------|-------------|
|
|
162
|
+
| `list-signals` | List detected buying signals |
|
|
163
|
+
| `list-signal-trackers` | List configured signal trackers |
|
|
164
|
+
| `create-signal-tracker` | Create a new keyword tracker |
|
|
165
|
+
| `pause-signal-tracker` | Pause a tracker |
|
|
166
|
+
| `resume-signal-tracker` | Resume a tracker |
|
|
167
|
+
| `add-signal-to-campaign` | Add signal prospect to a campaign |
|
|
168
|
+
| `create-prospect-from-signal` | Create a prospect from a detected signal |
|
|
169
|
+
| `trigger-signal-poll` | Manually trigger signal polling |
|
|
170
|
+
|
|
171
|
+
## HTTP Server Mode
|
|
172
|
+
|
|
173
|
+
For integrations with n8n, Clay, or custom applications:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
pipeline-mcp --http --port 3000
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Authentication via headers:
|
|
180
|
+
- `X-API-KEY: your_api_key`
|
|
181
|
+
- `Authorization: Bearer your_api_key`
|
|
182
|
+
|
|
183
|
+
### JSON-RPC Examples
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# List available tools
|
|
187
|
+
curl -X POST http://localhost:3000 \
|
|
188
|
+
-H "Content-Type: application/json" \
|
|
189
|
+
-H "X-API-KEY: your_api_key" \
|
|
190
|
+
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
|
|
191
|
+
|
|
192
|
+
# Call a tool
|
|
193
|
+
curl -X POST http://localhost:3000 \
|
|
194
|
+
-H "Content-Type: application/json" \
|
|
195
|
+
-H "X-API-KEY: your_api_key" \
|
|
196
|
+
-d '{
|
|
197
|
+
"jsonrpc": "2.0",
|
|
198
|
+
"id": 1,
|
|
199
|
+
"method": "tools/call",
|
|
200
|
+
"params": {
|
|
201
|
+
"name": "list-campaigns",
|
|
202
|
+
"arguments": { "status": "active" }
|
|
203
|
+
}
|
|
204
|
+
}'
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Environment Variables
|
|
208
|
+
|
|
209
|
+
| Variable | Description |
|
|
210
|
+
|----------|-------------|
|
|
211
|
+
| `PIPELINE_API_KEY` | Your Pipeline API key |
|
|
212
|
+
| `PIPELINE_BASE_URL` | Custom API URL (default: `https://pipeline.help/api`) |
|
|
213
|
+
|
|
214
|
+
## CLI Options
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
Options:
|
|
218
|
+
--api-key <key> Your Pipeline API key
|
|
219
|
+
--base-url <url> Custom API base URL
|
|
220
|
+
--port <number> Port for HTTP server (default: 3000)
|
|
221
|
+
--http Run in HTTP server mode
|
|
222
|
+
--stdio Run in stdio mode (default)
|
|
223
|
+
--version, -v Show version
|
|
224
|
+
--help, -h Show help
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Development
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# Clone the repository
|
|
231
|
+
git clone https://github.com/mattvinall/pipeline-mcp.git
|
|
232
|
+
cd pipeline-mcp
|
|
233
|
+
|
|
234
|
+
# Install dependencies
|
|
235
|
+
npm install
|
|
236
|
+
|
|
237
|
+
# Build
|
|
238
|
+
npm run build
|
|
239
|
+
|
|
240
|
+
# Run tests
|
|
241
|
+
npm test
|
|
242
|
+
|
|
243
|
+
# Run in development (watch mode)
|
|
244
|
+
npm run dev
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Docker
|
|
248
|
+
|
|
249
|
+
```dockerfile
|
|
250
|
+
FROM node:20-alpine
|
|
251
|
+
WORKDIR /app
|
|
252
|
+
COPY package*.json ./
|
|
253
|
+
RUN npm install
|
|
254
|
+
COPY . .
|
|
255
|
+
RUN npm run build
|
|
256
|
+
EXPOSE 3000
|
|
257
|
+
CMD ["node", "dist/index.js", "--http"]
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
docker build -t pipeline-mcp .
|
|
262
|
+
docker run -p 3000:3000 -e PIPELINE_API_KEY=your_key pipeline-mcp
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Getting Your API Key
|
|
266
|
+
|
|
267
|
+
1. Log in to [Pipeline](https://pipeline.help)
|
|
268
|
+
2. Go to **Settings > API Keys**
|
|
269
|
+
3. Create a new API key
|
|
270
|
+
4. Copy the key and use it with this MCP server
|
|
271
|
+
|
|
272
|
+
## Support
|
|
273
|
+
|
|
274
|
+
- [GitHub Issues](https://github.com/mattvinall/pipeline-mcp/issues)
|
|
275
|
+
|
|
276
|
+
## License
|
|
277
|
+
|
|
278
|
+
MIT
|
package/TEST_PLAN.md
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
# Pipeline MCP Server - End-to-End Test Plan
|
|
2
|
+
|
|
3
|
+
**Test Date:** 2026-02-18
|
|
4
|
+
**Tester:** Hydra (Automated + Manual)
|
|
5
|
+
**Status:** In Progress
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Pre-Flight Checks
|
|
10
|
+
|
|
11
|
+
### Build Verification
|
|
12
|
+
- [x] TypeScript compilation successful
|
|
13
|
+
- [x] No type errors
|
|
14
|
+
- [x] All imports resolve correctly
|
|
15
|
+
- [x] Dist output generated
|
|
16
|
+
|
|
17
|
+
### Architecture Validation
|
|
18
|
+
- [x] 10 tool categories registered
|
|
19
|
+
- [x] 65 total tools defined
|
|
20
|
+
- [x] Both stdio and HTTP transports implemented
|
|
21
|
+
- [x] Error handling in place
|
|
22
|
+
- [x] Auth flow implemented (Bearer token + X-API-KEY header)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Test Categories
|
|
27
|
+
|
|
28
|
+
### 1. Transport Modes
|
|
29
|
+
|
|
30
|
+
#### Stdio Mode
|
|
31
|
+
```bash
|
|
32
|
+
# Test with API key
|
|
33
|
+
npm run build
|
|
34
|
+
node dist/index.js --api-key TEST_KEY
|
|
35
|
+
|
|
36
|
+
# Expected: Server starts without error, waits for stdin
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
#### HTTP Mode
|
|
40
|
+
```bash
|
|
41
|
+
# Start HTTP server
|
|
42
|
+
node dist/index.js --http --port 3000
|
|
43
|
+
|
|
44
|
+
# Expected: Server listens on port 3000
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2. Authentication Flow
|
|
48
|
+
|
|
49
|
+
#### Valid API Key
|
|
50
|
+
- [ ] Stdio mode with valid key connects
|
|
51
|
+
- [ ] HTTP mode with X-API-KEY header works
|
|
52
|
+
- [ ] HTTP mode with Authorization: Bearer works
|
|
53
|
+
|
|
54
|
+
#### Invalid API Key
|
|
55
|
+
- [ ] Stdio mode shows error and exits
|
|
56
|
+
- [ ] HTTP mode returns 401
|
|
57
|
+
- [ ] Error message is descriptive
|
|
58
|
+
|
|
59
|
+
#### Missing API Key
|
|
60
|
+
- [ ] Stdio mode requires key (exits with error)
|
|
61
|
+
- [ ] HTTP mode returns 401
|
|
62
|
+
|
|
63
|
+
### 3. Tool Categories (65 Tools Total)
|
|
64
|
+
|
|
65
|
+
#### Campaign Management (7 tools)
|
|
66
|
+
- [ ] `list-campaigns` - Returns paginated campaigns
|
|
67
|
+
- [ ] `get-campaign` - Returns campaign details
|
|
68
|
+
- [ ] `create-campaign` - Creates new campaign
|
|
69
|
+
- [ ] `start-campaign` - Starts campaign
|
|
70
|
+
- [ ] `pause-campaign` - Pauses campaign
|
|
71
|
+
- [ ] `resume-campaign` - Resumes campaign
|
|
72
|
+
- [ ] `clone-campaign` - Clones campaign
|
|
73
|
+
|
|
74
|
+
#### Prospect Management (7 tools)
|
|
75
|
+
- [ ] `list-prospects` - Returns prospects with filtering
|
|
76
|
+
- [ ] `get-prospect` - Returns prospect details
|
|
77
|
+
- [ ] `add-prospect` - Adds single prospect
|
|
78
|
+
- [ ] `add-prospects-bulk` - Adds up to 1000 prospects
|
|
79
|
+
- [ ] `remove-prospect` - Removes prospect from campaign
|
|
80
|
+
- [ ] `get-prospect-stats` - Returns pipeline breakdown
|
|
81
|
+
- [ ] `list-prospect-lists` - Returns all lists
|
|
82
|
+
|
|
83
|
+
#### Analytics (6 tools)
|
|
84
|
+
- [ ] `get-campaign-analytics` - Returns metrics
|
|
85
|
+
- [ ] `get-account-analytics` - Returns workspace analytics
|
|
86
|
+
- [ ] `get-reply-analytics` - Returns reply rates
|
|
87
|
+
- [ ] `get-icp-distribution` - Returns score distribution
|
|
88
|
+
- [ ] `compare-campaigns` - Compares multiple campaigns
|
|
89
|
+
- [ ] `get-top-performers` - Returns best campaigns
|
|
90
|
+
|
|
91
|
+
#### LinkedIn Accounts (4 tools)
|
|
92
|
+
- [ ] `list-linkedin-accounts` - Returns connected accounts
|
|
93
|
+
- [ ] `get-linkedin-account` - Returns account details
|
|
94
|
+
- [ ] `get-daily-usage` - Returns today's usage
|
|
95
|
+
- [ ] `get-inmail-balance` - Returns InMail credits
|
|
96
|
+
|
|
97
|
+
#### Workflow Monitoring (4 tools)
|
|
98
|
+
- [ ] `get-workflow-status` - Returns execution status
|
|
99
|
+
- [ ] `get-pending-actions` - Returns pending actions
|
|
100
|
+
- [ ] `get-failed-actions` - Returns failed actions
|
|
101
|
+
- [ ] `get-execution-progress` - Returns progress %
|
|
102
|
+
|
|
103
|
+
#### Conversations (7 tools)
|
|
104
|
+
- [ ] `list-conversations` - Returns conversations
|
|
105
|
+
- [ ] `get-conversation` - Returns message thread
|
|
106
|
+
- [ ] `get-recent-replies` - Returns recent replies
|
|
107
|
+
- [ ] `search-conversations` - Searches by keyword
|
|
108
|
+
- [ ] `generate-reply` - AI-generates reply
|
|
109
|
+
- [ ] `list-draft-replies` - Returns queued drafts
|
|
110
|
+
- [ ] `analyze-sentiment` - Analyzes sentiment
|
|
111
|
+
|
|
112
|
+
#### Enrichment Tables (11 tools)
|
|
113
|
+
- [ ] `list-tables` - Returns all tables
|
|
114
|
+
- [ ] `get-table` - Returns table details
|
|
115
|
+
- [ ] `create-table` - Creates new table
|
|
116
|
+
- [ ] `add-table-rows` - Adds rows to table
|
|
117
|
+
- [ ] `run-enrichment` - Triggers enrichment
|
|
118
|
+
- [ ] `get-enrichment-job-status` - Checks job progress
|
|
119
|
+
- [ ] `export-table-csv` - Exports CSV
|
|
120
|
+
- [ ] `send-table-to-campaign` - Sends rows to campaign
|
|
121
|
+
- [ ] `list-enrichment-providers` - Returns providers
|
|
122
|
+
- [ ] `deduplicate-table` - Removes duplicates
|
|
123
|
+
- [ ] `create-table-from-search` - Search + create
|
|
124
|
+
|
|
125
|
+
#### Signal Tracking (8 tools)
|
|
126
|
+
- [ ] `list-signals` - Returns detected signals
|
|
127
|
+
- [ ] `list-signal-trackers` - Returns trackers
|
|
128
|
+
- [ ] `create-signal-tracker` - Creates tracker
|
|
129
|
+
- [ ] `pause-signal-tracker` - Pauses tracker
|
|
130
|
+
- [ ] `resume-signal-tracker` - Resumes tracker
|
|
131
|
+
- [ ] `add-signal-to-campaign` - Adds to campaign
|
|
132
|
+
- [ ] `create-prospect-from-signal` - Creates prospect
|
|
133
|
+
- [ ] `trigger-signal-poll` - Triggers manual poll
|
|
134
|
+
|
|
135
|
+
#### Content & Comments (9 tools)
|
|
136
|
+
- [ ] `generate-content` - Generates LinkedIn post
|
|
137
|
+
- [ ] `list-posts` - Returns all posts
|
|
138
|
+
- [ ] `get-post` - Returns post details
|
|
139
|
+
- [ ] `publish-post` - Publishes to LinkedIn
|
|
140
|
+
- [ ] `get-content-strategy` - Returns strategy
|
|
141
|
+
- [ ] `generate-content-strategy` - AI-generates strategy
|
|
142
|
+
- [ ] `list-comment-drafts` - Returns drafts
|
|
143
|
+
- [ ] `approve-comment-draft` - Approves/rejects draft
|
|
144
|
+
- [ ] `list-tracked-profiles` - Returns tracked profiles
|
|
145
|
+
|
|
146
|
+
#### People & Company Search (2 tools)
|
|
147
|
+
- [ ] `search-people-database` - Searches people
|
|
148
|
+
- [ ] `search-companies-database` - Searches companies
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Error Handling Tests
|
|
153
|
+
|
|
154
|
+
### API Errors
|
|
155
|
+
- [ ] 400 Bad Request - Returns meaningful error
|
|
156
|
+
- [ ] 401 Unauthorized - Returns auth error
|
|
157
|
+
- [ ] 403 Forbidden - Returns permission error
|
|
158
|
+
- [ ] 404 Not Found - Returns not found error
|
|
159
|
+
- [ ] 422 Validation Error - Returns validation details
|
|
160
|
+
- [ ] 500 Server Error - Returns generic error
|
|
161
|
+
- [ ] Network timeout - Handles gracefully
|
|
162
|
+
- [ ] DNS failure - Handles gracefully
|
|
163
|
+
|
|
164
|
+
### Input Validation
|
|
165
|
+
- [ ] Missing required fields - Returns validation error
|
|
166
|
+
- [ ] Invalid types (string instead of number) - Returns error
|
|
167
|
+
- [ ] Empty strings where required - Returns error
|
|
168
|
+
- [ ] Invalid enum values - Returns error
|
|
169
|
+
- [ ] Extra unknown fields - Ignores or errors appropriately
|
|
170
|
+
|
|
171
|
+
### Edge Cases
|
|
172
|
+
- [ ] Empty response from API - Handles gracefully
|
|
173
|
+
- [ ] Null values in response - Handles gracefully
|
|
174
|
+
- [ ] Very large payloads - Handles without crash
|
|
175
|
+
- [ ] Special characters in inputs - Encodes properly
|
|
176
|
+
- [ ] Unicode characters - Handles properly
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Performance Tests
|
|
181
|
+
|
|
182
|
+
- [ ] 100 concurrent requests - No crashes
|
|
183
|
+
- [ ] Large response (10MB+) - Streams properly
|
|
184
|
+
- [ ] Connection pooling - Reuses connections
|
|
185
|
+
- [ ] Memory usage stable - No leaks over 1000 requests
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Integration Test Commands
|
|
190
|
+
|
|
191
|
+
### Stdio Mode Test
|
|
192
|
+
```bash
|
|
193
|
+
# Build first
|
|
194
|
+
npm run build
|
|
195
|
+
|
|
196
|
+
# Test stdio mode (in one terminal)
|
|
197
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js --api-key $PIPELINE_API_KEY
|
|
198
|
+
|
|
199
|
+
# Expected: JSON response with tools array
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### HTTP Mode Test
|
|
203
|
+
```bash
|
|
204
|
+
# Start server
|
|
205
|
+
node dist/index.js --http --port 3000 &
|
|
206
|
+
SERVER_PID=$!
|
|
207
|
+
|
|
208
|
+
# Test tools/list
|
|
209
|
+
curl -X POST http://localhost:3000 \
|
|
210
|
+
-H "Content-Type: application/json" \
|
|
211
|
+
-H "X-API-KEY: $PIPELINE_API_KEY" \
|
|
212
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
|
|
213
|
+
|
|
214
|
+
# Test a real tool
|
|
215
|
+
curl -X POST http://localhost:3000 \
|
|
216
|
+
-H "Content-Type: application/json" \
|
|
217
|
+
-H "Authorization: Bearer $PIPELINE_API_KEY" \
|
|
218
|
+
-d '{
|
|
219
|
+
"jsonrpc": "2.0",
|
|
220
|
+
"id": 1,
|
|
221
|
+
"method": "tools/call",
|
|
222
|
+
"params": {
|
|
223
|
+
"name": "list-campaigns",
|
|
224
|
+
"arguments": {}
|
|
225
|
+
}
|
|
226
|
+
}'
|
|
227
|
+
|
|
228
|
+
# Stop server
|
|
229
|
+
kill $SERVER_PID
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Manual Test Checklist for Matt
|
|
235
|
+
|
|
236
|
+
Using your actual Pipeline API key:
|
|
237
|
+
|
|
238
|
+
1. **Get API Key**
|
|
239
|
+
- Go to Pipeline Settings > API Keys
|
|
240
|
+
- Create a new key
|
|
241
|
+
- Copy the key
|
|
242
|
+
|
|
243
|
+
2. **Test Stdio Mode**
|
|
244
|
+
```bash
|
|
245
|
+
cd C:\Users\Matt\Desktop\pipeline-mcp
|
|
246
|
+
npm run build
|
|
247
|
+
node dist/index.js --api-key YOUR_API_KEY
|
|
248
|
+
```
|
|
249
|
+
- Should start without errors
|
|
250
|
+
|
|
251
|
+
3. **Configure Claude Desktop**
|
|
252
|
+
Add to `claude_desktop_config.json`:
|
|
253
|
+
```json
|
|
254
|
+
{
|
|
255
|
+
"mcpServers": {
|
|
256
|
+
"pipeline": {
|
|
257
|
+
"command": "node",
|
|
258
|
+
"args": [
|
|
259
|
+
"C:\\Users\\Matt\\Desktop\\pipeline-mcp\\dist\\index.js",
|
|
260
|
+
"--api-key",
|
|
261
|
+
"YOUR_API_KEY"
|
|
262
|
+
]
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
4. **Test in Claude**
|
|
269
|
+
- Restart Claude Desktop
|
|
270
|
+
- Ask: "What campaigns do I have in Pipeline?"
|
|
271
|
+
- Ask: "Show me my LinkedIn accounts"
|
|
272
|
+
- Ask: "What are my top performing campaigns?"
|
|
273
|
+
|
|
274
|
+
5. **Test HTTP Mode**
|
|
275
|
+
```bash
|
|
276
|
+
node dist/index.js --http --port 3000
|
|
277
|
+
```
|
|
278
|
+
Then test with curl (see commands above)
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Test Results Summary
|
|
283
|
+
|
|
284
|
+
| Category | Passed | Failed | Skipped |
|
|
285
|
+
|----------|--------|--------|---------|
|
|
286
|
+
| Build Verification | 4 | 0 | 0 |
|
|
287
|
+
| Architecture | 5 | 0 | 0 |
|
|
288
|
+
| Unit Tests | TBD | TBD | TBD |
|
|
289
|
+
| Integration Tests | TBD | TBD | TBD |
|
|
290
|
+
| Manual Tests | TBD | TBD | TBD |
|
|
291
|
+
|
|
292
|
+
**Overall Status:** Build passing, awaiting manual integration tests
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Issues Found
|
|
297
|
+
|
|
298
|
+
### Critical
|
|
299
|
+
- None
|
|
300
|
+
|
|
301
|
+
### High
|
|
302
|
+
- None
|
|
303
|
+
|
|
304
|
+
### Medium
|
|
305
|
+
- None
|
|
306
|
+
|
|
307
|
+
### Low
|
|
308
|
+
- None
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Recommendations
|
|
313
|
+
|
|
314
|
+
1. **Add rate limiting** to HTTP mode to prevent abuse
|
|
315
|
+
2. **Add request logging** for debugging
|
|
316
|
+
3. **Add health check endpoint** (`/health`)
|
|
317
|
+
4. **Add metrics endpoint** for monitoring
|
|
318
|
+
5. **Consider adding retry logic** for transient API failures
|
|
319
|
+
6. **Add request timeout configuration**
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
*Test completed: TBD*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsOA,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|