medusa-plugin-mcp 0.1.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/.medusa/server/medusa-config.d.ts +1 -0
- package/.medusa/server/medusa-config.js +23 -0
- package/.medusa/server/src/admin/index.js +192 -0
- package/.medusa/server/src/admin/index.mjs +191 -0
- package/.medusa/server/src/api/admin/chat/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/chat/route.js +102 -0
- package/.medusa/server/src/api/admin/mcp/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/mcp/route.js +60 -0
- package/.medusa/server/src/api/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/middlewares.js +24 -0
- package/.medusa/server/src/api/validators.d.ts +24 -0
- package/.medusa/server/src/api/validators.js +11 -0
- package/.medusa/server/src/lib/llm-provider.d.ts +32 -0
- package/.medusa/server/src/lib/llm-provider.js +22 -0
- package/.medusa/server/src/lib/providers/anthropic.d.ts +11 -0
- package/.medusa/server/src/lib/providers/anthropic.js +53 -0
- package/.medusa/server/src/lib/providers/ollama.d.ts +11 -0
- package/.medusa/server/src/lib/providers/ollama.js +39 -0
- package/.medusa/server/src/lib/providers/openai.d.ts +12 -0
- package/.medusa/server/src/lib/providers/openai.js +49 -0
- package/.medusa/server/src/mcp/server.d.ts +3 -0
- package/.medusa/server/src/mcp/server.js +42 -0
- package/.medusa/server/src/mcp/tools/automations.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/automations.js +176 -0
- package/.medusa/server/src/mcp/tools/customers.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/customers.js +72 -0
- package/.medusa/server/src/mcp/tools/inventory.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/inventory.js +70 -0
- package/.medusa/server/src/mcp/tools/orders.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/orders.js +80 -0
- package/.medusa/server/src/mcp/tools/products.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/products.js +72 -0
- package/.medusa/server/src/mcp/tools/query.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/query.js +42 -0
- package/.medusa/server/src/mcp/tools/statistics.d.ts +3 -0
- package/.medusa/server/src/mcp/tools/statistics.js +10 -0
- package/.medusa/server/src/modules/mcp/index.d.ts +7 -0
- package/.medusa/server/src/modules/mcp/index.js +25 -0
- package/.medusa/server/src/modules/mcp/service.d.ts +8 -0
- package/.medusa/server/src/modules/mcp/service.js +15 -0
- package/.medusa/server/src/types.d.ts +7 -0
- package/.medusa/server/src/types.js +3 -0
- package/LICENSE.md +73 -0
- package/package.json +98 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type ChatMessage = {
|
|
2
|
+
role: 'user' | 'assistant';
|
|
3
|
+
content: string;
|
|
4
|
+
};
|
|
5
|
+
export type ToolDefinition = {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type ToolCall = {
|
|
11
|
+
name: string;
|
|
12
|
+
args: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
export type LlmResponse = {
|
|
15
|
+
content: string;
|
|
16
|
+
toolCalls: ToolCall[];
|
|
17
|
+
};
|
|
18
|
+
export interface LlmProvider {
|
|
19
|
+
/**
|
|
20
|
+
* Send a single turn to the LLM. If the LLM wants to call tools,
|
|
21
|
+
* return the tool calls in the response. The caller handles
|
|
22
|
+
* the tool-use loop.
|
|
23
|
+
*/
|
|
24
|
+
chat(params: {
|
|
25
|
+
messages: ChatMessage[];
|
|
26
|
+
tools: ToolDefinition[];
|
|
27
|
+
systemPrompt: string;
|
|
28
|
+
}): Promise<LlmResponse>;
|
|
29
|
+
}
|
|
30
|
+
import type { McpPluginOptions } from '../types';
|
|
31
|
+
export type { McpPluginOptions };
|
|
32
|
+
export declare function createProvider(options: McpPluginOptions): LlmProvider;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createProvider = createProvider;
|
|
4
|
+
function createProvider(options) {
|
|
5
|
+
switch (options.provider) {
|
|
6
|
+
case 'anthropic': {
|
|
7
|
+
const { AnthropicProvider } = require('./providers/anthropic');
|
|
8
|
+
return new AnthropicProvider(options.model, options.apiKey, options.baseUrl);
|
|
9
|
+
}
|
|
10
|
+
case 'openai': {
|
|
11
|
+
const { OpenAiProvider } = require('./providers/openai');
|
|
12
|
+
return new OpenAiProvider(options.model, options.apiKey, options.baseUrl);
|
|
13
|
+
}
|
|
14
|
+
case 'ollama': {
|
|
15
|
+
const { OllamaProvider } = require('./providers/ollama');
|
|
16
|
+
return new OllamaProvider(options.model, options.baseUrl);
|
|
17
|
+
}
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Unknown LLM provider: ${options.provider}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9sbG0tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFxQ0Esd0NBaUJDO0FBakJELFNBQWdCLGNBQWMsQ0FBQyxPQUF5QjtJQUN2RCxRQUFRLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUE7WUFDOUQsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsQ0FBQztRQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNmLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtZQUN4RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0UsQ0FBQztRQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNmLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtZQUN4RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzFELENBQUM7UUFDRDtZQUNDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzlELENBQUM7QUFDRixDQUFDIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LlmProvider, ChatMessage, ToolDefinition, LlmResponse } from '../llm-provider';
|
|
2
|
+
export declare class AnthropicProvider implements LlmProvider {
|
|
3
|
+
private model;
|
|
4
|
+
private client;
|
|
5
|
+
constructor(model: string, apiKey: string, baseUrl?: string);
|
|
6
|
+
chat(params: {
|
|
7
|
+
messages: ChatMessage[];
|
|
8
|
+
tools: ToolDefinition[];
|
|
9
|
+
systemPrompt: string;
|
|
10
|
+
}): Promise<LlmResponse>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AnthropicProvider = void 0;
|
|
7
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
8
|
+
class AnthropicProvider {
|
|
9
|
+
constructor(model, apiKey, baseUrl) {
|
|
10
|
+
this.model = model;
|
|
11
|
+
this.client = new sdk_1.default({
|
|
12
|
+
apiKey,
|
|
13
|
+
...(baseUrl ? { baseURL: baseUrl } : {})
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async chat(params) {
|
|
17
|
+
const tools = params.tools.map(t => ({
|
|
18
|
+
name: t.name,
|
|
19
|
+
description: t.description,
|
|
20
|
+
input_schema: t.inputSchema
|
|
21
|
+
}));
|
|
22
|
+
const messages = params.messages.map(m => ({
|
|
23
|
+
role: m.role,
|
|
24
|
+
content: m.content
|
|
25
|
+
}));
|
|
26
|
+
const response = await this.client.messages.create({
|
|
27
|
+
model: this.model,
|
|
28
|
+
max_tokens: 4096,
|
|
29
|
+
system: params.systemPrompt,
|
|
30
|
+
messages,
|
|
31
|
+
...(tools.length > 0 ? { tools } : {})
|
|
32
|
+
});
|
|
33
|
+
const textParts = [];
|
|
34
|
+
const toolCalls = [];
|
|
35
|
+
for (const block of response.content) {
|
|
36
|
+
if (block.type === 'text') {
|
|
37
|
+
textParts.push(block.text);
|
|
38
|
+
}
|
|
39
|
+
else if (block.type === 'tool_use') {
|
|
40
|
+
toolCalls.push({
|
|
41
|
+
name: block.name,
|
|
42
|
+
args: block.input
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
content: textParts.join(''),
|
|
48
|
+
toolCalls
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.AnthropicProvider = AnthropicProvider;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9wcm92aWRlcnMvYW50aHJvcGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDREQUF5QztBQUd6QyxNQUFhLGlCQUFpQjtJQUc3QixZQUNTLEtBQWEsRUFDckIsTUFBYyxFQUNkLE9BQWdCO1FBRlIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUlyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksYUFBUyxDQUFDO1lBQzNCLE1BQU07WUFDTixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3hDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BSVY7UUFDQSxNQUFNLEtBQUssR0FBcUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztZQUMxQixZQUFZLEVBQUUsQ0FBQyxDQUFDLFdBQXlDO1NBQ3pELENBQUMsQ0FBQyxDQUFBO1FBRUgsTUFBTSxRQUFRLEdBQTZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87U0FDbEIsQ0FBQyxDQUFDLENBQUE7UUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNsRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsVUFBVSxFQUFFLElBQUk7WUFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQzNCLFFBQVE7WUFDUixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN0QyxDQUFDLENBQUE7UUFFRixNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUE7UUFDOUIsTUFBTSxTQUFTLEdBQWUsRUFBRSxDQUFBO1FBRWhDLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO29CQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQWdDO2lCQUM1QyxDQUFDLENBQUE7WUFDSCxDQUFDO1FBQ0YsQ0FBQztRQUVELE9BQU87WUFDTixPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IsU0FBUztTQUNULENBQUE7SUFDRixDQUFDO0NBQ0Q7QUF6REQsOENBeURDIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LlmProvider, ChatMessage, ToolDefinition, LlmResponse } from '../llm-provider';
|
|
2
|
+
export declare class OllamaProvider implements LlmProvider {
|
|
3
|
+
private model;
|
|
4
|
+
private client;
|
|
5
|
+
constructor(model: string, baseUrl?: string);
|
|
6
|
+
chat(params: {
|
|
7
|
+
messages: ChatMessage[];
|
|
8
|
+
tools: ToolDefinition[];
|
|
9
|
+
systemPrompt: string;
|
|
10
|
+
}): Promise<LlmResponse>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OllamaProvider = void 0;
|
|
4
|
+
const ollama_1 = require("ollama");
|
|
5
|
+
class OllamaProvider {
|
|
6
|
+
constructor(model, baseUrl) {
|
|
7
|
+
this.model = model;
|
|
8
|
+
this.client = new ollama_1.Ollama(baseUrl ? { host: baseUrl } : undefined);
|
|
9
|
+
}
|
|
10
|
+
async chat(params) {
|
|
11
|
+
const messages = [
|
|
12
|
+
{ role: 'system', content: params.systemPrompt },
|
|
13
|
+
...params.messages
|
|
14
|
+
];
|
|
15
|
+
const tools = params.tools.map(t => ({
|
|
16
|
+
type: 'function',
|
|
17
|
+
function: {
|
|
18
|
+
name: t.name,
|
|
19
|
+
description: t.description,
|
|
20
|
+
parameters: t.inputSchema
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
const response = await this.client.chat({
|
|
24
|
+
model: this.model,
|
|
25
|
+
messages,
|
|
26
|
+
...(tools.length > 0 ? { tools } : {})
|
|
27
|
+
});
|
|
28
|
+
const toolCalls = (response.message.tool_calls ?? []).map(tc => ({
|
|
29
|
+
name: tc.function.name,
|
|
30
|
+
args: tc.function.arguments
|
|
31
|
+
}));
|
|
32
|
+
return {
|
|
33
|
+
content: response.message.content ?? '',
|
|
34
|
+
toolCalls
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.OllamaProvider = OllamaProvider;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2xsYW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9wcm92aWRlcnMvb2xsYW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUErQjtBQUcvQixNQUFhLGNBQWM7SUFHMUIsWUFDUyxLQUFhLEVBQ3JCLE9BQWdCO1FBRFIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUdyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BSVY7UUFDQSxNQUFNLFFBQVEsR0FBNkM7WUFDMUQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ2hELEdBQUcsTUFBTSxDQUFDLFFBQVE7U0FDbEIsQ0FBQTtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQyxJQUFJLEVBQUUsVUFBbUI7WUFDekIsUUFBUSxFQUFFO2dCQUNULElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDWixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7Z0JBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsV0FBVzthQUN6QjtTQUNELENBQUMsQ0FBQyxDQUFBO1FBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN2QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3RDLENBQUMsQ0FBQTtRQUVGLE1BQU0sU0FBUyxHQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ3RCLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQW9DO1NBQ3RELENBQUMsQ0FBQyxDQUFBO1FBRUgsT0FBTztZQUNOLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQ3ZDLFNBQVM7U0FDVCxDQUFBO0lBQ0YsQ0FBQztDQUNEO0FBN0NELHdDQTZDQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import type { LlmProvider, ChatMessage, ToolDefinition, LlmResponse } from '../llm-provider';
|
|
3
|
+
export declare class OpenAiProvider implements LlmProvider {
|
|
4
|
+
protected model: string;
|
|
5
|
+
protected client: OpenAI;
|
|
6
|
+
constructor(model: string, apiKey: string, baseUrl?: string);
|
|
7
|
+
chat(params: {
|
|
8
|
+
messages: ChatMessage[];
|
|
9
|
+
tools: ToolDefinition[];
|
|
10
|
+
systemPrompt: string;
|
|
11
|
+
}): Promise<LlmResponse>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OpenAiProvider = void 0;
|
|
7
|
+
const openai_1 = __importDefault(require("openai"));
|
|
8
|
+
class OpenAiProvider {
|
|
9
|
+
constructor(model, apiKey, baseUrl) {
|
|
10
|
+
this.model = model;
|
|
11
|
+
this.client = new openai_1.default({
|
|
12
|
+
apiKey,
|
|
13
|
+
...(baseUrl ? { baseURL: baseUrl } : {})
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async chat(params) {
|
|
17
|
+
const tools = params.tools.map(t => ({
|
|
18
|
+
type: 'function',
|
|
19
|
+
function: {
|
|
20
|
+
name: t.name,
|
|
21
|
+
description: t.description,
|
|
22
|
+
parameters: t.inputSchema
|
|
23
|
+
}
|
|
24
|
+
}));
|
|
25
|
+
const messages = [
|
|
26
|
+
{ role: 'system', content: params.systemPrompt },
|
|
27
|
+
...params.messages.map(m => ({
|
|
28
|
+
role: m.role,
|
|
29
|
+
content: m.content
|
|
30
|
+
}))
|
|
31
|
+
];
|
|
32
|
+
const response = await this.client.chat.completions.create({
|
|
33
|
+
model: this.model,
|
|
34
|
+
messages,
|
|
35
|
+
...(tools.length > 0 ? { tools } : {})
|
|
36
|
+
});
|
|
37
|
+
const choice = response.choices[0];
|
|
38
|
+
const toolCalls = (choice.message.tool_calls ?? []).map(tc => ({
|
|
39
|
+
name: tc.function.name,
|
|
40
|
+
args: JSON.parse(tc.function.arguments)
|
|
41
|
+
}));
|
|
42
|
+
return {
|
|
43
|
+
content: choice.message.content ?? '',
|
|
44
|
+
toolCalls
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.OpenAiProvider = OpenAiProvider;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9wcm92aWRlcnMvb3BlbmFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUEyQjtBQUczQixNQUFhLGNBQWM7SUFHMUIsWUFDVyxLQUFhLEVBQ3ZCLE1BQWMsRUFDZCxPQUFnQjtRQUZOLFVBQUssR0FBTCxLQUFLLENBQVE7UUFJdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGdCQUFNLENBQUM7WUFDeEIsTUFBTTtZQUNOLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDeEMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsTUFJVjtRQUNBLE1BQU0sS0FBSyxHQUFnQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxFQUFFLFVBQW1CO1lBQ3pCLFFBQVEsRUFBRTtnQkFDVCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO2dCQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFdBQVc7YUFDekI7U0FDRCxDQUFDLENBQUMsQ0FBQTtRQUVILE1BQU0sUUFBUSxHQUF3QztZQUNyRCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDaEQsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBNEI7Z0JBQ3BDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTzthQUNsQixDQUFDLENBQUM7U0FDSCxDQUFBO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixRQUFRO1lBQ1IsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDdEMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQyxNQUFNLFNBQVMsR0FBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUN2QyxDQUFDLENBQUMsQ0FBQTtRQUVILE9BQU87WUFDTixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTtZQUNyQyxTQUFTO1NBQ1QsQ0FBQTtJQUNGLENBQUM7Q0FDRDtBQXJERCx3Q0FxREMifQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMcpServer = void 0;
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const query_1 = require("./tools/query");
|
|
6
|
+
const orders_1 = require("./tools/orders");
|
|
7
|
+
const customers_1 = require("./tools/customers");
|
|
8
|
+
const products_1 = require("./tools/products");
|
|
9
|
+
const inventory_1 = require("./tools/inventory");
|
|
10
|
+
const statistics_1 = require("./tools/statistics");
|
|
11
|
+
const automations_1 = require("./tools/automations");
|
|
12
|
+
const createMcpServer = async (scope) => {
|
|
13
|
+
const server = new mcp_js_1.McpServer({
|
|
14
|
+
name: 'medusa-admin',
|
|
15
|
+
version: '1.0.0'
|
|
16
|
+
});
|
|
17
|
+
// Core tools — always available (only need Medusa container query API)
|
|
18
|
+
(0, query_1.registerQueryTool)(server, scope);
|
|
19
|
+
(0, orders_1.registerOrderTools)(server, scope);
|
|
20
|
+
(0, customers_1.registerCustomerTools)(server, scope);
|
|
21
|
+
(0, products_1.registerProductTools)(server, scope);
|
|
22
|
+
(0, inventory_1.registerInventoryTools)(server, scope);
|
|
23
|
+
// Statistics tools — registered if medusa-plugin-statistics is installed
|
|
24
|
+
try {
|
|
25
|
+
const { STATISTICS_MODULE } = await import('medusa-plugin-statistics');
|
|
26
|
+
(0, statistics_1.registerStatisticsTools)(server, scope, STATISTICS_MODULE);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// package not installed — skip
|
|
30
|
+
}
|
|
31
|
+
// Automation tools — registered if medusa-plugin-automation is installed
|
|
32
|
+
try {
|
|
33
|
+
const { AUTOMATION_MODULE } = await import('medusa-plugin-automation');
|
|
34
|
+
(0, automations_1.registerAutomationTools)(server, scope, AUTOMATION_MODULE);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// package not installed — skip
|
|
38
|
+
}
|
|
39
|
+
return server;
|
|
40
|
+
};
|
|
41
|
+
exports.createMcpServer = createMcpServer;
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21jcC9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0VBQW1FO0FBRW5FLHlDQUFpRDtBQUNqRCwyQ0FBbUQ7QUFDbkQsaURBQXlEO0FBQ3pELCtDQUF1RDtBQUN2RCxpREFBMEQ7QUFDMUQsbURBQTREO0FBQzVELHFEQUE2RDtBQUV0RCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsS0FBc0IsRUFBc0IsRUFBRTtJQUNuRixNQUFNLE1BQU0sR0FBRyxJQUFJLGtCQUFTLENBQUM7UUFDNUIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsT0FBTyxFQUFFLE9BQU87S0FDaEIsQ0FBQyxDQUFBO0lBRUYsdUVBQXVFO0lBQ3ZFLElBQUEseUJBQWlCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLElBQUEsMkJBQWtCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2pDLElBQUEsaUNBQXFCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLElBQUEsK0JBQW9CLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ25DLElBQUEsa0NBQXNCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRXJDLHlFQUF5RTtJQUN6RSxJQUFJLENBQUM7UUFDSixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQ3RFLElBQUEsb0NBQXVCLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUiwrQkFBK0I7SUFDaEMsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxJQUFJLENBQUM7UUFDSixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQ3RFLElBQUEscUNBQXVCLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUiwrQkFBK0I7SUFDaEMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2QsQ0FBQyxDQUFBO0FBOUJZLFFBQUEsZUFBZSxtQkE4QjNCIn0=
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAutomationTools = registerAutomationTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const dispatch_1 = require("medusa-plugin-automation/lib/dispatch");
|
|
6
|
+
function registerAutomationTools(server, scope, moduleKey) {
|
|
7
|
+
const automationService = scope.resolve(moduleKey);
|
|
8
|
+
server.registerTool('list_automations', {
|
|
9
|
+
description: 'List automation triggers with their status, type, and event configuration.',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
is_active: zod_1.z.boolean().optional().describe('Filter by active status'),
|
|
12
|
+
limit: zod_1.z.coerce.number().int().min(1).max(100).optional().default(20)
|
|
13
|
+
}
|
|
14
|
+
}, async ({ is_active, limit }) => {
|
|
15
|
+
const filters = {};
|
|
16
|
+
if (is_active !== undefined)
|
|
17
|
+
filters.is_active = is_active;
|
|
18
|
+
const [triggers, count] = await automationService.listAndCountAutomationTriggers(filters, { take: limit, order: { created_at: 'DESC' } });
|
|
19
|
+
return {
|
|
20
|
+
content: [{
|
|
21
|
+
type: 'text',
|
|
22
|
+
text: JSON.stringify({ triggers, count }, null, 2)
|
|
23
|
+
}]
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
server.registerTool('get_automation', {
|
|
27
|
+
description: 'Fetch a single automation trigger by ID with its actions.',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
trigger_id: zod_1.z.string().describe('The automation trigger ID')
|
|
30
|
+
}
|
|
31
|
+
}, async ({ trigger_id }) => {
|
|
32
|
+
const [trigger] = await automationService.listAutomationTriggers({ id: trigger_id }, { take: 1 });
|
|
33
|
+
if (!trigger) {
|
|
34
|
+
return { content: [{ type: 'text', text: 'Trigger not found.' }] };
|
|
35
|
+
}
|
|
36
|
+
const [actions] = await automationService.listAndCountAutomationActions({ trigger_id: trigger.id }, { take: 100 });
|
|
37
|
+
return {
|
|
38
|
+
content: [{
|
|
39
|
+
type: 'text',
|
|
40
|
+
text: JSON.stringify({ trigger, actions }, null, 2)
|
|
41
|
+
}]
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
server.registerTool('list_automation_deliveries', {
|
|
45
|
+
description: 'View delivery history for an automation action. Filter by status and date range.',
|
|
46
|
+
inputSchema: {
|
|
47
|
+
action_id: zod_1.z.string().describe('The automation action ID'),
|
|
48
|
+
status: zod_1.z.enum(['pending', 'success', 'failed']).optional().describe('Filter by delivery status'),
|
|
49
|
+
since: zod_1.z.string().optional().describe('Only include deliveries after this ISO date'),
|
|
50
|
+
until: zod_1.z.string().optional().describe('Only include deliveries before this ISO date'),
|
|
51
|
+
limit: zod_1.z.coerce.number().int().min(1).max(100).optional().default(20)
|
|
52
|
+
}
|
|
53
|
+
}, async ({ action_id, status, since, until, limit }) => {
|
|
54
|
+
const filters = { action_id };
|
|
55
|
+
if (status)
|
|
56
|
+
filters.status = status;
|
|
57
|
+
if (since || until) {
|
|
58
|
+
filters.created_at = {
|
|
59
|
+
...(since ? { $gte: new Date(since) } : {}),
|
|
60
|
+
...(until ? { $lte: new Date(until) } : {})
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const [deliveries, count] = await automationService.listAndCountAutomationDeliveries(filters, { take: limit, order: { created_at: 'DESC' } });
|
|
64
|
+
return {
|
|
65
|
+
content: [{
|
|
66
|
+
type: 'text',
|
|
67
|
+
text: JSON.stringify({ deliveries, count }, null, 2)
|
|
68
|
+
}]
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
server.registerTool('trigger_automation', {
|
|
72
|
+
description: 'Manually fire all active actions on an automation trigger with a given payload.',
|
|
73
|
+
inputSchema: {
|
|
74
|
+
trigger_id: zod_1.z.string().describe('The automation trigger ID'),
|
|
75
|
+
payload: zod_1.z.record(zod_1.z.unknown()).optional().default({}).describe('The payload to dispatch')
|
|
76
|
+
}
|
|
77
|
+
}, async ({ trigger_id, payload }) => {
|
|
78
|
+
const [trigger] = await automationService.listAutomationTriggers({ id: trigger_id }, { take: 1 });
|
|
79
|
+
if (!trigger) {
|
|
80
|
+
return { content: [{ type: 'text', text: 'Trigger not found.' }] };
|
|
81
|
+
}
|
|
82
|
+
const [actions] = await automationService.listAndCountAutomationActions({ trigger_id: trigger.id, is_active: true }, { take: 100 });
|
|
83
|
+
if (actions.length === 0) {
|
|
84
|
+
return { content: [{ type: 'text', text: 'No active actions on this trigger.' }] };
|
|
85
|
+
}
|
|
86
|
+
const results = await Promise.allSettled(actions.map((action) => (0, dispatch_1.dispatchAndRecord)(scope, action, payload, `mcp:trigger_automation`, {
|
|
87
|
+
signOutgoing: true,
|
|
88
|
+
maxWorkflowIterations: automationService.getOptions?.()?.maxWorkflowIterations
|
|
89
|
+
})));
|
|
90
|
+
const succeeded = results.filter(r => r.status === 'fulfilled' && r.value.status === 'success').length;
|
|
91
|
+
const failed = results.length - succeeded;
|
|
92
|
+
return {
|
|
93
|
+
content: [{
|
|
94
|
+
type: 'text',
|
|
95
|
+
text: JSON.stringify({
|
|
96
|
+
triggered: actions.length,
|
|
97
|
+
succeeded,
|
|
98
|
+
failed
|
|
99
|
+
}, null, 2)
|
|
100
|
+
}]
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
server.registerTool('retry_deliveries', {
|
|
104
|
+
description: 'Replay failed deliveries using their stored request payloads. Provide specific delivery IDs or filters to select which deliveries to retry.',
|
|
105
|
+
inputSchema: {
|
|
106
|
+
delivery_ids: zod_1.z.array(zod_1.z.string()).optional().describe('Specific delivery IDs to retry'),
|
|
107
|
+
action_id: zod_1.z.string().optional().describe('Filter by action ID (required when not using delivery_ids)'),
|
|
108
|
+
status: zod_1.z.enum(['pending', 'success', 'failed']).optional().describe('Filter by delivery status'),
|
|
109
|
+
since: zod_1.z.string().optional().describe('Only retry deliveries after this ISO date'),
|
|
110
|
+
until: zod_1.z.string().optional().describe('Only retry deliveries before this ISO date')
|
|
111
|
+
}
|
|
112
|
+
}, async ({ delivery_ids, action_id, status, since, until }) => {
|
|
113
|
+
let deliveries;
|
|
114
|
+
if (delivery_ids && delivery_ids.length > 0) {
|
|
115
|
+
;
|
|
116
|
+
[deliveries] = await automationService.listAndCountAutomationDeliveries({ id: delivery_ids }, { take: delivery_ids.length });
|
|
117
|
+
}
|
|
118
|
+
else if (action_id) {
|
|
119
|
+
const filters = { action_id };
|
|
120
|
+
if (status)
|
|
121
|
+
filters.status = status;
|
|
122
|
+
if (since || until) {
|
|
123
|
+
filters.created_at = {
|
|
124
|
+
...(since ? { $gte: new Date(since) } : {}),
|
|
125
|
+
...(until ? { $lte: new Date(until) } : {})
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
;
|
|
129
|
+
[deliveries] = await automationService.listAndCountAutomationDeliveries(filters, { take: 1000, order: { created_at: 'ASC' } });
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return {
|
|
133
|
+
content: [{
|
|
134
|
+
type: 'text',
|
|
135
|
+
text: 'Provide either delivery_ids or action_id to select deliveries to retry.'
|
|
136
|
+
}]
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (deliveries.length === 0) {
|
|
140
|
+
return { content: [{ type: 'text', text: 'No matching deliveries found.' }] };
|
|
141
|
+
}
|
|
142
|
+
// Group by action_id and fetch each action once
|
|
143
|
+
const actionIds = [...new Set(deliveries.map((d) => d.action_id))];
|
|
144
|
+
const actionMap = new Map();
|
|
145
|
+
for (const aid of actionIds) {
|
|
146
|
+
const [action] = await automationService.listAutomationActions({ id: aid }, { take: 1 });
|
|
147
|
+
if (action)
|
|
148
|
+
actionMap.set(aid, action);
|
|
149
|
+
}
|
|
150
|
+
let succeeded = 0;
|
|
151
|
+
let failed = 0;
|
|
152
|
+
for (const delivery of deliveries) {
|
|
153
|
+
const action = actionMap.get(delivery.action_id);
|
|
154
|
+
if (!action) {
|
|
155
|
+
failed++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const payload = delivery.request_payload ?? {};
|
|
159
|
+
const result = await (0, dispatch_1.dispatchAndRecord)(scope, action, payload, `retry:${delivery.event_name ?? 'unknown'}`, {
|
|
160
|
+
signOutgoing: true,
|
|
161
|
+
maxWorkflowIterations: automationService.getOptions?.()?.maxWorkflowIterations
|
|
162
|
+
});
|
|
163
|
+
if (result.status === 'success')
|
|
164
|
+
succeeded++;
|
|
165
|
+
else
|
|
166
|
+
failed++;
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
content: [{
|
|
170
|
+
type: 'text',
|
|
171
|
+
text: JSON.stringify({ retried: deliveries.length, succeeded, failed }, null, 2)
|
|
172
|
+
}]
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b21hdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2F1dG9tYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsMERBbVBDO0FBdFBELDZCQUF1QjtBQUN2QixvRUFBeUU7QUFFekUsU0FBZ0IsdUJBQXVCLENBQ3RDLE1BQWlCLEVBQ2pCLEtBQXNCLEVBQ3RCLFNBQWlCO0lBRWpCLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQVEsQ0FBQTtJQUV6RCxNQUFNLENBQUMsWUFBWSxDQUNsQixrQkFBa0IsRUFDbEI7UUFDQyxXQUFXLEVBQUUsNEVBQTRFO1FBQ3pGLFdBQVcsRUFBRTtZQUNaLFNBQVMsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO1lBQ3JFLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNyRTtLQUNELEVBQ0QsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDOUIsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQTtRQUMzQyxJQUFJLFNBQVMsS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFFMUQsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLGlCQUFpQixDQUFDLDhCQUE4QixDQUMvRSxPQUFPLEVBQ1AsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUM5QyxD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
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerCustomerTools = registerCustomerTools;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
function registerCustomerTools(server, scope) {
|
|
7
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
8
|
+
server.registerTool('search_customers', {
|
|
9
|
+
description: 'Search customers by email or name.',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
q: zod_1.z.string().describe('Search term (matches email, first_name, or last_name)'),
|
|
12
|
+
limit: zod_1.z.coerce.number().int().min(1).max(50).optional().default(10)
|
|
13
|
+
}
|
|
14
|
+
}, async ({ q, limit }) => {
|
|
15
|
+
const { data } = await query.graph({
|
|
16
|
+
entity: 'customer',
|
|
17
|
+
fields: [
|
|
18
|
+
'id',
|
|
19
|
+
'email',
|
|
20
|
+
'first_name',
|
|
21
|
+
'last_name',
|
|
22
|
+
'phone',
|
|
23
|
+
'has_account',
|
|
24
|
+
'created_at'
|
|
25
|
+
],
|
|
26
|
+
filters: {
|
|
27
|
+
$or: [
|
|
28
|
+
{ email: { $ilike: `%${q}%` } },
|
|
29
|
+
{ first_name: { $ilike: `%${q}%` } },
|
|
30
|
+
{ last_name: { $ilike: `%${q}%` } }
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
pagination: { take: limit }
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }]
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
server.registerTool('get_customer', {
|
|
40
|
+
description: 'Fetch a single customer by ID with their order history.',
|
|
41
|
+
inputSchema: {
|
|
42
|
+
customer_id: zod_1.z.string().describe('The customer ID')
|
|
43
|
+
}
|
|
44
|
+
}, async ({ customer_id }) => {
|
|
45
|
+
const { data: [customer] } = await query.graph({
|
|
46
|
+
entity: 'customer',
|
|
47
|
+
fields: [
|
|
48
|
+
'id',
|
|
49
|
+
'email',
|
|
50
|
+
'first_name',
|
|
51
|
+
'last_name',
|
|
52
|
+
'phone',
|
|
53
|
+
'has_account',
|
|
54
|
+
'orders.id',
|
|
55
|
+
'orders.display_id',
|
|
56
|
+
'orders.status',
|
|
57
|
+
'orders.total',
|
|
58
|
+
'orders.created_at',
|
|
59
|
+
'created_at',
|
|
60
|
+
'updated_at'
|
|
61
|
+
],
|
|
62
|
+
filters: { id: customer_id }
|
|
63
|
+
});
|
|
64
|
+
if (!customer) {
|
|
65
|
+
return { content: [{ type: 'text', text: 'Customer not found.' }] };
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
content: [{ type: 'text', text: JSON.stringify(customer, null, 2) }]
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21jcC90b29scy9jdXN0b21lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSxzREFnRkM7QUFuRkQscURBQXFFO0FBQ3JFLDZCQUF1QjtBQUV2QixTQUFnQixxQkFBcUIsQ0FBQyxNQUFpQixFQUFFLEtBQXNCO0lBQzlFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFNUQsTUFBTSxDQUFDLFlBQVksQ0FDbEIsa0JBQWtCLEVBQ2xCO1FBQ0MsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxXQUFXLEVBQUU7WUFDWixDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1REFBdUQsQ0FBQztZQUMvRSxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDcEU7S0FDRCxFQUNELEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDbEMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsTUFBTSxFQUFFO2dCQUNQLElBQUk7Z0JBQ0osT0FBTztnQkFDUCxZQUFZO2dCQUNaLFdBQVc7Z0JBQ1gsT0FBTztnQkFDUCxhQUFhO2dCQUNiLFlBQVk7YUFDWjtZQUNELE9BQU8sRUFBRTtnQkFDUixHQUFHLEVBQUU7b0JBQ0osRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUMvQixFQUFFLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3BDLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtpQkFDbkM7YUFDRDtZQUNELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7U0FDM0IsQ0FBQyxDQUFBO1FBRUYsT0FBTztZQUNOLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQWUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDekUsQ0FBQTtJQUNGLENBQUMsQ0FDRCxDQUFBO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FDbEIsY0FBYyxFQUNkO1FBQ0MsV0FBVyxFQUFFLHlEQUF5RDtRQUN0RSxXQUFXLEVBQUU7WUFDWixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztTQUNuRDtLQUNELEVBQ0QsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtRQUN6QixNQUFNLEVBQ0wsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQ2hCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLE1BQU0sRUFBRTtnQkFDUCxJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsWUFBWTtnQkFDWixXQUFXO2dCQUNYLE9BQU87Z0JBQ1AsYUFBYTtnQkFDYixXQUFXO2dCQUNYLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixjQUFjO2dCQUNkLG1CQUFtQjtnQkFDbkIsWUFBWTtnQkFDWixZQUFZO2FBQ1o7WUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFO1NBQzVCLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFlLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsRUFBRSxDQUFBO1FBQzdFLENBQUM7UUFFRCxPQUFPO1lBQ04sT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBZSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM3RSxDQUFBO0lBQ0YsQ0FBQyxDQUNELENBQUE7QUFDRixDQUFDIn0=
|