@kawoou/kadoc-mcp 0.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.
package/dist/config.js ADDED
@@ -0,0 +1,175 @@
1
+ import { z } from 'zod';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import * as os from 'os';
5
+ import { request } from 'undici';
6
+ const serverAuthSchema = z.object({
7
+ authKey: z.string(),
8
+ });
9
+ const serverConfigSchema = z.object({
10
+ url: z.string().url(),
11
+ auth: serverAuthSchema,
12
+ });
13
+ const configSchema = z.object({
14
+ servers: z.record(z.string(), serverConfigSchema),
15
+ defaultServer: z.string(),
16
+ });
17
+ // Partial config schema for loading config without auth
18
+ const partialServerConfigSchema = z.object({
19
+ url: z.string().url(),
20
+ auth: serverAuthSchema.optional(),
21
+ });
22
+ const partialConfigSchema = z.object({
23
+ servers: z.record(z.string(), partialServerConfigSchema),
24
+ defaultServer: z.string(),
25
+ });
26
+ const DEFAULT_CONFIG_PATH = path.join(os.homedir(), '.kadoc.json');
27
+ /**
28
+ * Register a new user with the kadoc server
29
+ */
30
+ async function registerUser(serverUrl) {
31
+ const response = await request(`${serverUrl}/auth/register`, {
32
+ method: 'POST',
33
+ });
34
+ if (response.statusCode !== 200 && response.statusCode !== 201) {
35
+ const text = await response.body.text();
36
+ throw new Error(`Failed to register user: ${response.statusCode} ${text}`);
37
+ }
38
+ const body = await response.body.json();
39
+ return body.data.authKey;
40
+ }
41
+ /**
42
+ * Save config to file
43
+ */
44
+ function saveConfig(configPath, config) {
45
+ const dir = path.dirname(configPath);
46
+ if (dir && !fs.existsSync(dir)) {
47
+ fs.mkdirSync(dir, { recursive: true });
48
+ }
49
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
50
+ }
51
+ /**
52
+ * Create default config structure
53
+ */
54
+ function createDefaultConfig(serverUrl) {
55
+ return {
56
+ servers: {
57
+ default: {
58
+ url: serverUrl,
59
+ auth: {
60
+ authKey: '', // Will be filled after registration
61
+ },
62
+ },
63
+ },
64
+ defaultServer: 'default',
65
+ };
66
+ }
67
+ /**
68
+ * Load configuration, auto-registering if auth is missing
69
+ */
70
+ export async function loadConfigAsync(configPath) {
71
+ const filePath = configPath ?? process.env.KADOC_CONFIG ?? DEFAULT_CONFIG_PATH;
72
+ const defaultServerUrl = process.env.KADOC_SERVER_URL ?? 'http://localhost:3000';
73
+ // If config file doesn't exist, create it and register
74
+ if (!fs.existsSync(filePath)) {
75
+ console.error(`Configuration file not found, creating new one at: ${filePath}`);
76
+ const config = createDefaultConfig(defaultServerUrl);
77
+ // Register user
78
+ console.error(`Registering new user with server: ${defaultServerUrl}`);
79
+ const authKey = await registerUser(defaultServerUrl);
80
+ config.servers.default.auth.authKey = authKey;
81
+ // Save config
82
+ saveConfig(filePath, config);
83
+ console.error(`Configuration saved with new authKey`);
84
+ return config;
85
+ }
86
+ // Load existing config
87
+ const content = fs.readFileSync(filePath, 'utf-8');
88
+ let parsed;
89
+ try {
90
+ parsed = JSON.parse(content);
91
+ }
92
+ catch {
93
+ throw new Error(`Invalid JSON in configuration file: ${filePath}`);
94
+ }
95
+ // Parse as partial config first
96
+ const partialResult = partialConfigSchema.safeParse(parsed);
97
+ if (!partialResult.success) {
98
+ const errors = partialResult.error.errors.map(e => ` - ${e.path.join('.')}: ${e.message}`).join('\n');
99
+ throw new Error(`Configuration validation failed:\n${errors}`);
100
+ }
101
+ const partialConfig = partialResult.data;
102
+ // Validate that defaultServer exists in servers
103
+ if (!partialConfig.servers[partialConfig.defaultServer]) {
104
+ throw new Error(`Default server '${partialConfig.defaultServer}' not found in servers`);
105
+ }
106
+ // Check if any server is missing auth and register
107
+ let configChanged = false;
108
+ const fullConfig = {
109
+ servers: {},
110
+ defaultServer: partialConfig.defaultServer,
111
+ };
112
+ for (const [name, serverConfig] of Object.entries(partialConfig.servers)) {
113
+ if (!serverConfig.auth?.authKey) {
114
+ console.error(`Server '${name}' is missing authKey, registering new user...`);
115
+ const authKey = await registerUser(serverConfig.url);
116
+ fullConfig.servers[name] = {
117
+ url: serverConfig.url,
118
+ auth: { authKey },
119
+ };
120
+ configChanged = true;
121
+ console.error(`Registered new user for server '${name}'`);
122
+ }
123
+ else {
124
+ fullConfig.servers[name] = {
125
+ url: serverConfig.url,
126
+ auth: serverConfig.auth,
127
+ };
128
+ }
129
+ }
130
+ // Save updated config if changed
131
+ if (configChanged) {
132
+ saveConfig(filePath, fullConfig);
133
+ console.error(`Configuration updated with new authKey(s)`);
134
+ }
135
+ return fullConfig;
136
+ }
137
+ /**
138
+ * Synchronous config load (for backward compatibility, throws if auth missing)
139
+ */
140
+ export function loadConfig(configPath) {
141
+ const filePath = configPath ?? process.env.KADOC_CONFIG ?? DEFAULT_CONFIG_PATH;
142
+ if (!fs.existsSync(filePath)) {
143
+ throw new Error(`Configuration file not found: ${filePath}. Run MCP once to auto-register.`);
144
+ }
145
+ const content = fs.readFileSync(filePath, 'utf-8');
146
+ let parsed;
147
+ try {
148
+ parsed = JSON.parse(content);
149
+ }
150
+ catch {
151
+ throw new Error(`Invalid JSON in configuration file: ${filePath}`);
152
+ }
153
+ const result = configSchema.safeParse(parsed);
154
+ if (!result.success) {
155
+ const errors = result.error.errors.map(e => ` - ${e.path.join('.')}: ${e.message}`).join('\n');
156
+ throw new Error(`Configuration validation failed:\n${errors}`);
157
+ }
158
+ // Validate that defaultServer exists in servers
159
+ if (!result.data.servers[result.data.defaultServer]) {
160
+ throw new Error(`Default server '${result.data.defaultServer}' not found in servers`);
161
+ }
162
+ return result.data;
163
+ }
164
+ export function getServerConfig(config, serverName) {
165
+ const name = serverName ?? config.defaultServer;
166
+ const serverConfig = config.servers[name];
167
+ if (!serverConfig) {
168
+ throw new Error(`Server '${name}' not found in configuration`);
169
+ }
170
+ return serverConfig;
171
+ }
172
+ export function getConfigPath() {
173
+ return process.env.KADOC_CONFIG ?? DEFAULT_CONFIG_PATH;
174
+ }
175
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Envelope encryption utilities using NaCl (TweetNaCl)
3
+ * Client-side implementation
4
+ */
5
+ export interface KeyPair {
6
+ publicKey: Uint8Array;
7
+ secretKey: Uint8Array;
8
+ }
9
+ export interface EncryptedPayload {
10
+ nonce: string;
11
+ ciphertext: string;
12
+ timestamp: number;
13
+ }
14
+ /**
15
+ * Generate a new X25519 key pair
16
+ */
17
+ export declare function generateKeyPair(): KeyPair;
18
+ /**
19
+ * Compute shared secret from own secret key and peer's public key
20
+ */
21
+ export declare function computeSharedSecret(mySecretKey: Uint8Array, theirPublicKey: Uint8Array): Uint8Array;
22
+ /**
23
+ * Encrypt data using shared secret
24
+ */
25
+ export declare function encrypt(data: string | object, sharedSecret: Uint8Array): EncryptedPayload;
26
+ /**
27
+ * Decrypt data using shared secret
28
+ */
29
+ export declare function decrypt(payload: EncryptedPayload, sharedSecret: Uint8Array): string | null;
30
+ /**
31
+ * Decrypt and parse JSON data
32
+ */
33
+ export declare function decryptJson<T>(payload: EncryptedPayload, sharedSecret: Uint8Array): T | null;
34
+ /**
35
+ * Encode/decode helpers
36
+ */
37
+ export declare function encodePublicKey(publicKey: Uint8Array): string;
38
+ export declare function decodePublicKey(encoded: string): Uint8Array;
39
+ /**
40
+ * Generate a random nonce string
41
+ */
42
+ export declare function generateNonce(): string;
43
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/crypto/envelope.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EACvB,cAAc,EAAE,UAAU,GACzB,UAAU,CAEZ;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,YAAY,EAAE,UAAU,GACvB,gBAAgB,CAYlB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,UAAU,GACvB,MAAM,GAAG,IAAI,CAcf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,UAAU,GACvB,CAAC,GAAG,IAAI,CAWV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAE3D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,77 @@
1
+ import nacl from 'tweetnacl';
2
+ import tweetnaclUtil from 'tweetnacl-util';
3
+ const { encodeBase64, decodeBase64 } = tweetnaclUtil;
4
+ /**
5
+ * Generate a new X25519 key pair
6
+ */
7
+ export function generateKeyPair() {
8
+ return nacl.box.keyPair();
9
+ }
10
+ /**
11
+ * Compute shared secret from own secret key and peer's public key
12
+ */
13
+ export function computeSharedSecret(mySecretKey, theirPublicKey) {
14
+ return nacl.box.before(theirPublicKey, mySecretKey);
15
+ }
16
+ /**
17
+ * Encrypt data using shared secret
18
+ */
19
+ export function encrypt(data, sharedSecret) {
20
+ const message = typeof data === 'string' ? data : JSON.stringify(data);
21
+ const messageBytes = new TextEncoder().encode(message);
22
+ const nonce = nacl.randomBytes(nacl.secretbox.nonceLength);
23
+ const ciphertext = nacl.secretbox(messageBytes, nonce, sharedSecret);
24
+ return {
25
+ nonce: encodeBase64(nonce),
26
+ ciphertext: encodeBase64(ciphertext),
27
+ timestamp: Date.now(),
28
+ };
29
+ }
30
+ /**
31
+ * Decrypt data using shared secret
32
+ */
33
+ export function decrypt(payload, sharedSecret) {
34
+ try {
35
+ const nonce = decodeBase64(payload.nonce);
36
+ const ciphertext = decodeBase64(payload.ciphertext);
37
+ const decrypted = nacl.secretbox.open(ciphertext, nonce, sharedSecret);
38
+ if (!decrypted) {
39
+ return null;
40
+ }
41
+ return new TextDecoder().decode(decrypted);
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Decrypt and parse JSON data
49
+ */
50
+ export function decryptJson(payload, sharedSecret) {
51
+ const plaintext = decrypt(payload, sharedSecret);
52
+ if (!plaintext) {
53
+ return null;
54
+ }
55
+ try {
56
+ return JSON.parse(plaintext);
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Encode/decode helpers
64
+ */
65
+ export function encodePublicKey(publicKey) {
66
+ return encodeBase64(publicKey);
67
+ }
68
+ export function decodePublicKey(encoded) {
69
+ return decodeBase64(encoded);
70
+ }
71
+ /**
72
+ * Generate a random nonce string
73
+ */
74
+ export function generateNonce() {
75
+ return encodeBase64(nacl.randomBytes(16));
76
+ }
77
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/crypto/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAE3C,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;AAkBrD;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAuB,EACvB,cAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,IAAqB,EACrB,YAAwB;IAExB,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAErE,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;QAC1B,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC;QACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,OAAyB,EACzB,YAAwB;IAExB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,OAAyB,EACzB,YAAwB;IAExB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAM,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAqB;IACnD,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { loadConfigAsync } from './config.js';
6
+ import { KadocClient } from './client/kadoc-client.js';
7
+ import { documentTools, handleDocumentTool } from './tools/documents.js';
8
+ import { searchTools, handleSearchTool } from './tools/search.js';
9
+ import { folderTools, handleFolderTool } from './tools/folders.js';
10
+ async function main() {
11
+ // Load configuration (auto-registers if auth missing)
12
+ let config;
13
+ try {
14
+ config = await loadConfigAsync();
15
+ }
16
+ catch (error) {
17
+ console.error('Failed to load configuration:', error);
18
+ process.exit(1);
19
+ }
20
+ // Create kadoc client
21
+ const client = new KadocClient(config);
22
+ // Create MCP server
23
+ const server = new Server({
24
+ name: 'kadoc-mcp',
25
+ version: '0.1.0',
26
+ }, {
27
+ capabilities: {
28
+ tools: {},
29
+ },
30
+ });
31
+ // List available tools
32
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
33
+ return {
34
+ tools: [
35
+ ...documentTools,
36
+ ...searchTools,
37
+ ...folderTools,
38
+ ],
39
+ };
40
+ });
41
+ // Handle tool calls
42
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
43
+ const { name, arguments: args } = request.params;
44
+ try {
45
+ // Document tools
46
+ if (name.startsWith('kadoc_') && ['write_document', 'read_document', 'delete_document', 'update_document', 'list_documents'].some(t => name === `kadoc_${t}`)) {
47
+ return await handleDocumentTool(client, name, args);
48
+ }
49
+ // Search tools
50
+ if (name === 'kadoc_search') {
51
+ return await handleSearchTool(client, name, args);
52
+ }
53
+ // Folder tools
54
+ if (name.startsWith('kadoc_') && ['create_folder', 'list_folders', 'delete_folder', 'get_index_settings', 'set_index_settings'].some(t => name === `kadoc_${t}`)) {
55
+ return await handleFolderTool(client, name, args);
56
+ }
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: `Unknown tool: ${name}`,
62
+ },
63
+ ],
64
+ isError: true,
65
+ };
66
+ }
67
+ catch (error) {
68
+ return {
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
73
+ },
74
+ ],
75
+ isError: true,
76
+ };
77
+ }
78
+ });
79
+ // Start server
80
+ const transport = new StdioServerTransport();
81
+ await server.connect(transport);
82
+ console.error('kadoc-mcp server started');
83
+ }
84
+ main().catch((error) => {
85
+ console.error('Fatal error:', error);
86
+ process.exit(1);
87
+ });
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnE,KAAK,UAAU,IAAI;IACjB,sDAAsD;IACtD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvC,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE;gBACL,GAAG,aAAa;gBAChB,GAAG,WAAW;gBACd,GAAG,WAAW;aACf;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAEjD,IAAI,CAAC;YACH,iBAAiB;YACjB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9J,OAAO,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;YAED,eAAe;YACf,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC5B,OAAO,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,eAAe;YACf,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjK,OAAO,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB,IAAI,EAAE;qBAC9B;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBACzE;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC5C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { KadocClient } from '../client/kadoc-client.js';
3
+ export declare const documentTools: Tool[];
4
+ export declare function handleDocumentTool(client: KadocClient, name: string, args: Record<string, unknown> | undefined): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ isError?: boolean;
10
+ }>;
11
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,eAAO,MAAM,aAAa,EAAE,IAAI,EAsE/B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAiEhF"}
@@ -0,0 +1,133 @@
1
+ export const documentTools = [
2
+ {
3
+ name: 'write_document',
4
+ description: 'Create a new document',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ path: { type: 'string', description: 'e.g., notes/meeting' },
9
+ title: { type: 'string' },
10
+ content: { type: 'string', description: 'Markdown' },
11
+ metadata: {
12
+ type: 'object',
13
+ description: 'Custom metadata fields (e.g., { "author": "...", "tags": [...] })',
14
+ additionalProperties: true,
15
+ },
16
+ },
17
+ required: ['path', 'title', 'content'],
18
+ },
19
+ },
20
+ {
21
+ name: 'read_document',
22
+ description: 'Read a document',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ path: { type: 'string' },
27
+ },
28
+ required: ['path'],
29
+ },
30
+ },
31
+ {
32
+ name: 'delete_document',
33
+ description: 'Delete a document',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ path: { type: 'string' },
38
+ },
39
+ required: ['path'],
40
+ },
41
+ },
42
+ {
43
+ name: 'update_document',
44
+ description: 'Update a document',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ path: { type: 'string' },
49
+ title: { type: 'string', description: 'optional' },
50
+ content: { type: 'string', description: 'optional' },
51
+ metadata: {
52
+ type: 'object',
53
+ description: 'Custom metadata fields to update',
54
+ additionalProperties: true,
55
+ },
56
+ },
57
+ required: ['path'],
58
+ },
59
+ },
60
+ {
61
+ name: 'list_documents',
62
+ description: 'List documents',
63
+ inputSchema: {
64
+ type: 'object',
65
+ properties: {
66
+ folder: { type: 'string', description: 'optional' },
67
+ limit: { type: 'number', description: 'optional, default: 20' },
68
+ },
69
+ },
70
+ },
71
+ ];
72
+ export async function handleDocumentTool(client, name, args) {
73
+ const params = args ?? {};
74
+ try {
75
+ switch (name) {
76
+ case 'write_document': {
77
+ const result = await client.createDocument({
78
+ path: params.path,
79
+ title: params.title,
80
+ content: params.content,
81
+ metadata: params.metadata,
82
+ });
83
+ return {
84
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
85
+ };
86
+ }
87
+ case 'read_document': {
88
+ const result = await client.readDocument(params.path);
89
+ return {
90
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
91
+ };
92
+ }
93
+ case 'delete_document': {
94
+ await client.deleteDocument(params.path);
95
+ return {
96
+ content: [{ type: 'text', text: 'Document deleted successfully' }],
97
+ };
98
+ }
99
+ case 'update_document': {
100
+ const result = await client.updateDocument({
101
+ path: params.path,
102
+ title: params.title,
103
+ content: params.content,
104
+ metadata: params.metadata,
105
+ });
106
+ return {
107
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
108
+ };
109
+ }
110
+ case 'list_documents': {
111
+ const result = await client.listDocuments({
112
+ folder: params.folder,
113
+ limit: params.limit,
114
+ });
115
+ return {
116
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
117
+ };
118
+ }
119
+ default:
120
+ return {
121
+ content: [{ type: 'text', text: `Unknown document tool: ${name}` }],
122
+ isError: true,
123
+ };
124
+ }
125
+ }
126
+ catch (error) {
127
+ return {
128
+ content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
129
+ isError: true,
130
+ };
131
+ }
132
+ }
133
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAC5D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBACpD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mEAAmE;oBAChF,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;SACvC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzB;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzB;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBAClD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBACpD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;oBAC/C,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBACnD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;aAChE;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAmB,EACnB,IAAY,EACZ,IAAyC;IAEzC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAE1B,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;oBACzC,IAAI,EAAE,MAAM,CAAC,IAAc;oBAC3B,KAAK,EAAE,MAAM,CAAC,KAAe;oBAC7B,OAAO,EAAE,MAAM,CAAC,OAAiB;oBACjC,QAAQ,EAAE,MAAM,CAAC,QAA+C;iBACjE,CAAC,CAAC;gBACH,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBACnE,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAc,CAAC,CAAC;gBAChE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBACnE,CAAC;YACJ,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAc,CAAC,CAAC;gBACnD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;iBACnE,CAAC;YACJ,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;oBACzC,IAAI,EAAE,MAAM,CAAC,IAAc;oBAC3B,KAAK,EAAE,MAAM,CAAC,KAA2B;oBACzC,OAAO,EAAE,MAAM,CAAC,OAA6B;oBAC7C,QAAQ,EAAE,MAAM,CAAC,QAA+C;iBACjE,CAAC,CAAC;gBACH,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBACnE,CAAC;YACJ,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;oBACxC,MAAM,EAAE,MAAM,CAAC,MAA4B;oBAC3C,KAAK,EAAE,MAAM,CAAC,KAA2B;iBAC1C,CAAC,CAAC;gBACH,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBACnE,CAAC;YACJ,CAAC;YAED;gBACE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,IAAI,EAAE,EAAE,CAAC;oBACnE,OAAO,EAAE,IAAI;iBACd,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACrG,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { KadocClient } from '../client/kadoc-client.js';
3
+ export declare const folderTools: Tool[];
4
+ export declare function handleFolderTool(client: KadocClient, name: string, args: Record<string, unknown> | undefined): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ isError?: boolean;
10
+ }>;
11
+ //# sourceMappingURL=folders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/tools/folders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,eAAO,MAAM,WAAW,EAAE,IAAI,EA8D7B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA2DhF"}