@iyulab/mloop-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/README.md +178 -0
- package/build/executor.d.ts +36 -0
- package/build/executor.d.ts.map +1 -0
- package/build/executor.js +106 -0
- package/build/executor.js.map +1 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +27 -0
- package/build/index.js.map +1 -0
- package/build/server.d.ts +9 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +34 -0
- package/build/server.js.map +1 -0
- package/build/tools/compare.d.ts +53 -0
- package/build/tools/compare.d.ts.map +1 -0
- package/build/tools/compare.js +66 -0
- package/build/tools/compare.js.map +1 -0
- package/build/tools/evaluate.d.ts +56 -0
- package/build/tools/evaluate.d.ts.map +1 -0
- package/build/tools/evaluate.js +85 -0
- package/build/tools/evaluate.js.map +1 -0
- package/build/tools/index.d.ts +44 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +27 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/info.d.ts +42 -0
- package/build/tools/info.d.ts.map +1 -0
- package/build/tools/info.js +56 -0
- package/build/tools/info.js.map +1 -0
- package/build/tools/list.d.ts +49 -0
- package/build/tools/list.d.ts.map +1 -0
- package/build/tools/list.js +66 -0
- package/build/tools/list.js.map +1 -0
- package/build/tools/predict.d.ts +63 -0
- package/build/tools/predict.d.ts.map +1 -0
- package/build/tools/predict.js +82 -0
- package/build/tools/predict.js.map +1 -0
- package/build/tools/promote.d.ts +56 -0
- package/build/tools/promote.d.ts.map +1 -0
- package/build/tools/promote.js +72 -0
- package/build/tools/promote.js.map +1 -0
- package/build/tools/serve.d.ts +49 -0
- package/build/tools/serve.d.ts.map +1 -0
- package/build/tools/serve.js +79 -0
- package/build/tools/serve.js.map +1 -0
- package/build/tools/status.d.ts +35 -0
- package/build/tools/status.d.ts.map +1 -0
- package/build/tools/status.js +51 -0
- package/build/tools/status.js.map +1 -0
- package/build/tools/train.d.ts +78 -0
- package/build/tools/train.d.ts.map +1 -0
- package/build/tools/train.js +101 -0
- package/build/tools/train.js.map +1 -0
- package/build/utils/errors.d.ts +28 -0
- package/build/utils/errors.d.ts.map +1 -0
- package/build/utils/errors.js +59 -0
- package/build/utils/errors.js.map +1 -0
- package/build/utils/parser.d.ts +23 -0
- package/build/utils/parser.d.ts.map +1 -0
- package/build/utils/parser.js +98 -0
- package/build/utils/parser.js.map +1 -0
- package/package.json +49 -0
package/README.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# mloop-mcp
|
|
2
|
+
|
|
3
|
+
MCP (Model Context Protocol) server for [MLoop](https://github.com/iyulab/MLoop) CLI.
|
|
4
|
+
|
|
5
|
+
Enables AI clients (Claude, Cursor, ironhive-cli) to perform MLOps tasks using MLoop's AutoML capabilities.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @iyulab/mloop-mcp
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or run directly with npx:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx @iyulab/mloop-mcp
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
- Node.js 18+
|
|
22
|
+
- MLoop CLI installed and available in PATH
|
|
23
|
+
```bash
|
|
24
|
+
dotnet tool install -g mloop
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Custom MLoop Path
|
|
28
|
+
|
|
29
|
+
If MLoop is not in PATH, set the `MLOOP_PATH` environment variable:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Windows
|
|
33
|
+
set MLOOP_PATH=D:\lib\mloop.exe
|
|
34
|
+
|
|
35
|
+
# Linux/macOS
|
|
36
|
+
export MLOOP_PATH=/usr/local/bin/mloop
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Configuration
|
|
40
|
+
|
|
41
|
+
### For Claude Desktop
|
|
42
|
+
|
|
43
|
+
Add to your `claude_desktop_config.json`:
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"mloop": {
|
|
49
|
+
"command": "npx",
|
|
50
|
+
"args": ["@iyulab/mloop-mcp"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### For ironhive-cli
|
|
57
|
+
|
|
58
|
+
Add to `.ironhive/plugins.yaml`:
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
plugins:
|
|
62
|
+
mloop:
|
|
63
|
+
transport: stdio
|
|
64
|
+
command: npx
|
|
65
|
+
args:
|
|
66
|
+
- "@iyulab/mloop-mcp"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Available Tools
|
|
70
|
+
|
|
71
|
+
| Tool | Description |
|
|
72
|
+
|------|-------------|
|
|
73
|
+
| `mloop_train` | Train ML models using AutoML |
|
|
74
|
+
| `mloop_predict` | Run predictions with trained models |
|
|
75
|
+
| `mloop_list` | List experiments and their metrics |
|
|
76
|
+
| `mloop_promote` | Promote an experiment to production |
|
|
77
|
+
| `mloop_info` | Analyze and profile datasets |
|
|
78
|
+
| `mloop_status` | Show project status |
|
|
79
|
+
| `mloop_compare` | Compare multiple experiments |
|
|
80
|
+
| `mloop_evaluate` | Evaluate model performance |
|
|
81
|
+
| `mloop_serve` | Start REST API server |
|
|
82
|
+
|
|
83
|
+
## Tool Examples
|
|
84
|
+
|
|
85
|
+
### Train a model
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"tool": "mloop_train",
|
|
90
|
+
"arguments": {
|
|
91
|
+
"projectPath": "/path/to/project",
|
|
92
|
+
"dataFile": "datasets/train.csv",
|
|
93
|
+
"label": "target",
|
|
94
|
+
"task": "binary-classification",
|
|
95
|
+
"time": 60
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Run predictions
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"tool": "mloop_predict",
|
|
105
|
+
"arguments": {
|
|
106
|
+
"projectPath": "/path/to/project",
|
|
107
|
+
"dataFile": "datasets/test.csv",
|
|
108
|
+
"output": "predictions/output.csv"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### List experiments
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"tool": "mloop_list",
|
|
118
|
+
"arguments": {
|
|
119
|
+
"projectPath": "/path/to/project",
|
|
120
|
+
"showAll": true
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Promote to production
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"tool": "mloop_promote",
|
|
130
|
+
"arguments": {
|
|
131
|
+
"projectPath": "/path/to/project",
|
|
132
|
+
"experimentId": "exp-003",
|
|
133
|
+
"force": true
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Analyze dataset
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"tool": "mloop_info",
|
|
143
|
+
"arguments": {
|
|
144
|
+
"dataFile": "datasets/train.csv",
|
|
145
|
+
"projectPath": "/path/to/project"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Development
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Install dependencies
|
|
154
|
+
npm install
|
|
155
|
+
|
|
156
|
+
# Build
|
|
157
|
+
npm run build
|
|
158
|
+
|
|
159
|
+
# Run locally
|
|
160
|
+
npm start
|
|
161
|
+
|
|
162
|
+
# Test with MCP Inspector
|
|
163
|
+
npx @modelcontextprotocol/inspector node build/index.js
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Architecture
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
ironhive-cli ──[MCP/STDIO]──> mloop-mcp ──[subprocess]──> mloop CLI ──> ML.NET
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
- **Pure Bridge Pattern**: 1:1 CLI mapping, no business logic, stateless
|
|
173
|
+
- **STDIO Transport**: Simple process communication
|
|
174
|
+
- **Subprocess Execution**: Each tool call spawns `mloop` CLI
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI subprocess executor for mloop commands
|
|
3
|
+
*/
|
|
4
|
+
export interface ExecuteOptions {
|
|
5
|
+
/** Working directory for command execution */
|
|
6
|
+
cwd?: string;
|
|
7
|
+
/** Timeout in milliseconds (default: 300000 = 5 minutes) */
|
|
8
|
+
timeout?: number;
|
|
9
|
+
/** Environment variables to pass */
|
|
10
|
+
env?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface ExecuteResult {
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr: string;
|
|
15
|
+
exitCode: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Execute mloop CLI command
|
|
19
|
+
*
|
|
20
|
+
* @param args - Arguments to pass to mloop command
|
|
21
|
+
* @param options - Execution options
|
|
22
|
+
* @returns Promise resolving to execution result
|
|
23
|
+
* @throws CliExecutionError if command fails
|
|
24
|
+
* @throws TimeoutError if command times out
|
|
25
|
+
*/
|
|
26
|
+
export declare function executeMloop(args: string[], options?: ExecuteOptions): Promise<ExecuteResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Build CLI arguments from a parameter object
|
|
29
|
+
* Handles common patterns like --flag, --key=value
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildArgs(command: string, params: Record<string, unknown>): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Build CLI arguments for positional + named parameters
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildArgsWithPositional(command: string, positional: string[], params: Record<string, unknown>): string[];
|
|
36
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAYD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,EAAE,CAmBV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,EAAE,CAkBV"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI subprocess executor for mloop commands
|
|
3
|
+
*/
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
import { CliExecutionError, TimeoutError } from './utils/errors.js';
|
|
6
|
+
const DEFAULT_TIMEOUT = 300_000; // 5 minutes
|
|
7
|
+
/**
|
|
8
|
+
* Get the mloop executable path.
|
|
9
|
+
* Uses MLOOP_PATH environment variable if set, otherwise defaults to 'mloop'.
|
|
10
|
+
*/
|
|
11
|
+
function getMloopPath() {
|
|
12
|
+
return process.env['MLOOP_PATH'] || 'mloop';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute mloop CLI command
|
|
16
|
+
*
|
|
17
|
+
* @param args - Arguments to pass to mloop command
|
|
18
|
+
* @param options - Execution options
|
|
19
|
+
* @returns Promise resolving to execution result
|
|
20
|
+
* @throws CliExecutionError if command fails
|
|
21
|
+
* @throws TimeoutError if command times out
|
|
22
|
+
*/
|
|
23
|
+
export async function executeMloop(args, options = {}) {
|
|
24
|
+
const { cwd, timeout = DEFAULT_TIMEOUT, env } = options;
|
|
25
|
+
const mloopPath = getMloopPath();
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const proc = spawn(mloopPath, args, {
|
|
28
|
+
cwd,
|
|
29
|
+
env: { ...process.env, ...env },
|
|
30
|
+
shell: true, // Required for Windows
|
|
31
|
+
windowsHide: true,
|
|
32
|
+
});
|
|
33
|
+
let stdout = '';
|
|
34
|
+
let stderr = '';
|
|
35
|
+
let killed = false;
|
|
36
|
+
const timeoutId = setTimeout(() => {
|
|
37
|
+
killed = true;
|
|
38
|
+
proc.kill('SIGTERM');
|
|
39
|
+
reject(new TimeoutError(`Command timed out after ${timeout}ms`, timeout));
|
|
40
|
+
}, timeout);
|
|
41
|
+
proc.stdout?.on('data', (data) => {
|
|
42
|
+
stdout += data.toString();
|
|
43
|
+
});
|
|
44
|
+
proc.stderr?.on('data', (data) => {
|
|
45
|
+
stderr += data.toString();
|
|
46
|
+
});
|
|
47
|
+
proc.on('error', (error) => {
|
|
48
|
+
clearTimeout(timeoutId);
|
|
49
|
+
reject(new CliExecutionError(`Failed to execute mloop: ${error.message}`, -1, stdout, stderr));
|
|
50
|
+
});
|
|
51
|
+
proc.on('close', (code) => {
|
|
52
|
+
clearTimeout(timeoutId);
|
|
53
|
+
if (killed)
|
|
54
|
+
return; // Already handled by timeout
|
|
55
|
+
const exitCode = code ?? 0;
|
|
56
|
+
const result = { stdout, stderr, exitCode };
|
|
57
|
+
if (exitCode !== 0) {
|
|
58
|
+
reject(new CliExecutionError(`mloop exited with code ${exitCode}`, exitCode, stdout, stderr));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
resolve(result);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Build CLI arguments from a parameter object
|
|
68
|
+
* Handles common patterns like --flag, --key=value
|
|
69
|
+
*/
|
|
70
|
+
export function buildArgs(command, params) {
|
|
71
|
+
const args = [command];
|
|
72
|
+
for (const [key, value] of Object.entries(params)) {
|
|
73
|
+
if (value === undefined || value === null || value === false) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Convert camelCase to kebab-case for CLI flags
|
|
77
|
+
const flag = `--${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
|
|
78
|
+
if (value === true) {
|
|
79
|
+
args.push(flag);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
args.push(flag, String(value));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return args;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build CLI arguments for positional + named parameters
|
|
89
|
+
*/
|
|
90
|
+
export function buildArgsWithPositional(command, positional, params) {
|
|
91
|
+
const args = [command, ...positional];
|
|
92
|
+
for (const [key, value] of Object.entries(params)) {
|
|
93
|
+
if (value === undefined || value === null || value === false) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const flag = `--${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
|
|
97
|
+
if (value === true) {
|
|
98
|
+
args.push(flag);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
args.push(flag, String(value));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return args;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* mloop-mcp - MCP server for MLoop CLI
|
|
4
|
+
*
|
|
5
|
+
* Exposes MLoop ML.NET MLOps capabilities via Model Context Protocol
|
|
6
|
+
*/
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { createServer } from './server.js';
|
|
9
|
+
async function main() {
|
|
10
|
+
const server = createServer();
|
|
11
|
+
const transport = new StdioServerTransport();
|
|
12
|
+
await server.connect(transport);
|
|
13
|
+
// Handle graceful shutdown
|
|
14
|
+
process.on('SIGINT', async () => {
|
|
15
|
+
await server.close();
|
|
16
|
+
process.exit(0);
|
|
17
|
+
});
|
|
18
|
+
process.on('SIGTERM', async () => {
|
|
19
|
+
await server.close();
|
|
20
|
+
process.exit(0);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
main().catch((error) => {
|
|
24
|
+
console.error('Fatal error:', error);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+BpE;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA+ExC"}
|
package/build/server.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server for MLoop CLI
|
|
3
|
+
*/
|
|
4
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
+
import { trainTool, train, trainSchema, predictTool, predict, predictSchema, listTool, list, listSchema, promoteTool, promote, promoteSchema, infoTool, info, infoSchema, statusTool, status, statusSchema, compareTool, compare, compareSchema, evaluateTool, evaluate, evaluateSchema, serveTool, serve, serveSchema, } from './tools/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create and configure the MCP server
|
|
8
|
+
*/
|
|
9
|
+
export function createServer() {
|
|
10
|
+
const server = new McpServer({
|
|
11
|
+
name: 'mloop-mcp',
|
|
12
|
+
version: '0.1.0',
|
|
13
|
+
});
|
|
14
|
+
// Register mloop_train
|
|
15
|
+
server.tool(trainTool.name, trainTool.description, trainSchema.shape, async (params) => train(params));
|
|
16
|
+
// Register mloop_predict
|
|
17
|
+
server.tool(predictTool.name, predictTool.description, predictSchema.shape, async (params) => predict(params));
|
|
18
|
+
// Register mloop_list
|
|
19
|
+
server.tool(listTool.name, listTool.description, listSchema.shape, async (params) => list(params));
|
|
20
|
+
// Register mloop_promote
|
|
21
|
+
server.tool(promoteTool.name, promoteTool.description, promoteSchema.shape, async (params) => promote(params));
|
|
22
|
+
// Register mloop_info
|
|
23
|
+
server.tool(infoTool.name, infoTool.description, infoSchema.shape, async (params) => info(params));
|
|
24
|
+
// Register mloop_status
|
|
25
|
+
server.tool(statusTool.name, statusTool.description, statusSchema.shape, async (params) => status(params));
|
|
26
|
+
// Register mloop_compare
|
|
27
|
+
server.tool(compareTool.name, compareTool.description, compareSchema.shape, async (params) => compare(params));
|
|
28
|
+
// Register mloop_evaluate
|
|
29
|
+
server.tool(evaluateTool.name, evaluateTool.description, evaluateSchema.shape, async (params) => evaluate(params));
|
|
30
|
+
// Register mloop_serve
|
|
31
|
+
server.tool(serveTool.name, serveTool.description, serveSchema.shape, async (params) => serve(params));
|
|
32
|
+
return server;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACL,SAAS,EACT,KAAK,EACL,WAAW,EACX,WAAW,EACX,OAAO,EACP,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,WAAW,EACX,OAAO,EACP,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,UAAU,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,OAAO,EACP,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACT,KAAK,EACL,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,KAAK,EACjB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAqC,CAAC,CAC/D,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,WAAW,EACpB,UAAU,CAAC,KAAK,EAChB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAoC,CAAC,CAC7D,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,WAAW,EACtB,YAAY,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAsC,CAAC,CACjE,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,IAAI,CACT,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,WAAW,EACvB,aAAa,CAAC,KAAK,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAuC,CAAC,CACnE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,cAAc,CAAC,KAAK,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAwC,CAAC,CACrE,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,WAAW,EACrB,WAAW,CAAC,KAAK,EACjB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAqC,CAAC,CAC/D,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_compare tool - Compare experiments
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare const compareSchema: z.ZodObject<{
|
|
6
|
+
projectPath: z.ZodString;
|
|
7
|
+
experiments: z.ZodArray<z.ZodString, "many">;
|
|
8
|
+
modelName: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
projectPath: string;
|
|
11
|
+
experiments: string[];
|
|
12
|
+
modelName?: string | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
projectPath: string;
|
|
15
|
+
experiments: string[];
|
|
16
|
+
modelName?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type CompareParams = z.infer<typeof compareSchema>;
|
|
19
|
+
export declare function compare(params: CompareParams): Promise<{
|
|
20
|
+
content: Array<{
|
|
21
|
+
type: 'text';
|
|
22
|
+
text: string;
|
|
23
|
+
}>;
|
|
24
|
+
isError?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const compareTool: {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: string;
|
|
31
|
+
properties: {
|
|
32
|
+
projectPath: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
experiments: {
|
|
37
|
+
type: string;
|
|
38
|
+
items: {
|
|
39
|
+
type: string;
|
|
40
|
+
};
|
|
41
|
+
minItems: number;
|
|
42
|
+
description: string;
|
|
43
|
+
};
|
|
44
|
+
modelName: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
required: string[];
|
|
50
|
+
};
|
|
51
|
+
handler: typeof compare;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=compare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;EAIxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wBAAsB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA8BnI;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_compare tool - Compare experiments
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { executeMloop } from '../executor.js';
|
|
6
|
+
import { parseCliOutput } from '../utils/parser.js';
|
|
7
|
+
import { formatError } from '../utils/errors.js';
|
|
8
|
+
export const compareSchema = z.object({
|
|
9
|
+
projectPath: z.string().describe('Path to MLoop project directory'),
|
|
10
|
+
experiments: z.array(z.string()).min(2).describe('Experiment IDs to compare (at least 2)'),
|
|
11
|
+
modelName: z.string().optional().describe('Model name'),
|
|
12
|
+
});
|
|
13
|
+
export async function compare(params) {
|
|
14
|
+
try {
|
|
15
|
+
const { projectPath, experiments, modelName } = params;
|
|
16
|
+
const args = ['compare', ...experiments];
|
|
17
|
+
if (modelName) {
|
|
18
|
+
args.push('--name', modelName);
|
|
19
|
+
}
|
|
20
|
+
const result = await executeMloop(args, {
|
|
21
|
+
cwd: projectPath,
|
|
22
|
+
});
|
|
23
|
+
const output = parseCliOutput(result.stdout);
|
|
24
|
+
return {
|
|
25
|
+
content: [{
|
|
26
|
+
type: 'text',
|
|
27
|
+
text: output || 'No comparison data available.',
|
|
28
|
+
}],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return {
|
|
33
|
+
content: [{
|
|
34
|
+
type: 'text',
|
|
35
|
+
text: formatError(error),
|
|
36
|
+
}],
|
|
37
|
+
isError: true,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export const compareTool = {
|
|
42
|
+
name: 'mloop_compare',
|
|
43
|
+
description: 'Compare metrics across multiple experiments to identify the best performing model.',
|
|
44
|
+
inputSchema: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
projectPath: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
description: 'Path to MLoop project directory',
|
|
50
|
+
},
|
|
51
|
+
experiments: {
|
|
52
|
+
type: 'array',
|
|
53
|
+
items: { type: 'string' },
|
|
54
|
+
minItems: 2,
|
|
55
|
+
description: 'List of experiment IDs to compare (e.g., ["exp-001", "exp-002"])',
|
|
56
|
+
},
|
|
57
|
+
modelName: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
description: 'Model name for namespacing',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ['projectPath', 'experiments'],
|
|
63
|
+
},
|
|
64
|
+
handler: compare,
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC1F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;CACxD,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAqB;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEvD,MAAM,IAAI,GAAa,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;YACtC,GAAG,EAAE,WAAW;SACjB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,IAAI,+BAA+B;iBAChD,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;iBACzB,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oFAAoF;IACjG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aAC/C;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,kEAAkE;aAChF;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;KACzC;IACD,OAAO,EAAE,OAAO;CACjB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mloop_evaluate tool - Evaluate model performance
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare const evaluateSchema: z.ZodObject<{
|
|
6
|
+
projectPath: z.ZodString;
|
|
7
|
+
dataFile: z.ZodOptional<z.ZodString>;
|
|
8
|
+
modelName: z.ZodOptional<z.ZodString>;
|
|
9
|
+
experimentId: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
projectPath: string;
|
|
12
|
+
dataFile?: string | undefined;
|
|
13
|
+
modelName?: string | undefined;
|
|
14
|
+
experimentId?: string | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
projectPath: string;
|
|
17
|
+
dataFile?: string | undefined;
|
|
18
|
+
modelName?: string | undefined;
|
|
19
|
+
experimentId?: string | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type EvaluateParams = z.infer<typeof evaluateSchema>;
|
|
22
|
+
export declare function evaluate(params: EvaluateParams): Promise<{
|
|
23
|
+
content: Array<{
|
|
24
|
+
type: 'text';
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
isError?: boolean;
|
|
28
|
+
}>;
|
|
29
|
+
export declare const evaluateTool: {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: string;
|
|
34
|
+
properties: {
|
|
35
|
+
projectPath: {
|
|
36
|
+
type: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
dataFile: {
|
|
40
|
+
type: string;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
modelName: {
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
experimentId: {
|
|
48
|
+
type: string;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
required: string[];
|
|
53
|
+
};
|
|
54
|
+
handler: typeof evaluate;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAiDrI;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BxB,CAAC"}
|