celavii-mcp 0.1.2 → 0.1.3
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 +66 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -162,7 +162,7 @@ function registerProfileTools(server, client) {
|
|
|
162
162
|
},
|
|
163
163
|
async (args) => {
|
|
164
164
|
const params = new URLSearchParams();
|
|
165
|
-
params.set("
|
|
165
|
+
params.set("terms", args.affinities.join(","));
|
|
166
166
|
if (args.match_mode) params.set("match_mode", args.match_mode);
|
|
167
167
|
if (args.min_followers !== void 0) params.set("min_followers", String(args.min_followers));
|
|
168
168
|
if (args.max_followers !== void 0) params.set("max_followers", String(args.max_followers));
|
|
@@ -182,7 +182,7 @@ function registerProfileTools(server, client) {
|
|
|
182
182
|
})
|
|
183
183
|
},
|
|
184
184
|
async (args) => {
|
|
185
|
-
const result = await client.post("/profiles/bulk", {
|
|
185
|
+
const result = await client.post("/profiles/bulk", { profiles: args.identifiers });
|
|
186
186
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
187
187
|
}
|
|
188
188
|
);
|
|
@@ -492,7 +492,7 @@ function registerListTools(server, client) {
|
|
|
492
492
|
async (args) => {
|
|
493
493
|
const params = new URLSearchParams();
|
|
494
494
|
if (args.limit !== void 0) params.set("limit", String(args.limit));
|
|
495
|
-
if (args.cursor) params.set("
|
|
495
|
+
if (args.cursor) params.set("offset", args.cursor);
|
|
496
496
|
const qs = params.toString();
|
|
497
497
|
const result = await client.get(`/lists/${encodeURIComponent(args.list_id)}/members${qs ? `?${qs}` : ""}`);
|
|
498
498
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
@@ -511,7 +511,7 @@ function registerListTools(server, client) {
|
|
|
511
511
|
async (args) => {
|
|
512
512
|
const result = await client.post(
|
|
513
513
|
`/lists/${encodeURIComponent(args.list_id)}/members`,
|
|
514
|
-
{
|
|
514
|
+
{ profiles: args.identifiers }
|
|
515
515
|
);
|
|
516
516
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
517
517
|
}
|
|
@@ -529,7 +529,7 @@ function registerListTools(server, client) {
|
|
|
529
529
|
async (args) => {
|
|
530
530
|
const result = await client.delete(
|
|
531
531
|
`/lists/${encodeURIComponent(args.list_id)}/members`,
|
|
532
|
-
{
|
|
532
|
+
{ profiles: args.identifiers }
|
|
533
533
|
);
|
|
534
534
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
535
535
|
}
|
|
@@ -551,12 +551,17 @@ var profileSourceSchema = z5.object({
|
|
|
551
551
|
list_id: z5.string().optional().describe("List UUID \u2014 analyze all members of this list"),
|
|
552
552
|
campaign_id: z5.string().optional().describe("Campaign UUID \u2014 analyze all creators in this campaign")
|
|
553
553
|
});
|
|
554
|
-
function
|
|
555
|
-
|
|
556
|
-
if (args.
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
554
|
+
async function resolveIdentifiers(client, args) {
|
|
555
|
+
if (args.identifiers?.length) return args.identifiers;
|
|
556
|
+
if (args.list_id) {
|
|
557
|
+
const resp = await client.get(`/lists/${args.list_id}/members?limit=100`);
|
|
558
|
+
return (resp.data || []).map((m) => m.username || m.profile_id || "").filter(Boolean);
|
|
559
|
+
}
|
|
560
|
+
if (args.campaign_id) {
|
|
561
|
+
const resp = await client.get(`/campaigns/${args.campaign_id}/creators?limit=100`);
|
|
562
|
+
return (resp.data || []).map((m) => m.username || m.profile_id || "").filter(Boolean);
|
|
563
|
+
}
|
|
564
|
+
return [];
|
|
560
565
|
}
|
|
561
566
|
function registerAnalyticsTools(server, client) {
|
|
562
567
|
server.registerTool(
|
|
@@ -612,7 +617,9 @@ function registerAnalyticsTools(server, client) {
|
|
|
612
617
|
inputSchema: profileSourceSchema
|
|
613
618
|
},
|
|
614
619
|
async (args) => {
|
|
615
|
-
const
|
|
620
|
+
const ids = await resolveIdentifiers(client, args);
|
|
621
|
+
const params = new URLSearchParams();
|
|
622
|
+
if (ids.length) params.set("profile_ids", ids.join(","));
|
|
616
623
|
const result = await client.get(`/analytics/network-overlap?${params}`);
|
|
617
624
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
618
625
|
}
|
|
@@ -625,7 +632,9 @@ function registerAnalyticsTools(server, client) {
|
|
|
625
632
|
inputSchema: profileSourceSchema
|
|
626
633
|
},
|
|
627
634
|
async (args) => {
|
|
628
|
-
const
|
|
635
|
+
const ids = await resolveIdentifiers(client, args);
|
|
636
|
+
const params = new URLSearchParams();
|
|
637
|
+
if (ids.length) params.set("usernames", ids.join(","));
|
|
629
638
|
const result = await client.get(`/analytics/shared-hashtags?${params}`);
|
|
630
639
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
631
640
|
}
|
|
@@ -654,17 +663,21 @@ function registerAnalyticsTools(server, client) {
|
|
|
654
663
|
"get_affinity_posts",
|
|
655
664
|
{
|
|
656
665
|
title: "Get Affinity Posts",
|
|
657
|
-
description: "Get posts
|
|
666
|
+
description: "Get posts linked to a brand/topic affinity term. Searches globally across all profiles. Costs 1 credit.",
|
|
658
667
|
inputSchema: z5.object({
|
|
659
|
-
|
|
660
|
-
|
|
668
|
+
affinity: z5.string().describe('Affinity term to search for (e.g. "photography", "Nike", "fitness")'),
|
|
669
|
+
affinity_type: z5.enum(["all", "topic", "brand", "location", "category"]).optional().describe("Filter by affinity type (default: 'all')"),
|
|
670
|
+
min_engagement: z5.number().int().optional().describe("Minimum total engagement"),
|
|
671
|
+
sort: z5.enum(["engagement", "date"]).optional().describe("Sort order (default: 'engagement')"),
|
|
661
672
|
limit: z5.number().int().min(1).max(100).optional().describe("Results per page (default 25, max 100)")
|
|
662
673
|
})
|
|
663
674
|
},
|
|
664
675
|
async (args) => {
|
|
665
676
|
const params = new URLSearchParams();
|
|
666
|
-
params.set("
|
|
667
|
-
if (args.
|
|
677
|
+
params.set("affinity", args.affinity);
|
|
678
|
+
if (args.affinity_type) params.set("affinity_type", args.affinity_type);
|
|
679
|
+
if (args.min_engagement !== void 0) params.set("min_engagement", String(args.min_engagement));
|
|
680
|
+
if (args.sort) params.set("sort", args.sort);
|
|
668
681
|
if (args.limit !== void 0) params.set("limit", String(args.limit));
|
|
669
682
|
const result = await client.get(`/analytics/affinity-posts?${params}`);
|
|
670
683
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
@@ -697,7 +710,9 @@ function registerAnalyticsTools(server, client) {
|
|
|
697
710
|
inputSchema: profileSourceSchema
|
|
698
711
|
},
|
|
699
712
|
async (args) => {
|
|
700
|
-
const
|
|
713
|
+
const ids = await resolveIdentifiers(client, args);
|
|
714
|
+
const params = new URLSearchParams();
|
|
715
|
+
if (ids.length) params.set("profiles", ids.join(","));
|
|
701
716
|
const result = await client.get(`/analytics/cohort/stats?${params}`);
|
|
702
717
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
703
718
|
}
|
|
@@ -732,24 +747,22 @@ function registerContentTools(server, client) {
|
|
|
732
747
|
title: "Search Content",
|
|
733
748
|
description: "Search posts across the creator database by keywords, hashtags, or mentions. Returns matching posts with engagement metrics and media. Costs 1 credit.",
|
|
734
749
|
inputSchema: z6.object({
|
|
735
|
-
query: z6.string().
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
limit: z6.number().int().min(1).max(100).optional().describe("Results per page (default 25, max 100)")
|
|
741
|
-
cursor: z6.string().optional().describe("Pagination cursor")
|
|
750
|
+
query: z6.string().describe("Search query \u2014 matches post captions (required)"),
|
|
751
|
+
author: z6.string().optional().describe("Filter by creator username"),
|
|
752
|
+
min_engagement: z6.number().int().optional().describe("Minimum total engagement (likes + comments)"),
|
|
753
|
+
since: z6.string().optional().describe("Only posts after this date (ISO 8601, e.g. 2025-01-01)"),
|
|
754
|
+
sort: z6.enum(["relevance", "engagement", "date"]).optional().describe("Sort order (default: 'relevance')"),
|
|
755
|
+
limit: z6.number().int().min(1).max(100).optional().describe("Results per page (default 25, max 100)")
|
|
742
756
|
})
|
|
743
757
|
},
|
|
744
758
|
async (args) => {
|
|
745
759
|
const params = new URLSearchParams();
|
|
746
|
-
|
|
747
|
-
if (args.
|
|
748
|
-
if (args.
|
|
749
|
-
if (args.
|
|
750
|
-
if (args.
|
|
760
|
+
params.set("query", args.query);
|
|
761
|
+
if (args.author) params.set("author", args.author);
|
|
762
|
+
if (args.min_engagement !== void 0) params.set("min_engagement", String(args.min_engagement));
|
|
763
|
+
if (args.since) params.set("since", args.since);
|
|
764
|
+
if (args.sort) params.set("sort", args.sort);
|
|
751
765
|
if (args.limit !== void 0) params.set("limit", String(args.limit));
|
|
752
|
-
if (args.cursor) params.set("cursor", args.cursor);
|
|
753
766
|
const result = await client.get(`/content/search?${params}`);
|
|
754
767
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
755
768
|
}
|
|
@@ -990,13 +1003,18 @@ function registerEnhanceTools(server, client) {
|
|
|
990
1003
|
description: "Trigger AI enhancement for one or more profiles. Enhancement adds affinities, demographics, niche analysis, and more. Returns a job ID \u2014 poll with get_enhancement_status to check progress. Costs 1+ credits.",
|
|
991
1004
|
inputSchema: z9.object({
|
|
992
1005
|
identifiers: z9.array(z9.string()).describe("Array of usernames or profile IDs to enhance"),
|
|
1006
|
+
mode: z9.enum(["basic", "enhanced"]).optional().describe("Enhancement mode: 'basic' (1 credit/profile) or 'enhanced' (2 credits/profile). Default: basic"),
|
|
1007
|
+
dry_run: z9.boolean().optional().describe("If true, returns cost estimate without triggering enhancement"),
|
|
1008
|
+
auto_confirm: z9.boolean().optional().describe("If true, auto-confirms the job without a separate confirm step"),
|
|
1009
|
+
authorize_overage: z9.boolean().optional().describe("If true, allows proceeding even if credits are insufficient"),
|
|
993
1010
|
options: z9.object({
|
|
994
1011
|
force: z9.boolean().optional().describe("Re-enhance even if already enhanced")
|
|
995
1012
|
}).optional().describe("Enhancement options")
|
|
996
1013
|
})
|
|
997
1014
|
},
|
|
998
1015
|
async (args) => {
|
|
999
|
-
const
|
|
1016
|
+
const { identifiers, options, ...rest } = args;
|
|
1017
|
+
const result = await client.post("/enhance/profiles", { profiles: identifiers, ...rest });
|
|
1000
1018
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
1001
1019
|
}
|
|
1002
1020
|
);
|
|
@@ -1068,7 +1086,8 @@ function registerScrapeTools(server, client) {
|
|
|
1068
1086
|
})
|
|
1069
1087
|
},
|
|
1070
1088
|
async (args) => {
|
|
1071
|
-
const
|
|
1089
|
+
const { limit, ...rest } = args;
|
|
1090
|
+
const result = await client.post("/scrape/followers", { ...rest, ...limit !== void 0 && { max_results: limit } });
|
|
1072
1091
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
1073
1092
|
}
|
|
1074
1093
|
);
|
|
@@ -1083,7 +1102,8 @@ function registerScrapeTools(server, client) {
|
|
|
1083
1102
|
})
|
|
1084
1103
|
},
|
|
1085
1104
|
async (args) => {
|
|
1086
|
-
const
|
|
1105
|
+
const { limit, ...rest } = args;
|
|
1106
|
+
const result = await client.post("/scrape/following", { ...rest, ...limit !== void 0 && { max_results: limit } });
|
|
1087
1107
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
1088
1108
|
}
|
|
1089
1109
|
);
|
|
@@ -1099,7 +1119,11 @@ function registerScrapeTools(server, client) {
|
|
|
1099
1119
|
})
|
|
1100
1120
|
},
|
|
1101
1121
|
async (args) => {
|
|
1102
|
-
const
|
|
1122
|
+
const body = {};
|
|
1123
|
+
if (args.location_id) body.location_ids = [args.location_id];
|
|
1124
|
+
if (args.location_name) body.start_urls = [`https://www.instagram.com/explore/locations/${args.location_name}/`];
|
|
1125
|
+
if (args.limit !== void 0) body.max_items = args.limit;
|
|
1126
|
+
const result = await client.post("/scrape/locations", body);
|
|
1103
1127
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
1104
1128
|
}
|
|
1105
1129
|
);
|
|
@@ -1114,7 +1138,10 @@ function registerScrapeTools(server, client) {
|
|
|
1114
1138
|
})
|
|
1115
1139
|
},
|
|
1116
1140
|
async (args) => {
|
|
1117
|
-
const result = await client.post("/scrape/hashtags",
|
|
1141
|
+
const result = await client.post("/scrape/hashtags", {
|
|
1142
|
+
hashtags: [args.hashtag],
|
|
1143
|
+
...args.limit !== void 0 && { max_items: args.limit }
|
|
1144
|
+
});
|
|
1118
1145
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
1119
1146
|
}
|
|
1120
1147
|
);
|
|
@@ -1162,7 +1189,8 @@ function registerRefineTools(server, client) {
|
|
|
1162
1189
|
})
|
|
1163
1190
|
},
|
|
1164
1191
|
async (args) => {
|
|
1165
|
-
const
|
|
1192
|
+
const { identifiers, ...rest } = args;
|
|
1193
|
+
const result = await client.post("/refine/profiles", { profiles: identifiers, ...rest });
|
|
1166
1194
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
1167
1195
|
}
|
|
1168
1196
|
);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/server.ts","../src/client.ts","../src/tools/meta.ts","../src/tools/profiles.ts","../src/tools/campaigns.ts","../src/tools/lists.ts","../src/tools/analytics.ts","../src/tools/content.ts","../src/tools/manage.ts","../src/tools/knowledge.ts","../src/tools/enhance.ts","../src/tools/scrape.ts","../src/tools/refine.ts"],"sourcesContent":["/**\n * Celavii MCP Server — stdio Entry Point\n *\n * Usage:\n * CELAVII_API_KEY=cvii_live_xxx npx celavii-mcp\n *\n * Or in MCP config:\n * {\n * \"mcpServers\": {\n * \"celavii\": {\n * \"command\": \"npx\",\n * \"args\": [\"-y\", \"celavii-mcp@latest\"],\n * \"env\": { \"CELAVII_API_KEY\": \"cvii_live_xxx\" }\n * }\n * }\n * }\n */\n\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { createServer } from './server.js'\n\nasync function main() {\n const apiKey = process.env.CELAVII_API_KEY\n if (!apiKey) {\n console.error(\n 'Error: CELAVII_API_KEY environment variable is required.\\n' +\n 'Get your API key at https://www.celavii.com/settings/api-keys\\n' +\n '\\nUsage:\\n' +\n ' CELAVII_API_KEY=cvii_live_xxx npx celavii-mcp',\n )\n process.exit(1)\n }\n\n const baseUrl = process.env.CELAVII_BASE_URL || undefined\n\n const server = createServer({ apiKey, baseUrl })\n const transport = new StdioServerTransport()\n\n await server.connect(transport)\n}\n\nmain().catch((err) => {\n console.error('Fatal error:', err)\n process.exit(1)\n})\n","/**\n * Celavii MCP Server — Server Setup & Tool Registration\n *\n * Creates an McpServer instance and registers all tools organized by category.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { CelaviiClient, CelaviiApiError } from './client.js'\nimport { registerMetaTools } from './tools/meta.js'\nimport { registerProfileTools } from './tools/profiles.js'\nimport { registerCampaignTools } from './tools/campaigns.js'\nimport { registerListTools } from './tools/lists.js'\nimport { registerAnalyticsTools } from './tools/analytics.js'\nimport { registerContentTools } from './tools/content.js'\nimport { registerManageTools } from './tools/manage.js'\nimport { registerKnowledgeTools } from './tools/knowledge.js'\nimport { registerEnhanceTools } from './tools/enhance.js'\nimport { registerScrapeTools } from './tools/scrape.js'\nimport { registerRefineTools } from './tools/refine.js'\n\nexport interface CreateServerOptions {\n apiKey: string\n baseUrl?: string\n}\n\nexport function createServer(options: CreateServerOptions): McpServer {\n const { apiKey, baseUrl } = options\n\n const server = new McpServer(\n {\n name: 'celavii',\n version: '0.1.0',\n },\n {\n capabilities: {\n logging: {},\n },\n },\n )\n\n const client = new CelaviiClient(apiKey, baseUrl)\n\n // Register all tool groups\n registerMetaTools(server, client)\n registerProfileTools(server, client)\n registerCampaignTools(server, client)\n registerListTools(server, client)\n registerAnalyticsTools(server, client)\n registerContentTools(server, client)\n registerManageTools(server, client)\n registerKnowledgeTools(server, client)\n registerEnhanceTools(server, client)\n registerScrapeTools(server, client)\n registerRefineTools(server, client)\n\n return server\n}\n\nexport { CelaviiClient, CelaviiApiError }\n","/**\n * Celavii MCP Server — HTTP Client\n *\n * Thin wrapper around fetch that adds Bearer auth, error handling,\n * and structured error responses for MCP tool handlers.\n */\n\nconst DEFAULT_BASE_URL = 'https://www.celavii.com/api/v1'\n\nexport class CelaviiApiError extends Error {\n constructor(\n message: string,\n public code: string,\n public status: number,\n public retryAfter?: number,\n ) {\n super(message)\n this.name = 'CelaviiApiError'\n }\n}\n\nexport class CelaviiClient {\n private baseUrl: string\n private apiKey: string\n\n constructor(apiKey: string, baseUrl?: string) {\n this.apiKey = apiKey\n this.baseUrl = (baseUrl || DEFAULT_BASE_URL).replace(/\\/$/, '')\n }\n\n private async request(path: string, init?: RequestInit): Promise<unknown> {\n const url = `${this.baseUrl}${path}`\n const res = await fetch(url, {\n ...init,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'celavii-mcp/0.1.0',\n ...init?.headers,\n },\n })\n\n let json: unknown\n try {\n json = await res.json()\n } catch {\n throw new CelaviiApiError(\n `HTTP ${res.status}: Failed to parse response`,\n 'INTERNAL_ERROR',\n res.status,\n )\n }\n\n if (!res.ok) {\n const err = json as { error?: { code?: string; message?: string; retry_after?: number } }\n const msg = err?.error?.message || `HTTP ${res.status}`\n const code = err?.error?.code || 'INTERNAL_ERROR'\n throw new CelaviiApiError(msg, code, res.status, err?.error?.retry_after)\n }\n\n return json\n }\n\n async get(path: string): Promise<unknown> {\n return this.request(path)\n }\n\n async post(path: string, body?: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'POST',\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n }\n\n async patch(path: string, body: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'PATCH',\n body: JSON.stringify(body),\n })\n }\n\n async put(path: string, body: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'PUT',\n body: JSON.stringify(body),\n })\n }\n\n async delete(path: string, body?: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'DELETE',\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n }\n}\n","/**\n * Meta tools — Account info and usage\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerMetaTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'get_account_info',\n {\n title: 'Get Account Info',\n description:\n 'Get information about the current API key, organization, and usage summary. ' +\n 'Useful to verify API key is working and see available scopes. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/me')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_usage',\n {\n title: 'Get Usage',\n description:\n 'Get credit usage and rate limit status for the current API key. ' +\n 'Shows total requests, credits used, daily breakdown, and rate limit info. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/usage')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Profile tools — Search, details, affinities, posts, network, bulk\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerProfileTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'search_profiles',\n {\n title: 'Search Profiles',\n description:\n 'Search the Celavii creator database. Filter by query text, niche, location, gender, ' +\n 'follower count. Returns matching Instagram profiles with basic stats. ' +\n 'At least one filter is required. Costs 1 credit.',\n inputSchema: z.object({\n query: z.string().optional().describe('Search query — matches username, display name, or bio keywords'),\n niche: z.string().optional().describe(\"Filter by niche/topic (e.g. 'fitness', 'fashion', 'tech')\"),\n location: z.string().optional().describe(\"Filter by location (e.g. 'Miami', 'Los Angeles, California')\"),\n gender: z.enum(['male', 'female', 'non_binary', 'brand']).optional().describe('Filter by gender'),\n min_followers: z.number().int().optional().describe('Minimum follower count'),\n max_followers: z.number().int().optional().describe('Maximum follower count'),\n has_contact: z.boolean().optional().describe('Only return profiles with email or phone'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor from a previous response'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.query) params.set('query', args.query)\n if (args.niche) params.set('niche', args.niche)\n if (args.location) params.set('location', args.location)\n if (args.gender) params.set('gender', args.gender)\n if (args.min_followers !== undefined) params.set('min_followers', String(args.min_followers))\n if (args.max_followers !== undefined) params.set('max_followers', String(args.max_followers))\n if (args.has_contact) params.set('has_contact', 'true')\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/profiles/search?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'search_profiles_by_affinities',\n {\n title: 'Search Profiles by Affinities',\n description:\n 'Search creators by their AI-analyzed brand or topic affinities. ' +\n 'Find creators who have affinity for specific brands, interests, or topics. Costs 1 credit.',\n inputSchema: z.object({\n affinities: z.array(z.string()).describe(\"Affinity terms to search for (e.g. ['Nike', 'fitness', 'running'])\"),\n match_mode: z.enum(['any', 'all']).optional().describe(\"'any' = match any affinity, 'all' = must match all (default: 'any')\"),\n min_followers: z.number().int().optional().describe('Minimum follower count'),\n max_followers: z.number().int().optional().describe('Maximum follower count'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor from a previous response'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('affinities', args.affinities.join(','))\n if (args.match_mode) params.set('match_mode', args.match_mode)\n if (args.min_followers !== undefined) params.set('min_followers', String(args.min_followers))\n if (args.max_followers !== undefined) params.set('max_followers', String(args.max_followers))\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/profiles/search/affinities?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profiles_bulk',\n {\n title: 'Get Profiles Bulk',\n description:\n 'Get detailed information for multiple profiles at once by username or profile ID. ' +\n 'Up to 100 profiles per request. Costs 1 credit.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs (max 100)'),\n }),\n },\n async (args) => {\n const result = await client.post('/profiles/bulk', { identifiers: args.identifiers })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile',\n {\n title: 'Get Profile',\n description:\n 'Get detailed information about a single Instagram profile by username or profile ID. ' +\n 'Returns bio, stats, niche, location, and more. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username (without @) or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_affinities',\n {\n title: 'Get Profile Affinities',\n description:\n 'Get AI-analyzed brand and topic affinities for a profile. ' +\n 'Shows what brands, interests, and topics a creator is associated with. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/affinities`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_posts',\n {\n title: 'Get Profile Posts',\n description:\n 'Get recent posts for a profile. Returns post content, engagement metrics, ' +\n 'media URLs, and hashtags. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of posts (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/posts${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_network',\n {\n title: 'Get Profile Network',\n description:\n 'Get the social network graph for a profile — mutual connections, ' +\n 'top followers, and following relationships. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/network`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_followers',\n {\n title: 'Get Profile Followers',\n description:\n 'Get the followers list for a profile. Only available if followers have been scraped. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of followers (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/followers${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_following',\n {\n title: 'Get Profile Following',\n description:\n 'Get the accounts a profile is following. Only available if following data has been scraped. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of following (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/following${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_social_links',\n {\n title: 'Get Profile Social Links',\n description:\n 'Get external social media links found in a profile bio (YouTube, TikTok, Twitter, etc.). Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/social-links`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_contact',\n {\n title: 'Get Profile Contact',\n description:\n 'Get contact information (email, phone) for a profile. ' +\n 'Requires the profiles:contact scope. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/contact`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Campaign tools — List, metrics, creators, content\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerCampaignTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'list_campaigns',\n {\n title: 'List Campaigns',\n description:\n 'List all campaigns in the organization. Optionally filter by status. Costs 0 credits.',\n inputSchema: z.object({\n status: z.enum(['active', 'draft', 'completed', 'archived']).optional().describe('Filter by campaign status'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of campaigns (default 25, max 100)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.status) params.set('status', args.status)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const qs = params.toString()\n const result = await client.get(`/campaigns${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_campaign_metrics',\n {\n title: 'Get Campaign Metrics',\n description:\n 'Get performance metrics for a specific campaign — total creators, posts, ' +\n 'engagement, reach, and more. Costs 0 credits.',\n inputSchema: z.object({\n campaign_id: z.string().describe('Campaign UUID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/campaigns/${encodeURIComponent(args.campaign_id)}/metrics`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_campaign_creators',\n {\n title: 'Get Campaign Creators',\n description:\n 'Get the list of creators assigned to a campaign with their statuses and metrics. Costs 0 credits.',\n inputSchema: z.object({\n campaign_id: z.string().describe('Campaign UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/campaigns/${encodeURIComponent(args.campaign_id)}/creators${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_campaign_content',\n {\n title: 'Get Campaign Content',\n description:\n 'Get content (posts) associated with a campaign. Includes engagement data ' +\n 'and media. Costs 1 credit.',\n inputSchema: z.object({\n campaign_id: z.string().describe('Campaign UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/campaigns/${encodeURIComponent(args.campaign_id)}/content${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * List tools — CRUD + member management\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerListTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'list_lists',\n {\n title: 'List Lists',\n description: 'Get all creator lists in the organization. Costs 0 credits.',\n inputSchema: z.object({\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/lists${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'create_list',\n {\n title: 'Create List',\n description: 'Create a new creator list. Costs 1 credit.',\n inputSchema: z.object({\n name: z.string().describe('Name of the list'),\n description: z.string().optional().describe('Optional description'),\n }),\n },\n async (args) => {\n const result = await client.post('/lists', { name: args.name, description: args.description })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_list',\n {\n title: 'Get List',\n description: 'Get details for a specific list by ID. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/lists/${encodeURIComponent(args.list_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'update_list',\n {\n title: 'Update List',\n description: 'Update a list name or description. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n name: z.string().optional().describe('New name'),\n description: z.string().optional().describe('New description'),\n }),\n },\n async (args) => {\n const { list_id, ...body } = args\n const result = await client.patch(`/lists/${encodeURIComponent(list_id)}`, body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'delete_list',\n {\n title: 'Delete List',\n description: 'Delete a list. This does not delete the creators in the list. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n }),\n },\n async (args) => {\n const result = await client.delete(`/lists/${encodeURIComponent(args.list_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_list_members',\n {\n title: 'Get List Members',\n description: 'Get the creator profiles in a list. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/lists/${encodeURIComponent(args.list_id)}/members${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'add_list_members',\n {\n title: 'Add List Members',\n description: 'Add creators to a list by username or profile ID. Costs 1 credit.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to add'),\n }),\n },\n async (args) => {\n const result = await client.post(\n `/lists/${encodeURIComponent(args.list_id)}/members`,\n { identifiers: args.identifiers },\n )\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'remove_list_members',\n {\n title: 'Remove List Members',\n description: 'Remove creators from a list. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to remove'),\n }),\n },\n async (args) => {\n const result = await client.delete(\n `/lists/${encodeURIComponent(args.list_id)}/members`,\n { identifiers: args.identifiers },\n )\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Analytics tools — Demographics, locations, niches, overlap, cohort\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\n/** Schema for endpoints that accept profile_ids + scope (demographics) */\nconst demographicsSchema = z.object({\n profile_ids: z.array(z.string()).optional().describe('Array of usernames or profile IDs to analyze'),\n scope: z.enum(['global', 'org']).optional().describe(\"'global' (default, all profiles) or 'org' (managed only)\"),\n})\n\n/** Schema for endpoints that accept scope + limit only (locations, niches) */\nconst orgLevelSchema = z.object({\n scope: z.enum(['global', 'org']).optional().describe(\"'global' (default, all profiles) or 'org' (managed only)\"),\n limit: z.number().int().min(1).max(100).optional().describe('Max results (default 20, max 100)'),\n})\n\n/** Schema for profile source parameters used by overlap, shared-hashtags, cohort */\nconst profileSourceSchema = z.object({\n identifiers: z.array(z.string()).optional().describe('Array of usernames or profile IDs to analyze'),\n list_id: z.string().optional().describe('List UUID — analyze all members of this list'),\n campaign_id: z.string().optional().describe('Campaign UUID — analyze all creators in this campaign'),\n})\n\nfunction buildSourceParams(args: { identifiers?: string[]; list_id?: string; campaign_id?: string }): URLSearchParams {\n const params = new URLSearchParams()\n if (args.identifiers?.length) params.set('identifiers', args.identifiers.join(','))\n if (args.list_id) params.set('list_id', args.list_id)\n if (args.campaign_id) params.set('campaign_id', args.campaign_id)\n return params\n}\n\nexport function registerAnalyticsTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'get_demographics',\n {\n title: 'Get Demographics',\n description:\n 'Get audience demographics breakdown (age, gender distribution). ' +\n 'Optionally pass profile_ids to analyze a subset, or scope=org for managed profiles only. Costs 1 credit.',\n inputSchema: demographicsSchema,\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.profile_ids?.length) params.set('profile_ids', args.profile_ids.join(','))\n if (args.scope) params.set('scope', args.scope)\n const result = await client.get(`/analytics/demographics?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_locations',\n {\n title: 'Get Locations',\n description:\n 'Get location distribution — top cities and countries. ' +\n 'Use scope=org for managed profiles only. Costs 1 credit.',\n inputSchema: orgLevelSchema,\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.scope) params.set('scope', args.scope)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/analytics/locations?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_niches',\n {\n title: 'Get Niches',\n description:\n 'Get niche/topic distribution across profiles. ' +\n 'Use scope=org for managed profiles only. Costs 1 credit.',\n inputSchema: orgLevelSchema,\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.scope) params.set('scope', args.scope)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/analytics/niches?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_network_overlap',\n {\n title: 'Get Network Overlap',\n description:\n 'Get follower/following overlap between profiles. Shows shared connections. ' +\n 'Provide identifiers, a list_id, or a campaign_id. Costs 1 credit.',\n inputSchema: profileSourceSchema,\n },\n async (args) => {\n const params = buildSourceParams(args)\n const result = await client.get(`/analytics/network-overlap?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_shared_hashtags',\n {\n title: 'Get Shared Hashtags',\n description:\n 'Get hashtags shared across a set of profiles. Shows common themes and topics. ' +\n 'Provide identifiers, a list_id, or a campaign_id. Costs 1 credit.',\n inputSchema: profileSourceSchema,\n },\n async (args) => {\n const params = buildSourceParams(args)\n const result = await client.get(`/analytics/shared-hashtags?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_hashtag_creators',\n {\n title: 'Get Hashtag Creators',\n description:\n 'Find creators who use specific hashtags. Useful for discovering creators by topic. Costs 1 credit.',\n inputSchema: z.object({\n hashtags: z.array(z.string()).describe(\"Hashtags to search for (without #, e.g. ['fitness', 'gym'])\"),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('hashtags', args.hashtags.join(','))\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/analytics/hashtag-creators?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_affinity_posts',\n {\n title: 'Get Affinity Posts',\n description:\n 'Get posts that demonstrate brand/topic affinities for specific creators. Costs 1 credit.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs'),\n affinity: z.string().optional().describe('Filter to a specific affinity term'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('identifiers', args.identifiers.join(','))\n if (args.affinity) params.set('affinity', args.affinity)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/analytics/affinity-posts?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'analyze_cohort',\n {\n title: 'Analyze Cohort',\n description:\n 'Run a full cohort analysis on a set of profiles. Includes demographics, affinities, ' +\n 'hashtag usage, and aggregate stats. Costs 2 credits.',\n inputSchema: z.object({\n profiles: z.array(z.string()).optional().describe('Array of usernames or profile IDs'),\n source: z.object({\n type: z.enum(['campaign', 'list', 'hashtag']).describe('Source type'),\n id: z.string().describe('Source ID (campaign UUID, list UUID, or hashtag)'),\n }).optional().describe('Alternative: analyze from a source (campaign, list, or hashtag)'),\n include: z.array(z.string()).optional().describe(\"Data to include: ['affinities', 'demographics', 'hashtags', 'stats']\"),\n }),\n },\n async (args) => {\n const result = await client.post('/analytics/cohort', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_cohort_stats',\n {\n title: 'Get Cohort Stats',\n description:\n 'Get aggregate statistics for a cohort — average followers, engagement rate, etc. ' +\n 'Provide identifiers, a list_id, or a campaign_id. Costs 1 credit.',\n inputSchema: profileSourceSchema,\n },\n async (args) => {\n const params = buildSourceParams(args)\n const result = await client.get(`/analytics/cohort/stats?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'filter_cohort',\n {\n title: 'Filter Cohort',\n description:\n 'Filter a cohort of profiles by advanced criteria — follower range, engagement rate, ' +\n 'niche, location, affinities, and more. Costs 2 credits.',\n inputSchema: z.object({\n profiles: z.array(z.string()).optional().describe('Array of usernames or profile IDs to filter'),\n source: z.object({\n type: z.enum(['campaign', 'list', 'hashtag']).describe('Source type'),\n id: z.string().describe('Source ID'),\n }).optional().describe('Alternative: filter from a source'),\n filters: z.record(z.string(), z.unknown()).optional().describe('Filter criteria (varies by field)'),\n }),\n },\n async (args) => {\n const result = await client.post('/analytics/cohort/filter', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Content tools — Post search\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerContentTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'search_content',\n {\n title: 'Search Content',\n description:\n 'Search posts across the creator database by keywords, hashtags, or mentions. ' +\n 'Returns matching posts with engagement metrics and media. Costs 1 credit.',\n inputSchema: z.object({\n query: z.string().optional().describe('Search query — matches post captions'),\n hashtag: z.string().optional().describe('Filter by hashtag (without #)'),\n username: z.string().optional().describe('Filter by creator username'),\n min_likes: z.number().int().optional().describe('Minimum likes'),\n min_comments: z.number().int().optional().describe('Minimum comments'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.query) params.set('query', args.query)\n if (args.hashtag) params.set('hashtag', args.hashtag)\n if (args.username) params.set('username', args.username)\n if (args.min_likes !== undefined) params.set('min_likes', String(args.min_likes))\n if (args.min_comments !== undefined) params.set('min_comments', String(args.min_comments))\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/content/search?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Manage tools — CRM operations\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerManageTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'get_managed_profiles',\n {\n title: 'Get Managed Profiles',\n description:\n 'Get all profiles in the CRM pipeline with their relationship statuses, ' +\n 'notes, and tags. Costs 0 credits.',\n inputSchema: z.object({\n status: z.string().optional().describe(\"Filter by relationship status (e.g. 'outreached', 'negotiating', 'contracted')\"),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.status) params.set('status', args.status)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/manage/profiles${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_crm_summary',\n {\n title: 'Get CRM Summary',\n description:\n 'Get a summary of the CRM pipeline — counts by status, recent activity, etc. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/manage/summary')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_org_stats',\n {\n title: 'Get Organization Stats',\n description:\n 'Get aggregate statistics for the organization — total profiles, enhanced profiles, ' +\n 'scraped data, and more. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/manage/stats')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'upsert_relationship',\n {\n title: 'Upsert Relationship',\n description:\n 'Create or update a CRM relationship for a creator. Set status, notes, tags. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n status: z.string().optional().describe(\"Relationship status (e.g. 'identified', 'outreached', 'negotiating', 'contracted', 'active', 'paused')\"),\n notes: z.string().optional().describe('Free-text notes about the relationship'),\n tags: z.array(z.string()).optional().describe('Tags for categorization'),\n }),\n },\n async (args) => {\n const { identifier, ...body } = args\n const result = await client.patch(`/manage/profiles/${encodeURIComponent(identifier)}`, body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'delete_relationship',\n {\n title: 'Delete Relationship',\n description:\n 'Remove a creator from the CRM pipeline. Does not delete the profile itself. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.delete(`/manage/profiles/${encodeURIComponent(args.identifier)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Knowledge tools — KB folders, entries, context search\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerKnowledgeTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'list_knowledge_folders',\n {\n title: 'List Knowledge Folders',\n description: 'List all knowledge base folders in the organization. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/knowledge/folders')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'create_knowledge_folder',\n {\n title: 'Create Knowledge Folder',\n description: 'Create a new knowledge base folder. Costs 0 credits.',\n inputSchema: z.object({\n name: z.string().describe('Folder name'),\n description: z.string().optional().describe('Optional description'),\n folder_type: z.enum(['general', 'brand', 'campaign', 'templates', 'research']).optional().describe(\"Folder type (default: 'general')\"),\n parent_folder_id: z.string().optional().describe('UUID of parent folder for nesting'),\n icon_name: z.string().optional().describe('Lucide icon name'),\n color: z.string().optional().describe('Hex color (e.g. #8b5cf6)'),\n }),\n },\n async (args) => {\n const result = await client.post('/knowledge/folders', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_folder_entries',\n {\n title: 'Get Folder Entries',\n description: 'Get all entries in a knowledge base folder. Costs 0 credits.',\n inputSchema: z.object({\n folder_id: z.string().describe('Folder UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/knowledge/folders/${encodeURIComponent(args.folder_id)}/entries${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'create_knowledge_entry',\n {\n title: 'Create Knowledge Entry',\n description: 'Create a new knowledge base entry in a folder. Costs 0 credits.',\n inputSchema: z.object({\n folder_id: z.string().describe('Folder UUID to add the entry to'),\n name: z.string().describe('Entry name'),\n content: z.string().optional().describe('Entry content (markdown supported)'),\n description: z.string().optional().describe('Short description'),\n source_url: z.string().optional().describe('Source URL reference'),\n }),\n },\n async (args) => {\n const result = await client.post('/knowledge/entries', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_knowledge_entry',\n {\n title: 'Get Knowledge Entry',\n description: 'Get a specific knowledge base entry by ID. Costs 0 credits.',\n inputSchema: z.object({\n entry_id: z.string().describe('Entry UUID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/knowledge/entries/${encodeURIComponent(args.entry_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'update_knowledge_entry',\n {\n title: 'Update Knowledge Entry',\n description: 'Update a knowledge base entry. At least one field required. Costs 0 credits.',\n inputSchema: z.object({\n entry_id: z.string().describe('Entry UUID'),\n name: z.string().optional().describe('New name'),\n content: z.string().optional().describe('New content'),\n description: z.string().optional().describe('New description'),\n summary: z.string().optional().describe('New summary'),\n folder_id: z.string().optional().describe('Move to a different folder (UUID)'),\n }),\n },\n async (args) => {\n const { entry_id, ...body } = args\n const result = await client.put(`/knowledge/entries/${encodeURIComponent(entry_id)}`, body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'delete_knowledge_entry',\n {\n title: 'Delete Knowledge Entry',\n description: 'Delete a knowledge base entry. Costs 0 credits.',\n inputSchema: z.object({\n entry_id: z.string().describe('Entry UUID'),\n }),\n },\n async (args) => {\n const result = await client.delete(`/knowledge/entries/${encodeURIComponent(args.entry_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'search_knowledge',\n {\n title: 'Get Knowledge Context',\n description:\n 'Get aggregated brand context from the knowledge base, organized by folder type. ' +\n 'Returns entries for AI agent consumption. Filter by folder type to get specific context. Costs 0 credits.',\n inputSchema: z.object({\n folder_types: z.array(z.string()).optional().describe(\"Filter by folder types (e.g. ['brand', 'campaign', 'research'])\"),\n max_entries: z.number().int().min(1).max(100).optional().describe('Maximum entries to return (default 20, max 100)'),\n include_summaries: z.boolean().optional().describe('Include entry summaries (default true)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.folder_types?.length) params.set('folder_types', args.folder_types.join(','))\n if (args.max_entries !== undefined) params.set('max_entries', String(args.max_entries))\n if (args.include_summaries === false) params.set('include_summaries', 'false')\n const result = await client.get(`/knowledge/context?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Enhance tools — Profile enhancement triggers + status\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerEnhanceTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'enhance_profiles',\n {\n title: 'Enhance Profiles',\n description:\n 'Trigger AI enhancement for one or more profiles. Enhancement adds affinities, ' +\n 'demographics, niche analysis, and more. Returns a job ID — poll with ' +\n 'get_enhancement_status to check progress. Costs 1+ credits.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to enhance'),\n options: z.object({\n force: z.boolean().optional().describe('Re-enhance even if already enhanced'),\n }).optional().describe('Enhancement options'),\n }),\n },\n async (args) => {\n const result = await client.post('/enhance/profiles', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'enhance_bulk',\n {\n title: 'Enhance Bulk',\n description:\n 'Trigger bulk enhancement for a large set of profiles (from a list or campaign). ' +\n 'Returns a job ID. Costs 1+ credits.',\n inputSchema: z.object({\n source: z.object({\n type: z.enum(['list', 'campaign']).describe('Source type'),\n id: z.string().describe('List or campaign UUID'),\n }).describe('Source of profiles to enhance'),\n options: z.object({\n force: z.boolean().optional().describe('Re-enhance even if already enhanced'),\n }).optional().describe('Enhancement options'),\n }),\n },\n async (args) => {\n const result = await client.post('/enhance/bulk', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'confirm_enhancement',\n {\n title: 'Confirm Enhancement',\n description:\n 'Confirm and start a pending enhancement job. Some jobs require confirmation ' +\n 'before processing begins (e.g. large batches). Costs 0 credits (charged at creation).',\n inputSchema: z.object({\n job_id: z.string().describe('Enhancement job ID'),\n authorize_overage: z.boolean().optional().describe('Authorize credit overage if needed'),\n }),\n },\n async (args) => {\n const result = await client.post(\n `/enhance/${encodeURIComponent(args.job_id)}/confirm`,\n { authorize_overage: args.authorize_overage },\n )\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_enhancement_status',\n {\n title: 'Get Enhancement Status',\n description:\n 'Check the status of an enhancement job. Returns progress, completed count, ' +\n 'and results when done. Costs 0 credits.',\n inputSchema: z.object({\n job_id: z.string().describe('Enhancement job ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/enhance/${encodeURIComponent(args.job_id)}/status`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Scrape tools — Data collection triggers + status\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerScrapeTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'scrape_followers',\n {\n title: 'Scrape Followers',\n description:\n 'Trigger a follower scrape for a profile. Collects the full follower list. ' +\n 'Returns a job ID — poll with get_scrape_status. Costs 2 credits.',\n inputSchema: z.object({\n username: z.string().describe('Instagram username to scrape followers for'),\n limit: z.number().int().optional().describe('Max followers to scrape (default: all)'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/followers', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_following',\n {\n title: 'Scrape Following',\n description:\n 'Trigger a following scrape for a profile. Collects who they follow. ' +\n 'Returns a job ID — poll with get_scrape_status. Costs 2 credits.',\n inputSchema: z.object({\n username: z.string().describe('Instagram username to scrape following for'),\n limit: z.number().int().optional().describe('Max following to scrape (default: all)'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/following', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_locations',\n {\n title: 'Scrape Locations',\n description:\n 'Scrape posts from a specific Instagram location/place. ' +\n 'Returns a job ID. Costs 1 credit.',\n inputSchema: z.object({\n location_id: z.string().optional().describe('Instagram location ID'),\n location_name: z.string().optional().describe('Location name to search for'),\n limit: z.number().int().optional().describe('Max posts to scrape'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/locations', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_hashtags',\n {\n title: 'Scrape Hashtags',\n description:\n 'Scrape posts from a specific hashtag. Collects recent posts using that hashtag. ' +\n 'Returns a job ID. Costs 1 credit.',\n inputSchema: z.object({\n hashtag: z.string().describe('Hashtag to scrape (without #)'),\n limit: z.number().int().optional().describe('Max posts to scrape'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/hashtags', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_urls',\n {\n title: 'Scrape URLs',\n description:\n 'Scrape specific Instagram post or reel URLs. Extracts engagement data, ' +\n 'comments, and media. Returns a job ID. Costs 1 credit.',\n inputSchema: z.object({\n urls: z.array(z.string()).describe('Array of Instagram post/reel URLs'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/urls', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_scrape_status',\n {\n title: 'Get Scrape Status',\n description:\n 'Check the status of a scrape job. Returns progress and results when done. Costs 0 credits.',\n inputSchema: z.object({\n job_id: z.string().describe('Scrape job ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/scrape/${encodeURIComponent(args.job_id)}/status`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Refine tools — AI refinement triggers + status\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerRefineTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'refine_profiles',\n {\n title: 'Refine Profiles',\n description:\n 'Trigger AI refinement for one or more profiles. Refinement uses AI to ' +\n 'improve and enrich profile data — better niche classification, bio analysis, ' +\n 'content themes, etc. Returns a job ID — poll with get_refinement_status. Costs 1 credit.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to refine'),\n type: z.string().optional().describe('Refinement type (e.g. niche, demographics, full)'),\n }),\n },\n async (args) => {\n const result = await client.post('/refine/profiles', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_refinement_status',\n {\n title: 'Get Refinement Status',\n description:\n 'Check the status of a refinement job. Returns progress and results when done. Costs 0 credits.',\n inputSchema: z.object({\n job_id: z.string().describe('Refinement job ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/refine/${encodeURIComponent(args.job_id)}/status`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/server.ts","../src/client.ts","../src/tools/meta.ts","../src/tools/profiles.ts","../src/tools/campaigns.ts","../src/tools/lists.ts","../src/tools/analytics.ts","../src/tools/content.ts","../src/tools/manage.ts","../src/tools/knowledge.ts","../src/tools/enhance.ts","../src/tools/scrape.ts","../src/tools/refine.ts"],"sourcesContent":["/**\n * Celavii MCP Server — stdio Entry Point\n *\n * Usage:\n * CELAVII_API_KEY=cvii_live_xxx npx celavii-mcp\n *\n * Or in MCP config:\n * {\n * \"mcpServers\": {\n * \"celavii\": {\n * \"command\": \"npx\",\n * \"args\": [\"-y\", \"celavii-mcp@latest\"],\n * \"env\": { \"CELAVII_API_KEY\": \"cvii_live_xxx\" }\n * }\n * }\n * }\n */\n\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { createServer } from './server.js'\n\nasync function main() {\n const apiKey = process.env.CELAVII_API_KEY\n if (!apiKey) {\n console.error(\n 'Error: CELAVII_API_KEY environment variable is required.\\n' +\n 'Get your API key at https://www.celavii.com/settings/api-keys\\n' +\n '\\nUsage:\\n' +\n ' CELAVII_API_KEY=cvii_live_xxx npx celavii-mcp',\n )\n process.exit(1)\n }\n\n const baseUrl = process.env.CELAVII_BASE_URL || undefined\n\n const server = createServer({ apiKey, baseUrl })\n const transport = new StdioServerTransport()\n\n await server.connect(transport)\n}\n\nmain().catch((err) => {\n console.error('Fatal error:', err)\n process.exit(1)\n})\n","/**\n * Celavii MCP Server — Server Setup & Tool Registration\n *\n * Creates an McpServer instance and registers all tools organized by category.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { CelaviiClient, CelaviiApiError } from './client.js'\nimport { registerMetaTools } from './tools/meta.js'\nimport { registerProfileTools } from './tools/profiles.js'\nimport { registerCampaignTools } from './tools/campaigns.js'\nimport { registerListTools } from './tools/lists.js'\nimport { registerAnalyticsTools } from './tools/analytics.js'\nimport { registerContentTools } from './tools/content.js'\nimport { registerManageTools } from './tools/manage.js'\nimport { registerKnowledgeTools } from './tools/knowledge.js'\nimport { registerEnhanceTools } from './tools/enhance.js'\nimport { registerScrapeTools } from './tools/scrape.js'\nimport { registerRefineTools } from './tools/refine.js'\n\nexport interface CreateServerOptions {\n apiKey: string\n baseUrl?: string\n}\n\nexport function createServer(options: CreateServerOptions): McpServer {\n const { apiKey, baseUrl } = options\n\n const server = new McpServer(\n {\n name: 'celavii',\n version: '0.1.0',\n },\n {\n capabilities: {\n logging: {},\n },\n },\n )\n\n const client = new CelaviiClient(apiKey, baseUrl)\n\n // Register all tool groups\n registerMetaTools(server, client)\n registerProfileTools(server, client)\n registerCampaignTools(server, client)\n registerListTools(server, client)\n registerAnalyticsTools(server, client)\n registerContentTools(server, client)\n registerManageTools(server, client)\n registerKnowledgeTools(server, client)\n registerEnhanceTools(server, client)\n registerScrapeTools(server, client)\n registerRefineTools(server, client)\n\n return server\n}\n\nexport { CelaviiClient, CelaviiApiError }\n","/**\n * Celavii MCP Server — HTTP Client\n *\n * Thin wrapper around fetch that adds Bearer auth, error handling,\n * and structured error responses for MCP tool handlers.\n */\n\nconst DEFAULT_BASE_URL = 'https://www.celavii.com/api/v1'\n\nexport class CelaviiApiError extends Error {\n constructor(\n message: string,\n public code: string,\n public status: number,\n public retryAfter?: number,\n ) {\n super(message)\n this.name = 'CelaviiApiError'\n }\n}\n\nexport class CelaviiClient {\n private baseUrl: string\n private apiKey: string\n\n constructor(apiKey: string, baseUrl?: string) {\n this.apiKey = apiKey\n this.baseUrl = (baseUrl || DEFAULT_BASE_URL).replace(/\\/$/, '')\n }\n\n private async request(path: string, init?: RequestInit): Promise<unknown> {\n const url = `${this.baseUrl}${path}`\n const res = await fetch(url, {\n ...init,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'celavii-mcp/0.1.0',\n ...init?.headers,\n },\n })\n\n let json: unknown\n try {\n json = await res.json()\n } catch {\n throw new CelaviiApiError(\n `HTTP ${res.status}: Failed to parse response`,\n 'INTERNAL_ERROR',\n res.status,\n )\n }\n\n if (!res.ok) {\n const err = json as { error?: { code?: string; message?: string; retry_after?: number } }\n const msg = err?.error?.message || `HTTP ${res.status}`\n const code = err?.error?.code || 'INTERNAL_ERROR'\n throw new CelaviiApiError(msg, code, res.status, err?.error?.retry_after)\n }\n\n return json\n }\n\n async get(path: string): Promise<unknown> {\n return this.request(path)\n }\n\n async post(path: string, body?: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'POST',\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n }\n\n async patch(path: string, body: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'PATCH',\n body: JSON.stringify(body),\n })\n }\n\n async put(path: string, body: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'PUT',\n body: JSON.stringify(body),\n })\n }\n\n async delete(path: string, body?: unknown): Promise<unknown> {\n return this.request(path, {\n method: 'DELETE',\n body: body !== undefined ? JSON.stringify(body) : undefined,\n })\n }\n}\n","/**\n * Meta tools — Account info and usage\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerMetaTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'get_account_info',\n {\n title: 'Get Account Info',\n description:\n 'Get information about the current API key, organization, and usage summary. ' +\n 'Useful to verify API key is working and see available scopes. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/me')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_usage',\n {\n title: 'Get Usage',\n description:\n 'Get credit usage and rate limit status for the current API key. ' +\n 'Shows total requests, credits used, daily breakdown, and rate limit info. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/usage')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Profile tools — Search, details, affinities, posts, network, bulk\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerProfileTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'search_profiles',\n {\n title: 'Search Profiles',\n description:\n 'Search the Celavii creator database. Filter by query text, niche, location, gender, ' +\n 'follower count. Returns matching Instagram profiles with basic stats. ' +\n 'At least one filter is required. Costs 1 credit.',\n inputSchema: z.object({\n query: z.string().optional().describe('Search query — matches username, display name, or bio keywords'),\n niche: z.string().optional().describe(\"Filter by niche/topic (e.g. 'fitness', 'fashion', 'tech')\"),\n location: z.string().optional().describe(\"Filter by location (e.g. 'Miami', 'Los Angeles, California')\"),\n gender: z.enum(['male', 'female', 'non_binary', 'brand']).optional().describe('Filter by gender'),\n min_followers: z.number().int().optional().describe('Minimum follower count'),\n max_followers: z.number().int().optional().describe('Maximum follower count'),\n has_contact: z.boolean().optional().describe('Only return profiles with email or phone'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor from a previous response'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.query) params.set('query', args.query)\n if (args.niche) params.set('niche', args.niche)\n if (args.location) params.set('location', args.location)\n if (args.gender) params.set('gender', args.gender)\n if (args.min_followers !== undefined) params.set('min_followers', String(args.min_followers))\n if (args.max_followers !== undefined) params.set('max_followers', String(args.max_followers))\n if (args.has_contact) params.set('has_contact', 'true')\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/profiles/search?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'search_profiles_by_affinities',\n {\n title: 'Search Profiles by Affinities',\n description:\n 'Search creators by their AI-analyzed brand or topic affinities. ' +\n 'Find creators who have affinity for specific brands, interests, or topics. Costs 1 credit.',\n inputSchema: z.object({\n affinities: z.array(z.string()).describe(\"Affinity terms to search for (e.g. ['Nike', 'fitness', 'running'])\"),\n match_mode: z.enum(['any', 'all']).optional().describe(\"'any' = match any affinity, 'all' = must match all (default: 'any')\"),\n min_followers: z.number().int().optional().describe('Minimum follower count'),\n max_followers: z.number().int().optional().describe('Maximum follower count'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor from a previous response'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('terms', args.affinities.join(','))\n if (args.match_mode) params.set('match_mode', args.match_mode)\n if (args.min_followers !== undefined) params.set('min_followers', String(args.min_followers))\n if (args.max_followers !== undefined) params.set('max_followers', String(args.max_followers))\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/profiles/search/affinities?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profiles_bulk',\n {\n title: 'Get Profiles Bulk',\n description:\n 'Get detailed information for multiple profiles at once by username or profile ID. ' +\n 'Up to 100 profiles per request. Costs 1 credit.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs (max 100)'),\n }),\n },\n async (args) => {\n const result = await client.post('/profiles/bulk', { profiles: args.identifiers })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile',\n {\n title: 'Get Profile',\n description:\n 'Get detailed information about a single Instagram profile by username or profile ID. ' +\n 'Returns bio, stats, niche, location, and more. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username (without @) or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_affinities',\n {\n title: 'Get Profile Affinities',\n description:\n 'Get AI-analyzed brand and topic affinities for a profile. ' +\n 'Shows what brands, interests, and topics a creator is associated with. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/affinities`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_posts',\n {\n title: 'Get Profile Posts',\n description:\n 'Get recent posts for a profile. Returns post content, engagement metrics, ' +\n 'media URLs, and hashtags. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of posts (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/posts${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_network',\n {\n title: 'Get Profile Network',\n description:\n 'Get the social network graph for a profile — mutual connections, ' +\n 'top followers, and following relationships. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/network`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_followers',\n {\n title: 'Get Profile Followers',\n description:\n 'Get the followers list for a profile. Only available if followers have been scraped. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of followers (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/followers${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_following',\n {\n title: 'Get Profile Following',\n description:\n 'Get the accounts a profile is following. Only available if following data has been scraped. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of following (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/following${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_social_links',\n {\n title: 'Get Profile Social Links',\n description:\n 'Get external social media links found in a profile bio (YouTube, TikTok, Twitter, etc.). Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/social-links`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_profile_contact',\n {\n title: 'Get Profile Contact',\n description:\n 'Get contact information (email, phone) for a profile. ' +\n 'Requires the profiles:contact scope. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/profiles/${encodeURIComponent(args.identifier)}/contact`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Campaign tools — List, metrics, creators, content\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerCampaignTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'list_campaigns',\n {\n title: 'List Campaigns',\n description:\n 'List all campaigns in the organization. Optionally filter by status. Costs 0 credits.',\n inputSchema: z.object({\n status: z.enum(['active', 'draft', 'completed', 'archived']).optional().describe('Filter by campaign status'),\n limit: z.number().int().min(1).max(100).optional().describe('Number of campaigns (default 25, max 100)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.status) params.set('status', args.status)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const qs = params.toString()\n const result = await client.get(`/campaigns${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_campaign_metrics',\n {\n title: 'Get Campaign Metrics',\n description:\n 'Get performance metrics for a specific campaign — total creators, posts, ' +\n 'engagement, reach, and more. Costs 0 credits.',\n inputSchema: z.object({\n campaign_id: z.string().describe('Campaign UUID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/campaigns/${encodeURIComponent(args.campaign_id)}/metrics`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_campaign_creators',\n {\n title: 'Get Campaign Creators',\n description:\n 'Get the list of creators assigned to a campaign with their statuses and metrics. Costs 0 credits.',\n inputSchema: z.object({\n campaign_id: z.string().describe('Campaign UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/campaigns/${encodeURIComponent(args.campaign_id)}/creators${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_campaign_content',\n {\n title: 'Get Campaign Content',\n description:\n 'Get content (posts) associated with a campaign. Includes engagement data ' +\n 'and media. Costs 1 credit.',\n inputSchema: z.object({\n campaign_id: z.string().describe('Campaign UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/campaigns/${encodeURIComponent(args.campaign_id)}/content${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * List tools — CRUD + member management\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerListTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'list_lists',\n {\n title: 'List Lists',\n description: 'Get all creator lists in the organization. Costs 0 credits.',\n inputSchema: z.object({\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/lists${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'create_list',\n {\n title: 'Create List',\n description: 'Create a new creator list. Costs 1 credit.',\n inputSchema: z.object({\n name: z.string().describe('Name of the list'),\n description: z.string().optional().describe('Optional description'),\n }),\n },\n async (args) => {\n const result = await client.post('/lists', { name: args.name, description: args.description })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_list',\n {\n title: 'Get List',\n description: 'Get details for a specific list by ID. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/lists/${encodeURIComponent(args.list_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'update_list',\n {\n title: 'Update List',\n description: 'Update a list name or description. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n name: z.string().optional().describe('New name'),\n description: z.string().optional().describe('New description'),\n }),\n },\n async (args) => {\n const { list_id, ...body } = args\n const result = await client.patch(`/lists/${encodeURIComponent(list_id)}`, body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'delete_list',\n {\n title: 'Delete List',\n description: 'Delete a list. This does not delete the creators in the list. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n }),\n },\n async (args) => {\n const result = await client.delete(`/lists/${encodeURIComponent(args.list_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_list_members',\n {\n title: 'Get List Members',\n description: 'Get the creator profiles in a list. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('offset', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/lists/${encodeURIComponent(args.list_id)}/members${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'add_list_members',\n {\n title: 'Add List Members',\n description: 'Add creators to a list by username or profile ID. Costs 1 credit.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to add'),\n }),\n },\n async (args) => {\n const result = await client.post(\n `/lists/${encodeURIComponent(args.list_id)}/members`,\n { profiles: args.identifiers },\n )\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'remove_list_members',\n {\n title: 'Remove List Members',\n description: 'Remove creators from a list. Costs 0 credits.',\n inputSchema: z.object({\n list_id: z.string().describe('List UUID'),\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to remove'),\n }),\n },\n async (args) => {\n const result = await client.delete(\n `/lists/${encodeURIComponent(args.list_id)}/members`,\n { profiles: args.identifiers },\n )\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Analytics tools — Demographics, locations, niches, overlap, cohort\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\n/** Schema for endpoints that accept profile_ids + scope (demographics) */\nconst demographicsSchema = z.object({\n profile_ids: z.array(z.string()).optional().describe('Array of usernames or profile IDs to analyze'),\n scope: z.enum(['global', 'org']).optional().describe(\"'global' (default, all profiles) or 'org' (managed only)\"),\n})\n\n/** Schema for endpoints that accept scope + limit only (locations, niches) */\nconst orgLevelSchema = z.object({\n scope: z.enum(['global', 'org']).optional().describe(\"'global' (default, all profiles) or 'org' (managed only)\"),\n limit: z.number().int().min(1).max(100).optional().describe('Max results (default 20, max 100)'),\n})\n\n/** Schema for profile source parameters used by overlap, shared-hashtags, cohort */\nconst profileSourceSchema = z.object({\n identifiers: z.array(z.string()).optional().describe('Array of usernames or profile IDs to analyze'),\n list_id: z.string().optional().describe('List UUID — analyze all members of this list'),\n campaign_id: z.string().optional().describe('Campaign UUID — analyze all creators in this campaign'),\n})\n\n/**\n * Resolve identifiers/list_id/campaign_id into a flat array of usernames.\n * list_id and campaign_id trigger a prefetch of members from the API.\n */\nasync function resolveIdentifiers(\n client: CelaviiClient,\n args: { identifiers?: string[]; list_id?: string; campaign_id?: string },\n): Promise<string[]> {\n if (args.identifiers?.length) return args.identifiers\n\n if (args.list_id) {\n const resp = await client.get(`/lists/${args.list_id}/members?limit=100`) as { data?: { username?: string; profile_id?: string }[] }\n return (resp.data || []).map(m => m.username || m.profile_id || '').filter(Boolean)\n }\n\n if (args.campaign_id) {\n const resp = await client.get(`/campaigns/${args.campaign_id}/creators?limit=100`) as { data?: { username?: string; profile_id?: string }[] }\n return (resp.data || []).map(m => m.username || m.profile_id || '').filter(Boolean)\n }\n\n return []\n}\n\nexport function registerAnalyticsTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'get_demographics',\n {\n title: 'Get Demographics',\n description:\n 'Get audience demographics breakdown (age, gender distribution). ' +\n 'Optionally pass profile_ids to analyze a subset, or scope=org for managed profiles only. Costs 1 credit.',\n inputSchema: demographicsSchema,\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.profile_ids?.length) params.set('profile_ids', args.profile_ids.join(','))\n if (args.scope) params.set('scope', args.scope)\n const result = await client.get(`/analytics/demographics?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_locations',\n {\n title: 'Get Locations',\n description:\n 'Get location distribution — top cities and countries. ' +\n 'Use scope=org for managed profiles only. Costs 1 credit.',\n inputSchema: orgLevelSchema,\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.scope) params.set('scope', args.scope)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/analytics/locations?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_niches',\n {\n title: 'Get Niches',\n description:\n 'Get niche/topic distribution across profiles. ' +\n 'Use scope=org for managed profiles only. Costs 1 credit.',\n inputSchema: orgLevelSchema,\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.scope) params.set('scope', args.scope)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/analytics/niches?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_network_overlap',\n {\n title: 'Get Network Overlap',\n description:\n 'Get follower/following overlap between profiles. Shows shared connections. ' +\n 'Provide identifiers, a list_id, or a campaign_id. Costs 1 credit.',\n inputSchema: profileSourceSchema,\n },\n async (args) => {\n const ids = await resolveIdentifiers(client, args)\n const params = new URLSearchParams()\n if (ids.length) params.set('profile_ids', ids.join(','))\n const result = await client.get(`/analytics/network-overlap?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_shared_hashtags',\n {\n title: 'Get Shared Hashtags',\n description:\n 'Get hashtags shared across a set of profiles. Shows common themes and topics. ' +\n 'Provide identifiers, a list_id, or a campaign_id. Costs 1 credit.',\n inputSchema: profileSourceSchema,\n },\n async (args) => {\n const ids = await resolveIdentifiers(client, args)\n const params = new URLSearchParams()\n if (ids.length) params.set('usernames', ids.join(','))\n const result = await client.get(`/analytics/shared-hashtags?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_hashtag_creators',\n {\n title: 'Get Hashtag Creators',\n description:\n 'Find creators who use specific hashtags. Useful for discovering creators by topic. Costs 1 credit.',\n inputSchema: z.object({\n hashtags: z.array(z.string()).describe(\"Hashtags to search for (without #, e.g. ['fitness', 'gym'])\"),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('hashtags', args.hashtags.join(','))\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const result = await client.get(`/analytics/hashtag-creators?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_affinity_posts',\n {\n title: 'Get Affinity Posts',\n description:\n 'Get posts linked to a brand/topic affinity term. Searches globally across all profiles. Costs 1 credit.',\n inputSchema: z.object({\n affinity: z.string().describe('Affinity term to search for (e.g. \"photography\", \"Nike\", \"fitness\")'),\n affinity_type: z.enum(['all', 'topic', 'brand', 'location', 'category']).optional().describe(\"Filter by affinity type (default: 'all')\"),\n min_engagement: z.number().int().optional().describe('Minimum total engagement'),\n sort: z.enum(['engagement', 'date']).optional().describe(\"Sort order (default: 'engagement')\"),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('affinity', args.affinity)\n if (args.affinity_type) params.set('affinity_type', args.affinity_type)\n if (args.min_engagement !== undefined) params.set('min_engagement', String(args.min_engagement))\n if (args.sort) params.set('sort', args.sort)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/analytics/affinity-posts?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'analyze_cohort',\n {\n title: 'Analyze Cohort',\n description:\n 'Run a full cohort analysis on a set of profiles. Includes demographics, affinities, ' +\n 'hashtag usage, and aggregate stats. Costs 2 credits.',\n inputSchema: z.object({\n profiles: z.array(z.string()).optional().describe('Array of usernames or profile IDs'),\n source: z.object({\n type: z.enum(['campaign', 'list', 'hashtag']).describe('Source type'),\n id: z.string().describe('Source ID (campaign UUID, list UUID, or hashtag)'),\n }).optional().describe('Alternative: analyze from a source (campaign, list, or hashtag)'),\n include: z.array(z.string()).optional().describe(\"Data to include: ['affinities', 'demographics', 'hashtags', 'stats']\"),\n }),\n },\n async (args) => {\n const result = await client.post('/analytics/cohort', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_cohort_stats',\n {\n title: 'Get Cohort Stats',\n description:\n 'Get aggregate statistics for a cohort — average followers, engagement rate, etc. ' +\n 'Provide identifiers, a list_id, or a campaign_id. Costs 1 credit.',\n inputSchema: profileSourceSchema,\n },\n async (args) => {\n const ids = await resolveIdentifiers(client, args)\n const params = new URLSearchParams()\n if (ids.length) params.set('profiles', ids.join(','))\n const result = await client.get(`/analytics/cohort/stats?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'filter_cohort',\n {\n title: 'Filter Cohort',\n description:\n 'Filter a cohort of profiles by advanced criteria — follower range, engagement rate, ' +\n 'niche, location, affinities, and more. Costs 2 credits.',\n inputSchema: z.object({\n profiles: z.array(z.string()).optional().describe('Array of usernames or profile IDs to filter'),\n source: z.object({\n type: z.enum(['campaign', 'list', 'hashtag']).describe('Source type'),\n id: z.string().describe('Source ID'),\n }).optional().describe('Alternative: filter from a source'),\n filters: z.record(z.string(), z.unknown()).optional().describe('Filter criteria (varies by field)'),\n }),\n },\n async (args) => {\n const result = await client.post('/analytics/cohort/filter', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Content tools — Post search\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerContentTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'search_content',\n {\n title: 'Search Content',\n description:\n 'Search posts across the creator database by keywords, hashtags, or mentions. ' +\n 'Returns matching posts with engagement metrics and media. Costs 1 credit.',\n inputSchema: z.object({\n query: z.string().describe('Search query — matches post captions (required)'),\n author: z.string().optional().describe('Filter by creator username'),\n min_engagement: z.number().int().optional().describe('Minimum total engagement (likes + comments)'),\n since: z.string().optional().describe('Only posts after this date (ISO 8601, e.g. 2025-01-01)'),\n sort: z.enum(['relevance', 'engagement', 'date']).optional().describe(\"Sort order (default: 'relevance')\"),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n params.set('query', args.query)\n if (args.author) params.set('author', args.author)\n if (args.min_engagement !== undefined) params.set('min_engagement', String(args.min_engagement))\n if (args.since) params.set('since', args.since)\n if (args.sort) params.set('sort', args.sort)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n const result = await client.get(`/content/search?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Manage tools — CRM operations\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerManageTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'get_managed_profiles',\n {\n title: 'Get Managed Profiles',\n description:\n 'Get all profiles in the CRM pipeline with their relationship statuses, ' +\n 'notes, and tags. Costs 0 credits.',\n inputSchema: z.object({\n status: z.string().optional().describe(\"Filter by relationship status (e.g. 'outreached', 'negotiating', 'contracted')\"),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page (default 25, max 100)'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.status) params.set('status', args.status)\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/manage/profiles${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_crm_summary',\n {\n title: 'Get CRM Summary',\n description:\n 'Get a summary of the CRM pipeline — counts by status, recent activity, etc. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/manage/summary')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_org_stats',\n {\n title: 'Get Organization Stats',\n description:\n 'Get aggregate statistics for the organization — total profiles, enhanced profiles, ' +\n 'scraped data, and more. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/manage/stats')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'upsert_relationship',\n {\n title: 'Upsert Relationship',\n description:\n 'Create or update a CRM relationship for a creator. Set status, notes, tags. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n status: z.string().optional().describe(\"Relationship status (e.g. 'identified', 'outreached', 'negotiating', 'contracted', 'active', 'paused')\"),\n notes: z.string().optional().describe('Free-text notes about the relationship'),\n tags: z.array(z.string()).optional().describe('Tags for categorization'),\n }),\n },\n async (args) => {\n const { identifier, ...body } = args\n const result = await client.patch(`/manage/profiles/${encodeURIComponent(identifier)}`, body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'delete_relationship',\n {\n title: 'Delete Relationship',\n description:\n 'Remove a creator from the CRM pipeline. Does not delete the profile itself. Costs 0 credits.',\n inputSchema: z.object({\n identifier: z.string().describe('Instagram username or profile ID'),\n }),\n },\n async (args) => {\n const result = await client.delete(`/manage/profiles/${encodeURIComponent(args.identifier)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Knowledge tools — KB folders, entries, context search\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerKnowledgeTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'list_knowledge_folders',\n {\n title: 'List Knowledge Folders',\n description: 'List all knowledge base folders in the organization. Costs 0 credits.',\n inputSchema: z.object({}),\n },\n async () => {\n const result = await client.get('/knowledge/folders')\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'create_knowledge_folder',\n {\n title: 'Create Knowledge Folder',\n description: 'Create a new knowledge base folder. Costs 0 credits.',\n inputSchema: z.object({\n name: z.string().describe('Folder name'),\n description: z.string().optional().describe('Optional description'),\n folder_type: z.enum(['general', 'brand', 'campaign', 'templates', 'research']).optional().describe(\"Folder type (default: 'general')\"),\n parent_folder_id: z.string().optional().describe('UUID of parent folder for nesting'),\n icon_name: z.string().optional().describe('Lucide icon name'),\n color: z.string().optional().describe('Hex color (e.g. #8b5cf6)'),\n }),\n },\n async (args) => {\n const result = await client.post('/knowledge/folders', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_folder_entries',\n {\n title: 'Get Folder Entries',\n description: 'Get all entries in a knowledge base folder. Costs 0 credits.',\n inputSchema: z.object({\n folder_id: z.string().describe('Folder UUID'),\n limit: z.number().int().min(1).max(100).optional().describe('Results per page'),\n cursor: z.string().optional().describe('Pagination cursor'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.limit !== undefined) params.set('limit', String(args.limit))\n if (args.cursor) params.set('cursor', args.cursor)\n const qs = params.toString()\n const result = await client.get(`/knowledge/folders/${encodeURIComponent(args.folder_id)}/entries${qs ? `?${qs}` : ''}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'create_knowledge_entry',\n {\n title: 'Create Knowledge Entry',\n description: 'Create a new knowledge base entry in a folder. Costs 0 credits.',\n inputSchema: z.object({\n folder_id: z.string().describe('Folder UUID to add the entry to'),\n name: z.string().describe('Entry name'),\n content: z.string().optional().describe('Entry content (markdown supported)'),\n description: z.string().optional().describe('Short description'),\n source_url: z.string().optional().describe('Source URL reference'),\n }),\n },\n async (args) => {\n const result = await client.post('/knowledge/entries', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_knowledge_entry',\n {\n title: 'Get Knowledge Entry',\n description: 'Get a specific knowledge base entry by ID. Costs 0 credits.',\n inputSchema: z.object({\n entry_id: z.string().describe('Entry UUID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/knowledge/entries/${encodeURIComponent(args.entry_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'update_knowledge_entry',\n {\n title: 'Update Knowledge Entry',\n description: 'Update a knowledge base entry. At least one field required. Costs 0 credits.',\n inputSchema: z.object({\n entry_id: z.string().describe('Entry UUID'),\n name: z.string().optional().describe('New name'),\n content: z.string().optional().describe('New content'),\n description: z.string().optional().describe('New description'),\n summary: z.string().optional().describe('New summary'),\n folder_id: z.string().optional().describe('Move to a different folder (UUID)'),\n }),\n },\n async (args) => {\n const { entry_id, ...body } = args\n const result = await client.put(`/knowledge/entries/${encodeURIComponent(entry_id)}`, body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'delete_knowledge_entry',\n {\n title: 'Delete Knowledge Entry',\n description: 'Delete a knowledge base entry. Costs 0 credits.',\n inputSchema: z.object({\n entry_id: z.string().describe('Entry UUID'),\n }),\n },\n async (args) => {\n const result = await client.delete(`/knowledge/entries/${encodeURIComponent(args.entry_id)}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'search_knowledge',\n {\n title: 'Get Knowledge Context',\n description:\n 'Get aggregated brand context from the knowledge base, organized by folder type. ' +\n 'Returns entries for AI agent consumption. Filter by folder type to get specific context. Costs 0 credits.',\n inputSchema: z.object({\n folder_types: z.array(z.string()).optional().describe(\"Filter by folder types (e.g. ['brand', 'campaign', 'research'])\"),\n max_entries: z.number().int().min(1).max(100).optional().describe('Maximum entries to return (default 20, max 100)'),\n include_summaries: z.boolean().optional().describe('Include entry summaries (default true)'),\n }),\n },\n async (args) => {\n const params = new URLSearchParams()\n if (args.folder_types?.length) params.set('folder_types', args.folder_types.join(','))\n if (args.max_entries !== undefined) params.set('max_entries', String(args.max_entries))\n if (args.include_summaries === false) params.set('include_summaries', 'false')\n const result = await client.get(`/knowledge/context?${params}`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Enhance tools — Profile enhancement triggers + status\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerEnhanceTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'enhance_profiles',\n {\n title: 'Enhance Profiles',\n description:\n 'Trigger AI enhancement for one or more profiles. Enhancement adds affinities, ' +\n 'demographics, niche analysis, and more. Returns a job ID — poll with ' +\n 'get_enhancement_status to check progress. Costs 1+ credits.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to enhance'),\n mode: z.enum(['basic', 'enhanced']).optional().describe(\"Enhancement mode: 'basic' (1 credit/profile) or 'enhanced' (2 credits/profile). Default: basic\"),\n dry_run: z.boolean().optional().describe('If true, returns cost estimate without triggering enhancement'),\n auto_confirm: z.boolean().optional().describe('If true, auto-confirms the job without a separate confirm step'),\n authorize_overage: z.boolean().optional().describe('If true, allows proceeding even if credits are insufficient'),\n options: z.object({\n force: z.boolean().optional().describe('Re-enhance even if already enhanced'),\n }).optional().describe('Enhancement options'),\n }),\n },\n async (args) => {\n const { identifiers, options, ...rest } = args\n const result = await client.post('/enhance/profiles', { profiles: identifiers, ...rest })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'enhance_bulk',\n {\n title: 'Enhance Bulk',\n description:\n 'Trigger bulk enhancement for a large set of profiles (from a list or campaign). ' +\n 'Returns a job ID. Costs 1+ credits.',\n inputSchema: z.object({\n source: z.object({\n type: z.enum(['list', 'campaign']).describe('Source type'),\n id: z.string().describe('List or campaign UUID'),\n }).describe('Source of profiles to enhance'),\n options: z.object({\n force: z.boolean().optional().describe('Re-enhance even if already enhanced'),\n }).optional().describe('Enhancement options'),\n }),\n },\n async (args) => {\n const result = await client.post('/enhance/bulk', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'confirm_enhancement',\n {\n title: 'Confirm Enhancement',\n description:\n 'Confirm and start a pending enhancement job. Some jobs require confirmation ' +\n 'before processing begins (e.g. large batches). Costs 0 credits (charged at creation).',\n inputSchema: z.object({\n job_id: z.string().describe('Enhancement job ID'),\n authorize_overage: z.boolean().optional().describe('Authorize credit overage if needed'),\n }),\n },\n async (args) => {\n const result = await client.post(\n `/enhance/${encodeURIComponent(args.job_id)}/confirm`,\n { authorize_overage: args.authorize_overage },\n )\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_enhancement_status',\n {\n title: 'Get Enhancement Status',\n description:\n 'Check the status of an enhancement job. Returns progress, completed count, ' +\n 'and results when done. Costs 0 credits.',\n inputSchema: z.object({\n job_id: z.string().describe('Enhancement job ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/enhance/${encodeURIComponent(args.job_id)}/status`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Scrape tools — Data collection triggers + status\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerScrapeTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'scrape_followers',\n {\n title: 'Scrape Followers',\n description:\n 'Trigger a follower scrape for a profile. Collects the full follower list. ' +\n 'Returns a job ID — poll with get_scrape_status. Costs 2 credits.',\n inputSchema: z.object({\n username: z.string().describe('Instagram username to scrape followers for'),\n limit: z.number().int().optional().describe('Max followers to scrape (default: all)'),\n }),\n },\n async (args) => {\n const { limit, ...rest } = args\n const result = await client.post('/scrape/followers', { ...rest, ...(limit !== undefined && { max_results: limit }) })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_following',\n {\n title: 'Scrape Following',\n description:\n 'Trigger a following scrape for a profile. Collects who they follow. ' +\n 'Returns a job ID — poll with get_scrape_status. Costs 2 credits.',\n inputSchema: z.object({\n username: z.string().describe('Instagram username to scrape following for'),\n limit: z.number().int().optional().describe('Max following to scrape (default: all)'),\n }),\n },\n async (args) => {\n const { limit, ...rest } = args\n const result = await client.post('/scrape/following', { ...rest, ...(limit !== undefined && { max_results: limit }) })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_locations',\n {\n title: 'Scrape Locations',\n description:\n 'Scrape posts from a specific Instagram location/place. ' +\n 'Returns a job ID. Costs 1 credit.',\n inputSchema: z.object({\n location_id: z.string().optional().describe('Instagram location ID'),\n location_name: z.string().optional().describe('Location name to search for'),\n limit: z.number().int().optional().describe('Max posts to scrape'),\n }),\n },\n async (args) => {\n const body: Record<string, unknown> = {}\n if (args.location_id) body.location_ids = [args.location_id]\n if (args.location_name) body.start_urls = [`https://www.instagram.com/explore/locations/${args.location_name}/`]\n if (args.limit !== undefined) body.max_items = args.limit\n const result = await client.post('/scrape/locations', body)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_hashtags',\n {\n title: 'Scrape Hashtags',\n description:\n 'Scrape posts from a specific hashtag. Collects recent posts using that hashtag. ' +\n 'Returns a job ID. Costs 1 credit.',\n inputSchema: z.object({\n hashtag: z.string().describe('Hashtag to scrape (without #)'),\n limit: z.number().int().optional().describe('Max posts to scrape'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/hashtags', {\n hashtags: [args.hashtag],\n ...(args.limit !== undefined && { max_items: args.limit }),\n })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'scrape_urls',\n {\n title: 'Scrape URLs',\n description:\n 'Scrape specific Instagram post or reel URLs. Extracts engagement data, ' +\n 'comments, and media. Returns a job ID. Costs 1 credit.',\n inputSchema: z.object({\n urls: z.array(z.string()).describe('Array of Instagram post/reel URLs'),\n }),\n },\n async (args) => {\n const result = await client.post('/scrape/urls', args)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_scrape_status',\n {\n title: 'Get Scrape Status',\n description:\n 'Check the status of a scrape job. Returns progress and results when done. Costs 0 credits.',\n inputSchema: z.object({\n job_id: z.string().describe('Scrape job ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/scrape/${encodeURIComponent(args.job_id)}/status`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n","/**\n * Refine tools — AI refinement triggers + status\n */\n\nimport { z } from 'zod'\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { CelaviiClient } from '../client.js'\n\nexport function registerRefineTools(server: McpServer, client: CelaviiClient) {\n server.registerTool(\n 'refine_profiles',\n {\n title: 'Refine Profiles',\n description:\n 'Trigger AI refinement for one or more profiles. Refinement uses AI to ' +\n 'improve and enrich profile data — better niche classification, bio analysis, ' +\n 'content themes, etc. Returns a job ID — poll with get_refinement_status. Costs 1 credit.',\n inputSchema: z.object({\n identifiers: z.array(z.string()).describe('Array of usernames or profile IDs to refine'),\n type: z.string().optional().describe('Refinement type (e.g. niche, demographics, full)'),\n }),\n },\n async (args) => {\n const { identifiers, ...rest } = args\n const result = await client.post('/refine/profiles', { profiles: identifiers, ...rest })\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n\n server.registerTool(\n 'get_refinement_status',\n {\n title: 'Get Refinement Status',\n description:\n 'Check the status of a refinement job. Returns progress and results when done. Costs 0 credits.',\n inputSchema: z.object({\n job_id: z.string().describe('Refinement job ID'),\n }),\n },\n async (args) => {\n const result = await client.get(`/refine/${encodeURIComponent(args.job_id)}/status`)\n return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }\n },\n )\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z"]}
|
package/package.json
CHANGED