@risingwave/wavelet-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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +161 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
package/dist/index.d.ts
ADDED
|
@@ -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,161 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
8
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const pg_1 = __importDefault(require("pg"));
|
|
11
|
+
const { Client } = pg_1.default;
|
|
12
|
+
const DATABASE_URL = process.env.WAVELET_DATABASE_URL ?? 'postgres://root@localhost:4566/dev';
|
|
13
|
+
async function main() {
|
|
14
|
+
const server = new mcp_js_1.McpServer({
|
|
15
|
+
name: 'wavelet',
|
|
16
|
+
version: '0.1.0',
|
|
17
|
+
});
|
|
18
|
+
const db = new Client({ connectionString: DATABASE_URL });
|
|
19
|
+
await db.connect();
|
|
20
|
+
// Discover available views and streams
|
|
21
|
+
const views = await discoverViews(db);
|
|
22
|
+
const streams = await discoverStreams(db);
|
|
23
|
+
// Tool: list_views - List all available Wavelet views
|
|
24
|
+
server.tool('list_views', 'List all materialized views available in Wavelet. Returns view names and their column schemas.', {}, async () => {
|
|
25
|
+
const result = {};
|
|
26
|
+
for (const viewName of views) {
|
|
27
|
+
const cols = await db.query(`SELECT column_name, data_type FROM information_schema.columns WHERE table_name = $1 ORDER BY ordinal_position`, [viewName]);
|
|
28
|
+
result[viewName] = {
|
|
29
|
+
columns: cols.rows.map((r) => ({ name: r.column_name, type: r.data_type })),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
// Tool: query_view - Query a materialized view
|
|
37
|
+
server.tool('query_view', 'Query a Wavelet materialized view. Returns the current pre-computed results. The data is always fresh - views are incrementally maintained by RisingWave.', {
|
|
38
|
+
view: zod_1.z.string().describe(`View name. Available: ${views.join(', ')}`),
|
|
39
|
+
filter: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional().describe('Optional key-value filters applied as WHERE clauses'),
|
|
40
|
+
limit: zod_1.z.number().optional().describe('Maximum number of rows to return (default: 100)'),
|
|
41
|
+
}, async ({ view, filter, limit }) => {
|
|
42
|
+
if (!views.includes(view)) {
|
|
43
|
+
return {
|
|
44
|
+
content: [{ type: 'text', text: `View '${view}' not found. Available views: ${views.join(', ')}` }],
|
|
45
|
+
isError: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
let sql = `SELECT * FROM ${view}`;
|
|
49
|
+
const values = [];
|
|
50
|
+
if (filter && Object.keys(filter).length > 0) {
|
|
51
|
+
const conditions = Object.entries(filter).map(([key, val], i) => {
|
|
52
|
+
values.push(val);
|
|
53
|
+
return `${key} = $${i + 1}`;
|
|
54
|
+
});
|
|
55
|
+
sql += ` WHERE ${conditions.join(' AND ')}`;
|
|
56
|
+
}
|
|
57
|
+
sql += ` LIMIT ${limit ?? 100}`;
|
|
58
|
+
const result = await db.query(sql, values);
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: 'text', text: JSON.stringify({ view, rows: result.rows, count: result.rows.length }, null, 2) }],
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
// Tool: list_streams - List available event streams
|
|
64
|
+
server.tool('list_streams', 'List all event streams available in Wavelet. Streams are tables that accept event writes.', {}, async () => {
|
|
65
|
+
const result = {};
|
|
66
|
+
for (const streamName of streams) {
|
|
67
|
+
const cols = await db.query(`SELECT column_name, data_type FROM information_schema.columns WHERE table_name = $1 ORDER BY ordinal_position`, [streamName]);
|
|
68
|
+
result[streamName] = {
|
|
69
|
+
columns: cols.rows.map((r) => ({ name: r.column_name, type: r.data_type })),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
// Tool: emit_event - Write an event to a stream
|
|
77
|
+
server.tool('emit_event', 'Write an event to a Wavelet stream. The event will be processed by RisingWave and any materialized views that depend on this stream will be updated automatically.', {
|
|
78
|
+
stream: zod_1.z.string().describe(`Stream name. Available: ${streams.join(', ')}`),
|
|
79
|
+
data: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).describe('Event data as key-value pairs matching the stream columns'),
|
|
80
|
+
}, async ({ stream, data }) => {
|
|
81
|
+
if (!streams.includes(stream)) {
|
|
82
|
+
return {
|
|
83
|
+
content: [{ type: 'text', text: `Stream '${stream}' not found. Available streams: ${streams.join(', ')}` }],
|
|
84
|
+
isError: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const cols = await db.query(`SELECT column_name FROM information_schema.columns WHERE table_name = $1 ORDER BY ordinal_position`, [stream]);
|
|
88
|
+
const columnNames = cols.rows.map((r) => r.column_name);
|
|
89
|
+
const values = columnNames.map((col) => data[col]);
|
|
90
|
+
const placeholders = columnNames.map((_, i) => `$${i + 1}`);
|
|
91
|
+
await db.query(`INSERT INTO ${stream} (${columnNames.join(', ')}) VALUES (${placeholders.join(', ')})`, values);
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: 'text', text: JSON.stringify({ ok: true, stream, columns: columnNames }) }],
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
// Tool: emit_batch - Write multiple events to a stream
|
|
97
|
+
server.tool('emit_batch', 'Write multiple events to a Wavelet stream in one call. More efficient than calling emit_event repeatedly.', {
|
|
98
|
+
stream: zod_1.z.string().describe(`Stream name. Available: ${streams.join(', ')}`),
|
|
99
|
+
events: zod_1.z.array(zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())).describe('Array of event data objects'),
|
|
100
|
+
}, async ({ stream, events }) => {
|
|
101
|
+
if (!streams.includes(stream)) {
|
|
102
|
+
return {
|
|
103
|
+
content: [{ type: 'text', text: `Stream '${stream}' not found. Available streams: ${streams.join(', ')}` }],
|
|
104
|
+
isError: true,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const cols = await db.query(`SELECT column_name FROM information_schema.columns WHERE table_name = $1 ORDER BY ordinal_position`, [stream]);
|
|
108
|
+
const columnNames = cols.rows.map((r) => r.column_name);
|
|
109
|
+
let count = 0;
|
|
110
|
+
for (const data of events) {
|
|
111
|
+
const values = columnNames.map((col) => data[col]);
|
|
112
|
+
const placeholders = columnNames.map((_, i) => `$${i + 1}`);
|
|
113
|
+
await db.query(`INSERT INTO ${stream} (${columnNames.join(', ')}) VALUES (${placeholders.join(', ')})`, values);
|
|
114
|
+
count++;
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: 'text', text: JSON.stringify({ ok: true, stream, count }) }],
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
// Tool: run_sql - Execute a read-only SQL query (for advanced use)
|
|
121
|
+
server.tool('run_sql', 'Execute a read-only SQL query against the Wavelet database. Use this for ad-hoc queries that go beyond what query_view provides. Only SELECT statements are allowed.', {
|
|
122
|
+
sql: zod_1.z.string().describe('SQL SELECT query to execute'),
|
|
123
|
+
}, async ({ sql }) => {
|
|
124
|
+
if (!sql.trim().toLowerCase().startsWith('select')) {
|
|
125
|
+
return {
|
|
126
|
+
content: [{ type: 'text', text: 'Only SELECT queries are allowed. Use emit_event to write data.' }],
|
|
127
|
+
isError: true,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const result = await db.query(sql);
|
|
131
|
+
return {
|
|
132
|
+
content: [{ type: 'text', text: JSON.stringify({ rows: result.rows, count: result.rows.length }, null, 2) }],
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
// Start the MCP server on stdio
|
|
136
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
137
|
+
await server.connect(transport);
|
|
138
|
+
}
|
|
139
|
+
async function discoverViews(db) {
|
|
140
|
+
try {
|
|
141
|
+
const result = await db.query(`SELECT name FROM rw_catalog.rw_materialized_views WHERE schema_id = (SELECT id FROM rw_catalog.rw_schemas WHERE name = 'public')`);
|
|
142
|
+
return result.rows.map((r) => r.name);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function discoverStreams(db) {
|
|
149
|
+
try {
|
|
150
|
+
const result = await db.query(`SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'`);
|
|
151
|
+
return result.rows.map((r) => r.table_name);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
main().catch((err) => {
|
|
158
|
+
console.error('Fatal:', err);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@risingwave/wavelet-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Wavelet MCP server - expose views and streams as AI agent tools",
|
|
5
|
+
"homepage": "https://github.com/risingwavelabs/wavelet",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/risingwavelabs/wavelet.git",
|
|
9
|
+
"directory": "packages/mcp"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"bin": {
|
|
14
|
+
"wavelet-mcp": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"files": ["dist"],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"dev": "tsx src/index.ts"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
23
|
+
"@risingwave/wavelet": "0.1.0",
|
|
24
|
+
"pg": "^8.13.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"tsx": "^4.0.0",
|
|
28
|
+
"typescript": "^5.7.0",
|
|
29
|
+
"@types/pg": "^8.11.0"
|
|
30
|
+
},
|
|
31
|
+
"license": "Apache-2.0"
|
|
32
|
+
}
|