mongodb-mcp-server 0.0.5 → 0.0.6
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/.github/CODEOWNERS +3 -0
- package/.github/dependabot.yml +10 -0
- package/.github/workflows/code_health.yaml +9 -27
- package/.github/workflows/code_health_fork.yaml +106 -0
- package/.github/workflows/codeql.yml +34 -0
- package/.github/workflows/lint.yml +37 -0
- package/.github/workflows/prepare_release.yaml +5 -3
- package/.github/workflows/publish.yaml +6 -3
- package/.prettierrc.json +1 -1
- package/README.md +16 -0
- package/dist/common/atlas/apiClient.js +1 -5
- package/dist/common/atlas/apiClient.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/logger.js +20 -1
- package/dist/logger.js.map +1 -1
- package/dist/server.js +44 -3
- package/dist/server.js.map +1 -1
- package/dist/session.js +50 -5
- package/dist/session.js.map +1 -1
- package/dist/telemetry/constants.js.map +1 -1
- package/dist/telemetry/telemetry.js +7 -6
- package/dist/telemetry/telemetry.js.map +1 -1
- package/dist/tools/atlas/{createAccessList.js → create/createAccessList.js} +1 -1
- package/dist/tools/atlas/create/createAccessList.js.map +1 -0
- package/dist/tools/atlas/{createDBUser.js → create/createDBUser.js} +1 -1
- package/dist/tools/atlas/create/createDBUser.js.map +1 -0
- package/dist/tools/atlas/{createFreeCluster.js → create/createFreeCluster.js} +5 -2
- package/dist/tools/atlas/create/createFreeCluster.js.map +1 -0
- package/dist/tools/atlas/{createProject.js → create/createProject.js} +1 -1
- package/dist/tools/atlas/create/createProject.js.map +1 -0
- package/dist/tools/atlas/metadata/connectCluster.js +97 -0
- package/dist/tools/atlas/metadata/connectCluster.js.map +1 -0
- package/dist/tools/atlas/{inspectAccessList.js → read/inspectAccessList.js} +1 -1
- package/dist/tools/atlas/read/inspectAccessList.js.map +1 -0
- package/dist/tools/atlas/{inspectCluster.js → read/inspectCluster.js} +1 -1
- package/dist/tools/atlas/read/inspectCluster.js.map +1 -0
- package/dist/tools/atlas/{listClusters.js → read/listClusters.js} +1 -1
- package/dist/tools/atlas/read/listClusters.js.map +1 -0
- package/dist/tools/atlas/{listDBUsers.js → read/listDBUsers.js} +1 -1
- package/dist/tools/atlas/read/listDBUsers.js.map +1 -0
- package/dist/tools/atlas/{listOrgs.js → read/listOrgs.js} +1 -1
- package/dist/tools/atlas/read/listOrgs.js.map +1 -0
- package/dist/tools/atlas/{listProjects.js → read/listProjects.js} +1 -1
- package/dist/tools/atlas/read/listProjects.js.map +1 -0
- package/dist/tools/atlas/tools.js +12 -10
- package/dist/tools/atlas/tools.js.map +1 -1
- package/dist/tools/mongodb/create/insertMany.js +1 -1
- package/dist/tools/mongodb/create/insertMany.js.map +1 -1
- package/dist/tools/mongodb/delete/deleteMany.js +1 -2
- package/dist/tools/mongodb/delete/deleteMany.js.map +1 -1
- package/dist/tools/mongodb/metadata/connect.js +59 -71
- package/dist/tools/mongodb/metadata/connect.js.map +1 -1
- package/dist/tools/mongodb/mongodbTool.js +37 -30
- package/dist/tools/mongodb/mongodbTool.js.map +1 -1
- package/dist/tools/mongodb/read/aggregate.js +1 -1
- package/dist/tools/mongodb/read/aggregate.js.map +1 -1
- package/dist/tools/mongodb/read/count.js +1 -2
- package/dist/tools/mongodb/read/count.js.map +1 -1
- package/dist/tools/mongodb/read/find.js +2 -4
- package/dist/tools/mongodb/read/find.js.map +1 -1
- package/dist/tools/mongodb/tools.js +4 -2
- package/dist/tools/mongodb/tools.js.map +1 -1
- package/dist/tools/mongodb/update/updateMany.js +2 -4
- package/dist/tools/mongodb/update/updateMany.js.map +1 -1
- package/dist/tools/tool.js +30 -6
- package/dist/tools/tool.js.map +1 -1
- package/package.json +2 -2
- package/src/common/atlas/apiClient.ts +3 -11
- package/src/config.ts +12 -7
- package/src/errors.ts +1 -1
- package/src/index.ts +3 -3
- package/src/logger.ts +26 -1
- package/src/server.ts +60 -5
- package/src/session.ts +69 -6
- package/src/telemetry/constants.ts +2 -2
- package/src/telemetry/telemetry.ts +9 -21
- package/src/telemetry/types.ts +28 -11
- package/src/tools/atlas/{createAccessList.ts → create/createAccessList.ts} +2 -2
- package/src/tools/atlas/{createDBUser.ts → create/createDBUser.ts} +3 -3
- package/src/tools/atlas/{createFreeCluster.ts → create/createFreeCluster.ts} +7 -4
- package/src/tools/atlas/{createProject.ts → create/createProject.ts} +3 -3
- package/src/tools/atlas/metadata/connectCluster.ts +114 -0
- package/src/tools/atlas/{inspectAccessList.ts → read/inspectAccessList.ts} +2 -2
- package/src/tools/atlas/{inspectCluster.ts → read/inspectCluster.ts} +3 -3
- package/src/tools/atlas/{listClusters.ts → read/listClusters.ts} +3 -3
- package/src/tools/atlas/{listDBUsers.ts → read/listDBUsers.ts} +3 -3
- package/src/tools/atlas/{listOrgs.ts → read/listOrgs.ts} +2 -2
- package/src/tools/atlas/{listProjects.ts → read/listProjects.ts} +3 -3
- package/src/tools/atlas/tools.ts +12 -10
- package/src/tools/mongodb/create/insertMany.ts +1 -1
- package/src/tools/mongodb/delete/deleteMany.ts +1 -2
- package/src/tools/mongodb/metadata/connect.ts +78 -75
- package/src/tools/mongodb/mongodbTool.ts +40 -30
- package/src/tools/mongodb/read/aggregate.ts +1 -1
- package/src/tools/mongodb/read/count.ts +1 -2
- package/src/tools/mongodb/read/find.ts +2 -4
- package/src/tools/mongodb/tools.ts +4 -2
- package/src/tools/mongodb/update/updateMany.ts +2 -4
- package/src/tools/tool.ts +40 -13
- package/tests/integration/helpers.ts +13 -3
- package/tests/integration/server.test.ts +46 -20
- package/tests/integration/tools/atlas/atlasHelpers.ts +7 -5
- package/tests/integration/tools/atlas/clusters.test.ts +68 -4
- package/tests/integration/tools/mongodb/metadata/connect.test.ts +85 -100
- package/tests/integration/tools/mongodb/mongodbHelpers.ts +32 -21
- package/tests/unit/telemetry.test.ts +200 -0
- package/dist/tools/atlas/createAccessList.js.map +0 -1
- package/dist/tools/atlas/createDBUser.js.map +0 -1
- package/dist/tools/atlas/createFreeCluster.js.map +0 -1
- package/dist/tools/atlas/createProject.js.map +0 -1
- package/dist/tools/atlas/inspectAccessList.js.map +0 -1
- package/dist/tools/atlas/inspectCluster.js.map +0 -1
- package/dist/tools/atlas/listClusters.js.map +0 -1
- package/dist/tools/atlas/listDBUsers.js.map +0 -1
- package/dist/tools/atlas/listOrgs.js.map +0 -1
- package/dist/tools/atlas/listProjects.js.map +0 -1
|
@@ -5,35 +5,13 @@ on:
|
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
7
|
pull_request:
|
|
8
|
-
jobs:
|
|
9
|
-
check-style:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
steps:
|
|
12
|
-
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
13
|
-
- uses: actions/checkout@v4
|
|
14
|
-
- uses: actions/setup-node@v4
|
|
15
|
-
with:
|
|
16
|
-
node-version-file: package.json
|
|
17
|
-
cache: "npm"
|
|
18
|
-
- name: Install dependencies
|
|
19
|
-
run: npm ci
|
|
20
|
-
- name: Run style check
|
|
21
|
-
run: npm run check
|
|
22
8
|
|
|
23
|
-
|
|
24
|
-
runs-on: ubuntu-latest
|
|
25
|
-
steps:
|
|
26
|
-
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
27
|
-
- uses: actions/checkout@v4
|
|
28
|
-
- uses: actions/setup-node@v4
|
|
29
|
-
with:
|
|
30
|
-
node-version-file: package.json
|
|
31
|
-
cache: "npm"
|
|
32
|
-
- name: Install dependencies
|
|
33
|
-
run: npm ci
|
|
34
|
-
- run: npm run generate
|
|
9
|
+
permissions: {}
|
|
35
10
|
|
|
11
|
+
jobs:
|
|
36
12
|
run-tests:
|
|
13
|
+
name: Run MongoDB tests
|
|
14
|
+
if: github.event.pull_request.user.login != 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.repository
|
|
37
15
|
strategy:
|
|
38
16
|
matrix:
|
|
39
17
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
@@ -59,6 +37,8 @@ jobs:
|
|
|
59
37
|
path: coverage/lcov.info
|
|
60
38
|
|
|
61
39
|
run-atlas-tests:
|
|
40
|
+
name: Run Atlas tests
|
|
41
|
+
if: github.event.pull_request.user.login != 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.repository
|
|
62
42
|
runs-on: ubuntu-latest
|
|
63
43
|
steps:
|
|
64
44
|
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
@@ -81,10 +61,12 @@ jobs:
|
|
|
81
61
|
with:
|
|
82
62
|
name: atlas-test-results
|
|
83
63
|
path: coverage/lcov.info
|
|
64
|
+
|
|
84
65
|
coverage:
|
|
66
|
+
name: Report Coverage
|
|
67
|
+
if: always() && github.event.pull_request.user.login != 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.repository
|
|
85
68
|
runs-on: ubuntu-latest
|
|
86
69
|
needs: [run-tests, run-atlas-tests]
|
|
87
|
-
if: always()
|
|
88
70
|
steps:
|
|
89
71
|
- uses: actions/checkout@v4
|
|
90
72
|
- uses: actions/setup-node@v4
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Code Health (fork)
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
permissions: {}
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
run-tests:
|
|
12
|
+
name: Run MongoDB tests
|
|
13
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.head.repo.full_name != github.repository
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-node@v4
|
|
19
|
+
with:
|
|
20
|
+
node-version-file: package.json
|
|
21
|
+
cache: "npm"
|
|
22
|
+
- name: Install dependencies
|
|
23
|
+
run: npm ci
|
|
24
|
+
- name: Run tests
|
|
25
|
+
run: npm test
|
|
26
|
+
- name: Upload test results
|
|
27
|
+
if: always()
|
|
28
|
+
uses: actions/upload-artifact@v4
|
|
29
|
+
with:
|
|
30
|
+
name: test-results
|
|
31
|
+
path: coverage/lcov.info
|
|
32
|
+
|
|
33
|
+
run-atlas-tests:
|
|
34
|
+
name: Run Atlas tests
|
|
35
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.head.repo.full_name != github.repository
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
- uses: actions/setup-node@v4
|
|
41
|
+
with:
|
|
42
|
+
node-version-file: package.json
|
|
43
|
+
cache: "npm"
|
|
44
|
+
- name: Install dependencies
|
|
45
|
+
run: npm ci
|
|
46
|
+
- name: Run tests
|
|
47
|
+
env:
|
|
48
|
+
MDB_MCP_API_CLIENT_ID: ${{ secrets.TEST_ATLAS_CLIENT_ID }}
|
|
49
|
+
MDB_MCP_API_CLIENT_SECRET: ${{ secrets.TEST_ATLAS_CLIENT_SECRET }}
|
|
50
|
+
MDB_MCP_API_BASE_URL: ${{ vars.TEST_ATLAS_BASE_URL }}
|
|
51
|
+
run: npm test -- --testPathIgnorePatterns "tests/integration/tools/mongodb" --testPathIgnorePatterns "tests/integration/[^/]+\.ts"
|
|
52
|
+
- name: Upload test results
|
|
53
|
+
uses: actions/upload-artifact@v4
|
|
54
|
+
if: always()
|
|
55
|
+
with:
|
|
56
|
+
name: atlas-test-results
|
|
57
|
+
path: coverage/lcov.info
|
|
58
|
+
|
|
59
|
+
coverage:
|
|
60
|
+
name: Report Coverage
|
|
61
|
+
if: always() && github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.head.repo.full_name != github.repository
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
needs: [run-tests, run-atlas-tests]
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/checkout@v4
|
|
66
|
+
- uses: actions/setup-node@v4
|
|
67
|
+
with:
|
|
68
|
+
node-version-file: package.json
|
|
69
|
+
cache: "npm"
|
|
70
|
+
- name: Install dependencies
|
|
71
|
+
run: npm ci
|
|
72
|
+
- name: Download test results
|
|
73
|
+
uses: actions/download-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: test-results
|
|
76
|
+
path: coverage/mongodb
|
|
77
|
+
- name: Download atlas test results
|
|
78
|
+
uses: actions/download-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
name: atlas-test-results
|
|
81
|
+
path: coverage/atlas
|
|
82
|
+
- name: Merge coverage reports
|
|
83
|
+
run: |
|
|
84
|
+
npx -y lcov-result-merger@5.0.1 "coverage/*/lcov.info" "coverage/lcov.info"
|
|
85
|
+
- name: Coveralls GitHub Action
|
|
86
|
+
uses: coverallsapp/github-action@v2.3.6
|
|
87
|
+
with:
|
|
88
|
+
file: coverage/lcov.info
|
|
89
|
+
git-branch: ${{ github.head_ref || github.ref_name }}
|
|
90
|
+
git-commit: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
91
|
+
|
|
92
|
+
merge-dependabot-pr:
|
|
93
|
+
name: Merge Dependabot PR
|
|
94
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
95
|
+
runs-on: ubuntu-latest
|
|
96
|
+
permissions:
|
|
97
|
+
pull-requests: write
|
|
98
|
+
contents: write
|
|
99
|
+
needs:
|
|
100
|
+
- coverage
|
|
101
|
+
steps:
|
|
102
|
+
- name: Enable auto-merge for Dependabot PRs
|
|
103
|
+
run: gh pr merge --auto --squash "$PR_URL"
|
|
104
|
+
env:
|
|
105
|
+
PR_URL: ${{github.event.pull_request.html_url}}
|
|
106
|
+
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: "CodeQL Advanced"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "35 4 * * 4"
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
analyze:
|
|
13
|
+
name: Analyze (${{ matrix.language }})
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
security-events: write
|
|
17
|
+
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
language:
|
|
22
|
+
- actions
|
|
23
|
+
- javascript-typescript
|
|
24
|
+
steps:
|
|
25
|
+
- name: Checkout repository
|
|
26
|
+
uses: actions/checkout@v4
|
|
27
|
+
- name: Initialize CodeQL
|
|
28
|
+
uses: github/codeql-action/init@v3
|
|
29
|
+
with:
|
|
30
|
+
languages: ${{ matrix.language }}
|
|
31
|
+
- name: Perform CodeQL Analysis
|
|
32
|
+
uses: github/codeql-action/analyze@v3
|
|
33
|
+
with:
|
|
34
|
+
category: "/language:${{matrix.language}}"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Lint
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
permissions: {}
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check-style:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/setup-node@v4
|
|
18
|
+
with:
|
|
19
|
+
node-version-file: package.json
|
|
20
|
+
cache: "npm"
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: npm ci
|
|
23
|
+
- name: Run style check
|
|
24
|
+
run: npm run check
|
|
25
|
+
|
|
26
|
+
check-generate:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
- uses: actions/setup-node@v4
|
|
32
|
+
with:
|
|
33
|
+
node-version-file: package.json
|
|
34
|
+
cache: "npm"
|
|
35
|
+
- name: Install dependencies
|
|
36
|
+
run: npm ci
|
|
37
|
+
- run: npm run generate
|
|
@@ -10,6 +10,8 @@ on:
|
|
|
10
10
|
required: true
|
|
11
11
|
default: "patch"
|
|
12
12
|
|
|
13
|
+
permissions: {}
|
|
14
|
+
|
|
13
15
|
jobs:
|
|
14
16
|
create-pr:
|
|
15
17
|
runs-on: ubuntu-latest
|
|
@@ -33,13 +35,13 @@ jobs:
|
|
|
33
35
|
- name: Create release PR
|
|
34
36
|
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # 7.0.8
|
|
35
37
|
with:
|
|
36
|
-
title: "
|
|
38
|
+
title: "chore: release ${{ steps.bump-version.outputs.NEW_VERSION }}"
|
|
37
39
|
token: ${{ steps.app-token.outputs.token }}
|
|
38
|
-
commit-message: "
|
|
40
|
+
commit-message: "chore: release ${{ steps.bump-version.outputs.NEW_VERSION }}"
|
|
39
41
|
body: |
|
|
40
42
|
This PR bumps the package version to ${{ steps.bump-version.outputs.NEW_VERSION }}.
|
|
41
43
|
Once merged, the new version will be published to npm.
|
|
42
44
|
base: main
|
|
43
|
-
branch:
|
|
45
|
+
branch: chore_release_${{ steps.bump-version.outputs.NEW_VERSION }}
|
|
44
46
|
author: "${{ steps.app-token.outputs.app-slug}}[bot] <${{ steps.app-token.outputs.app-email }}>"
|
|
45
47
|
committer: "${{ steps.app-token.outputs.app-slug}}[bot] <${{ steps.app-token.outputs.app-email }}>"
|
|
@@ -4,11 +4,11 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
-
|
|
8
|
-
contents: write
|
|
7
|
+
|
|
9
8
|
jobs:
|
|
10
9
|
check:
|
|
11
10
|
runs-on: ubuntu-latest
|
|
11
|
+
permissions: {}
|
|
12
12
|
outputs:
|
|
13
13
|
VERSION_EXISTS: ${{ steps.check-version.outputs.VERSION_EXISTS }}
|
|
14
14
|
VERSION: ${{ steps.get-version.outputs.VERSION }}
|
|
@@ -45,7 +45,10 @@ jobs:
|
|
|
45
45
|
publish:
|
|
46
46
|
runs-on: ubuntu-latest
|
|
47
47
|
environment: Production
|
|
48
|
-
|
|
48
|
+
permissions:
|
|
49
|
+
contents: write
|
|
50
|
+
needs:
|
|
51
|
+
- check
|
|
49
52
|
if: needs.check.outputs.VERSION_EXISTS == 'false'
|
|
50
53
|
steps:
|
|
51
54
|
- uses: GitHubSecurityLab/actions-permissions/monitor@v1
|
package/.prettierrc.json
CHANGED
package/README.md
CHANGED
|
@@ -104,6 +104,7 @@ You may experiment asking `Can you connect to my mongodb instance?`.
|
|
|
104
104
|
- `atlas-list-clusters` - Lists MongoDB Atlas clusters
|
|
105
105
|
- `atlas-inspect-cluster` - Inspect a specific MongoDB Atlas cluster
|
|
106
106
|
- `atlas-create-free-cluster` - Create a free MongoDB Atlas cluster
|
|
107
|
+
- `atlas-connect-cluster` - Connects to MongoDB Atlas cluster
|
|
107
108
|
- `atlas-inspect-access-list` - Inspect IP/CIDR ranges with access to MongoDB Atlas clusters
|
|
108
109
|
- `atlas-create-access-list` - Configure IP/CIDR access list for MongoDB Atlas clusters
|
|
109
110
|
- `atlas-list-db-users` - List MongoDB Atlas database users
|
|
@@ -150,6 +151,7 @@ The MongoDB MCP Server can be configured using multiple methods, with the follow
|
|
|
150
151
|
| `connectionString` | MongoDB connection string for direct database connections (optional users may choose to inform it on every tool call) |
|
|
151
152
|
| `logPath` | Folder to store logs |
|
|
152
153
|
| `disabledTools` | An array of tool names, operation types, and/or categories of tools that will be disabled. |
|
|
154
|
+
| `readOnly` | When set to true, only allows read and metadata operation types, disabling create/update/delete operations |
|
|
153
155
|
|
|
154
156
|
#### `logPath`
|
|
155
157
|
|
|
@@ -181,6 +183,19 @@ Operation types:
|
|
|
181
183
|
- `read` - Tools that read resources, such as find, aggregate, list clusters, etc.
|
|
182
184
|
- `metadata` - Tools that read metadata, such as list databases, list collections, collection schema, etc.
|
|
183
185
|
|
|
186
|
+
#### Read-Only Mode
|
|
187
|
+
|
|
188
|
+
The `readOnly` configuration option allows you to restrict the MCP server to only use tools with "read" and "metadata" operation types. When enabled, all tools that have "create", "update" or "delete" operation types will not be registered with the server.
|
|
189
|
+
|
|
190
|
+
This is useful for scenarios where you want to provide access to MongoDB data for analysis without allowing any modifications to the data or infrastructure.
|
|
191
|
+
|
|
192
|
+
You can enable read-only mode using:
|
|
193
|
+
|
|
194
|
+
- **Environment variable**: `export MDB_MCP_READ_ONLY=true`
|
|
195
|
+
- **Command-line argument**: `--readOnly`
|
|
196
|
+
|
|
197
|
+
When read-only mode is active, you'll see a message in the server logs indicating which tools were prevented from registering due to this restriction.
|
|
198
|
+
|
|
184
199
|
### Atlas API Access
|
|
185
200
|
|
|
186
201
|
To use the Atlas API tools, you'll need to create a service account in MongoDB Atlas:
|
|
@@ -221,6 +236,7 @@ export MDB_MCP_API_CLIENT_SECRET="your-atlas-client-secret"
|
|
|
221
236
|
export MDB_MCP_CONNECTION_STRING="mongodb+srv://username:password@cluster.mongodb.net/myDatabase"
|
|
222
237
|
|
|
223
238
|
export MDB_MCP_LOG_PATH="/path/to/logs"
|
|
239
|
+
|
|
224
240
|
```
|
|
225
241
|
|
|
226
242
|
#### Command-Line Arguments
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import createClient from "openapi-fetch";
|
|
2
2
|
import { ClientCredentials } from "simple-oauth2";
|
|
3
3
|
import { ApiClientError } from "./apiClientError.js";
|
|
4
|
-
import { mongoLogId } from "mongodb-log-writer";
|
|
5
|
-
import logger from "../../logger.js";
|
|
6
4
|
import { packageInfo } from "../../packageInfo.js";
|
|
7
5
|
const ATLAS_API_VERSION = "2025-03-12";
|
|
8
6
|
export class ApiClient {
|
|
@@ -37,8 +35,7 @@ export class ApiClient {
|
|
|
37
35
|
};
|
|
38
36
|
this.options = {
|
|
39
37
|
...options,
|
|
40
|
-
|
|
41
|
-
userAgent: options?.userAgent ||
|
|
38
|
+
userAgent: options.userAgent ||
|
|
42
39
|
`AtlasMCP/${packageInfo.version} (${process.platform}; ${process.arch}; ${process.env.HOSTNAME || "unknown"})`,
|
|
43
40
|
};
|
|
44
41
|
this.client = createClient({
|
|
@@ -64,7 +61,6 @@ export class ApiClient {
|
|
|
64
61
|
this.client.use(this.errorMiddleware);
|
|
65
62
|
}
|
|
66
63
|
hasCredentials() {
|
|
67
|
-
logger.info(mongoLogId(1000000), "api-client", `Checking if API client has credentials: ${!!(this.oauth2Client && this.accessToken)}`);
|
|
68
64
|
return !!(this.oauth2Client && this.accessToken);
|
|
69
65
|
}
|
|
70
66
|
async getIpInfo() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../src/common/atlas/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,YAAoC,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAe,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../src/common/atlas/apiClient.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,7 @@ import path from "path";
|
|
|
2
2
|
import os from "os";
|
|
3
3
|
import argv from "yargs-parser";
|
|
4
4
|
const defaults = {
|
|
5
|
+
apiBaseUrl: "https://cloud.mongodb.com/",
|
|
5
6
|
logPath: getLogPath(),
|
|
6
7
|
connectOptions: {
|
|
7
8
|
readConcern: "local",
|
|
@@ -11,6 +12,7 @@ const defaults = {
|
|
|
11
12
|
},
|
|
12
13
|
disabledTools: [],
|
|
13
14
|
telemetry: "disabled",
|
|
15
|
+
readOnly: false,
|
|
14
16
|
};
|
|
15
17
|
export const config = {
|
|
16
18
|
...defaults,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export var ErrorCodes;
|
|
2
2
|
(function (ErrorCodes) {
|
|
3
3
|
ErrorCodes[ErrorCodes["NotConnectedToMongoDB"] = 1000000] = "NotConnectedToMongoDB";
|
|
4
|
-
ErrorCodes[ErrorCodes["
|
|
4
|
+
ErrorCodes[ErrorCodes["MisconfiguredConnectionString"] = 1000001] = "MisconfiguredConnectionString";
|
|
5
5
|
})(ErrorCodes || (ErrorCodes = {}));
|
|
6
6
|
export class MongoDBError extends Error {
|
|
7
7
|
constructor(code, message) {
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,mFAAiC,CAAA;IACjC,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,mFAAiC,CAAA;IACjC,mGAAyC,CAAA;AAC7C,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IACnC,YACW,IAAgB,EACvB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAY;IAI3B,CAAC;CACJ"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
-
import logger from "./logger.js";
|
|
4
|
-
import { mongoLogId } from "mongodb-log-writer";
|
|
3
|
+
import logger, { LogId } from "./logger.js";
|
|
5
4
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
5
|
import { config } from "./config.js";
|
|
7
6
|
import { Session } from "./session.js";
|
|
@@ -26,7 +25,7 @@ try {
|
|
|
26
25
|
await server.connect(transport);
|
|
27
26
|
}
|
|
28
27
|
catch (error) {
|
|
29
|
-
logger.emergency(
|
|
28
|
+
logger.emergency(LogId.serverStartFailure, "server", `Fatal error running server: ${error}`);
|
|
30
29
|
process.exit(1);
|
|
31
30
|
}
|
|
32
31
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,IAAI,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;KAC1C,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;QAC5B,IAAI,EAAE,WAAW,CAAC,aAAa;QAC/B,OAAO,EAAE,WAAW,CAAC,OAAO;KAC/B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,SAAS;QACT,OAAO;QACP,UAAU,EAAE,MAAM;KACrB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAAC,OAAO,KAAc,EAAE,CAAC;IACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,EAAE,+BAA+B,KAAe,EAAE,CAAC,CAAC;IACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import fs from "fs/promises";
|
|
2
|
-
import { MongoLogManager } from "mongodb-log-writer";
|
|
2
|
+
import { mongoLogId, MongoLogManager } from "mongodb-log-writer";
|
|
3
3
|
import redact from "mongodb-redact";
|
|
4
|
+
export const LogId = {
|
|
5
|
+
serverStartFailure: mongoLogId(1000001),
|
|
6
|
+
serverInitialized: mongoLogId(1000002),
|
|
7
|
+
atlasCheckCredentials: mongoLogId(1001001),
|
|
8
|
+
atlasDeleteDatabaseUserFailure: mongoLogId(1001002),
|
|
9
|
+
telemetryDisabled: mongoLogId(1002001),
|
|
10
|
+
telemetryEmitFailure: mongoLogId(1002002),
|
|
11
|
+
telemetryEmitStart: mongoLogId(1002003),
|
|
12
|
+
telemetryEmitSuccess: mongoLogId(1002004),
|
|
13
|
+
toolExecute: mongoLogId(1003001),
|
|
14
|
+
toolExecuteFailure: mongoLogId(1003002),
|
|
15
|
+
toolDisabled: mongoLogId(1003003),
|
|
16
|
+
mongodbConnectFailure: mongoLogId(1004001),
|
|
17
|
+
mongodbDisconnectFailure: mongoLogId(1004002),
|
|
18
|
+
};
|
|
4
19
|
class LoggerBase {
|
|
5
20
|
info(id, context, message) {
|
|
6
21
|
this.log("info", id, context, message);
|
|
@@ -83,6 +98,10 @@ class McpLogger extends LoggerBase {
|
|
|
83
98
|
this.server = server;
|
|
84
99
|
}
|
|
85
100
|
log(level, _, context, message) {
|
|
101
|
+
// Only log if the server is connected
|
|
102
|
+
if (!this.server?.isConnected()) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
86
105
|
void this.server.server.sendLoggingMessage({
|
|
87
106
|
level,
|
|
88
107
|
data: `[${context}]: ${message}`,
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAc,eAAe,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAc,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AAC7F,OAAO,MAAM,MAAM,gBAAgB,CAAC;AAMpC,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,kBAAkB,EAAE,UAAU,CAAC,OAAS,CAAC;IACzC,iBAAiB,EAAE,UAAU,CAAC,OAAS,CAAC;IAExC,qBAAqB,EAAE,UAAU,CAAC,OAAS,CAAC;IAC5C,8BAA8B,EAAE,UAAU,CAAC,OAAS,CAAC;IAErD,iBAAiB,EAAE,UAAU,CAAC,OAAS,CAAC;IACxC,oBAAoB,EAAE,UAAU,CAAC,OAAS,CAAC;IAC3C,kBAAkB,EAAE,UAAU,CAAC,OAAS,CAAC;IACzC,oBAAoB,EAAE,UAAU,CAAC,OAAS,CAAC;IAE3C,WAAW,EAAE,UAAU,CAAC,OAAS,CAAC;IAClC,kBAAkB,EAAE,UAAU,CAAC,OAAS,CAAC;IACzC,YAAY,EAAE,UAAU,CAAC,OAAS,CAAC;IAEnC,qBAAqB,EAAE,UAAU,CAAC,OAAS,CAAC;IAC5C,wBAAwB,EAAE,UAAU,CAAC,OAAS,CAAC;CACzC,CAAC;AAEX,MAAe,UAAU;IAGrB,IAAI,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QACjD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QAClD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QAClD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QACpD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,QAAQ,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QACrD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QAClD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,CAAC,EAAc,EAAE,OAAe,EAAE,OAAe;QACtD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACJ;AAED,MAAM,aAAc,SAAQ,UAAU;IAClC,GAAG,CAAC,KAAe,EAAE,EAAc,EAAE,OAAe,EAAE,OAAe;QACjE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,OAAO,MAAM,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;IACrF,CAAC;CACJ;AAED,MAAM,UAAW,SAAQ,UAAU;IAC/B,YAA4B,SAAyB;QACjD,KAAK,EAAE,CAAC;QADgB,cAAS,GAAT,SAAS,CAAgB;IAErD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAe;QACjC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;YAChC,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,OAAO,CAAC,IAAI;YACpB,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,CAAC;SACjB,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAEnC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;QAElD,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,KAAe,EAAE,EAAc,EAAE,OAAe,EAAE,OAAe;QACjE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAEtD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAEO,oBAAoB,CAAC,KAAe;QACxC,QAAQ,KAAK,EAAE,CAAC;YACZ,KAAK,MAAM;gBACP,OAAO,MAAM,CAAC;YAClB,KAAK,SAAS;gBACV,OAAO,MAAM,CAAC;YAClB,KAAK,OAAO;gBACR,OAAO,OAAO,CAAC;YACnB,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO;gBACR,OAAO,OAAO,CAAC;YACnB,KAAK,UAAU,CAAC;YAChB,KAAK,OAAO,CAAC;YACb,KAAK,WAAW;gBACZ,OAAO,OAAO,CAAC;YACnB;gBACI,OAAO,MAAM,CAAC;QACtB,CAAC;IACL,CAAC;CACJ;AAED,MAAM,SAAU,SAAQ,UAAU;IAC9B,YAAoB,MAAiB;QACjC,KAAK,EAAE,CAAC;QADQ,WAAM,GAAN,MAAM,CAAW;IAErC,CAAC;IAED,GAAG,CAAC,KAAe,EAAE,CAAa,EAAE,OAAe,EAAE,OAAe;QAChE,sCAAsC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACvC,KAAK;YACL,IAAI,EAAE,IAAI,OAAO,MAAM,OAAO,EAAE;SACnC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,MAAM,eAAgB,SAAQ,UAAU;IAGpC,YAAY,GAAG,OAAqB;QAChC,KAAK,EAAE,CAAC;QAER,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,2BAA2B;YAC3B,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,GAAG,OAAqB;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,KAAe,EAAE,EAAc,EAAE,OAAe,EAAE,OAAe;QACjE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;CACJ;AAED,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;AACrC,eAAe,MAAM,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB,EAAE,OAAe;IACrE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAExC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AtlasTools } from "./tools/atlas/tools.js";
|
|
2
2
|
import { MongoDbTools } from "./tools/mongodb/tools.js";
|
|
3
|
-
import logger, { initializeLogger } from "./logger.js";
|
|
4
|
-
import { mongoLogId } from "mongodb-log-writer";
|
|
3
|
+
import logger, { initializeLogger, LogId } from "./logger.js";
|
|
5
4
|
import { ObjectId } from "mongodb";
|
|
6
5
|
import { Telemetry } from "./telemetry/telemetry.js";
|
|
7
6
|
import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
@@ -37,7 +36,7 @@ export class Server {
|
|
|
37
36
|
this.mcpServer.server.oninitialized = () => {
|
|
38
37
|
this.session.setAgentRunner(this.mcpServer.server.getClientVersion());
|
|
39
38
|
this.session.sessionId = new ObjectId().toString();
|
|
40
|
-
logger.info(
|
|
39
|
+
logger.info(LogId.serverInitialized, "server", `Server started with transport ${transport.constructor.name} and agent runner ${this.session.agentRunner?.name}`);
|
|
41
40
|
this.emitServerEvent("start", Date.now() - this.startTime);
|
|
42
41
|
};
|
|
43
42
|
this.mcpServer.server.onclose = () => {
|
|
@@ -48,6 +47,7 @@ export class Server {
|
|
|
48
47
|
const closeTime = Date.now();
|
|
49
48
|
this.emitServerEvent("stop", Date.now() - closeTime, error);
|
|
50
49
|
};
|
|
50
|
+
await this.validateConfig();
|
|
51
51
|
}
|
|
52
52
|
async close() {
|
|
53
53
|
await this.session.close();
|
|
@@ -73,6 +73,8 @@ export class Server {
|
|
|
73
73
|
};
|
|
74
74
|
if (command === "start") {
|
|
75
75
|
event.properties.startup_time_ms = commandDuration;
|
|
76
|
+
event.properties.read_only_mode = this.userConfig.readOnly || false;
|
|
77
|
+
event.properties.disallowed_tools = this.userConfig.disabledTools || [];
|
|
76
78
|
}
|
|
77
79
|
if (command === "stop") {
|
|
78
80
|
event.properties.runtime_duration_ms = Date.now() - this.startTime;
|
|
@@ -89,6 +91,26 @@ export class Server {
|
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
registerResources() {
|
|
94
|
+
this.mcpServer.resource("config", "config://config", {
|
|
95
|
+
description: "Server configuration, supplied by the user either as environment variables or as startup arguments",
|
|
96
|
+
}, (uri) => {
|
|
97
|
+
const result = {
|
|
98
|
+
telemetry: this.userConfig.telemetry,
|
|
99
|
+
logPath: this.userConfig.logPath,
|
|
100
|
+
connectionString: this.userConfig.connectionString
|
|
101
|
+
? "set; no explicit connect needed, use switch-connection tool to connect to a different connection if necessary"
|
|
102
|
+
: "not set; before using any mongodb tool, you need to call the connect tool with a connection string",
|
|
103
|
+
connectOptions: this.userConfig.connectOptions,
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
contents: [
|
|
107
|
+
{
|
|
108
|
+
text: JSON.stringify(result),
|
|
109
|
+
uri: uri.href,
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
});
|
|
92
114
|
if (this.userConfig.connectionString) {
|
|
93
115
|
this.mcpServer.resource("connection-string", "config://connection-string", {
|
|
94
116
|
description: "Preconfigured connection string that will be used as a default in the `connect` tool",
|
|
@@ -104,5 +126,24 @@ export class Server {
|
|
|
104
126
|
});
|
|
105
127
|
}
|
|
106
128
|
}
|
|
129
|
+
async validateConfig() {
|
|
130
|
+
const isAtlasConfigured = this.userConfig.apiClientId && this.userConfig.apiClientSecret;
|
|
131
|
+
const isMongoDbConfigured = this.userConfig.connectionString;
|
|
132
|
+
if (!isAtlasConfigured && !isMongoDbConfigured) {
|
|
133
|
+
console.error("Either Atlas Client Id or a MongoDB connection string must be configured - you can provide them as environment variables or as startup arguments. \n" +
|
|
134
|
+
"Provide the Atlas credentials as `MDB_MCP_API_CLIENT_ID` and `MDB_MCP_API_CLIENT_SECRET` environment variables or as `--apiClientId` and `--apiClientSecret` startup arguments. \n" +
|
|
135
|
+
"Provide the MongoDB connection string as `MDB_MCP_CONNECTION_STRING` environment variable or as `--connectionString` startup argument.");
|
|
136
|
+
throw new Error("Either Atlas Client Id or a MongoDB connection string must be configured");
|
|
137
|
+
}
|
|
138
|
+
if (this.userConfig.connectionString) {
|
|
139
|
+
try {
|
|
140
|
+
await this.session.connectToMongoDB(this.userConfig.connectionString, this.userConfig.connectOptions);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error("Failed to connect to MongoDB instance using the connection string from the config: ", error);
|
|
144
|
+
throw new Error("Failed to connect to MongoDB instance using the connection string from the config");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
107
148
|
}
|
|
108
149
|
//# sourceMappingURL=server.js.map
|