@hasna/microservices 0.0.3 → 0.0.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.
Files changed (67) hide show
  1. package/bin/index.js +63 -0
  2. package/bin/mcp.js +63 -0
  3. package/dist/index.js +63 -0
  4. package/microservices/microservice-ads/package.json +27 -0
  5. package/microservices/microservice-ads/src/cli/index.ts +407 -0
  6. package/microservices/microservice-ads/src/db/campaigns.ts +493 -0
  7. package/microservices/microservice-ads/src/db/database.ts +93 -0
  8. package/microservices/microservice-ads/src/db/migrations.ts +60 -0
  9. package/microservices/microservice-ads/src/index.ts +39 -0
  10. package/microservices/microservice-ads/src/mcp/index.ts +320 -0
  11. package/microservices/microservice-contracts/package.json +27 -0
  12. package/microservices/microservice-contracts/src/cli/index.ts +383 -0
  13. package/microservices/microservice-contracts/src/db/contracts.ts +496 -0
  14. package/microservices/microservice-contracts/src/db/database.ts +93 -0
  15. package/microservices/microservice-contracts/src/db/migrations.ts +58 -0
  16. package/microservices/microservice-contracts/src/index.ts +43 -0
  17. package/microservices/microservice-contracts/src/mcp/index.ts +308 -0
  18. package/microservices/microservice-domains/package.json +27 -0
  19. package/microservices/microservice-domains/src/cli/index.ts +438 -0
  20. package/microservices/microservice-domains/src/db/database.ts +93 -0
  21. package/microservices/microservice-domains/src/db/domains.ts +551 -0
  22. package/microservices/microservice-domains/src/db/migrations.ts +60 -0
  23. package/microservices/microservice-domains/src/index.ts +44 -0
  24. package/microservices/microservice-domains/src/mcp/index.ts +368 -0
  25. package/microservices/microservice-hiring/package.json +27 -0
  26. package/microservices/microservice-hiring/src/cli/index.ts +431 -0
  27. package/microservices/microservice-hiring/src/db/database.ts +93 -0
  28. package/microservices/microservice-hiring/src/db/hiring.ts +582 -0
  29. package/microservices/microservice-hiring/src/db/migrations.ts +68 -0
  30. package/microservices/microservice-hiring/src/index.ts +51 -0
  31. package/microservices/microservice-hiring/src/mcp/index.ts +464 -0
  32. package/microservices/microservice-payments/package.json +27 -0
  33. package/microservices/microservice-payments/src/cli/index.ts +357 -0
  34. package/microservices/microservice-payments/src/db/database.ts +93 -0
  35. package/microservices/microservice-payments/src/db/migrations.ts +63 -0
  36. package/microservices/microservice-payments/src/db/payments.ts +652 -0
  37. package/microservices/microservice-payments/src/index.ts +51 -0
  38. package/microservices/microservice-payments/src/mcp/index.ts +460 -0
  39. package/microservices/microservice-payroll/package.json +27 -0
  40. package/microservices/microservice-payroll/src/cli/index.ts +374 -0
  41. package/microservices/microservice-payroll/src/db/database.ts +93 -0
  42. package/microservices/microservice-payroll/src/db/migrations.ts +69 -0
  43. package/microservices/microservice-payroll/src/db/payroll.ts +741 -0
  44. package/microservices/microservice-payroll/src/index.ts +48 -0
  45. package/microservices/microservice-payroll/src/mcp/index.ts +420 -0
  46. package/microservices/microservice-shipping/package.json +27 -0
  47. package/microservices/microservice-shipping/src/cli/index.ts +398 -0
  48. package/microservices/microservice-shipping/src/db/database.ts +93 -0
  49. package/microservices/microservice-shipping/src/db/migrations.ts +61 -0
  50. package/microservices/microservice-shipping/src/db/shipping.ts +643 -0
  51. package/microservices/microservice-shipping/src/index.ts +53 -0
  52. package/microservices/microservice-shipping/src/mcp/index.ts +385 -0
  53. package/microservices/microservice-social/package.json +27 -0
  54. package/microservices/microservice-social/src/cli/index.ts +447 -0
  55. package/microservices/microservice-social/src/db/database.ts +93 -0
  56. package/microservices/microservice-social/src/db/migrations.ts +55 -0
  57. package/microservices/microservice-social/src/db/social.ts +672 -0
  58. package/microservices/microservice-social/src/index.ts +46 -0
  59. package/microservices/microservice-social/src/mcp/index.ts +435 -0
  60. package/microservices/microservice-subscriptions/package.json +27 -0
  61. package/microservices/microservice-subscriptions/src/cli/index.ts +400 -0
  62. package/microservices/microservice-subscriptions/src/db/database.ts +93 -0
  63. package/microservices/microservice-subscriptions/src/db/migrations.ts +57 -0
  64. package/microservices/microservice-subscriptions/src/db/subscriptions.ts +692 -0
  65. package/microservices/microservice-subscriptions/src/index.ts +41 -0
  66. package/microservices/microservice-subscriptions/src/mcp/index.ts +365 -0
  67. package/package.json +1 -1
@@ -0,0 +1,385 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { z } from "zod";
6
+ import {
7
+ createOrder,
8
+ getOrder,
9
+ listOrders,
10
+ updateOrder,
11
+ deleteOrder,
12
+ searchOrders,
13
+ listByStatus,
14
+ } from "../db/shipping.js";
15
+ import {
16
+ createShipment,
17
+ getShipment,
18
+ getShipmentByTracking,
19
+ listShipments,
20
+ updateShipment,
21
+ } from "../db/shipping.js";
22
+ import {
23
+ createReturn,
24
+ getReturn,
25
+ listReturns,
26
+ updateReturn,
27
+ } from "../db/shipping.js";
28
+ import {
29
+ getShippingStats,
30
+ getCostsByCarrier,
31
+ } from "../db/shipping.js";
32
+
33
+ const server = new McpServer({
34
+ name: "microservice-shipping",
35
+ version: "0.0.1",
36
+ });
37
+
38
+ // ─── Orders ──────────────────────────────────────────────────────────────────
39
+
40
+ const AddressSchema = z.object({
41
+ street: z.string(),
42
+ city: z.string(),
43
+ state: z.string(),
44
+ zip: z.string(),
45
+ country: z.string(),
46
+ });
47
+
48
+ const OrderItemSchema = z.object({
49
+ name: z.string(),
50
+ qty: z.number(),
51
+ weight: z.number(),
52
+ value: z.number(),
53
+ });
54
+
55
+ server.registerTool(
56
+ "create_order",
57
+ {
58
+ title: "Create Order",
59
+ description: "Create a new order.",
60
+ inputSchema: {
61
+ customer_name: z.string(),
62
+ customer_email: z.string().optional(),
63
+ address: AddressSchema,
64
+ items: z.array(OrderItemSchema),
65
+ currency: z.string().optional(),
66
+ },
67
+ },
68
+ async (params) => {
69
+ const order = createOrder(params);
70
+ return { content: [{ type: "text", text: JSON.stringify(order, null, 2) }] };
71
+ }
72
+ );
73
+
74
+ server.registerTool(
75
+ "get_order",
76
+ {
77
+ title: "Get Order",
78
+ description: "Get an order by ID.",
79
+ inputSchema: { id: z.string() },
80
+ },
81
+ async ({ id }) => {
82
+ const order = getOrder(id);
83
+ if (!order) {
84
+ return { content: [{ type: "text", text: `Order '${id}' not found.` }], isError: true };
85
+ }
86
+ return { content: [{ type: "text", text: JSON.stringify(order, null, 2) }] };
87
+ }
88
+ );
89
+
90
+ server.registerTool(
91
+ "list_orders",
92
+ {
93
+ title: "List Orders",
94
+ description: "List orders with optional filters.",
95
+ inputSchema: {
96
+ status: z.string().optional(),
97
+ search: z.string().optional(),
98
+ limit: z.number().optional(),
99
+ },
100
+ },
101
+ async (params) => {
102
+ const orders = listOrders(params);
103
+ return {
104
+ content: [
105
+ { type: "text", text: JSON.stringify({ orders, count: orders.length }, null, 2) },
106
+ ],
107
+ };
108
+ }
109
+ );
110
+
111
+ server.registerTool(
112
+ "update_order",
113
+ {
114
+ title: "Update Order",
115
+ description: "Update an existing order.",
116
+ inputSchema: {
117
+ id: z.string(),
118
+ customer_name: z.string().optional(),
119
+ customer_email: z.string().optional(),
120
+ status: z.enum(["pending", "processing", "shipped", "delivered", "returned"]).optional(),
121
+ address: AddressSchema.optional(),
122
+ items: z.array(OrderItemSchema).optional(),
123
+ total_value: z.number().optional(),
124
+ currency: z.string().optional(),
125
+ },
126
+ },
127
+ async ({ id, ...input }) => {
128
+ const order = updateOrder(id, input);
129
+ if (!order) {
130
+ return { content: [{ type: "text", text: `Order '${id}' not found.` }], isError: true };
131
+ }
132
+ return { content: [{ type: "text", text: JSON.stringify(order, null, 2) }] };
133
+ }
134
+ );
135
+
136
+ server.registerTool(
137
+ "delete_order",
138
+ {
139
+ title: "Delete Order",
140
+ description: "Delete an order by ID.",
141
+ inputSchema: { id: z.string() },
142
+ },
143
+ async ({ id }) => {
144
+ const deleted = deleteOrder(id);
145
+ return { content: [{ type: "text", text: JSON.stringify({ id, deleted }) }] };
146
+ }
147
+ );
148
+
149
+ server.registerTool(
150
+ "search_orders",
151
+ {
152
+ title: "Search Orders",
153
+ description: "Search orders by customer name or email.",
154
+ inputSchema: { query: z.string() },
155
+ },
156
+ async ({ query }) => {
157
+ const results = searchOrders(query);
158
+ return {
159
+ content: [
160
+ { type: "text", text: JSON.stringify({ results, count: results.length }, null, 2) },
161
+ ],
162
+ };
163
+ }
164
+ );
165
+
166
+ // ─── Shipments ───────────────────────────────────────────────────────────────
167
+
168
+ server.registerTool(
169
+ "create_shipment",
170
+ {
171
+ title: "Create Shipment",
172
+ description: "Create a shipment for an order.",
173
+ inputSchema: {
174
+ order_id: z.string(),
175
+ carrier: z.enum(["ups", "fedex", "usps", "dhl"]),
176
+ tracking_number: z.string().optional(),
177
+ service: z.enum(["ground", "express", "overnight"]).optional(),
178
+ cost: z.number().optional(),
179
+ weight: z.number().optional(),
180
+ estimated_delivery: z.string().optional(),
181
+ dimensions: z.record(z.unknown()).optional(),
182
+ },
183
+ },
184
+ async (params) => {
185
+ const shipment = createShipment(params);
186
+ return { content: [{ type: "text", text: JSON.stringify(shipment, null, 2) }] };
187
+ }
188
+ );
189
+
190
+ server.registerTool(
191
+ "get_shipment",
192
+ {
193
+ title: "Get Shipment",
194
+ description: "Get a shipment by ID.",
195
+ inputSchema: { id: z.string() },
196
+ },
197
+ async ({ id }) => {
198
+ const shipment = getShipment(id);
199
+ if (!shipment) {
200
+ return { content: [{ type: "text", text: `Shipment '${id}' not found.` }], isError: true };
201
+ }
202
+ return { content: [{ type: "text", text: JSON.stringify(shipment, null, 2) }] };
203
+ }
204
+ );
205
+
206
+ server.registerTool(
207
+ "track_shipment",
208
+ {
209
+ title: "Track Shipment",
210
+ description: "Track a shipment by tracking number.",
211
+ inputSchema: { tracking_number: z.string() },
212
+ },
213
+ async ({ tracking_number }) => {
214
+ const shipment = getShipmentByTracking(tracking_number);
215
+ if (!shipment) {
216
+ return { content: [{ type: "text", text: `Shipment with tracking '${tracking_number}' not found.` }], isError: true };
217
+ }
218
+ return { content: [{ type: "text", text: JSON.stringify(shipment, null, 2) }] };
219
+ }
220
+ );
221
+
222
+ server.registerTool(
223
+ "list_shipments",
224
+ {
225
+ title: "List Shipments",
226
+ description: "List shipments with optional filters.",
227
+ inputSchema: {
228
+ order_id: z.string().optional(),
229
+ carrier: z.string().optional(),
230
+ status: z.string().optional(),
231
+ limit: z.number().optional(),
232
+ },
233
+ },
234
+ async (params) => {
235
+ const shipments = listShipments(params);
236
+ return {
237
+ content: [
238
+ { type: "text", text: JSON.stringify({ shipments, count: shipments.length }, null, 2) },
239
+ ],
240
+ };
241
+ }
242
+ );
243
+
244
+ server.registerTool(
245
+ "update_shipment",
246
+ {
247
+ title: "Update Shipment",
248
+ description: "Update a shipment.",
249
+ inputSchema: {
250
+ id: z.string(),
251
+ carrier: z.enum(["ups", "fedex", "usps", "dhl"]).optional(),
252
+ tracking_number: z.string().optional(),
253
+ service: z.enum(["ground", "express", "overnight"]).optional(),
254
+ status: z.enum(["label_created", "in_transit", "out_for_delivery", "delivered", "exception"]).optional(),
255
+ shipped_at: z.string().optional(),
256
+ estimated_delivery: z.string().optional(),
257
+ delivered_at: z.string().optional(),
258
+ cost: z.number().optional(),
259
+ weight: z.number().optional(),
260
+ dimensions: z.record(z.unknown()).optional(),
261
+ },
262
+ },
263
+ async ({ id, ...input }) => {
264
+ const shipment = updateShipment(id, input);
265
+ if (!shipment) {
266
+ return { content: [{ type: "text", text: `Shipment '${id}' not found.` }], isError: true };
267
+ }
268
+ return { content: [{ type: "text", text: JSON.stringify(shipment, null, 2) }] };
269
+ }
270
+ );
271
+
272
+ // ─── Returns ─────────────────────────────────────────────────────────────────
273
+
274
+ server.registerTool(
275
+ "create_return",
276
+ {
277
+ title: "Create Return",
278
+ description: "Create a return request for an order.",
279
+ inputSchema: {
280
+ order_id: z.string(),
281
+ reason: z.string().optional(),
282
+ },
283
+ },
284
+ async (params) => {
285
+ const ret = createReturn(params);
286
+ return { content: [{ type: "text", text: JSON.stringify(ret, null, 2) }] };
287
+ }
288
+ );
289
+
290
+ server.registerTool(
291
+ "get_return",
292
+ {
293
+ title: "Get Return",
294
+ description: "Get a return by ID.",
295
+ inputSchema: { id: z.string() },
296
+ },
297
+ async ({ id }) => {
298
+ const ret = getReturn(id);
299
+ if (!ret) {
300
+ return { content: [{ type: "text", text: `Return '${id}' not found.` }], isError: true };
301
+ }
302
+ return { content: [{ type: "text", text: JSON.stringify(ret, null, 2) }] };
303
+ }
304
+ );
305
+
306
+ server.registerTool(
307
+ "list_returns",
308
+ {
309
+ title: "List Returns",
310
+ description: "List returns with optional filters.",
311
+ inputSchema: {
312
+ order_id: z.string().optional(),
313
+ status: z.string().optional(),
314
+ limit: z.number().optional(),
315
+ },
316
+ },
317
+ async (params) => {
318
+ const returns = listReturns(params);
319
+ return {
320
+ content: [
321
+ { type: "text", text: JSON.stringify({ returns, count: returns.length }, null, 2) },
322
+ ],
323
+ };
324
+ }
325
+ );
326
+
327
+ server.registerTool(
328
+ "update_return",
329
+ {
330
+ title: "Update Return",
331
+ description: "Update a return status.",
332
+ inputSchema: {
333
+ id: z.string(),
334
+ reason: z.string().optional(),
335
+ status: z.enum(["requested", "approved", "received", "refunded"]).optional(),
336
+ },
337
+ },
338
+ async ({ id, ...input }) => {
339
+ const ret = updateReturn(id, input);
340
+ if (!ret) {
341
+ return { content: [{ type: "text", text: `Return '${id}' not found.` }], isError: true };
342
+ }
343
+ return { content: [{ type: "text", text: JSON.stringify(ret, null, 2) }] };
344
+ }
345
+ );
346
+
347
+ // ─── Analytics ───────────────────────────────────────────────────────────────
348
+
349
+ server.registerTool(
350
+ "shipping_stats",
351
+ {
352
+ title: "Shipping Statistics",
353
+ description: "Get overall shipping statistics.",
354
+ inputSchema: {},
355
+ },
356
+ async () => {
357
+ const stats = getShippingStats();
358
+ return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] };
359
+ }
360
+ );
361
+
362
+ server.registerTool(
363
+ "carrier_costs",
364
+ {
365
+ title: "Carrier Costs",
366
+ description: "Get shipping costs breakdown by carrier.",
367
+ inputSchema: {},
368
+ },
369
+ async () => {
370
+ const costs = getCostsByCarrier();
371
+ return { content: [{ type: "text", text: JSON.stringify(costs, null, 2) }] };
372
+ }
373
+ );
374
+
375
+ // --- Start ---
376
+ async function main() {
377
+ const transport = new StdioServerTransport();
378
+ await server.connect(transport);
379
+ console.error("microservice-shipping MCP server running on stdio");
380
+ }
381
+
382
+ main().catch((error) => {
383
+ console.error("Fatal error:", error);
384
+ process.exit(1);
385
+ });
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@hasna/microservice-social",
3
+ "version": "0.0.1",
4
+ "description": "Social media management microservice with SQLite — manage accounts, posts, templates, and engagement analytics",
5
+ "type": "module",
6
+ "bin": {
7
+ "microservice-social": "./src/cli/index.ts",
8
+ "microservice-social-mcp": "./src/mcp/index.ts"
9
+ },
10
+ "exports": {
11
+ ".": "./src/index.ts"
12
+ },
13
+ "scripts": {
14
+ "dev": "bun run ./src/cli/index.ts",
15
+ "test": "bun test"
16
+ },
17
+ "dependencies": {
18
+ "@modelcontextprotocol/sdk": "^1.26.0",
19
+ "commander": "^12.1.0",
20
+ "zod": "^3.24.0"
21
+ },
22
+ "license": "Apache-2.0",
23
+ "publishConfig": {
24
+ "registry": "https://registry.npmjs.org",
25
+ "access": "public"
26
+ }
27
+ }