@omnifox/mcp-server 0.3.0 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAS/E,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,SAAS,CAwCpE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAU/E,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,SAAS,CAyCpE"}
package/dist/server.js CHANGED
@@ -9,6 +9,7 @@ import { registerConversationTools } from "./tools/conversations.js";
9
9
  import { registerCommentTools } from "./tools/comments.js";
10
10
  import { registerWorkspaceTools } from "./tools/workspace.js";
11
11
  import { registerCalendarTools } from "./tools/calendar.js";
12
+ import { registerCatalogTools } from "./tools/catalog.js";
12
13
  import { registerExtraTools } from "./tools/extras.js";
13
14
  export const SERVER_NAME = "omnifox-mcp-server";
14
15
  export const SERVER_VERSION = "0.2.2";
@@ -47,6 +48,7 @@ export function buildServer(opts = {}) {
47
48
  registerCommentTools(server, client);
48
49
  registerWorkspaceTools(server, client);
49
50
  registerCalendarTools(server, client);
51
+ registerCatalogTools(server, client);
50
52
  registerExtraTools(server, client);
51
53
  return server;
52
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAOtC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B,EAAE;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;SACZ;QACD,YAAY,EACV,kEAAkE;YAClE,yEAAyE;YACzE,+CAA+C;YAC/C,sEAAsE;YACtE,uEAAuE;YACvE,2DAA2D;YAC3D,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,qCAAqC;YACrC,yEAAyE;YACzE,yEAAyE;YACzE,wEAAwE;YACxE,yEAAyE;KAC5E,CACF,CAAC;IAEF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAOtC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B,EAAE;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;SACZ;QACD,YAAY,EACV,kEAAkE;YAClE,yEAAyE;YACzE,+CAA+C;YAC/C,sEAAsE;YACtE,uEAAuE;YACvE,2DAA2D;YAC3D,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,qCAAqC;YACrC,yEAAyE;YACzE,yEAAyE;YACzE,wEAAwE;YACxE,yEAAyE;KAC5E,CACF,CAAC;IAEF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Catálogo y pedidos — lo que el negocio vende y lo que le compraron.
3
+ *
4
+ * Hasta ahora el MCP sabía de contactos, conversaciones, mensajes y calendario:
5
+ * un asistente conectado por acá podía leer una conversación entera sobre un
6
+ * producto y no podía ni decir su precio, mucho menos anotar el pedido.
7
+ *
8
+ * ── DOS REGLAS QUE LAS DESCRIPCIONES REPITEN A PROPÓSITO ────────────────
9
+ * 1. Los precios y los totales salen del servidor. El modelo dice QUÉ y
10
+ * CUÁNTO; lo que sale a cobrar lo calcula la API con el catálogo y los
11
+ * impuestos del espacio de trabajo. Si el total viajara desde acá,
12
+ * bastaría con que un cliente escribiera "me lo llevo a un dólar".
13
+ * 2. Nada de inventar productos: `search_products` primero, y el pedido se
14
+ * arma con los ids que devolvió.
15
+ *
16
+ * Las descripciones son lo único que el modelo lee antes de decidir, así que
17
+ * dicen lo que NO debe hacer, no solo lo que hace.
18
+ */
19
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
20
+ import type { OmnifoxClient } from "../omnifox/client.js";
21
+ export declare function registerCatalogTools(server: McpServer, client: OmnifoxClient): void;
22
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAsKnF"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Catálogo y pedidos — lo que el negocio vende y lo que le compraron.
3
+ *
4
+ * Hasta ahora el MCP sabía de contactos, conversaciones, mensajes y calendario:
5
+ * un asistente conectado por acá podía leer una conversación entera sobre un
6
+ * producto y no podía ni decir su precio, mucho menos anotar el pedido.
7
+ *
8
+ * ── DOS REGLAS QUE LAS DESCRIPCIONES REPITEN A PROPÓSITO ────────────────
9
+ * 1. Los precios y los totales salen del servidor. El modelo dice QUÉ y
10
+ * CUÁNTO; lo que sale a cobrar lo calcula la API con el catálogo y los
11
+ * impuestos del espacio de trabajo. Si el total viajara desde acá,
12
+ * bastaría con que un cliente escribiera "me lo llevo a un dólar".
13
+ * 2. Nada de inventar productos: `search_products` primero, y el pedido se
14
+ * arma con los ids que devolvió.
15
+ *
16
+ * Las descripciones son lo único que el modelo lee antes de decidir, así que
17
+ * dicen lo que NO debe hacer, no solo lo que hace.
18
+ */
19
+ import { z } from "zod";
20
+ const ok = (data) => ({
21
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
22
+ });
23
+ const numericId = (what) => z
24
+ .union([z.number().int().positive(), z.string().regex(/^\d+$/)])
25
+ .describe(`Numeric id of the ${what}.`);
26
+ export function registerCatalogTools(server, client) {
27
+ // ---------- Productos ----------
28
+ server.tool("search_products", "Search the business catalog by name, SKU, category or description. " +
29
+ "Call this BEFORE talking about any price or availability, and before creating an order — " +
30
+ "never quote a price that did not come from here, and never mention a product that is not in the results. " +
31
+ "`stock: null` means the business does not track stock for that product; it does NOT mean zero. " +
32
+ "`is_orderable: false` means it can be shown but not ordered.", {
33
+ search: z.string().optional().describe("Words the customer used: 'white paint', 'SKU-123'."),
34
+ category: z.string().optional(),
35
+ active: z.boolean().optional().describe("Defaults to every product; pass true for on-sale only."),
36
+ per_page: z.number().int().min(1).max(100).optional(),
37
+ }, async (params) => ok(await client.get("/products", params)));
38
+ server.tool("get_product", "Read one catalog product in full: price, unit of measure, tax rate, stock, photo and whether it can be ordered.", { product_id: numericId("product") }, async ({ product_id }) => ok(await client.get(`/products/${product_id}`)));
39
+ server.tool("create_product", "Add a product to the catalog. Leave `stock` out entirely when the business does not track stock — " +
40
+ "sending 0 tells everyone the product is sold out.", {
41
+ name: z.string().min(1),
42
+ unit_price: z.number().min(0).describe("Price per unit, in the workspace currency."),
43
+ sku: z.string().optional(),
44
+ description: z.string().optional(),
45
+ category: z.string().optional(),
46
+ currency: z.string().length(3).optional(),
47
+ tax_rate: z.number().min(0).max(100).optional(),
48
+ unit: z.string().optional().describe("kilo, metre, box, hour — how the price is read."),
49
+ image_url: z.string().url().optional(),
50
+ stock: z.number().int().optional(),
51
+ is_orderable: z.boolean().optional(),
52
+ is_active: z.boolean().optional(),
53
+ }, async (params) => ok(await client.post("/products", params)));
54
+ server.tool("update_product", "Change a catalog product. Only the fields you send are touched.", {
55
+ product_id: numericId("product"),
56
+ name: z.string().optional(),
57
+ unit_price: z.number().min(0).optional(),
58
+ sku: z.string().optional(),
59
+ description: z.string().optional(),
60
+ category: z.string().optional(),
61
+ tax_rate: z.number().min(0).max(100).optional(),
62
+ unit: z.string().optional(),
63
+ image_url: z.string().url().optional(),
64
+ stock: z.number().int().optional(),
65
+ is_orderable: z.boolean().optional(),
66
+ is_active: z.boolean().optional(),
67
+ }, async ({ product_id, ...rest }) => ok(await client.put(`/products/${product_id}`, rest)));
68
+ // ---------- Pedidos ----------
69
+ server.tool("list_orders", "List the workspace's orders, newest first. Filter by status to get only what is still open.", {
70
+ status: z
71
+ .string()
72
+ .optional()
73
+ .describe("Comma-separated: pending, confirmed, preparing, ready, shipped, delivered, cancelled."),
74
+ payment_status: z.enum(["unpaid", "partial", "paid", "refunded"]).optional(),
75
+ contact_id: z.number().int().optional(),
76
+ search: z.string().optional().describe("Order number, customer name or phone."),
77
+ per_page: z.number().int().min(1).max(100).optional(),
78
+ }, async (params) => ok(await client.get("/orders", params)));
79
+ server.tool("get_order", "Read one order in full: its lines, totals, delivery details and the history of who moved it when.", { order_id: numericId("order") }, async ({ order_id }) => ok(await client.get(`/orders/${order_id}`)));
80
+ server.tool("create_order", "Create an order from catalog products. Use it only after the customer confirmed what they want and how many. " +
81
+ "Search the catalog first and pass the product ids from those results. " +
82
+ "Do NOT send prices or totals: the server prices every line from the catalog and applies the workspace's " +
83
+ "tax and delivery rules — the total it returns is the only one you may tell the customer. " +
84
+ "If the workspace requires confirmation, the order comes back as `pending`, not confirmed.", {
85
+ items: z
86
+ .array(z.object({
87
+ product_id: z.number().int().positive(),
88
+ quantity: z.number().min(0.001).default(1),
89
+ options: z
90
+ .record(z.string(), z.string())
91
+ .optional()
92
+ .describe("Line choices: {'nota': 'no onions'}, {'talla': 'M'}."),
93
+ }))
94
+ .min(1),
95
+ contact_id: z.number().int().optional().describe("Links the order to the customer's record."),
96
+ conversation_id: z.number().int().optional(),
97
+ fulfillment: z.enum(["pickup", "delivery", "digital"]).optional(),
98
+ delivery_address: z.string().optional().describe("Required by most businesses when fulfillment is delivery."),
99
+ customer_name: z.string().optional(),
100
+ customer_phone: z.string().optional(),
101
+ customer_email: z.string().optional(),
102
+ customer_tax_id: z.string().optional().describe("RUC/NIT/CUIT, when the business invoices."),
103
+ customer_notes: z.string().optional().describe("What the customer asked for, in their words."),
104
+ }, async (params) => ok(await client.post("/orders", params)));
105
+ server.tool("set_order_status", "Move an order along: confirmed → preparing → ready → shipped → delivered, or cancel it. " +
106
+ "The server refuses impossible jumps (a cancelled order never goes back), moves stock accordingly " +
107
+ "and records who did it. Confirming is what commits the business, so do not confirm on the customer's behalf " +
108
+ "unless you were asked to.", {
109
+ order_id: numericId("order"),
110
+ status: z.enum([
111
+ "pending",
112
+ "confirmed",
113
+ "preparing",
114
+ "ready",
115
+ "shipped",
116
+ "delivered",
117
+ "cancelled",
118
+ ]),
119
+ reason: z.string().optional().describe("Why — mostly for cancellations."),
120
+ }, async ({ order_id, ...rest }) => ok(await client.post(`/orders/${order_id}/status`, rest)));
121
+ server.tool("record_order_payment", "Record money received against an order. Partial amounts are fine — the payment status is derived from the total.", {
122
+ order_id: numericId("order"),
123
+ amount: z.number().min(0.01),
124
+ method: z.string().optional().describe("cash, transfer, card…"),
125
+ }, async ({ order_id, ...rest }) => ok(await client.post(`/orders/${order_id}/payment`, rest)));
126
+ server.tool("get_catalog_settings", "Read how this workspace sells: whether it takes orders at all, how it taxes, whether orders need confirmation, " +
127
+ "which delivery modes it offers, what customer details it requires and how it tracks stock. " +
128
+ "Read this before assuming any of it — every business answers differently.", {}, async () => ok(await client.get("/catalog/settings")));
129
+ }
130
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@omnifox/mcp-server",
3
- "version": "0.3.0",
4
- "description": "Official Omnifox.io Model Context Protocol (MCP) server \u2014 48 tools over the Omnifox v1 REST API for Claude, Cursor, Continue and any MCP client. Every tool verified end-to-end against a live workspace.",
3
+ "version": "0.4.0",
4
+ "description": "Official Omnifox.io Model Context Protocol (MCP) server — 48 tools over the Omnifox v1 REST API for Claude, Cursor, Continue and any MCP client. Every tool verified end-to-end against a live workspace.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "author": "Omnifox.io",
@@ -62,4 +62,4 @@
62
62
  "publishConfig": {
63
63
  "access": "public"
64
64
  }
65
- }
65
+ }