@oda-agent/mcp-server 0.1.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.
@@ -0,0 +1,2 @@
1
+ export { createOdaMcpServer } from './server.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOdaMcpServer = void 0;
4
+ var server_js_1 = require("./server.js");
5
+ Object.defineProperty(exports, "createOdaMcpServer", { enumerable: true, get: function () { return server_js_1.createOdaMcpServer; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ /// <reference types="node" />
3
+ export declare function startServer(env?: NodeJS.ProcessEnv): Promise<void>;
4
+ export declare function runCli(env?: NodeJS.ProcessEnv): Promise<void>;
5
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAKA,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BrF;AAED,wBAAsB,MAAM,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF"}
package/dist/main.js ADDED
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.runCli = exports.startServer = void 0;
28
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
29
+ const core_1 = require("@oda-agent/core");
30
+ const server_js_1 = require("./server.js");
31
+ async function startServer(env = process.env) {
32
+ const email = env['ODA_EMAIL'];
33
+ const password = env['ODA_PASSWORD'];
34
+ if ((email && !password) || (!email && password)) {
35
+ throw new Error('ODA_EMAIL and ODA_PASSWORD must either both be set or both be omitted.');
36
+ }
37
+ const credentials = email && password ? { email, password } : undefined;
38
+ const client = new core_1.OdaClient({
39
+ credentials,
40
+ baseUrl: env['ODA_API_BASE_URL'],
41
+ });
42
+ let authenticated = false;
43
+ if (credentials) {
44
+ await client.login();
45
+ authenticated = true;
46
+ }
47
+ else {
48
+ console.error('Starting MCP server without Oda credentials (unauthenticated mode).');
49
+ }
50
+ const server = (0, server_js_1.createOdaMcpServer)(client, {
51
+ authStatus: {
52
+ configured: Boolean(credentials),
53
+ authenticated,
54
+ },
55
+ });
56
+ const transport = new stdio_js_1.StdioServerTransport();
57
+ await server.connect(transport);
58
+ }
59
+ exports.startServer = startServer;
60
+ async function runCli(env = process.env) {
61
+ try {
62
+ await startServer(env);
63
+ }
64
+ catch (err) {
65
+ console.error(err instanceof Error ? err.message : String(err));
66
+ process.exit(1);
67
+ }
68
+ }
69
+ exports.runCli = runCli;
70
+ if (require.main === module) {
71
+ void Promise.resolve().then(() => __importStar(require('dotenv/config'))).then(() => runCli())
72
+ .catch((err) => {
73
+ console.error(err instanceof Error ? err.message : String(err));
74
+ process.exit(1);
75
+ });
76
+ }
77
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,wEAAiF;AACjF,0CAA4C;AAC5C,2CAAiD;AAE1C,KAAK,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IAErC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,gBAAS,CAAC;QAC3B,WAAW;QACX,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC;KACjC,CAAC,CAAC;IAEH,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,8BAAkB,EAAC,MAAM,EAAE;QACxC,UAAU,EAAE;YACV,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC;YAChC,aAAa;SACd;KACF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AA9BD,kCA8BC;AAEM,KAAK,UAAU,MAAM,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/D,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAPD,wBAOC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,kDAAO,eAAe,IACxB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;SACpB,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { OdaClient } from '@oda-agent/core';
4
+ export declare const ZERO_ARGUMENT_TOOL_NAMES: readonly ["oda_auth_status", "oda_get_cart", "oda_get_shopping_lists", "oda_get_delivery_slots"];
5
+ export declare const READ_ONLY_TOOL_NAMES: readonly ["oda_auth_status", "oda_get_cart", "oda_get_shopping_lists", "oda_get_delivery_slots", "oda_search_products", "oda_get_product", "oda_get_product_image", "oda_get_orders", "oda_get_order_details"];
6
+ export interface OdaMcpServerOptions {
7
+ authStatus?: {
8
+ configured: boolean;
9
+ authenticated: boolean;
10
+ };
11
+ }
12
+ type OdaReadOnlyClient = Pick<OdaClient, 'searchProducts' | 'getProduct' | 'getCart' | 'getOrders' | 'getOrder' | 'getShoppingLists' | 'getDeliverySlots'>;
13
+ export declare const EMPTY_INPUT_SCHEMA: z.ZodObject<{}, "strict", z.ZodTypeAny, {}, {}>;
14
+ export declare const EMPTY_INPUT_SCHEMA_JSON: {
15
+ readonly $schema: "http://json-schema.org/draft-07/schema#";
16
+ readonly additionalProperties: false;
17
+ readonly properties: {};
18
+ readonly type: "object";
19
+ };
20
+ /**
21
+ * Build and configure an MCP server with Oda tools.
22
+ *
23
+ * @param client - An Oda client instance for read-only operations.
24
+ */
25
+ export declare function createOdaMcpServer(client: OdaReadOnlyClient, options?: OdaMcpServerOptions): McpServer;
26
+ export {};
27
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,wBAAwB,kGAK3B,CAAC;AAUX,eAAO,MAAM,oBAAoB,gNAAsE,CAAC;AAExG,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE;QACX,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAED,KAAK,iBAAiB,GAAG,IAAI,CAC3B,SAAS,EACT,gBAAgB,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,kBAAkB,GAAG,kBAAkB,CACjH,CAAC;AAQF,eAAO,MAAM,kBAAkB,iDAAwB,CAAC;AACxD,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAaX;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAwH1G"}
package/dist/server.js ADDED
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOdaMcpServer = exports.EMPTY_INPUT_SCHEMA_JSON = exports.EMPTY_INPUT_SCHEMA = exports.READ_ONLY_TOOL_NAMES = exports.ZERO_ARGUMENT_TOOL_NAMES = void 0;
4
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
+ const zod_1 = require("zod");
6
+ exports.ZERO_ARGUMENT_TOOL_NAMES = [
7
+ 'oda_auth_status',
8
+ 'oda_get_cart',
9
+ 'oda_get_shopping_lists',
10
+ 'oda_get_delivery_slots',
11
+ ];
12
+ const PARAMETERIZED_TOOL_NAMES = [
13
+ 'oda_search_products',
14
+ 'oda_get_product',
15
+ 'oda_get_product_image',
16
+ 'oda_get_orders',
17
+ 'oda_get_order_details',
18
+ ];
19
+ exports.READ_ONLY_TOOL_NAMES = [...exports.ZERO_ARGUMENT_TOOL_NAMES, ...PARAMETERIZED_TOOL_NAMES];
20
+ const READ_ONLY_TOOL_ANNOTATIONS = {
21
+ readOnlyHint: true,
22
+ destructiveHint: false,
23
+ idempotentHint: true,
24
+ };
25
+ exports.EMPTY_INPUT_SCHEMA = zod_1.z.object({}).strict();
26
+ exports.EMPTY_INPUT_SCHEMA_JSON = {
27
+ $schema: 'http://json-schema.org/draft-07/schema#',
28
+ additionalProperties: false,
29
+ properties: {},
30
+ type: 'object',
31
+ };
32
+ function createJsonResult(payload) {
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: JSON.stringify(payload, null, 2),
38
+ },
39
+ ],
40
+ };
41
+ }
42
+ /**
43
+ * Build and configure an MCP server with Oda tools.
44
+ *
45
+ * @param client - An Oda client instance for read-only operations.
46
+ */
47
+ function createOdaMcpServer(client, options = {}) {
48
+ const server = new mcp_js_1.McpServer({
49
+ name: 'oda-agent',
50
+ version: '0.1.0',
51
+ });
52
+ server.registerTool('oda_auth_status', {
53
+ description: 'Report whether the MCP server has Oda credentials configured and authenticated.',
54
+ inputSchema: exports.EMPTY_INPUT_SCHEMA,
55
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
56
+ }, async () => createJsonResult(options.authStatus ?? {
57
+ configured: false,
58
+ authenticated: false,
59
+ }));
60
+ server.registerTool('oda_search_products', {
61
+ description: 'Search Oda grocery for products matching a query string.',
62
+ inputSchema: zod_1.z.object({
63
+ query: zod_1.z.string().min(1).describe('The search term, e.g. "oat milk"'),
64
+ }),
65
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
66
+ }, async ({ query }) => createJsonResult(await client.searchProducts(query)));
67
+ server.registerTool('oda_get_product', {
68
+ description: 'Retrieve a single Oda product by product ID.',
69
+ inputSchema: zod_1.z.object({
70
+ productId: zod_1.z.number().int().positive().describe('The Oda product ID'),
71
+ }),
72
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
73
+ }, async ({ productId }) => createJsonResult(await client.getProduct(productId)));
74
+ server.registerTool('oda_get_product_image', {
75
+ description: 'Retrieve the image metadata for a single Oda product.',
76
+ inputSchema: zod_1.z.object({
77
+ productId: zod_1.z.number().int().positive().describe('The Oda product ID'),
78
+ }),
79
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
80
+ }, async ({ productId }) => {
81
+ const product = await client.getProduct(productId);
82
+ return createJsonResult({
83
+ productId: product.id,
84
+ front_url: product.front_url,
85
+ images: product.images,
86
+ });
87
+ });
88
+ server.registerTool('oda_get_cart', {
89
+ description: 'Retrieve the current Oda shopping cart.',
90
+ inputSchema: exports.EMPTY_INPUT_SCHEMA,
91
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
92
+ }, async () => createJsonResult(await client.getCart()));
93
+ server.registerTool('oda_get_orders', {
94
+ description: 'Retrieve a page of past Oda orders.',
95
+ inputSchema: zod_1.z.object({
96
+ page: zod_1.z.number().int().positive().default(1).describe('Page number (default: 1)'),
97
+ }),
98
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
99
+ }, async ({ page }) => createJsonResult(await client.getOrders(page)));
100
+ server.registerTool('oda_get_order_details', {
101
+ description: 'Retrieve a single Oda order by order ID.',
102
+ inputSchema: zod_1.z.object({
103
+ orderId: zod_1.z.number().int().positive().describe('The Oda order ID'),
104
+ }),
105
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
106
+ }, async ({ orderId }) => createJsonResult(await client.getOrder(orderId)));
107
+ server.registerTool('oda_get_shopping_lists', {
108
+ description: 'Retrieve saved Oda shopping lists.',
109
+ inputSchema: exports.EMPTY_INPUT_SCHEMA,
110
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
111
+ }, async () => createJsonResult(await client.getShoppingLists()));
112
+ server.registerTool('oda_get_delivery_slots', {
113
+ description: 'Retrieve Oda delivery slot availability.',
114
+ inputSchema: exports.EMPTY_INPUT_SCHEMA,
115
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
116
+ }, async () => createJsonResult(await client.getDeliverySlots()));
117
+ return server;
118
+ }
119
+ exports.createOdaMcpServer = createOdaMcpServer;
120
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@oda-agent/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP server exposing Oda operations as AI tools",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc --project tsconfig.json",
12
+ "clean": "rm -rf dist *.tsbuildinfo",
13
+ "lint": "eslint src --ext .ts",
14
+ "typecheck": "tsc --project tsconfig.json --noEmit",
15
+ "test": "jest",
16
+ "start": "node dist/main.js"
17
+ },
18
+ "dependencies": {
19
+ "@modelcontextprotocol/sdk": "^1.10.0",
20
+ "@oda-agent/core": "*",
21
+ "dotenv": "^16.4.0",
22
+ "zod": "^3.23.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/jest": "^29.5.0",
26
+ "jest": "^29.7.0",
27
+ "ts-jest": "^29.2.0"
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/dinorastoder/oda-agent-kit.git"
32
+ },
33
+ "license": "MIT"
34
+ }