@clustr-ai/mcp-server 1.0.9 → 1.0.10
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/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/tools/get-job-status.js +2 -2
- package/dist/tools/get-job-status.js.map +1 -1
- package/dist/tools/import-connectors.d.ts +2 -0
- package/dist/tools/{import-contacts.js → import-connectors.js} +18 -9
- package/dist/tools/import-connectors.js.map +1 -0
- package/dist/tools/search-by-connector.d.ts +2 -0
- package/dist/tools/{search-by-contact.js → search-by-connector.js} +20 -4
- package/dist/tools/search-by-connector.js.map +1 -0
- package/dist/tools/search-opportunities.js +10 -7
- package/dist/tools/search-opportunities.js.map +1 -1
- package/dist/tools/whats-new.d.ts +1 -0
- package/dist/tools/whats-new.js +13 -1
- package/dist/tools/whats-new.js.map +1 -1
- package/package.json +1 -1
- package/dist/tools/import-contacts.d.ts +0 -2
- package/dist/tools/import-contacts.js.map +0 -1
- package/dist/tools/search-by-contact.d.ts +0 -2
- package/dist/tools/search-by-contact.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { initClient } from "./client.js";
|
|
5
|
-
import {
|
|
5
|
+
import { registerImportConnectors } from "./tools/import-connectors.js";
|
|
6
6
|
import { registerStartABMSearch } from "./tools/start-abm-search.js";
|
|
7
|
-
import { registerWhatsNew } from "./tools/whats-new.js";
|
|
7
|
+
import { CURRENT_VERSION, registerWhatsNew } from "./tools/whats-new.js";
|
|
8
8
|
import { registerCreateTargetAccounts } from "./tools/create-target-accounts.js";
|
|
9
9
|
import { registerListTargetAccounts } from "./tools/list-target-accounts.js";
|
|
10
10
|
import { registerDeleteTargetAccount } from "./tools/delete-target-account.js";
|
|
@@ -18,11 +18,11 @@ import { registerUpdateOpportunity } from "./tools/update-opportunity.js";
|
|
|
18
18
|
import { registerListOpportunityStatuses } from "./tools/list-opportunity-statuses.js";
|
|
19
19
|
const server = new McpServer({
|
|
20
20
|
name: "clustr",
|
|
21
|
-
version:
|
|
21
|
+
version: CURRENT_VERSION,
|
|
22
22
|
});
|
|
23
23
|
initClient();
|
|
24
24
|
registerWhatsNew(server);
|
|
25
|
-
|
|
25
|
+
registerImportConnectors(server);
|
|
26
26
|
registerStartABMSearch(server);
|
|
27
27
|
registerSearchOpportunities(server);
|
|
28
28
|
registerSearchCompanies(server);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,eAAe;CACzB,CAAC,CAAC;AAEH,UAAU,EAAE,CAAC;AAEb,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACpC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACxC,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACrC,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { get, wrapToolHandler } from "../client.js";
|
|
3
3
|
const inputSchema = {
|
|
4
|
-
job_id: z.string().describe("The job ID (UUID) returned from
|
|
4
|
+
job_id: z.string().describe("The job ID (UUID) returned from import_connectors"),
|
|
5
5
|
};
|
|
6
6
|
export function registerGetJobStatus(server) {
|
|
7
7
|
server.tool("get_job_status", "Get the status and progress of an import job. " +
|
|
8
|
-
"Use the job_id returned from
|
|
8
|
+
"Use the job_id returned from import_connectors to check if processing is complete.", inputSchema, wrapToolHandler((params) => get(`/jobs/${encodeURIComponent(String(params.job_id))}`)));
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=get-job-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-job-status.js","sourceRoot":"","sources":["../../src/tools/get-job-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"get-job-status.js","sourceRoot":"","sources":["../../src/tools/get-job-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACjF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,gDAAgD;QAC9C,oFAAoF,EACtF,WAAW,EACX,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,GAAG,CAAC,SAAS,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAC1D,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { post, wrapToolHandler } from "../client.js";
|
|
3
3
|
const inputSchema = {
|
|
4
|
-
|
|
4
|
+
connectors: z
|
|
5
5
|
.array(z.object({
|
|
6
6
|
linkedin_url: z.string().describe("LinkedIn profile URL"),
|
|
7
7
|
record_id: z.string().optional().describe("Your CRM record ID"),
|
|
@@ -12,11 +12,11 @@ const inputSchema = {
|
|
|
12
12
|
.describe('Tag for this connector (e.g. "Employee", "Friend")'),
|
|
13
13
|
}))
|
|
14
14
|
.optional()
|
|
15
|
-
.describe("
|
|
15
|
+
.describe("Connectors with metadata (1-50). Use this OR linkedin_urls."),
|
|
16
16
|
linkedin_urls: z
|
|
17
17
|
.array(z.string())
|
|
18
18
|
.optional()
|
|
19
|
-
.describe("Simple list of LinkedIn URLs (1-50). Use this OR
|
|
19
|
+
.describe("Simple list of LinkedIn URLs (1-50). Use this OR connectors."),
|
|
20
20
|
webhook_url: z.string().describe("URL to receive results when processing completes"),
|
|
21
21
|
completion_email: z
|
|
22
22
|
.string()
|
|
@@ -25,7 +25,7 @@ const inputSchema = {
|
|
|
25
25
|
max_opportunities: z
|
|
26
26
|
.number()
|
|
27
27
|
.optional()
|
|
28
|
-
.describe("Max opportunities to return per
|
|
28
|
+
.describe("Max opportunities to return per connector"),
|
|
29
29
|
full_history: z
|
|
30
30
|
.boolean()
|
|
31
31
|
.optional()
|
|
@@ -47,9 +47,18 @@ const inputSchema = {
|
|
|
47
47
|
.optional()
|
|
48
48
|
.describe("Filters to apply to discovered opportunities"),
|
|
49
49
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
const description = "Import LinkedIn connectors for referral opportunity discovery. " +
|
|
51
|
+
"Processing is ASYNCHRONOUS — results are delivered via the webhook_url you provide, not in this response. " +
|
|
52
|
+
"Provide connectors via 'connectors' array (with CRM metadata) or simpler 'linkedin_urls' array. Max 50 per request.";
|
|
53
|
+
export function registerImportConnectors(server) {
|
|
54
|
+
server.tool("import_connectors", description, inputSchema, wrapToolHandler((params) => post("/network/import/connectors", params)));
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
+
// There is deliberately no `import_contacts` alias. MCP callers are models
|
|
57
|
+
// reading tools/list, so they pick up the new name on the next call rather
|
|
58
|
+
// than holding a hardcoded reference — advertising both would just put two
|
|
59
|
+
// tools that do the same thing in front of the model.
|
|
60
|
+
//
|
|
61
|
+
// This is an MCP-only decision. The REST endpoint keeps both its path
|
|
62
|
+
// (/network/import/contacts) and its body field (`contacts`), because those
|
|
63
|
+
// ARE called by pinned integration code.
|
|
64
|
+
//# sourceMappingURL=import-connectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-connectors.js","sourceRoot":"","sources":["../../src/tools/import-connectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
// LEGACY: Superseded by search-opportunities.ts which consolidates all search functionality.
|
|
2
2
|
// Kept for backwards compatibility — existing tenants may have automations using this tool name.
|
|
3
3
|
// Do not register in index.ts; the API route still works for direct REST callers.
|
|
4
|
+
//
|
|
5
|
+
// NOTE ON NAMING: this matches the CONNECTOR side of an opportunity — the
|
|
6
|
+
// person in your network — not the prospect. Looking up someone who only
|
|
7
|
+
// appears as a prospect returns 0 results, by design. To find who can
|
|
8
|
+
// introduce you to a given person, filter by prospect_linkedin_urls on
|
|
9
|
+
// search_opportunities instead.
|
|
4
10
|
import { z } from "zod";
|
|
5
11
|
import { get, wrapToolHandler } from "../client.js";
|
|
6
12
|
const inputSchema = {
|
|
@@ -33,8 +39,18 @@ const inputSchema = {
|
|
|
33
39
|
sort_field: z.string().optional().describe("Field to sort by"),
|
|
34
40
|
sort_direction: z.enum(["asc", "desc"]).optional().describe("Sort direction"),
|
|
35
41
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
const description = "Get referral opportunities for a specific connector — a person in your network. " +
|
|
43
|
+
"Provide exactly one of linkedin_public_id OR linkedin_url to identify the connector. " +
|
|
44
|
+
"This matches the connector side only: a person who appears solely as a prospect returns 0 results.";
|
|
45
|
+
export function registerSearchByConnector(server) {
|
|
46
|
+
server.tool("search_opportunities_by_connector", description, inputSchema, wrapToolHandler((params) => get("/network/search/opportunities/by-connector", params)));
|
|
39
47
|
}
|
|
40
|
-
|
|
48
|
+
// There is deliberately no `search_opportunities_by_contact` alias here — the
|
|
49
|
+
// same call made for `import_contacts`. MCP callers are models reading
|
|
50
|
+
// tools/list, so they pick up the new name rather than holding a hardcoded
|
|
51
|
+
// reference, and carrying deprecated duplicates would just put two tools that
|
|
52
|
+
// do the same thing in front of the model.
|
|
53
|
+
//
|
|
54
|
+
// This one is doubly moot: the old name was never registered in index.ts nor
|
|
55
|
+
// dispatched by the gateway's MCP handler, so no caller could exist anyway.
|
|
56
|
+
//# sourceMappingURL=search-by-connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-by-connector.js","sourceRoot":"","sources":["../../src/tools/search-by-connector.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,kFAAkF;AAClF,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,sEAAsE;AACtE,uEAAuE;AACvE,gCAAgC;AAGhC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2EAA2E,CAAC;IACxF,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oGAAoG,CACrG;IACH,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChF,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACxE,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtE,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC9E,CAAC;AAEF,MAAM,WAAW,GACf,kFAAkF;IAClF,uFAAuF;IACvF,oGAAoG,CAAC;AAEvG,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC,WAAW,EACX,WAAW,EACX,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,GAAG,CACD,4CAA4C,EAC5C,MAA+D,CAChE,CACF,CACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,2EAA2E;AAC3E,8EAA8E;AAC9E,2CAA2C;AAC3C,EAAE;AACF,6EAA6E;AAC7E,4EAA4E"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { get, wrapToolHandler } from "../client.js";
|
|
3
3
|
const inputSchema = {
|
|
4
|
-
//
|
|
5
|
-
// (uses the /by-
|
|
4
|
+
// Connector lookup — when provided, searches opportunities for a specific
|
|
5
|
+
// connector (uses the /by-connector endpoint under the hood)
|
|
6
6
|
linkedin_public_id: z
|
|
7
7
|
.string()
|
|
8
8
|
.optional()
|
|
9
|
-
.describe("LinkedIn public identifier of a specific
|
|
10
|
-
"When provided, returns opportunities
|
|
9
|
+
.describe("LinkedIn public identifier of a specific CONNECTOR — a person in your network (e.g. john-doe). " +
|
|
10
|
+
"When provided, returns the opportunities that connector can introduce you to. " +
|
|
11
|
+
"This does NOT match prospects: to find who can introduce you to a given person, " +
|
|
12
|
+
"use prospect_linkedin_urls instead."),
|
|
11
13
|
// Company identifiers — filter by company
|
|
12
14
|
linkedin_urls: z.string().optional().describe("Comma-separated company LinkedIn URLs"),
|
|
13
15
|
numeric_ids: z.string().optional().describe("Comma-separated LinkedIn numeric IDs"),
|
|
@@ -52,13 +54,14 @@ const inputSchema = {
|
|
|
52
54
|
};
|
|
53
55
|
export function registerSearchOpportunities(server) {
|
|
54
56
|
server.tool("search_opportunities", "Search referral opportunities across your network. All filters are optional. " +
|
|
55
|
-
"Use linkedin_public_id to get opportunities for a specific
|
|
57
|
+
"Use linkedin_public_id to get opportunities for a specific connector (a person in your network). " +
|
|
58
|
+
"Use prospect_linkedin_urls to find who can introduce you to a specific person. " +
|
|
56
59
|
"Use domains, linkedin_urls, or vanity_names to filter by company. " +
|
|
57
60
|
"Use with no filters to see your full opportunity list.", inputSchema, wrapToolHandler((params) => {
|
|
58
61
|
const p = params;
|
|
59
|
-
// Route to /by-
|
|
62
|
+
// Route to /by-connector when searching for a specific connector
|
|
60
63
|
if (p.linkedin_public_id) {
|
|
61
|
-
return get("/network/search/opportunities/by-
|
|
64
|
+
return get("/network/search/opportunities/by-connector", p);
|
|
62
65
|
}
|
|
63
66
|
// Otherwise use the general search endpoint
|
|
64
67
|
return get("/network/search/opportunities/by-company", p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-opportunities.js","sourceRoot":"","sources":["../../src/tools/search-opportunities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,GAAG;IAClB,
|
|
1
|
+
{"version":3,"file":"search-opportunities.js","sourceRoot":"","sources":["../../src/tools/search-opportunities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,GAAG;IAClB,0EAA0E;IAC1E,6DAA6D;IAC7D,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,iGAAiG;QAC/F,gFAAgF;QAChF,kFAAkF;QAClF,qCAAqC,CACxC;IAEH,0CAA0C;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACtF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACnF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IACrG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAErF,0BAA0B;IAC1B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACpG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACxE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAC/G,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtE,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACxF,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC5F,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC/G,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAChF,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAChG,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACzF,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC5F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAChF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACpF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAE5E,eAAe;IACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IAC1G,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAE5G,kBAAkB;IAClB,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IAChH,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC9F,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChF,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAEtF,QAAQ;IACR,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC9E,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,+EAA+E;QAC7E,mGAAmG;QACnG,iFAAiF;QACjF,oEAAoE;QACpE,wDAAwD,EAC1D,WAAW,EACX,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,MAAM,CAAC,GAAG,MAA+D,CAAC;QAE1E,iEAAiE;QACjE,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,4CAA4C;QAC5C,OAAO,GAAG,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/tools/whats-new.js
CHANGED
|
@@ -7,6 +7,15 @@
|
|
|
7
7
|
// Append an entry here every time a new tool or breaking change ships.
|
|
8
8
|
// Keep entries in reverse-chronological order (newest first).
|
|
9
9
|
const CHANGELOG = [
|
|
10
|
+
{
|
|
11
|
+
version: "1.2.0",
|
|
12
|
+
date: "2026-07-28",
|
|
13
|
+
changes: [
|
|
14
|
+
"BREAKING (this tool only): import_contacts is now import_connectors, and its 'contacts' argument is now 'connectors'. The people you import are connectors — they carry a connector_tag and are what list_connectors returns. The old TOOL NAME is gone; call import_connectors instead. The underlying REST endpoint is unaffected: POST /network/import/contacts and the 'contacts' body field both still work for direct HTTP callers.",
|
|
15
|
+
"RENAME: the by-contact search response now reports the matched person as 'connector'. The 'contact' field is still returned with the same value, so nothing reading it breaks.",
|
|
16
|
+
"CLARIFIED: search_opportunities with linkedin_public_id matches the CONNECTOR side of an opportunity, not the prospect side. To find who can introduce you to a given person, filter by prospect_linkedin_urls instead.",
|
|
17
|
+
],
|
|
18
|
+
},
|
|
10
19
|
{
|
|
11
20
|
version: "1.1.0",
|
|
12
21
|
date: "2026-05-02",
|
|
@@ -23,7 +32,10 @@ const CHANGELOG = [
|
|
|
23
32
|
],
|
|
24
33
|
},
|
|
25
34
|
];
|
|
26
|
-
|
|
35
|
+
// Exported so index.ts can report the same version it advertises here, rather
|
|
36
|
+
// than carrying a second literal that drifts. Keep in step with the `version`
|
|
37
|
+
// field in package.json — that is what users actually install.
|
|
38
|
+
export const CURRENT_VERSION = CHANGELOG[0].version;
|
|
27
39
|
const UPGRADE_INSTRUCTIONS = "To upgrade: npm install -g @clustr-ai/mcp-server@latest " +
|
|
28
40
|
"(or re-run whatever install command you used originally, e.g. npx @clustr-ai/mcp-server)";
|
|
29
41
|
export function registerWhatsNew(server) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whats-new.js","sourceRoot":"","sources":["../../src/tools/whats-new.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,+EAA+E;AAC/E,qFAAqF;AACrF,2EAA2E;AAC3E,mFAAmF;AACnF,EAAE;AACF,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,SAAS,GAA2D;IACxE;QACE,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP,mMAAmM;YACnM,gHAAgH;SACjH;KACF;IACD;QACE,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP,8PAA8P;SAC/P;KACF;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"whats-new.js","sourceRoot":"","sources":["../../src/tools/whats-new.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,+EAA+E;AAC/E,qFAAqF;AACrF,2EAA2E;AAC3E,mFAAmF;AACnF,EAAE;AACF,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,SAAS,GAA2D;IACxE;QACE,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP,2aAA2a;YAC3a,gLAAgL;YAChL,yNAAyN;SAC1N;KACF;IACD;QACE,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP,mMAAmM;YACnM,gHAAgH;SACjH;KACF;IACD;QACE,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP,8PAA8P;SAC/P;KACF;CACF,CAAC;AAEF,8EAA8E;AAC9E,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAEpD,MAAM,oBAAoB,GACxB,2DAA2D;IAC3D,0FAA0F,CAAC;AAE7F,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,IAAI,CACT,WAAW,EACX,qDAAqD;QACnD,oBAAoB,eAAe,IAAI;QACvC,gFAAgF,EAClF,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAa;YACtB,0CAA0C,eAAe,EAAE;YAC3D,EAAE;YACF,mBAAmB;SACpB,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YAClD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CACR,6EAA6E,CAC9E,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEjC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clustr-ai/mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "MCP server for the Clustr API — search referral opportunities, manage target accounts, and import contacts from AI assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import-contacts.js","sourceRoot":"","sources":["../../src/tools/import-contacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9D,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;KAClE,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACpF,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,YAAY,EAAE,CAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChD,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC/C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC9C,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACnD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC1C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC1C,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;CAC5D,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,+DAA+D;QAC7D,4GAA4G;QAC5G,iHAAiH,EACnH,WAAW,EACX,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-by-contact.js","sourceRoot":"","sources":["../../src/tools/search-by-contact.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,kFAAkF;AAGlF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2EAA2E,CAAC;IACxF,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oGAAoG,CACrG;IACH,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChF,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACxE,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtE,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9D,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC9E,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,qDAAqD;QACnD,oFAAoF,EACtF,WAAW,EACX,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,GAAG,CAAC,0CAA0C,EAAE,MAA+D,CAAC,CACjH,CACF,CAAC;AACJ,CAAC"}
|