@mhalder/qdrant-mcp-server 3.2.0 → 3.2.1

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 @@
1
+ /sdk/** linguist-generated
@@ -0,0 +1,6 @@
1
+ {
2
+ "type": "module",
3
+ "dependencies": {
4
+ "typescript": "5.9.3"
5
+ }
6
+ }
@@ -0,0 +1,83 @@
1
+ import {
2
+ dag,
3
+ Container,
4
+ Directory,
5
+ object,
6
+ func,
7
+ argument,
8
+ } from "@dagger.io/dagger"
9
+
10
+ const SUPPORTED_NODE_VERSIONS = ["22", "24"]
11
+
12
+ @object()
13
+ export class Ci {
14
+ private base(source: Directory, nodeVersion: string): Container {
15
+ if (!SUPPORTED_NODE_VERSIONS.includes(nodeVersion)) {
16
+ throw new Error(
17
+ `Unsupported Node version "${nodeVersion}". Must be one of: ${SUPPORTED_NODE_VERSIONS.join(", ")}`,
18
+ )
19
+ }
20
+
21
+ let ctr = dag
22
+ .container()
23
+ .from(`node:${nodeVersion}-slim`)
24
+ .withExec(["apt-get", "update"])
25
+ .withExec([
26
+ "apt-get",
27
+ "install",
28
+ "-y",
29
+ "--no-install-recommends",
30
+ "python3",
31
+ "make",
32
+ "g++",
33
+ "git",
34
+ ])
35
+ .withMountedDirectory("/app", source)
36
+ .withWorkdir("/app")
37
+ // Dagger context directories exclude .git dirs but may include
38
+ // a .git worktree file pointing to a host path. Remove it and
39
+ // init a fresh repo so integration tests pass.
40
+ .withExec(["rm", "-rf", ".git"])
41
+ .withExec(["git", "init"])
42
+ .withExec(["git", "config", "user.email", "ci@dagger"])
43
+ .withExec(["git", "config", "user.name", "CI"])
44
+ .withExec(["git", "add", "."])
45
+ .withExec(["git", "commit", "-m", "init", "--allow-empty"])
46
+
47
+ if (nodeVersion.startsWith("24")) {
48
+ ctr = ctr.withEnvVariable("CXXFLAGS", "-std=c++20")
49
+ }
50
+
51
+ return ctr.withExec(["npm", "ci"])
52
+ }
53
+
54
+ @func()
55
+ check(
56
+ @argument({ defaultPath: "/" }) source: Directory,
57
+ nodeVersion: string = "22",
58
+ ): Container {
59
+ return this.base(source, nodeVersion)
60
+ .withExec(["npm", "run", "type-check"])
61
+ .withExec(["npm", "run", "build"])
62
+ }
63
+
64
+ @func()
65
+ async test(
66
+ @argument({ defaultPath: "/" }) source: Directory,
67
+ nodeVersion: string = "22",
68
+ ): Promise<Directory> {
69
+ return this.check(source, nodeVersion)
70
+ .withExec(["npm", "run", "test:coverage"])
71
+ .withExec(["npm", "run", "test:providers"])
72
+ .directory("/app/coverage")
73
+ }
74
+
75
+ @func()
76
+ async testAll(
77
+ @argument({ defaultPath: "/" }) source: Directory,
78
+ ): Promise<string> {
79
+ const versions = ["22", "24"]
80
+ await Promise.all(versions.map((v) => this.test(source, v)))
81
+ return `All tests passed on Node ${versions.join(", ")}`
82
+ }
83
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "moduleResolution": "Node",
5
+ "experimentalDecorators": true,
6
+ "strict": true,
7
+ "skipLibCheck": true,
8
+ "paths": {
9
+ "@dagger.io/dagger": ["./sdk/index.ts"],
10
+ "@dagger.io/dagger/telemetry": ["./sdk/telemetry.ts"]
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,8 @@
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ typescript@5.9.3:
6
+ version "5.9.3"
7
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
8
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
@@ -7,43 +7,33 @@ on:
7
7
  branches: [main]
8
8
 
9
9
  jobs:
10
- build-and-test:
11
- name: Build and Test
10
+ test:
11
+ name: Test (Node ${{ matrix.node-version }})
12
12
  runs-on: ubuntu-latest
13
-
14
13
  strategy:
15
14
  matrix:
16
- node-version: [22.x, 24.x]
15
+ node-version: ["22", "24"]
17
16
 
18
17
  steps:
19
- - name: Checkout code
20
- uses: actions/checkout@v4
18
+ - uses: actions/checkout@v4
21
19
 
22
- - name: Setup Node.js ${{ matrix.node-version }}
23
- uses: actions/setup-node@v4
20
+ - name: Run tests via Dagger
21
+ uses: dagger/dagger-for-github@v7
24
22
  with:
25
- node-version: ${{ matrix.node-version }}
26
- cache: "npm"
27
-
28
- - name: Install dependencies
29
- run: npm ci
30
- env:
31
- # Node 24 requires C++20 for native modules
32
- CXXFLAGS: ${{ matrix.node-version == '24.x' && '-std=c++20' || '' }}
33
-
34
- - name: Type check
35
- run: npm run type-check
23
+ verb: call
24
+ args: test --source=. --node-version=${{ matrix.node-version }}
25
+ version: "0.19.10"
36
26
 
37
- - name: Build project
38
- run: npm run build
39
-
40
- - name: Run tests with coverage
41
- run: npm run test:coverage
42
-
43
- - name: Run provider verification tests
44
- run: npm run test:providers
27
+ - name: Export coverage
28
+ if: matrix.node-version == '22'
29
+ uses: dagger/dagger-for-github@v7
30
+ with:
31
+ verb: call
32
+ args: test --source=. --node-version=22 export --path=./coverage
33
+ version: "0.19.10"
45
34
 
46
35
  - name: Upload coverage to Codecov
36
+ if: matrix.node-version == '22'
47
37
  uses: codecov/codecov-action@v4
48
38
  continue-on-error: true
49
39
  with:
@@ -18,32 +18,29 @@ jobs:
18
18
  if: "!contains(github.event.head_commit.message, '[skip ci]')"
19
19
 
20
20
  steps:
21
- - name: Checkout code
22
- uses: actions/checkout@v4
21
+ - uses: actions/checkout@v4
23
22
  with:
24
23
  fetch-depth: 0
25
24
  persist-credentials: false
26
25
 
27
- - name: Setup Node.js
28
- uses: actions/setup-node@v4
26
+ # Dagger gate: type-check + build validation
27
+ - name: Check via Dagger
28
+ uses: dagger/dagger-for-github@v7
29
29
  with:
30
- node-version: '22.x'
31
- cache: 'npm'
30
+ verb: call
31
+ args: check --source=. --node-version=22
32
+ version: "0.19.10"
32
33
 
33
- - name: Install dependencies
34
- run: npm ci
35
-
36
- - name: Type check
37
- run: npm run type-check
38
-
39
- - name: Build project
40
- run: npm run build
41
-
42
- - name: Run tests
43
- run: npm test -- --run
34
+ # Native release (needs OIDC token for npm provenance)
35
+ - uses: actions/setup-node@v4
36
+ with:
37
+ node-version: "22.x"
38
+ cache: "npm"
44
39
 
45
- - name: Run provider verification tests
46
- run: npm run test:providers
40
+ - run: npm ci
41
+ - run: npm run build
42
+ - run: npm test -- --run
43
+ - run: npm run test:providers
47
44
 
48
45
  - name: Release
49
46
  env:
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## <small>3.2.1 (2026-01-30)</small>
2
+
3
+ * Merge pull request #52 from mhalder/feat/dagger ([da115bb](https://github.com/mhalder/qdrant-mcp-server/commit/da115bb)), closes [#52](https://github.com/mhalder/qdrant-mcp-server/issues/52)
4
+ * fix(dagger): validate node version and pin engine version ([61625b9](https://github.com/mhalder/qdrant-mcp-server/commit/61625b9))
5
+ * style(dagger): reformat package.json ([c22ca40](https://github.com/mhalder/qdrant-mcp-server/commit/c22ca40))
6
+ * ci(dagger): replace GHA CI with Dagger TypeScript module ([d79a77e](https://github.com/mhalder/qdrant-mcp-server/commit/d79a77e))
7
+
1
8
  ## 3.2.0 (2026-01-24)
2
9
 
3
10
  * Merge pull request #51 from mhalder/feat/advanced-search ([e99311b](https://github.com/mhalder/qdrant-mcp-server/commit/e99311b)), closes [#51](https://github.com/mhalder/qdrant-mcp-server/issues/51)
package/README.md CHANGED
@@ -614,6 +614,17 @@ npm test # Run test suite
614
614
  npm run test:coverage # Coverage report
615
615
  ```
616
616
 
617
+ ### Dagger (Portable CI)
618
+
619
+ The CI pipeline is implemented as a [Dagger](https://dagger.io/) TypeScript module, making it runnable locally or in any CI system:
620
+
621
+ ```bash
622
+ dagger call check --source=. # Type-check + build (Node 22)
623
+ dagger call check --source=. --node-version=24 # Type-check + build (Node 24)
624
+ dagger call test --source=. # Full test suite + coverage
625
+ dagger call test-all --source=. # Test on Node 22 + 24 in parallel
626
+ ```
627
+
617
628
  ### Testing
618
629
 
619
630
  **748 tests** across 27 test files with **97%+ coverage**:
@@ -623,7 +634,7 @@ npm run test:coverage # Coverage report
623
634
  - **Git History Tests**: Git extractor (28), extractor integration (11), chunker (30), indexer (42), synchronizer (18)
624
635
  - **Advanced Search Tests**: Federated tools (30) - normalizeScores, calculateRRFScore, buildCorrelations, contextual_search, federated_search
625
636
 
626
- **CI/CD**: GitHub Actions runs build, type-check, and tests on Node.js 22.x and 24.x for every push/PR.
637
+ **CI/CD**: [Dagger](https://dagger.io/) module runs build, type-check, and tests on Node.js 22 and 24. GitHub Actions invokes Dagger for CI and uses native `semantic-release` for publishing.
627
638
 
628
639
  ## Contributing
629
640
 
package/dagger.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "ci",
3
+ "engineVersion": "v0.19.10",
4
+ "sdk": {
5
+ "source": "typescript"
6
+ },
7
+ "source": ".dagger"
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhalder/qdrant-mcp-server",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "description": "MCP server for semantic search using local Qdrant and Ollama (default) with support for OpenAI, Cohere, and Voyage AI",
5
5
  "type": "module",
6
6
  "bin": {