@chnxthr/knowledge-mcp 0.0.0-stage → 0.3.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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -2
  3. package/dist/bootstrap.d.ts +1 -0
  4. package/dist/bootstrap.js +18 -0
  5. package/dist/bootstrap.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +5 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/core/auth.d.ts +38 -0
  10. package/dist/core/auth.js +93 -0
  11. package/dist/core/auth.js.map +1 -0
  12. package/dist/core/config.d.ts +259 -0
  13. package/dist/core/config.js +172 -0
  14. package/dist/core/config.js.map +1 -0
  15. package/dist/core/context.d.ts +25 -0
  16. package/dist/core/context.js +37 -0
  17. package/dist/core/context.js.map +1 -0
  18. package/dist/core/env.d.ts +2 -0
  19. package/dist/core/env.js +5 -0
  20. package/dist/core/env.js.map +1 -0
  21. package/dist/core/log_mask.d.ts +10 -0
  22. package/dist/core/log_mask.js +88 -0
  23. package/dist/core/log_mask.js.map +1 -0
  24. package/dist/core/oauth.d.ts +46 -0
  25. package/dist/core/oauth.js +507 -0
  26. package/dist/core/oauth.js.map +1 -0
  27. package/dist/core/paths.d.ts +5 -0
  28. package/dist/core/paths.js +47 -0
  29. package/dist/core/paths.js.map +1 -0
  30. package/dist/core/scope.d.ts +28 -0
  31. package/dist/core/scope.js +54 -0
  32. package/dist/core/scope.js.map +1 -0
  33. package/dist/core/upstream.d.ts +30 -0
  34. package/dist/core/upstream.js +164 -0
  35. package/dist/core/upstream.js.map +1 -0
  36. package/dist/index.d.ts +23 -0
  37. package/dist/index.js +21 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/plugin/define.d.ts +144 -0
  40. package/dist/plugin/define.js +44 -0
  41. package/dist/plugin/define.js.map +1 -0
  42. package/dist/plugin/load.d.ts +2 -0
  43. package/dist/plugin/load.js +41 -0
  44. package/dist/plugin/load.js.map +1 -0
  45. package/dist/plugin/ping.d.ts +9 -0
  46. package/dist/plugin/ping.js +29 -0
  47. package/dist/plugin/ping.js.map +1 -0
  48. package/dist/plugin/registry.d.ts +62 -0
  49. package/dist/plugin/registry.js +248 -0
  50. package/dist/plugin/registry.js.map +1 -0
  51. package/dist/plugin/result.d.ts +20 -0
  52. package/dist/plugin/result.js +59 -0
  53. package/dist/plugin/result.js.map +1 -0
  54. package/dist/plugins/drive/chunker.d.ts +28 -0
  55. package/dist/plugins/drive/chunker.js +356 -0
  56. package/dist/plugins/drive/chunker.js.map +1 -0
  57. package/dist/plugins/drive/clean_text.d.ts +13 -0
  58. package/dist/plugins/drive/clean_text.js +31 -0
  59. package/dist/plugins/drive/clean_text.js.map +1 -0
  60. package/dist/plugins/drive/client.d.ts +25 -0
  61. package/dist/plugins/drive/client.js +62 -0
  62. package/dist/plugins/drive/client.js.map +1 -0
  63. package/dist/plugins/drive/embeddings.d.ts +15 -0
  64. package/dist/plugins/drive/embeddings.js +118 -0
  65. package/dist/plugins/drive/embeddings.js.map +1 -0
  66. package/dist/plugins/drive/exclude.d.ts +11 -0
  67. package/dist/plugins/drive/exclude.js +36 -0
  68. package/dist/plugins/drive/exclude.js.map +1 -0
  69. package/dist/plugins/drive/extract_text.d.ts +26 -0
  70. package/dist/plugins/drive/extract_text.js +108 -0
  71. package/dist/plugins/drive/extract_text.js.map +1 -0
  72. package/dist/plugins/drive/get_token.d.ts +5 -0
  73. package/dist/plugins/drive/get_token.js +113 -0
  74. package/dist/plugins/drive/get_token.js.map +1 -0
  75. package/dist/plugins/drive/index.d.ts +5 -0
  76. package/dist/plugins/drive/index.js +72 -0
  77. package/dist/plugins/drive/index.js.map +1 -0
  78. package/dist/plugins/drive/indexer.d.ts +69 -0
  79. package/dist/plugins/drive/indexer.js +204 -0
  80. package/dist/plugins/drive/indexer.js.map +1 -0
  81. package/dist/plugins/drive/mathpix.d.ts +4 -0
  82. package/dist/plugins/drive/mathpix.js +102 -0
  83. package/dist/plugins/drive/mathpix.js.map +1 -0
  84. package/dist/plugins/drive/path.d.ts +40 -0
  85. package/dist/plugins/drive/path.js +87 -0
  86. package/dist/plugins/drive/path.js.map +1 -0
  87. package/dist/plugins/drive/qdrant.d.ts +50 -0
  88. package/dist/plugins/drive/qdrant.js +61 -0
  89. package/dist/plugins/drive/qdrant.js.map +1 -0
  90. package/dist/plugins/drive/reindex.d.ts +2 -0
  91. package/dist/plugins/drive/reindex.js +263 -0
  92. package/dist/plugins/drive/reindex.js.map +1 -0
  93. package/dist/plugins/drive/settings.d.ts +11 -0
  94. package/dist/plugins/drive/settings.js +13 -0
  95. package/dist/plugins/drive/settings.js.map +1 -0
  96. package/dist/plugins/drive/sync.d.ts +16 -0
  97. package/dist/plugins/drive/sync.js +139 -0
  98. package/dist/plugins/drive/sync.js.map +1 -0
  99. package/dist/plugins/drive/sync_state.d.ts +3 -0
  100. package/dist/plugins/drive/sync_state.js +26 -0
  101. package/dist/plugins/drive/sync_state.js.map +1 -0
  102. package/dist/plugins/drive/tools/list_drive_folder.d.ts +104 -0
  103. package/dist/plugins/drive/tools/list_drive_folder.js +221 -0
  104. package/dist/plugins/drive/tools/list_drive_folder.js.map +1 -0
  105. package/dist/plugins/drive/tools/read_drive_file.d.ts +66 -0
  106. package/dist/plugins/drive/tools/read_drive_file.js +206 -0
  107. package/dist/plugins/drive/tools/read_drive_file.js.map +1 -0
  108. package/dist/plugins/drive/tools/search_drive.d.ts +52 -0
  109. package/dist/plugins/drive/tools/search_drive.js +78 -0
  110. package/dist/plugins/drive/tools/search_drive.js.map +1 -0
  111. package/dist/plugins/drive/tools/semantic_search_drive.d.ts +109 -0
  112. package/dist/plugins/drive/tools/semantic_search_drive.js +228 -0
  113. package/dist/plugins/drive/tools/semantic_search_drive.js.map +1 -0
  114. package/dist/plugins/github/index.d.ts +1 -0
  115. package/dist/plugins/github/index.js +27 -0
  116. package/dist/plugins/github/index.js.map +1 -0
  117. package/dist/plugins/github/repo_tree.d.ts +57 -0
  118. package/dist/plugins/github/repo_tree.js +123 -0
  119. package/dist/plugins/github/repo_tree.js.map +1 -0
  120. package/dist/plugins/index.d.ts +11 -0
  121. package/dist/plugins/index.js +7 -0
  122. package/dist/plugins/index.js.map +1 -0
  123. package/dist/plugins/railway/index.d.ts +1 -0
  124. package/dist/plugins/railway/index.js +21 -0
  125. package/dist/plugins/railway/index.js.map +1 -0
  126. package/dist/plugins/railway/tools.d.ts +114 -0
  127. package/dist/plugins/railway/tools.js +165 -0
  128. package/dist/plugins/railway/tools.js.map +1 -0
  129. package/dist/plugins/slack/api.d.ts +63 -0
  130. package/dist/plugins/slack/api.js +280 -0
  131. package/dist/plugins/slack/api.js.map +1 -0
  132. package/dist/plugins/slack/index.d.ts +1 -0
  133. package/dist/plugins/slack/index.js +80 -0
  134. package/dist/plugins/slack/index.js.map +1 -0
  135. package/dist/plugins/slack/tools/slack_files.d.ts +87 -0
  136. package/dist/plugins/slack/tools/slack_files.js +204 -0
  137. package/dist/plugins/slack/tools/slack_files.js.map +1 -0
  138. package/dist/plugins/slack/tools/slack_list_channels.d.ts +46 -0
  139. package/dist/plugins/slack/tools/slack_list_channels.js +197 -0
  140. package/dist/plugins/slack/tools/slack_list_channels.js.map +1 -0
  141. package/dist/plugins/slack/tools/slack_read_channel.d.ts +56 -0
  142. package/dist/plugins/slack/tools/slack_read_channel.js +150 -0
  143. package/dist/plugins/slack/tools/slack_read_channel.js.map +1 -0
  144. package/dist/plugins/slack/tools/slack_search.d.ts +53 -0
  145. package/dist/plugins/slack/tools/slack_search.js +132 -0
  146. package/dist/plugins/slack/tools/slack_search.js.map +1 -0
  147. package/dist/run.d.ts +8 -0
  148. package/dist/run.js +270 -0
  149. package/dist/run.js.map +1 -0
  150. package/dist/server/http.d.ts +5 -0
  151. package/dist/server/http.js +406 -0
  152. package/dist/server/http.js.map +1 -0
  153. package/dist/server/identity.d.ts +17 -0
  154. package/dist/server/identity.js +47 -0
  155. package/dist/server/identity.js.map +1 -0
  156. package/dist/server/mcp.d.ts +7 -0
  157. package/dist/server/mcp.js +55 -0
  158. package/dist/server/mcp.js.map +1 -0
  159. package/dist/server/stdio.d.ts +2 -0
  160. package/dist/server/stdio.js +40 -0
  161. package/dist/server/stdio.js.map +1 -0
  162. package/dist/store/index.d.ts +11 -0
  163. package/dist/store/index.js +31 -0
  164. package/dist/store/index.js.map +1 -0
  165. package/dist/store/keys.d.ts +9 -0
  166. package/dist/store/keys.js +32 -0
  167. package/dist/store/keys.js.map +1 -0
  168. package/dist/store/sqlite.d.ts +38 -0
  169. package/dist/store/sqlite.js +316 -0
  170. package/dist/store/sqlite.js.map +1 -0
  171. package/dist/store/supabase.d.ts +35 -0
  172. package/dist/store/supabase.js +269 -0
  173. package/dist/store/supabase.js.map +1 -0
  174. package/dist/store/supabase_client.d.ts +10 -0
  175. package/dist/store/supabase_client.js +31 -0
  176. package/dist/store/supabase_client.js.map +1 -0
  177. package/dist/store/tool_log.d.ts +12 -0
  178. package/dist/store/tool_log.js +8 -0
  179. package/dist/store/tool_log.js.map +1 -0
  180. package/dist/store/types.d.ts +96 -0
  181. package/dist/store/types.js +2 -0
  182. package/dist/store/types.js.map +1 -0
  183. package/dist/version.d.ts +1 -0
  184. package/dist/version.js +11 -0
  185. package/dist/version.js.map +1 -0
  186. package/package.json +84 -4
  187. package/sql/supabase.sql +185 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Registry — turns a list of plugins into the server's tool list, permission groups and call routing.
3
+ *
4
+ * Everything that used to be edited by hand per tool (import, list entry, switch case, permission group,
5
+ * credential check, boot summary) is derived here from the plugin definitions.
6
+ */
7
+ import type { Tool as McpTool } from '@modelcontextprotocol/sdk/types.js';
8
+ import type { AuthContext } from '../core/auth.js';
9
+ import { type AppConfig } from '../core/config.js';
10
+ import { UpstreamManager } from '../core/upstream.js';
11
+ import type { Plugin } from './define.js';
12
+ import { normalizeResult } from './result.js';
13
+ export interface ToolStatus {
14
+ name: string;
15
+ enabled: boolean;
16
+ reason?: string;
17
+ }
18
+ export interface PluginStatus {
19
+ id: string;
20
+ description?: string;
21
+ enabled: boolean;
22
+ reason?: string;
23
+ tools: ToolStatus[];
24
+ upstreams: string[];
25
+ }
26
+ /** The core `ping` tool. It belongs to no group and is always allowed. */
27
+ export declare const PING = "ping";
28
+ export declare class Registry {
29
+ readonly plugins: Plugin[];
30
+ readonly upstreams: UpstreamManager;
31
+ private readonly entries;
32
+ private readonly pluginConfig;
33
+ /** Remote tool names already reported as shadowed by a local tool (log once). */
34
+ private readonly warned;
35
+ private readonly upstreamGroups;
36
+ private readonly config;
37
+ constructor(plugins: Plugin[], config?: AppConfig);
38
+ private parsePluginConfig;
39
+ private collectUpstreams;
40
+ /** true, or why the plugin is off (missing env names, failed check). */
41
+ pluginEnabled(p: Plugin): true | string;
42
+ private toolEnabled;
43
+ status(): PluginStatus[];
44
+ /** One line for the boot log: drive=on slack=off ... */
45
+ summary(): string;
46
+ /** Server instructions: config branding.instructions, or the base line plus each enabled plugin's notes. */
47
+ instructions(): string;
48
+ /** Permission group of a tool: plugin id, upstream group, or null (ping, unknown names). */
49
+ groupOf(name: string): string | null;
50
+ /** Every tool to show (before permission filtering): ping, enabled local tools, connected remote tools. */
51
+ listTools(pingTool: McpTool): McpTool[];
52
+ /** Validate, run and normalize. Permission is checked by the caller (server/mcp.ts) before this. */
53
+ call(name: string, args: Record<string, unknown> | undefined, auth: AuthContext): Promise<ReturnType<typeof normalizeResult>>;
54
+ /**
55
+ * After listen: connect remotes and, on HTTP, run plugin start hooks (background jobs such as the Drive
56
+ * sync). stdio skips the hooks: every client session spawns its own process and would start its own jobs.
57
+ * Failures are logged and skipped.
58
+ */
59
+ start(opts?: {
60
+ jobs: boolean;
61
+ }): Promise<void>;
62
+ }
@@ -0,0 +1,248 @@
1
+ import { safeParse } from '@modelcontextprotocol/sdk/server/zod-compat.js';
2
+ import { getConfig, BASE_INSTRUCTIONS } from '../core/config.js';
3
+ import { UpstreamManager } from '../core/upstream.js';
4
+ import { isSet } from '../core/env.js';
5
+ import { getStore } from '../store/index.js';
6
+ import { errorResult, formatValidationError, inputJsonSchema, normalizeResult, textResult } from './result.js';
7
+ /** The core `ping` tool. It belongs to no group and is always allowed. */
8
+ export const PING = 'ping';
9
+ function check(fn) {
10
+ if (!fn)
11
+ return true;
12
+ try {
13
+ const r = fn();
14
+ if (r === true)
15
+ return true;
16
+ return typeof r === 'string' && r ? r : 'disabled';
17
+ }
18
+ catch (e) {
19
+ return `check failed: ${e instanceof Error ? e.message : String(e)}`;
20
+ }
21
+ }
22
+ function stateFor(namespace) {
23
+ return {
24
+ get: async (key) => (await (await getStore()).getState(namespace, key)),
25
+ set: async (key, value) => (await getStore()).setState(namespace, key, value),
26
+ delete: async (key) => (await getStore()).deleteState(namespace, key),
27
+ };
28
+ }
29
+ export class Registry {
30
+ plugins;
31
+ upstreams;
32
+ entries = new Map();
33
+ pluginConfig = new Map();
34
+ /** Remote tool names already reported as shadowed by a local tool (log once). */
35
+ warned = new Set();
36
+ upstreamGroups = new Map();
37
+ config;
38
+ constructor(plugins, config = getConfig()) {
39
+ this.plugins = plugins;
40
+ this.config = config;
41
+ const ids = new Set();
42
+ for (const p of plugins) {
43
+ if (ids.has(p.id))
44
+ throw new Error(`[plugin] two plugins use the id "${p.id}"`);
45
+ ids.add(p.id);
46
+ for (const t of p.tools ?? []) {
47
+ if (t.name === PING)
48
+ throw new Error(`[plugin] ${p.id}: the tool name "ping" is reserved`);
49
+ const other = this.entries.get(t.name);
50
+ if (other)
51
+ throw new Error(`[plugin] tool "${t.name}" is defined by both "${other.plugin.id}" and "${p.id}"`);
52
+ this.entries.set(t.name, { plugin: p, tool: t, inputSchema: inputJsonSchema(t.name, t.input) });
53
+ }
54
+ this.pluginConfig.set(p.id, this.parsePluginConfig(p));
55
+ }
56
+ for (const u of config.upstreams) {
57
+ if (ids.has(u.name))
58
+ throw new Error(`[config] upstream "${u.name}" has the same name as a plugin; pick another name`);
59
+ }
60
+ const remotes = this.collectUpstreams();
61
+ for (const r of remotes)
62
+ this.upstreamGroups.set(r.spec.name, r.group);
63
+ this.upstreams = new UpstreamManager(remotes);
64
+ }
65
+ parsePluginConfig(p) {
66
+ const raw = this.config.plugins[p.id];
67
+ if (!p.configSchema)
68
+ return raw;
69
+ const r = safeParse(p.configSchema, raw ?? {});
70
+ if (!r.success)
71
+ throw new Error(`[config] plugins.${p.id}: ${formatValidationError(r.error)}`);
72
+ return r.data;
73
+ }
74
+ collectUpstreams() {
75
+ const out = [];
76
+ for (const p of this.plugins) {
77
+ if (!p.upstreams || this.pluginEnabled(p) !== true)
78
+ continue;
79
+ const specs = typeof p.upstreams === 'function' ? p.upstreams() : p.upstreams;
80
+ for (const spec of specs)
81
+ out.push({ spec, group: p.id });
82
+ }
83
+ for (const u of this.config.upstreams) {
84
+ out.push({
85
+ group: u.name,
86
+ spec: {
87
+ name: u.name,
88
+ url: u.url,
89
+ prefix: u.prefix ?? `${u.name.replace(/-/g, '_')}_`,
90
+ token: u.tokenEnv ? () => process.env[u.tokenEnv] : undefined,
91
+ headers: u.headers,
92
+ expose: u.expose,
93
+ },
94
+ });
95
+ }
96
+ return out;
97
+ }
98
+ /** true, or why the plugin is off (missing env names, failed check). */
99
+ pluginEnabled(p) {
100
+ const missing = (p.env ?? []).filter((name) => !isSet(process.env[name]));
101
+ if (missing.length)
102
+ return `missing env ${missing.join(', ')}`;
103
+ return check(p.enabled);
104
+ }
105
+ toolEnabled(e) {
106
+ const pe = this.pluginEnabled(e.plugin);
107
+ return pe === true ? check(e.tool.enabled) : pe;
108
+ }
109
+ status() {
110
+ return this.plugins.map((p) => {
111
+ const pe = this.pluginEnabled(p);
112
+ return {
113
+ id: p.id,
114
+ description: p.description,
115
+ enabled: pe === true,
116
+ reason: pe === true ? undefined : pe,
117
+ tools: (p.tools ?? []).map((t) => {
118
+ const te = this.toolEnabled(this.entries.get(t.name));
119
+ return { name: t.name, enabled: te === true, reason: te === true ? undefined : te };
120
+ }),
121
+ upstreams: [...this.upstreamGroups].filter(([, g]) => g === p.id).map(([name]) => name),
122
+ };
123
+ });
124
+ }
125
+ /** One line for the boot log: drive=on slack=off ... */
126
+ summary() {
127
+ const parts = this.status().map((s) => {
128
+ if (!s.enabled)
129
+ return `${s.id}=off`;
130
+ const off = s.tools.filter((t) => !t.enabled).length;
131
+ return off ? `${s.id}=on(${s.tools.length - off}/${s.tools.length})` : `${s.id}=on`;
132
+ });
133
+ const remote = this.config.upstreams.map((u) => `${u.name}=remote`);
134
+ return [...parts, ...remote].join(' ') || '(no plugins)';
135
+ }
136
+ /** Server instructions: config branding.instructions, or the base line plus each enabled plugin's notes. */
137
+ instructions() {
138
+ if (this.config.branding.instructions)
139
+ return this.config.branding.instructions;
140
+ const notes = this.plugins
141
+ .filter((p) => p.instructions && this.pluginEnabled(p) === true)
142
+ .map((p) => `- ${p.instructions.trim()}`);
143
+ return notes.length ? `${BASE_INSTRUCTIONS}\n\n${notes.join('\n')}` : BASE_INSTRUCTIONS;
144
+ }
145
+ /** Permission group of a tool: plugin id, upstream group, or null (ping, unknown names). */
146
+ groupOf(name) {
147
+ const e = this.entries.get(name);
148
+ if (e)
149
+ return e.plugin.id;
150
+ return this.upstreams.owner(name)?.group ?? null;
151
+ }
152
+ /** Every tool to show (before permission filtering): ping, enabled local tools, connected remote tools. */
153
+ listTools(pingTool) {
154
+ const out = [pingTool];
155
+ for (const e of this.entries.values()) {
156
+ if (this.toolEnabled(e) !== true)
157
+ continue;
158
+ out.push({
159
+ name: e.tool.name,
160
+ description: e.tool.description,
161
+ inputSchema: e.inputSchema,
162
+ ...(e.tool.annotations ? { annotations: e.tool.annotations } : {}),
163
+ });
164
+ }
165
+ for (const { tool } of this.upstreams.tools()) {
166
+ if (this.entries.has(tool.name) || tool.name === PING) {
167
+ if (!this.warned.has(tool.name)) {
168
+ this.warned.add(tool.name);
169
+ console.error(`[upstream] remote tool ${tool.name} hidden: a local tool has the same name`);
170
+ }
171
+ continue;
172
+ }
173
+ out.push(tool);
174
+ }
175
+ return out;
176
+ }
177
+ /** Validate, run and normalize. Permission is checked by the caller (server/mcp.ts) before this. */
178
+ async call(name, args, auth) {
179
+ const e = this.entries.get(name);
180
+ if (e) {
181
+ const enabled = this.toolEnabled(e);
182
+ if (enabled !== true)
183
+ return textResult(`[error] 도구 '${name}' 이 설정되지 않았습니다 (${enabled}).`, true);
184
+ const parsed = e.tool.input ? safeParse(e.tool.input, args ?? {}) : { success: true, data: args ?? {} };
185
+ if (!parsed.success) {
186
+ return textResult(`[invalid_input] 도구 '${name}' 입력이 스키마에 맞지 않습니다 — ${formatValidationError(parsed.error)}`, true);
187
+ }
188
+ const ctx = {
189
+ user: { email: auth.email, role: auth.role ?? 'viewer', keyId: auth.key_id },
190
+ auth,
191
+ config: this.pluginConfig.get(e.plugin.id),
192
+ state: stateFor(e.plugin.id),
193
+ log: (...a) => console.error(`[${e.plugin.id}]`, ...a),
194
+ };
195
+ try {
196
+ return normalizeResult(await e.tool.run(parsed.data, ctx));
197
+ }
198
+ catch (err) {
199
+ return errorResult(name, err);
200
+ }
201
+ }
202
+ const remote = this.upstreams.owner(name);
203
+ if (remote) {
204
+ try {
205
+ return (await remote.call(args ?? {}));
206
+ }
207
+ catch (err) {
208
+ return errorResult(name, err);
209
+ }
210
+ }
211
+ const blockedBy = this.upstreams.prefixOwner(name);
212
+ if (blockedBy) {
213
+ console.error(`[upstream] blocked (not exposed by the read-only gateway): ${name}`);
214
+ return textResult(`[forbidden] write/미허용 도구는 비활성화됨(read-only gateway): ${name}`, true);
215
+ }
216
+ return textResult(`Unknown tool: ${name}`, true);
217
+ }
218
+ /**
219
+ * After listen: connect remotes and, on HTTP, run plugin start hooks (background jobs such as the Drive
220
+ * sync). stdio skips the hooks: every client session spawns its own process and would start its own jobs.
221
+ * Failures are logged and skipped.
222
+ */
223
+ async start(opts = { jobs: true }) {
224
+ try {
225
+ await this.upstreams.connectAll();
226
+ }
227
+ catch (e) {
228
+ console.error('[knowledge-mcp] upstream connect failed (local tools keep working):', e);
229
+ }
230
+ if (!opts.jobs)
231
+ return;
232
+ for (const p of this.plugins) {
233
+ if (!p.start || this.pluginEnabled(p) !== true)
234
+ continue;
235
+ try {
236
+ await p.start({
237
+ config: this.pluginConfig.get(p.id),
238
+ state: stateFor(p.id),
239
+ log: (...a) => console.error(`[${p.id}]`, ...a),
240
+ });
241
+ }
242
+ catch (e) {
243
+ console.error(`[${p.id}] start failed (plugin tools stay listed):`, e);
244
+ }
245
+ }
246
+ }
247
+ }
248
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugin/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AnySchema } from '@modelcontextprotocol/sdk/server/zod-compat.js';
2
+ import { type ToolResult, type ToolReturn } from './define.js';
3
+ export type JsonSchemaObject = {
4
+ type: 'object';
5
+ properties?: Record<string, unknown>;
6
+ [k: string]: unknown;
7
+ };
8
+ export declare function textResult(text: string, isError?: boolean): ToolResult;
9
+ /** string → text, MCP result → as is, anything else → pretty JSON text. */
10
+ export declare function normalizeResult(v: ToolReturn): ToolResult;
11
+ /** zod 3 and zod 4 errors both carry `issues` with path and message. */
12
+ export declare function formatValidationError(err: unknown): string;
13
+ export declare function isValidationError(err: unknown): boolean;
14
+ /** Map a thrown error to a result the model can read. */
15
+ export declare function errorResult(toolName: string, err: unknown): ToolResult;
16
+ /**
17
+ * zod object schema → JSON Schema for tools/list. Unlike the SDK's McpServer, this keeps the properties of
18
+ * schemas wrapped in `.refine()` (zod 3 effects). Fails at boot when the input is not an object.
19
+ */
20
+ export declare function inputJsonSchema(toolName: string, schema: AnySchema | undefined): JsonSchemaObject;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Turns what a tool returns (or throws) into an MCP CallTool result, and zod schemas into JSON Schema.
3
+ */
4
+ import { toJsonSchemaCompat } from '@modelcontextprotocol/sdk/server/zod-json-schema-compat.js';
5
+ import { ToolError } from './define.js';
6
+ const EMPTY_INPUT = { type: 'object', properties: {} };
7
+ export function textResult(text, isError = false) {
8
+ return isError ? { content: [{ type: 'text', text }], isError: true } : { content: [{ type: 'text', text }] };
9
+ }
10
+ function isToolResult(v) {
11
+ return !!v && typeof v === 'object' && Array.isArray(v.content);
12
+ }
13
+ /** string → text, MCP result → as is, anything else → pretty JSON text. */
14
+ export function normalizeResult(v) {
15
+ if (typeof v === 'string')
16
+ return textResult(v);
17
+ if (isToolResult(v))
18
+ return v;
19
+ if (v === undefined)
20
+ return textResult('(no result)');
21
+ return textResult(JSON.stringify(v, null, 2));
22
+ }
23
+ /** zod 3 and zod 4 errors both carry `issues` with path and message. */
24
+ export function formatValidationError(err) {
25
+ const issues = err?.issues;
26
+ if (Array.isArray(issues) && issues.length) {
27
+ return issues.map((i) => `${(i.path ?? []).map(String).join('.') || '(root)'}: ${i.message ?? 'invalid'}`).join('; ');
28
+ }
29
+ return err instanceof Error ? err.message : String(err);
30
+ }
31
+ export function isValidationError(err) {
32
+ const name = err?.name;
33
+ return (name === 'ZodError' || name === '$ZodError') && Array.isArray(err.issues);
34
+ }
35
+ /** Map a thrown error to a result the model can read. */
36
+ export function errorResult(toolName, err) {
37
+ if (isValidationError(err)) {
38
+ return textResult(`[invalid_input] 도구 '${toolName}' 입력이 스키마에 맞지 않습니다 — ${formatValidationError(err)}`, true);
39
+ }
40
+ if (err instanceof ToolError)
41
+ return textResult(`[error] ${err.message}`, true);
42
+ const msg = err instanceof Error ? err.message : String(err);
43
+ return textResult(`[fatal] ${msg}`, true);
44
+ }
45
+ /**
46
+ * zod object schema → JSON Schema for tools/list. Unlike the SDK's McpServer, this keeps the properties of
47
+ * schemas wrapped in `.refine()` (zod 3 effects). Fails at boot when the input is not an object.
48
+ */
49
+ export function inputJsonSchema(toolName, schema) {
50
+ if (!schema)
51
+ return EMPTY_INPUT;
52
+ const json = toJsonSchemaCompat(schema, { strictUnions: true, pipeStrategy: 'input' });
53
+ delete json.$schema;
54
+ if (json.type !== 'object') {
55
+ throw new Error(`[plugin] tool "${toolName}": input must be a zod object schema (z.object({...}))`);
56
+ }
57
+ return json;
58
+ }
59
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/plugin/result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface RawChunk {
2
+ heading: string;
3
+ content: string;
4
+ tokens: number;
5
+ image_urls: string[];
6
+ table_count: number;
7
+ has_code_block: boolean;
8
+ doc_status: string | null;
9
+ doc_tier: string | null;
10
+ doc_date: string | null;
11
+ doc_authors: string[];
12
+ doc_related: string[];
13
+ doc_tags: string[];
14
+ doc_source_refs: string[];
15
+ doc_affects: string[];
16
+ doc_products: string[];
17
+ doc_type: string | null;
18
+ doc_confidence: string | null;
19
+ }
20
+ export interface ParsedDoc {
21
+ frontmatter: Record<string, unknown>;
22
+ body: string;
23
+ }
24
+ export declare function parseFrontmatter(markdown: string): ParsedDoc;
25
+ /**
26
+ * 전체 markdown → 청크 array. heading context + 이미지/표/코드/frontmatter 메타 보존.
27
+ */
28
+ export declare function chunkMarkdown(markdown: string): RawChunk[];