karrito-mcp 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +88 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -41,13 +41,99 @@ registerReviewTools(server, client);
|
|
|
41
41
|
registerCustomerTools(server, client);
|
|
42
42
|
registerStatsTools(server, client);
|
|
43
43
|
registerShippingTools(server, client);
|
|
44
|
+
// ─── ANSI Colors ───
|
|
45
|
+
const c = {
|
|
46
|
+
reset: '\x1b[0m',
|
|
47
|
+
bold: '\x1b[1m',
|
|
48
|
+
dim: '\x1b[2m',
|
|
49
|
+
green: '\x1b[38;2;16;185;129m', // emerald-500
|
|
50
|
+
greenBg: '\x1b[48;2;16;185;129m',
|
|
51
|
+
red: '\x1b[38;2;239;68;68m',
|
|
52
|
+
yellow: '\x1b[38;2;245;158;11m',
|
|
53
|
+
gray: '\x1b[38;2;148;163;184m',
|
|
54
|
+
white: '\x1b[37m',
|
|
55
|
+
cyan: '\x1b[36m',
|
|
56
|
+
};
|
|
57
|
+
function line(text) { console.error(text); }
|
|
58
|
+
function pad(str, len) { return str.padEnd(len); }
|
|
59
|
+
async function verifyConnection() {
|
|
60
|
+
if (!client.hasApiKey)
|
|
61
|
+
return { store: null, latency: 0, error: null };
|
|
62
|
+
const start = Date.now();
|
|
63
|
+
try {
|
|
64
|
+
const result = await client.getStore();
|
|
65
|
+
return { store: result.data, latency: Date.now() - start, error: null };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return { store: null, latency: Date.now() - start, error: err instanceof Error ? err.message : 'Unknown error' };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
44
71
|
// Connect via stdio
|
|
45
72
|
async function main() {
|
|
73
|
+
const hasKey = client.hasApiKey;
|
|
74
|
+
const apiKey = process.env.KARRITO_API_KEY ?? '';
|
|
75
|
+
const maskedKey = hasKey
|
|
76
|
+
? `${apiKey.slice(0, 8)}${'·'.repeat(8)}${apiKey.slice(-4)}`
|
|
77
|
+
: 'not configured';
|
|
78
|
+
// Verify connection if API key is present
|
|
79
|
+
const { store, latency, error } = await verifyConnection();
|
|
80
|
+
const VERSION = '2.0.1';
|
|
81
|
+
const TOOLS = 30;
|
|
82
|
+
const RESOURCES = 5;
|
|
83
|
+
line('');
|
|
84
|
+
line(` ${c.green}╔${'═'.repeat(51)}╗${c.reset}`);
|
|
85
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
86
|
+
line(` ${c.green}║${c.reset} ${c.bold}${c.green}🛒 Karrito MCP Server${c.reset} ${c.dim}v${VERSION}${c.reset} ${c.green}║${c.reset}`);
|
|
87
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
88
|
+
line(` ${c.green}║${c.reset} ${c.white}${TOOLS} tools${c.reset} ${c.dim}•${c.reset} ${c.white}${RESOURCES} resources${c.reset} ${c.green}║${c.reset}`);
|
|
89
|
+
line(` ${c.green}║${c.reset} ${c.dim}Manage your entire store from AI${c.reset} ${c.green}║${c.reset}`);
|
|
90
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
91
|
+
if (store) {
|
|
92
|
+
// Connected successfully — show store info
|
|
93
|
+
line(` ${c.green}╠${'═'.repeat(51)}╣${c.reset}`);
|
|
94
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
95
|
+
line(` ${c.green}║${c.reset} ${c.dim}Store${c.reset} ${c.bold}${c.white}${pad(store.name, 36)}${c.reset} ${c.green}║${c.reset}`);
|
|
96
|
+
line(` ${c.green}║${c.reset} ${c.dim}Plan${c.reset} ${pad(store.currency, 37)} ${c.green}║${c.reset}`);
|
|
97
|
+
line(` ${c.green}║${c.reset} ${c.dim}Products${c.reset} ${pad(`${store.productCount} active`, 37)} ${c.green}║${c.reset}`);
|
|
98
|
+
line(` ${c.green}║${c.reset} ${c.dim}Orders${c.reset} ${pad(`${store.orderCount} total`, 37)} ${c.green}║${c.reset}`);
|
|
99
|
+
line(` ${c.green}║${c.reset} ${c.dim}Status${c.reset} ${store.isPublished ? `${c.green}● Published${c.reset}` : `${c.yellow}○ Unpublished${c.reset}`}${' '.repeat(store.isPublished ? 26 : 24)} ${c.green}║${c.reset}`);
|
|
100
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
101
|
+
line(` ${c.green}╠${'═'.repeat(51)}╣${c.reset}`);
|
|
102
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
103
|
+
line(` ${c.green}║${c.reset} ${c.dim}API Key${c.reset} ${c.cyan}${pad(maskedKey, 37)}${c.reset} ${c.green}║${c.reset}`);
|
|
104
|
+
line(` ${c.green}║${c.reset} ${c.dim}Latency${c.reset} ${c.green}${pad(`${latency}ms`, 37)}${c.reset} ${c.green}║${c.reset}`);
|
|
105
|
+
line(` ${c.green}║${c.reset} ${c.dim}Status${c.reset} ${c.green}● Connected${c.reset} ${c.green}║${c.reset}`);
|
|
106
|
+
}
|
|
107
|
+
else if (hasKey && error) {
|
|
108
|
+
// API key set but connection failed
|
|
109
|
+
line(` ${c.green}╠${'═'.repeat(51)}╣${c.reset}`);
|
|
110
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
111
|
+
line(` ${c.green}║${c.reset} ${c.dim}API Key${c.reset} ${c.cyan}${pad(maskedKey, 37)}${c.reset} ${c.green}║${c.reset}`);
|
|
112
|
+
line(` ${c.green}║${c.reset} ${c.dim}Status${c.reset} ${c.red}✕ ${pad(error.slice(0, 35), 35)}${c.reset} ${c.green}║${c.reset}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// No API key — public mode
|
|
116
|
+
line(` ${c.green}╠${'═'.repeat(51)}╣${c.reset}`);
|
|
117
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
118
|
+
line(` ${c.green}║${c.reset} ${c.dim}API Key${c.reset} ${c.yellow}${pad('not configured', 37)}${c.reset} ${c.green}║${c.reset}`);
|
|
119
|
+
line(` ${c.green}║${c.reset} ${c.dim}Status${c.reset} ${c.yellow}○ Public only${c.reset} ${c.green}║${c.reset}`);
|
|
120
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
121
|
+
line(` ${c.green}║${c.reset} ${c.dim}Set KARRITO_API_KEY to unlock all 30 tools${c.reset} ${c.green}║${c.reset}`);
|
|
122
|
+
line(` ${c.green}║${c.reset} ${c.dim}Generate at: karrito.shop/admin/settings${c.reset} ${c.green}║${c.reset}`);
|
|
123
|
+
}
|
|
124
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
125
|
+
line(` ${c.green}╠${'═'.repeat(51)}╣${c.reset}`);
|
|
126
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
127
|
+
line(` ${c.green}║${c.reset} ${c.dim}Docs${c.reset} ${c.cyan}docs.karrito.shop${c.reset} ${c.green}║${c.reset}`);
|
|
128
|
+
line(` ${c.green}║${c.reset} ${c.dim}npm${c.reset} ${c.cyan}npmjs.com/package/karrito-mcp${c.reset} ${c.green}║${c.reset}`);
|
|
129
|
+
line(` ${c.green}║${c.reset} ${c.dim}GitHub${c.reset} ${c.cyan}github.com/curetcore/karrito-mcp${c.reset} ${c.green}║${c.reset}`);
|
|
130
|
+
line(` ${c.green}║${c.reset} ${c.green}║${c.reset}`);
|
|
131
|
+
line(` ${c.green}╚${'═'.repeat(51)}╝${c.reset}`);
|
|
132
|
+
line('');
|
|
46
133
|
const transport = new StdioServerTransport();
|
|
47
134
|
await server.connect(transport);
|
|
48
|
-
console.error('Karrito MCP Server running on stdio');
|
|
49
135
|
}
|
|
50
136
|
main().catch((error) => {
|
|
51
|
-
|
|
137
|
+
line(` ${c.red}✕ Fatal error:${c.reset} ${error}`);
|
|
52
138
|
process.exit(1);
|
|
53
139
|
});
|