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.
Files changed (2) hide show
  1. package/dist/index.js +88 -2
  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
- console.error('Fatal error:', error);
137
+ line(` ${c.red}✕ Fatal error:${c.reset} ${error}`);
52
138
  process.exit(1);
53
139
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karrito-mcp",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "MCP server for Karrito — digital catalog builder for WhatsApp sellers in LATAM",
5
5
  "bin": {
6
6
  "karrito-mcp": "./dist/index.js"