icode-mcp-adapter 1.0.9 → 1.0.10
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/package.json +37 -37
- package/src/engine/McpEngine.js +51 -51
- package/src/engine/SchemaAdapter.js +250 -250
- package/src/engine/ToolBuilder.js +393 -331
- package/src/transport/fastifyAdapter.js +202 -199
package/package.json
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "icode-mcp-adapter",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Dynamic MCP server adapter — auto-generates CRUD tools from schema configs. Plugs into icode-server via Fastify or runs standalone.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "src/engine/McpEngine.js",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": "./src/engine/McpEngine.js",
|
|
9
|
-
"./engine": "./src/engine/McpEngine.js",
|
|
10
|
-
"./tools": "./src/engine/ToolBuilder.js",
|
|
11
|
-
"./schema": "./src/engine/SchemaAdapter.js",
|
|
12
|
-
"./fastify": "./src/transport/fastifyAdapter.js",
|
|
13
|
-
"./types": "./src/engine/types.js"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"test": "node tests/smoke.js",
|
|
17
|
-
"sandbox": "node tests/sandbox.js",
|
|
18
|
-
"sandbox:dev": "node --watch tests/sandbox.js",
|
|
19
|
-
"inspector": "npx @modelcontextprotocol/inspector node tests/sandbox.js"
|
|
20
|
-
},
|
|
21
|
-
"dependencies": {
|
|
22
|
-
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
23
|
-
"zod": "^3.25.0"
|
|
24
|
-
},
|
|
25
|
-
"peerDependencies": {
|
|
26
|
-
"mysql2": "^3.0.0"
|
|
27
|
-
},
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"mysql2": "^3.14.1",
|
|
30
|
-
"express": "^5.1.0",
|
|
31
|
-
"dotenv": "^16.5.0"
|
|
32
|
-
},
|
|
33
|
-
"files": [
|
|
34
|
-
"src/engine/",
|
|
35
|
-
"src/transport/fastifyAdapter.js"
|
|
36
|
-
]
|
|
37
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "icode-mcp-adapter",
|
|
3
|
+
"version": "1.0.10",
|
|
4
|
+
"description": "Dynamic MCP server adapter — auto-generates CRUD tools from schema configs. Plugs into icode-server via Fastify or runs standalone.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "src/engine/McpEngine.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./src/engine/McpEngine.js",
|
|
9
|
+
"./engine": "./src/engine/McpEngine.js",
|
|
10
|
+
"./tools": "./src/engine/ToolBuilder.js",
|
|
11
|
+
"./schema": "./src/engine/SchemaAdapter.js",
|
|
12
|
+
"./fastify": "./src/transport/fastifyAdapter.js",
|
|
13
|
+
"./types": "./src/engine/types.js"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "node tests/smoke.js",
|
|
17
|
+
"sandbox": "node tests/sandbox.js",
|
|
18
|
+
"sandbox:dev": "node --watch tests/sandbox.js",
|
|
19
|
+
"inspector": "npx @modelcontextprotocol/inspector node tests/sandbox.js"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
23
|
+
"zod": "^3.25.0"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"mysql2": "^3.0.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"mysql2": "^3.14.1",
|
|
30
|
+
"express": "^5.1.0",
|
|
31
|
+
"dotenv": "^16.5.0"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"src/engine/",
|
|
35
|
+
"src/transport/fastifyAdapter.js"
|
|
36
|
+
]
|
|
37
|
+
}
|
package/src/engine/McpEngine.js
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { registerTableTools } from './ToolBuilder.js';
|
|
3
|
-
import { resolveSchemas as defaultResolveSchemas } from './SchemaAdapter.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Create an MCP server from a FULL app config (tables already defined).
|
|
7
|
-
*
|
|
8
|
-
* @param {import('./types.js').AppConfig} config - with tables[] fully specified
|
|
9
|
-
* @param {{ query: Function }} db
|
|
10
|
-
* @param {{ userId: string }} [identity] - Caller identity; required when a table is owner-scoped
|
|
11
|
-
* @returns {McpServer}
|
|
12
|
-
*/
|
|
13
|
-
export function createMcpServer(config, db, identity, newGuid) {
|
|
14
|
-
const server = new McpServer({
|
|
15
|
-
name: `${config.appName}-mcp`,
|
|
16
|
-
version: config.version,
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
for (const table of config.tables) {
|
|
20
|
-
registerTableTools(server, db, table, identity, newGuid);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return server;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Create an MCP server from a LIGHTWEIGHT config (auto-resolve columns).
|
|
28
|
-
*
|
|
29
|
-
* @param {Object} config - app config with tables
|
|
30
|
-
* @param {{ query: Function }} db - Pool or SQLService
|
|
31
|
-
* @param {{ resolveSchemas?: Function, identity?: { userId: string } }} [opts]
|
|
32
|
-
* resolveSchemas: (db, tableConfigs, opts) => Promise<TableSchema[]>
|
|
33
|
-
* Defaults to INFORMATION_SCHEMA-based resolver.
|
|
34
|
-
* Inject your own to use icode-server's SchemasService or any other source.
|
|
35
|
-
* identity: caller identity used to scope owner-scoped tables.
|
|
36
|
-
* @returns {Promise<McpServer>}
|
|
37
|
-
*/
|
|
38
|
-
export async function createMcpServerAuto(config, db, opts = {}) {
|
|
39
|
-
const resolveSchemas = opts.resolveSchemas || defaultResolveSchemas;
|
|
40
|
-
|
|
41
|
-
const tables = await resolveSchemas(db, config.tables, {
|
|
42
|
-
cacheKey: `${config.appName}--${config.env || 'prod'}`,
|
|
43
|
-
ownerColumn: config.ownerColumn,
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
return createMcpServer({
|
|
47
|
-
appName: config.appName,
|
|
48
|
-
version: config.version || '1.0.0',
|
|
49
|
-
tables,
|
|
50
|
-
}, db, opts.identity, opts.newGuid);
|
|
51
|
-
}
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { registerTableTools } from './ToolBuilder.js';
|
|
3
|
+
import { resolveSchemas as defaultResolveSchemas } from './SchemaAdapter.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create an MCP server from a FULL app config (tables already defined).
|
|
7
|
+
*
|
|
8
|
+
* @param {import('./types.js').AppConfig} config - with tables[] fully specified
|
|
9
|
+
* @param {{ query: Function }} db
|
|
10
|
+
* @param {{ userId: string }} [identity] - Caller identity; required when a table is owner-scoped
|
|
11
|
+
* @returns {McpServer}
|
|
12
|
+
*/
|
|
13
|
+
export function createMcpServer(config, db, identity, newGuid, writer) {
|
|
14
|
+
const server = new McpServer({
|
|
15
|
+
name: `${config.appName}-mcp`,
|
|
16
|
+
version: config.version,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
for (const table of config.tables) {
|
|
20
|
+
registerTableTools(server, db, table, identity, newGuid, writer);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return server;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Create an MCP server from a LIGHTWEIGHT config (auto-resolve columns).
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} config - app config with tables
|
|
30
|
+
* @param {{ query: Function }} db - Pool or SQLService
|
|
31
|
+
* @param {{ resolveSchemas?: Function, identity?: { userId: string } }} [opts]
|
|
32
|
+
* resolveSchemas: (db, tableConfigs, opts) => Promise<TableSchema[]>
|
|
33
|
+
* Defaults to INFORMATION_SCHEMA-based resolver.
|
|
34
|
+
* Inject your own to use icode-server's SchemasService or any other source.
|
|
35
|
+
* identity: caller identity used to scope owner-scoped tables.
|
|
36
|
+
* @returns {Promise<McpServer>}
|
|
37
|
+
*/
|
|
38
|
+
export async function createMcpServerAuto(config, db, opts = {}) {
|
|
39
|
+
const resolveSchemas = opts.resolveSchemas || defaultResolveSchemas;
|
|
40
|
+
|
|
41
|
+
const tables = await resolveSchemas(db, config.tables, {
|
|
42
|
+
cacheKey: `${config.appName}--${config.env || 'prod'}`,
|
|
43
|
+
ownerColumn: config.ownerColumn,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
return createMcpServer({
|
|
47
|
+
appName: config.appName,
|
|
48
|
+
version: config.version || '1.0.0',
|
|
49
|
+
tables,
|
|
50
|
+
}, db, opts.identity, opts.newGuid, opts.writer);
|
|
51
|
+
}
|