mcp-server-andru-intelligence 0.2.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,13 +7,13 @@ Works immediately — no pipeline data required. Describe your product and Andru
7
7
  ## Installation
8
8
 
9
9
  ```bash
10
- npm install -g @andru/mcp-server-intelligence
10
+ npm install -g mcp-server-andru-intelligence
11
11
  ```
12
12
 
13
13
  Or run directly:
14
14
 
15
15
  ```bash
16
- ANDRU_API_KEY=sk_live_... npx @andru/mcp-server-intelligence
16
+ ANDRU_API_KEY=sk_live_... npx mcp-server-andru-intelligence
17
17
  ```
18
18
 
19
19
  ## Configuration
@@ -25,7 +25,7 @@ ANDRU_API_KEY=sk_live_... npx @andru/mcp-server-intelligence
25
25
  | `ANDRU_API_KEY` | Yes | — | Your Andru Platform API key |
26
26
  | `ANDRU_API_URL` | No | `https://api.andru.ai` | API base URL |
27
27
 
28
- Get your API key at [app.andru.ai/settings/api-keys](https://app.andru.ai/settings/api-keys).
28
+ Get your API key at [platform.andru-ai.com/settings/api-keys](https://platform.andru-ai.com/settings/api-keys).
29
29
 
30
30
  ### Claude Desktop
31
31
 
@@ -36,7 +36,7 @@ Add to your `claude_desktop_config.json`:
36
36
  "mcpServers": {
37
37
  "andru-intelligence": {
38
38
  "command": "npx",
39
- "args": ["@andru/mcp-server-intelligence"],
39
+ "args": ["mcp-server-andru-intelligence"],
40
40
  "env": {
41
41
  "ANDRU_API_KEY": "sk_live_your_key_here"
42
42
  }
@@ -48,7 +48,7 @@ Add to your `claude_desktop_config.json`:
48
48
  ### Claude Code
49
49
 
50
50
  ```bash
51
- claude mcp add andru-intelligence npx @andru/mcp-server-intelligence \
51
+ claude mcp add andru-intelligence npx mcp-server-andru-intelligence \
52
52
  --env ANDRU_API_KEY=sk_live_your_key_here
53
53
  ```
54
54
 
@@ -102,7 +102,7 @@ claude mcp add andru-intelligence npx @andru/mcp-server-intelligence \
102
102
 
103
103
  Pass `productDescription`, `vertical`, and `targetRole` parameters, or let Claude infer them from your conversation. The tools use pre-built buyer intelligence (5 named buyer personas, 3 vertical segment profiles) to deliver results immediately.
104
104
 
105
- Run a full Pure Signal ICP pipeline at [app.andru.ai](https://app.andru.ai) for intelligence tuned to your specific product and market.
105
+ Run a full Pure Signal ICP pipeline at [platform.andru-ai.com](https://platform.andru-ai.com) for intelligence tuned to your specific product and market.
106
106
 
107
107
  ## Available Resources
108
108
 
@@ -125,9 +125,23 @@ Claude Desktop/Code → MCP Server (stdio) → Andru API (HTTPS)
125
125
  Andru also supports the Agent-to-Agent (A2A) protocol for direct agent-to-agent communication. The AgentCard is available at:
126
126
 
127
127
  ```
128
- https://api.andru.ai/.well-known/agent.json
128
+ https://platform.andru-ai.com/.well-known/agent.json
129
129
  ```
130
130
 
131
+ ## Also Available As
132
+
133
+ **Chrome Extension** — Sales intelligence on LinkedIn profiles, Gmail compose, and any company page. [Install from Chrome Web Store](https://platform.andru-ai.com/tools/chrome-extension).
134
+
135
+ ## Intelligence Briefs
136
+
137
+ Free signal reads for the questions technical founders ask at 11 PM:
138
+
139
+ - [I've Done 30 Customer Interviews and Still Can't Define My ICP](https://platform.andru-ai.com/intelligence/customer-interviews-icp)
140
+ - [I Know My ICP But My Outreach Still Isn't Working](https://platform.andru-ai.com/intelligence/icp-outreach-not-working)
141
+ - [My Pipeline Is Full of Companies That Like Us But Nobody's Buying Urgently](https://platform.andru-ai.com/intelligence/pipeline-no-urgency)
142
+ - [As a Technical Founder, What Am I Getting Wrong About Sales?](https://platform.andru-ai.com/intelligence/technical-founder-sales-mistakes)
143
+ - [Why Does My Messaging Fall Flat Even When I'm Talking to the Right Companies?](https://platform.andru-ai.com/intelligence/messaging-falls-flat)
144
+
131
145
  ## License
132
146
 
133
147
  MIT
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "mcp-server-andru-intelligence",
3
- "version": "0.2.0",
3
+ "version": "1.1.0",
4
4
  "mcpName": "io.github.geter-andru/andru-intelligence",
5
- "description": "Buyer intelligence for technical founders who sell to enterprises — know who to target, what to say, and when to walk away. 15 MCP tools: ICP scoring, persona lookup, battlecards, deal classification, prospect discovery.",
5
+ "description": "Buyer intelligence for technical founders who sell to enterprises — know who to target, what to say, and when to walk away. 19 MCP tools + CLI: ICP scoring, persona simulation, battlecards, deal classification, prospect discovery, sales hiring, investor matching, founder wellness.",
6
6
  "type": "module",
7
7
  "bin": {
8
- "andru-mcp": "./src/index.js"
8
+ "andru-mcp": "./src/index.js",
9
+ "andru-intel": "./src/cli.js"
9
10
  },
10
11
  "main": "./src/index.js",
11
12
  "keywords": [
@@ -36,5 +37,17 @@
36
37
  "homepage": "https://andru.ai",
37
38
  "bugs": {
38
39
  "url": "https://github.com/geter-andru/mcp-server-andru-intelligence/issues"
39
- }
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "scripts": {
45
+ "start": "node src/index.js",
46
+ "prepublishOnly": "node --input-type=module -e \"import {tools} from './src/catalog.js'; if(!tools?.length) {console.error('No tools in catalog'); process.exit(1)} console.log('Catalog OK:', tools.length, 'tools')\""
47
+ },
48
+ "files": [
49
+ "src/",
50
+ "README.md",
51
+ "LICENSE"
52
+ ]
40
53
  }
package/src/catalog.js CHANGED
@@ -30,7 +30,7 @@ const COLD_START_PARAMS = {
30
30
  },
31
31
  };
32
32
 
33
- // ── 15 Tools ────────────────────────────────────────────────────────────────
33
+ // ── 19 Tools ────────────────────────────────────────────────────────────────
34
34
 
35
35
  export const tools = [
36
36
  {
@@ -372,6 +372,119 @@ export const tools = [
372
372
  required: ['companies'],
373
373
  },
374
374
  },
375
+
376
+ {
377
+ name: 'get_sales_blueprint',
378
+ description: 'Builds everything you need to make your first sales hire — job description, comp structure, interview questions that actually reveal sales ability, 90-day ramp plan, and weekly activity targets tied to your ARR goal.',
379
+ inputSchema: {
380
+ type: 'object',
381
+ properties: {
382
+ companyStage: {
383
+ type: 'string',
384
+ enum: ['Pre-Seed', 'Seed', 'Series A', 'Series B'],
385
+ description: 'Current funding stage. Infer from conversation context if the user has mentioned it.',
386
+ },
387
+ arrTarget: {
388
+ type: 'string',
389
+ description: 'Annual recurring revenue target (e.g., "$2M", "$5M", "$10M"). Ask the user if not mentioned.',
390
+ },
391
+ dealSize: {
392
+ type: 'string',
393
+ description: 'Average deal size (e.g., "$15K ACV", "$50K ACV"). Infer from context or ask.',
394
+ },
395
+ avgCycleLength: {
396
+ type: 'string',
397
+ description: 'Average sales cycle length (e.g., "30 days", "60 days", "90+ days"). Infer or ask.',
398
+ },
399
+ teamSize: {
400
+ type: 'number',
401
+ description: 'Current team size. Infer from context if mentioned.',
402
+ },
403
+ },
404
+ required: ['companyStage', 'arrTarget'],
405
+ },
406
+ },
407
+
408
+ {
409
+ name: 'get_thesis_match',
410
+ description: 'Finds the 5 VCs whose investment thesis best matches your company — scores each on fit, explains why they\'d be interested, and tells you how to approach them. Saves weeks of investor research.',
411
+ inputSchema: {
412
+ type: 'object',
413
+ properties: {
414
+ productDescription: {
415
+ type: 'string',
416
+ description: 'What the company does and who it serves. Infer from conversation context if the user has already described their product.',
417
+ },
418
+ stage: {
419
+ type: 'string',
420
+ enum: ['Pre-Seed', 'Seed', 'Series A', 'Series B', 'Series C+'],
421
+ description: 'Current funding stage. Infer from context if mentioned.',
422
+ },
423
+ arrRange: {
424
+ type: 'string',
425
+ description: 'Current ARR range (e.g., "$0-$500K", "$500K-$2M", "$2M-$10M"). Infer or ask.',
426
+ },
427
+ vertical: {
428
+ type: 'string',
429
+ description: 'Industry vertical (e.g., "AI/ML", "FinTech", "HealthTech", "SaaS"). Infer from product description.',
430
+ },
431
+ },
432
+ required: ['productDescription', 'stage'],
433
+ },
434
+ },
435
+
436
+ {
437
+ name: 'get_founder_wellness',
438
+ description: 'Checks if you\'re burning out before you notice — tracks consecutive work days, late nights, and meeting density, then gives you a risk score and specific recovery actions. Because the founder who crashes can\'t close deals.',
439
+ inputSchema: {
440
+ type: 'object',
441
+ properties: {
442
+ userId: {
443
+ type: 'string',
444
+ description: 'The user\'s Andru account ID. Required for personalized wellness tracking.',
445
+ },
446
+ mode: {
447
+ type: 'string',
448
+ enum: ['assessment', 'dashboard'],
449
+ description: 'assessment = burnout risk score + recommendations. dashboard = full wellness data. Default: assessment.',
450
+ },
451
+ },
452
+ },
453
+ },
454
+
455
+ {
456
+ name: 'simulate_buyer_persona',
457
+ description: 'Practice your pitch against a realistic buyer — pick a CFO, CTO, COO, VP Sales, or VP Engineering and get their opening challenge. They\'ll push back the way real buyers do, so you can sharpen your story before the actual meeting.',
458
+ inputSchema: {
459
+ type: 'object',
460
+ properties: {
461
+ persona: {
462
+ type: 'string',
463
+ enum: ['CFO', 'CTO', 'COO', 'VP Sales', 'VP Engineering'],
464
+ description: 'Which buyer to simulate. Pick based on who the user is preparing to meet.',
465
+ },
466
+ stageId: {
467
+ type: 'number',
468
+ enum: [0, 1, 2, 3, 4, 5, 6, 7],
469
+ description: 'Buyer journey stage (0=Unaware through 7=Advocating). Default: 3.',
470
+ },
471
+ productDescription: {
472
+ type: 'string',
473
+ description: 'What the user\'s product does. Infer from conversation context.',
474
+ },
475
+ productName: {
476
+ type: 'string',
477
+ description: 'Product name. Infer from context.',
478
+ },
479
+ mode: {
480
+ type: 'string',
481
+ enum: ['opening', 'list'],
482
+ description: 'opening = buyer\'s opening message. list = available personas. Default: opening.',
483
+ },
484
+ },
485
+ required: ['persona'],
486
+ },
487
+ },
375
488
  ];
376
489
 
377
490
  // ── 3 Resources ─────────────────────────────────────────────────────────────
package/src/cli.js ADDED
@@ -0,0 +1,202 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Andru Intelligence CLI
5
+ *
6
+ * Direct command-line access to all 19 Andru intelligence tools.
7
+ * Works from any terminal — Claude Code, Cursor, Codex, plain shell.
8
+ *
9
+ * Usage:
10
+ * npx andru-intel <tool-name> [--param value ...]
11
+ * npx andru-intel list
12
+ * npx andru-intel help <tool-name>
13
+ *
14
+ * Examples:
15
+ * npx andru-intel get_thesis_match --productDescription "AI sales platform" --stage "Series A"
16
+ * npx andru-intel simulate_buyer_persona --persona CFO --productDescription "DevOps automation"
17
+ * npx andru-intel get_sales_blueprint --companyStage "Series A" --arrTarget "$5M"
18
+ * npx andru-intel get_icp_fit_score --companyName "Acme Corp" --industry "SaaS"
19
+ *
20
+ * Environment:
21
+ * ANDRU_API_KEY (required) — Your Andru Platform API key
22
+ * ANDRU_API_URL (optional) — API base URL (default: https://api.andru.ai)
23
+ */
24
+
25
+ import { tools } from './catalog.js';
26
+ import { AndruClient } from './client.js';
27
+
28
+ function printUsage() {
29
+ console.log(`
30
+ andru-intel — Buyer intelligence from your terminal
31
+
32
+ Usage:
33
+ andru-intel <tool-name> [--param value ...]
34
+ andru-intel list Show all available tools
35
+ andru-intel help <tool-name> Show tool parameters
36
+
37
+ Examples:
38
+ andru-intel get_thesis_match --productDescription "AI sales platform" --stage "Series A"
39
+ andru-intel simulate_buyer_persona --persona CFO
40
+ andru-intel get_sales_blueprint --companyStage "Series A" --arrTarget "$5M"
41
+
42
+ Environment:
43
+ ANDRU_API_KEY Your API key (get one at https://app.andru.ai/settings/api-keys)
44
+ ANDRU_API_URL API endpoint (default: https://api.andru.ai)
45
+
46
+ ${tools.length} tools available. Run 'andru-intel list' to see them all.
47
+ `);
48
+ }
49
+
50
+ function printToolList() {
51
+ console.log(`\n${tools.length} Andru Intelligence Tools:\n`);
52
+ const maxName = Math.max(...tools.map(t => t.name.length));
53
+ for (const tool of tools) {
54
+ const name = tool.name.padEnd(maxName + 2);
55
+ // Truncate description to fit terminal
56
+ const desc = tool.description.length > 80
57
+ ? tool.description.slice(0, 77) + '...'
58
+ : tool.description;
59
+ console.log(` ${name}${desc}`);
60
+ }
61
+ console.log(`\nRun 'andru-intel help <tool-name>' for parameters.\n`);
62
+ }
63
+
64
+ function printToolHelp(toolName) {
65
+ const tool = tools.find(t => t.name === toolName);
66
+ if (!tool) {
67
+ console.error(`Unknown tool: ${toolName}`);
68
+ console.error(`Run 'andru-intel list' to see available tools.`);
69
+ process.exit(1);
70
+ }
71
+
72
+ console.log(`\n${tool.name}`);
73
+ console.log(`${'─'.repeat(tool.name.length)}`);
74
+ console.log(tool.description);
75
+
76
+ const props = tool.inputSchema?.properties || {};
77
+ const required = new Set(tool.inputSchema?.required || []);
78
+
79
+ if (Object.keys(props).length > 0) {
80
+ console.log(`\nParameters:`);
81
+ for (const [name, schema] of Object.entries(props)) {
82
+ const req = required.has(name) ? ' (required)' : '';
83
+ const type = schema.enum ? schema.enum.join(' | ') : schema.type;
84
+ console.log(` --${name} [${type}]${req}`);
85
+ if (schema.description) {
86
+ // Indent description, truncate long ones
87
+ const desc = schema.description.length > 100
88
+ ? schema.description.slice(0, 97) + '...'
89
+ : schema.description;
90
+ console.log(` ${desc}`);
91
+ }
92
+ }
93
+ }
94
+
95
+ console.log(`\nExample:`);
96
+ const exampleArgs = [];
97
+ for (const [name, schema] of Object.entries(props)) {
98
+ if (required.has(name)) {
99
+ const val = schema.enum ? schema.enum[0] : `"..."`;
100
+ exampleArgs.push(`--${name} ${val}`);
101
+ }
102
+ }
103
+ console.log(` andru-intel ${tool.name} ${exampleArgs.join(' ')}\n`);
104
+ }
105
+
106
+ function parseArgs(argv) {
107
+ const args = {};
108
+ let i = 0;
109
+ while (i < argv.length) {
110
+ const arg = argv[i];
111
+ if (arg.startsWith('--')) {
112
+ const key = arg.slice(2);
113
+ const next = argv[i + 1];
114
+ if (next && !next.startsWith('--')) {
115
+ // Try to parse as JSON for arrays/objects/numbers
116
+ try {
117
+ args[key] = JSON.parse(next);
118
+ } catch {
119
+ args[key] = next;
120
+ }
121
+ i += 2;
122
+ } else {
123
+ args[key] = true;
124
+ i += 1;
125
+ }
126
+ } else {
127
+ i += 1;
128
+ }
129
+ }
130
+ return args;
131
+ }
132
+
133
+ async function main() {
134
+ const argv = process.argv.slice(2);
135
+
136
+ if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {
137
+ printUsage();
138
+ process.exit(0);
139
+ }
140
+
141
+ const command = argv[0];
142
+
143
+ if (command === 'list') {
144
+ printToolList();
145
+ process.exit(0);
146
+ }
147
+
148
+ if (command === 'help') {
149
+ if (!argv[1]) {
150
+ printUsage();
151
+ } else {
152
+ printToolHelp(argv[1]);
153
+ }
154
+ process.exit(0);
155
+ }
156
+
157
+ // Tool execution
158
+ const toolName = command;
159
+ const tool = tools.find(t => t.name === toolName);
160
+ if (!tool) {
161
+ console.error(`Unknown tool: ${toolName}`);
162
+ console.error(`Run 'andru-intel list' to see available tools.`);
163
+ process.exit(1);
164
+ }
165
+
166
+ const apiKey = process.env.ANDRU_API_KEY;
167
+ if (!apiKey) {
168
+ console.error('ANDRU_API_KEY not set.');
169
+ console.error('Get your API key at https://app.andru.ai/settings/api-keys');
170
+ console.error('');
171
+ console.error('Usage: ANDRU_API_KEY=sk_live_... andru-intel ' + toolName + ' [args]');
172
+ process.exit(1);
173
+ }
174
+
175
+ const apiUrl = process.env.ANDRU_API_URL || 'https://api.andru.ai';
176
+ const client = new AndruClient(apiKey, apiUrl);
177
+ const toolArgs = parseArgs(argv.slice(1));
178
+
179
+ try {
180
+ const result = await client.callTool(toolName, toolArgs);
181
+
182
+ if (result.isError) {
183
+ const text = result.content?.[0]?.text || 'Unknown error';
184
+ console.error(text);
185
+ process.exit(1);
186
+ }
187
+
188
+ // Print result — if it's JSON, pretty-print it
189
+ const text = result.content?.[0]?.text || '{}';
190
+ try {
191
+ const parsed = JSON.parse(text);
192
+ console.log(JSON.stringify(parsed, null, 2));
193
+ } catch {
194
+ console.log(text);
195
+ }
196
+ } catch (error) {
197
+ console.error(`Error: ${error.message}`);
198
+ process.exit(1);
199
+ }
200
+ }
201
+
202
+ main();
package/src/client.js CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  const DEFAULT_API_URL = 'https://api.andru.ai';
9
9
  const REQUEST_TIMEOUT_MS = 60_000; // 60s for AI-calling tools
10
- const PACKAGE_VERSION = '0.1.0';
10
+ const PACKAGE_VERSION = '0.2.0';
11
11
 
12
12
  export class AndruClient {
13
13
  /**
package/src/index.js CHANGED
@@ -11,14 +11,14 @@
11
11
  * ANDRU_API_URL (optional) — API base URL (default: https://api.andru.ai)
12
12
  *
13
13
  * Usage:
14
- * ANDRU_API_KEY=sk_live_... npx @andru/mcp-server-intelligence
14
+ * ANDRU_API_KEY=sk_live_... npx mcp-server-andru-intelligence
15
15
  *
16
16
  * Claude Desktop config (claude_desktop_config.json):
17
17
  * {
18
18
  * "mcpServers": {
19
19
  * "andru-intelligence": {
20
20
  * "command": "npx",
21
- * "args": ["@andru/mcp-server-intelligence"],
21
+ * "args": ["mcp-server-andru-intelligence"],
22
22
  * "env": {
23
23
  * "ANDRU_API_KEY": "sk_live_your_key_here"
24
24
  * }
package/src/server.js CHANGED
@@ -24,7 +24,7 @@ export function createServer(client) {
24
24
  const server = new Server(
25
25
  {
26
26
  name: 'andru-intelligence',
27
- version: '0.1.1',
27
+ version: '1.0.0',
28
28
  },
29
29
  {
30
30
  capabilities: {
package/glama.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "$schema": "https://glama.ai/mcp/schemas/server.json",
3
- "description": "Buyer intelligence for technical founders who sell to enterprises — know who to target, what to say, and when to walk away.",
4
- "maintainers": ["geter-andru"]
5
- }
package/server.json DELETED
@@ -1,36 +0,0 @@
1
- {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.geter-andru/andru-intelligence",
4
- "title": "Andru Revenue Intelligence",
5
- "description": "Buyer intelligence for technical founders who sell to enterprises — know who to target, what to say, and when to walk away. 15 tools: ICP scoring, persona lookup, battlecards, deal classification, prospect discovery.",
6
- "version": "0.2.0",
7
- "websiteUrl": "https://andru.ai",
8
- "repository": {
9
- "url": "https://github.com/geter-andru/mcp-server-andru-intelligence.git",
10
- "source": "github"
11
- },
12
- "packages": [
13
- {
14
- "registryType": "npm",
15
- "identifier": "mcp-server-andru-intelligence",
16
- "version": "0.2.0",
17
- "transport": {
18
- "type": "stdio"
19
- },
20
- "environmentVariables": [
21
- {
22
- "name": "ANDRU_API_KEY",
23
- "description": "Your Andru Platform API key. Get one at https://app.andru.ai/settings/api-keys",
24
- "isRequired": true,
25
- "isSecret": true
26
- },
27
- {
28
- "name": "ANDRU_API_URL",
29
- "description": "Andru API base URL (default: https://api.andru.ai)",
30
- "isRequired": false,
31
- "default": "https://api.andru.ai"
32
- }
33
- ]
34
- }
35
- ]
36
- }