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.
- package/dist/auth.d.ts +14 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +79 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +23 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +56 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +7 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +262 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +7 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +171 -0
- package/dist/resources.js.map +1 -0
- package/dist/tools/admin.d.ts +8 -0
- package/dist/tools/admin.d.ts.map +1 -0
- package/dist/tools/admin.js +66 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/ai.d.ts +7 -0
- package/dist/tools/ai.d.ts.map +1 -0
- package/dist/tools/ai.js +93 -0
- package/dist/tools/ai.js.map +1 -0
- package/dist/tools/analytics.d.ts +7 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +70 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/billing.d.ts +7 -0
- package/dist/tools/billing.d.ts.map +1 -0
- package/dist/tools/billing.js +89 -0
- package/dist/tools/billing.js.map +1 -0
- package/dist/tools/deals.d.ts +7 -0
- package/dist/tools/deals.d.ts.map +1 -0
- package/dist/tools/deals.js +218 -0
- package/dist/tools/deals.js.map +1 -0
- package/dist/tools/pipeline.d.ts +7 -0
- package/dist/tools/pipeline.d.ts.map +1 -0
- package/dist/tools/pipeline.js +225 -0
- package/dist/tools/pipeline.js.map +1 -0
- package/dist/tools/pitch.d.ts +7 -0
- package/dist/tools/pitch.d.ts.map +1 -0
- package/dist/tools/pitch.js +115 -0
- package/dist/tools/pitch.js.map +1 -0
- package/dist/tools/social.d.ts +7 -0
- package/dist/tools/social.d.ts.map +1 -0
- package/dist/tools/social.js +94 -0
- package/dist/tools/social.js.map +1 -0
- package/dist/tools/support.d.ts +7 -0
- package/dist/tools/support.d.ts.map +1 -0
- package/dist/tools/support.js +172 -0
- package/dist/tools/support.js.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication module for Creator OS MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Supports two authentication methods:
|
|
5
|
+
* 1. MCP API Token (mcp_...): validated via SHA-256 hash lookup in mcp_tokens table
|
|
6
|
+
* 2. Supabase JWT: validated via Supabase Auth API (backward compatible)
|
|
7
|
+
*/
|
|
8
|
+
import type { AuthContext } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Authenticate using the CREATOR_OS_TOKEN environment variable.
|
|
11
|
+
* Supports both MCP API tokens (mcp_...) and Supabase JWTs.
|
|
12
|
+
*/
|
|
13
|
+
export declare function authenticate(): Promise<AuthContext>;
|
|
14
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA+E9C;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAezD"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication module for Creator OS MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Supports two authentication methods:
|
|
5
|
+
* 1. MCP API Token (mcp_...): validated via SHA-256 hash lookup in mcp_tokens table
|
|
6
|
+
* 2. Supabase JWT: validated via Supabase Auth API (backward compatible)
|
|
7
|
+
*/
|
|
8
|
+
import { createHash } from "crypto";
|
|
9
|
+
import { createAdminClient, createUserClient } from "./client.js";
|
|
10
|
+
const MCP_TOKEN_PREFIX = "mcp_";
|
|
11
|
+
/**
|
|
12
|
+
* SHA-256 hash a token string, returning hex digest.
|
|
13
|
+
*/
|
|
14
|
+
function hashToken(rawToken) {
|
|
15
|
+
return createHash("sha256").update(rawToken).digest("hex");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate an MCP API token (mcp_...) against the mcp_tokens table.
|
|
19
|
+
*/
|
|
20
|
+
async function authenticateWithMcpToken(token) {
|
|
21
|
+
const tokenHash = hashToken(token);
|
|
22
|
+
const admin = createAdminClient();
|
|
23
|
+
const { data, error } = await admin.rpc("validate_mcp_token", {
|
|
24
|
+
p_token_hash: tokenHash,
|
|
25
|
+
});
|
|
26
|
+
if (error || !data || data.length === 0) {
|
|
27
|
+
throw new Error("Invalid MCP API token — authentication failed. " +
|
|
28
|
+
"Ensure your token has not been revoked.");
|
|
29
|
+
}
|
|
30
|
+
const row = data[0];
|
|
31
|
+
return {
|
|
32
|
+
userId: row.user_id,
|
|
33
|
+
email: row.email ?? null,
|
|
34
|
+
token,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate a Supabase JWT token via the Auth API.
|
|
39
|
+
*/
|
|
40
|
+
async function authenticateWithJwt(token) {
|
|
41
|
+
const client = createUserClient(token);
|
|
42
|
+
// Try getSession first (lightweight), fall back to getUser
|
|
43
|
+
const { data: sessionData, error: sessionError } = await client.auth.getSession();
|
|
44
|
+
if (!sessionError && sessionData?.session?.user) {
|
|
45
|
+
const user = sessionData.session.user;
|
|
46
|
+
return {
|
|
47
|
+
userId: user.id,
|
|
48
|
+
email: user.email ?? null,
|
|
49
|
+
token,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Fallback: validate via getUser
|
|
53
|
+
const { data: { user }, error, } = await client.auth.getUser(token);
|
|
54
|
+
if (error || !user) {
|
|
55
|
+
throw new Error("Invalid Supabase token — authentication failed. " +
|
|
56
|
+
"Ensure your CREATOR_OS_TOKEN is a valid access token.");
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
userId: user.id,
|
|
60
|
+
email: user.email ?? null,
|
|
61
|
+
token,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Authenticate using the CREATOR_OS_TOKEN environment variable.
|
|
66
|
+
* Supports both MCP API tokens (mcp_...) and Supabase JWTs.
|
|
67
|
+
*/
|
|
68
|
+
export async function authenticate() {
|
|
69
|
+
const token = process.env.CREATOR_OS_TOKEN;
|
|
70
|
+
if (!token) {
|
|
71
|
+
throw new Error("Missing CREATOR_OS_TOKEN environment variable. " +
|
|
72
|
+
"Set it to your MCP API token (mcp_...) or Supabase access token.");
|
|
73
|
+
}
|
|
74
|
+
if (token.startsWith(MCP_TOKEN_PREFIX)) {
|
|
75
|
+
return authenticateWithMcpToken(token);
|
|
76
|
+
}
|
|
77
|
+
return authenticateWithJwt(token);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;GAEG;AACH,SAAS,SAAS,CAAC,QAAgB;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CACrC,KAAa;IAEb,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAElC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,oBAAoB,EAAE;QAC5D,YAAY,EAAE,SAAS;KACxB,CAAC,CAAC;IAEH,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,iDAAiD;YAC/C,yCAAyC,CAC5C,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI;QACxB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,KAAa;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEvC,2DAA2D;IAC3D,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,GAC9C,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAEjC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;YACzB,KAAK;SACN,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,EACJ,IAAI,EAAE,EAAE,IAAI,EAAE,EACd,KAAK,GACN,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,kDAAkD;YAChD,uDAAuD,CAC1D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,iDAAiD;YAC/C,kEAAkE,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvC,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase client factory for MCP server.
|
|
3
|
+
* Creates authenticated clients using the user's token.
|
|
4
|
+
*/
|
|
5
|
+
import { type SupabaseClient } from "@supabase/supabase-js";
|
|
6
|
+
export declare function getEnvConfig(): {
|
|
7
|
+
supabaseUrl: string;
|
|
8
|
+
supabaseAnonKey: string;
|
|
9
|
+
supabaseServiceKey: string | undefined;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Create a Supabase client authenticated with the user's Bearer token.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createUserClient(token: string): SupabaseClient;
|
|
15
|
+
/**
|
|
16
|
+
* Create a Supabase admin client using the service role key.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createAdminClient(): SupabaseClient;
|
|
19
|
+
/**
|
|
20
|
+
* Invoke a Supabase Edge Function using the user's token.
|
|
21
|
+
*/
|
|
22
|
+
export declare function invokeEdgeFunction<T = unknown>(token: string, functionName: string, body?: Record<string, unknown>): Promise<T>;
|
|
23
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM1E,wBAAgB,YAAY;;;;EAkB3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAK9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAClD,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC,CAWZ"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase client factory for MCP server.
|
|
3
|
+
* Creates authenticated clients using the user's token.
|
|
4
|
+
*/
|
|
5
|
+
import { createClient } from "@supabase/supabase-js";
|
|
6
|
+
let _supabaseUrl;
|
|
7
|
+
let _supabaseAnonKey;
|
|
8
|
+
let _supabaseServiceKey;
|
|
9
|
+
export function getEnvConfig() {
|
|
10
|
+
if (!_supabaseUrl) {
|
|
11
|
+
_supabaseUrl = process.env.SUPABASE_URL;
|
|
12
|
+
_supabaseAnonKey = process.env.SUPABASE_ANON_KEY;
|
|
13
|
+
_supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
|
14
|
+
}
|
|
15
|
+
if (!_supabaseUrl || !_supabaseAnonKey) {
|
|
16
|
+
throw new Error("Missing SUPABASE_URL or SUPABASE_ANON_KEY environment variables");
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
supabaseUrl: _supabaseUrl,
|
|
20
|
+
supabaseAnonKey: _supabaseAnonKey,
|
|
21
|
+
supabaseServiceKey: _supabaseServiceKey,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a Supabase client authenticated with the user's Bearer token.
|
|
26
|
+
*/
|
|
27
|
+
export function createUserClient(token) {
|
|
28
|
+
const { supabaseUrl, supabaseAnonKey } = getEnvConfig();
|
|
29
|
+
return createClient(supabaseUrl, supabaseAnonKey, {
|
|
30
|
+
global: { headers: { Authorization: `Bearer ${token}` } },
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a Supabase admin client using the service role key.
|
|
35
|
+
*/
|
|
36
|
+
export function createAdminClient() {
|
|
37
|
+
const { supabaseUrl, supabaseServiceKey } = getEnvConfig();
|
|
38
|
+
if (!supabaseServiceKey) {
|
|
39
|
+
throw new Error("Missing SUPABASE_SERVICE_ROLE_KEY environment variable");
|
|
40
|
+
}
|
|
41
|
+
return createClient(supabaseUrl, supabaseServiceKey);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Invoke a Supabase Edge Function using the user's token.
|
|
45
|
+
*/
|
|
46
|
+
export async function invokeEdgeFunction(token, functionName, body) {
|
|
47
|
+
const client = createUserClient(token);
|
|
48
|
+
const { data, error } = await client.functions.invoke(functionName, {
|
|
49
|
+
body: body ?? {},
|
|
50
|
+
});
|
|
51
|
+
if (error) {
|
|
52
|
+
throw new Error(`Edge function '${functionName}' failed: ${error.message}`);
|
|
53
|
+
}
|
|
54
|
+
return data;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAuB,MAAM,uBAAuB,CAAC;AAE1E,IAAI,YAAgC,CAAC;AACrC,IAAI,gBAAoC,CAAC;AACzC,IAAI,mBAAuC,CAAC;AAE5C,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACxC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACjD,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW,EAAE,YAAY;QACzB,eAAe,EAAE,gBAAgB;QACjC,kBAAkB,EAAE,mBAAmB;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAAC;IACxD,OAAO,YAAY,CAAC,WAAW,EAAE,eAAe,EAAE;QAChD,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE;KAC1D,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,YAAY,EAAE,CAAC;IAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,YAAY,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa,EACb,YAAoB,EACpB,IAA8B;IAE9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE;QAClE,IAAI,EAAE,IAAI,IAAI,EAAE;KACjB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Creator OS MCP Server — entry point.
|
|
4
|
+
*
|
|
5
|
+
* Exposes 54 tools, 5 resources, and 4 prompts that cover
|
|
6
|
+
* the full Creator OS platform: pipeline, deals, AI, analytics,
|
|
7
|
+
* social integrations, billing, pitch pack, support, and admin.
|
|
8
|
+
*
|
|
9
|
+
* Auth: set CREATOR_OS_TOKEN env var with an MCP API token (mcp_...) or Supabase JWT.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Creator OS MCP Server — entry point.
|
|
4
|
+
*
|
|
5
|
+
* Exposes 54 tools, 5 resources, and 4 prompts that cover
|
|
6
|
+
* the full Creator OS platform: pipeline, deals, AI, analytics,
|
|
7
|
+
* social integrations, billing, pitch pack, support, and admin.
|
|
8
|
+
*
|
|
9
|
+
* Auth: set CREATOR_OS_TOKEN env var with an MCP API token (mcp_...) or Supabase JWT.
|
|
10
|
+
*/
|
|
11
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
13
|
+
import { registerPipelineTools } from "./tools/pipeline.js";
|
|
14
|
+
import { registerDealTools } from "./tools/deals.js";
|
|
15
|
+
import { registerAITools } from "./tools/ai.js";
|
|
16
|
+
import { registerAnalyticsTools } from "./tools/analytics.js";
|
|
17
|
+
import { registerSocialTools } from "./tools/social.js";
|
|
18
|
+
import { registerBillingTools } from "./tools/billing.js";
|
|
19
|
+
import { registerPitchTools } from "./tools/pitch.js";
|
|
20
|
+
import { registerSupportTools } from "./tools/support.js";
|
|
21
|
+
import { registerAdminTools } from "./tools/admin.js";
|
|
22
|
+
import { registerResources } from "./resources.js";
|
|
23
|
+
import { registerPrompts } from "./prompts.js";
|
|
24
|
+
const server = new McpServer({
|
|
25
|
+
name: "creator-os-mcp",
|
|
26
|
+
version: "1.0.0",
|
|
27
|
+
}, {
|
|
28
|
+
instructions: [
|
|
29
|
+
"Creator OS MCP Server — a comprehensive toolkit for YouTube creators.",
|
|
30
|
+
"Provides tools for content pipeline management, brand deal tracking,",
|
|
31
|
+
"AI-powered content suggestions, YouTube analytics, social integrations,",
|
|
32
|
+
"billing/subscription management, pitch pack configuration, support tickets,",
|
|
33
|
+
"and admin operations.",
|
|
34
|
+
"",
|
|
35
|
+
"Authentication: requires CREATOR_OS_TOKEN environment variable.",
|
|
36
|
+
"Supports two token types:",
|
|
37
|
+
" 1. MCP API Token (mcp_...) — generated from Creator OS dashboard → Settings → MCP",
|
|
38
|
+
" 2. Supabase JWT — your Supabase access token (backward compatible)",
|
|
39
|
+
"",
|
|
40
|
+
"Environment variables needed:",
|
|
41
|
+
" CREATOR_OS_TOKEN — MCP API token or Supabase JWT (required)",
|
|
42
|
+
" SUPABASE_URL — Supabase project URL",
|
|
43
|
+
" SUPABASE_ANON_KEY — Supabase anon/public key",
|
|
44
|
+
" SUPABASE_SERVICE_ROLE_KEY — For admin operations and MCP token validation",
|
|
45
|
+
].join("\n"),
|
|
46
|
+
capabilities: {
|
|
47
|
+
logging: {},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
// ── Register all capabilities ──────────────────────────────────────
|
|
51
|
+
registerPipelineTools(server);
|
|
52
|
+
registerDealTools(server);
|
|
53
|
+
registerAITools(server);
|
|
54
|
+
registerAnalyticsTools(server);
|
|
55
|
+
registerSocialTools(server);
|
|
56
|
+
registerBillingTools(server);
|
|
57
|
+
registerPitchTools(server);
|
|
58
|
+
registerSupportTools(server);
|
|
59
|
+
registerAdminTools(server);
|
|
60
|
+
registerResources(server);
|
|
61
|
+
registerPrompts(server);
|
|
62
|
+
// ── Connect via stdio transport ────────────────────────────────────
|
|
63
|
+
const transport = new StdioServerTransport();
|
|
64
|
+
await server.connect(transport);
|
|
65
|
+
// ── Graceful shutdown ──────────────────────────────────────────────
|
|
66
|
+
const shutdown = async () => {
|
|
67
|
+
await server.close();
|
|
68
|
+
process.exit(0);
|
|
69
|
+
};
|
|
70
|
+
process.on("SIGINT", shutdown);
|
|
71
|
+
process.on("SIGTERM", shutdown);
|
|
72
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;IACE,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,uEAAuE;QACvE,sEAAsE;QACtE,yEAAyE;QACzE,6EAA6E;QAC7E,uBAAuB;QACvB,EAAE;QACF,iEAAiE;QACjE,2BAA2B;QAC3B,qFAAqF;QACrF,sEAAsE;QACtE,EAAE;QACF,+BAA+B;QAC/B,uEAAuE;QACvE,mDAAmD;QACnD,uDAAuD;QACvD,6EAA6E;KAC9E,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,YAAY,EAAE;QACZ,OAAO,EAAE,EAAE;KACZ;CACF,CACF,CAAC;AAEF,sEAAsE;AACtE,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;AAExB,sEAAsE;AACtE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,sEAAsE;AACtE,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;IAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Prompts — contextual prompt templates for Creator OS.
|
|
3
|
+
* Prompts provide reusable LLM instructions grounded in creator data.
|
|
4
|
+
*/
|
|
5
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
export declare function registerPrompts(server: McpServer): void;
|
|
7
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAgShD"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Prompts — contextual prompt templates for Creator OS.
|
|
3
|
+
* Prompts provide reusable LLM instructions grounded in creator data.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { authenticate } from "./auth.js";
|
|
7
|
+
import { createUserClient } from "./client.js";
|
|
8
|
+
export function registerPrompts(server) {
|
|
9
|
+
// ── Content Strategy ────────────────────────────────────────────
|
|
10
|
+
server.prompt("content-strategy", "Generate a content strategy based on your pipeline status, analytics, and goals", {
|
|
11
|
+
goal: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Specific goal e.g. 'grow subscribers', 'increase CTR'"),
|
|
15
|
+
timeframe: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Planning timeframe e.g. 'next week', 'this month'"),
|
|
19
|
+
}, async ({ goal, timeframe }) => {
|
|
20
|
+
const auth = await authenticate();
|
|
21
|
+
const client = createUserClient(auth.token);
|
|
22
|
+
const [videosRes, analyticsRes, profileRes] = await Promise.all([
|
|
23
|
+
client
|
|
24
|
+
.from("pipeline_videos")
|
|
25
|
+
.select("title, status, target_publish_date, tags")
|
|
26
|
+
.eq("user_id", auth.userId)
|
|
27
|
+
.order("created_at", { ascending: false })
|
|
28
|
+
.limit(20),
|
|
29
|
+
client
|
|
30
|
+
.from("video_analytics_snapshots")
|
|
31
|
+
.select("video_id, views, likes, ctr, snapshot_date")
|
|
32
|
+
.eq("user_id", auth.userId)
|
|
33
|
+
.order("snapshot_date", { ascending: false })
|
|
34
|
+
.limit(20),
|
|
35
|
+
client
|
|
36
|
+
.from("profiles")
|
|
37
|
+
.select("full_name, subscription_tier")
|
|
38
|
+
.eq("id", auth.userId)
|
|
39
|
+
.single(),
|
|
40
|
+
]);
|
|
41
|
+
const context = {
|
|
42
|
+
pipeline: videosRes.data ?? [],
|
|
43
|
+
analytics: analyticsRes.data ?? [],
|
|
44
|
+
creator: profileRes.data,
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
messages: [
|
|
48
|
+
{
|
|
49
|
+
role: "user",
|
|
50
|
+
content: {
|
|
51
|
+
type: "text",
|
|
52
|
+
text: [
|
|
53
|
+
"You are a YouTube content strategist helping a creator plan their content.",
|
|
54
|
+
"",
|
|
55
|
+
`Creator: ${context.creator?.full_name ?? "Unknown"}`,
|
|
56
|
+
`Tier: ${context.creator?.subscription_tier ?? "free"}`,
|
|
57
|
+
goal ? `Goal: ${goal}` : "",
|
|
58
|
+
timeframe ? `Timeframe: ${timeframe}` : "",
|
|
59
|
+
"",
|
|
60
|
+
"## Current Pipeline",
|
|
61
|
+
JSON.stringify(context.pipeline, null, 2),
|
|
62
|
+
"",
|
|
63
|
+
"## Recent Analytics",
|
|
64
|
+
JSON.stringify(context.analytics, null, 2),
|
|
65
|
+
"",
|
|
66
|
+
"Based on this data, provide a specific, actionable content strategy.",
|
|
67
|
+
"Include: publishing schedule, content themes, optimization tips, and CTR improvement ideas.",
|
|
68
|
+
]
|
|
69
|
+
.filter(Boolean)
|
|
70
|
+
.join("\n"),
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
// ── Deal Negotiation ────────────────────────────────────────────
|
|
77
|
+
server.prompt("deal-negotiation", "Get negotiation advice for a specific brand deal based on your metrics and deal history", {
|
|
78
|
+
dealId: z.string().describe("The deal ID to get advice for"),
|
|
79
|
+
}, async ({ dealId }) => {
|
|
80
|
+
const auth = await authenticate();
|
|
81
|
+
const client = createUserClient(auth.token);
|
|
82
|
+
const [dealRes, platformsRes, dealsHistoryRes] = await Promise.all([
|
|
83
|
+
client
|
|
84
|
+
.from("deals")
|
|
85
|
+
.select("*")
|
|
86
|
+
.eq("id", dealId)
|
|
87
|
+
.eq("user_id", auth.userId)
|
|
88
|
+
.single(),
|
|
89
|
+
client
|
|
90
|
+
.from("creator_platforms")
|
|
91
|
+
.select("platform, follower_count, total_views")
|
|
92
|
+
.eq("user_id", auth.userId),
|
|
93
|
+
client
|
|
94
|
+
.from("deals")
|
|
95
|
+
.select("brand_name, status, deal_value, currency, target_platform")
|
|
96
|
+
.eq("user_id", auth.userId)
|
|
97
|
+
.in("status", ["completed", "active"])
|
|
98
|
+
.order("deal_value", { ascending: false })
|
|
99
|
+
.limit(10),
|
|
100
|
+
]);
|
|
101
|
+
const deal = dealRes.data;
|
|
102
|
+
const platforms = platformsRes.data ?? [];
|
|
103
|
+
const pastDeals = dealsHistoryRes.data ?? [];
|
|
104
|
+
return {
|
|
105
|
+
messages: [
|
|
106
|
+
{
|
|
107
|
+
role: "user",
|
|
108
|
+
content: {
|
|
109
|
+
type: "text",
|
|
110
|
+
text: [
|
|
111
|
+
"You are an experienced creator economy negotiation advisor.",
|
|
112
|
+
"",
|
|
113
|
+
"## Current Deal",
|
|
114
|
+
deal
|
|
115
|
+
? JSON.stringify(deal, null, 2)
|
|
116
|
+
: `Deal ${dealId} not found.`,
|
|
117
|
+
"",
|
|
118
|
+
"## Creator Platforms & Metrics",
|
|
119
|
+
JSON.stringify(platforms, null, 2),
|
|
120
|
+
"",
|
|
121
|
+
"## Past Completed/Active Deals (for rate reference)",
|
|
122
|
+
JSON.stringify(pastDeals, null, 2),
|
|
123
|
+
"",
|
|
124
|
+
"Provide specific negotiation advice including:",
|
|
125
|
+
"- Fair rate range based on metrics and past deals",
|
|
126
|
+
"- Key terms to negotiate (usage rights, exclusivity, timeline)",
|
|
127
|
+
"- Red flags to watch for",
|
|
128
|
+
"- Counter-offer strategy if the current value seems low",
|
|
129
|
+
].join("\n"),
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
// ── Analytics Review ────────────────────────────────────────────
|
|
136
|
+
server.prompt("analytics-review", "Interpret your YouTube analytics and identify trends, opportunities, and areas for improvement", {
|
|
137
|
+
focus: z
|
|
138
|
+
.string()
|
|
139
|
+
.optional()
|
|
140
|
+
.describe("Area to focus on: 'ctr', 'retention', 'growth', or 'monetization'"),
|
|
141
|
+
}, async ({ focus }) => {
|
|
142
|
+
const auth = await authenticate();
|
|
143
|
+
const client = createUserClient(auth.token);
|
|
144
|
+
const [snapshotsRes, videosRes] = await Promise.all([
|
|
145
|
+
client
|
|
146
|
+
.from("video_analytics_snapshots")
|
|
147
|
+
.select("video_id, views, likes, comments, watch_time_hours, ctr, impressions, snapshot_date")
|
|
148
|
+
.eq("user_id", auth.userId)
|
|
149
|
+
.order("snapshot_date", { ascending: false })
|
|
150
|
+
.limit(50),
|
|
151
|
+
client
|
|
152
|
+
.from("pipeline_videos")
|
|
153
|
+
.select("id, title, status, tags, target_platform")
|
|
154
|
+
.eq("user_id", auth.userId)
|
|
155
|
+
.eq("status", "published")
|
|
156
|
+
.order("updated_at", { ascending: false })
|
|
157
|
+
.limit(20),
|
|
158
|
+
]);
|
|
159
|
+
const snapshots = snapshotsRes.data ?? [];
|
|
160
|
+
const videos = videosRes.data ?? [];
|
|
161
|
+
// Build video title map
|
|
162
|
+
const videoMap = new Map(videos.map((v) => [v.id, v.title]));
|
|
163
|
+
const enriched = snapshots.map((s) => ({
|
|
164
|
+
...s,
|
|
165
|
+
title: videoMap.get(s.video_id) ?? s.video_id,
|
|
166
|
+
}));
|
|
167
|
+
return {
|
|
168
|
+
messages: [
|
|
169
|
+
{
|
|
170
|
+
role: "user",
|
|
171
|
+
content: {
|
|
172
|
+
type: "text",
|
|
173
|
+
text: [
|
|
174
|
+
"You are a YouTube analytics expert helping a creator understand their performance.",
|
|
175
|
+
focus ? `Focus area: ${focus}` : "",
|
|
176
|
+
"",
|
|
177
|
+
"## Analytics Data (most recent snapshots)",
|
|
178
|
+
JSON.stringify(enriched, null, 2),
|
|
179
|
+
"",
|
|
180
|
+
"Provide a clear analysis including:",
|
|
181
|
+
"- Overall channel health assessment",
|
|
182
|
+
"- Top performing videos and why they worked",
|
|
183
|
+
"- Underperforming videos and potential causes",
|
|
184
|
+
"- Specific, actionable recommendations",
|
|
185
|
+
"- Key metrics to watch going forward",
|
|
186
|
+
]
|
|
187
|
+
.filter(Boolean)
|
|
188
|
+
.join("\n"),
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
});
|
|
194
|
+
// ── Video Idea Brainstorm ───────────────────────────────────────
|
|
195
|
+
server.prompt("video-idea-brainstorm", "Brainstorm video ideas based on your niche, past content performance, and saved ideas", {
|
|
196
|
+
niche: z
|
|
197
|
+
.string()
|
|
198
|
+
.optional()
|
|
199
|
+
.describe("Content niche or topic area"),
|
|
200
|
+
count: z
|
|
201
|
+
.string()
|
|
202
|
+
.optional()
|
|
203
|
+
.describe("Number of ideas to generate (default: 5)"),
|
|
204
|
+
}, async ({ niche, count }) => {
|
|
205
|
+
const auth = await authenticate();
|
|
206
|
+
const client = createUserClient(auth.token);
|
|
207
|
+
const [ideasRes, topVideosRes, profileRes] = await Promise.all([
|
|
208
|
+
client
|
|
209
|
+
.from("saved_ideas")
|
|
210
|
+
.select("title, subtitle, kind, source_platform")
|
|
211
|
+
.eq("user_id", auth.userId)
|
|
212
|
+
.is("deleted_at", null)
|
|
213
|
+
.order("created_at", { ascending: false })
|
|
214
|
+
.limit(15),
|
|
215
|
+
client
|
|
216
|
+
.from("video_analytics_snapshots")
|
|
217
|
+
.select("video_id, views, likes, ctr")
|
|
218
|
+
.eq("user_id", auth.userId)
|
|
219
|
+
.order("views", { ascending: false })
|
|
220
|
+
.limit(10),
|
|
221
|
+
client
|
|
222
|
+
.from("profiles")
|
|
223
|
+
.select("full_name, bio")
|
|
224
|
+
.eq("id", auth.userId)
|
|
225
|
+
.single(),
|
|
226
|
+
]);
|
|
227
|
+
return {
|
|
228
|
+
messages: [
|
|
229
|
+
{
|
|
230
|
+
role: "user",
|
|
231
|
+
content: {
|
|
232
|
+
type: "text",
|
|
233
|
+
text: [
|
|
234
|
+
"You are a creative YouTube content strategist.",
|
|
235
|
+
niche ? `Niche: ${niche}` : "",
|
|
236
|
+
`Generate ${count ?? "5"} unique video ideas.`,
|
|
237
|
+
"",
|
|
238
|
+
`Creator: ${profileRes.data?.full_name ?? "Unknown"}`,
|
|
239
|
+
profileRes.data?.bio ? `Bio: ${profileRes.data.bio}` : "",
|
|
240
|
+
"",
|
|
241
|
+
"## Saved Idea Backlog",
|
|
242
|
+
JSON.stringify(ideasRes.data ?? [], null, 2),
|
|
243
|
+
"",
|
|
244
|
+
"## Top Performing Videos (by views)",
|
|
245
|
+
JSON.stringify(topVideosRes.data ?? [], null, 2),
|
|
246
|
+
"",
|
|
247
|
+
"For each idea provide:",
|
|
248
|
+
"- Title (optimized for CTR)",
|
|
249
|
+
"- Hook/angle explanation",
|
|
250
|
+
"- Thumbnail concept",
|
|
251
|
+
"- Estimated effort (low/medium/high)",
|
|
252
|
+
"- Why it should perform well based on the data",
|
|
253
|
+
]
|
|
254
|
+
.filter(Boolean)
|
|
255
|
+
.join("\n"),
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
};
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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 type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
export declare function registerResources(server: McpServer): void;
|
|
7
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAgPlD"}
|