@softtechai/quickmcp 1.1.7 → 1.1.9

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/README.md CHANGED
@@ -509,6 +509,17 @@ npx -y @softtechai/quickmcp --port=4000 --data-dir=./data
509
509
  PORT=4000 QUICKMCP_DATA_DIR=./data npx -y @softtechai/quickmcp
510
510
  ```
511
511
 
512
+ ### Varsayılan kalıcı SQLite dizini
513
+
514
+ `QUICKMCP_DATA_DIR` verilmezse QuickMCP, platforma göre kalıcı bir user-data dizini kullanır:
515
+
516
+ - macOS: `~/Library/Application Support/QuickMCP/data`
517
+ - Linux: `${XDG_DATA_HOME:-~/.local/share}/quickmcp/data`
518
+ - Windows: `%LOCALAPPDATA%\\QuickMCP\\data` (fallback: `%APPDATA%\\QuickMCP\\data`)
519
+
520
+ Bu sayede `npx` cache klasörü değişse bile veri dizini değişmez.
521
+ İsteyen kullanıcı `QUICKMCP_DATA_DIR` veya `--data-dir` ile bu yolu ezebilir.
522
+
512
523
  > Not: Web UI, stdio tabanlı MCP sunucusunun yanında yan servis olarak çalışır; Claude Desktop entegrasyonu ile çakışmaz.
513
524
 
514
525
  ### Claude Desktop ile npx kullanımı
@@ -520,7 +531,10 @@ PORT=4000 QUICKMCP_DATA_DIR=./data npx -y @softtechai/quickmcp
520
531
  "mcpServers": {
521
532
  "quickmcp": {
522
533
  "command": "npx",
523
- "args": ["-y", "@softtechai/quickmcp"]
534
+ "args": ["-y", "@softtechai/quickmcp"],
535
+ "env": {
536
+ "QUICKMCP_DATA_DIR": "/path/to/quickmcp-data"
537
+ }
524
538
  }
525
539
  }
526
540
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softtechai/quickmcp",
3
- "version": "1.1.7",
3
+ "version": "1.1.9",
4
4
  "description": "An application to generate MCP servers from various data sources and test them",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -106,6 +106,40 @@ function isProcessAlive(pid) {
106
106
  return false;
107
107
  }
108
108
  }
109
+
110
+ function resolveStableDefaultDataDir() {
111
+ const home = os.homedir() || os.tmpdir();
112
+ if (process.platform === 'win32') {
113
+ const base = process.env.LOCALAPPDATA || process.env.APPDATA || path.join(home, 'AppData', 'Local');
114
+ return path.join(base, 'QuickMCP', 'data');
115
+ }
116
+ if (process.platform === 'darwin') {
117
+ return path.join(home, 'Library', 'Application Support', 'QuickMCP', 'data');
118
+ }
119
+ const xdgDataHome = String(process.env.XDG_DATA_HOME || '').trim();
120
+ const base = xdgDataHome || path.join(home, '.local', 'share');
121
+ return path.join(base, 'quickmcp', 'data');
122
+ }
123
+
124
+ function ensureWritableDataDir(preferredDir) {
125
+ try {
126
+ fs.mkdirSync(preferredDir, { recursive: true });
127
+ fs.accessSync(preferredDir, fs.constants.W_OK);
128
+ return preferredDir;
129
+ } catch (_) {
130
+ const fallbackDir = path.join(os.tmpdir(), 'quickmcp', 'data');
131
+ try {
132
+ fs.mkdirSync(fallbackDir, { recursive: true });
133
+ } catch (_) {}
134
+ return fallbackDir;
135
+ }
136
+ }
137
+
138
+ function looksLikeNpxCachePath(dirPath) {
139
+ const normalized = String(dirPath || '').split(path.sep).join('/').toLowerCase();
140
+ return normalized.includes('/.npm/_npx/') || normalized.includes('/_npx/');
141
+ }
142
+
109
143
  // Default behavior: Web UI enabled unless explicitly disabled
110
144
  if (noWeb || process.env.QUICKMCP_ENABLE_WEB === '0' || process.env.QUICKMCP_DISABLE_WEB === '1') {
111
145
  process.env.QUICKMCP_ENABLE_WEB = '0';
@@ -120,8 +154,11 @@ if (dataDirArg) {
120
154
  const val = dataDirArg.split('=')[1];
121
155
  if (val) process.env.QUICKMCP_DATA_DIR = val;
122
156
  }
123
- if (!process.env.QUICKMCP_DATA_DIR && isNpxRuntime) {
124
- process.env.QUICKMCP_DATA_DIR = path.join(os.homedir() || os.tmpdir(), '.quickmcp', 'data');
157
+ if (!dataDirArg && looksLikeNpxCachePath(process.env.QUICKMCP_DATA_DIR)) {
158
+ process.env.QUICKMCP_DATA_DIR = '';
159
+ }
160
+ if (!process.env.QUICKMCP_DATA_DIR) {
161
+ process.env.QUICKMCP_DATA_DIR = ensureWritableDataDir(resolveStableDefaultDataDir());
125
162
  }
126
163
 
127
164
  const dataStore = safeCreateDataStore({ logger: (...args) => logger.error(...args) });