@vdpeijl/kb-mcp 0.2.1 → 0.2.2

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
@@ -7,8 +7,9 @@ MCP (Model Context Protocol) server that indexes multiple Zendesk Help Center kn
7
7
  - 🔍 **Vector Search**: Semantic search using Ollama embeddings (nomic-embed-text)
8
8
  - 📚 **Multiple Sources**: Index and search across multiple Zendesk knowledge bases
9
9
  - 🔄 **Incremental Sync**: Efficient updates - only process changed articles
10
- - 🚀 **Easy Setup**: Interactive CLI wizard for first-time configuration
10
+ - 🚀 **Easy Setup**: Interactive CLI wizard + automated Claude Code configuration
11
11
  - 🎯 **MCP Compatible**: Works with Claude Code, Cursor, Windsurf, Continue.dev, and Zed
12
+ - 🛠️ **Version Manager Support**: Compatible with fnm, nvm, volta, asdf via shell wrapper
12
13
 
13
14
  ## Prerequisites
14
15
 
@@ -48,16 +49,16 @@ ollama pull nomic-embed-text
48
49
 
49
50
  ## Installation
50
51
 
51
- ### From npm (once published)
52
+ ### From npm
52
53
 
53
54
  ```bash
54
55
  npm install -g @vdpeijl/kb-mcp
55
56
  ```
56
57
 
57
- ### From source (during development)
58
+ ### From source
58
59
 
59
60
  ```bash
60
- git clone https://github.com/paragin/kb-mcp.git
61
+ git clone https://github.com/vdpeijl/kb-mcp.git
61
62
  cd kb-mcp
62
63
  npm install
63
64
  npm run build
@@ -93,11 +94,13 @@ This will:
93
94
 
94
95
  ### 3. Configure your MCP client
95
96
 
97
+ **For Claude Code (automated):**
96
98
  ```bash
97
- kb-mcp setup cursor # or: claude-code, windsurf, continue, zed
99
+ kb-mcp setup claude-code
98
100
  ```
99
101
 
100
- Copy the printed configuration to your MCP client's config file.
102
+ **For other MCP clients:**
103
+ See the [MCP Client Configuration](#mcp-client-configuration) section below for manual setup instructions.
101
104
 
102
105
  ### 4. Restart your MCP client
103
106
 
@@ -151,14 +154,16 @@ Start the MCP server (stdio). This is normally called by your MCP client, not ma
151
154
 
152
155
  ### `kb-mcp setup [client]`
153
156
 
154
- Print MCP client configuration. Supports: claude-code, cursor, windsurf, continue, zed.
157
+ Automatically configure MCP clients. Currently supports: claude-code.
155
158
 
156
159
  **Examples:**
157
160
  ```bash
158
- kb-mcp setup # List all clients
159
- kb-mcp setup cursor # Show config for Cursor
161
+ kb-mcp setup # List available clients
162
+ kb-mcp setup claude-code # Automatically configure Claude Code
160
163
  ```
161
164
 
165
+ **Note:** For other MCP clients (Cursor, Windsurf, Continue.dev, Zed), see the manual configuration instructions below.
166
+
162
167
  ### `kb-mcp doctor`
163
168
 
164
169
  Run diagnostics to check:
@@ -176,89 +181,68 @@ Show database statistics:
176
181
  - Database file size
177
182
  - Per-source breakdown
178
183
 
179
- ## MCP Client Configuration
184
+ ### `kb-mcp uninstall`
180
185
 
181
- ### Claude Code
186
+ Remove kb-mcp data and MCP server configurations.
182
187
 
183
- Add to `~/.claude/claude_desktop_config.json`:
188
+ **Options:**
189
+ - `--keep-data` - Keep database and config files, only remove from MCP clients
184
190
 
185
- ```json
186
- {
187
- "mcpServers": {
188
- "knowledge-base": {
189
- "command": "kb-mcp",
190
- "args": ["serve"]
191
- }
192
- }
193
- }
191
+ **Examples:**
192
+ ```bash
193
+ kb-mcp uninstall # Full uninstall (removes data + MCP configs)
194
+ kb-mcp uninstall --keep-data # Only remove MCP config, keep data
194
195
  ```
195
196
 
196
- ### Cursor
197
+ This command will:
198
+ - Remove the MCP server entry from Claude Code (via `claude mcp remove`)
199
+ - Remove the data directory (`~/.local/share/kb-mcp/`)
200
+ - Remove the config directory (`~/.config/kb-mcp/`)
197
201
 
198
- Go to **Settings Features MCP Servers**, then add:
199
-
200
- ```json
201
- {
202
- "mcpServers": {
203
- "knowledge-base": {
204
- "command": "kb-mcp",
205
- "args": ["serve"]
206
- }
207
- }
208
- }
202
+ After running, you can completely remove the package with:
203
+ ```bash
204
+ npm uninstall -g @vdpeijl/kb-mcp
209
205
  ```
210
206
 
211
- ### Windsurf
207
+ ## MCP Client Configuration
212
208
 
213
- Add to `~/.codeium/windsurf/mcp_config.json`:
209
+ ### Claude Code
214
210
 
215
- ```json
216
- {
217
- "mcpServers": {
218
- "knowledge-base": {
219
- "command": "kb-mcp",
220
- "args": ["serve"]
221
- }
222
- }
223
- }
211
+ **Automated setup (recommended):**
212
+ ```bash
213
+ kb-mcp setup claude-code
224
214
  ```
225
215
 
226
- ### Continue.dev
216
+ **Manual setup:**
217
+ The setup command runs: `claude mcp add --transport stdio knowledge-base -- bash -l -c "kb-mcp serve"`
218
+
219
+ This uses a shell wrapper (`bash -l -c`) for compatibility with node version managers (fnm, nvm, volta, asdf).
227
220
 
228
- Add to `~/.continue/config.json`:
221
+ ### Other MCP Clients
229
222
 
223
+ While kb-mcp is compatible with all MCP clients (Cursor, Windsurf, Continue.dev, Zed, etc.), automated setup is currently only available for Claude Code.
224
+
225
+ **Manual configuration:**
226
+ Add kb-mcp to your MCP client's configuration file using:
230
227
  ```json
231
228
  {
232
- "experimental": {
233
- "modelContextProtocolServers": [
234
- {
235
- "transport": {
236
- "type": "stdio",
237
- "command": "kb-mcp",
238
- "args": ["serve"]
239
- }
240
- }
241
- ]
242
- }
229
+ "command": "bash",
230
+ "args": ["-l", "-c", "kb-mcp serve"]
243
231
  }
244
232
  ```
245
233
 
246
- ### Zed
234
+ > **Note:** The shell wrapper (`bash -l -c`) ensures compatibility with node version managers like fnm, nvm, volta, and asdf.
247
235
 
248
- Add to `~/.config/zed/settings.json`:
236
+ **Want to add automated setup for your favorite MCP client?**
249
237
 
250
- ```json
251
- {
252
- "context_servers": {
253
- "knowledge-base": {
254
- "command": {
255
- "path": "kb-mcp",
256
- "args": ["serve"]
257
- }
258
- }
259
- }
260
- }
261
- ```
238
+ We welcome contributions! The codebase has an extensible architecture that makes it easy to add support for new clients:
239
+
240
+ 1. See the commented examples in [`src/commands/setup.ts`](src/commands/setup.ts) and [`src/commands/uninstall.ts`](src/commands/uninstall.ts)
241
+ 2. Add your client configuration to the `CLIENT_CONFIGS` array
242
+ 3. Implement the setup/remove functions
243
+ 4. Submit a pull request!
244
+
245
+ For CLI-based clients (like Claude Code), use `execSync()`. For file-based clients, use the `setupJsonClient()` helper. Check the code for detailed examples.
262
246
 
263
247
  ## MCP Tools
264
248
 
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":";;;;;;;AAkKA,wBAmDG"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":";;;;;;;AAoGA,wBAmDG"}
@@ -1,130 +1,81 @@
1
1
  import { defineCommand } from 'citty';
2
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
3
- import { homedir } from 'os';
4
- import { join, dirname } from 'path';
5
2
  import { execSync } from 'child_process';
3
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
4
+ import { dirname } from 'path';
6
5
  import { exitWithError } from '../utils/errors.js';
7
- async function setupClaudeCode() {
8
- const cmd = 'claude mcp add --transport stdio knowledge-base -- bash -l -c "kb-mcp serve"';
9
- try {
10
- execSync(cmd, { stdio: 'inherit' });
11
- console.log('✅ Successfully configured Claude Code');
12
- }
13
- catch (error) {
14
- if (error.message?.includes('command not found')) {
15
- throw new Error('Claude Code CLI not found. Please install it first:\n npm install -g @anthropic/claude-code');
16
- }
17
- throw error;
18
- }
19
- }
6
+ /**
7
+ * Helper function to setup JSON-based MCP clients
8
+ * Reads existing config, merges the kb-mcp server entry, and writes back
9
+ */
20
10
  async function setupJsonClient(configPath, clientName, merger) {
21
- const fullPath = configPath.startsWith('~')
22
- ? join(homedir(), configPath.slice(2))
23
- : configPath;
24
11
  // Ensure directory exists
25
- mkdirSync(dirname(fullPath), { recursive: true });
12
+ mkdirSync(dirname(configPath), { recursive: true });
26
13
  // Read existing config or create new
27
14
  let config = {};
28
- if (existsSync(fullPath)) {
15
+ if (existsSync(configPath)) {
29
16
  try {
30
- const content = readFileSync(fullPath, 'utf-8');
17
+ const content = readFileSync(configPath, 'utf-8');
31
18
  config = JSON.parse(content);
32
19
  }
33
20
  catch (error) {
34
- console.warn(`⚠️ Failed to parse ${fullPath}, creating new config`);
21
+ console.warn(`⚠️ Failed to parse ${configPath}, creating new config`);
35
22
  }
36
23
  }
37
24
  // Merge configuration
38
25
  config = merger(config);
39
26
  // Write back
40
- writeFileSync(fullPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
41
- console.log(`✅ Successfully configured ${clientName} at ${fullPath}`);
27
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
28
+ console.log(`✅ Successfully configured ${clientName} at ${configPath}`);
42
29
  }
43
- const CONFIGS = {
44
- 'claude-code': {
30
+ /**
31
+ * MCP Client configurations
32
+ *
33
+ * To add support for a new client:
34
+ * 1. Add a new entry to this array
35
+ * 2. Implement the setup() function
36
+ * 3. For CLI-based clients, use execSync()
37
+ * 4. For file-based clients, use setupJsonClient() helper
38
+ */
39
+ const CLIENT_CONFIGS = [
40
+ {
41
+ key: 'claude-code',
45
42
  name: 'Claude Code',
46
- path: '~/.claude/claude_desktop_config.json',
47
- cliCommand: 'claude mcp add --transport stdio knowledge-base -- bash -l -c "kb-mcp serve"',
48
- setup: setupClaudeCode,
49
- },
50
- cursor: {
51
- name: 'Cursor',
52
- path: join(homedir(), '.cursor', 'mcp.json'),
53
- setup: async () => {
54
- await setupJsonClient(join(homedir(), '.cursor', 'mcp.json'), 'Cursor', (existing) => {
55
- if (!existing.mcpServers) {
56
- existing.mcpServers = {};
57
- }
58
- existing.mcpServers['knowledge-base'] = {
59
- command: 'bash',
60
- args: ['-l', '-c', 'kb-mcp serve'],
61
- };
62
- return existing;
63
- });
64
- },
65
- },
66
- windsurf: {
67
- name: 'Windsurf',
68
- path: '~/.codeium/windsurf/mcp_config.json',
69
43
  setup: async () => {
70
- await setupJsonClient(join(homedir(), '.codeium', 'windsurf', 'mcp_config.json'), 'Windsurf', (existing) => {
71
- if (!existing.mcpServers) {
72
- existing.mcpServers = {};
73
- }
74
- existing.mcpServers['knowledge-base'] = {
75
- command: 'bash',
76
- args: ['-l', '-c', 'kb-mcp serve'],
77
- };
78
- return existing;
79
- });
80
- },
81
- },
82
- continue: {
83
- name: 'Continue.dev',
84
- path: '~/.continue/config.json',
85
- setup: async () => {
86
- await setupJsonClient(join(homedir(), '.continue', 'config.json'), 'Continue.dev', (existing) => {
87
- if (!existing.experimental) {
88
- existing.experimental = {};
89
- }
90
- if (!existing.experimental.modelContextProtocolServers) {
91
- existing.experimental.modelContextProtocolServers = [];
92
- }
93
- // Check if kb-mcp already exists
94
- const servers = existing.experimental.modelContextProtocolServers;
95
- const hasKbMcp = servers.some((s) => s.transport?.command?.includes('kb-mcp'));
96
- if (!hasKbMcp) {
97
- servers.push({
98
- transport: {
99
- type: 'stdio',
100
- command: 'bash',
101
- args: ['-l', '-c', 'kb-mcp serve'],
102
- },
103
- });
104
- }
105
- return existing;
106
- });
107
- },
108
- },
109
- zed: {
110
- name: 'Zed',
111
- path: '~/.config/zed/settings.json',
112
- setup: async () => {
113
- await setupJsonClient(join(homedir(), '.config', 'zed', 'settings.json'), 'Zed', (existing) => {
114
- if (!existing.context_servers) {
115
- existing.context_servers = {};
44
+ const cmd = 'claude mcp add --transport stdio knowledge-base -- bash -l -c "kb-mcp serve"';
45
+ try {
46
+ execSync(cmd, { stdio: 'inherit' });
47
+ console.log('✅ Successfully configured Claude Code');
48
+ }
49
+ catch (error) {
50
+ if (error.message?.includes('command not found')) {
51
+ throw new Error('Claude Code CLI not found. Please install it first:\n npm install -g @anthropic/claude-code');
116
52
  }
117
- existing.context_servers['knowledge-base'] = {
118
- command: {
119
- path: 'bash',
120
- args: ['-l', '-c', 'kb-mcp serve'],
121
- },
122
- };
123
- return existing;
124
- });
53
+ throw error;
54
+ }
125
55
  },
126
56
  },
127
- };
57
+ // Example: How to add a file-based client (commented out)
58
+ // {
59
+ // key: 'cursor',
60
+ // name: 'Cursor',
61
+ // setup: async () => {
62
+ // await setupJsonClient(
63
+ // join(homedir(), '.cursor', 'mcp.json'),
64
+ // 'Cursor',
65
+ // (existing) => {
66
+ // if (!existing.mcpServers) {
67
+ // existing.mcpServers = {};
68
+ // }
69
+ // existing.mcpServers['knowledge-base'] = {
70
+ // command: 'bash',
71
+ // args: ['-l', '-c', 'kb-mcp serve'],
72
+ // };
73
+ // return existing;
74
+ // }
75
+ // );
76
+ // },
77
+ // },
78
+ ];
128
79
  export default defineCommand({
129
80
  meta: {
130
81
  name: 'setup',
@@ -133,27 +84,27 @@ export default defineCommand({
133
84
  args: {
134
85
  client: {
135
86
  type: 'positional',
136
- description: 'MCP client (claude-code, cursor, windsurf, continue, zed)',
87
+ description: `MCP client (${CLIENT_CONFIGS.map(c => c.key).join(', ')})`,
137
88
  required: false,
138
89
  },
139
90
  },
140
91
  async run({ args }) {
141
92
  try {
142
- const client = args.client;
143
- if (!client) {
93
+ const clientKey = args.client;
94
+ if (!clientKey) {
144
95
  // Show all options
145
96
  console.log('\n🔧 MCP Client Setup\n');
146
97
  console.log('Run with a client name to automatically configure:\n');
147
- for (const [key, value] of Object.entries(CONFIGS)) {
148
- console.log(` kb-mcp setup ${key.padEnd(15)} # ${value.name}`);
98
+ for (const client of CLIENT_CONFIGS) {
99
+ console.log(` kb-mcp setup ${client.key.padEnd(15)} # ${client.name}`);
149
100
  }
150
101
  console.log();
151
102
  return;
152
103
  }
153
- const config = CONFIGS[client];
104
+ const config = CLIENT_CONFIGS.find(c => c.key === clientKey);
154
105
  if (!config) {
155
- console.error(`\n✗ Unknown client: ${client}\n`);
156
- console.error('Available clients:', Object.keys(CONFIGS).join(', '));
106
+ console.error(`\n✗ Unknown client: ${clientKey}\n`);
107
+ console.error('Available clients:', CLIENT_CONFIGS.map(c => c.key).join(', '));
157
108
  console.error();
158
109
  process.exit(1);
159
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":";;;;;;;AA4IA,wBAgEG"}
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":";;;;;;;AAsGA,wBAgEG"}
@@ -1,97 +1,79 @@
1
1
  import { defineCommand } from 'citty';
2
2
  import { existsSync, rmSync, readFileSync, writeFileSync } from 'fs';
3
- import { homedir } from 'os';
4
- import { join } from 'path';
5
3
  import { execSync } from 'child_process';
6
4
  import { exitWithError } from '../utils/errors.js';
7
5
  import { getXDGPaths } from '../config/paths.js';
6
+ /**
7
+ * Helper function to remove kb-mcp from JSON-based MCP clients
8
+ * Reads config, removes the entry, and writes back
9
+ */
10
+ function removeFromJsonClient(configPath, clientName, remover) {
11
+ if (!existsSync(configPath)) {
12
+ return false;
13
+ }
14
+ try {
15
+ const content = readFileSync(configPath, 'utf-8');
16
+ const config = JSON.parse(content);
17
+ if (remover(config)) {
18
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
19
+ return true;
20
+ }
21
+ return false;
22
+ }
23
+ catch (error) {
24
+ console.warn(`⚠ Failed to update ${clientName} config: ${error}`);
25
+ return false;
26
+ }
27
+ }
28
+ /**
29
+ * MCP Client configurations
30
+ *
31
+ * To add support for a new client:
32
+ * 1. Add a new entry to this array
33
+ * 2. Implement the remove() function that returns true if kb-mcp was removed
34
+ * 3. For CLI-based clients, use execSync()
35
+ * 4. For file-based clients, use removeFromJsonClient() helper
36
+ */
8
37
  const CLIENT_CONFIGS = [
9
38
  {
10
39
  name: 'Claude Code',
11
- useCli: true,
12
- cliCommand: 'claude mcp remove knowledge-base',
13
- },
14
- {
15
- name: 'Cursor',
16
- path: join(homedir(), '.cursor', 'mcp.json'),
17
- removeEntry: (config) => {
18
- if (config.mcpServers?.['knowledge-base']) {
19
- delete config.mcpServers['knowledge-base'];
20
- return true;
21
- }
22
- return false;
23
- },
24
- },
25
- {
26
- name: 'Windsurf',
27
- path: join(homedir(), '.codeium', 'windsurf', 'mcp_config.json'),
28
- removeEntry: (config) => {
29
- if (config.mcpServers?.['knowledge-base']) {
30
- delete config.mcpServers['knowledge-base'];
31
- return true;
32
- }
33
- return false;
34
- },
35
- },
36
- {
37
- name: 'Zed',
38
- path: join(homedir(), '.config', 'zed', 'settings.json'),
39
- removeEntry: (config) => {
40
- if (config.context_servers?.['knowledge-base']) {
41
- delete config.context_servers['knowledge-base'];
40
+ remove: () => {
41
+ try {
42
+ execSync('claude mcp remove knowledge-base', { stdio: 'pipe' });
42
43
  return true;
43
44
  }
44
- return false;
45
- },
46
- },
47
- {
48
- name: 'Continue.dev',
49
- path: join(homedir(), '.continue', 'config.json'),
50
- removeEntry: (config) => {
51
- if (config.experimental?.modelContextProtocolServers) {
52
- const servers = config.experimental.modelContextProtocolServers;
53
- const initialLength = servers.length;
54
- config.experimental.modelContextProtocolServers = servers.filter(server => !server.transport.command.includes('kb-mcp'));
55
- return servers.length !== initialLength;
45
+ catch (error) {
46
+ // Silently skip if CLI not found or server not installed
47
+ if (!error.message?.includes('command not found') && !error.message?.includes('not found')) {
48
+ console.warn(`⚠ Failed to remove from Claude Code via CLI: ${error.message}`);
49
+ }
50
+ return false;
56
51
  }
57
- return false;
58
52
  },
59
53
  },
54
+ // Example: How to add a file-based client (commented out)
55
+ // {
56
+ // name: 'Cursor',
57
+ // remove: () => {
58
+ // return removeFromJsonClient(
59
+ // join(homedir(), '.cursor', 'mcp.json'),
60
+ // 'Cursor',
61
+ // (config) => {
62
+ // if (config.mcpServers?.['knowledge-base']) {
63
+ // delete config.mcpServers['knowledge-base'];
64
+ // return true;
65
+ // }
66
+ // return false;
67
+ // }
68
+ // );
69
+ // },
70
+ // },
60
71
  ];
61
72
  function removeFromMcpConfigs() {
62
73
  const removed = [];
63
74
  for (const client of CLIENT_CONFIGS) {
64
- try {
65
- // Handle CLI-based removal (Claude Code)
66
- if (client.useCli && client.cliCommand) {
67
- try {
68
- execSync(client.cliCommand, { stdio: 'pipe' });
69
- removed.push(client.name);
70
- }
71
- catch (error) {
72
- // Silently skip if CLI not found or server not installed
73
- if (!error.message?.includes('command not found') && !error.message?.includes('not found')) {
74
- console.warn(`⚠ Failed to remove ${client.name} via CLI: ${error.message}`);
75
- }
76
- }
77
- continue;
78
- }
79
- // Handle file-based removal
80
- if (!client.path || !client.removeEntry) {
81
- continue;
82
- }
83
- if (!existsSync(client.path)) {
84
- continue;
85
- }
86
- const content = readFileSync(client.path, 'utf-8');
87
- const config = JSON.parse(content);
88
- if (client.removeEntry(config)) {
89
- writeFileSync(client.path, JSON.stringify(config, null, 2) + '\n', 'utf-8');
90
- removed.push(client.name);
91
- }
92
- }
93
- catch (error) {
94
- console.warn(`⚠ Failed to update ${client.name} config: ${error}`);
75
+ if (client.remove()) {
76
+ removed.push(client.name);
95
77
  }
96
78
  }
97
79
  return removed;
@@ -1 +1 @@
1
- {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vdpeijl/kb-mcp",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "MCP server for searching Zendesk knowledge bases",
5
5
  "type": "module",
6
6
  "bin": {