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.
Files changed (89) hide show
  1. package/README.md +278 -0
  2. package/TEST_PLAN.md +323 -0
  3. package/dist/http-server.d.ts +2 -0
  4. package/dist/http-server.d.ts.map +1 -0
  5. package/dist/http-server.js +215 -0
  6. package/dist/http-server.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +121 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/pipeline-client.d.ts +144 -0
  12. package/dist/pipeline-client.d.ts.map +1 -0
  13. package/dist/pipeline-client.js +446 -0
  14. package/dist/pipeline-client.js.map +1 -0
  15. package/dist/server.d.ts +16 -0
  16. package/dist/server.d.ts.map +1 -0
  17. package/dist/server.js +121 -0
  18. package/dist/server.js.map +1 -0
  19. package/dist/tools/analytics.d.ts +143 -0
  20. package/dist/tools/analytics.d.ts.map +1 -0
  21. package/dist/tools/analytics.js +140 -0
  22. package/dist/tools/analytics.js.map +1 -0
  23. package/dist/tools/campaigns.d.ts +120 -0
  24. package/dist/tools/campaigns.d.ts.map +1 -0
  25. package/dist/tools/campaigns.js +152 -0
  26. package/dist/tools/campaigns.js.map +1 -0
  27. package/dist/tools/content.d.ts +4 -0
  28. package/dist/tools/content.d.ts.map +1 -0
  29. package/dist/tools/content.js +14 -0
  30. package/dist/tools/content.js.map +1 -0
  31. package/dist/tools/conversations.d.ts +110 -0
  32. package/dist/tools/conversations.d.ts.map +1 -0
  33. package/dist/tools/conversations.js +101 -0
  34. package/dist/tools/conversations.js.map +1 -0
  35. package/dist/tools/index.d.ts +11 -0
  36. package/dist/tools/index.d.ts.map +1 -0
  37. package/dist/tools/index.js +34 -0
  38. package/dist/tools/index.js.map +1 -0
  39. package/dist/tools/linkedin.d.ts +48 -0
  40. package/dist/tools/linkedin.d.ts.map +1 -0
  41. package/dist/tools/linkedin.js +81 -0
  42. package/dist/tools/linkedin.js.map +1 -0
  43. package/dist/tools/prospects.d.ts +250 -0
  44. package/dist/tools/prospects.d.ts.map +1 -0
  45. package/dist/tools/prospects.js +184 -0
  46. package/dist/tools/prospects.js.map +1 -0
  47. package/dist/tools/search.d.ts +4 -0
  48. package/dist/tools/search.d.ts.map +1 -0
  49. package/dist/tools/search.js +60 -0
  50. package/dist/tools/search.js.map +1 -0
  51. package/dist/tools/signals.d.ts +116 -0
  52. package/dist/tools/signals.d.ts.map +1 -0
  53. package/dist/tools/signals.js +167 -0
  54. package/dist/tools/signals.js.map +1 -0
  55. package/dist/tools/tables.d.ts +458 -0
  56. package/dist/tools/tables.d.ts.map +1 -0
  57. package/dist/tools/tables.js +345 -0
  58. package/dist/tools/tables.js.map +1 -0
  59. package/dist/tools/workflows.d.ts +53 -0
  60. package/dist/tools/workflows.d.ts.map +1 -0
  61. package/dist/tools/workflows.js +85 -0
  62. package/dist/tools/workflows.js.map +1 -0
  63. package/dist/types.d.ts +476 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +4 -0
  66. package/dist/types.js.map +1 -0
  67. package/package.json +49 -0
  68. package/scripts/test-integration.js +208 -0
  69. package/src/http-server.ts +257 -0
  70. package/src/index.ts +138 -0
  71. package/src/pipeline-client.ts +575 -0
  72. package/src/server.ts +144 -0
  73. package/src/tools/analytics.ts +149 -0
  74. package/src/tools/campaigns.ts +160 -0
  75. package/src/tools/content.ts +12 -0
  76. package/src/tools/conversations.ts +107 -0
  77. package/src/tools/index.ts +10 -0
  78. package/src/tools/linkedin.ts +82 -0
  79. package/src/tools/prospects.ts +193 -0
  80. package/src/tools/search.ts +62 -0
  81. package/src/tools/signals.ts +178 -0
  82. package/src/tools/tables.ts +362 -0
  83. package/src/tools/workflows.ts +86 -0
  84. package/src/types.ts +580 -0
  85. package/tests/http-server.test.ts +142 -0
  86. package/tests/pipeline-client.test.ts +388 -0
  87. package/tests/tools.test.ts +343 -0
  88. package/tsconfig.json +20 -0
  89. 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,2 @@
1
+ export declare function startHttpServer(port: number, defaultApiKey?: string, defaultBaseUrl?: string): Promise<void>;
2
+ //# sourceMappingURL=http-server.d.ts.map
@@ -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"}