@o3r/mcp 14.0.0-next.2 → 14.0.0-next.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.
package/README.md CHANGED
@@ -6,6 +6,9 @@
6
6
  <br />
7
7
  <br />
8
8
 
9
+ > [!WARNING]
10
+ > [Experimental](https://github.com/AmadeusITGroup/otter/blob/main/README.md#experimental)
11
+
9
12
  ## Description
10
13
 
11
14
  A small example of an MCP server.
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@o3r/mcp",
3
- "version": "14.0.0-next.2",
3
+ "version": "14.0.0-next.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "description": "This module provides a MCP Server",
7
+ "description": "Experimental package — This module provides a MCP Server",
8
8
  "keywords": [
9
9
  "mcp",
10
10
  "otter",
11
11
  "otter-module"
12
12
  ],
13
13
  "bin": {
14
- "o3r-mcp-start": "./cli/index.js"
14
+ "o3r-mcp-start": "./src/cli/index.js"
15
15
  },
16
- "main": "./cli/index.js",
16
+ "main": "./src/cli/index.js",
17
17
  "scripts": {
18
18
  "nx": "nx",
19
19
  "ng": "yarn nx",
@@ -22,56 +22,60 @@
22
22
  "compile": "tsc -b ./tsconfig.build.json && yarn copy:resources && yarn cpy package.json dist && patch-package-json-main"
23
23
  },
24
24
  "dependencies": {
25
- "@modelcontextprotocol/sdk": "~1.17.0",
25
+ "@ama-mcp/angular": "^14.0.0-next.4",
26
+ "@ama-mcp/core": "^14.0.0-next.4",
27
+ "@ama-mcp/github": "^14.0.0-next.4",
28
+ "@ama-mcp/otter": "^14.0.0-next.4",
29
+ "@modelcontextprotocol/sdk": "~1.20.0",
30
+ "@octokit/rest": "~22.0.0",
26
31
  "tslib": "^2.6.2",
27
32
  "zod": "~3.25.76"
28
33
  },
29
34
  "devDependencies": {
30
- "@angular/common": "~20.2.0",
31
- "@angular/compiler": "~20.2.0",
32
- "@angular/compiler-cli": "~20.2.0",
33
- "@angular/core": "~20.2.0",
34
- "@angular/platform-browser": "~20.2.0",
35
- "@angular/platform-browser-dynamic": "~20.2.0",
35
+ "@angular-devkit/architect": "~0.2003.11",
36
+ "@angular-devkit/schematics": "~20.3.11",
37
+ "@angular/common": "~20.3.13",
38
+ "@angular/compiler": "~20.3.13",
39
+ "@angular/compiler-cli": "~20.3.13",
40
+ "@angular/core": "~20.3.13",
41
+ "@angular/platform-browser": "~20.3.13",
42
+ "@angular/platform-browser-dynamic": "~20.3.13",
36
43
  "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
37
- "@nx/eslint": "~21.5.0",
38
- "@nx/eslint-plugin": "~21.5.0",
39
- "@nx/jest": "~21.5.0",
40
- "@nx/js": "~21.5.0",
41
- "@o3r/build-helpers": "^14.0.0-next.2",
42
- "@o3r/eslint-config": "^14.0.0-next.2",
43
- "@o3r/eslint-plugin": "^14.0.0-next.2",
44
- "@o3r/test-helpers": "^14.0.0-next.2",
45
- "@stylistic/eslint-plugin": "~5.3.0",
46
- "@types/jest": "~29.5.2",
47
- "@types/node": "~22.0.0",
48
- "@typescript-eslint/parser": "~8.43.0",
49
- "angular-eslint": "~20.2.0",
44
+ "@nx/eslint": "~21.6.0",
45
+ "@nx/eslint-plugin": "~21.6.0",
46
+ "@nx/jest": "~21.6.0",
47
+ "@nx/js": "~21.6.0",
48
+ "@o3r/build-helpers": "~14.0.0-next.4",
49
+ "@o3r/eslint-config": "~14.0.0-next.4",
50
+ "@o3r/eslint-plugin": "~14.0.0-next.4",
51
+ "@o3r/test-helpers": "~14.0.0-next.4",
52
+ "@stylistic/eslint-plugin": "~5.6.0",
53
+ "@types/jest": "~30.0.0",
54
+ "@types/node": "~22.18.0",
55
+ "@typescript-eslint/parser": "~8.47.0",
56
+ "angular-eslint": "~20.6.0",
50
57
  "cpy-cli": "^6.0.0",
51
- "eslint": "~9.35.0",
58
+ "eslint": "~9.39.0",
52
59
  "eslint-import-resolver-node": "~0.3.9",
53
60
  "eslint-import-resolver-typescript": "~4.4.0",
54
61
  "eslint-plugin-import": "~2.32.0",
55
62
  "eslint-plugin-import-newlines": "~1.4.0",
56
- "eslint-plugin-jest": "~29.0.0",
63
+ "eslint-plugin-jest": "~29.1.0",
57
64
  "eslint-plugin-jsdoc": "~54.7.0",
58
65
  "eslint-plugin-prefer-arrow": "~1.2.3",
59
66
  "eslint-plugin-unicorn": "~60.0.0",
60
- "eslint-plugin-unused-imports": "~4.2.0",
67
+ "eslint-plugin-unused-imports": "~4.3.0",
61
68
  "globals": "^16.0.0",
62
- "jest": "~29.7.0",
63
- "jest-environment-jsdom": "~29.7.0",
69
+ "jest": "~30.2.0",
64
70
  "jest-junit": "~16.0.0",
65
- "jest-preset-angular": "~14.6.0",
66
- "jest-util": "~29.7.0",
71
+ "jest-util": "~30.2.0",
67
72
  "jsonc-eslint-parser": "~2.4.0",
68
- "nx": "~21.5.0",
73
+ "nx": "~21.6.0",
69
74
  "rxjs": "^7.8.1",
70
75
  "ts-jest": "~29.4.0",
71
- "ts-node": "~10.9.2",
72
76
  "type-fest": "^4.30.1",
73
77
  "typescript": "~5.9.2",
74
- "typescript-eslint": "~8.43.0",
78
+ "typescript-eslint": "~8.47.0",
75
79
  "zone.js": "~0.15.0"
76
80
  },
77
81
  "engines": {
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Register the best practices tool and resources.
4
+ * @param server
5
+ * @param resourcesPath
6
+ */
7
+ export declare function registerBestPracticesToolAndResources(server: McpServer, resourcesPath: string): Promise<[PromiseSettledResult<void>, PromiseSettledResult<void>]>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/best-practices/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAuDjD;;;;GAIG;AACH,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qEAM7F"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerBestPracticesToolAndResources = registerBestPracticesToolAndResources;
4
+ const promises_1 = require("node:fs/promises");
5
+ const node_path_1 = require("node:path");
6
+ const core_1 = require("@ama-mcp/core");
7
+ const otter_1 = require("@ama-mcp/otter");
8
+ const uri = `${otter_1.RESOURCE_URI_PREFIX}://best-practices`;
9
+ async function registerBestPracticesResources(server, bestPracticesResourcesPath) {
10
+ const content = await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'output.md'), { encoding: 'utf8' });
11
+ core_1.resourceRegistry.set(uri, content);
12
+ server.registerResource('Best Practices Guide', uri, {
13
+ title: 'Otter Best Practices and Code Generation Guide',
14
+ description: await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'description.md'), { encoding: 'utf8' }),
15
+ mimeType: 'text/markdown'
16
+ }, () => ({ contents: [{ uri, text: content }] }));
17
+ }
18
+ async function registerBestPracticesTool(server, bestPracticesResourcesPath) {
19
+ server.registerTool('get_best_practices', {
20
+ title: 'Get Otter Coding Best Practices Guide',
21
+ description: await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'description.md'), { encoding: 'utf8' }),
22
+ annotations: {
23
+ readOnlyHint: true,
24
+ openWorldHint: false
25
+ }
26
+ }, () => ({
27
+ content: [
28
+ {
29
+ type: 'text',
30
+ text: core_1.resourceRegistry.get(uri) || 'Not found'
31
+ },
32
+ {
33
+ type: 'resource_link',
34
+ name: 'Best practices',
35
+ uri
36
+ }
37
+ ]
38
+ }));
39
+ }
40
+ /**
41
+ * Register the best practices tool and resources.
42
+ * @param server
43
+ * @param resourcesPath
44
+ */
45
+ function registerBestPracticesToolAndResources(server, resourcesPath) {
46
+ const bestPracticesResourcesPath = (0, node_path_1.join)(resourcesPath, 'best-practices');
47
+ return Promise.allSettled([
48
+ registerBestPracticesResources(server, bestPracticesResourcesPath),
49
+ registerBestPracticesTool(server, bestPracticesResourcesPath)
50
+ ]);
51
+ }
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/best-practices/index.ts"],"names":[],"mappings":";;AA0EA,sFAMC;AAhFD,+CAE0B;AAC1B,yCAEmB;AACnB,wCAEuB;AACvB,0CAEwB;AAKxB,MAAM,GAAG,GAAG,GAAG,2BAAmB,mBAAmB,CAAC;AAEtD,KAAK,UAAU,8BAA8B,CAAC,MAAiB,EAAE,0BAAkC;IACjG,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAC5B,IAAA,gBAAI,EAAC,0BAA0B,EAAE,WAAW,CAAC,EAC7C,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,uBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,gBAAgB,CACrB,sBAAsB,EACtB,GAAG,EACH;QACE,KAAK,EAAE,gDAAgD;QACvD,WAAW,EAAE,MAAM,IAAA,mBAAQ,EACzB,IAAA,gBAAI,EAAC,0BAA0B,EAAE,gBAAgB,CAAC,EAClD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB;QACD,QAAQ,EAAE,eAAe;KAC1B,EACD,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,MAAiB,EAAE,0BAAkC;IAC5F,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EAAE,MAAM,IAAA,mBAAQ,EACzB,IAAA,gBAAI,EAAC,0BAA0B,EAAE,gBAAgB,CAAC,EAClD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW;aAC/C;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,gBAAgB;gBACtB,GAAG;aACJ;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qCAAqC,CAAC,MAAiB,EAAE,aAAqB;IAC5F,MAAM,0BAA0B,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC,UAAU,CAAC;QACxB,8BAA8B,CAAC,MAAM,EAAE,0BAA0B,CAAC;QAClE,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ const core_1 = require("@ama-mcp/core");
4
5
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
5
6
  const mcp_server_1 = require("../mcp-server");
6
7
  async function startMcpServer() {
7
- const server = await (0, mcp_server_1.createMcpServer)();
8
+ const logger = new core_1.MCPLogger('O3R MCP server', process.env.O3R_MCP_LOG_LEVEL);
9
+ const server = await (0, mcp_server_1.createMcpServer)(logger);
8
10
  const transport = new stdio_js_1.StdioServerTransport();
9
11
  await server.connect(transport);
10
- // Logging as error as recommended by modelcontextprotocol.io (https://modelcontextprotocol.io/quickstart/server#quick-examples-2)
11
- console.error('Server connected...');
12
+ logger.info('Server connected...');
12
13
  }
13
14
  void startMcpServer();
14
15
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";;;AACA,wCAGuB;AACvB,wEAEmD;AACnD,8CAEuB;AAEvB,KAAK,UAAU,cAAc;IAC3B,MAAM,MAAM,GAAG,IAAI,gBAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAA6B,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAe,EAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,cAAc,EAAE,CAAC"}
@@ -5,4 +5,4 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
5
  * @param resourcesPath
6
6
  */
7
7
  export declare function registerCreateMonorepoWithAppTool(server: McpServer, resourcesPath: string): Promise<void>;
8
- //# sourceMappingURL=create-monorepo-with-app.d.ts.map
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/create-monorepo-with-app/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAKjD;;;;GAIG;AACH,wBAAsB,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/G"}
@@ -35,4 +35,4 @@ async function registerCreateMonorepoWithAppTool(server, resourcesPath) {
35
35
  };
36
36
  });
37
37
  }
38
- //# sourceMappingURL=create-monorepo-with-app.js.map
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/create-monorepo-with-app/index.ts"],"names":[],"mappings":";;AAkBA,8EA8BC;AAhDD,+CAE0B;AAC1B,yCAEmB;AAInB,6BAEa;AAEb;;;;GAIG;AACI,KAAK,UAAU,iCAAiC,CAAC,MAAiB,EAAE,aAAqB;IAC9F,MAAM,mBAAmB,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5G,MAAM,yBAAyB,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAClI,MAAM,0BAA0B,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACpI,MAAM,YAAY,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAElG,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE;YACX,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC9D,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE;SAC5E;KACF,EACD,CAAC,EAAE,cAAc,EAAE,eAAe,GAAG,UAAU,EAAE,EAAE,EAAE;QACnD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY;yBACf,UAAU,CAAC,kBAAkB,EAAE,cAAc,CAAC;yBAC9C,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC;iBACpD;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { MCPLogger } from '@ama-mcp/core';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ /**
4
+ * Create an MCP server instance.
5
+ * @param logger
6
+ */
7
+ export declare function createMcpServer(logger: MCPLogger): Promise<McpServer>;
8
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,eAAe,CAAC;AAavB,OAAO,EACL,SAAS,EACV,MAAM,yCAAyC,CAAC;AAQjD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CA8C3E"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMcpServer = createMcpServer;
4
+ const promises_1 = require("node:fs/promises");
5
+ const node_path_1 = require("node:path");
6
+ const angular_1 = require("@ama-mcp/angular");
7
+ const github_1 = require("@ama-mcp/github");
8
+ const otter_1 = require("@ama-mcp/otter");
9
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
10
+ const best_practices_1 = require("./best-practices");
11
+ const create_monorepo_with_app_1 = require("./create-monorepo-with-app");
12
+ /**
13
+ * Create an MCP server instance.
14
+ * @param logger
15
+ */
16
+ async function createMcpServer(logger) {
17
+ const { name, version } = JSON.parse(await (0, promises_1.readFile)((0, node_path_1.join)(__dirname, '..', 'package.json'), 'utf8'));
18
+ const server = new mcp_js_1.McpServer({
19
+ name,
20
+ version,
21
+ capabilities: {
22
+ resources: {},
23
+ tools: {}
24
+ }
25
+ });
26
+ const resourcesPath = (0, node_path_1.join)(__dirname, '..', 'resources');
27
+ const githubToken = process.env.O3R_MCP_GITHUB_TOKEN;
28
+ const cacheDirPath = process.env.O3R_MCP_CACHE_PATH || '.cache/@o3r/mcp';
29
+ await Promise.allSettled([
30
+ (0, best_practices_1.registerBestPracticesToolAndResources)(server, resourcesPath),
31
+ (0, create_monorepo_with_app_1.registerCreateMonorepoWithAppTool)(server, resourcesPath),
32
+ Promise.resolve((0, angular_1.registerAngularSchematicsTool)(server, {})),
33
+ ...(githubToken
34
+ ? [
35
+ (0, github_1.registerGetRepositoriesUsingLibraryTool)(server, {
36
+ libraryName: otter_1.LIBRARY_NAME,
37
+ scopes: otter_1.NPM_PACKAGES_SCOPES,
38
+ githubToken,
39
+ cacheFilePath: (0, node_path_1.resolve)(cacheDirPath, 'repos-using-otter.json'),
40
+ cacheEntryExpireAfterDays: Number.isNaN(process.env.O3R_MCP_CACHE_MAX_AGE) ? undefined : +(process.env.O3R_MCP_CACHE_MAX_AGE)
41
+ }),
42
+ (0, github_1.registerSupportedReleasesTool)(server, {
43
+ githubToken,
44
+ owner: otter_1.GITHUB_OWNER,
45
+ repo: otter_1.GITHUB_REPOSITORY_NAME,
46
+ libraryName: otter_1.LIBRARY_NAME
47
+ }),
48
+ (0, github_1.registerReleaseNotes)(server, {
49
+ githubToken,
50
+ owner: otter_1.GITHUB_OWNER,
51
+ repo: otter_1.GITHUB_REPOSITORY_NAME,
52
+ libraryName: otter_1.LIBRARY_NAME,
53
+ uriPrefix: otter_1.RESOURCE_URI_PREFIX
54
+ })
55
+ ]
56
+ : [
57
+ () => logger.error('Missing O3R_MCP_GITHUB_TOKEN environment variable for github tools')
58
+ ])
59
+ ]);
60
+ return server;
61
+ }
62
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":";;AAuCA,0CA8CC;AArFD,+CAE0B;AAC1B,yCAGmB;AACnB,8CAE0B;AAI1B,4CAIyB;AACzB,0CAMwB;AACxB,oEAEiD;AACjD,qDAE0B;AAC1B,yEAEoC;AAEpC;;;GAGG;AACI,KAAK,UAAU,eAAe,CAAC,MAAiB;IACrD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAsC,CAAC;IACzI,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI;QACJ,OAAO;QACP,YAAY,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;SACV;KACF,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACrD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC;IAEzE,MAAM,OAAO,CAAC,UAAU,CAAC;QACvB,IAAA,sDAAqC,EAAC,MAAM,EAAE,aAAa,CAAC;QAC5D,IAAA,4DAAiC,EAAC,MAAM,EAAE,aAAa,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,IAAA,uCAA6B,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1D,GAAG,CAAC,WAAW;YACb,CAAC,CAAC;gBACA,IAAA,gDAAuC,EAAC,MAAM,EAAE;oBAC9C,WAAW,EAAX,oBAAW;oBACX,MAAM,EAAE,2BAAY;oBACpB,WAAW;oBACX,aAAa,EAAE,IAAA,mBAAO,EAAC,YAAY,EAAE,wBAAwB,CAAC;oBAC9D,yBAAyB,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAsB,CAAC;iBAC/H,CAAC;gBACF,IAAA,sCAA6B,EAAC,MAAM,EAAE;oBACpC,WAAW;oBACX,KAAK,EAAL,oBAAK;oBACL,IAAI,EAAJ,8BAAI;oBACJ,WAAW,EAAX,oBAAW;iBACZ,CAAC;gBACF,IAAA,6BAAoB,EAAC,MAAM,EAAE;oBAC3B,WAAW;oBACX,KAAK,EAAL,oBAAK;oBACL,IAAI,EAAJ,8BAAI;oBACJ,WAAW,EAAX,oBAAW;oBACX,SAAS,EAAT,2BAAS;iBACV,CAAC;aACH;YACD,CAAC,CAAC;gBACA,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC;aACzF,CAAC;KACL,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/cli/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AACA,wEAEmD;AACnD,8CAEuB;AAEvB,KAAK,UAAU,cAAc;IAC3B,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAe,GAAE,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,kIAAkI;IAClI,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,cAAc,EAAE,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- /**
3
- * Register resources for best practices
4
- * @param server
5
- * @param resourcesPath
6
- */
7
- export declare function registerBestPracticesResources(server: McpServer, resourcesPath: string): Promise<void>;
8
- //# sourceMappingURL=best-practices.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"best-practices.d.ts","sourceRoot":"","sources":["../../src/instructions/best-practices.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB5G"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerBestPracticesResources = registerBestPracticesResources;
4
- const promises_1 = require("node:fs/promises");
5
- const node_path_1 = require("node:path");
6
- /**
7
- * Register resources for best practices
8
- * @param server
9
- * @param resourcesPath
10
- */
11
- async function registerBestPracticesResources(server, resourcesPath) {
12
- const bestPracticesResourcesPath = (0, node_path_1.join)(resourcesPath, 'best-practices');
13
- const name = 'instructions';
14
- const uri = `${name}://best-practices`;
15
- server.registerResource(name, uri, {
16
- title: 'Otter Best Practices and Code Generation Guide',
17
- description: await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'description.md'), { encoding: 'utf8' }),
18
- mimeType: 'text/markdown'
19
- }, async () => {
20
- const text = await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'output.md'), { encoding: 'utf8' });
21
- return { contents: [{ uri, text }] };
22
- });
23
- }
24
- //# sourceMappingURL=best-practices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"best-practices.js","sourceRoot":"","sources":["../../src/instructions/best-practices.ts"],"names":[],"mappings":";;AAeA,wEAwBC;AAvCD,+CAE0B;AAC1B,yCAEmB;AAKnB;;;;GAIG;AACI,KAAK,UAAU,8BAA8B,CAAC,MAAiB,EAAE,aAAqB;IAC3F,MAAM,0BAA0B,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,cAAc,CAAC;IAC5B,MAAM,GAAG,GAAG,GAAG,IAAI,mBAAmB,CAAC;IACvC,MAAM,CAAC,gBAAgB,CACrB,IAAI,EACJ,GAAG,EACH;QACE,KAAK,EAAE,gDAAgD;QACvD,WAAW,EAAE,MAAM,IAAA,mBAAQ,EACzB,IAAA,gBAAI,EAAC,0BAA0B,EAAE,gBAAgB,CAAC,EAClD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB;QACD,QAAQ,EAAE,eAAe;KAC1B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAQ,EACzB,IAAA,gBAAI,EAAC,0BAA0B,EAAE,WAAW,CAAC,EAC7C,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;QAEF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACvC,CAAC,CACF,CAAC;AACJ,CAAC"}
package/mcp-server.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- /**
3
- * Create an MCP server instance.
4
- */
5
- export declare function createMcpServer(): Promise<McpServer>;
6
- //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,SAAS,EACV,MAAM,yCAAyC,CAAC;AAWjD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CAiB1D"}
package/mcp-server.js DELETED
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMcpServer = createMcpServer;
4
- const promises_1 = require("node:fs/promises");
5
- const node_path_1 = require("node:path");
6
- const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
7
- const best_practices_1 = require("./instructions/best-practices");
8
- const best_practices_2 = require("./tools/best-practices");
9
- const create_monorepo_with_app_1 = require("./tools/create-monorepo-with-app");
10
- /**
11
- * Create an MCP server instance.
12
- */
13
- async function createMcpServer() {
14
- const { name, version } = JSON.parse(await (0, promises_1.readFile)((0, node_path_1.join)(__dirname, '..', 'package.json'), 'utf8'));
15
- const server = new mcp_js_1.McpServer({
16
- name,
17
- version,
18
- capabilities: {
19
- resources: {},
20
- tools: {}
21
- }
22
- });
23
- const resourcesPath = (0, node_path_1.join)(__dirname, 'resources');
24
- await (0, best_practices_1.registerBestPracticesResources)(server, resourcesPath);
25
- await (0, best_practices_2.registerBestPracticesTool)(server, resourcesPath);
26
- await (0, create_monorepo_with_app_1.registerCreateMonorepoWithAppTool)(server, resourcesPath);
27
- return server;
28
- }
29
- //# sourceMappingURL=mcp-server.js.map
package/mcp-server.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";;AAsBA,0CAiBC;AAvCD,+CAE0B;AAC1B,yCAEmB;AACnB,oEAEiD;AACjD,kEAEuC;AACvC,2DAEgC;AAChC,+EAE0C;AAE1C;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAsC,CAAC;IACzI,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI;QACJ,OAAO;QACP,YAAY,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;SACV;KACF,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEnD,MAAM,IAAA,+CAA8B,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,IAAA,0CAAyB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM,IAAA,4DAAiC,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- /**
3
- * Register the best practices tool.
4
- * @param server
5
- * @param resourcesPath
6
- */
7
- export declare function registerBestPracticesTool(server: McpServer, resourcesPath: string): Promise<void>;
8
- //# sourceMappingURL=best-practices.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"best-practices.d.ts","sourceRoot":"","sources":["../../src/tools/best-practices.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BvG"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerBestPracticesTool = registerBestPracticesTool;
4
- const promises_1 = require("node:fs/promises");
5
- const node_path_1 = require("node:path");
6
- /**
7
- * Register the best practices tool.
8
- * @param server
9
- * @param resourcesPath
10
- */
11
- async function registerBestPracticesTool(server, resourcesPath) {
12
- const bestPracticesResourcesPath = (0, node_path_1.join)(resourcesPath, 'best-practices');
13
- server.registerTool('get_best_practices', {
14
- title: 'Get Otter Coding Best Practices Guide',
15
- description: await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'description.md'), { encoding: 'utf8' }),
16
- annotations: {
17
- readOnlyHint: true,
18
- openWorldHint: false
19
- }
20
- }, async () => {
21
- const bestPractices = await (0, promises_1.readFile)((0, node_path_1.join)(bestPracticesResourcesPath, 'output.md'), { encoding: 'utf8' });
22
- const developer = await (0, promises_1.readFile)((0, node_path_1.join)(resourcesPath, 'developer.md'), { encoding: 'utf8' });
23
- const text = [developer, bestPractices].join('\n\n');
24
- return { content: [{ type: 'text', text }] };
25
- });
26
- }
27
- //# sourceMappingURL=best-practices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"best-practices.js","sourceRoot":"","sources":["../../src/tools/best-practices.ts"],"names":[],"mappings":";;AAeA,8DA+BC;AA9CD,+CAE0B;AAC1B,yCAEmB;AAKnB;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAAC,MAAiB,EAAE,aAAqB;IACtF,MAAM,0BAA0B,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAEzE,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EAAE,MAAM,IAAA,mBAAQ,EACzB,IAAA,gBAAI,EAAC,0BAA0B,EAAE,gBAAgB,CAAC,EAClD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAQ,EAClC,IAAA,gBAAI,EAAC,0BAA0B,EAAE,WAAW,CAAC,EAC7C,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,IAAA,mBAAQ,EAC9B,IAAA,gBAAI,EAAC,aAAa,EAAE,cAAc,CAAC,EACnC,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;QAEF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-monorepo-with-app.d.ts","sourceRoot":"","sources":["../../src/tools/create-monorepo-with-app.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EACV,MAAM,yCAAyC,CAAC;AAKjD;;;;GAIG;AACH,wBAAsB,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/G"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-monorepo-with-app.js","sourceRoot":"","sources":["../../src/tools/create-monorepo-with-app.ts"],"names":[],"mappings":";;AAkBA,8EA8BC;AAhDD,+CAE0B;AAC1B,yCAEmB;AAInB,6BAEa;AAEb;;;;GAIG;AACI,KAAK,UAAU,iCAAiC,CAAC,MAAiB,EAAE,aAAqB;IAC9F,MAAM,mBAAmB,GAAG,IAAA,gBAAI,EAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5G,MAAM,yBAAyB,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAClI,MAAM,0BAA0B,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACpI,MAAM,YAAY,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,mBAAmB,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAElG,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE;YACX,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC9D,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE;SAC5E;KACF,EACD,CAAC,EAAE,cAAc,EAAE,eAAe,GAAG,UAAU,EAAE,EAAE,EAAE;QACnD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY;yBACf,UAAU,CAAC,kBAAkB,EAAE,cAAc,CAAC;yBAC9C,UAAU,CAAC,mBAAmB,EAAE,eAAe,CAAC;iBACpD;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
File without changes