@kozou/mcp 0.1.0 → 0.2.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 (49) hide show
  1. package/dist/cli.js +39 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/schemas/describe_table.d.ts +14 -155
  8. package/dist/schemas/describe_table.d.ts.map +1 -1
  9. package/dist/schemas/describe_table.js +4 -0
  10. package/dist/schemas/describe_table.js.map +1 -1
  11. package/dist/schemas/describe_view.d.ts +8 -84
  12. package/dist/schemas/describe_view.d.ts.map +1 -1
  13. package/dist/schemas/describe_view.js +4 -0
  14. package/dist/schemas/describe_view.js.map +1 -1
  15. package/dist/schemas/get_concept_context.d.ts +7 -56
  16. package/dist/schemas/get_concept_context.d.ts.map +1 -1
  17. package/dist/schemas/get_concept_context.js +2 -0
  18. package/dist/schemas/get_concept_context.js.map +1 -1
  19. package/dist/schemas/list_concepts.d.ts +3 -27
  20. package/dist/schemas/list_concepts.d.ts.map +1 -1
  21. package/dist/schemas/list_concepts.js +5 -1
  22. package/dist/schemas/list_concepts.js.map +1 -1
  23. package/dist/schemas/list_tables.d.ts +3 -33
  24. package/dist/schemas/list_tables.d.ts.map +1 -1
  25. package/dist/schemas/list_views.d.ts +3 -27
  26. package/dist/schemas/list_views.d.ts.map +1 -1
  27. package/dist/server.d.ts.map +1 -1
  28. package/dist/server.js +10 -1
  29. package/dist/server.js.map +1 -1
  30. package/dist/startHttpServer.d.ts +30 -0
  31. package/dist/startHttpServer.d.ts.map +1 -0
  32. package/dist/startHttpServer.js +176 -0
  33. package/dist/startHttpServer.js.map +1 -0
  34. package/dist/tools/describe_table.d.ts.map +1 -1
  35. package/dist/tools/describe_table.js +2 -0
  36. package/dist/tools/describe_table.js.map +1 -1
  37. package/dist/tools/describe_view.d.ts.map +1 -1
  38. package/dist/tools/describe_view.js +2 -0
  39. package/dist/tools/describe_view.js.map +1 -1
  40. package/dist/tools/get_concept_context.d.ts.map +1 -1
  41. package/dist/tools/get_concept_context.js +6 -1
  42. package/dist/tools/get_concept_context.js.map +1 -1
  43. package/dist/tools/list_concepts.d.ts +2 -2
  44. package/dist/tools/list_concepts.d.ts.map +1 -1
  45. package/dist/tools/list_concepts.js.map +1 -1
  46. package/dist/tools/list_tables.d.ts.map +1 -1
  47. package/dist/tools/list_tables.js +4 -1
  48. package/dist/tools/list_tables.js.map +1 -1
  49. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"list_concepts.js","sourceRoot":"","sources":["../../src/schemas/list_concepts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAE7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;KACxB,CAAC,CACH;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"list_concepts.js","sourceRoot":"","sources":["../../src/schemas/list_concepts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4EAA4E;AAC5E,wEAAwE;AACxE,2EAA2E;AAC3E,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;KACxB,CAAC,CACH;CACF,CAAC,CAAC"}
@@ -2,45 +2,15 @@ import { z } from 'zod';
2
2
  export declare const listTablesInputSchema: z.ZodObject<{
3
3
  schema: z.ZodOptional<z.ZodString>;
4
4
  includeSystem: z.ZodOptional<z.ZodBoolean>;
5
- }, "strip", z.ZodTypeAny, {
6
- schema?: string | undefined;
7
- includeSystem?: boolean | undefined;
8
- }, {
9
- schema?: string | undefined;
10
- includeSystem?: boolean | undefined;
11
- }>;
5
+ }, z.core.$strip>;
12
6
  export declare const listTablesOutputSchema: z.ZodObject<{
13
7
  tables: z.ZodArray<z.ZodObject<{
14
8
  qualifiedName: z.ZodString;
15
9
  label: z.ZodString;
16
10
  description: z.ZodNullable<z.ZodString>;
17
11
  rowCountEstimate: z.ZodNullable<z.ZodNumber>;
18
- }, "strip", z.ZodTypeAny, {
19
- qualifiedName: string;
20
- label: string;
21
- description: string | null;
22
- rowCountEstimate: number | null;
23
- }, {
24
- qualifiedName: string;
25
- label: string;
26
- description: string | null;
27
- rowCountEstimate: number | null;
28
- }>, "many">;
29
- }, "strip", z.ZodTypeAny, {
30
- tables: {
31
- qualifiedName: string;
32
- label: string;
33
- description: string | null;
34
- rowCountEstimate: number | null;
35
- }[];
36
- }, {
37
- tables: {
38
- qualifiedName: string;
39
- label: string;
40
- description: string | null;
41
- rowCountEstimate: number | null;
42
- }[];
43
- }>;
12
+ }, z.core.$strip>>;
13
+ }, z.core.$strip>;
44
14
  export type ListTablesInput = z.infer<typeof listTablesInputSchema>;
45
15
  export type ListTablesOutput = z.infer<typeof listTablesOutputSchema>;
46
16
  //# sourceMappingURL=list_tables.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list_tables.d.ts","sourceRoot":"","sources":["../../src/schemas/list_tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASjC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"list_tables.d.ts","sourceRoot":"","sources":["../../src/schemas/list_tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -1,38 +1,14 @@
1
1
  import { z } from 'zod';
2
2
  export declare const listViewsInputSchema: z.ZodObject<{
3
3
  schema: z.ZodOptional<z.ZodString>;
4
- }, "strip", z.ZodTypeAny, {
5
- schema?: string | undefined;
6
- }, {
7
- schema?: string | undefined;
8
- }>;
4
+ }, z.core.$strip>;
9
5
  export declare const listViewsOutputSchema: z.ZodObject<{
10
6
  views: z.ZodArray<z.ZodObject<{
11
7
  qualifiedName: z.ZodString;
12
8
  label: z.ZodString;
13
9
  purpose: z.ZodNullable<z.ZodString>;
14
- }, "strip", z.ZodTypeAny, {
15
- qualifiedName: string;
16
- label: string;
17
- purpose: string | null;
18
- }, {
19
- qualifiedName: string;
20
- label: string;
21
- purpose: string | null;
22
- }>, "many">;
23
- }, "strip", z.ZodTypeAny, {
24
- views: {
25
- qualifiedName: string;
26
- label: string;
27
- purpose: string | null;
28
- }[];
29
- }, {
30
- views: {
31
- qualifiedName: string;
32
- label: string;
33
- purpose: string | null;
34
- }[];
35
- }>;
10
+ }, z.core.$strip>>;
11
+ }, z.core.$strip>;
36
12
  export type ListViewsInput = z.infer<typeof listViewsInputSchema>;
37
13
  export type ListViewsOutput = z.infer<typeof listViewsOutputSchema>;
38
14
  //# sourceMappingURL=list_views.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list_views.d.ts","sourceRoot":"","sources":["../../src/schemas/list_views.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;EAQhC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"list_views.d.ts","sourceRoot":"","sources":["../../src/schemas/list_views.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;iBAE/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;iBAQhC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqEpD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAwC1D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA+EpD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAwC1D"}
package/dist/server.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
1
3
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
4
  import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
3
5
  import { listTables } from './tools/list_tables.js';
@@ -6,6 +8,13 @@ import { listViews } from './tools/list_views.js';
6
8
  import { describeView } from './tools/describe_view.js';
7
9
  import { listConcepts } from './tools/list_concepts.js';
8
10
  import { getConceptContext } from './tools/get_concept_context.js';
11
+ // Read the advertised server version from this package's package.json so
12
+ // it tracks a release bump automatically instead of being hardcoded.
13
+ // `../package.json` resolves to packages/mcp/package.json from the
14
+ // compiled dist/server.js; npm always ships package.json in the tarball.
15
+ const require = createRequire(import.meta.url);
16
+ const pkg = JSON.parse(readFileSync(require.resolve('../package.json'), 'utf8'));
17
+ const SERVER_VERSION = pkg.version;
9
18
  const TOOL_DEFINITIONS = [
10
19
  {
11
20
  name: 'list_tables',
@@ -69,7 +78,7 @@ function errorResult(message) {
69
78
  };
70
79
  }
71
80
  export function createMcpServer(cache) {
72
- const server = new Server({ name: 'kozou', version: '0.1.0' }, { capabilities: { tools: {} } });
81
+ const server = new Server({ name: 'kozou', version: SERVER_VERSION }, { capabilities: { tools: {} } });
73
82
  server.setRequestHandler(ListToolsRequestSchema, () => Promise.resolve({ tools: TOOL_DEFINITIONS.map((t) => ({ ...t })) }));
74
83
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
75
84
  const name = request.params.name;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { SchemaCache } from './schemaCache.js';
2
+ export type StartHttpServerOptions = {
3
+ /** TCP port to listen on. Default: 3334 (Kozou v0.1 spec §7.1). */
4
+ port?: number;
5
+ /** Host/interface to bind. Default: 127.0.0.1 (loopback only). */
6
+ host?: string;
7
+ /** Path that serves the MCP Streamable HTTP endpoint. Default: '/mcp'. */
8
+ mcpPath?: string;
9
+ /** Prefix used in stderr log lines. Default: '[@kozou/mcp]'. */
10
+ logPrefix?: string;
11
+ };
12
+ export type HttpServerHandle = {
13
+ /** The actual bound port (resolves an ephemeral `0` to the real port). */
14
+ port: number;
15
+ /** The host the server is bound to. */
16
+ host: string;
17
+ /** Stop accepting connections and resolve once the server has closed. */
18
+ close: () => Promise<void>;
19
+ };
20
+ export declare function isLoopbackHost(host: string): boolean;
21
+ /**
22
+ * Start the MCP server over Streamable HTTP, bound to the given
23
+ * SchemaCache. Resolves once the server is listening.
24
+ *
25
+ * Routes:
26
+ * - `<mcpPath>` (default `/mcp`) — MCP Streamable HTTP endpoint
27
+ * - `POST /admin/refresh` — invalidate the schema cache
28
+ */
29
+ export declare function startHttpServer(cache: SchemaCache, opts?: StartHttpServerOptions): Promise<HttpServerHandle>;
30
+ //# sourceMappingURL=startHttpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startHttpServer.d.ts","sourceRoot":"","sources":["../src/startHttpServer.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,sBAAsB,GAAG;IACnC,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AASF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAYD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,gBAAgB,CAAC,CA6C3B"}
@@ -0,0 +1,176 @@
1
+ // Convenience helper to start an MCP server with the Streamable HTTP
2
+ // transport (Kozou v0.1 spec §7.1). Mirrors startStdioServer so callers
3
+ // (the bundled kozou CLI and adopters embedding the server) do not need
4
+ // to depend on @modelcontextprotocol/sdk or node:http directly.
5
+ //
6
+ // Design notes:
7
+ // - The server is *stateful*: an MCP client initialises a session, the
8
+ // transport issues an `mcp-session-id`, and subsequent requests reuse
9
+ // the matching transport. This is the transport mode the standard MCP
10
+ // client (Claude Desktop / Claude Code) speaks. Sessions are torn
11
+ // down on transport close so nothing accumulates.
12
+ // - Cache invalidation is exposed over HTTP via `POST /admin/refresh`
13
+ // (Kozou v0.1 spec §7.5), the HTTP-mode counterpart to the stdio
14
+ // server's SIGHUP handler.
15
+ // - v0.1 MCP HTTP ships with **no authentication** (spec §18.5), so the
16
+ // server binds to localhost by default and prints a loud warning when
17
+ // bound to a non-loopback host. The tools only expose schema
18
+ // metadata (no SQL execution, no data access), which bounds the blast
19
+ // radius, but operators must still avoid exposing it on a public
20
+ // interface.
21
+ import { randomUUID } from 'node:crypto';
22
+ import { createServer } from 'node:http';
23
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
24
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
25
+ import { createMcpServer } from './server.js';
26
+ const DEFAULT_PORT = 3334;
27
+ const DEFAULT_HOST = '127.0.0.1';
28
+ const DEFAULT_MCP_PATH = '/mcp';
29
+ const REFRESH_PATH = '/admin/refresh';
30
+ const LOOPBACK_HOSTS = new Set(['127.0.0.1', '::1', 'localhost', '::ffff:127.0.0.1']);
31
+ export function isLoopbackHost(host) {
32
+ return LOOPBACK_HOSTS.has(host);
33
+ }
34
+ function nonLoopbackWarning(host, prefix) {
35
+ return (`${prefix} WARNING: MCP HTTP server bound to non-loopback host "${host}".\n` +
36
+ `${prefix} v0.1 MCP HTTP has NO authentication (spec §18.5). Anyone who can\n` +
37
+ `${prefix} reach ${host} can read this database's schema metadata. Bind to\n` +
38
+ `${prefix} 127.0.0.1 (the default) unless you have a trusted network and an\n` +
39
+ `${prefix} external auth/proxy layer in front.\n`);
40
+ }
41
+ /**
42
+ * Start the MCP server over Streamable HTTP, bound to the given
43
+ * SchemaCache. Resolves once the server is listening.
44
+ *
45
+ * Routes:
46
+ * - `<mcpPath>` (default `/mcp`) — MCP Streamable HTTP endpoint
47
+ * - `POST /admin/refresh` — invalidate the schema cache
48
+ */
49
+ export async function startHttpServer(cache, opts = {}) {
50
+ const prefix = opts.logPrefix ?? '[@kozou/mcp]';
51
+ const host = opts.host ?? DEFAULT_HOST;
52
+ const port = opts.port ?? DEFAULT_PORT;
53
+ const mcpPath = opts.mcpPath ?? DEFAULT_MCP_PATH;
54
+ if (!isLoopbackHost(host)) {
55
+ process.stderr.write(nonLoopbackWarning(host, prefix));
56
+ }
57
+ // Active MCP sessions, keyed by the transport-issued session id.
58
+ const transports = new Map();
59
+ const httpServer = createServer((req, res) => {
60
+ handleRequest(req, res, cache, mcpPath, transports).catch((err) => {
61
+ respondError(res, 500, err instanceof Error ? err.message : String(err));
62
+ });
63
+ });
64
+ await new Promise((resolve, reject) => {
65
+ const onError = (err) => reject(err);
66
+ httpServer.once('error', onError);
67
+ httpServer.listen(port, host, () => {
68
+ httpServer.removeListener('error', onError);
69
+ resolve();
70
+ });
71
+ });
72
+ const boundPort = httpServer.address().port;
73
+ process.stderr.write(`${prefix} MCP HTTP listening on http://${host}:${boundPort}` +
74
+ ` (MCP: ${mcpPath}, refresh: POST ${REFRESH_PATH})\n`);
75
+ return {
76
+ port: boundPort,
77
+ host,
78
+ close: async () => {
79
+ for (const transport of transports.values()) {
80
+ await transport.close();
81
+ }
82
+ transports.clear();
83
+ await closeServer(httpServer);
84
+ },
85
+ };
86
+ }
87
+ async function handleRequest(req, res, cache, mcpPath, transports) {
88
+ const url = new URL(req.url ?? '/', 'http://localhost');
89
+ if (url.pathname === REFRESH_PATH) {
90
+ if (req.method !== 'POST') {
91
+ respondError(res, 405, 'Method Not Allowed: use POST /admin/refresh');
92
+ return;
93
+ }
94
+ cache.invalidate();
95
+ res.writeHead(200, { 'content-type': 'application/json' });
96
+ res.end(JSON.stringify({ ok: true }));
97
+ return;
98
+ }
99
+ if (url.pathname === mcpPath) {
100
+ await handleMcp(req, res, cache, transports);
101
+ return;
102
+ }
103
+ respondError(res, 404, `Not Found: ${url.pathname}`);
104
+ }
105
+ async function handleMcp(req, res, cache, transports) {
106
+ const sessionId = headerValue(req.headers['mcp-session-id']);
107
+ // Existing session: reuse its transport (and the MCP server bound to it).
108
+ if (sessionId !== undefined) {
109
+ const existing = transports.get(sessionId);
110
+ if (existing === undefined) {
111
+ respondError(res, 404, `Unknown MCP session: ${sessionId}`);
112
+ return;
113
+ }
114
+ await existing.handleRequest(req, res);
115
+ return;
116
+ }
117
+ // No session id: this must be an initialize request that opens a new
118
+ // session. The body is read once here so we can both classify it and
119
+ // hand it to the transport (which would otherwise consume the stream).
120
+ const body = await readJsonBody(req);
121
+ if (!isInitializeRequest(body)) {
122
+ respondError(res, 400, 'Bad Request: missing mcp-session-id header (no active session)');
123
+ return;
124
+ }
125
+ const transport = new StreamableHTTPServerTransport({
126
+ sessionIdGenerator: () => randomUUID(),
127
+ enableJsonResponse: true,
128
+ onsessioninitialized: (sid) => {
129
+ transports.set(sid, transport);
130
+ },
131
+ });
132
+ transport.onclose = () => {
133
+ if (transport.sessionId !== undefined) {
134
+ transports.delete(transport.sessionId);
135
+ }
136
+ };
137
+ const server = createMcpServer(cache);
138
+ await server.connect(transport);
139
+ await transport.handleRequest(req, res, body);
140
+ }
141
+ function headerValue(value) {
142
+ if (Array.isArray(value))
143
+ return value[0];
144
+ return value;
145
+ }
146
+ async function readJsonBody(req) {
147
+ const chunks = [];
148
+ for await (const chunk of req) {
149
+ chunks.push(chunk);
150
+ }
151
+ if (chunks.length === 0)
152
+ return undefined;
153
+ const raw = Buffer.concat(chunks).toString('utf8');
154
+ if (raw.length === 0)
155
+ return undefined;
156
+ try {
157
+ return JSON.parse(raw);
158
+ }
159
+ catch {
160
+ return undefined;
161
+ }
162
+ }
163
+ function respondError(res, status, message) {
164
+ if (res.headersSent) {
165
+ res.end();
166
+ return;
167
+ }
168
+ res.writeHead(status, { 'content-type': 'application/json' });
169
+ res.end(JSON.stringify({ error: message }));
170
+ }
171
+ function closeServer(httpServer) {
172
+ return new Promise((resolve, reject) => {
173
+ httpServer.close((err) => (err ? reject(err) : resolve()));
174
+ });
175
+ }
176
+ //# sourceMappingURL=startHttpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startHttpServer.js","sourceRoot":"","sources":["../src/startHttpServer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"describe_table.d.ts","sourceRoot":"","sources":["../../src/tools/describe_table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAEzB,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,aAAa,GAAG,mBAAmB,CA6ChG"}
1
+ {"version":3,"file":"describe_table.d.ts","sourceRoot":"","sources":["../../src/tools/describe_table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAEzB,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,aAAa,GAAG,mBAAmB,CA+ChG"}
@@ -19,6 +19,7 @@ export function describeTable(input, ctx) {
19
19
  defaultExpr: c.defaultExpr,
20
20
  description: c.description,
21
21
  aiDescription: c.aiDescription,
22
+ policy: c.policy ?? [],
22
23
  enumValues: c.enumValues,
23
24
  isForeignKey: c.isForeignKey,
24
25
  references: referencesByField.get(c.name) ?? null,
@@ -28,6 +29,7 @@ export function describeTable(input, ctx) {
28
29
  label: table.label,
29
30
  description: table.description,
30
31
  aiDescription: table.aiDescription,
32
+ policy: table.policy ?? [],
31
33
  primaryKey: table.primaryKey,
32
34
  columns,
33
35
  relations: table.relations.map((r) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"describe_table.js","sourceRoot":"","sources":["../../src/tools/describe_table.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAIzB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,aAAa,CAAC,KAAyB,EAAE,GAAkB;IACzE,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA6C,CAAC;IAC/E,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAClC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE;YAC/B,KAAK,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE;YACzD,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAA0B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;KAClD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,eAAe,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;YAC/D,gBAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;QACH,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"describe_table.js","sourceRoot":"","sources":["../../src/tools/describe_table.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAIzB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,aAAa,CAAC,KAAyB,EAAE,GAAkB;IACzE,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA6C,CAAC;IAC/E,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAClC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE;YAC/B,KAAK,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE;YACzD,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAA0B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;KAClD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO;QACP,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,eAAe,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;YAC/D,gBAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;YACrC,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;QACH,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"describe_view.d.ts","sourceRoot":"","sources":["../../src/tools/describe_view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,GAAG,kBAAkB,CAyB7F"}
1
+ {"version":3,"file":"describe_view.d.ts","sourceRoot":"","sources":["../../src/tools/describe_view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,GAAG,kBAAkB,CA2B7F"}
@@ -10,6 +10,7 @@ export function describeView(input, ctx) {
10
10
  label: view.label,
11
11
  description: view.description,
12
12
  aiDescription: view.aiDescription,
13
+ policy: view.policy ?? [],
13
14
  columns: view.columns.map((c) => ({
14
15
  name: c.name,
15
16
  dataType: c.dataType,
@@ -17,6 +18,7 @@ export function describeView(input, ctx) {
17
18
  defaultExpr: c.defaultExpr,
18
19
  description: c.description,
19
20
  aiDescription: c.aiDescription,
21
+ policy: c.policy ?? [],
20
22
  enumValues: c.enumValues,
21
23
  isForeignKey: c.isForeignKey,
22
24
  references: null,
@@ -1 +1 @@
1
- {"version":3,"file":"describe_view.js","sourceRoot":"","sources":["../../src/tools/describe_view.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAGxB,MAAM,6BAA6B,CAAC;AAErC,MAAM,UAAU,YAAY,CAAC,KAAwB,EAAE,GAAkB;IACvE,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;KACpC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"describe_view.js","sourceRoot":"","sources":["../../src/tools/describe_view.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAGxB,MAAM,6BAA6B,CAAC;AAErC,MAAM,UAAU,YAAY,CAAC,KAAwB,EAAE,GAAkB;IACvE,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;YACtB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;KACpC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get_concept_context.d.ts","sourceRoot":"","sources":["../../src/tools/get_concept_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,mCAAmC,CAAC;AAE3C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,aAAa,GACjB,uBAAuB,CAsBzB"}
1
+ {"version":3,"file":"get_concept_context.d.ts","sourceRoot":"","sources":["../../src/tools/get_concept_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,mCAAmC,CAAC;AAE3C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,aAAa,GACjB,uBAAuB,CA2BzB"}
@@ -12,6 +12,7 @@ export function getConceptContext(input, ctx) {
12
12
  label: concept.label,
13
13
  description: concept.description,
14
14
  aiNotes: concept.aiNotes,
15
+ policies: concept.policies ?? [],
15
16
  preferredQuerySource: `FROM ${concept.name}`,
16
17
  joinSuggestions: concept.joinSuggestions.map((j) => ({
17
18
  table: j.table,
@@ -19,7 +20,11 @@ export function getConceptContext(input, ctx) {
19
20
  purpose: '',
20
21
  })),
21
22
  relatedTables,
22
- exampleQueries: [],
23
+ // `@example:` blocks captured on the VIEW's COMMENT by
24
+ // @kozou/core (Kozou v0.1 spec §7.3.6). Each entry is
25
+ // `{ description, sql }`: the line after `@example:` is the
26
+ // description, the indented continuation block is the SQL.
27
+ exampleQueries: concept.exampleQueries,
23
28
  };
24
29
  }
25
30
  //# sourceMappingURL=get_concept_context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get_concept_context.js","sourceRoot":"","sources":["../../src/tools/get_concept_context.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAG7B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,UAAU,iBAAiB,CAC/B,KAA6B,EAC7B,GAAkB;IAElB,MAAM,MAAM,GAAG,4BAA4B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,oBAAoB,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,aAAa;QACb,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get_concept_context.js","sourceRoot":"","sources":["../../src/tools/get_concept_context.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAG7B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,UAAU,iBAAiB,CAC/B,KAA6B,EAC7B,GAAkB;IAElB,MAAM,MAAM,GAAG,4BAA4B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;QAChC,oBAAoB,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,aAAa;QACb,uDAAuD;QACvD,sDAAsD;QACtD,4DAA4D;QAC5D,2DAA2D;QAC3D,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { SchemaContext } from '@kozou/core';
2
- import { type ListConceptsInput, type ListConceptsOutput } from '../schemas/list_concepts.js';
3
- export declare function listConcepts(input: ListConceptsInput, ctx: SchemaContext): ListConceptsOutput;
2
+ import { type ListConceptsOutput } from '../schemas/list_concepts.js';
3
+ export declare function listConcepts(input: Record<string, unknown>, ctx: SchemaContext): ListConceptsOutput;
4
4
  //# sourceMappingURL=list_concepts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list_concepts.d.ts","sourceRoot":"","sources":["../../src/tools/list_concepts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,GAAG,kBAAkB,CAU7F"}
1
+ {"version":3,"file":"list_concepts.d.ts","sourceRoot":"","sources":["../../src/tools/list_concepts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,aAAa,GACjB,kBAAkB,CAUpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"list_concepts.js","sourceRoot":"","sources":["../../src/tools/list_concepts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAGxB,MAAM,6BAA6B,CAAC;AAErC,MAAM,UAAU,YAAY,CAAC,KAAwB,EAAE,GAAkB;IACvE,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list_concepts.js","sourceRoot":"","sources":["../../src/tools/list_concepts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,GAExB,MAAM,6BAA6B,CAAC;AAErC,MAAM,UAAU,YAAY,CAC1B,KAA8B,EAC9B,GAAkB;IAElB,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list_tables.d.ts","sourceRoot":"","sources":["../../src/tools/list_tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAEnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,GAAG,gBAAgB,CAavF"}
1
+ {"version":3,"file":"list_tables.d.ts","sourceRoot":"","sources":["../../src/tools/list_tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAEnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,GAAG,gBAAgB,CAgBvF"}
@@ -9,7 +9,10 @@ export function listTables(input, ctx) {
9
9
  qualifiedName: t.qualifiedName,
10
10
  label: t.label,
11
11
  description: t.description,
12
- rowCountEstimate: null,
12
+ // Planner estimate threaded through introspect ->
13
+ // RawTable.rowCountEstimate. `null` when PostgreSQL has not
14
+ // analyzed the table yet (Kozou v0.1 spec §7.3.1).
15
+ rowCountEstimate: t.rawTable.rowCountEstimate,
13
16
  })),
14
17
  };
15
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list_tables.js","sourceRoot":"","sources":["../../src/tools/list_tables.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,GAGtB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,UAAU,UAAU,CAAC,KAAsB,EAAE,GAAkB;IACnE,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;KACN,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list_tables.js","sourceRoot":"","sources":["../../src/tools/list_tables.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,GAGtB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,UAAU,UAAU,CAAC,KAAsB,EAAE,GAAkB;IACnE,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,kDAAkD;YAClD,4DAA4D;YAC5D,mDAAmD;YACnD,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB;SAC9C,CAAC,CAAC;KACN,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kozou/mcp",
3
- "version": "0.1.0",
4
- "description": "Kozou MCP server for AI agents (stdio; HTTP coming in v0.1.1)",
3
+ "version": "0.2.0",
4
+ "description": "Kozou MCP server for AI agents (stdio + HTTP)",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -35,16 +35,17 @@
35
35
  "dependencies": {
36
36
  "@modelcontextprotocol/sdk": "^1.0.0",
37
37
  "pg": "^8.13.0",
38
- "zod": "^3.23.0",
39
- "@kozou/core": "0.1.0",
40
- "@kozou/introspect": "0.1.0"
38
+ "zod": "^4.4.3",
39
+ "@kozou/core": "0.2.0",
40
+ "@kozou/introspect": "0.2.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/pg": "^8.11.0",
44
- "tsx": "^4.19.0"
44
+ "tsx": "^4.19.0",
45
+ "@kozou/test-utils": "0.0.0"
45
46
  },
46
47
  "scripts": {
47
- "typecheck": "tsc --noEmit",
48
+ "typecheck": "tsc -p tsconfig.test.json",
48
49
  "build": "tsc",
49
50
  "test": "vitest run --coverage"
50
51
  }