@mirrai/mcp-server 0.8.1 → 0.9.1

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.
@@ -14,6 +14,7 @@ export declare class MirraApiError extends Error {
14
14
  export declare class MirraApiClient {
15
15
  readonly baseUrl: string;
16
16
  readonly apiKey: string;
17
+ readonly internalApiKeyForwardingSecret?: string;
17
18
  constructor(config: MirraConfig);
18
19
  private get headers();
19
20
  private handleResponse;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,qBAAa,aAAc,SAAQ,KAAK;IAE7B,UAAU,EAAE,MAAM;IAElB,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,OAAO;gBAHjB,UAAU,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,qBAAa,cAAc;IACzB,SAAgB,OAAO,EAAE,MAAM,CAAA;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAA;gBAElB,MAAM,EAAE,WAAW;IAS/B,OAAO,KAAK,OAAO,GAKlB;YAEa,cAAc;IA4BtB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBhG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUlD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB7E"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,qBAAa,aAAc,SAAQ,KAAK;IAE7B,UAAU,EAAE,MAAM;IAElB,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,OAAO;gBAHjB,UAAU,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,qBAAa,cAAc;IACzB,SAAgB,OAAO,EAAE,MAAM,CAAA;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAA;IAC9B,SAAgB,8BAA8B,CAAC,EAAE,MAAM,CAAA;gBAE3C,MAAM,EAAE,WAAW;IAU/B,OAAO,KAAK,OAAO,GAalB;YAEa,cAAc;IA4BtB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBhG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAUlD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB7E"}
@@ -4,6 +4,7 @@
4
4
  * Fetch-based HTTP client with API key authentication.
5
5
  * Handles JSON requests/responses and error mapping.
6
6
  */
7
+ import { createHmac } from 'node:crypto';
7
8
  export class MirraApiError extends Error {
8
9
  statusCode;
9
10
  code;
@@ -19,6 +20,7 @@ export class MirraApiError extends Error {
19
20
  export class MirraApiClient {
20
21
  baseUrl;
21
22
  apiKey;
23
+ internalApiKeyForwardingSecret;
22
24
  constructor(config) {
23
25
  const url = new URL(config.baseUrl);
24
26
  if (!['https:', 'http:'].includes(url.protocol)) {
@@ -26,12 +28,22 @@ export class MirraApiClient {
26
28
  }
27
29
  this.baseUrl = url.origin;
28
30
  this.apiKey = config.apiKey;
31
+ this.internalApiKeyForwardingSecret = config.internalApiKeyForwardingSecret;
29
32
  }
30
33
  get headers() {
31
- return {
32
- 'Authorization': `Bearer ${this.apiKey}`,
34
+ const headers = {
33
35
  'Content-Type': 'application/json',
34
36
  };
37
+ if (this.internalApiKeyForwardingSecret) {
38
+ headers['X-Mirra-Api-Key'] = this.apiKey;
39
+ headers['X-Mirra-Internal-Mcp'] = createHmac('sha256', this.internalApiKeyForwardingSecret)
40
+ .update(this.apiKey)
41
+ .digest('base64url');
42
+ }
43
+ else {
44
+ headers['Authorization'] = `Bearer ${this.apiKey}`;
45
+ }
46
+ return headers;
35
47
  }
36
48
  async handleResponse(response) {
37
49
  if (!response.ok) {
@@ -111,7 +123,7 @@ export class MirraApiClient {
111
123
  'Content-Type': contentType,
112
124
  'Content-Length': String(body.byteLength),
113
125
  },
114
- body,
126
+ body: new Uint8Array(body),
115
127
  });
116
128
  if (!response.ok) {
117
129
  throw new MirraApiError(response.status, `Storage upload failed with status ${response.status}`, 'STORAGE_UPLOAD_FAILED');
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/client/api-client.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,9 @@ interface SSEEvent {
13
13
  export declare class SSEClient {
14
14
  private baseUrl;
15
15
  private apiKey;
16
+ private internalApiKeyForwardingSecret?;
16
17
  constructor(config: MirraConfig);
18
+ private get headers();
17
19
  /**
18
20
  * Consume an SSE stream from a POST endpoint.
19
21
  * Returns accumulated events categorized by event type.
@@ -1 +1 @@
1
- {"version":3,"file":"sse-client.d.ts","sourceRoot":"","sources":["../../src/client/sse-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAMpD,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,MAAM,CAAQ;gBAEV,MAAM,EAAE,WAAW;IAS/B;;;OAGG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;KAC/B,GACL,OAAO,CAAC,QAAQ,EAAE,CAAC;IAwGtB;;OAEG;IACG,yBAAyB,CAC7B,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;QACT,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,KAAK,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAClE,CAAC;IAoDF;;OAEG;IACG,uBAAuB,CAC3B,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;YA8Bd,uBAAuB;CAyBtC"}
1
+ {"version":3,"file":"sse-client.d.ts","sourceRoot":"","sources":["../../src/client/sse-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAMpD,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,8BAA8B,CAAC,CAAQ;gBAEnC,MAAM,EAAE,WAAW;IAU/B,OAAO,KAAK,OAAO,GAclB;IAED;;;OAGG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;KAC/B,GACL,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoGtB;;OAEG;IACG,yBAAyB,CAC7B,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;QACT,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,KAAK,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAClE,CAAC;IAoDF;;OAEG;IACG,uBAAuB,CAC3B,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;YA8Bd,uBAAuB;CAyBtC"}
@@ -5,12 +5,14 @@
5
5
  * and accumulates the final result. MCP tools are request-response,
6
6
  * so this fully consumes the stream before returning.
7
7
  */
8
+ import { createHmac } from 'node:crypto';
8
9
  const DEFAULT_STREAM_TIMEOUT_MS = 300_000;
9
10
  const CAROUSEL_GENERATION_TIMEOUT_MS = 610_000;
10
11
  const CAROUSEL_REFINE_TIMEOUT_MS = 310_000;
11
12
  export class SSEClient {
12
13
  baseUrl;
13
14
  apiKey;
15
+ internalApiKeyForwardingSecret;
14
16
  constructor(config) {
15
17
  const url = new URL(config.baseUrl);
16
18
  if (!['https:', 'http:'].includes(url.protocol)) {
@@ -18,6 +20,23 @@ export class SSEClient {
18
20
  }
19
21
  this.baseUrl = url.origin;
20
22
  this.apiKey = config.apiKey;
23
+ this.internalApiKeyForwardingSecret = config.internalApiKeyForwardingSecret;
24
+ }
25
+ get headers() {
26
+ const headers = {
27
+ 'Content-Type': 'application/json',
28
+ 'Accept': 'text/event-stream',
29
+ };
30
+ if (this.internalApiKeyForwardingSecret) {
31
+ headers['X-Mirra-Api-Key'] = this.apiKey;
32
+ headers['X-Mirra-Internal-Mcp'] = createHmac('sha256', this.internalApiKeyForwardingSecret)
33
+ .update(this.apiKey)
34
+ .digest('base64url');
35
+ }
36
+ else {
37
+ headers['Authorization'] = `Bearer ${this.apiKey}`;
38
+ }
39
+ return headers;
21
40
  }
22
41
  /**
23
42
  * Consume an SSE stream from a POST endpoint.
@@ -30,11 +49,7 @@ export class SSEClient {
30
49
  try {
31
50
  const response = await fetch(`${this.baseUrl}${path}`, {
32
51
  method: 'POST',
33
- headers: {
34
- 'Authorization': `Bearer ${this.apiKey}`,
35
- 'Content-Type': 'application/json',
36
- 'Accept': 'text/event-stream',
37
- },
52
+ headers: this.headers,
38
53
  body: JSON.stringify(body),
39
54
  signal: controller.signal,
40
55
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../../src/client/sse-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../../src/client/sse-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,MAAM,yBAAyB,GAAG,OAAO,CAAA;AACzC,MAAM,8BAA8B,GAAG,OAAO,CAAA;AAC9C,MAAM,0BAA0B,GAAG,OAAO,CAAA;AAO1C,MAAM,OAAO,SAAS;IACZ,OAAO,CAAQ;IACf,MAAM,CAAQ;IACd,8BAA8B,CAAS;IAE/C,YAAY,MAAmB;QAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,8BAA8B,GAAG,MAAM,CAAC,8BAA8B,CAAA;IAC7E,CAAC;IAED,IAAY,OAAO;QACjB,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,mBAAmB;SAC9B,CAAA;QACD,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACxC,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;YACxC,OAAO,CAAC,sBAAsB,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,8BAA8B,CAAC;iBACxF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;iBACnB,MAAM,CAAC,WAAW,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,CAAA;QACpD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CACjB,IAAY,EACZ,IAAa,EACb,UAGI,EAAE;QAEN,MAAM,EAAE,SAAS,GAAG,yBAAyB,EAAE,GAAG,OAAO,CAAA;QACzD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;QAE/D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,GAAG,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAA;gBAClE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;oBACrC,QAAQ,GAAI,OAA8B,CAAC,KAAK,IAAI,QAAQ,CAAA;gBAC9D,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YACpD,CAAC;YAED,MAAM,MAAM,GAAe,EAAE,CAAA;YAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;YACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;YACjC,IAAI,MAAM,GAAG,EAAE,CAAA;YACf,IAAI,YAAY,GAAG,EAAE,CAAA;YACrB,IAAI,WAAW,GAAG,EAAE,CAAA;YAEpB,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;oBAClC,OAAM;gBACR,CAAC;gBAED,MAAM,KAAK,GAAa;oBACtB,KAAK,EAAE,YAAY,IAAI,SAAS;oBAChC,IAAI,EAAE,WAAW;iBAClB,CAAA;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAClB,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;gBACxB,YAAY,GAAG,EAAE,CAAA;gBACjB,WAAW,GAAG,EAAE,CAAA;YAClB,CAAC,CAAA;YAED,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC3C,IAAI,IAAI;oBAAE,MAAK;gBAEf,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBAEtC,+BAA+B;gBAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAChC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA,CAAC,iCAAiC;gBAE5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;oBACrC,CAAC;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBACpC,+DAA+D;wBAC/D,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;oBACjE,CAAC;yBAAM,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC;wBACxD,UAAU,EAAE,CAAA;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAA;YAC1B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACtC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;oBACrC,CAAC;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBACpC,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;oBACjE,CAAC;yBAAM,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC;wBACxD,UAAU,EAAE,CAAA;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;YACD,UAAU,EAAE,CAAA;YAEZ,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI;oBACrF,0GAA0G,CAC3G,CAAA;YACH,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB,CAC7B,IAAa;QAKb,MAAM,KAAK,GAA+D,EAAE,CAAA;QAC5E,IAAI,YAAY,GAAkB,IAAI,CAAA;QAEtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CACrC,8CAA8C,EAC9C,IAAI,EACJ,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAC9C,CAAA;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACnC,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;oBACtB,IAAI,IAAI,EAAE,UAAU,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC;4BACT,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;4BACvB,IAAI,EAAE,IAAI,CAAC,IAAI;yBAChB,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBACtC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAA;gBAC1C,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAA;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,WAAW;oBAAE,SAAQ,CAAC,4BAA4B;gBACnE,MAAM,CAAC,CAAA;YACT,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAA;YACnE,IAAI,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;gBACvC,OAAO;oBACL,YAAY;oBACZ,KAAK,EAAE,UAAU,CAAC,cAAc;yBAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC;yBACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACd,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;wBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;qBAChB,CAAC,CAAC;iBACN,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,IAAa;QAEb,IAAI,IAAI,GAAG,EAAE,CAAA;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CACrC,kCAAkC,EAClC,IAAI,EACJ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAC1C,CAAA;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACnC,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;oBACtB,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;wBACf,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;oBAClB,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAA;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,YAAY,WAAW;oBAAE,SAAQ;gBACtC,MAAM,CAAC,CAAA;YACT,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACtD,OAAO,EAAE,IAAI,EAAE,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,YAAoB;QAIpB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,oCAAoC,YAAY,EAAE,EAAE;YAC9F,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACxC,QAAQ,EAAE,kBAAkB;aAC7B;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAIlC,CAAA;QAED,OAAO,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;IAC7B,CAAC;CACF"}
package/dist/server.d.ts CHANGED
@@ -5,10 +5,15 @@
5
5
  * - Carousel (카드뉴스): 8 tools
6
6
  * - Shorts (숏츠): 9 tools
7
7
  * - Blog (블로그): 4 tools
8
- * - Publishing (예약발행): 6 tools
8
+ * - Content Ideation (대량기획): 4 tools
9
+ * - Persona Helper (페르소나): 5 tools
10
+ * - Publishing (예약발행)
9
11
  * - Analytics (데이터분석): 5 tools
10
12
  */
11
13
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
14
  import type { MirraConfig } from './types/index.js';
13
- export declare function createMirraServer(config: MirraConfig): McpServer;
15
+ export interface MirraServerOptions {
16
+ enableLocalFileTools?: boolean;
17
+ }
18
+ export declare function createMirraServer(config: MirraConfig, options?: MirraServerOptions): McpServer;
14
19
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AASnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAYnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAoBhE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAWnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAcnD,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB,GAAG,SAAS,CAwBlG"}
package/dist/server.js CHANGED
@@ -5,7 +5,9 @@
5
5
  * - Carousel (카드뉴스): 8 tools
6
6
  * - Shorts (숏츠): 9 tools
7
7
  * - Blog (블로그): 4 tools
8
- * - Publishing (예약발행): 6 tools
8
+ * - Content Ideation (대량기획): 4 tools
9
+ * - Persona Helper (페르소나): 5 tools
10
+ * - Publishing (예약발행)
9
11
  * - Analytics (데이터분석): 5 tools
10
12
  */
11
13
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
@@ -14,6 +16,8 @@ import { SSEClient } from './client/sse-client.js';
14
16
  import { registerCarouselTools } from './tools/carousel.js';
15
17
  import { registerShortsTools } from './tools/shorts.js';
16
18
  import { registerBlogTools } from './tools/blog.js';
19
+ import { registerContentIdeationTools } from './tools/content-ideation.js';
20
+ import { registerPersonaTools } from './tools/persona.js';
17
21
  import { registerPublishingTools } from './tools/publishing.js';
18
22
  import { registerAnalyticsTools } from './tools/analytics.js';
19
23
  import { registerDmAutomationTools } from './tools/dm-automation.js';
@@ -25,8 +29,10 @@ const MIRRA_SERVER_INSTRUCTIONS = [
25
29
  'For carousel editing, use /{locale}/carousel-lab/create/{generationId}.',
26
30
  'For shorts editing, use /{locale}/shorts-lab/create/{generationId}.',
27
31
  'For longform blog editing, use /{locale}/ai/longform/{longformId}.',
32
+ 'For bulk idea planning and generated social post drafts, use /{locale}/ai/bulk-generate.',
33
+ 'For social-account persona settings, helper analysis, and knowledge-base review, use /{locale}/social-accounts/{accountId}.',
28
34
  ].join('\n');
29
- export function createMirraServer(config) {
35
+ export function createMirraServer(config, options = {}) {
30
36
  const server = new McpServer({
31
37
  name: 'mirra',
32
38
  version: '0.1.0',
@@ -39,7 +45,11 @@ export function createMirraServer(config) {
39
45
  registerCarouselTools(server, api, sse);
40
46
  registerShortsTools(server, api);
41
47
  registerBlogTools(server, api);
42
- registerPublishingTools(server, api);
48
+ registerContentIdeationTools(server, api);
49
+ registerPersonaTools(server, api);
50
+ registerPublishingTools(server, api, {
51
+ enableMediaUpload: options.enableLocalFileTools ?? true,
52
+ });
43
53
  registerAnalyticsTools(server, api);
44
54
  registerDmAutomationTools(server, api);
45
55
  return server;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAGpE,MAAM,yBAAyB,GAAG;IAChC,6FAA6F;IAC7F,gHAAgH;IAChH,sHAAsH;IACtH,iEAAiE;IACjE,yEAAyE;IACzE,qEAAqE;IACrE,oEAAoE;CACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB,EAAE;QACD,YAAY,EAAE,yBAAyB;KACxC,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;IAEjC,qBAAqB;IACrB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACvC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEtC,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAGpE,MAAM,yBAAyB,GAAG;IAChC,6FAA6F;IAC7F,gHAAgH;IAChH,sHAAsH;IACtH,iEAAiE;IACjE,yEAAyE;IACzE,qEAAqE;IACrE,oEAAoE;IACpE,0FAA0F;IAC1F,6HAA6H;CAC9H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAMZ,MAAM,UAAU,iBAAiB,CAAC,MAAmB,EAAE,UAA8B,EAAE;IACrF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB,EAAE;QACD,YAAY,EAAE,yBAAyB;KACxC,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;IAEjC,qBAAqB;IACrB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACvC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,4BAA4B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE;QACnC,iBAAiB,EAAE,OAAO,CAAC,oBAAoB,IAAI,IAAI;KACxD,CAAC,CAAA;IACF,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEtC,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-contracts.d.ts","sourceRoot":"","sources":["../src/tool-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,OAAO,CAAA;AAEtI,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,CAAC,CAAC,YAAY,CAAA;CACvB;AAgCD,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EAgoBzD,CAAA;AAMD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,wBAQnD"}
1
+ {"version":3,"file":"tool-contracts.d.ts","sourceRoot":"","sources":["../src/tool-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,OAAO,CAAA;AAEtI,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,CAAC,CAAC,YAAY,CAAA;CACvB;AAwDD,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EA+uBzD,CAAA;AAMD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,wBAQnD"}
@@ -23,6 +23,30 @@ const instagramOptionsSchema = z.object({
23
23
  locationName: z.string().nullable().optional().describe('Location display name for UI reference'),
24
24
  firstComment: z.string().nullable().optional().describe('First comment to publish after Instagram media publish'),
25
25
  }).optional().describe('Instagram-specific publish options.');
26
+ const contentIdeaStatusSchema = z.enum(['pending', 'generated', 'completed', 'rejected']);
27
+ const contentPipelineStyleSchema = z.enum([
28
+ 'experiential',
29
+ 'informational',
30
+ 'informational_internal',
31
+ 'informational_trend',
32
+ 'promotional',
33
+ 'interactive',
34
+ 'personal',
35
+ 'announcement',
36
+ ]).or(z.string());
37
+ const personaContentLengthSchema = z.enum(['extra-short', 'short', 'medium', 'long', 'extra-long']);
38
+ const personaPlatformSchema = z.enum(['threads', 'instagram', 'instagram_fb', 'twitter']);
39
+ const personaMixSourceSchema = z.object({
40
+ platform: personaPlatformSchema.optional().describe('Platform to benchmark. Required with handle for account-based sources.'),
41
+ handle: z.string().min(1).optional().describe('Public account handle to benchmark. Required with platform for account-based sources.'),
42
+ manualPosts: z.array(z.string().min(1)).min(3).optional().describe('At least three example posts for a manual source.'),
43
+ preAnalyzed: z.object({
44
+ concept: z.string().min(1),
45
+ targetAudience: z.string().min(1),
46
+ writingStyle: z.string().optional(),
47
+ }).optional().describe('Already analyzed persona source.'),
48
+ label: z.string().optional().describe('Optional human-readable label for this source.'),
49
+ });
26
50
  const platformPublishFieldsSchema = {
27
51
  videoThumbnails: z.array(z.string().url()).optional().describe('Custom video thumbnail image URLs. Instagram Reels uses the first URL as cover_url; YouTube also uses the first URL.'),
28
52
  tiktokOptions: tiktokOptionsSchema,
@@ -69,6 +93,70 @@ export const SHARED_TOOL_DEFINITIONS = [
69
93
  verbose: z.preprocess((v) => (typeof v === 'string' ? v === 'true' : v), z.boolean().default(false)).describe('Return full profile (writingStyle, userPrompt, tokens). Default false returns only id/username/platform/displayName.'),
70
94
  }),
71
95
  },
96
+ {
97
+ name: 'persona_get',
98
+ description: 'Get the current persona/settings for a connected social account, optionally including persona-helper knowledge-base data.',
99
+ category: 'social',
100
+ schema: z.object({
101
+ accountId: z.string().min(1).describe('Social account ID'),
102
+ includeKnowledge: z.boolean().default(true).describe('Also return knowledge-base/persona learning records for this account'),
103
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
104
+ }),
105
+ },
106
+ {
107
+ name: 'persona_update',
108
+ description: 'Directly overwrite persona settings for a connected social account. Uses the same account settings API as the app.',
109
+ category: 'social',
110
+ schema: z.object({
111
+ accountId: z.string().min(1).describe('Social account ID'),
112
+ concept: z.string().nullable().optional().describe('Account persona concept'),
113
+ targetAudience: z.string().nullable().optional().describe('Target audience'),
114
+ language: z.string().optional().describe('Output/persona language label'),
115
+ contentLength: personaContentLengthSchema.optional().describe('Default content length'),
116
+ referencePosts: z.array(z.string()).nullable().optional().describe('Reference post examples used by generation'),
117
+ userPrompt: z.string().nullable().optional().describe('Extra generation instructions'),
118
+ writingStyle: z.string().nullable().optional().describe('Writing style/persona voice'),
119
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
120
+ }),
121
+ },
122
+ {
123
+ name: 'persona_own_posts',
124
+ description: 'Analyze the current account’s own historical posts using the persona helper. This mirrors the app helper and does not decrement quota.',
125
+ category: 'social',
126
+ schema: z.object({
127
+ accountId: z.string().min(1).describe('Social account ID'),
128
+ apply: z.boolean().default(false).describe('Apply the analyzed persona to account settings after analysis'),
129
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
130
+ }),
131
+ },
132
+ {
133
+ name: 'persona_copy',
134
+ description: 'Benchmark/copy a persona from a public account or manual example posts using the persona helper. Uses the same quota path as the app helper.',
135
+ category: 'social',
136
+ schema: z.object({
137
+ accountId: z.string().min(1).describe('Social account ID'),
138
+ platform: personaPlatformSchema.optional().describe('Benchmark source platform. Required with handle for account-based benchmarking.'),
139
+ handle: z.string().min(1).optional().describe('Public handle to benchmark. Required with platform for account-based benchmarking.'),
140
+ manualPosts: z.array(z.string().min(1)).min(3).optional().describe('At least three posts to benchmark manually instead of platform/handle.'),
141
+ disclaimerAccepted: z.boolean().default(true).describe('Must be true to confirm the helper disclaimer for public/manual persona benchmarking.'),
142
+ apply: z.boolean().default(false).describe('Apply the generated persona to account settings after benchmarking'),
143
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
144
+ }),
145
+ },
146
+ {
147
+ name: 'persona_mix',
148
+ description: 'Mix 2-3 persona sources through the persona helper. Uses the same final mix quota path as the app helper.',
149
+ category: 'social',
150
+ schema: z.object({
151
+ accountId: z.string().min(1).describe('Social account ID'),
152
+ sources: z.array(personaMixSourceSchema).min(2).max(3).describe('Two or three account, manual-post, or pre-analyzed persona sources'),
153
+ mixStrategy: z.enum(['balanced', 'primary_enhanced', 'best_of_each', 'creative_fusion']).default('balanced'),
154
+ userGuidance: z.string().optional().describe('Optional direction for how the sources should be combined'),
155
+ disclaimerAccepted: z.boolean().default(true).describe('Must be true to confirm the helper disclaimer for persona mixing.'),
156
+ apply: z.boolean().default(false).describe('Apply the mixed persona to account settings after generation'),
157
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
158
+ }),
159
+ },
72
160
  {
73
161
  name: 'post_create',
74
162
  description: 'Create a new post draft. Supports text, images, and videos for any connected social platform.',
@@ -178,7 +266,7 @@ export const SHARED_TOOL_DEFINITIONS = [
178
266
  schema: z.object({
179
267
  content: z.string().describe('Topic or content to generate carousel from'),
180
268
  aspectRatio: z.enum(['1:1', '4:5', '16:9', '9:16', '3:4']).default('1:1').describe('Aspect ratio'),
181
- slideCount: z.number().min(2).max(15).default(5).describe('Number of slides'),
269
+ slideCount: z.number().min(1).max(10).default(5).describe('Number of slides'),
182
270
  mode: z.enum(['follow', 'creative']).default('creative').describe('Generation mode: follow (structured) or creative (freeform)'),
183
271
  outputLanguage: z.enum(OUTPUT_LANGUAGE_CODES).default('auto').describe('Output language code. Use auto to detect from input (auto, ko, en, ja, zh, es, fr, de, pt, ar).'),
184
272
  presetId: z.string().optional().describe('Preset template ID. If omitted, auto-selected from system presets by keyword matching.'),
@@ -441,6 +529,53 @@ export const SHARED_TOOL_DEFINITIONS = [
441
529
  locale: z.string().default('en').describe('Editor UI language (en, ko, ja, etc.)'),
442
530
  }),
443
531
  },
532
+ {
533
+ name: 'content_ideas_generate',
534
+ description: 'Generate content ideas using the same AI idea generation flow as the /ai/bulk-generate page. Supports one or more pipeline styles and returns stored idea IDs.',
535
+ category: 'content',
536
+ schema: z.object({
537
+ accountId: z.string().uuid().describe('Connected social account ID to generate ideas for'),
538
+ pipelines: z.array(contentPipelineStyleSchema).min(1).max(6).default(['experiential']).describe('Bulk-generate pipeline styles to run. Common values: experiential, informational, informational_internal, informational_trend, promotional, interactive.'),
539
+ ideasPerPipeline: z.number().int().min(1).max(10).default(5).describe('Number of ideas to create per pipeline style'),
540
+ searchInput: z.string().optional().describe('Optional search/topic input. Used by informational-style pipelines for external/trend context.'),
541
+ selectedKnowledgeIds: z.array(z.string().uuid()).optional().describe('Optional internal knowledge IDs to use as context'),
542
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
543
+ }),
544
+ },
545
+ {
546
+ name: 'content_ideas_list',
547
+ description: 'List ideas from the bulk-generate board, including generated draft content when present. Use this to inspect pending/generated/completed/rejected planning state.',
548
+ category: 'content',
549
+ schema: z.object({
550
+ accountId: z.string().uuid().optional().describe('Filter by connected social account ID'),
551
+ status: contentIdeaStatusSchema.optional().describe('Filter by idea status'),
552
+ dateFrom: z.string().datetime().optional().describe('ISO 8601 datetime lower bound for idea creation'),
553
+ dateTo: z.string().datetime().optional().describe('ISO 8601 datetime upper bound for idea creation'),
554
+ page: z.number().int().min(1).default(1).describe('Page number'),
555
+ limit: z.number().int().min(1).max(100).default(50).describe('Number of ideas to return'),
556
+ locale: z.string().default('en').describe('Dashboard UI language for returned URL (en, ko, ja, etc.)'),
557
+ }),
558
+ },
559
+ {
560
+ name: 'content_idea_get',
561
+ description: 'Get one bulk-generate idea with its generated main post body, reply/subcomment parts, linked account, knowledge usage, and linked post info when available.',
562
+ category: 'content',
563
+ schema: z.object({
564
+ ideaId: z.string().uuid().describe('Content idea ID'),
565
+ locale: z.string().default('en').describe('Dashboard UI language for returned URLs (en, ko, ja, etc.)'),
566
+ }),
567
+ },
568
+ {
569
+ name: 'content_ideas_generate_drafts',
570
+ description: 'Generate post-copy drafts from one or more bulk-generate ideas. Returns the exact mainContent and replyParts that the page shows under each generated idea; optionally persists those drafts as Mirra post drafts.',
571
+ category: 'content',
572
+ schema: z.object({
573
+ ideaIds: z.array(z.string().uuid()).min(1).max(20).describe('Idea IDs to convert into generated post-copy drafts'),
574
+ concurrency: z.number().int().min(1).max(5).default(3).describe('How many idea-to-content generations to run at once'),
575
+ createPostDrafts: z.boolean().default(false).describe('Also create Mirra post drafts from the generated mainContent and replyParts. This may fail for media-required platforms such as Instagram, TikTok, or YouTube unless media is added later.'),
576
+ locale: z.string().default('en').describe('Dashboard UI language for returned URLs (en, ko, ja, etc.)'),
577
+ }),
578
+ },
444
579
  {
445
580
  name: 'analytics_posts_performance',
446
581
  description: 'Get posts performance metrics with optional period comparison (views, likes, replies, reposts, etc.). Default response is slim — use summaryOnly=false, detailLevel=full to get raw data.',