@dotdo/postgres 0.1.2 → 0.1.3

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 (103) hide show
  1. package/README.md +73 -1
  2. package/dist/client/index.d.ts +47 -0
  3. package/dist/client/index.d.ts.map +1 -0
  4. package/dist/client/index.js +47 -0
  5. package/dist/client/index.js.map +1 -0
  6. package/dist/client/postgres-client.d.ts +273 -0
  7. package/dist/client/postgres-client.d.ts.map +1 -0
  8. package/dist/client/postgres-client.js +389 -0
  9. package/dist/client/postgres-client.js.map +1 -0
  10. package/dist/client/types.d.ts +167 -0
  11. package/dist/client/types.d.ts.map +1 -0
  12. package/dist/client/types.js +7 -0
  13. package/dist/client/types.js.map +1 -0
  14. package/dist/do/index.d.ts +18 -0
  15. package/dist/do/index.d.ts.map +1 -0
  16. package/dist/do/index.js +18 -0
  17. package/dist/do/index.js.map +1 -0
  18. package/dist/do/postgres.d.ts +110 -0
  19. package/dist/do/postgres.d.ts.map +1 -0
  20. package/dist/do/postgres.js +266 -0
  21. package/dist/do/postgres.js.map +1 -0
  22. package/dist/do/sql.d.ts +92 -0
  23. package/dist/do/sql.d.ts.map +1 -0
  24. package/dist/do/sql.js +204 -0
  25. package/dist/do/sql.js.map +1 -0
  26. package/dist/index.d.ts +25 -30
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +29 -30
  29. package/dist/index.js.map +1 -1
  30. package/dist/mcp/binding.d.ts +47 -0
  31. package/dist/mcp/binding.d.ts.map +1 -0
  32. package/dist/mcp/binding.js +183 -0
  33. package/dist/mcp/binding.js.map +1 -0
  34. package/dist/mcp/index.d.ts +92 -0
  35. package/dist/mcp/index.d.ts.map +1 -0
  36. package/dist/mcp/index.js +91 -0
  37. package/dist/mcp/index.js.map +1 -0
  38. package/dist/mcp/server.d.ts +62 -0
  39. package/dist/mcp/server.d.ts.map +1 -0
  40. package/dist/mcp/server.js +278 -0
  41. package/dist/mcp/server.js.map +1 -0
  42. package/dist/mcp/tools.d.ts +58 -0
  43. package/dist/mcp/tools.d.ts.map +1 -0
  44. package/dist/mcp/tools.js +356 -0
  45. package/dist/mcp/tools.js.map +1 -0
  46. package/dist/mcp/types.d.ts +139 -0
  47. package/dist/mcp/types.d.ts.map +1 -0
  48. package/dist/mcp/types.js +7 -0
  49. package/dist/mcp/types.js.map +1 -0
  50. package/dist/pglite/workers-pglite.d.ts +13 -4
  51. package/dist/pglite/workers-pglite.d.ts.map +1 -1
  52. package/dist/pglite/workers-pglite.js +110 -5
  53. package/dist/pglite/workers-pglite.js.map +1 -1
  54. package/dist/pglite-assets/pglite.data +0 -0
  55. package/dist/pglite-assets/pglite.wasm +0 -0
  56. package/dist/worker/background-pglite-manager.d.ts +243 -0
  57. package/dist/worker/background-pglite-manager.d.ts.map +1 -0
  58. package/dist/worker/background-pglite-manager.js +528 -0
  59. package/dist/worker/background-pglite-manager.js.map +1 -0
  60. package/dist/worker/do-pglite-manager.d.ts +77 -0
  61. package/dist/worker/do-pglite-manager.d.ts.map +1 -1
  62. package/dist/worker/do-pglite-manager.js +189 -12
  63. package/dist/worker/do-pglite-manager.js.map +1 -1
  64. package/dist/worker/index.d.ts +7 -1
  65. package/dist/worker/index.d.ts.map +1 -1
  66. package/dist/worker/index.js +19 -1
  67. package/dist/worker/index.js.map +1 -1
  68. package/dist/worker/lazy-pglite-manager.d.ts +242 -0
  69. package/dist/worker/lazy-pglite-manager.d.ts.map +1 -0
  70. package/dist/worker/lazy-pglite-manager.js +463 -0
  71. package/dist/worker/lazy-pglite-manager.js.map +1 -0
  72. package/package.json +16 -3
  73. package/src/client/index.ts +61 -0
  74. package/src/client/postgres-client.ts +442 -0
  75. package/src/client/types.ts +211 -0
  76. package/src/do/index.ts +18 -0
  77. package/src/do/postgres.ts +367 -0
  78. package/src/do/sql.ts +280 -0
  79. package/src/index.ts +50 -30
  80. package/src/mcp/binding.ts +236 -0
  81. package/src/mcp/index.ts +122 -0
  82. package/src/mcp/server.ts +361 -0
  83. package/src/mcp/tools.ts +464 -0
  84. package/src/mcp/types.ts +148 -0
  85. package/src/pglite/workers-pglite.ts +141 -12
  86. package/src/pglite-assets/pglite.data +0 -0
  87. package/src/pglite-assets/pglite.wasm +0 -0
  88. package/src/worker/background-pglite-manager.ts +680 -0
  89. package/src/worker/do-pglite-manager.ts +235 -19
  90. package/src/worker/index.ts +71 -1
  91. package/src/worker/lazy-pglite-manager.ts +595 -0
  92. package/dist/iceberg/duckdb-wasm.d.ts +0 -447
  93. package/dist/iceberg/duckdb-wasm.d.ts.map +0 -1
  94. package/dist/iceberg/duckdb-wasm.js +0 -600
  95. package/dist/iceberg/duckdb-wasm.js.map +0 -1
  96. package/dist/iceberg/test-fixtures.d.ts +0 -151
  97. package/dist/iceberg/test-fixtures.d.ts.map +0 -1
  98. package/dist/iceberg/test-fixtures.js +0 -446
  99. package/dist/iceberg/test-fixtures.js.map +0 -1
  100. package/dist/worker/__mocks__/cloudflare-workers.d.ts +0 -31
  101. package/dist/worker/__mocks__/cloudflare-workers.d.ts.map +0 -1
  102. package/dist/worker/__mocks__/cloudflare-workers.js +0 -33
  103. package/dist/worker/__mocks__/cloudflare-workers.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * MCP Server Module for PostgresDO
3
+ *
4
+ * Provides MCP (Model Context Protocol) server implementation for PostgreSQL
5
+ * databases running in Cloudflare Durable Objects.
6
+ *
7
+ * ## Overview
8
+ *
9
+ * This module implements the three core MCP primitives:
10
+ *
11
+ * 1. **search** - Query the database with SQL, list tables, or get schema
12
+ * 2. **fetch** - Get a specific row by table/id or table schema
13
+ * 3. **do** - Execute code with the `pg` binding for full database access
14
+ *
15
+ * ## Usage
16
+ *
17
+ * @example Basic MCP server setup
18
+ * ```typescript
19
+ * import { createMCPServer } from '@dotdo/postgres/mcp'
20
+ * import { PostgresDO } from '@dotdo/postgres/worker'
21
+ *
22
+ * // In your worker
23
+ * const stub = env.POSTGRES_DO.get(doId) as DurableObjectStub<PostgresDO>
24
+ * const mcpServer = createMCPServer(stub, { databaseId: 'mydb' })
25
+ *
26
+ * // Mount routes
27
+ * app.route('/mcp', mcpServer.routes())
28
+ * ```
29
+ *
30
+ * @example With auth context from oauth.do JWT
31
+ * ```typescript
32
+ * const mcpServer = createMCPServer(stub, {
33
+ * databaseId: 'mydb',
34
+ * authContext: {
35
+ * userId: user.id,
36
+ * email: user.email,
37
+ * scopes: ['read', 'write'],
38
+ * },
39
+ * })
40
+ * ```
41
+ *
42
+ * @example Using tools directly
43
+ * ```typescript
44
+ * // Search for tables
45
+ * const result = await mcpServer.handleRequest({
46
+ * jsonrpc: '2.0',
47
+ * id: 1,
48
+ * method: 'tools/call',
49
+ * params: {
50
+ * name: 'search',
51
+ * arguments: { query: 'tables' }
52
+ * }
53
+ * })
54
+ *
55
+ * // Fetch a row
56
+ * const row = await mcpServer.handleRequest({
57
+ * jsonrpc: '2.0',
58
+ * id: 2,
59
+ * method: 'tools/call',
60
+ * params: {
61
+ * name: 'fetch',
62
+ * arguments: { resource: 'users/123' }
63
+ * }
64
+ * })
65
+ *
66
+ * // Execute code
67
+ * const code = await mcpServer.handleRequest({
68
+ * jsonrpc: '2.0',
69
+ * id: 3,
70
+ * method: 'tools/call',
71
+ * params: {
72
+ * name: 'do',
73
+ * arguments: {
74
+ * code: `
75
+ * const users = await pg.query('SELECT * FROM users LIMIT 5')
76
+ * return users.rows
77
+ * `
78
+ * }
79
+ * }
80
+ * })
81
+ * ```
82
+ *
83
+ * @module mcp
84
+ */
85
+ export type { QueryResult, TableInfo, ColumnInfo, MCPSearchResult, MCPFetchResult, PGBinding, PGTransaction, ToolResponse, SearchInput, FetchInput, DoInput, MCPAuthContext, MCPServerConfig, } from './types.js';
86
+ export { createPGBinding, PG_BINDING_TYPES } from './binding.js';
87
+ export type { QueryExecutor } from './binding.js';
88
+ export { searchTool, fetchTool, doTool, getToolDefinitions, createToolHandlers, createSearchHandler, createFetchHandler, createDoHandler, } from './tools.js';
89
+ export type { Tool } from './tools.js';
90
+ export { createMCPServer, createMCPRoutes } from './server.js';
91
+ export type { MCPServer } from './server.js';
92
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAGH,YAAY,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,EACL,UAAU,EACV,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC9D,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * MCP Server Module for PostgresDO
3
+ *
4
+ * Provides MCP (Model Context Protocol) server implementation for PostgreSQL
5
+ * databases running in Cloudflare Durable Objects.
6
+ *
7
+ * ## Overview
8
+ *
9
+ * This module implements the three core MCP primitives:
10
+ *
11
+ * 1. **search** - Query the database with SQL, list tables, or get schema
12
+ * 2. **fetch** - Get a specific row by table/id or table schema
13
+ * 3. **do** - Execute code with the `pg` binding for full database access
14
+ *
15
+ * ## Usage
16
+ *
17
+ * @example Basic MCP server setup
18
+ * ```typescript
19
+ * import { createMCPServer } from '@dotdo/postgres/mcp'
20
+ * import { PostgresDO } from '@dotdo/postgres/worker'
21
+ *
22
+ * // In your worker
23
+ * const stub = env.POSTGRES_DO.get(doId) as DurableObjectStub<PostgresDO>
24
+ * const mcpServer = createMCPServer(stub, { databaseId: 'mydb' })
25
+ *
26
+ * // Mount routes
27
+ * app.route('/mcp', mcpServer.routes())
28
+ * ```
29
+ *
30
+ * @example With auth context from oauth.do JWT
31
+ * ```typescript
32
+ * const mcpServer = createMCPServer(stub, {
33
+ * databaseId: 'mydb',
34
+ * authContext: {
35
+ * userId: user.id,
36
+ * email: user.email,
37
+ * scopes: ['read', 'write'],
38
+ * },
39
+ * })
40
+ * ```
41
+ *
42
+ * @example Using tools directly
43
+ * ```typescript
44
+ * // Search for tables
45
+ * const result = await mcpServer.handleRequest({
46
+ * jsonrpc: '2.0',
47
+ * id: 1,
48
+ * method: 'tools/call',
49
+ * params: {
50
+ * name: 'search',
51
+ * arguments: { query: 'tables' }
52
+ * }
53
+ * })
54
+ *
55
+ * // Fetch a row
56
+ * const row = await mcpServer.handleRequest({
57
+ * jsonrpc: '2.0',
58
+ * id: 2,
59
+ * method: 'tools/call',
60
+ * params: {
61
+ * name: 'fetch',
62
+ * arguments: { resource: 'users/123' }
63
+ * }
64
+ * })
65
+ *
66
+ * // Execute code
67
+ * const code = await mcpServer.handleRequest({
68
+ * jsonrpc: '2.0',
69
+ * id: 3,
70
+ * method: 'tools/call',
71
+ * params: {
72
+ * name: 'do',
73
+ * arguments: {
74
+ * code: `
75
+ * const users = await pg.query('SELECT * FROM users LIMIT 5')
76
+ * return users.rows
77
+ * `
78
+ * }
79
+ * }
80
+ * })
81
+ * ```
82
+ *
83
+ * @module mcp
84
+ */
85
+ // Binding
86
+ export { createPGBinding, PG_BINDING_TYPES } from './binding.js';
87
+ // Tools
88
+ export { searchTool, fetchTool, doTool, getToolDefinitions, createToolHandlers, createSearchHandler, createFetchHandler, createDoHandler, } from './tools.js';
89
+ // Server
90
+ export { createMCPServer, createMCPRoutes } from './server.js';
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAmBH,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGhE,QAAQ;AACR,OAAO,EACL,UAAU,EACV,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * MCP Server for PostgresDO
3
+ *
4
+ * Creates an MCP (Model Context Protocol) server that exposes PostgreSQL
5
+ * functionality through the search/fetch/do pattern.
6
+ */
7
+ import { Hono } from 'hono';
8
+ import type { Context as HonoContext } from 'hono';
9
+ import type { MCPServerConfig, MCPAuthContext, ToolResponse } from './types.js';
10
+ import type { QueryExecutor } from './binding.js';
11
+ import { getToolDefinitions, createToolHandlers } from './tools.js';
12
+ /**
13
+ * MCP Protocol Message Types
14
+ */
15
+ interface MCPMessage {
16
+ jsonrpc: '2.0';
17
+ id?: string | number;
18
+ method?: string;
19
+ params?: Record<string, unknown>;
20
+ result?: unknown;
21
+ error?: {
22
+ code: number;
23
+ message: string;
24
+ data?: unknown;
25
+ };
26
+ }
27
+ /**
28
+ * MCP Server implementation
29
+ */
30
+ export interface MCPServer {
31
+ /** Handle an MCP request */
32
+ handleRequest(request: MCPMessage): Promise<MCPMessage>;
33
+ /** Get the Hono routes for HTTP transport */
34
+ routes(): Hono;
35
+ }
36
+ /**
37
+ * Create an MCP server for PostgresDO
38
+ *
39
+ * @param executor - Query executor (PostgresDO stub)
40
+ * @param config - Server configuration
41
+ * @returns MCP server instance
42
+ */
43
+ export declare function createMCPServer(executor: QueryExecutor, config?: MCPServerConfig): MCPServer;
44
+ /**
45
+ * Variables stored in Hono context for MCP routes
46
+ */
47
+ interface MCPVariables {
48
+ mcpServer: MCPServer;
49
+ }
50
+ /**
51
+ * Create MCP routes for integration with PostgresDO worker
52
+ */
53
+ export declare function createMCPRoutes(getExecutor: (c: HonoContext) => QueryExecutor, getConfig?: (c: HonoContext) => MCPServerConfig): Hono<{
54
+ Variables: MCPVariables;
55
+ }>;
56
+ /**
57
+ * Re-export types and tools
58
+ */
59
+ export { getToolDefinitions, createToolHandlers };
60
+ export type { Tool } from './tools.js';
61
+ export type { MCPServerConfig, MCPAuthContext, ToolResponse };
62
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,UAAU,UAAU;IAClB,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACvD,6CAA6C;IAC7C,MAAM,IAAI,IAAI,CAAA;CACf;AAaD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,MAAM,GAAE,eAA2C,GAClD,SAAS,CA4PX;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,aAAa,EAC9C,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,eAAe,GAC9C,IAAI,CAAC;IAAE,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC,CAuBnC;AAED;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA;AACjD,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * MCP Server for PostgresDO
3
+ *
4
+ * Creates an MCP (Model Context Protocol) server that exposes PostgreSQL
5
+ * functionality through the search/fetch/do pattern.
6
+ */
7
+ import { Hono } from 'hono';
8
+ import { getToolDefinitions, createToolHandlers, } from './tools.js';
9
+ /**
10
+ * MCP Error codes
11
+ */
12
+ const MCP_ERRORS = {
13
+ PARSE_ERROR: -32700,
14
+ INVALID_REQUEST: -32600,
15
+ METHOD_NOT_FOUND: -32601,
16
+ INVALID_PARAMS: -32602,
17
+ INTERNAL_ERROR: -32603,
18
+ };
19
+ /**
20
+ * Create an MCP server for PostgresDO
21
+ *
22
+ * @param executor - Query executor (PostgresDO stub)
23
+ * @param config - Server configuration
24
+ * @returns MCP server instance
25
+ */
26
+ export function createMCPServer(executor, config = { databaseId: 'default' }) {
27
+ const { timeout = 5000, authContext } = config;
28
+ const handlers = createToolHandlers(executor, { timeout, authContext });
29
+ const tools = getToolDefinitions();
30
+ /**
31
+ * Handle tools/list request
32
+ */
33
+ function handleToolsList() {
34
+ return {
35
+ jsonrpc: '2.0',
36
+ result: {
37
+ tools: tools.map((tool) => ({
38
+ name: tool.name,
39
+ description: tool.description,
40
+ inputSchema: tool.inputSchema,
41
+ })),
42
+ },
43
+ };
44
+ }
45
+ /**
46
+ * Handle tools/call request
47
+ */
48
+ async function handleToolsCall(params) {
49
+ const toolName = params.name;
50
+ const toolArgs = (params.arguments || {});
51
+ const handler = handlers[toolName];
52
+ if (!handler) {
53
+ return {
54
+ jsonrpc: '2.0',
55
+ error: {
56
+ code: MCP_ERRORS.METHOD_NOT_FOUND,
57
+ message: `Unknown tool: ${toolName}`,
58
+ },
59
+ };
60
+ }
61
+ try {
62
+ const result = await handler(toolArgs);
63
+ return {
64
+ jsonrpc: '2.0',
65
+ result,
66
+ };
67
+ }
68
+ catch (error) {
69
+ const message = error instanceof Error ? error.message : 'Unknown error';
70
+ return {
71
+ jsonrpc: '2.0',
72
+ error: {
73
+ code: MCP_ERRORS.INTERNAL_ERROR,
74
+ message,
75
+ },
76
+ };
77
+ }
78
+ }
79
+ /**
80
+ * Handle initialize request
81
+ */
82
+ function handleInitialize(_params) {
83
+ return {
84
+ jsonrpc: '2.0',
85
+ result: {
86
+ protocolVersion: '2024-11-05',
87
+ capabilities: {
88
+ tools: {},
89
+ },
90
+ serverInfo: {
91
+ name: 'postgres-mcp',
92
+ version: '0.1.0',
93
+ },
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Handle ping request
99
+ */
100
+ function handlePing() {
101
+ return {
102
+ jsonrpc: '2.0',
103
+ result: {},
104
+ };
105
+ }
106
+ /**
107
+ * Main request handler
108
+ */
109
+ async function handleRequest(request) {
110
+ const { method, params = {}, id } = request;
111
+ let response;
112
+ switch (method) {
113
+ case 'initialize':
114
+ response = handleInitialize(params);
115
+ break;
116
+ case 'ping':
117
+ response = handlePing();
118
+ break;
119
+ case 'tools/list':
120
+ response = handleToolsList();
121
+ break;
122
+ case 'tools/call':
123
+ response = await handleToolsCall(params);
124
+ break;
125
+ default:
126
+ response = {
127
+ jsonrpc: '2.0',
128
+ error: {
129
+ code: MCP_ERRORS.METHOD_NOT_FOUND,
130
+ message: `Unknown method: ${method}`,
131
+ },
132
+ };
133
+ }
134
+ // Add request ID to response
135
+ if (id !== undefined) {
136
+ response.id = id;
137
+ }
138
+ return response;
139
+ }
140
+ /**
141
+ * Create Hono routes for HTTP transport
142
+ */
143
+ function routes() {
144
+ const app = new Hono();
145
+ // MCP protocol endpoint (JSON-RPC over HTTP)
146
+ app.post('/mcp', async (c) => {
147
+ try {
148
+ const request = await c.req.json();
149
+ if (request.jsonrpc !== '2.0') {
150
+ return c.json({
151
+ jsonrpc: '2.0',
152
+ error: {
153
+ code: MCP_ERRORS.INVALID_REQUEST,
154
+ message: 'Invalid JSON-RPC version',
155
+ },
156
+ }, 400);
157
+ }
158
+ const response = await handleRequest(request);
159
+ return c.json(response);
160
+ }
161
+ catch (error) {
162
+ const message = error instanceof Error ? error.message : 'Parse error';
163
+ return c.json({
164
+ jsonrpc: '2.0',
165
+ error: {
166
+ code: MCP_ERRORS.PARSE_ERROR,
167
+ message,
168
+ },
169
+ }, 400);
170
+ }
171
+ });
172
+ // Well-known MCP discovery endpoint
173
+ app.get('/.well-known/mcp', (c) => {
174
+ return c.json({
175
+ name: 'postgres-mcp',
176
+ version: '0.1.0',
177
+ protocol_version: '2024-11-05',
178
+ capabilities: {
179
+ tools: true,
180
+ },
181
+ endpoints: {
182
+ mcp: '/mcp',
183
+ sse: '/mcp/sse',
184
+ },
185
+ });
186
+ });
187
+ // SSE endpoint for streaming transport
188
+ app.get('/mcp/sse', async (c) => {
189
+ // SSE transport - to be implemented
190
+ return c.text('SSE transport not yet implemented', 501);
191
+ });
192
+ // Direct tool endpoints for convenience
193
+ app.post('/mcp/search', async (c) => {
194
+ try {
195
+ const input = await c.req.json();
196
+ const result = await handlers.search(input);
197
+ return c.json(result);
198
+ }
199
+ catch (error) {
200
+ const message = error instanceof Error ? error.message : 'Unknown error';
201
+ return c.json({ error: message }, 500);
202
+ }
203
+ });
204
+ app.post('/mcp/fetch', async (c) => {
205
+ try {
206
+ const input = await c.req.json();
207
+ const result = await handlers.fetch(input);
208
+ return c.json(result);
209
+ }
210
+ catch (error) {
211
+ const message = error instanceof Error ? error.message : 'Unknown error';
212
+ return c.json({ error: message }, 500);
213
+ }
214
+ });
215
+ app.post('/mcp/do', async (c) => {
216
+ try {
217
+ const input = await c.req.json();
218
+ const result = await handlers.do(input);
219
+ return c.json(result);
220
+ }
221
+ catch (error) {
222
+ const message = error instanceof Error ? error.message : 'Unknown error';
223
+ return c.json({ error: message }, 500);
224
+ }
225
+ });
226
+ // Tool definitions endpoint
227
+ app.get('/mcp/tools', (c) => {
228
+ return c.json({
229
+ tools: tools.map((tool) => ({
230
+ name: tool.name,
231
+ description: tool.description,
232
+ inputSchema: tool.inputSchema,
233
+ })),
234
+ });
235
+ });
236
+ // Health check
237
+ app.get('/mcp/health', (c) => {
238
+ return c.json({
239
+ status: 'healthy',
240
+ server: 'postgres-mcp',
241
+ version: '0.1.0',
242
+ timestamp: new Date().toISOString(),
243
+ });
244
+ });
245
+ return app;
246
+ }
247
+ return {
248
+ handleRequest,
249
+ routes,
250
+ };
251
+ }
252
+ /**
253
+ * Create MCP routes for integration with PostgresDO worker
254
+ */
255
+ export function createMCPRoutes(getExecutor, getConfig) {
256
+ const app = new Hono();
257
+ // Middleware to create MCP server per request
258
+ app.use('*', async (c, next) => {
259
+ const executor = getExecutor(c);
260
+ const config = getConfig?.(c) || { databaseId: 'default' };
261
+ const mcpServer = createMCPServer(executor, config);
262
+ // Store in context
263
+ c.set('mcpServer', mcpServer);
264
+ await next();
265
+ });
266
+ // Forward to MCP server routes
267
+ app.all('*', async (c) => {
268
+ const mcpServer = c.get('mcpServer');
269
+ const routes = mcpServer.routes();
270
+ return routes.fetch(c.req.raw);
271
+ });
272
+ return app;
273
+ }
274
+ /**
275
+ * Re-export types and tools
276
+ */
277
+ export { getToolDefinitions, createToolHandlers };
278
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * MCP Tools for PostgresDO
3
+ *
4
+ * Implements the three core MCP tools: search, fetch, and do.
5
+ */
6
+ import type { ToolResponse, SearchInput, FetchInput, DoInput, MCPAuthContext } from './types.js';
7
+ import type { QueryExecutor } from './binding.js';
8
+ /**
9
+ * Tool definition for MCP protocol
10
+ */
11
+ export interface Tool {
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: string;
16
+ properties: Record<string, unknown>;
17
+ required: string[];
18
+ };
19
+ }
20
+ /**
21
+ * Search tool definition
22
+ */
23
+ export declare const searchTool: Tool;
24
+ /**
25
+ * Fetch tool definition
26
+ */
27
+ export declare const fetchTool: Tool;
28
+ /**
29
+ * Do tool definition
30
+ */
31
+ export declare const doTool: Tool;
32
+ /**
33
+ * Create the search tool handler
34
+ */
35
+ export declare function createSearchHandler(executor: QueryExecutor): (input: SearchInput) => Promise<ToolResponse>;
36
+ /**
37
+ * Create the fetch tool handler
38
+ */
39
+ export declare function createFetchHandler(executor: QueryExecutor): (input: FetchInput) => Promise<ToolResponse>;
40
+ /**
41
+ * Create the do tool handler
42
+ */
43
+ export declare function createDoHandler(executor: QueryExecutor, options?: {
44
+ timeout?: number;
45
+ authContext?: MCPAuthContext;
46
+ }): (input: DoInput) => Promise<ToolResponse>;
47
+ /**
48
+ * Get all tool definitions
49
+ */
50
+ export declare function getToolDefinitions(): Tool[];
51
+ /**
52
+ * Create all tool handlers
53
+ */
54
+ export declare function createToolHandlers(executor: QueryExecutor, options?: {
55
+ timeout?: number;
56
+ authContext?: MCPAuthContext;
57
+ }): Record<string, (input: unknown) => Promise<ToolResponse>>;
58
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAGV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,cAAc,EACf,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnC,QAAQ,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;CACF;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,IAmBxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,IAevB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,IAgBpB,CAAA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,GACtB,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAqH/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,GACtB,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAiI9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,cAAc,CAAA;CAAO,GAC/D,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAgF3C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,EAAE,CAE3C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,cAAc,CAAA;CAAO,GAC/D,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAM3D"}