Skip to content

Commit c138c1e

Browse files
committed
WIP:
1 parent 3bf00e6 commit c138c1e

File tree

8 files changed

+144
-56
lines changed

8 files changed

+144
-56
lines changed

package.json

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,41 @@
22
"name": "mongodb-mcp-server",
33
"description": "MongoDB Model Context Protocol Server",
44
"version": "0.1.3",
5-
"main": "dist/index.js",
5+
"main": "dist/cjs/index.js",
6+
"module": "dist/esm/index.js",
7+
"types": "dist/cjs/index.d.ts",
8+
"exports": {
9+
".": {
10+
"import": {
11+
"types": "./dist/esm/index.d.ts",
12+
"default": "./dist/esm/index.js"
13+
},
14+
"require": {
15+
"types": "./dist/cjs/index.d.ts",
16+
"default": "./dist/cjs/index.js"
17+
}
18+
}
19+
},
620
"author": "MongoDB <[email protected]>",
721
"homepage": "https://github.com/mongodb-js/mongodb-mcp-server",
822
"repository": {
923
"url": "https://github.com/mongodb-js/mongodb-mcp-server.git"
1024
},
1125
"bin": {
12-
"mongodb-mcp-server": "dist/index.js"
26+
"mongodb-mcp-server": "dist/cjs/index.js"
1327
},
1428
"publishConfig": {
1529
"access": "public"
1630
},
17-
"type": "module",
1831
"scripts": {
1932
"prepare": "npm run build",
2033
"build:clean": "rm -rf dist",
21-
"build:compile": "tsc --project tsconfig.build.json",
22-
"build:chmod": "chmod +x dist/index.js",
23-
"build": "npm run build:clean && npm run build:compile && npm run build:chmod",
24-
"inspect": "npm run build && mcp-inspector -- dist/index.js",
34+
"build:esm": "tsc --project tsconfig.esm.json",
35+
"build:cjs": "tsc --project tsconfig.cjs.json",
36+
"build:package-json": "echo '{\"type\":\"module\"}' > dist/esm/package.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
37+
"build:chmod": "chmod +x dist/cjs/index.js",
38+
"build": "npm run build:clean && npm run build:esm && npm run build:cjs && npm run build:package-json && npm run build:chmod",
39+
"inspect": "npm run build && mcp-inspector -- dist/cjs/index.js",
2540
"prettier": "prettier",
2641
"check": "npm run build && npm run check:types && npm run check:lint && npm run check:format",
2742
"check:lint": "eslint .",

src/common/packageInfo.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
1-
import packageJson from "../../package.json" with { type: "json" };
1+
import { readFileSync } from "fs";
2+
import { join } from "path";
3+
4+
let packageJson: {
5+
version: string;
6+
} = { version: "unknown" };
7+
8+
try {
9+
packageJson = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf-8")) as {
10+
version: string;
11+
};
12+
} catch (error) {
13+
console.error("Error getting package info", error);
14+
}
215

316
export const packageInfo = {
4-
version: packageJson.version,
17+
version: packageJson?.version,
518
mcpServerName: "MongoDB MCP Server",
619
};

src/index.ts

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -9,50 +9,54 @@ import { packageInfo } from "./common/packageInfo.js";
99
import { Telemetry } from "./telemetry/telemetry.js";
1010
import { createEJsonTransport } from "./helpers/EJsonTransport.js";
1111

12-
try {
13-
const session = new Session({
14-
apiBaseUrl: config.apiBaseUrl,
15-
apiClientId: config.apiClientId,
16-
apiClientSecret: config.apiClientSecret,
17-
});
18-
const mcpServer = new McpServer({
19-
name: packageInfo.mcpServerName,
20-
version: packageInfo.version,
21-
});
22-
23-
const telemetry = Telemetry.create(session, config);
24-
25-
const server = new Server({
26-
mcpServer,
27-
session,
28-
telemetry,
29-
userConfig: config,
30-
});
31-
32-
const transport = createEJsonTransport();
33-
34-
const shutdown = () => {
35-
logger.info(LogId.serverCloseRequested, "server", `Server close requested`);
36-
37-
server
38-
.close()
39-
.then(() => {
40-
logger.info(LogId.serverClosed, "server", `Server closed successfully`);
41-
process.exit(0);
42-
})
43-
.catch((err: unknown) => {
44-
const error = err instanceof Error ? err : new Error(String(err));
45-
logger.error(LogId.serverCloseFailure, "server", `Error closing server: ${error.message}`);
46-
process.exit(1);
47-
});
48-
};
49-
50-
process.once("SIGINT", shutdown);
51-
process.once("SIGTERM", shutdown);
52-
process.once("SIGQUIT", shutdown);
53-
54-
await server.connect(transport);
55-
} catch (error: unknown) {
56-
logger.emergency(LogId.serverStartFailure, "server", `Fatal error running server: ${error as string}`);
57-
process.exit(1);
12+
async function main() {
13+
try {
14+
const session = new Session({
15+
apiBaseUrl: config.apiBaseUrl,
16+
apiClientId: config.apiClientId,
17+
apiClientSecret: config.apiClientSecret,
18+
});
19+
const mcpServer = new McpServer({
20+
name: packageInfo.mcpServerName,
21+
version: packageInfo.version,
22+
});
23+
24+
const telemetry = Telemetry.create(session, config);
25+
26+
const server = new Server({
27+
mcpServer,
28+
session,
29+
telemetry,
30+
userConfig: config,
31+
});
32+
33+
const transport = createEJsonTransport();
34+
35+
const shutdown = () => {
36+
logger.info(LogId.serverCloseRequested, "server", `Server close requested`);
37+
38+
server
39+
.close()
40+
.then(() => {
41+
logger.info(LogId.serverClosed, "server", `Server closed successfully`);
42+
process.exit(0);
43+
})
44+
.catch((err: unknown) => {
45+
const error = err instanceof Error ? err : new Error(String(err));
46+
logger.error(LogId.serverCloseFailure, "server", `Error closing server: ${error.message}`);
47+
process.exit(1);
48+
});
49+
};
50+
51+
process.once("SIGINT", shutdown);
52+
process.once("SIGTERM", shutdown);
53+
process.once("SIGQUIT", shutdown);
54+
55+
await server.connect(transport);
56+
} catch (error: unknown) {
57+
logger.emergency(LogId.serverStartFailure, "server", `Fatal error running server: ${error as string}`);
58+
process.exit(1);
59+
}
5860
}
61+
62+
void main();

test-dual-modules.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Test CommonJS
2+
try {
3+
const cjsModule = require("./dist/cjs/index.js");
4+
console.log("✅ CommonJS require works:", typeof cjsModule);
5+
} catch (error) {
6+
console.log("❌ CommonJS require failed:", error.message);
7+
}
8+
9+
// Test ESM
10+
import("./dist/esm/index.js")
11+
.then((esmModule) => {
12+
console.log("✅ ESM import works:", typeof esmModule);
13+
})
14+
.catch((error) => {
15+
console.log("❌ ESM import failed:", error.message);
16+
});

tsconfig.build.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
"allowSyntheticDefaultImports": true,
1717
"typeRoots": ["./node_modules/@types", "./src/types"]
1818
},
19-
"include": ["src/**/*.ts"]
19+
"include": ["src/**/*.ts", "package.json"]
2020
}

tsconfig.cjs.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "./tsconfig.build.json",
3+
"compilerOptions": {
4+
"module": "commonjs",
5+
"moduleResolution": "node",
6+
"outDir": "./dist/cjs",
7+
"declaration": true,
8+
"declarationMap": true
9+
}
10+
}

tsconfig.esm.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "./tsconfig.build.json",
3+
"compilerOptions": {
4+
"module": "esnext",
5+
"moduleResolution": "bundler",
6+
"outDir": "./dist/esm",
7+
"declaration": true,
8+
"declarationMap": true
9+
}
10+
}

tsconfig.vscode.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es2020",
4+
"module": "commonjs",
5+
"moduleResolution": "node",
6+
"rootDir": "./src",
7+
"outDir": "./dist",
8+
"strict": true,
9+
"strictNullChecks": true,
10+
"noUncheckedIndexedAccess": true,
11+
"esModuleInterop": true,
12+
"types": ["node"],
13+
"sourceMap": true,
14+
"skipLibCheck": true,
15+
"resolveJsonModule": true,
16+
"allowSyntheticDefaultImports": true,
17+
"typeRoots": ["./node_modules/@types", "./src/types"]
18+
},
19+
"include": ["src/**/*.ts"]
20+
}

0 commit comments

Comments
 (0)