creator-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/auth.d.ts +14 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +79 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/client.d.ts +23 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +56 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/index.d.ts +12 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +72 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/prompts.d.ts +7 -0
  14. package/dist/prompts.d.ts.map +1 -0
  15. package/dist/prompts.js +262 -0
  16. package/dist/prompts.js.map +1 -0
  17. package/dist/resources.d.ts +7 -0
  18. package/dist/resources.d.ts.map +1 -0
  19. package/dist/resources.js +171 -0
  20. package/dist/resources.js.map +1 -0
  21. package/dist/tools/admin.d.ts +8 -0
  22. package/dist/tools/admin.d.ts.map +1 -0
  23. package/dist/tools/admin.js +66 -0
  24. package/dist/tools/admin.js.map +1 -0
  25. package/dist/tools/ai.d.ts +7 -0
  26. package/dist/tools/ai.d.ts.map +1 -0
  27. package/dist/tools/ai.js +93 -0
  28. package/dist/tools/ai.js.map +1 -0
  29. package/dist/tools/analytics.d.ts +7 -0
  30. package/dist/tools/analytics.d.ts.map +1 -0
  31. package/dist/tools/analytics.js +70 -0
  32. package/dist/tools/analytics.js.map +1 -0
  33. package/dist/tools/billing.d.ts +7 -0
  34. package/dist/tools/billing.d.ts.map +1 -0
  35. package/dist/tools/billing.js +89 -0
  36. package/dist/tools/billing.js.map +1 -0
  37. package/dist/tools/deals.d.ts +7 -0
  38. package/dist/tools/deals.d.ts.map +1 -0
  39. package/dist/tools/deals.js +218 -0
  40. package/dist/tools/deals.js.map +1 -0
  41. package/dist/tools/pipeline.d.ts +7 -0
  42. package/dist/tools/pipeline.d.ts.map +1 -0
  43. package/dist/tools/pipeline.js +225 -0
  44. package/dist/tools/pipeline.js.map +1 -0
  45. package/dist/tools/pitch.d.ts +7 -0
  46. package/dist/tools/pitch.d.ts.map +1 -0
  47. package/dist/tools/pitch.js +115 -0
  48. package/dist/tools/pitch.js.map +1 -0
  49. package/dist/tools/social.d.ts +7 -0
  50. package/dist/tools/social.d.ts.map +1 -0
  51. package/dist/tools/social.js +94 -0
  52. package/dist/tools/social.js.map +1 -0
  53. package/dist/tools/support.d.ts +7 -0
  54. package/dist/tools/support.d.ts.map +1 -0
  55. package/dist/tools/support.js +172 -0
  56. package/dist/tools/support.js.map +1 -0
  57. package/dist/types.d.ts +110 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/types.js +5 -0
  60. package/dist/types.js.map +1 -0
  61. package/package.json +47 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * MCP Resources — read-only data views for Creator OS.
3
+ * Resources expose contextual data that LLMs can read to ground responses.
4
+ */
5
+ import { authenticate } from "./auth.js";
6
+ import { createUserClient, invokeEdgeFunction } from "./client.js";
7
+ export function registerResources(server) {
8
+ // ── Creator Profile ─────────────────────────────────────────────
9
+ server.resource("creator-profile", "creator-os://profile", {
10
+ description: "Current creator profile including subscription tier, credits, and connected platforms",
11
+ }, async (uri) => {
12
+ const auth = await authenticate();
13
+ const client = createUserClient(auth.token);
14
+ const [profileRes, platformsRes] = await Promise.all([
15
+ client
16
+ .from("profiles")
17
+ .select("id, full_name, email, avatar_url, bio, subscription_tier, credits_balance")
18
+ .eq("id", auth.userId)
19
+ .single(),
20
+ client
21
+ .from("creator_platforms")
22
+ .select("platform, display_name, follower_count, total_views, is_verified")
23
+ .eq("user_id", auth.userId),
24
+ ]);
25
+ const profile = profileRes.data;
26
+ const platforms = platformsRes.data ?? [];
27
+ return {
28
+ contents: [
29
+ {
30
+ uri: uri.href,
31
+ mimeType: "application/json",
32
+ text: JSON.stringify({ profile, platforms }, null, 2),
33
+ },
34
+ ],
35
+ };
36
+ });
37
+ // ── Pipeline Status ─────────────────────────────────────────────
38
+ server.resource("pipeline-status", "creator-os://pipeline/status", {
39
+ description: "Overview of the content pipeline: counts by status and upcoming scheduled videos",
40
+ }, async (uri) => {
41
+ const auth = await authenticate();
42
+ const client = createUserClient(auth.token);
43
+ const { data: videos } = await client
44
+ .from("pipeline_videos")
45
+ .select("id, title, status, target_publish_date")
46
+ .eq("user_id", auth.userId)
47
+ .order("created_at", { ascending: false });
48
+ const allVideos = videos ?? [];
49
+ // Build status counts
50
+ const statusCounts = {};
51
+ for (const v of allVideos) {
52
+ statusCounts[v.status] = (statusCounts[v.status] ?? 0) + 1;
53
+ }
54
+ // Next 5 scheduled
55
+ const upcoming = allVideos
56
+ .filter((v) => v.target_publish_date && v.status !== "published")
57
+ .sort((a, b) => new Date(a.target_publish_date).getTime() -
58
+ new Date(b.target_publish_date).getTime())
59
+ .slice(0, 5);
60
+ return {
61
+ contents: [
62
+ {
63
+ uri: uri.href,
64
+ mimeType: "application/json",
65
+ text: JSON.stringify({ total: allVideos.length, statusCounts, upcoming }, null, 2),
66
+ },
67
+ ],
68
+ };
69
+ });
70
+ // ── Deals Overview ──────────────────────────────────────────────
71
+ server.resource("deals-overview", "creator-os://deals/overview", {
72
+ description: "Summary of brand deals: counts by status, total revenue, and recent activity",
73
+ }, async (uri) => {
74
+ const auth = await authenticate();
75
+ const client = createUserClient(auth.token);
76
+ const { data: deals } = await client
77
+ .from("deals")
78
+ .select("id, brand_name, status, deal_value, currency, updated_at")
79
+ .eq("user_id", auth.userId)
80
+ .order("updated_at", { ascending: false });
81
+ const allDeals = deals ?? [];
82
+ const statusCounts = {};
83
+ let totalRevenue = 0;
84
+ for (const d of allDeals) {
85
+ statusCounts[d.status] = (statusCounts[d.status] ?? 0) + 1;
86
+ if ((d.status === "active" || d.status === "completed") &&
87
+ d.deal_value) {
88
+ totalRevenue += d.deal_value;
89
+ }
90
+ }
91
+ const recentDeals = allDeals.slice(0, 5).map((d) => ({
92
+ id: d.id,
93
+ brand_name: d.brand_name,
94
+ status: d.status,
95
+ deal_value: d.deal_value,
96
+ currency: d.currency,
97
+ }));
98
+ return {
99
+ contents: [
100
+ {
101
+ uri: uri.href,
102
+ mimeType: "application/json",
103
+ text: JSON.stringify({
104
+ total: allDeals.length,
105
+ statusCounts,
106
+ totalRevenue,
107
+ recentDeals,
108
+ }, null, 2),
109
+ },
110
+ ],
111
+ };
112
+ });
113
+ // ── Analytics Dashboard ─────────────────────────────────────────
114
+ server.resource("analytics-dashboard", "creator-os://analytics/dashboard", {
115
+ description: "Latest YouTube analytics snapshot: aggregated views, likes, comments, and top videos",
116
+ }, async (uri) => {
117
+ const auth = await authenticate();
118
+ const client = createUserClient(auth.token);
119
+ // Get most recent snapshot per video
120
+ const { data: snapshots } = await client
121
+ .from("video_analytics_snapshots")
122
+ .select("video_id, views, likes, comments, watch_time_hours, ctr, snapshot_date")
123
+ .eq("user_id", auth.userId)
124
+ .order("snapshot_date", { ascending: false })
125
+ .limit(50);
126
+ const all = snapshots ?? [];
127
+ // Deduplicate — keep latest per video_id
128
+ const latestByVideo = new Map();
129
+ for (const s of all) {
130
+ if (!latestByVideo.has(s.video_id)) {
131
+ latestByVideo.set(s.video_id, s);
132
+ }
133
+ }
134
+ const latest = Array.from(latestByVideo.values());
135
+ const totals = {
136
+ views: latest.reduce((s, v) => s + (v.views ?? 0), 0),
137
+ likes: latest.reduce((s, v) => s + (v.likes ?? 0), 0),
138
+ comments: latest.reduce((s, v) => s + (v.comments ?? 0), 0),
139
+ watchTimeHours: latest.reduce((s, v) => s + (v.watch_time_hours ?? 0), 0),
140
+ };
141
+ const topByViews = [...latest]
142
+ .sort((a, b) => (b.views ?? 0) - (a.views ?? 0))
143
+ .slice(0, 5);
144
+ return {
145
+ contents: [
146
+ {
147
+ uri: uri.href,
148
+ mimeType: "application/json",
149
+ text: JSON.stringify({ videosTracked: latest.length, totals, topByViews }, null, 2),
150
+ },
151
+ ],
152
+ };
153
+ });
154
+ // ── Subscription & Credits ──────────────────────────────────────
155
+ server.resource("subscription-status", "creator-os://billing/status", {
156
+ description: "Current subscription tier and remaining credits balance",
157
+ }, async (uri) => {
158
+ const auth = await authenticate();
159
+ const data = await invokeEdgeFunction(auth.token, "check-subscription");
160
+ return {
161
+ contents: [
162
+ {
163
+ uri: uri.href,
164
+ mimeType: "application/json",
165
+ text: JSON.stringify(data, null, 2),
166
+ },
167
+ ],
168
+ };
169
+ });
170
+ }
171
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Admin MCP tools.
3
+ * Covers: admin data overview, stealth clean, virus scan results.
4
+ * These tools require admin role.
5
+ */
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ export declare function registerAdminTools(server: McpServer): void;
8
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QAyEnD"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Admin MCP tools.
3
+ * Covers: admin data overview, stealth clean, virus scan results.
4
+ * These tools require admin role.
5
+ */
6
+ import { z } from "zod";
7
+ import { authenticate } from "../auth.js";
8
+ import { invokeEdgeFunction } from "../client.js";
9
+ export function registerAdminTools(server) {
10
+ // ── Admin data overview ───────────────────────────────────────────
11
+ server.tool("admin_get_overview", "Get admin dashboard data overview (users, subscriptions, revenue). Requires admin role.", {
12
+ action: z
13
+ .enum([
14
+ "overview",
15
+ "users",
16
+ "subscriptions",
17
+ "revenue",
18
+ "sync_subscription",
19
+ ])
20
+ .default("overview")
21
+ .describe("Data to retrieve"),
22
+ userId: z
23
+ .string()
24
+ .uuid()
25
+ .optional()
26
+ .describe("User ID (for sync_subscription action)"),
27
+ }, async (args) => {
28
+ const { token } = await authenticate();
29
+ const data = await invokeEdgeFunction(token, "admin-data", args);
30
+ return {
31
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
32
+ };
33
+ });
34
+ // ── Stealth clean ─────────────────────────────────────────────────
35
+ server.tool("admin_stealth_clean", "Run stealth data cleanup operations. Requires admin role.", {
36
+ action: z
37
+ .enum(["preview", "execute"])
38
+ .default("preview")
39
+ .describe("Preview or execute the cleanup"),
40
+ targetTable: z
41
+ .string()
42
+ .optional()
43
+ .describe("Specific table to clean"),
44
+ }, async (args) => {
45
+ const { token } = await authenticate();
46
+ const data = await invokeEdgeFunction(token, "stealth-clean", args);
47
+ return {
48
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
49
+ };
50
+ });
51
+ // ── Virus scan status ─────────────────────────────────────────────
52
+ server.tool("admin_virus_scan", "Check virus scan results for uploaded files. Requires admin role.", {
53
+ fileId: z.string().optional().describe("Specific file ID to check"),
54
+ status: z
55
+ .enum(["pending", "clean", "infected", "error"])
56
+ .optional()
57
+ .describe("Filter by scan status"),
58
+ }, async (args) => {
59
+ const { token } = await authenticate();
60
+ const data = await invokeEdgeFunction(token, "virus-scan", args);
61
+ return {
62
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
63
+ };
64
+ });
65
+ }
66
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,yFAAyF,EACzF;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC;YACJ,UAAU;YACV,OAAO;YACP,eAAe;YACf,SAAS;YACT,mBAAmB;SACpB,CAAC;aACD,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,IAAI,EAAE;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;KACtD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,2DAA2D,EAC3D;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aAC5B,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CAAC,gCAAgC,CAAC;QAC7C,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yBAAyB,CAAC;KACvC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,mEAAmE,EACnE;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACnE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;aAC/C,QAAQ,EAAE;aACV,QAAQ,CAAC,uBAAuB,CAAC;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * AI-related MCP tools.
3
+ * Covers: AI suggestions, AI chat, AI key management.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerAITools(server: McpServer): void;
7
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/tools/ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAmHhD"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * AI-related MCP tools.
3
+ * Covers: AI suggestions, AI chat, AI key management.
4
+ */
5
+ import { z } from "zod";
6
+ import { authenticate } from "../auth.js";
7
+ import { invokeEdgeFunction } from "../client.js";
8
+ export function registerAITools(server) {
9
+ // ── Get AI suggestions ────────────────────────────────────────────
10
+ server.tool("get_ai_suggestions", "Get AI-powered content suggestions based on your pipeline, deals, platforms, and ideas. No input needed — analyzes your current creator context automatically.", {}, async () => {
11
+ const { token } = await authenticate();
12
+ const data = await invokeEdgeFunction(token, "ai-suggestions");
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ // ── AI Chat ───────────────────────────────────────────────────────
18
+ server.tool("ai_chat", "Chat with AI using your connected AI provider (OpenAI, Anthropic, or Google Gemini). Optionally provide deal context.", {
19
+ messages: z
20
+ .array(z.object({
21
+ role: z.enum(["user", "assistant", "system"]),
22
+ content: z.string(),
23
+ }))
24
+ .min(1)
25
+ .describe("Chat messages array"),
26
+ dealId: z
27
+ .string()
28
+ .uuid()
29
+ .optional()
30
+ .describe("Deal ID to include deal context in the conversation"),
31
+ provider: z
32
+ .enum(["openai", "anthropic", "google_gemini"])
33
+ .optional()
34
+ .describe("Preferred AI provider (auto-detected from integrations if omitted)"),
35
+ model: z
36
+ .string()
37
+ .optional()
38
+ .describe("Specific model name (uses provider default if omitted)"),
39
+ }, async (args) => {
40
+ const { token } = await authenticate();
41
+ const data = await invokeEdgeFunction(token, "deal-ai-chat", args);
42
+ return {
43
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
44
+ };
45
+ });
46
+ // ── Save AI key ───────────────────────────────────────────────────
47
+ server.tool("save_ai_key", "Save an AI provider API key (encrypted at rest). Supported: openai, anthropic, google_gemini.", {
48
+ provider: z
49
+ .enum(["openai", "anthropic", "google_gemini"])
50
+ .describe("AI provider"),
51
+ apiKey: z.string().min(1).describe("API key value"),
52
+ }, async (args) => {
53
+ const { token } = await authenticate();
54
+ const data = await invokeEdgeFunction(token, "ai-key-manage", {
55
+ action: "save",
56
+ ...args,
57
+ });
58
+ return {
59
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
60
+ };
61
+ });
62
+ // ── Test AI key ───────────────────────────────────────────────────
63
+ server.tool("test_ai_key", "Test if a saved AI provider API key is valid", {
64
+ provider: z
65
+ .enum(["openai", "anthropic", "google_gemini"])
66
+ .describe("AI provider to test"),
67
+ }, async (args) => {
68
+ const { token } = await authenticate();
69
+ const data = await invokeEdgeFunction(token, "ai-key-manage", {
70
+ action: "test",
71
+ ...args,
72
+ });
73
+ return {
74
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
75
+ };
76
+ });
77
+ // ── Delete AI key ─────────────────────────────────────────────────
78
+ server.tool("delete_ai_key", "Delete a saved AI provider API key", {
79
+ provider: z
80
+ .enum(["openai", "anthropic", "google_gemini"])
81
+ .describe("AI provider whose key to delete"),
82
+ }, async (args) => {
83
+ const { token } = await authenticate();
84
+ const data = await invokeEdgeFunction(token, "ai-key-manage", {
85
+ action: "delete",
86
+ ...args,
87
+ });
88
+ return {
89
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
90
+ };
91
+ });
92
+ }
93
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/tools/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Analytics MCP tools.
3
+ * Covers: YouTube analytics, video data fetching, channel info.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerAnalyticsTools(server: McpServer): void;
7
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QAuFvD"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Analytics MCP tools.
3
+ * Covers: YouTube analytics, video data fetching, channel info.
4
+ */
5
+ import { z } from "zod";
6
+ import { authenticate } from "../auth.js";
7
+ import { createUserClient, invokeEdgeFunction } from "../client.js";
8
+ export function registerAnalyticsTools(server) {
9
+ // ── YouTube analytics ─────────────────────────────────────────────
10
+ server.tool("get_youtube_analytics", "Get YouTube analytics data (CTR, watch time, revenue) for your videos. Requires YouTube integration connected via Pipedream.", {
11
+ videoIds: z
12
+ .array(z.string())
13
+ .optional()
14
+ .describe("Specific YouTube video IDs to analyze (omit for channel overview)"),
15
+ forceRefresh: z
16
+ .boolean()
17
+ .optional()
18
+ .describe("Force refresh cache (normally cached for 24h)"),
19
+ }, async (args) => {
20
+ const { token } = await authenticate();
21
+ const data = await invokeEdgeFunction(token, "youtube-analytics", args);
22
+ return {
23
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
24
+ };
25
+ });
26
+ // ── Fetch YouTube video data ──────────────────────────────────────
27
+ server.tool("fetch_youtube_data", "Fetch YouTube video metadata (title, views, description, etc.) for specific videos", {
28
+ videoIds: z
29
+ .array(z.string())
30
+ .min(1)
31
+ .describe("YouTube video IDs to fetch data for"),
32
+ }, async (args) => {
33
+ const { token } = await authenticate();
34
+ const data = await invokeEdgeFunction(token, "fetch-youtube-data", args);
35
+ return {
36
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
37
+ };
38
+ });
39
+ // ── Fetch YouTube channel ─────────────────────────────────────────
40
+ server.tool("fetch_youtube_channel", "Fetch YouTube channel information and stats", {
41
+ channelId: z.string().optional().describe("YouTube channel ID (uses connected channel if omitted)"),
42
+ }, async (args) => {
43
+ const { token } = await authenticate();
44
+ const data = await invokeEdgeFunction(token, "fetch-youtube-channel", args);
45
+ return {
46
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
47
+ };
48
+ });
49
+ // ── Video analytics snapshots ─────────────────────────────────────
50
+ server.tool("get_video_analytics_snapshots", "Get historical analytics snapshots for a pipeline video", {
51
+ videoId: z.string().uuid().describe("Pipeline video ID"),
52
+ limit: z.number().min(1).max(100).default(30).describe("Max snapshots to return"),
53
+ }, async ({ videoId, limit }) => {
54
+ const { token } = await authenticate();
55
+ const client = createUserClient(token);
56
+ const { data, error } = await client
57
+ .from("video_analytics_snapshots")
58
+ .select("*")
59
+ .eq("video_id", videoId)
60
+ .order("snapshot_date", { ascending: false })
61
+ .limit(limit);
62
+ if (error) {
63
+ return { content: [{ type: "text", text: `Error: ${error.message}` }], isError: true };
64
+ }
65
+ return {
66
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
67
+ };
68
+ });
69
+ }
70
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Billing & subscription MCP tools.
3
+ * Covers: subscription status, credits, checkout, customer portal.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerBillingTools(server: McpServer): void;
7
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/tools/billing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAoHrD"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Billing & subscription MCP tools.
3
+ * Covers: subscription status, credits, checkout, customer portal.
4
+ */
5
+ import { z } from "zod";
6
+ import { authenticate } from "../auth.js";
7
+ import { createUserClient, invokeEdgeFunction } from "../client.js";
8
+ export function registerBillingTools(server) {
9
+ // ── Check subscription ────────────────────────────────────────────
10
+ server.tool("check_subscription", "Check the current subscription status, plan, and billing details", {}, async () => {
11
+ const { token } = await authenticate();
12
+ const data = await invokeEdgeFunction(token, "check-subscription");
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ // ── Get credits balance ───────────────────────────────────────────
18
+ server.tool("get_credits_balance", "Get current AI credits balance and recent transactions", {
19
+ transactionLimit: z
20
+ .number()
21
+ .min(0)
22
+ .max(50)
23
+ .default(10)
24
+ .describe("Number of recent transactions to include"),
25
+ }, async ({ transactionLimit }) => {
26
+ const { token } = await authenticate();
27
+ const client = createUserClient(token);
28
+ const [profileRes, txRes] = await Promise.all([
29
+ client
30
+ .from("profiles")
31
+ .select("credits_balance, subscription_tier")
32
+ .maybeSingle(),
33
+ client
34
+ .from("credit_transactions")
35
+ .select("*")
36
+ .order("created_at", { ascending: false })
37
+ .limit(transactionLimit),
38
+ ]);
39
+ if (profileRes.error) {
40
+ return {
41
+ content: [{ type: "text", text: `Error: ${profileRes.error.message}` }],
42
+ isError: true,
43
+ };
44
+ }
45
+ return {
46
+ content: [
47
+ {
48
+ type: "text",
49
+ text: JSON.stringify({
50
+ credits_balance: profileRes.data?.credits_balance ?? 0,
51
+ subscription_tier: profileRes.data?.subscription_tier ?? "free",
52
+ recent_transactions: txRes.data ?? [],
53
+ }, null, 2),
54
+ },
55
+ ],
56
+ };
57
+ });
58
+ // ── Create checkout session ───────────────────────────────────────
59
+ server.tool("create_checkout", "Create a Stripe checkout session for upgrading the subscription plan", {
60
+ priceId: z.string().describe("Stripe price ID for the plan"),
61
+ successUrl: z.string().url().optional().describe("Redirect URL on success"),
62
+ cancelUrl: z.string().url().optional().describe("Redirect URL on cancel"),
63
+ }, async (args) => {
64
+ const { token } = await authenticate();
65
+ const data = await invokeEdgeFunction(token, "create-checkout", args);
66
+ return {
67
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
68
+ };
69
+ });
70
+ // ── Customer portal ───────────────────────────────────────────────
71
+ server.tool("get_customer_portal", "Get a link to the Stripe customer portal for managing billing", {
72
+ returnUrl: z.string().url().optional().describe("Return URL after portal session"),
73
+ }, async (args) => {
74
+ const { token } = await authenticate();
75
+ const data = await invokeEdgeFunction(token, "customer-portal", args);
76
+ return {
77
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
78
+ };
79
+ });
80
+ // ── Check extension usage ─────────────────────────────────────────
81
+ server.tool("check_extension_usage", "Check weekly usage limits for the browser extension features", {}, async () => {
82
+ const { token } = await authenticate();
83
+ const data = await invokeEdgeFunction(token, "check-extension-usage");
84
+ return {
85
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
86
+ };
87
+ });
88
+ }
89
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/tools/billing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,kEAAkE,EAClE,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACnE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,wDAAwD,EACxD;QACE,gBAAgB,EAAE,CAAC;aAChB,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,0CAA0C,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5C,MAAM;iBACH,IAAI,CAAC,UAAU,CAAC;iBAChB,MAAM,CAAC,oCAAoC,CAAC;iBAC5C,WAAW,EAAE;YAChB,MAAM;iBACH,IAAI,CAAC,qBAAqB,CAAC;iBAC3B,MAAM,CAAC,GAAG,CAAC;iBACX,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;iBACzC,KAAK,CAAC,gBAAgB,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,eAAe,EAAE,UAAU,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC;wBACtD,iBAAiB,EAAE,UAAU,CAAC,IAAI,EAAE,iBAAiB,IAAI,MAAM;wBAC/D,mBAAmB,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;qBACtC,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,sEAAsE,EACtE;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC3E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAC1E,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,+DAA+D,EAC/D;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8DAA8D,EAC9D,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACtE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Deal management MCP tools.
3
+ * Covers: deals CRUD, deliverables, coupons, brand proposals, integrations.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerDealTools(server: McpServer): void;
7
+ //# sourceMappingURL=deals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deals.d.ts","sourceRoot":"","sources":["../../src/tools/deals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAqRlD"}