@mhalder/qdrant-mcp-server 1.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.
Files changed (100) hide show
  1. package/.env.example +92 -0
  2. package/.github/workflows/ci.yml +61 -0
  3. package/.github/workflows/claude-code-review.yml +57 -0
  4. package/.github/workflows/claude.yml +50 -0
  5. package/.github/workflows/release.yml +52 -0
  6. package/.husky/commit-msg +1 -0
  7. package/.husky/pre-commit +1 -0
  8. package/.releaserc.json +59 -0
  9. package/.yamlfmt +4 -0
  10. package/CHANGELOG.md +73 -0
  11. package/CONTRIBUTING.md +176 -0
  12. package/LICENSE +21 -0
  13. package/README.md +714 -0
  14. package/build/embeddings/base.d.ts +23 -0
  15. package/build/embeddings/base.d.ts.map +1 -0
  16. package/build/embeddings/base.js +2 -0
  17. package/build/embeddings/base.js.map +1 -0
  18. package/build/embeddings/cohere.d.ts +17 -0
  19. package/build/embeddings/cohere.d.ts.map +1 -0
  20. package/build/embeddings/cohere.js +102 -0
  21. package/build/embeddings/cohere.js.map +1 -0
  22. package/build/embeddings/cohere.test.d.ts +2 -0
  23. package/build/embeddings/cohere.test.d.ts.map +1 -0
  24. package/build/embeddings/cohere.test.js +279 -0
  25. package/build/embeddings/cohere.test.js.map +1 -0
  26. package/build/embeddings/factory.d.ts +10 -0
  27. package/build/embeddings/factory.d.ts.map +1 -0
  28. package/build/embeddings/factory.js +98 -0
  29. package/build/embeddings/factory.js.map +1 -0
  30. package/build/embeddings/factory.test.d.ts +2 -0
  31. package/build/embeddings/factory.test.d.ts.map +1 -0
  32. package/build/embeddings/factory.test.js +329 -0
  33. package/build/embeddings/factory.test.js.map +1 -0
  34. package/build/embeddings/ollama.d.ts +18 -0
  35. package/build/embeddings/ollama.d.ts.map +1 -0
  36. package/build/embeddings/ollama.js +135 -0
  37. package/build/embeddings/ollama.js.map +1 -0
  38. package/build/embeddings/ollama.test.d.ts +2 -0
  39. package/build/embeddings/ollama.test.d.ts.map +1 -0
  40. package/build/embeddings/ollama.test.js +399 -0
  41. package/build/embeddings/ollama.test.js.map +1 -0
  42. package/build/embeddings/openai.d.ts +16 -0
  43. package/build/embeddings/openai.d.ts.map +1 -0
  44. package/build/embeddings/openai.js +108 -0
  45. package/build/embeddings/openai.js.map +1 -0
  46. package/build/embeddings/openai.test.d.ts +2 -0
  47. package/build/embeddings/openai.test.d.ts.map +1 -0
  48. package/build/embeddings/openai.test.js +283 -0
  49. package/build/embeddings/openai.test.js.map +1 -0
  50. package/build/embeddings/voyage.d.ts +19 -0
  51. package/build/embeddings/voyage.d.ts.map +1 -0
  52. package/build/embeddings/voyage.js +113 -0
  53. package/build/embeddings/voyage.js.map +1 -0
  54. package/build/embeddings/voyage.test.d.ts +2 -0
  55. package/build/embeddings/voyage.test.d.ts.map +1 -0
  56. package/build/embeddings/voyage.test.js +371 -0
  57. package/build/embeddings/voyage.test.js.map +1 -0
  58. package/build/index.d.ts +3 -0
  59. package/build/index.d.ts.map +1 -0
  60. package/build/index.js +534 -0
  61. package/build/index.js.map +1 -0
  62. package/build/index.test.d.ts +2 -0
  63. package/build/index.test.d.ts.map +1 -0
  64. package/build/index.test.js +241 -0
  65. package/build/index.test.js.map +1 -0
  66. package/build/qdrant/client.d.ts +37 -0
  67. package/build/qdrant/client.d.ts.map +1 -0
  68. package/build/qdrant/client.js +142 -0
  69. package/build/qdrant/client.js.map +1 -0
  70. package/build/qdrant/client.test.d.ts +2 -0
  71. package/build/qdrant/client.test.d.ts.map +1 -0
  72. package/build/qdrant/client.test.js +340 -0
  73. package/build/qdrant/client.test.js.map +1 -0
  74. package/commitlint.config.js +25 -0
  75. package/docker-compose.yml +22 -0
  76. package/docs/test_report.md +259 -0
  77. package/examples/README.md +315 -0
  78. package/examples/basic/README.md +111 -0
  79. package/examples/filters/README.md +262 -0
  80. package/examples/knowledge-base/README.md +207 -0
  81. package/examples/rate-limiting/README.md +376 -0
  82. package/package.json +59 -0
  83. package/scripts/verify-providers.js +238 -0
  84. package/src/embeddings/base.ts +25 -0
  85. package/src/embeddings/cohere.test.ts +408 -0
  86. package/src/embeddings/cohere.ts +152 -0
  87. package/src/embeddings/factory.test.ts +453 -0
  88. package/src/embeddings/factory.ts +163 -0
  89. package/src/embeddings/ollama.test.ts +543 -0
  90. package/src/embeddings/ollama.ts +196 -0
  91. package/src/embeddings/openai.test.ts +402 -0
  92. package/src/embeddings/openai.ts +158 -0
  93. package/src/embeddings/voyage.test.ts +520 -0
  94. package/src/embeddings/voyage.ts +168 -0
  95. package/src/index.test.ts +304 -0
  96. package/src/index.ts +614 -0
  97. package/src/qdrant/client.test.ts +456 -0
  98. package/src/qdrant/client.ts +195 -0
  99. package/tsconfig.json +19 -0
  100. package/vitest.config.ts +37 -0
package/.env.example ADDED
@@ -0,0 +1,92 @@
1
+ # Qdrant Configuration
2
+ QDRANT_URL=http://localhost:6333
3
+
4
+ # ============================================================================
5
+ # Embedding Provider Configuration
6
+ # ============================================================================
7
+ # Choose your embedding provider: openai, cohere, voyage, ollama
8
+ # Default: ollama (no API key required, works out of the box)
9
+ EMBEDDING_PROVIDER=ollama
10
+
11
+ # ============================================================================
12
+ # Ollama Configuration (Local/Self-hosted) - DEFAULT
13
+ # ============================================================================
14
+ # No API key required! Just start Ollama and pull a model:
15
+ # docker compose up -d
16
+ # docker exec ollama ollama pull nomic-embed-text
17
+
18
+ EMBEDDING_BASE_URL=http://localhost:11434
19
+
20
+ # Optional: Override defaults
21
+ # EMBEDDING_MODEL=nomic-embed-text
22
+ # EMBEDDING_DIMENSIONS=768
23
+ # EMBEDDING_MAX_REQUESTS_PER_MINUTE=1000
24
+ # EMBEDDING_RETRY_ATTEMPTS=3
25
+ # EMBEDDING_RETRY_DELAY=500
26
+
27
+ # Available Ollama models (depends on what you have pulled):
28
+ # - nomic-embed-text (768 dimensions) - recommended
29
+ # - mxbai-embed-large (1024 dimensions)
30
+ # - all-minilm (384 dimensions)
31
+ # Run `docker exec ollama ollama pull <model-name>` to download models
32
+
33
+ # ============================================================================
34
+ # OpenAI Configuration (Alternative Provider)
35
+ # ============================================================================
36
+ # Uncomment to use OpenAI instead of Ollama:
37
+ # EMBEDDING_PROVIDER=openai
38
+ # OPENAI_API_KEY=sk-your-api-key-here
39
+
40
+ # Optional: Override defaults
41
+ # EMBEDDING_MODEL=text-embedding-3-small
42
+ # EMBEDDING_DIMENSIONS=1536
43
+ # EMBEDDING_MAX_REQUESTS_PER_MINUTE=3500
44
+ # EMBEDDING_RETRY_ATTEMPTS=3
45
+ # EMBEDDING_RETRY_DELAY=1000
46
+
47
+ # ============================================================================
48
+ # Cohere Configuration
49
+ # ============================================================================
50
+ # EMBEDDING_PROVIDER=cohere
51
+ # COHERE_API_KEY=your-cohere-api-key-here
52
+
53
+ # Optional: Override defaults
54
+ # EMBEDDING_MODEL=embed-english-v3.0
55
+ # EMBEDDING_DIMENSIONS=1024
56
+ # EMBEDDING_MAX_REQUESTS_PER_MINUTE=100
57
+ # EMBEDDING_RETRY_ATTEMPTS=3
58
+ # EMBEDDING_RETRY_DELAY=1000
59
+
60
+ # Available Cohere models:
61
+ # - embed-english-v3.0 (1024 dimensions)
62
+ # - embed-multilingual-v3.0 (1024 dimensions)
63
+ # - embed-english-light-v3.0 (384 dimensions)
64
+ # - embed-multilingual-light-v3.0 (384 dimensions)
65
+
66
+ # ============================================================================
67
+ # Voyage AI Configuration
68
+ # ============================================================================
69
+ # EMBEDDING_PROVIDER=voyage
70
+ # VOYAGE_API_KEY=your-voyage-api-key-here
71
+
72
+ # Optional: Override defaults
73
+ # EMBEDDING_MODEL=voyage-2
74
+ # EMBEDDING_DIMENSIONS=1024
75
+ # EMBEDDING_BASE_URL=https://api.voyageai.com/v1
76
+ # EMBEDDING_MAX_REQUESTS_PER_MINUTE=300
77
+ # EMBEDDING_RETRY_ATTEMPTS=3
78
+ # EMBEDDING_RETRY_DELAY=1000
79
+
80
+ # Available Voyage models:
81
+ # - voyage-2 (1024 dimensions)
82
+ # - voyage-large-2 (1536 dimensions)
83
+ # - voyage-code-2 (1536 dimensions)
84
+ # - voyage-lite-02-instruct (1024 dimensions)
85
+
86
+ # ============================================================================
87
+ # Notes
88
+ # ============================================================================
89
+ # - For OpenAI, Cohere, and Voyage: API key is required
90
+ # - For Ollama: No API key needed (local deployment)
91
+ # - EMBEDDING_MODEL, EMBEDDING_DIMENSIONS, and rate limit configs are optional
92
+ # - Each provider has sensible defaults if not specified
@@ -0,0 +1,61 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build-and-test:
11
+ name: Build and Test
12
+ runs-on: ubuntu-latest
13
+
14
+ strategy:
15
+ matrix:
16
+ node-version: [20.x, 22.x]
17
+
18
+ steps:
19
+ - name: Checkout code
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Setup Node.js ${{ matrix.node-version }}
23
+ uses: actions/setup-node@v4
24
+ with:
25
+ node-version: ${{ matrix.node-version }}
26
+ cache: 'npm'
27
+
28
+ - name: Install dependencies
29
+ run: npm ci
30
+
31
+ - name: Type check
32
+ run: npm run type-check
33
+
34
+ - name: Build project
35
+ run: npm run build
36
+
37
+ - name: Run unit tests
38
+ if: matrix.node-version != '22.x'
39
+ run: npm test -- --run
40
+
41
+ - name: Run provider verification tests
42
+ if: matrix.node-version != '22.x'
43
+ run: npm run test:providers
44
+
45
+ - name: Run tests with coverage (Node 22.x only)
46
+ if: matrix.node-version == '22.x'
47
+ run: npm run test:coverage
48
+
49
+ - name: Run provider verification tests (Node 22.x only)
50
+ if: matrix.node-version == '22.x'
51
+ run: npm run test:providers
52
+
53
+ - name: Upload coverage to Codecov (Node 22.x only)
54
+ if: matrix.node-version == '22.x'
55
+ uses: codecov/codecov-action@v4
56
+ continue-on-error: true
57
+ with:
58
+ token: ${{ secrets.CODECOV_TOKEN }}
59
+ directory: ./coverage
60
+ flags: unittests
61
+ fail_ci_if_error: false
@@ -0,0 +1,57 @@
1
+ name: Claude Code Review
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize]
6
+ # Optional: Only run on specific file changes
7
+ # paths:
8
+ # - "src/**/*.ts"
9
+ # - "src/**/*.tsx"
10
+ # - "src/**/*.js"
11
+ # - "src/**/*.jsx"
12
+
13
+ jobs:
14
+ claude-review:
15
+ # Optional: Filter by PR author
16
+ # if: |
17
+ # github.event.pull_request.user.login == 'external-contributor' ||
18
+ # github.event.pull_request.user.login == 'new-developer' ||
19
+ # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20
+
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: read
24
+ pull-requests: read
25
+ issues: read
26
+ id-token: write
27
+
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@v4
31
+ with:
32
+ fetch-depth: 1
33
+
34
+ - name: Run Claude Code Review
35
+ id: claude-review
36
+ uses: anthropics/claude-code-action@v1
37
+ with:
38
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
39
+ prompt: |
40
+ REPO: ${{ github.repository }}
41
+ PR NUMBER: ${{ github.event.pull_request.number }}
42
+
43
+ Please review this pull request and provide feedback on:
44
+ - Code quality and best practices
45
+ - Potential bugs or issues
46
+ - Performance considerations
47
+ - Security concerns
48
+ - Test coverage
49
+
50
+ Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
51
+
52
+ Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
53
+
54
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
55
+ # or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
56
+ claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
57
+
@@ -0,0 +1,50 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ pull-requests: read
24
+ issues: read
25
+ id-token: write
26
+ actions: read # Required for Claude to read CI results on PRs
27
+ steps:
28
+ - name: Checkout repository
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 1
32
+
33
+ - name: Run Claude Code
34
+ id: claude
35
+ uses: anthropics/claude-code-action@v1
36
+ with:
37
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
38
+
39
+ # This is an optional setting that allows Claude to read CI results on PRs
40
+ additional_permissions: |
41
+ actions: read
42
+
43
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
44
+ # prompt: 'Update the pull request description to include a summary of changes.'
45
+
46
+ # Optional: Add claude_args to customize behavior and configuration
47
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
48
+ # or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
49
+ # claude_args: '--allowed-tools Bash(gh pr:*)'
50
+
@@ -0,0 +1,52 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: write
10
+ issues: write
11
+ pull-requests: write
12
+ id-token: write
13
+
14
+ jobs:
15
+ release:
16
+ name: Release
17
+ runs-on: ubuntu-latest
18
+ if: "!contains(github.event.head_commit.message, '[skip ci]')"
19
+
20
+ steps:
21
+ - name: Checkout code
22
+ uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+ persist-credentials: false
26
+
27
+ - name: Setup Node.js
28
+ uses: actions/setup-node@v4
29
+ with:
30
+ node-version: '22.x'
31
+ cache: 'npm'
32
+
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
44
+
45
+ - name: Run provider verification tests
46
+ run: npm run test:providers
47
+
48
+ - name: Release
49
+ env:
50
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
52
+ run: npx semantic-release
@@ -0,0 +1 @@
1
+ npx --no -- commitlint --edit $1
@@ -0,0 +1 @@
1
+ npm test -- --run
@@ -0,0 +1,59 @@
1
+ {
2
+ "branches": ["main"],
3
+ "plugins": [
4
+ [
5
+ "@semantic-release/commit-analyzer",
6
+ {
7
+ "preset": "conventionalcommits",
8
+ "releaseRules": [
9
+ { "type": "feat", "release": "minor" },
10
+ { "type": "fix", "release": "patch" },
11
+ { "type": "perf", "release": "patch" },
12
+ { "type": "docs", "release": "patch" },
13
+ { "type": "refactor", "release": "patch" },
14
+ { "type": "style", "release": false },
15
+ { "type": "test", "release": false },
16
+ { "type": "chore", "release": false },
17
+ { "type": "ci", "release": false },
18
+ { "type": "build", "release": false },
19
+ { "breaking": true, "release": "major" }
20
+ ]
21
+ }
22
+ ],
23
+ [
24
+ "@semantic-release/release-notes-generator",
25
+ {
26
+ "preset": "conventionalcommits",
27
+ "presetConfig": {
28
+ "types": [
29
+ { "type": "feat", "section": "Features" },
30
+ { "type": "fix", "section": "Bug Fixes" },
31
+ { "type": "perf", "section": "Performance Improvements" },
32
+ { "type": "docs", "section": "Documentation" },
33
+ { "type": "refactor", "section": "Code Refactoring" },
34
+ { "type": "style", "section": "Styles", "hidden": true },
35
+ { "type": "test", "section": "Tests", "hidden": true },
36
+ { "type": "chore", "section": "Chores", "hidden": true },
37
+ { "type": "ci", "section": "CI/CD", "hidden": true },
38
+ { "type": "build", "section": "Build System", "hidden": true }
39
+ ]
40
+ }
41
+ }
42
+ ],
43
+ [
44
+ "@semantic-release/changelog",
45
+ {
46
+ "changelogFile": "CHANGELOG.md"
47
+ }
48
+ ],
49
+ "@semantic-release/npm",
50
+ [
51
+ "@semantic-release/git",
52
+ {
53
+ "assets": ["package.json", "package-lock.json", "CHANGELOG.md"],
54
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
55
+ }
56
+ ],
57
+ "@semantic-release/github"
58
+ ]
59
+ }
package/.yamlfmt ADDED
@@ -0,0 +1,4 @@
1
+ formatter:
2
+ type: basic
3
+ retain_line_breaks_single: true
4
+ max_line_length: 120
package/CHANGELOG.md ADDED
@@ -0,0 +1,73 @@
1
+ ## 1.1.0 (2025-10-11)
2
+
3
+ * feat: enable scoped package publishing ([6b1b33f](https://github.com/mhalder/qdrant-mcp-server/commit/6b1b33f))
4
+ * chore: scope package to @mhalder namespace for npm publishing ([9518827](https://github.com/mhalder/qdrant-mcp-server/commit/9518827))
5
+
6
+ ## 1.0.0 (2025-10-11)
7
+
8
+ * chore: add docker compose configuration for qdrant ([ad1773f](https://github.com/mhalder/qdrant-mcp-server/commit/ad1773f))
9
+ * chore: add environment configuration template ([872be20](https://github.com/mhalder/qdrant-mcp-server/commit/872be20))
10
+ * chore: add ollama_storage to .gitignore ([4fb550e](https://github.com/mhalder/qdrant-mcp-server/commit/4fb550e))
11
+ * chore: configure semantic-release for automated versioning ([fb1d64a](https://github.com/mhalder/qdrant-mcp-server/commit/fb1d64a))
12
+ * chore: initial project setup ([7930b0f](https://github.com/mhalder/qdrant-mcp-server/commit/7930b0f))
13
+ * "Claude Code Review workflow" ([8739c72](https://github.com/mhalder/qdrant-mcp-server/commit/8739c72))
14
+ * "Claude PR Assistant workflow" ([01ad2e7](https://github.com/mhalder/qdrant-mcp-server/commit/01ad2e7))
15
+ * Merge pull request #12 from mhalder/add-claude-github-actions-1759866978728 ([6783076](https://github.com/mhalder/qdrant-mcp-server/commit/6783076)), closes [#12](https://github.com/mhalder/qdrant-mcp-server/issues/12)
16
+ * Merge pull request #13 from mhalder/examples-directory ([9e7c312](https://github.com/mhalder/qdrant-mcp-server/commit/9e7c312)), closes [#13](https://github.com/mhalder/qdrant-mcp-server/issues/13)
17
+ * Merge pull request #15 from mhalder/add-mit-license ([6e9525d](https://github.com/mhalder/qdrant-mcp-server/commit/6e9525d)), closes [#15](https://github.com/mhalder/qdrant-mcp-server/issues/15)
18
+ * Merge pull request #16 from mhalder/feat/rate-limiting-issue-6 ([fa3601e](https://github.com/mhalder/qdrant-mcp-server/commit/fa3601e)), closes [#16](https://github.com/mhalder/qdrant-mcp-server/issues/16)
19
+ * Merge pull request #17 from mhalder/feat/alternative-embedding-providers-issue-2 ([4670e29](https://github.com/mhalder/qdrant-mcp-server/commit/4670e29)), closes [#17](https://github.com/mhalder/qdrant-mcp-server/issues/17)
20
+ * Merge pull request #19 from mhalder/feat/use-ollama-as-default-issue-18 ([8b1075f](https://github.com/mhalder/qdrant-mcp-server/commit/8b1075f)), closes [#19](https://github.com/mhalder/qdrant-mcp-server/issues/19)
21
+ * test: add comprehensive tests for embedding provider architecture ([b2db1b4](https://github.com/mhalder/qdrant-mcp-server/commit/b2db1b4))
22
+ * test: add comprehensive unit tests for openai embeddings ([466a012](https://github.com/mhalder/qdrant-mcp-server/commit/466a012))
23
+ * test: add comprehensive unit tests for qdrant client ([0f6c3a9](https://github.com/mhalder/qdrant-mcp-server/commit/0f6c3a9))
24
+ * test: add comprehensive validation tests for environment variables ([1ae89b6](https://github.com/mhalder/qdrant-mcp-server/commit/1ae89b6))
25
+ * test: add functional testing round 3 for multi-provider architecture ([9588810](https://github.com/mhalder/qdrant-mcp-server/commit/9588810))
26
+ * test: add integration tests for mcp server tools ([b504329](https://github.com/mhalder/qdrant-mcp-server/commit/b504329))
27
+ * test: add interactive MCP testing round 4 results ([0cdc763](https://github.com/mhalder/qdrant-mcp-server/commit/0cdc763))
28
+ * test: add testing infrastructure with vitest ([35beed7](https://github.com/mhalder/qdrant-mcp-server/commit/35beed7))
29
+ * test: fix error handling tests and improve coverage ([1219574](https://github.com/mhalder/qdrant-mcp-server/commit/1219574))
30
+ * test: improve coverage for error handling paths ([833b3ef](https://github.com/mhalder/qdrant-mcp-server/commit/833b3ef))
31
+ * test: improve coverage reporting to 95.75% ([0a061d2](https://github.com/mhalder/qdrant-mcp-server/commit/0a061d2))
32
+ * test: update test expectations for ID normalization and document feature ([dce948d](https://github.com/mhalder/qdrant-mcp-server/commit/dce948d))
33
+ * fix: add copyright holder to LICENSE file ([d4f926b](https://github.com/mhalder/qdrant-mcp-server/commit/d4f926b))
34
+ * fix: add package-lock.json for reproducible builds ([ffc6385](https://github.com/mhalder/qdrant-mcp-server/commit/ffc6385))
35
+ * fix: add type guard for message.toLowerCase() call ([b622650](https://github.com/mhalder/qdrant-mcp-server/commit/b622650))
36
+ * fix: add validation for Retry-After header parsing ([f6e2d0f](https://github.com/mhalder/qdrant-mcp-server/commit/f6e2d0f))
37
+ * fix: address code quality issues and version mismatch ([8f48300](https://github.com/mhalder/qdrant-mcp-server/commit/8f48300))
38
+ * fix: convert simple key-value filters to Qdrant filter format ([cf7f684](https://github.com/mhalder/qdrant-mcp-server/commit/cf7f684))
39
+ * fix: generate coverage files before Codecov upload ([5e7369c](https://github.com/mhalder/qdrant-mcp-server/commit/5e7369c))
40
+ * fix: improve API key validation and Ollama error messages ([a556358](https://github.com/mhalder/qdrant-mcp-server/commit/a556358)), closes [#19](https://github.com/mhalder/qdrant-mcp-server/issues/19)
41
+ * fix: normalize string IDs to UUID format and enhance error handling ([75478e3](https://github.com/mhalder/qdrant-mcp-server/commit/75478e3))
42
+ * fix: select provider-specific API key in factory ([be2ed4b](https://github.com/mhalder/qdrant-mcp-server/commit/be2ed4b))
43
+ * feat: add Ollama model existence validation on startup ([3086563](https://github.com/mhalder/qdrant-mcp-server/commit/3086563))
44
+ * feat: add support for alternative embedding providers ([3762c43](https://github.com/mhalder/qdrant-mcp-server/commit/3762c43)), closes [#2](https://github.com/mhalder/qdrant-mcp-server/issues/2)
45
+ * feat: implement mcp server with semantic search tools ([3b99fce](https://github.com/mhalder/qdrant-mcp-server/commit/3b99fce))
46
+ * feat: implement OpenAI API rate limiting with exponential backoff ([c619570](https://github.com/mhalder/qdrant-mcp-server/commit/c619570)), closes [#6](https://github.com/mhalder/qdrant-mcp-server/issues/6)
47
+ * feat: implement openai embeddings provider ([e44c50c](https://github.com/mhalder/qdrant-mcp-server/commit/e44c50c))
48
+ * feat: implement qdrant client wrapper ([3195e63](https://github.com/mhalder/qdrant-mcp-server/commit/3195e63))
49
+ * feat: support both simple and Qdrant filter formats ([e5bb8fe](https://github.com/mhalder/qdrant-mcp-server/commit/e5bb8fe))
50
+ * feat: use Ollama as default embedding provider ([4342591](https://github.com/mhalder/qdrant-mcp-server/commit/4342591)), closes [#18](https://github.com/mhalder/qdrant-mcp-server/issues/18)
51
+ * docs: add Codecov badge to README ([fff50d2](https://github.com/mhalder/qdrant-mcp-server/commit/fff50d2))
52
+ * docs: add comment about Bottleneck reservoir configuration ([252fa9f](https://github.com/mhalder/qdrant-mcp-server/commit/252fa9f))
53
+ * docs: add comprehensive examples directory ([7ef9cf5](https://github.com/mhalder/qdrant-mcp-server/commit/7ef9cf5)), closes [#4](https://github.com/mhalder/qdrant-mcp-server/issues/4)
54
+ * docs: add comprehensive README with setup instructions ([4517207](https://github.com/mhalder/qdrant-mcp-server/commit/4517207))
55
+ * docs: add functional test report ([c0838bf](https://github.com/mhalder/qdrant-mcp-server/commit/c0838bf))
56
+ * docs: add MIT LICENSE file and update README ([3e427df](https://github.com/mhalder/qdrant-mcp-server/commit/3e427df))
57
+ * docs: add testing documentation to README ([cb5d62b](https://github.com/mhalder/qdrant-mcp-server/commit/cb5d62b))
58
+ * docs: comprehensive update to README with filtering examples ([66ec1b5](https://github.com/mhalder/qdrant-mcp-server/commit/66ec1b5))
59
+ * docs: streamline test report with latest MCP integration results ([b30cd04](https://github.com/mhalder/qdrant-mcp-server/commit/b30cd04))
60
+ * docs: update CI badge with correct GitHub username ([9d8bdfb](https://github.com/mhalder/qdrant-mcp-server/commit/9d8bdfb))
61
+ * docs: update configuration for claude code on linux ([429d514](https://github.com/mhalder/qdrant-mcp-server/commit/429d514))
62
+ * docs: update documentation for multi-provider support ([18196a1](https://github.com/mhalder/qdrant-mcp-server/commit/18196a1))
63
+ * docs: update documentation for Ollama as default provider ([60818dd](https://github.com/mhalder/qdrant-mcp-server/commit/60818dd))
64
+ * docs: update examples and version for Ollama as default ([eb7bd4d](https://github.com/mhalder/qdrant-mcp-server/commit/eb7bd4d))
65
+ * docs: update test report and README with v2 integration test results ([1ff1e22](https://github.com/mhalder/qdrant-mcp-server/commit/1ff1e22))
66
+ * ci: add GitHub Actions workflow for automated testing ([9420261](https://github.com/mhalder/qdrant-mcp-server/commit/9420261))
67
+ * ci: add provider verification tests to GitHub Actions ([f4d1f7d](https://github.com/mhalder/qdrant-mcp-server/commit/f4d1f7d))
68
+ * ci: remove Node.js 18.x from test matrix ([bf5f478](https://github.com/mhalder/qdrant-mcp-server/commit/bf5f478))
69
+ * ci: test Codecov integration with updated token ([60b5f2c](https://github.com/mhalder/qdrant-mcp-server/commit/60b5f2c))
70
+ * style: format CI workflow with yamlfmt ([cedf0f8](https://github.com/mhalder/qdrant-mcp-server/commit/cedf0f8))
71
+ * perf: optimize Ollama batch embedding with parallel processing ([7736c32](https://github.com/mhalder/qdrant-mcp-server/commit/7736c32))
72
+ * refactor: move verification script to scripts/ folder ([a25373f](https://github.com/mhalder/qdrant-mcp-server/commit/a25373f))
73
+ * refactor: replace error:any with typed OpenAIError interface ([08a0d23](https://github.com/mhalder/qdrant-mcp-server/commit/08a0d23))
@@ -0,0 +1,176 @@
1
+ # Contributing to qdrant-mcp-server
2
+
3
+ Thank you for your interest in contributing to qdrant-mcp-server! This document provides guidelines and instructions for contributing to the project.
4
+
5
+ ## Code of Conduct
6
+
7
+ Please be respectful and constructive in your interactions with other contributors.
8
+
9
+ ## Getting Started
10
+
11
+ 1. Fork the repository
12
+ 2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/qdrant-mcp-server.git`
13
+ 3. Install dependencies: `npm install`
14
+ 4. Create a branch for your changes: `git checkout -b feat/your-feature-name`
15
+
16
+ ## Development Workflow
17
+
18
+ ### Running the Project
19
+
20
+ ```bash
21
+ # Build the project
22
+ npm run build
23
+
24
+ # Run in development mode
25
+ npm run dev
26
+
27
+ # Run tests
28
+ npm test
29
+
30
+ # Run tests with UI
31
+ npm run test:ui
32
+
33
+ # Run tests with coverage
34
+ npm run test:coverage
35
+
36
+ # Run provider verification tests
37
+ npm run test:providers
38
+
39
+ # Type check
40
+ npm run type-check
41
+ ```
42
+
43
+ ### Making Changes
44
+
45
+ 1. Make your changes in your feature branch
46
+ 2. Add tests for your changes
47
+ 3. Ensure all tests pass: `npm test -- --run`
48
+ 4. Ensure type checking passes: `npm run type-check`
49
+ 5. Build the project: `npm run build`
50
+ 6. Commit your changes using conventional commits (see below)
51
+
52
+ ## Commit Message Convention
53
+
54
+ This project uses [Conventional Commits](https://www.conventionalcommits.org/) for commit messages. This enables automated versioning and changelog generation.
55
+
56
+ ### Commit Message Format
57
+
58
+ ```
59
+ <type>(<scope>): <subject>
60
+
61
+ <body>
62
+
63
+ <footer>
64
+ ```
65
+
66
+ ### Commit Types
67
+
68
+ - **feat**: A new feature (triggers minor version bump)
69
+ - **fix**: A bug fix (triggers patch version bump)
70
+ - **docs**: Documentation changes (triggers patch version bump)
71
+ - **style**: Code style changes (formatting, missing semicolons, etc.)
72
+ - **refactor**: Code refactoring without changing functionality (triggers patch version bump)
73
+ - **perf**: Performance improvements (triggers patch version bump)
74
+ - **test**: Adding or updating tests
75
+ - **chore**: Changes to build process, dependencies, etc.
76
+ - **ci**: Changes to CI/CD configuration
77
+ - **build**: Changes to build system
78
+
79
+ ### Breaking Changes
80
+
81
+ For breaking changes, add `BREAKING CHANGE:` in the commit body or footer, or append `!` after the type:
82
+
83
+ ```
84
+ feat!: remove support for Node 16
85
+
86
+ BREAKING CHANGE: Node 16 is no longer supported
87
+ ```
88
+
89
+ ### Examples
90
+
91
+ ```bash
92
+ # Feature
93
+ feat(embeddings): add support for new embedding provider
94
+
95
+ # Bug fix
96
+ fix(search): correct similarity score calculation
97
+
98
+ # Documentation
99
+ docs: update installation instructions
100
+
101
+ # Breaking change
102
+ feat!: change collection schema format
103
+
104
+ BREAKING CHANGE: collection schema now requires version field
105
+ ```
106
+
107
+ ### Commit Message Validation
108
+
109
+ Commit messages are validated using commitlint. Invalid commit messages will be rejected. The validation enforces:
110
+
111
+ - Commit message must follow conventional commits format
112
+ - Type must be one of: feat, fix, docs, style, refactor, perf, test, chore, ci, build
113
+ - Subject must not be empty
114
+ - Subject must not end with a period
115
+ - Header must not exceed 100 characters
116
+ - Subject must not start with uppercase
117
+
118
+ ## Pull Request Process
119
+
120
+ 1. Update the README.md with details of changes if needed
121
+ 2. Update tests to cover your changes
122
+ 3. Ensure all CI checks pass
123
+ 4. Request review from maintainers
124
+ 5. Once approved, your PR will be merged
125
+
126
+ ### PR Title
127
+
128
+ PR titles should also follow conventional commit format:
129
+
130
+ ```
131
+ feat: add new search feature
132
+ fix: resolve connection timeout issue
133
+ docs: improve setup documentation
134
+ ```
135
+
136
+ ## Release Process
137
+
138
+ This project uses [semantic-release](https://semantic-release.gitbook.io/) for automated releases.
139
+
140
+ - Releases are automatically created when changes are merged to the `main` branch
141
+ - Version numbers follow [Semantic Versioning](https://semver.org/)
142
+ - Changelog is automatically generated from commit messages
143
+ - Packages are automatically published to npm
144
+
145
+ ### Version Bumping
146
+
147
+ - `feat` commits → minor version bump (1.x.0)
148
+ - `fix`, `perf`, `docs`, `refactor` commits → patch version bump (1.0.x)
149
+ - Commits with `BREAKING CHANGE` → major version bump (x.0.0)
150
+
151
+ ## Project Structure
152
+
153
+ ```
154
+ qdrant-mcp-server/
155
+ ├── src/ # Source code
156
+ ├── build/ # Compiled output
157
+ ├── scripts/ # Utility scripts
158
+ ├── .github/ # GitHub Actions workflows
159
+ ├── .husky/ # Git hooks
160
+ └── tests/ # Test files
161
+ ```
162
+
163
+ ## Testing
164
+
165
+ - Write tests for all new features and bug fixes
166
+ - Maintain or improve code coverage
167
+ - Run the full test suite before submitting PRs
168
+ - Include both unit tests and integration tests where appropriate
169
+
170
+ ## Questions?
171
+
172
+ If you have questions about contributing, please open an issue for discussion.
173
+
174
+ ## License
175
+
176
+ By contributing to qdrant-mcp-server, you agree that your contributions will be licensed under the project's MIT License.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Martin Halder and contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.