claudepod 1.1.2 → 1.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.
- package/.devcontainer/.env +18 -0
- package/.devcontainer/CHANGELOG.md +68 -0
- package/.devcontainer/CLAUDE.md +100 -0
- package/.devcontainer/README.md +220 -0
- package/.devcontainer/config/main-system-prompt.md +118 -0
- package/.devcontainer/config/settings.json +41 -0
- package/.devcontainer/devcontainer.json +71 -113
- package/.devcontainer/features/README.md +113 -0
- package/.devcontainer/features/ast-grep/README.md +24 -0
- package/.devcontainer/features/ast-grep/devcontainer-feature.json +24 -0
- package/.devcontainer/features/ast-grep/install.sh +51 -0
- package/.devcontainer/features/ccstatusline/README.md +296 -0
- package/.devcontainer/features/ccstatusline/devcontainer-feature.json +19 -0
- package/.devcontainer/features/ccstatusline/install.sh +290 -0
- package/.devcontainer/features/ccusage/README.md +205 -0
- package/.devcontainer/features/ccusage/devcontainer-feature.json +38 -0
- package/.devcontainer/features/ccusage/install.sh +132 -0
- package/.devcontainer/features/claude-code/README.md +498 -0
- package/.devcontainer/features/claude-code/config/settings.json +36 -0
- package/.devcontainer/features/claude-code/config/system-prompt.md +118 -0
- package/.devcontainer/features/claude-code/config/world-building-sp.md +1432 -0
- package/.devcontainer/features/claude-code/devcontainer-feature.json +42 -0
- package/.devcontainer/features/claude-code/install.sh +466 -0
- package/.devcontainer/features/claude-monitor/README.md +74 -0
- package/.devcontainer/features/claude-monitor/devcontainer-feature.json +38 -0
- package/.devcontainer/features/claude-monitor/install.sh +99 -0
- package/.devcontainer/features/lsp-servers/README.md +85 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +34 -0
- package/.devcontainer/features/lsp-servers/install.sh +92 -0
- package/.devcontainer/features/mcp-qdrant/CHANGES.md +399 -0
- package/.devcontainer/features/mcp-qdrant/README.md +474 -0
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +57 -0
- package/.devcontainer/features/mcp-qdrant/install.sh +295 -0
- package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +129 -0
- package/.devcontainer/features/mcp-reasoner/README.md +177 -0
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +20 -0
- package/.devcontainer/features/mcp-reasoner/install.sh +177 -0
- package/.devcontainer/features/mcp-reasoner/poststart-hook.sh +67 -0
- package/.devcontainer/features/splitrail/README.md +140 -0
- package/.devcontainer/features/splitrail/devcontainer-feature.json +34 -0
- package/.devcontainer/features/splitrail/install.sh +129 -0
- package/.devcontainer/features/tree-sitter/README.md +138 -0
- package/.devcontainer/features/tree-sitter/devcontainer-feature.json +52 -0
- package/.devcontainer/features/tree-sitter/install.sh +173 -0
- package/.devcontainer/scripts/setup-aliases.sh +52 -0
- package/.devcontainer/scripts/setup-config.sh +28 -0
- package/.devcontainer/scripts/setup-irie-claude.sh +32 -0
- package/.devcontainer/scripts/setup-lsp.sh +20 -0
- package/.devcontainer/scripts/setup-plugins.sh +31 -0
- package/.devcontainer/scripts/setup.sh +60 -0
- package/README.md +153 -187
- package/package.json +5 -9
- package/setup.js +2 -2
- package/.devcontainer/config/claude/mcp.json +0 -76
- package/.devcontainer/config/claude/mcp.json.template +0 -117
- package/.devcontainer/config/claude/output-styles/strict-development.md +0 -158
- package/.devcontainer/config/claude/settings.json +0 -10
- package/.devcontainer/config/claude/system-prompt.md +0 -3
- package/.devcontainer/config/searxng/ods_config.json +0 -22
- package/.devcontainer/config/searxng/searxng_env_template +0 -71
- package/.devcontainer/config/serena/serena_config.yml +0 -72
- package/.devcontainer/config/taskmaster/config.json +0 -37
- package/.devcontainer/ods_config.json +0 -21
- package/.devcontainer/post-create.sh +0 -1077
- package/.devcontainer/post-start.sh +0 -551
- package/.devcontainer/sanitize-system-prompt.sh +0 -31
- package/.devcontainer/scripts/config/claude-core.sh +0 -210
- package/.devcontainer/scripts/config/searxng.sh +0 -411
- package/.devcontainer/scripts/config/serena.sh +0 -47
- package/.devcontainer/scripts/config/taskmaster.sh +0 -41
- package/.devcontainer/scripts/generate-mcp-config.js +0 -205
- package/.devcontainer/scripts/install/claude-code.sh +0 -112
- package/.devcontainer/scripts/shell/zsh-config.sh +0 -271
- package/.devcontainer/scripts/utils.sh +0 -44
- package/.devcontainer/setup-zsh.sh +0 -234
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# Qdrant MCP Server Feature
|
|
2
|
+
|
|
3
|
+
A DevContainer Feature that installs and configures the Qdrant MCP (Model Context Protocol) server for AI coding agents. Enables vector database integration for semantic search, embeddings management, and RAG workflows.
|
|
4
|
+
|
|
5
|
+
## Migration to Native mcpServers Support
|
|
6
|
+
|
|
7
|
+
This feature now uses **VS Code's native devcontainer mcpServers support** instead of post-start hooks. This means:
|
|
8
|
+
|
|
9
|
+
- **Declarative Configuration**: MCP server configuration lives in `devcontainer-feature.json`
|
|
10
|
+
- **Dynamic Environment Variables**: Configuration loaded from `/workspaces/.qdrant-mcp.env` at runtime
|
|
11
|
+
- **Standard Pattern**: Follows the same pattern as other MCP servers (see [ADX MCP Server](https://github.com/pab1it0/adx-mcp-server))
|
|
12
|
+
- **No Claude CLI Registration**: Automatic integration with VS Code without manual CLI commands
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"features": {
|
|
19
|
+
"ghcr.io/devcontainers/features/python:1": {},
|
|
20
|
+
"ghcr.io/devcontainers/features/common-utils:2": {},
|
|
21
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
22
|
+
"qdrantUrl": "https://your-cluster.cloud.qdrant.io:6333",
|
|
23
|
+
"qdrantApiKey": "${env:QDRANT_API_KEY}",
|
|
24
|
+
"collectionName": "my-vectors",
|
|
25
|
+
"embeddingModel": "all-MiniLM-L6-v2"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Note:** This feature requires Python and common-utils features to be installed first (they provide `uvx` and `jq`).
|
|
32
|
+
|
|
33
|
+
## Options
|
|
34
|
+
|
|
35
|
+
| Option | Type | Default | Description |
|
|
36
|
+
|--------|------|---------|-------------|
|
|
37
|
+
| `qdrantUrl` | string | `""` | Qdrant instance URL. If set, uses cloud mode. If empty, uses local mode. |
|
|
38
|
+
| `qdrantApiKey` | string | `""` | API key for Qdrant Cloud authentication (required for cloud mode) |
|
|
39
|
+
| `qdrantLocalPath` | string | `/workspaces/.qdrant/storage` | Local storage path (only used when qdrantUrl is empty) |
|
|
40
|
+
| `collectionName` | string | `agent-memory` | Default collection name for vectors |
|
|
41
|
+
| `embeddingModel` | string | `all-MiniLM-L6-v2` | FastEmbed model (must be one of the supported models) |
|
|
42
|
+
| `username` | string | `automatic` | User to install for (auto-detects: vscode, node, codespace, or root) |
|
|
43
|
+
|
|
44
|
+
### Configuration Modes
|
|
45
|
+
|
|
46
|
+
**Cloud Mode** (when `qdrantUrl` is set):
|
|
47
|
+
- Connects to Qdrant Cloud or self-hosted instance
|
|
48
|
+
- Requires valid URL starting with `http://` or `https://`
|
|
49
|
+
- Requires `qdrantApiKey` for authentication
|
|
50
|
+
- Data persists across container rebuilds
|
|
51
|
+
|
|
52
|
+
**Local Mode** (when `qdrantUrl` is empty):
|
|
53
|
+
- Uses local file storage via `qdrantLocalPath`
|
|
54
|
+
- No API key needed
|
|
55
|
+
- Data stored in container filesystem
|
|
56
|
+
- **Warning:** Data lost on container rebuild unless path is volume-mounted
|
|
57
|
+
|
|
58
|
+
### Important: Environment Variable Naming
|
|
59
|
+
|
|
60
|
+
DevContainer Features convert camelCase option names to UPPERCASE without underscores:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
devcontainer.json → Environment Variable
|
|
64
|
+
"qdrantUrl" → $QDRANTURL (not $QDRANT_URL)
|
|
65
|
+
"qdrantApiKey" → $QDRANTAPIKEY (not $QDRANT_API_KEY)
|
|
66
|
+
"collectionName" → $COLLECTIONNAME
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
This is standard DevContainer Features behavior. Use `${env:VAR}` syntax for secrets:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"features": {
|
|
74
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
75
|
+
"qdrantApiKey": "${env:QDRANT_API_KEY}"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Examples
|
|
82
|
+
|
|
83
|
+
### Qdrant Cloud Configuration
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"features": {
|
|
88
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
89
|
+
"qdrantUrl": "https://xyz-cluster.us-east4-0.gcp.cloud.qdrant.io:6333",
|
|
90
|
+
"qdrantApiKey": "${env:QDRANT_API_KEY}",
|
|
91
|
+
"collectionName": "project-knowledge"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Local Qdrant Instance
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"features": {
|
|
102
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
103
|
+
"qdrantLocalPath": "/workspaces/.qdrant/storage",
|
|
104
|
+
"collectionName": "local-vectors"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Custom Embedding Model
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"features": {
|
|
115
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
116
|
+
"qdrantUrl": "https://my-instance.cloud.qdrant.io:6333",
|
|
117
|
+
"qdrantApiKey": "${env:QDRANT_API_KEY}",
|
|
118
|
+
"embeddingModel": "BAAI/bge-base-en-v1.5"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## What This Feature Installs
|
|
125
|
+
|
|
126
|
+
- **mcp-server-qdrant**: Python package installed via `uvx` (cached, no repeated downloads)
|
|
127
|
+
- **Native mcpServers Support**: Automatically configures the MCP server in `.devcontainer/devcontainer-feature.json` using VS Code's native mcpServers support
|
|
128
|
+
- **Environment File**: Creates `/workspaces/.qdrant-mcp.env` with dynamic configuration variables
|
|
129
|
+
- **Disk Usage**: ~500MB-2GB depending on embedding model (stored in `~/.cache/fastembed/`)
|
|
130
|
+
|
|
131
|
+
## Requirements
|
|
132
|
+
|
|
133
|
+
This feature has explicit dependencies that **must** be installed first:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"features": {
|
|
138
|
+
"ghcr.io/devcontainers/features/python:1": {},
|
|
139
|
+
"ghcr.io/devcontainers/features/common-utils:2": {},
|
|
140
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Required by this feature:**
|
|
146
|
+
- **Python + uvx**: For running mcp-server-qdrant
|
|
147
|
+
- **jq**: For safe JSON generation (from common-utils)
|
|
148
|
+
|
|
149
|
+
The feature will validate these are present and exit with an error if missing.
|
|
150
|
+
|
|
151
|
+
## Features
|
|
152
|
+
|
|
153
|
+
- ✅ **Automatic Installation**: Installs Qdrant MCP server via uvx
|
|
154
|
+
- ✅ **Cloud or Local**: Supports both Qdrant Cloud and local instances
|
|
155
|
+
- ✅ **Idempotent**: Safe to run multiple times
|
|
156
|
+
- ✅ **Multi-user**: Automatically detects container user
|
|
157
|
+
- ✅ **Native mcpServers**: Uses VS Code's native devcontainer mcpServers support (declarative configuration)
|
|
158
|
+
- ✅ **Dynamic Configuration**: Environment variables loaded from `/workspaces/.qdrant-mcp.env` file
|
|
159
|
+
- ✅ **Secure**: API keys protected with 600 permissions on env file
|
|
160
|
+
|
|
161
|
+
## Embedding Models
|
|
162
|
+
|
|
163
|
+
Available embedding models:
|
|
164
|
+
|
|
165
|
+
| Model | Dimensions | Speed | Quality | Use Case |
|
|
166
|
+
|-------|-----------|-------|---------|----------|
|
|
167
|
+
| `all-MiniLM-L6-v2` | 384 | ⚡⚡⚡ | ⭐⭐ | Default, fast |
|
|
168
|
+
| `BAAI/bge-small-en-v1.5` | 384 | ⚡⚡ | ⭐⭐⭐ | Better retrieval |
|
|
169
|
+
| `sentence-transformers/all-mpnet-base-v2` | 768 | ⚡ | ⭐⭐⭐⭐ | Higher quality |
|
|
170
|
+
| `BAAI/bge-base-en-v1.5` | 768 | ⚡ | ⭐⭐⭐⭐⭐ | State-of-the-art |
|
|
171
|
+
|
|
172
|
+
## Configuration
|
|
173
|
+
|
|
174
|
+
### ✅ Automatic Setup
|
|
175
|
+
|
|
176
|
+
This feature automatically configures the Qdrant MCP server using VS Code's native **devcontainer mcpServers support**. Configuration is declarative and lives in the feature definition with dynamic environment variables loaded from `/workspaces/.qdrant-mcp.env`.
|
|
177
|
+
|
|
178
|
+
**No manual configuration steps required!**
|
|
179
|
+
|
|
180
|
+
### Architecture
|
|
181
|
+
|
|
182
|
+
The configuration chain works as follows:
|
|
183
|
+
|
|
184
|
+
1. **Feature Definition** (`devcontainer-feature.json`): Declares the MCP server configuration
|
|
185
|
+
2. **Environment File** (`/workspaces/.qdrant-mcp.env`): Contains runtime environment variables
|
|
186
|
+
3. **VS Code Integration**: Automatically loads the server on devcontainer startup
|
|
187
|
+
4. **MCP Server**: Runs via `uvx mcp-server-qdrant` with environment variables from the envFile
|
|
188
|
+
|
|
189
|
+
### Verify It Worked
|
|
190
|
+
|
|
191
|
+
**1. Check that the environment file was created:**
|
|
192
|
+
```bash
|
|
193
|
+
cat /workspaces/.qdrant-mcp.env
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
You should see all configuration variables (some may be empty for local mode):
|
|
197
|
+
```
|
|
198
|
+
COLLECTION_NAME=agent-memory
|
|
199
|
+
EMBEDDING_MODEL=all-MiniLM-L6-v2
|
|
200
|
+
QDRANT_URL=
|
|
201
|
+
QDRANT_API_KEY=
|
|
202
|
+
QDRANT_LOCAL_PATH=/workspaces/.qdrant/storage
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**2. Verify the MCP server configuration:**
|
|
206
|
+
```bash
|
|
207
|
+
# Check the feature defines it
|
|
208
|
+
grep -A 5 '"qdrant"' .devcontainer/features/mcp-qdrant/devcontainer-feature.json
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**3. Restart VS Code or your dev container**
|
|
212
|
+
|
|
213
|
+
**4. Test it:**
|
|
214
|
+
|
|
215
|
+
Ask your AI agent:
|
|
216
|
+
```
|
|
217
|
+
"Show me what MCP servers you have available"
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
You should see `qdrant` listed with tools like `add_point`, `search`, etc.
|
|
221
|
+
|
|
222
|
+
Then test storing data:
|
|
223
|
+
```
|
|
224
|
+
"Store this in my Qdrant collection: Test message"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Manual Reconfiguration (Optional)
|
|
228
|
+
|
|
229
|
+
If you need to change environment variables after installation:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Edit the environment file
|
|
233
|
+
vim /workspaces/.qdrant-mcp.env
|
|
234
|
+
|
|
235
|
+
# Restart your container/agent to load new values
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Usage with AI Agents
|
|
239
|
+
|
|
240
|
+
### Claude Code
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
"Store this document in my Qdrant collection"
|
|
244
|
+
"Search my knowledge base for information about vectors"
|
|
245
|
+
"What did I store yesterday about embeddings?"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Available MCP Tools
|
|
249
|
+
|
|
250
|
+
The Qdrant MCP server provides:
|
|
251
|
+
- `add_point` - Add text with embeddings
|
|
252
|
+
- `search` - Semantic similarity search
|
|
253
|
+
- `get_point` - Retrieve by ID
|
|
254
|
+
- `delete_point` - Remove from collection
|
|
255
|
+
- `list_collections` - View all collections
|
|
256
|
+
- `create_collection` - Create new collection
|
|
257
|
+
|
|
258
|
+
## Architecture
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
AI Agent (Claude Code, Cline, etc.)
|
|
262
|
+
↓
|
|
263
|
+
Model Context Protocol
|
|
264
|
+
↓
|
|
265
|
+
mcp-server-qdrant (uvx)
|
|
266
|
+
↓
|
|
267
|
+
FastEmbed (embedding generation)
|
|
268
|
+
↓
|
|
269
|
+
Qdrant Client
|
|
270
|
+
↓
|
|
271
|
+
Qdrant Cloud / Local Instance
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## Getting Qdrant Credentials
|
|
275
|
+
|
|
276
|
+
### Qdrant Cloud (Recommended for Getting Started)
|
|
277
|
+
|
|
278
|
+
1. Visit [cloud.qdrant.io](https://cloud.qdrant.io)
|
|
279
|
+
2. Create a free cluster
|
|
280
|
+
3. Copy cluster URL from dashboard
|
|
281
|
+
4. Generate API key
|
|
282
|
+
5. Add to `.env` or devcontainer.json:
|
|
283
|
+
```bash
|
|
284
|
+
QDRANT_API_KEY=your-key-here
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Local Qdrant
|
|
288
|
+
|
|
289
|
+
No credentials needed. Just specify `qdrantLocalPath`.
|
|
290
|
+
|
|
291
|
+
## Troubleshooting
|
|
292
|
+
|
|
293
|
+
### Server Not Appearing in AI Agent
|
|
294
|
+
|
|
295
|
+
**Symptom:** Installation succeeds but agent doesn't see Qdrant MCP server
|
|
296
|
+
|
|
297
|
+
**Cause:** Environment file not created or devcontainer not restarted
|
|
298
|
+
|
|
299
|
+
**Solution:**
|
|
300
|
+
```bash
|
|
301
|
+
# Verify the environment file exists and has correct permissions
|
|
302
|
+
ls -la /workspaces/.qdrant-mcp.env
|
|
303
|
+
# Should show: -rw------- (600)
|
|
304
|
+
|
|
305
|
+
# Check the file contents
|
|
306
|
+
cat /workspaces/.qdrant-mcp.env
|
|
307
|
+
|
|
308
|
+
# Restart your devcontainer in VS Code:
|
|
309
|
+
# Command Palette → "Dev Containers: Rebuild and Reopen in Container"
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Installation Fails: "uvx is not available"
|
|
313
|
+
|
|
314
|
+
**Cause:** Python feature not installed first
|
|
315
|
+
|
|
316
|
+
**Solution:** Add Python feature before mcp-qdrant:
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"features": {
|
|
320
|
+
"ghcr.io/devcontainers/features/python:1": {},
|
|
321
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Installation Fails: "jq is not available"
|
|
327
|
+
|
|
328
|
+
**Cause:** common-utils feature not installed
|
|
329
|
+
|
|
330
|
+
**Solution:** Add common-utils feature:
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"features": {
|
|
334
|
+
"ghcr.io/devcontainers/features/common-utils:2": {},
|
|
335
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Connection Issues (Cloud Mode)
|
|
341
|
+
|
|
342
|
+
**Symptom:** "Connection refused" or timeout errors
|
|
343
|
+
|
|
344
|
+
**Checks:**
|
|
345
|
+
- Verify URL format: `https://cluster.cloud.qdrant.io:6333` (must include `:6333`)
|
|
346
|
+
- Test connectivity: `curl -H "api-key: YOUR_KEY" https://your-url:6333/health`
|
|
347
|
+
- Check API key is valid in Qdrant Cloud dashboard
|
|
348
|
+
- Ensure cluster is running (not paused)
|
|
349
|
+
|
|
350
|
+
### Connection Issues (Local Mode)
|
|
351
|
+
|
|
352
|
+
**Symptom:** "Permission denied" or "Directory not found"
|
|
353
|
+
|
|
354
|
+
**Checks:**
|
|
355
|
+
```bash
|
|
356
|
+
# Verify directory exists
|
|
357
|
+
ls -la /workspaces/.qdrant/storage
|
|
358
|
+
|
|
359
|
+
# Check ownership
|
|
360
|
+
ls -ld /workspaces/.qdrant/storage
|
|
361
|
+
# Should show: drwxr-xr-x ... vscode vscode ...
|
|
362
|
+
|
|
363
|
+
# Fix permissions if needed
|
|
364
|
+
sudo chown -R vscode:vscode /workspaces/.qdrant/storage
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Embedding Model Issues
|
|
368
|
+
|
|
369
|
+
**Symptom:** "Model not found" or slow first run
|
|
370
|
+
|
|
371
|
+
**Explanation:**
|
|
372
|
+
- First use downloads model (~200MB-2GB) to `~/.cache/fastembed/`
|
|
373
|
+
- Subsequent uses are fast (model cached)
|
|
374
|
+
- Ensure sufficient disk space
|
|
375
|
+
|
|
376
|
+
**Check cache:**
|
|
377
|
+
```bash
|
|
378
|
+
du -sh ~/.cache/fastembed/
|
|
379
|
+
ls ~/.cache/fastembed/
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Permission Errors
|
|
383
|
+
|
|
384
|
+
**Symptom:** "Permission denied" when accessing config files
|
|
385
|
+
|
|
386
|
+
**Solution:**
|
|
387
|
+
```bash
|
|
388
|
+
# Check who owns the config
|
|
389
|
+
ls -la ~/.config/mcp/qdrant-config.json
|
|
390
|
+
|
|
391
|
+
# Fix if needed (replace 'vscode' with your username)
|
|
392
|
+
sudo chown -R vscode:vscode ~/.config/mcp/
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Security Best Practices
|
|
396
|
+
|
|
397
|
+
### Protecting API Keys
|
|
398
|
+
|
|
399
|
+
**✅ DO:**
|
|
400
|
+
```json
|
|
401
|
+
{
|
|
402
|
+
"features": {
|
|
403
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
404
|
+
"qdrantApiKey": "${env:QDRANT_API_KEY}"
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Store in `.env` file:
|
|
411
|
+
```bash
|
|
412
|
+
# .env (add to .gitignore!)
|
|
413
|
+
QDRANT_API_KEY=your-key-here
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**❌ DON'T:**
|
|
417
|
+
```json
|
|
418
|
+
{
|
|
419
|
+
"features": {
|
|
420
|
+
"ghcr.io/yourorg/features/mcp-qdrant:1": {
|
|
421
|
+
"qdrantApiKey": "actual-key-in-plain-text" // DON'T DO THIS
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Environment File Security
|
|
428
|
+
|
|
429
|
+
The generated environment file `/workspaces/.qdrant-mcp.env` contains your API key in plain text. It is automatically protected with secure permissions:
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
# Verify permissions (should be 600 - readable only by owner)
|
|
433
|
+
ls -l /workspaces/.qdrant-mcp.env
|
|
434
|
+
# Should show: -rw------- (600)
|
|
435
|
+
|
|
436
|
+
# Never commit this file to version control
|
|
437
|
+
echo ".qdrant-mcp.env" >> .gitignore
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Qdrant Cloud Best Practices
|
|
441
|
+
|
|
442
|
+
1. **Use read-only keys** for agents that only need to query
|
|
443
|
+
2. **Create separate keys** for different agents/projects
|
|
444
|
+
3. **Rotate keys regularly** via Qdrant Cloud dashboard
|
|
445
|
+
4. **Monitor usage** to detect unauthorized access
|
|
446
|
+
5. **Use IP restrictions** if available in your Qdrant plan
|
|
447
|
+
|
|
448
|
+
### Local Mode Security
|
|
449
|
+
|
|
450
|
+
Local mode doesn't use API keys, but be aware:
|
|
451
|
+
- Data stored in plain text in `qdrantLocalPath`
|
|
452
|
+
- No encryption at rest
|
|
453
|
+
- Anyone with container access can read data
|
|
454
|
+
- Use cloud mode with encryption for sensitive data
|
|
455
|
+
|
|
456
|
+
## Resources
|
|
457
|
+
|
|
458
|
+
- [Qdrant MCP Server GitHub](https://github.com/qdrant/mcp-server-qdrant)
|
|
459
|
+
- [Qdrant Documentation](https://qdrant.tech/documentation/)
|
|
460
|
+
- [Qdrant Cloud](https://cloud.qdrant.io)
|
|
461
|
+
- [FastEmbed Models](https://qdrant.github.io/fastembed/)
|
|
462
|
+
- [Model Context Protocol](https://modelcontextprotocol.io)
|
|
463
|
+
|
|
464
|
+
## Contributing
|
|
465
|
+
|
|
466
|
+
Issues and pull requests welcome at the feature repository.
|
|
467
|
+
|
|
468
|
+
## License
|
|
469
|
+
|
|
470
|
+
MIT License - See repository for details.
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
**Part of AgentPod** - Curated DevContainer Features for AI Coding Agents
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "mcp-qdrant",
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"name": "Qdrant MCP Server",
|
|
5
|
+
"description": "Installs Qdrant MCP server for vector database integration with AI coding agents",
|
|
6
|
+
"maintainer": "AnExiledDev",
|
|
7
|
+
"documentationURL": "https://github.com/qdrant/mcp-server-qdrant",
|
|
8
|
+
"options": {
|
|
9
|
+
"qdrantUrl": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Qdrant instance URL (e.g., https://xyz.cloud.qdrant.io:6333). Leave empty for local instance.",
|
|
12
|
+
"default": ""
|
|
13
|
+
},
|
|
14
|
+
"qdrantApiKey": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Qdrant API key for authentication (required for cloud instances)",
|
|
17
|
+
"default": ""
|
|
18
|
+
},
|
|
19
|
+
"qdrantLocalPath": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Local storage path for Qdrant (used when qdrantUrl is empty)",
|
|
22
|
+
"default": "/workspaces/.qdrant/storage"
|
|
23
|
+
},
|
|
24
|
+
"collectionName": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Default collection name for storing vectors",
|
|
27
|
+
"default": "agent-memory"
|
|
28
|
+
},
|
|
29
|
+
"embeddingModel": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "FastEmbed model for generating embeddings",
|
|
32
|
+
"default": "all-MiniLM-L6-v2",
|
|
33
|
+
"enum": [
|
|
34
|
+
"all-MiniLM-L6-v2",
|
|
35
|
+
"BAAI/bge-small-en-v1.5",
|
|
36
|
+
"sentence-transformers/all-mpnet-base-v2",
|
|
37
|
+
"BAAI/bge-base-en-v1.5"
|
|
38
|
+
],
|
|
39
|
+
"proposals": [
|
|
40
|
+
"all-MiniLM-L6-v2",
|
|
41
|
+
"BAAI/bge-small-en-v1.5",
|
|
42
|
+
"sentence-transformers/all-mpnet-base-v2",
|
|
43
|
+
"BAAI/bge-base-en-v1.5"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"username": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "Container user to install for",
|
|
49
|
+
"default": "automatic"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"installsAfter": [
|
|
53
|
+
"ghcr.io/devcontainers/features/python:1",
|
|
54
|
+
"ghcr.io/devcontainers/features/common-utils:2",
|
|
55
|
+
"./features/claude-code"
|
|
56
|
+
]
|
|
57
|
+
}
|