@wplaunchify/ml-mcp-server 2.7.2 → 2.7.4

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.
@@ -105,6 +105,50 @@ export const fluentCRMTools = [
105
105
  description: 'Delete a FluentCRM contact',
106
106
  inputSchema: { type: 'object', properties: z.object({ id: z.number() }).shape }
107
107
  },
108
+ // Contact Tag Management
109
+ {
110
+ name: 'fcrm_get_contact_tags',
111
+ description: 'Get all tags attached to a FluentCRM contact',
112
+ inputSchema: { type: 'object', properties: z.object({ id: z.number() }).shape }
113
+ },
114
+ {
115
+ name: 'fcrm_attach_tags',
116
+ description: 'Attach tags to an existing FluentCRM contact',
117
+ inputSchema: { type: 'object', properties: z.object({
118
+ id: z.number(),
119
+ tags: z.array(z.number()),
120
+ }).shape }
121
+ },
122
+ {
123
+ name: 'fcrm_detach_tags',
124
+ description: 'Remove tags from a FluentCRM contact',
125
+ inputSchema: { type: 'object', properties: z.object({
126
+ id: z.number(),
127
+ tags: z.array(z.number()),
128
+ }).shape }
129
+ },
130
+ // Contact List Management
131
+ {
132
+ name: 'fcrm_get_contact_lists',
133
+ description: 'Get all lists a FluentCRM contact belongs to',
134
+ inputSchema: { type: 'object', properties: z.object({ id: z.number() }).shape }
135
+ },
136
+ {
137
+ name: 'fcrm_attach_lists',
138
+ description: 'Add a FluentCRM contact to lists',
139
+ inputSchema: { type: 'object', properties: z.object({
140
+ id: z.number(),
141
+ lists: z.array(z.number()),
142
+ }).shape }
143
+ },
144
+ {
145
+ name: 'fcrm_detach_lists',
146
+ description: 'Remove a FluentCRM contact from lists',
147
+ inputSchema: { type: 'object', properties: z.object({
148
+ id: z.number(),
149
+ lists: z.array(z.number()),
150
+ }).shape }
151
+ },
108
152
  // List Management
109
153
  {
110
154
  name: 'fcrm_list_lists',
@@ -280,6 +324,66 @@ export const fluentCRMHandlers = {
280
324
  return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
281
325
  }
282
326
  },
327
+ // Contact Tag Management handlers
328
+ fcrm_get_contact_tags: async (args) => {
329
+ try {
330
+ const response = await makeWordPressRequest('GET', `fc-manager/v1/fcrm/contacts/${args.id}/tags`);
331
+ return { toolResult: { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }] } };
332
+ }
333
+ catch (error) {
334
+ return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
335
+ }
336
+ },
337
+ fcrm_attach_tags: async (args) => {
338
+ try {
339
+ const { id, tags } = args;
340
+ const response = await makeWordPressRequest('POST', `fc-manager/v1/fcrm/contacts/${id}/tags`, { tags });
341
+ return { toolResult: { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }] } };
342
+ }
343
+ catch (error) {
344
+ return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
345
+ }
346
+ },
347
+ fcrm_detach_tags: async (args) => {
348
+ try {
349
+ const { id, tags } = args;
350
+ const response = await makeWordPressRequest('DELETE', `fc-manager/v1/fcrm/contacts/${id}/tags`, { tags });
351
+ return { toolResult: { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }] } };
352
+ }
353
+ catch (error) {
354
+ return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
355
+ }
356
+ },
357
+ // Contact List Management handlers
358
+ fcrm_get_contact_lists: async (args) => {
359
+ try {
360
+ const response = await makeWordPressRequest('GET', `fc-manager/v1/fcrm/contacts/${args.id}/lists`);
361
+ return { toolResult: { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }] } };
362
+ }
363
+ catch (error) {
364
+ return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
365
+ }
366
+ },
367
+ fcrm_attach_lists: async (args) => {
368
+ try {
369
+ const { id, lists } = args;
370
+ const response = await makeWordPressRequest('POST', `fc-manager/v1/fcrm/contacts/${id}/lists`, { lists });
371
+ return { toolResult: { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }] } };
372
+ }
373
+ catch (error) {
374
+ return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
375
+ }
376
+ },
377
+ fcrm_detach_lists: async (args) => {
378
+ try {
379
+ const { id, lists } = args;
380
+ const response = await makeWordPressRequest('DELETE', `fc-manager/v1/fcrm/contacts/${id}/lists`, { lists });
381
+ return { toolResult: { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }] } };
382
+ }
383
+ catch (error) {
384
+ return { toolResult: { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] } };
385
+ }
386
+ },
283
387
  // List handlers
284
388
  fcrm_list_lists: async (args) => {
285
389
  try {
@@ -1301,7 +1301,7 @@ export const fluentMcpProHandlers = {
1301
1301
  // WooCommerce Handlers
1302
1302
  pro_wc_product_list: async (args) => {
1303
1303
  try {
1304
- const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/wc/products', args);
1304
+ const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/woo/products', args);
1305
1305
  return {
1306
1306
  toolResult: {
1307
1307
  content: [{
@@ -1325,7 +1325,7 @@ export const fluentMcpProHandlers = {
1325
1325
  },
1326
1326
  pro_wc_product_get: async (args) => {
1327
1327
  try {
1328
- const response = await makeWordPressRequest('GET', `fc-manager/v1/power/wc/products/${args.id}`);
1328
+ const response = await makeWordPressRequest('GET', `fc-manager/v1/power/woo/products/${args.id}`);
1329
1329
  return {
1330
1330
  toolResult: {
1331
1331
  content: [{
@@ -1349,7 +1349,7 @@ export const fluentMcpProHandlers = {
1349
1349
  },
1350
1350
  pro_wc_product_create: async (args) => {
1351
1351
  try {
1352
- const response = await makeWordPressRequest('POST', 'fc-manager/v1/power/wc/products', args);
1352
+ const response = await makeWordPressRequest('POST', 'fc-manager/v1/power/woo/products', args);
1353
1353
  return {
1354
1354
  toolResult: {
1355
1355
  content: [{
@@ -1373,7 +1373,7 @@ export const fluentMcpProHandlers = {
1373
1373
  },
1374
1374
  pro_wc_product_update: async (args) => {
1375
1375
  try {
1376
- const response = await makeWordPressRequest('PUT', `fc-manager/v1/power/wc/products/${args.id}`, args);
1376
+ const response = await makeWordPressRequest('PUT', `fc-manager/v1/power/woo/products/${args.id}`, args);
1377
1377
  return {
1378
1378
  toolResult: {
1379
1379
  content: [{
@@ -1397,7 +1397,7 @@ export const fluentMcpProHandlers = {
1397
1397
  },
1398
1398
  pro_wc_product_delete: async (args) => {
1399
1399
  try {
1400
- const response = await makeWordPressRequest('DELETE', `fc-manager/v1/power/wc/products/${args.id}`, args);
1400
+ const response = await makeWordPressRequest('DELETE', `fc-manager/v1/power/woo/products/${args.id}`, args);
1401
1401
  return {
1402
1402
  toolResult: {
1403
1403
  content: [{
@@ -1421,7 +1421,7 @@ export const fluentMcpProHandlers = {
1421
1421
  },
1422
1422
  pro_wc_order_list: async (args) => {
1423
1423
  try {
1424
- const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/wc/orders', args);
1424
+ const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/woo/orders', args);
1425
1425
  return {
1426
1426
  toolResult: {
1427
1427
  content: [{
@@ -1445,7 +1445,7 @@ export const fluentMcpProHandlers = {
1445
1445
  },
1446
1446
  pro_wc_order_get: async (args) => {
1447
1447
  try {
1448
- const response = await makeWordPressRequest('GET', `fc-manager/v1/power/wc/orders/${args.id}`);
1448
+ const response = await makeWordPressRequest('GET', `fc-manager/v1/power/woo/orders/${args.id}`);
1449
1449
  return {
1450
1450
  toolResult: {
1451
1451
  content: [{
@@ -1469,7 +1469,7 @@ export const fluentMcpProHandlers = {
1469
1469
  },
1470
1470
  pro_wc_order_update: async (args) => {
1471
1471
  try {
1472
- const response = await makeWordPressRequest('PUT', `fc-manager/v1/power/wc/orders/${args.id}`, args);
1472
+ const response = await makeWordPressRequest('PUT', `fc-manager/v1/power/woo/orders/${args.id}`, args);
1473
1473
  return {
1474
1474
  toolResult: {
1475
1475
  content: [{
@@ -1493,7 +1493,7 @@ export const fluentMcpProHandlers = {
1493
1493
  },
1494
1494
  pro_wc_customer_list: async (args) => {
1495
1495
  try {
1496
- const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/wc/customers', args);
1496
+ const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/woo/customers', args);
1497
1497
  return {
1498
1498
  toolResult: {
1499
1499
  content: [{
@@ -1517,7 +1517,7 @@ export const fluentMcpProHandlers = {
1517
1517
  },
1518
1518
  pro_wc_customer_get: async (args) => {
1519
1519
  try {
1520
- const response = await makeWordPressRequest('GET', `fc-manager/v1/power/wc/customers/${args.id}`);
1520
+ const response = await makeWordPressRequest('GET', `fc-manager/v1/power/woo/customers/${args.id}`);
1521
1521
  return {
1522
1522
  toolResult: {
1523
1523
  content: [{
@@ -1541,7 +1541,7 @@ export const fluentMcpProHandlers = {
1541
1541
  },
1542
1542
  pro_wc_reports: async (args) => {
1543
1543
  try {
1544
- const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/wc/reports', args);
1544
+ const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/woo/reports', args);
1545
1545
  return {
1546
1546
  toolResult: {
1547
1547
  content: [{
@@ -1565,7 +1565,7 @@ export const fluentMcpProHandlers = {
1565
1565
  },
1566
1566
  pro_wc_coupon_list: async (args) => {
1567
1567
  try {
1568
- const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/wc/coupons', args);
1568
+ const response = await makeWordPressRequest('GET', 'fc-manager/v1/power/woo/coupons', args);
1569
1569
  return {
1570
1570
  toolResult: {
1571
1571
  content: [{
@@ -1589,7 +1589,7 @@ export const fluentMcpProHandlers = {
1589
1589
  },
1590
1590
  pro_wc_coupon_create: async (args) => {
1591
1591
  try {
1592
- const response = await makeWordPressRequest('POST', 'fc-manager/v1/power/wc/coupons', args);
1592
+ const response = await makeWordPressRequest('POST', 'fc-manager/v1/power/woo/coupons', args);
1593
1593
  return {
1594
1594
  toolResult: {
1595
1595
  content: [{
@@ -25,205 +25,80 @@ import { fluentCommunityCoreTools, fluentCommunityCoreHandlers } from './fluent-
25
25
  import { fluentCommunityLearningTools, fluentCommunityLearningHandlers } from './fluent-community-learning.js';
26
26
  import { fluentMcpProTools, fluentMcpProHandlers } from './fluent-mcp-pro.js';
27
27
  import { mlSocialTools, mlSocialHandlers } from './ml-social.js';
28
- // Tool categories for selective loading
29
- const toolCategories = {
30
- wordpress: [
31
- ...unifiedContentTools,
32
- ...unifiedTaxonomyTools,
33
- ...pluginTools,
34
- ...mediaTools,
35
- ...userTools,
36
- ...pluginRepositoryTools,
37
- ...commentTools,
38
- ...mlCanvasTools,
39
- ...mlSimpleSiteTools,
40
- ...mlImageEditorTools, // AI image generation via ML Image Editor
41
- ...mlMediaHubTools, // Image search & icon import via ML Media Hub P2P
42
- ...mlSocialTools // Social media publishing via ML Social
43
- ],
44
- // Full FluentCommunity (91 tools) - legacy support
45
- fluentcommunity: [
46
- ...fluentCommunityTools,
47
- ...fluentCommunityDesignTools,
48
- ...fluentCommunityLayoutTools,
49
- ...fluentCommunityChatTools,
50
- ...fluentCommunityAdminTools
51
- ],
52
- // COMM1 - Community Core (55 tools) - posts, spaces, members, engagement
53
- 'fluentcommunity-core': [
54
- ...fluentCommunityCoreTools,
55
- ...fluentCommunityChatTools // Chat is part of core community
56
- ],
57
- // COMM2 - Learning & Admin (36 tools) - courses, lessons, settings
58
- 'fluentcommunity-learning': [
59
- ...fluentCommunityLearningTools,
60
- ...fluentCommunityDesignTools,
61
- ...fluentCommunityLayoutTools,
62
- ...fluentCommunityAdminTools
63
- ],
64
- fluentcart: [
65
- ...fluentCartTools,
66
- ...fluentCartAnalyticsTools,
67
- ...fluentCartLicensingTools,
68
- ...fluentCartAdminTools
69
- ],
70
- fluentcrm: [
71
- ...fluentCRMTools
72
- ],
73
- // mlplugins - Only Fluent Affiliate (ML Image Editor & Media Hub are in wordpress category)
74
- mlplugins: [
75
- ...fluentAffiliateTools
76
- ],
77
- pro: [
78
- ...fluentMcpProTools
79
- ],
80
- debug: [
81
- ...debugTools
82
- ]
28
+ // All tools - always loaded, no conditional filtering
29
+ export const allTools = [
30
+ // WordPress Core
31
+ ...unifiedContentTools,
32
+ ...unifiedTaxonomyTools,
33
+ ...pluginTools,
34
+ ...mediaTools,
35
+ ...userTools,
36
+ ...pluginRepositoryTools,
37
+ ...commentTools,
38
+ // ML Plugins (Canvas, Simple Site, Image Editor, Media Hub, Social)
39
+ ...mlCanvasTools,
40
+ ...mlSimpleSiteTools,
41
+ ...mlImageEditorTools,
42
+ ...mlMediaHubTools,
43
+ ...mlSocialTools,
44
+ // FluentMCP Pro (WooCommerce, file system, database, WP settings, system, WP-CLI)
45
+ ...fluentMcpProTools,
46
+ // FluentCommunity
47
+ ...fluentCommunityTools,
48
+ ...fluentCommunityDesignTools,
49
+ ...fluentCommunityLayoutTools,
50
+ ...fluentCommunityChatTools,
51
+ ...fluentCommunityAdminTools,
52
+ ...fluentCommunityCoreTools,
53
+ ...fluentCommunityLearningTools,
54
+ // FluentCart
55
+ ...fluentCartTools,
56
+ ...fluentCartAnalyticsTools,
57
+ ...fluentCartLicensingTools,
58
+ ...fluentCartAdminTools,
59
+ // FluentCRM
60
+ ...fluentCRMTools,
61
+ // Fluent Affiliate
62
+ ...fluentAffiliateTools,
63
+ // Debug
64
+ ...debugTools
65
+ ];
66
+ // All handlers - always loaded, no conditional filtering
67
+ export const toolHandlers = {
68
+ // WordPress Core
69
+ ...unifiedContentHandlers,
70
+ ...unifiedTaxonomyHandlers,
71
+ ...pluginHandlers,
72
+ ...mediaHandlers,
73
+ ...userHandlers,
74
+ ...pluginRepositoryHandlers,
75
+ ...commentHandlers,
76
+ // ML Plugins
77
+ ...mlCanvasHandlers,
78
+ ...mlSimpleSiteHandlers,
79
+ ...mlImageEditorHandlers,
80
+ ...mlMediaHubHandlers,
81
+ ...mlSocialHandlers,
82
+ // FluentMCP Pro
83
+ ...fluentMcpProHandlers,
84
+ // FluentCommunity
85
+ ...fluentCommunityHandlers,
86
+ ...fluentCommunityDesignHandlers,
87
+ ...fluentCommunityLayoutHandlers,
88
+ ...fluentCommunityChatHandlers,
89
+ ...fluentCommunityAdminHandlers,
90
+ ...fluentCommunityCoreHandlers,
91
+ ...fluentCommunityLearningHandlers,
92
+ // FluentCart
93
+ ...fluentCartHandlers,
94
+ ...fluentCartAnalyticsHandlers,
95
+ ...fluentCartLicensingHandlers,
96
+ ...fluentCartAdminHandlers,
97
+ // FluentCRM
98
+ ...fluentCRMHandlers,
99
+ // Fluent Affiliate
100
+ ...fluentAffiliateHandlers,
101
+ // Debug
102
+ ...debugHandlers
83
103
  };
84
- const handlerCategories = {
85
- // WP (ENABLED_TOOLS=wordpress) - 45+ tools (includes ML Image Editor & Media Hub & Social)
86
- wordpress: {
87
- ...unifiedContentHandlers,
88
- ...unifiedTaxonomyHandlers,
89
- ...pluginHandlers,
90
- ...mediaHandlers,
91
- ...userHandlers,
92
- ...pluginRepositoryHandlers,
93
- ...commentHandlers,
94
- ...mlCanvasHandlers, // ML Canvas Block tools
95
- ...mlSimpleSiteHandlers, // ML Simple Site tools
96
- ...mlImageEditorHandlers, // AI image generation
97
- ...mlMediaHubHandlers, // Image search & icon import
98
- ...mlSocialHandlers // Social media publishing
99
- },
100
- fluentcommunity: {
101
- ...fluentCommunityHandlers,
102
- ...fluentCommunityDesignHandlers,
103
- ...fluentCommunityLayoutHandlers,
104
- ...fluentCommunityChatHandlers,
105
- ...fluentCommunityAdminHandlers
106
- },
107
- 'fluentcommunity-core': {
108
- ...fluentCommunityCoreHandlers,
109
- ...fluentCommunityChatHandlers
110
- },
111
- 'fluentcommunity-learning': {
112
- ...fluentCommunityLearningHandlers,
113
- ...fluentCommunityDesignHandlers,
114
- ...fluentCommunityLayoutHandlers,
115
- ...fluentCommunityAdminHandlers
116
- },
117
- fluentcart: {
118
- ...fluentCartHandlers,
119
- ...fluentCartAnalyticsHandlers,
120
- ...fluentCartLicensingHandlers,
121
- ...fluentCartAdminHandlers
122
- },
123
- fluentcrm: {
124
- ...fluentCRMHandlers
125
- },
126
- // mlplugins - Only Fluent Affiliate (ML Image Editor & Media Hub handlers are in wordpress category)
127
- mlplugins: {
128
- ...fluentAffiliateHandlers
129
- },
130
- pro: {
131
- ...fluentMcpProHandlers
132
- },
133
- debug: {
134
- ...debugHandlers
135
- }
136
- };
137
- // Filter tools based on ENABLED_TOOLS environment variable
138
- function getFilteredTools() {
139
- const enabledTools = process.env.ENABLED_TOOLS?.toLowerCase();
140
- // If specific category requested, honor it
141
- if (enabledTools && enabledTools !== 'all') {
142
- // Map user-friendly names to internal category names
143
- const categoryMap = {
144
- 'wordpress': 'wordpress',
145
- 'fluent-community': 'fluentcommunity',
146
- 'fluentcommunity': 'fluentcommunity',
147
- 'fluentcommunity-core': 'fluentcommunity-core',
148
- 'fluent-community-core': 'fluentcommunity-core',
149
- 'fluentcommunity-learning': 'fluentcommunity-learning',
150
- 'fluent-community-learning': 'fluentcommunity-learning',
151
- 'fluent-cart': 'fluentcart',
152
- 'fluentcart': 'fluentcart',
153
- 'fluent-crm': 'fluentcrm',
154
- 'fluentcrm': 'fluentcrm',
155
- 'mlplugins': 'mlplugins',
156
- 'pro': 'pro',
157
- 'fluentmcp-pro': 'pro',
158
- 'fluent-mcp-pro': 'pro',
159
- 'debug': 'debug'
160
- };
161
- const category = categoryMap[enabledTools];
162
- if (category && toolCategories[category]) {
163
- console.error(`📦 Loading only: ${enabledTools} (${toolCategories[category].length} tools)`);
164
- return toolCategories[category];
165
- }
166
- console.error(`⚠️ Unknown ENABLED_TOOLS value: ${enabledTools}. Loading all tools.`);
167
- }
168
- // ENABLED_TOOLS not set or 'all' - load all tools
169
- // No plugin detection during startup to prevent Claude Desktop crashes
170
- return [
171
- ...toolCategories.wordpress,
172
- ...toolCategories.fluentcommunity,
173
- ...toolCategories.fluentcart,
174
- ...toolCategories.fluentcrm,
175
- ...toolCategories.mlplugins,
176
- ...toolCategories.pro,
177
- ...toolCategories.debug
178
- ];
179
- }
180
- function getFilteredHandlers() {
181
- const enabledTools = process.env.ENABLED_TOOLS?.toLowerCase();
182
- if (!enabledTools || enabledTools === 'all') {
183
- // No filter or 'all' - load all handlers
184
- return {
185
- ...handlerCategories.wordpress,
186
- ...handlerCategories.fluentcommunity,
187
- ...handlerCategories.fluentcart,
188
- ...handlerCategories.fluentcrm,
189
- ...handlerCategories.mlplugins,
190
- ...handlerCategories.pro,
191
- ...handlerCategories.debug
192
- };
193
- }
194
- // Map user-friendly names to internal category names
195
- const categoryMap = {
196
- 'wordpress': 'wordpress',
197
- 'fluent-community': 'fluentcommunity',
198
- 'fluentcommunity': 'fluentcommunity',
199
- 'fluentcommunity-core': 'fluentcommunity-core',
200
- 'fluent-community-core': 'fluentcommunity-core',
201
- 'fluentcommunity-learning': 'fluentcommunity-learning',
202
- 'fluent-community-learning': 'fluentcommunity-learning',
203
- 'fluent-cart': 'fluentcart',
204
- 'fluentcart': 'fluentcart',
205
- 'fluent-crm': 'fluentcrm',
206
- 'fluentcrm': 'fluentcrm',
207
- 'mlplugins': 'mlplugins',
208
- 'pro': 'pro',
209
- 'fluentmcp-pro': 'pro',
210
- 'fluent-mcp-pro': 'pro',
211
- 'debug': 'debug'
212
- };
213
- const category = categoryMap[enabledTools];
214
- if (category && handlerCategories[category]) {
215
- return handlerCategories[category];
216
- }
217
- return {
218
- ...handlerCategories.wordpress,
219
- ...handlerCategories.fluentcommunity,
220
- ...handlerCategories.fluentcart,
221
- ...handlerCategories.fluentcrm,
222
- ...handlerCategories.mlplugins,
223
- ...handlerCategories.pro,
224
- ...handlerCategories.debug
225
- };
226
- }
227
- // Export filtered tools and handlers
228
- export const allTools = getFilteredTools();
229
- export const toolHandlers = getFilteredHandlers();
104
+ console.error(`📦 Loaded ${allTools.length} tools`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wplaunchify/ml-mcp-server",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
4
4
  "description": "Universal MCP Server for WordPress + Fluent Suite (Community, CRM, Cart) + FluentMCP Pro. Comprehensive tools for AI-powered WordPress management via Claude, Cursor, and other MCP clients.",
5
5
  "type": "module",
6
6
  "main": "./build/server.js",