@meertrack/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/LICENSE +21 -0
- package/README.md +313 -0
- package/dist/auth.d.ts +75 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +109 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +84 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +178 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +68 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +48 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +46 -0
- package/dist/logger.js.map +1 -0
- package/dist/prompts/competitor_deep_dive.d.ts +5 -0
- package/dist/prompts/competitor_deep_dive.d.ts.map +1 -0
- package/dist/prompts/competitor_deep_dive.js +48 -0
- package/dist/prompts/competitor_deep_dive.js.map +1 -0
- package/dist/prompts/index.d.ts +13 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +20 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/weekly_recap.d.ts +5 -0
- package/dist/prompts/weekly_recap.d.ts.map +1 -0
- package/dist/prompts/weekly_recap.js +28 -0
- package/dist/prompts/weekly_recap.js.map +1 -0
- package/dist/prompts/whats_new.d.ts +5 -0
- package/dist/prompts/whats_new.d.ts.map +1 -0
- package/dist/prompts/whats_new.js +46 -0
- package/dist/prompts/whats_new.js.map +1 -0
- package/dist/server.d.ts +34 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +43 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/get_activity_item.d.ts +6 -0
- package/dist/tools/get_activity_item.d.ts.map +1 -0
- package/dist/tools/get_activity_item.js +33 -0
- package/dist/tools/get_activity_item.js.map +1 -0
- package/dist/tools/get_competitor.d.ts +6 -0
- package/dist/tools/get_competitor.d.ts.map +1 -0
- package/dist/tools/get_competitor.js +37 -0
- package/dist/tools/get_competitor.js.map +1 -0
- package/dist/tools/get_digest.d.ts +6 -0
- package/dist/tools/get_digest.d.ts.map +1 -0
- package/dist/tools/get_digest.js +33 -0
- package/dist/tools/get_digest.js.map +1 -0
- package/dist/tools/index.d.ts +20 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list_activities.d.ts +6 -0
- package/dist/tools/list_activities.d.ts.map +1 -0
- package/dist/tools/list_activities.js +87 -0
- package/dist/tools/list_activities.js.map +1 -0
- package/dist/tools/list_competitors.d.ts +6 -0
- package/dist/tools/list_competitors.d.ts.map +1 -0
- package/dist/tools/list_competitors.js +58 -0
- package/dist/tools/list_competitors.js.map +1 -0
- package/dist/tools/list_digests.d.ts +6 -0
- package/dist/tools/list_digests.d.ts.map +1 -0
- package/dist/tools/list_digests.js +63 -0
- package/dist/tools/list_digests.js.map +1 -0
- package/dist/tools/list_latest_digests.d.ts +6 -0
- package/dist/tools/list_latest_digests.d.ts.map +1 -0
- package/dist/tools/list_latest_digests.js +30 -0
- package/dist/tools/list_latest_digests.js.map +1 -0
- package/dist/tools/whoami.d.ts +6 -0
- package/dist/tools/whoami.d.ts.map +1 -0
- package/dist/tools/whoami.js +30 -0
- package/dist/tools/whoami.js.map +1 -0
- package/dist/transports/http.d.ts +58 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +179 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/stdio.d.ts +12 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +35 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/types.d.ts +6204 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +359 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const WEEKLY_RECAP_NAME = "weekly_recap";
|
|
2
|
+
export const WEEKLY_RECAP_DESCRIPTION = "One-shot 'what happened across my tracked competitors this week'. Fetches the latest digests and produces a per-competitor recap plus a cross-competitor highlights list.";
|
|
3
|
+
export function registerWeeklyRecap(server) {
|
|
4
|
+
server.registerPrompt(WEEKLY_RECAP_NAME, {
|
|
5
|
+
title: "Weekly recap",
|
|
6
|
+
description: WEEKLY_RECAP_DESCRIPTION,
|
|
7
|
+
}, () => ({
|
|
8
|
+
messages: [
|
|
9
|
+
{
|
|
10
|
+
role: "user",
|
|
11
|
+
content: {
|
|
12
|
+
type: "text",
|
|
13
|
+
text: [
|
|
14
|
+
"Produce a weekly recap of my tracked competitors using the Meertrack MCP server.",
|
|
15
|
+
"",
|
|
16
|
+
"1. Call `list_latest_digests`. This returns one digest per active competitor from the most recent batch day — no parameters needed.",
|
|
17
|
+
"2. For each digest, write a short one-paragraph summary (2-4 sentences) of that competitor's activity. Use the digest's `summary.executive_summary` and `summary.themes` as source material; do not invent details not present in the payload.",
|
|
18
|
+
"3. After all per-competitor paragraphs, add a `## Highlights` section: a 3-6 bullet list of the most notable changes across competitors (new features shipped, pricing changes, big hires, removed offerings).",
|
|
19
|
+
"4. If `list_latest_digests` returns an empty `data` array, say so plainly — do not guess.",
|
|
20
|
+
"",
|
|
21
|
+
"Formatting: Markdown. Headings per competitor (`## {competitor name}`). Keep paragraphs tight; prefer concrete facts (URLs, dates, prices) over generic phrasing.",
|
|
22
|
+
].join("\n"),
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=weekly_recap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weekly_recap.js","sourceRoot":"","sources":["../../src/prompts/weekly_recap.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEhD,MAAM,CAAC,MAAM,wBAAwB,GACnC,2KAA2K,CAAC;AAE9K,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,wBAAwB;KACtC,EACD,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;wBACJ,kFAAkF;wBAClF,EAAE;wBACF,qIAAqI;wBACrI,gPAAgP;wBAChP,gNAAgN;wBAChN,2FAA2F;wBAC3F,EAAE;wBACF,mKAAmK;qBACpK,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export declare const WHATS_NEW_NAME = "whats_new";
|
|
3
|
+
export declare const WHATS_NEW_DESCRIPTION = "Cross-competitor 'what's new in the last N days' feed, grouped by competitor, with `added` changes highlighted.";
|
|
4
|
+
export declare function registerWhatsNew(server: McpServer): void;
|
|
5
|
+
//# sourceMappingURL=whats_new.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whats_new.d.ts","sourceRoot":"","sources":["../../src/prompts/whats_new.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,eAAO,MAAM,qBAAqB,oHACiF,CAAC;AAepH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmCxD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const WHATS_NEW_NAME = "whats_new";
|
|
3
|
+
export const WHATS_NEW_DESCRIPTION = "Cross-competitor 'what's new in the last N days' feed, grouped by competitor, with `added` changes highlighted.";
|
|
4
|
+
const argsSchema = {
|
|
5
|
+
// MCP wire format passes prompt args as strings — coerce to int inside the
|
|
6
|
+
// handler instead of declaring z.number(), which would fail validation on
|
|
7
|
+
// a client-sent "7".
|
|
8
|
+
days: z
|
|
9
|
+
.string()
|
|
10
|
+
.optional()
|
|
11
|
+
.describe("Lookback window in days. Default 7. Integer string, e.g. `14`."),
|
|
12
|
+
};
|
|
13
|
+
const DEFAULT_DAYS = 7;
|
|
14
|
+
const MAX_DAYS = 90;
|
|
15
|
+
export function registerWhatsNew(server) {
|
|
16
|
+
server.registerPrompt(WHATS_NEW_NAME, {
|
|
17
|
+
title: "What's new",
|
|
18
|
+
description: WHATS_NEW_DESCRIPTION,
|
|
19
|
+
argsSchema,
|
|
20
|
+
}, (args) => {
|
|
21
|
+
const parsed = args.days !== undefined ? Number.parseInt(args.days, 10) : DEFAULT_DAYS;
|
|
22
|
+
const days = Number.isFinite(parsed) && parsed >= 1 && parsed <= MAX_DAYS ? parsed : DEFAULT_DAYS;
|
|
23
|
+
return {
|
|
24
|
+
messages: [
|
|
25
|
+
{
|
|
26
|
+
role: "user",
|
|
27
|
+
content: {
|
|
28
|
+
type: "text",
|
|
29
|
+
text: [
|
|
30
|
+
`Summarize what every tracked competitor has done in the last ${days} days using the Meertrack MCP server.`,
|
|
31
|
+
"",
|
|
32
|
+
`1. Compute the cutoff: now minus ${days} days, formatted as ISO 8601 (e.g. \`2026-04-16T00:00:00Z\`).`,
|
|
33
|
+
"2. Call `list_activities` with `from=<cutoff>` and the default `limit=50`. If `pagination.has_more` is true, page until exhausted or you have enough material for the summary — cap at ~3 pages.",
|
|
34
|
+
"3. Group the rows by `competitor.name`. Within each competitor, sort by `change_date` descending.",
|
|
35
|
+
"4. For each competitor with at least one change, write `### {name}` followed by a bullet list. Each bullet = `[change_type] section — short one-line description`. Put `[added]` changes first; they matter most.",
|
|
36
|
+
"5. End with a `## Cross-competitor themes` section: 2-4 bullets naming patterns that appear across multiple competitors (shared hiring surge, parallel pricing moves, similar new features, etc.). Only include themes you can point to concrete rows for.",
|
|
37
|
+
"",
|
|
38
|
+
"Rules: do not invent changes that aren't in the `list_activities` response. If a competitor has zero rows in the window, omit them — don't pad.",
|
|
39
|
+
].join("\n"),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=whats_new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whats_new.js","sourceRoot":"","sources":["../../src/prompts/whats_new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,qBAAqB,GAChC,iHAAiH,CAAC;AAEpH,MAAM,UAAU,GAAG;IACjB,2EAA2E;IAC3E,0EAA0E;IAC1E,qBAAqB;IACrB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;CACrE,CAAC;AAEX,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,cAAc,CACnB,cAAc,EACd;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,qBAAqB;QAClC,UAAU;KACX,EACD,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACvF,MAAM,IAAI,GACR,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;QACvF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACJ,gEAAgE,IAAI,uCAAuC;4BAC3G,EAAE;4BACF,oCAAoC,IAAI,+DAA+D;4BACvG,kMAAkM;4BAClM,mGAAmG;4BACnG,mNAAmN;4BACnN,4PAA4P;4BAC5P,EAAE;4BACF,iJAAiJ;yBAClJ,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export interface BuildServerOptions {
|
|
3
|
+
/** Validated bearer (must start with `mt_live_`). */
|
|
4
|
+
apiKey: string;
|
|
5
|
+
/** Optional upstream override (defaults to `MEERTRACK_API_BASE_URL` or prod). */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** Optional fetch implementation for tests. Defaults to global fetch. */
|
|
8
|
+
fetchImpl?: typeof fetch;
|
|
9
|
+
/**
|
|
10
|
+
* Optional hook fired after every upstream Meertrack response. The HTTP
|
|
11
|
+
* transport uses it to capture `X-Request-Id` for the per-request log line.
|
|
12
|
+
*/
|
|
13
|
+
onUpstreamResponse?: (info: {
|
|
14
|
+
status: number;
|
|
15
|
+
requestId: string | null;
|
|
16
|
+
}) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare const SERVER_NAME = "meertrack";
|
|
19
|
+
/**
|
|
20
|
+
* Build a ready-to-connect `McpServer` for one bearer.
|
|
21
|
+
*
|
|
22
|
+
* stdio mode: called once at process start with the env-var key.
|
|
23
|
+
* HTTP mode: called per request with the request's bearer so each request
|
|
24
|
+
* gets an isolated client, and no mutable state is shared across bearers.
|
|
25
|
+
* (See `src/transports/http.ts` for why this is not a performance mistake.)
|
|
26
|
+
*
|
|
27
|
+
* Protocol version negotiation is handled by the SDK at `initialize` time —
|
|
28
|
+
* the server natively supports MCP 2025-11-25 (plus back-compat versions).
|
|
29
|
+
* Capabilities are declared as static `tools: {}` / `prompts: {}` — both
|
|
30
|
+
* lists are baked in, so no `listChanged` notifications are emitted. No
|
|
31
|
+
* `resources` / `logging` / `completions` in v1.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildServer(opts: BuildServerOptions): McpServer;
|
|
34
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS,CA2B/D"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { MeertrackClient } from "./client.js";
|
|
3
|
+
import { registerAllTools } from "./tools/index.js";
|
|
4
|
+
import { registerAllPrompts } from "./prompts/index.js";
|
|
5
|
+
import { VERSION } from "./version.js";
|
|
6
|
+
export const SERVER_NAME = "meertrack";
|
|
7
|
+
/**
|
|
8
|
+
* Build a ready-to-connect `McpServer` for one bearer.
|
|
9
|
+
*
|
|
10
|
+
* stdio mode: called once at process start with the env-var key.
|
|
11
|
+
* HTTP mode: called per request with the request's bearer so each request
|
|
12
|
+
* gets an isolated client, and no mutable state is shared across bearers.
|
|
13
|
+
* (See `src/transports/http.ts` for why this is not a performance mistake.)
|
|
14
|
+
*
|
|
15
|
+
* Protocol version negotiation is handled by the SDK at `initialize` time —
|
|
16
|
+
* the server natively supports MCP 2025-11-25 (plus back-compat versions).
|
|
17
|
+
* Capabilities are declared as static `tools: {}` / `prompts: {}` — both
|
|
18
|
+
* lists are baked in, so no `listChanged` notifications are emitted. No
|
|
19
|
+
* `resources` / `logging` / `completions` in v1.
|
|
20
|
+
*/
|
|
21
|
+
export function buildServer(opts) {
|
|
22
|
+
const client = new MeertrackClient({
|
|
23
|
+
apiKey: opts.apiKey,
|
|
24
|
+
...(opts.baseUrl !== undefined ? { baseUrl: opts.baseUrl } : {}),
|
|
25
|
+
...(opts.fetchImpl !== undefined ? { fetchImpl: opts.fetchImpl } : {}),
|
|
26
|
+
...(opts.onUpstreamResponse !== undefined
|
|
27
|
+
? { onUpstreamResponse: opts.onUpstreamResponse }
|
|
28
|
+
: {}),
|
|
29
|
+
});
|
|
30
|
+
const server = new McpServer({
|
|
31
|
+
name: SERVER_NAME,
|
|
32
|
+
version: VERSION,
|
|
33
|
+
}, {
|
|
34
|
+
capabilities: {
|
|
35
|
+
tools: {},
|
|
36
|
+
prompts: {},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
registerAllTools(server, client);
|
|
40
|
+
registerAllPrompts(server);
|
|
41
|
+
return server;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAmBvC,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;SACZ;KACF,CACF,CAAC;IAEF,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
export declare const GET_ACTIVITY_ITEM_NAME = "get_activity_item";
|
|
4
|
+
export declare const GET_ACTIVITY_ITEM_DESCRIPTION: string;
|
|
5
|
+
export declare function registerGetActivityItem(server: McpServer, client: MeertrackClient): void;
|
|
6
|
+
//# sourceMappingURL=get_activity_item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_activity_item.d.ts","sourceRoot":"","sources":["../../src/tools/get_activity_item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,eAAO,MAAM,6BAA6B,QAK9B,CAAC;AAMb,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAsBxF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ActivityDetailResponse, objectId } from "../types.js";
|
|
2
|
+
import { toToolError } from "../errors.js";
|
|
3
|
+
export const GET_ACTIVITY_ITEM_NAME = "get_activity_item";
|
|
4
|
+
export const GET_ACTIVITY_ITEM_DESCRIPTION = [
|
|
5
|
+
"Wraps `GET /activity/{row_uuid}`. Returns the full payload for a single activity row — the section-specific detail (full blog body, full pricing table, etc.) that the `list_activities` feed only summarizes.",
|
|
6
|
+
"",
|
|
7
|
+
"Chaining: Use after `list_activities` to drill into a row the user has asked about. Pass the row's `id` from the list response.",
|
|
8
|
+
"Errors: `not_found` (row isn't in this workspace), `forbidden_competitor` (the row's competitor is in a different workspace), `unauthorized`, `rate_limited`.",
|
|
9
|
+
].join("\n");
|
|
10
|
+
const inputSchema = {
|
|
11
|
+
row_uuid: objectId("Activity row `id` from a `list_activities` result."),
|
|
12
|
+
};
|
|
13
|
+
export function registerGetActivityItem(server, client) {
|
|
14
|
+
server.registerTool(GET_ACTIVITY_ITEM_NAME, {
|
|
15
|
+
title: "Get activity item",
|
|
16
|
+
description: GET_ACTIVITY_ITEM_DESCRIPTION,
|
|
17
|
+
inputSchema,
|
|
18
|
+
outputSchema: ActivityDetailResponse.shape,
|
|
19
|
+
annotations: { readOnlyHint: true },
|
|
20
|
+
}, async (args) => {
|
|
21
|
+
try {
|
|
22
|
+
const data = await client.getActivityItem(args.row_uuid);
|
|
23
|
+
return {
|
|
24
|
+
structuredContent: data,
|
|
25
|
+
content: [{ type: "text", text: JSON.stringify(data) }],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
return toToolError(err);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=get_activity_item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_activity_item.js","sourceRoot":"","sources":["../../src/tools/get_activity_item.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,gNAAgN;IAChN,EAAE;IACF,iIAAiI;IACjI,+JAA+J;CAChK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,QAAQ,CAAC,oDAAoD,CAAC;CAChE,CAAC;AAEX,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAuB;IAChF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,6BAA6B;QAC1C,WAAW;QACX,YAAY,EAAE,sBAAsB,CAAC,KAAK;QAC1C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO;gBACL,iBAAiB,EAAE,IAAI;gBACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
export declare const GET_COMPETITOR_NAME = "get_competitor";
|
|
4
|
+
export declare const GET_COMPETITOR_DESCRIPTION: string;
|
|
5
|
+
export declare function registerGetCompetitor(server: McpServer, client: MeertrackClient): void;
|
|
6
|
+
//# sourceMappingURL=get_competitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_competitor.d.ts","sourceRoot":"","sources":["../../src/tools/get_competitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,eAAO,MAAM,0BAA0B,QAS3B,CAAC;AAMb,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAsBtF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CompetitorOverviewResponse, objectId } from "../types.js";
|
|
2
|
+
import { toToolError } from "../errors.js";
|
|
3
|
+
export const GET_COMPETITOR_NAME = "get_competitor";
|
|
4
|
+
export const GET_COMPETITOR_DESCRIPTION = [
|
|
5
|
+
"Wraps `GET /competitors/{id}`. Returns a single competitor's full profile plus the most recent items from each tracked section. Sections returned (with per-section item caps):",
|
|
6
|
+
"- `blog-posts` (up to 20), `press-posts` (20), `case-studies` (20)",
|
|
7
|
+
"- `job-listings` (100), `pricing` (9), `messaging` (100)",
|
|
8
|
+
"- `metrics-claimed` (100), `logos` (100)",
|
|
9
|
+
"- `linkedin-posts` (20), `youtube-videos` (20), `events` (20)",
|
|
10
|
+
"",
|
|
11
|
+
"Chaining: Use after `list_competitors` — pass the `id` from a result row. For an activity timeline across sections, call `list_activities` with `competitor_ids=[id]` instead.",
|
|
12
|
+
"Errors: `not_found` (no such competitor in this workspace), `competitor_inactive` (archived — reactivate in dashboard), `forbidden_competitor` (different workspace), `unauthorized`, `rate_limited`.",
|
|
13
|
+
].join("\n");
|
|
14
|
+
const inputSchema = {
|
|
15
|
+
id: objectId("Competitor id from `list_competitors`."),
|
|
16
|
+
};
|
|
17
|
+
export function registerGetCompetitor(server, client) {
|
|
18
|
+
server.registerTool(GET_COMPETITOR_NAME, {
|
|
19
|
+
title: "Get competitor",
|
|
20
|
+
description: GET_COMPETITOR_DESCRIPTION,
|
|
21
|
+
inputSchema,
|
|
22
|
+
outputSchema: CompetitorOverviewResponse.shape,
|
|
23
|
+
annotations: { readOnlyHint: true },
|
|
24
|
+
}, async (args) => {
|
|
25
|
+
try {
|
|
26
|
+
const data = await client.getCompetitor(args.id);
|
|
27
|
+
return {
|
|
28
|
+
structuredContent: data,
|
|
29
|
+
content: [{ type: "text", text: JSON.stringify(data) }],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
return toToolError(err);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=get_competitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_competitor.js","sourceRoot":"","sources":["../../src/tools/get_competitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,iLAAiL;IACjL,oEAAoE;IACpE,0DAA0D;IAC1D,0CAA0C;IAC1C,+DAA+D;IAC/D,EAAE;IACF,gLAAgL;IAChL,uMAAuM;CACxM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,QAAQ,CAAC,wCAAwC,CAAC;CAC9C,CAAC;AAEX,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAuB;IAC9E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0BAA0B;QACvC,WAAW;QACX,YAAY,EAAE,0BAA0B,CAAC,KAAK;QAC9C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO;gBACL,iBAAiB,EAAE,IAAI;gBACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
export declare const GET_DIGEST_NAME = "get_digest";
|
|
4
|
+
export declare const GET_DIGEST_DESCRIPTION: string;
|
|
5
|
+
export declare function registerGetDigest(server: McpServer, client: MeertrackClient): void;
|
|
6
|
+
//# sourceMappingURL=get_digest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_digest.d.ts","sourceRoot":"","sources":["../../src/tools/get_digest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,eAAO,MAAM,eAAe,eAAe,CAAC;AAE5C,eAAO,MAAM,sBAAsB,QAKvB,CAAC;AAMb,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAsBlF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DigestResponse, objectId } from "../types.js";
|
|
2
|
+
import { toToolError } from "../errors.js";
|
|
3
|
+
export const GET_DIGEST_NAME = "get_digest";
|
|
4
|
+
export const GET_DIGEST_DESCRIPTION = [
|
|
5
|
+
"Wraps `GET /digests/{id}`. Returns a single digest's full payload — executive summary, themes, and update count for one competitor in one period.",
|
|
6
|
+
"",
|
|
7
|
+
"Chaining: Use after `list_digests` or `list_latest_digests` — pass the `id` from a result row.",
|
|
8
|
+
"Errors: `not_found` (digest not in this workspace), `forbidden_competitor`, `unauthorized`, `rate_limited`.",
|
|
9
|
+
].join("\n");
|
|
10
|
+
const inputSchema = {
|
|
11
|
+
id: objectId("Digest id from a `list_digests` or `list_latest_digests` row."),
|
|
12
|
+
};
|
|
13
|
+
export function registerGetDigest(server, client) {
|
|
14
|
+
server.registerTool(GET_DIGEST_NAME, {
|
|
15
|
+
title: "Get digest",
|
|
16
|
+
description: GET_DIGEST_DESCRIPTION,
|
|
17
|
+
inputSchema,
|
|
18
|
+
outputSchema: DigestResponse.shape,
|
|
19
|
+
annotations: { readOnlyHint: true },
|
|
20
|
+
}, async (args) => {
|
|
21
|
+
try {
|
|
22
|
+
const data = await client.getDigest(args.id);
|
|
23
|
+
return {
|
|
24
|
+
structuredContent: data,
|
|
25
|
+
content: [{ type: "text", text: JSON.stringify(data) }],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
return toToolError(err);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=get_digest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_digest.js","sourceRoot":"","sources":["../../src/tools/get_digest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,mJAAmJ;IACnJ,EAAE;IACF,gGAAgG;IAChG,6GAA6G;CAC9G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,QAAQ,CAAC,+DAA+D,CAAC;CACrE,CAAC;AAEX,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,MAAuB;IAC1E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,sBAAsB;QACnC,WAAW;QACX,YAAY,EAAE,cAAc,CAAC,KAAK;QAClC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,OAAO;gBACL,iBAAiB,EAAE,IAAI;gBACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
import { WHOAMI_NAME } from "./whoami.js";
|
|
4
|
+
import { LIST_COMPETITORS_NAME } from "./list_competitors.js";
|
|
5
|
+
import { GET_COMPETITOR_NAME } from "./get_competitor.js";
|
|
6
|
+
import { LIST_ACTIVITIES_NAME } from "./list_activities.js";
|
|
7
|
+
import { GET_ACTIVITY_ITEM_NAME } from "./get_activity_item.js";
|
|
8
|
+
import { LIST_DIGESTS_NAME } from "./list_digests.js";
|
|
9
|
+
import { LIST_LATEST_DIGESTS_NAME } from "./list_latest_digests.js";
|
|
10
|
+
import { GET_DIGEST_NAME } from "./get_digest.js";
|
|
11
|
+
/**
|
|
12
|
+
* Register all 8 tools on `server`, each closing over a shared `client`.
|
|
13
|
+
* Order is cosmetic — `tools/list` returns tools in registration order, and
|
|
14
|
+
* a workspace → competitors → activity → digests ordering reads well when
|
|
15
|
+
* an LLM scans the list.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerAllTools(server: McpServer, client: MeertrackClient): void;
|
|
18
|
+
export declare const TOOL_NAMES: readonly ["whoami", "list_competitors", "get_competitor", "list_activities", "get_activity_item", "list_digests", "list_latest_digests", "get_digest"];
|
|
19
|
+
export { WHOAMI_NAME, LIST_COMPETITORS_NAME, GET_COMPETITOR_NAME, LIST_ACTIVITIES_NAME, GET_ACTIVITY_ITEM_NAME, LIST_DIGESTS_NAME, LIST_LATEST_DIGESTS_NAME, GET_DIGEST_NAME, };
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAkB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAA2B,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAyB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAA0B,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAA2B,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAuB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAA6B,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAqB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CASjF;AAED,eAAO,MAAM,UAAU,wJASb,CAAC;AAEX,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,GAChB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { registerWhoami, WHOAMI_NAME } from "./whoami.js";
|
|
2
|
+
import { registerListCompetitors, LIST_COMPETITORS_NAME } from "./list_competitors.js";
|
|
3
|
+
import { registerGetCompetitor, GET_COMPETITOR_NAME } from "./get_competitor.js";
|
|
4
|
+
import { registerListActivities, LIST_ACTIVITIES_NAME } from "./list_activities.js";
|
|
5
|
+
import { registerGetActivityItem, GET_ACTIVITY_ITEM_NAME } from "./get_activity_item.js";
|
|
6
|
+
import { registerListDigests, LIST_DIGESTS_NAME } from "./list_digests.js";
|
|
7
|
+
import { registerListLatestDigests, LIST_LATEST_DIGESTS_NAME } from "./list_latest_digests.js";
|
|
8
|
+
import { registerGetDigest, GET_DIGEST_NAME } from "./get_digest.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register all 8 tools on `server`, each closing over a shared `client`.
|
|
11
|
+
* Order is cosmetic — `tools/list` returns tools in registration order, and
|
|
12
|
+
* a workspace → competitors → activity → digests ordering reads well when
|
|
13
|
+
* an LLM scans the list.
|
|
14
|
+
*/
|
|
15
|
+
export function registerAllTools(server, client) {
|
|
16
|
+
registerWhoami(server, client);
|
|
17
|
+
registerListCompetitors(server, client);
|
|
18
|
+
registerGetCompetitor(server, client);
|
|
19
|
+
registerListActivities(server, client);
|
|
20
|
+
registerGetActivityItem(server, client);
|
|
21
|
+
registerListDigests(server, client);
|
|
22
|
+
registerListLatestDigests(server, client);
|
|
23
|
+
registerGetDigest(server, client);
|
|
24
|
+
}
|
|
25
|
+
export const TOOL_NAMES = [
|
|
26
|
+
WHOAMI_NAME,
|
|
27
|
+
LIST_COMPETITORS_NAME,
|
|
28
|
+
GET_COMPETITOR_NAME,
|
|
29
|
+
LIST_ACTIVITIES_NAME,
|
|
30
|
+
GET_ACTIVITY_ITEM_NAME,
|
|
31
|
+
LIST_DIGESTS_NAME,
|
|
32
|
+
LIST_LATEST_DIGESTS_NAME,
|
|
33
|
+
GET_DIGEST_NAME,
|
|
34
|
+
];
|
|
35
|
+
export { WHOAMI_NAME, LIST_COMPETITORS_NAME, GET_COMPETITOR_NAME, LIST_ACTIVITIES_NAME, GET_ACTIVITY_ITEM_NAME, LIST_DIGESTS_NAME, LIST_LATEST_DIGESTS_NAME, GET_DIGEST_NAME, };
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAuB;IACzE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW;IACX,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,iBAAiB;IACjB,wBAAwB;IACxB,eAAe;CACP,CAAC;AAEX,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,GAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
export declare const LIST_ACTIVITIES_NAME = "list_activities";
|
|
4
|
+
export declare const LIST_ACTIVITIES_DESCRIPTION: string;
|
|
5
|
+
export declare function registerListActivities(server: McpServer, client: MeertrackClient): void;
|
|
6
|
+
//# sourceMappingURL=list_activities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_activities.d.ts","sourceRoot":"","sources":["../../src/tools/list_activities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AASpD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,eAAO,MAAM,2BAA2B,QAa5B,CAAC;AAuCb,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAiCvF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ActivityListResponse, CHANGE_TYPES, SECTION_SLUGS, paginationInput, } from "../types.js";
|
|
3
|
+
import { toToolError } from "../errors.js";
|
|
4
|
+
export const LIST_ACTIVITIES_NAME = "list_activities";
|
|
5
|
+
export const LIST_ACTIVITIES_DESCRIPTION = [
|
|
6
|
+
"Wraps `GET /activity`. Returns a cursor-paginated feed of detected changes across every tracked competitor — the core 'what shipped' surface.",
|
|
7
|
+
"",
|
|
8
|
+
"Filters:",
|
|
9
|
+
`- \`sections\`: restrict to specific section types (enum of ${SECTION_SLUGS.length}: ${SECTION_SLUGS.join(", ")}).`,
|
|
10
|
+
`- \`change_types\`: restrict to \`added\` / \`updated\` / \`removed\` (${CHANGE_TYPES.join(" / ")}).`,
|
|
11
|
+
"- `competitor_ids`: narrow to specific competitors.",
|
|
12
|
+
"- `from` / `to`: ISO 8601 date-time window (inclusive). E.g. `from=2026-04-16T00:00:00Z` for the last 7 days.",
|
|
13
|
+
"",
|
|
14
|
+
"Pagination: response carries `pagination.next_cursor`, `pagination.has_more`, and `pagination.total` (total rows matching the filters across the whole window, not just this page). If `has_more`, call again with the `cursor` param set to `next_cursor` to fetch the next page. **Default `limit` is 50** to stay under Claude's tool-result size limit; max is 500.",
|
|
15
|
+
"",
|
|
16
|
+
"Chaining: Start here for any 'what happened recently' question; use `get_activity_item` to drill into a specific row's full payload.",
|
|
17
|
+
"Errors: `invalid_parameter` (bad section/change_type/date), `invalid_cursor` (stale or tampered), `unauthorized`, `rate_limited`.",
|
|
18
|
+
].join("\n");
|
|
19
|
+
const inputSchema = {
|
|
20
|
+
competitor_ids: z
|
|
21
|
+
.array(z.string().uuid())
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("Narrow to these competitor ids. Omit for all tracked competitors."),
|
|
24
|
+
sections: z
|
|
25
|
+
.array(z.enum(SECTION_SLUGS))
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Filter to specific section types (e.g. `['pricing', 'blog-posts']`)."),
|
|
28
|
+
change_types: z
|
|
29
|
+
.array(z.enum(CHANGE_TYPES))
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Filter to specific change types. `added` is usually the interesting one."),
|
|
32
|
+
from: z
|
|
33
|
+
.string()
|
|
34
|
+
.datetime({ offset: true })
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Inclusive lower bound, ISO 8601 with offset (e.g. `2026-04-16T00:00:00Z`)."),
|
|
37
|
+
to: z
|
|
38
|
+
.string()
|
|
39
|
+
.datetime({ offset: true })
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Inclusive upper bound, ISO 8601 with offset."),
|
|
42
|
+
limit: z
|
|
43
|
+
.number()
|
|
44
|
+
.int()
|
|
45
|
+
.min(1)
|
|
46
|
+
.max(500)
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Page size. Default 50 (tool-result size limit); max 500. Prefer smaller pages and paginate."),
|
|
49
|
+
cursor: paginationInput.cursor,
|
|
50
|
+
};
|
|
51
|
+
const DEFAULT_LIMIT = 50;
|
|
52
|
+
export function registerListActivities(server, client) {
|
|
53
|
+
server.registerTool(LIST_ACTIVITIES_NAME, {
|
|
54
|
+
title: "List activities",
|
|
55
|
+
description: LIST_ACTIVITIES_DESCRIPTION,
|
|
56
|
+
inputSchema,
|
|
57
|
+
outputSchema: ActivityListResponse.shape,
|
|
58
|
+
annotations: { readOnlyHint: true },
|
|
59
|
+
}, async (args) => {
|
|
60
|
+
try {
|
|
61
|
+
const params = {
|
|
62
|
+
limit: args.limit ?? DEFAULT_LIMIT,
|
|
63
|
+
};
|
|
64
|
+
if (args.competitor_ids && args.competitor_ids.length > 0)
|
|
65
|
+
params.competitor_ids = args.competitor_ids;
|
|
66
|
+
if (args.sections && args.sections.length > 0)
|
|
67
|
+
params.sections = args.sections;
|
|
68
|
+
if (args.change_types && args.change_types.length > 0)
|
|
69
|
+
params.change_types = args.change_types;
|
|
70
|
+
if (args.from)
|
|
71
|
+
params.from = args.from;
|
|
72
|
+
if (args.to)
|
|
73
|
+
params.to = args.to;
|
|
74
|
+
if (args.cursor)
|
|
75
|
+
params.cursor = args.cursor;
|
|
76
|
+
const data = await client.listActivity(params);
|
|
77
|
+
return {
|
|
78
|
+
structuredContent: data,
|
|
79
|
+
content: [{ type: "text", text: JSON.stringify(data) }],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return toToolError(err);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=list_activities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_activities.js","sourceRoot":"","sources":["../../src/tools/list_activities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
export declare const LIST_COMPETITORS_NAME = "list_competitors";
|
|
4
|
+
export declare const LIST_COMPETITORS_DESCRIPTION: string;
|
|
5
|
+
export declare function registerListCompetitors(server: McpServer, client: MeertrackClient): void;
|
|
6
|
+
//# sourceMappingURL=list_competitors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_competitors.d.ts","sourceRoot":"","sources":["../../src/tools/list_competitors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,eAAO,MAAM,4BAA4B,QAU7B,CAAC;AAmBb,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CA+BxF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { CompetitorDetailListResponse } from "../types.js";
|
|
3
|
+
import { toToolError } from "../errors.js";
|
|
4
|
+
export const LIST_COMPETITORS_NAME = "list_competitors";
|
|
5
|
+
export const LIST_COMPETITORS_DESCRIPTION = [
|
|
6
|
+
"Wraps `GET /competitors`. Lists every competitor in the authenticated workspace. Defaults to `expand=full` so the agent gets each competitor's social URLs (`linkedin`, `twitter`, …) and canonical page URLs (`pricing`, `blog`, …) in one call — no round-trip to `get_competitor` needed for that metadata.",
|
|
7
|
+
"",
|
|
8
|
+
"Filters:",
|
|
9
|
+
"- `active`: when true, only competitors still being tracked; when false, only archived ones.",
|
|
10
|
+
"- `ids`: narrow to a specific subset (comma-joined upstream).",
|
|
11
|
+
"- `expand`: `full` (default — profile + social + pages) or `compact` (id / name / website / category / active only).",
|
|
12
|
+
"",
|
|
13
|
+
"Chaining: Discover competitor ids here, then pass them to `get_competitor`, `list_activities` (`competitor_ids`), or `list_digests` (`competitor_id`).",
|
|
14
|
+
"Errors: `unauthorized`, `rate_limited`.",
|
|
15
|
+
].join("\n");
|
|
16
|
+
const inputSchema = {
|
|
17
|
+
active: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("Filter to active (true) or archived (false) competitors. Omit to return both."),
|
|
21
|
+
ids: z
|
|
22
|
+
.array(z.string().uuid())
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Narrow to this subset of competitor ids. Omit to return all."),
|
|
25
|
+
expand: z
|
|
26
|
+
.enum(["full", "compact"])
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("`full` (default) adds social + pages metadata; `compact` returns id/name/website/category/active only."),
|
|
29
|
+
};
|
|
30
|
+
export function registerListCompetitors(server, client) {
|
|
31
|
+
server.registerTool(LIST_COMPETITORS_NAME, {
|
|
32
|
+
title: "List competitors",
|
|
33
|
+
description: LIST_COMPETITORS_DESCRIPTION,
|
|
34
|
+
inputSchema,
|
|
35
|
+
outputSchema: CompetitorDetailListResponse.shape,
|
|
36
|
+
annotations: { readOnlyHint: true },
|
|
37
|
+
}, async (args) => {
|
|
38
|
+
try {
|
|
39
|
+
const expand = args.expand ?? "full";
|
|
40
|
+
const params = {};
|
|
41
|
+
if (args.active !== undefined)
|
|
42
|
+
params.active = args.active;
|
|
43
|
+
if (args.ids && args.ids.length > 0)
|
|
44
|
+
params.ids = args.ids;
|
|
45
|
+
if (expand === "full")
|
|
46
|
+
params.expand = "full";
|
|
47
|
+
const data = await client.listCompetitors(params);
|
|
48
|
+
return {
|
|
49
|
+
structuredContent: data,
|
|
50
|
+
content: [{ type: "text", text: JSON.stringify(data) }],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return toToolError(err);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=list_competitors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_competitors.js","sourceRoot":"","sources":["../../src/tools/list_competitors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAExD,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,gTAAgT;IAChT,EAAE;IACF,UAAU;IACV,8FAA8F;IAC9F,+DAA+D;IAC/D,sHAAsH;IACtH,EAAE;IACF,wJAAwJ;IACxJ,yCAAyC;CAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,GAAG,EAAE,CAAC;SACH,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;SACzB,QAAQ,EAAE;SACV,QAAQ,CACP,wGAAwG,CACzG;CACK,CAAC;AAEX,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAuB;IAChF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,4BAA4B;QACzC,WAAW;QACX,YAAY,EAAE,4BAA4B,CAAC,KAAK;QAChD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;YACrC,MAAM,MAAM,GAIR,EAAE,CAAC;YACP,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3D,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAC3D,IAAI,MAAM,KAAK,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO;gBACL,iBAAiB,EAAE,IAAI;gBACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MeertrackClient } from "../client.js";
|
|
3
|
+
export declare const LIST_DIGESTS_NAME = "list_digests";
|
|
4
|
+
export declare const LIST_DIGESTS_DESCRIPTION: string;
|
|
5
|
+
export declare function registerListDigests(server: McpServer, client: MeertrackClient): void;
|
|
6
|
+
//# sourceMappingURL=list_digests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_digests.d.ts","sourceRoot":"","sources":["../../src/tools/list_digests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,eAAO,MAAM,wBAAwB,QAOzB,CAAC;AAsBb,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CA4BpF"}
|