liara-mcp 0.1.4 → 0.1.6
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 +65 -6
- package/dist/api/client.d.ts +17 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +70 -30
- package/dist/api/client.js.map +1 -1
- package/dist/index.js +1 -134
- package/dist/index.js.map +1 -1
- package/dist/services/apps.d.ts.map +1 -1
- package/dist/services/apps.js +3 -2
- package/dist/services/apps.js.map +1 -1
- package/dist/services/databases.d.ts +8 -3
- package/dist/services/databases.d.ts.map +1 -1
- package/dist/services/databases.js +60 -4
- package/dist/services/databases.js.map +1 -1
- package/dist/services/deployment.d.ts.map +1 -1
- package/dist/services/deployment.js +5 -3
- package/dist/services/deployment.js.map +1 -1
- package/dist/services/dns.d.ts.map +1 -1
- package/dist/services/dns.js +5 -3
- package/dist/services/dns.js.map +1 -1
- package/dist/services/domains.d.ts.map +1 -1
- package/dist/services/domains.js +3 -2
- package/dist/services/domains.js.map +1 -1
- package/dist/services/environment.d.ts.map +1 -1
- package/dist/services/environment.js +7 -1
- package/dist/services/environment.js.map +1 -1
- package/dist/services/mail.d.ts.map +1 -1
- package/dist/services/mail.js +3 -2
- package/dist/services/mail.js.map +1 -1
- package/dist/services/plans.d.ts.map +1 -1
- package/dist/services/plans.js +3 -1
- package/dist/services/plans.js.map +1 -1
- package/dist/services/storage.d.ts.map +1 -1
- package/dist/services/storage.js +3 -2
- package/dist/services/storage.js.map +1 -1
- package/dist/utils/errors.d.ts +9 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +33 -0
- package/dist/utils/errors.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -99,6 +99,65 @@ Add the following to your MCP configuration file:
|
|
|
99
99
|
}
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
+
**Alternative Configuration (For nvm/fnm users):**
|
|
103
|
+
|
|
104
|
+
If you're using **nvm** or **fnm** to manage Node.js versions, use this configuration instead to avoid PATH issues:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"mcpServers": {
|
|
109
|
+
"liara": {
|
|
110
|
+
"command": "/bin/zsh",
|
|
111
|
+
"args": [
|
|
112
|
+
"-c",
|
|
113
|
+
"source ~/.nvm/nvm.sh && npx -y liara-mcp"
|
|
114
|
+
],
|
|
115
|
+
"env": {
|
|
116
|
+
"LIARA_API_TOKEN": "your_api_token_here"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**For bash users**, replace `/bin/zsh` with `/bin/bash` and `~/.nvm/nvm.sh` with your nvm init script path.
|
|
124
|
+
|
|
125
|
+
**For fnm users**:
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"mcpServers": {
|
|
129
|
+
"liara": {
|
|
130
|
+
"command": "/bin/zsh",
|
|
131
|
+
"args": [
|
|
132
|
+
"-c",
|
|
133
|
+
"eval \"$(fnm env --use-on-cd --shell zsh)\" && npx -y liara-mcp"
|
|
134
|
+
],
|
|
135
|
+
"env": {
|
|
136
|
+
"LIARA_API_TOKEN": "your_api_token_here"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Why Use the Alternative Configuration?
|
|
144
|
+
|
|
145
|
+
Many IDE and editor applications (like Claude Desktop, Cursor, Windsurf, etc.) start MCP servers in a **restricted environment** without your shell's PATH configuration. This causes the error:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Error: failed to create mcp stdio client: exec: "npx": executable file not found in $PATH
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**The problem:** When you use nvm/fnm, Node.js and npx are installed in version-specific directories that are added to PATH by your shell initialization scripts (`~/.zshrc`, `~/.bashrc`, etc.). However, MCP clients don't load these files, so they can't find npx.
|
|
152
|
+
|
|
153
|
+
**The solution:** Using a shell wrapper (`/bin/zsh -c` or `/bin/bash -c`) explicitly sources the nvm/fnm initialization script before running npx. This ensures the Node.js environment is properly configured.
|
|
154
|
+
|
|
155
|
+
**When to use each:**
|
|
156
|
+
- **Basic config**: If you installed Node.js via system package manager (`brew`, `apt`, etc.) or official installer
|
|
157
|
+
- **Alternative config**: If you use nvm, nodenv, fnm, or similar version managers
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
102
161
|
### Troubleshooting: PATH Issues (nvm/nodenv users)
|
|
103
162
|
|
|
104
163
|
If you see `spawn npx ENOENT` error, run the setup wizard:
|
|
@@ -135,7 +194,7 @@ This will generate the correct configuration with absolute paths for your system
|
|
|
135
194
|
- `liara_get_release` - Get release details
|
|
136
195
|
- `liara_rollback_release` - Rollback to a previous release
|
|
137
196
|
- `liara_list_sources` - List uploaded sources
|
|
138
|
-
|
|
197
|
+
|
|
139
198
|
|
|
140
199
|
#### Database Management
|
|
141
200
|
- `liara_list_databases` - List all databases
|
|
@@ -163,7 +222,7 @@ This will generate the correct configuration with absolute paths for your system
|
|
|
163
222
|
- `liara_upload_object` - Upload an object to a bucket
|
|
164
223
|
- `liara_get_object_download_url` - Get download URL for an object
|
|
165
224
|
- `liara_delete_object` - Delete an object from a bucket
|
|
166
|
-
|
|
225
|
+
|
|
167
226
|
|
|
168
227
|
#### App Settings
|
|
169
228
|
- `liara_set_zero_downtime` - Enable/disable zero-downtime deployment
|
|
@@ -186,7 +245,7 @@ This will generate the correct configuration with absolute paths for your system
|
|
|
186
245
|
- `liara_get_zone` - Get zone details
|
|
187
246
|
- `liara_create_zone` - Create a DNS zone
|
|
188
247
|
- `liara_delete_zone` - Delete a DNS zone
|
|
189
|
-
|
|
248
|
+
|
|
190
249
|
- `liara_list_dns_records` - List DNS records
|
|
191
250
|
- `liara_create_dns_record` - Create a DNS record
|
|
192
251
|
- `liara_get_dns_record` - Get DNS record details
|
|
@@ -198,7 +257,7 @@ This will generate the correct configuration with absolute paths for your system
|
|
|
198
257
|
- `liara_get_domain` - Get domain details
|
|
199
258
|
- `liara_add_domain` - Add a domain to an app
|
|
200
259
|
- `liara_remove_domain` - Remove a domain from an app
|
|
201
|
-
|
|
260
|
+
|
|
202
261
|
|
|
203
262
|
#### Mail Server
|
|
204
263
|
- `liara_list_mail_servers` - List all mail servers
|
|
@@ -218,7 +277,7 @@ This will generate the correct configuration with absolute paths for your system
|
|
|
218
277
|
- `liara_stop_vm` - Stop a VM
|
|
219
278
|
- `liara_restart_vm` - Restart a VM
|
|
220
279
|
- `liara_shutdown_vm` - Shutdown a VM
|
|
221
|
-
|
|
280
|
+
|
|
222
281
|
- `liara_delete_vm` - Delete a VM
|
|
223
282
|
- `liara_resize_vm` - Resize a VM
|
|
224
283
|
- `liara_create_snapshot` - Create a VM snapshot
|
|
@@ -340,7 +399,7 @@ MIT
|
|
|
340
399
|
|
|
341
400
|
This MCP server implements comprehensive coverage of the [Liara API](https://openapi.liara.ir), including:
|
|
342
401
|
|
|
343
|
-
### Implemented Services (15 modules,
|
|
402
|
+
### Implemented Services (15 modules, 99 tools)
|
|
344
403
|
|
|
345
404
|
- **Apps** - Full lifecycle management (create, deploy, start, stop, restart, resize)
|
|
346
405
|
- **Databases** - Complete database management with backup/restore (8 database types)
|
package/dist/api/client.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export interface LiaraClientConfig {
|
|
|
5
5
|
apiToken: string;
|
|
6
6
|
teamId?: string;
|
|
7
7
|
baseURL?: string;
|
|
8
|
+
maxRetries?: number;
|
|
9
|
+
retryDelay?: number;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* Liara API client for making authenticated requests
|
|
@@ -12,7 +14,17 @@ export interface LiaraClientConfig {
|
|
|
12
14
|
export declare class LiaraClient {
|
|
13
15
|
private client;
|
|
14
16
|
private teamId?;
|
|
17
|
+
private maxRetries;
|
|
18
|
+
private retryDelay;
|
|
15
19
|
constructor(config: LiaraClientConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Sleep for a given number of milliseconds
|
|
22
|
+
*/
|
|
23
|
+
private sleep;
|
|
24
|
+
/**
|
|
25
|
+
* Execute request with retry logic for rate limiting
|
|
26
|
+
*/
|
|
27
|
+
private executeWithRetry;
|
|
16
28
|
/**
|
|
17
29
|
* Handle API errors and convert to user-friendly messages
|
|
18
30
|
*/
|
|
@@ -22,23 +34,23 @@ export declare class LiaraClient {
|
|
|
22
34
|
*/
|
|
23
35
|
private addTeamId;
|
|
24
36
|
/**
|
|
25
|
-
* GET request
|
|
37
|
+
* GET request with automatic retry for rate limiting
|
|
26
38
|
*/
|
|
27
39
|
get<T>(url: string, params?: any): Promise<T>;
|
|
28
40
|
/**
|
|
29
|
-
* POST request
|
|
41
|
+
* POST request with automatic retry for rate limiting
|
|
30
42
|
*/
|
|
31
43
|
post<T>(url: string, data?: any, params?: any): Promise<T>;
|
|
32
44
|
/**
|
|
33
|
-
* PUT request
|
|
45
|
+
* PUT request with automatic retry for rate limiting
|
|
34
46
|
*/
|
|
35
47
|
put<T>(url: string, data?: any, params?: any): Promise<T>;
|
|
36
48
|
/**
|
|
37
|
-
* DELETE request
|
|
49
|
+
* DELETE request with automatic retry for rate limiting
|
|
38
50
|
*/
|
|
39
51
|
delete<T>(url: string, params?: any): Promise<T>;
|
|
40
52
|
/**
|
|
41
|
-
* POST multipart/form-data request
|
|
53
|
+
* POST multipart/form-data request with automatic retry for rate limiting
|
|
42
54
|
*/
|
|
43
55
|
postFormData<T>(url: string, formData: any, params?: any): Promise<T>;
|
|
44
56
|
}
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,iBAAiB;IAyBrC;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;YACW,gBAAgB;IAsB9B;;OAEG;IACH,OAAO,CAAC,WAAW;IAyCnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IASnD;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAShE;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAS/D;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAStD;;OAEG;IACG,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;CAmB9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAY/C"}
|
package/dist/api/client.js
CHANGED
|
@@ -5,6 +5,8 @@ import axios from 'axios';
|
|
|
5
5
|
export class LiaraClient {
|
|
6
6
|
client;
|
|
7
7
|
teamId;
|
|
8
|
+
maxRetries;
|
|
9
|
+
retryDelay;
|
|
8
10
|
constructor(config) {
|
|
9
11
|
const baseURL = config.baseURL || process.env.LIARA_API_BASE_URL || 'https://api.iran.liara.ir';
|
|
10
12
|
this.client = axios.create({
|
|
@@ -16,11 +18,39 @@ export class LiaraClient {
|
|
|
16
18
|
timeout: 30000, // 30 seconds
|
|
17
19
|
});
|
|
18
20
|
this.teamId = config.teamId;
|
|
21
|
+
this.maxRetries = config.maxRetries ?? 3;
|
|
22
|
+
this.retryDelay = config.retryDelay ?? 1000;
|
|
19
23
|
// Add response interceptor for error handling
|
|
20
24
|
this.client.interceptors.response.use((response) => response, (error) => {
|
|
21
25
|
return Promise.reject(this.handleError(error));
|
|
22
26
|
});
|
|
23
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Sleep for a given number of milliseconds
|
|
30
|
+
*/
|
|
31
|
+
sleep(ms) {
|
|
32
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Execute request with retry logic for rate limiting
|
|
36
|
+
*/
|
|
37
|
+
async executeWithRetry(requestFn, retryCount = 0) {
|
|
38
|
+
try {
|
|
39
|
+
return await requestFn();
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
// Retry on rate limiting (429) or server errors (5xx)
|
|
43
|
+
const statusCode = error.statusCode || error.response?.status;
|
|
44
|
+
const isRetryable = statusCode === 429 || (statusCode >= 500 && statusCode < 600);
|
|
45
|
+
if (isRetryable && retryCount < this.maxRetries) {
|
|
46
|
+
// Exponential backoff: 1s, 2s, 4s...
|
|
47
|
+
const delay = this.retryDelay * Math.pow(2, retryCount);
|
|
48
|
+
await this.sleep(delay);
|
|
49
|
+
return this.executeWithRetry(requestFn, retryCount + 1);
|
|
50
|
+
}
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
24
54
|
/**
|
|
25
55
|
* Handle API errors and convert to user-friendly messages
|
|
26
56
|
*/
|
|
@@ -73,59 +103,69 @@ export class LiaraClient {
|
|
|
73
103
|
return params;
|
|
74
104
|
}
|
|
75
105
|
/**
|
|
76
|
-
* GET request
|
|
106
|
+
* GET request with automatic retry for rate limiting
|
|
77
107
|
*/
|
|
78
108
|
async get(url, params) {
|
|
79
|
-
|
|
80
|
-
|
|
109
|
+
return this.executeWithRetry(async () => {
|
|
110
|
+
const response = await this.client.get(url, {
|
|
111
|
+
params: this.addTeamId(params)
|
|
112
|
+
});
|
|
113
|
+
return response.data;
|
|
81
114
|
});
|
|
82
|
-
return response.data;
|
|
83
115
|
}
|
|
84
116
|
/**
|
|
85
|
-
* POST request
|
|
117
|
+
* POST request with automatic retry for rate limiting
|
|
86
118
|
*/
|
|
87
119
|
async post(url, data, params) {
|
|
88
|
-
|
|
89
|
-
|
|
120
|
+
return this.executeWithRetry(async () => {
|
|
121
|
+
const response = await this.client.post(url, data, {
|
|
122
|
+
params: this.addTeamId(params)
|
|
123
|
+
});
|
|
124
|
+
return response.data;
|
|
90
125
|
});
|
|
91
|
-
return response.data;
|
|
92
126
|
}
|
|
93
127
|
/**
|
|
94
|
-
* PUT request
|
|
128
|
+
* PUT request with automatic retry for rate limiting
|
|
95
129
|
*/
|
|
96
130
|
async put(url, data, params) {
|
|
97
|
-
|
|
98
|
-
|
|
131
|
+
return this.executeWithRetry(async () => {
|
|
132
|
+
const response = await this.client.put(url, data, {
|
|
133
|
+
params: this.addTeamId(params)
|
|
134
|
+
});
|
|
135
|
+
return response.data;
|
|
99
136
|
});
|
|
100
|
-
return response.data;
|
|
101
137
|
}
|
|
102
138
|
/**
|
|
103
|
-
* DELETE request
|
|
139
|
+
* DELETE request with automatic retry for rate limiting
|
|
104
140
|
*/
|
|
105
141
|
async delete(url, params) {
|
|
106
|
-
|
|
107
|
-
|
|
142
|
+
return this.executeWithRetry(async () => {
|
|
143
|
+
const response = await this.client.delete(url, {
|
|
144
|
+
params: this.addTeamId(params)
|
|
145
|
+
});
|
|
146
|
+
return response.data;
|
|
108
147
|
});
|
|
109
|
-
return response.data;
|
|
110
148
|
}
|
|
111
149
|
/**
|
|
112
|
-
* POST multipart/form-data request
|
|
150
|
+
* POST multipart/form-data request with automatic retry for rate limiting
|
|
113
151
|
*/
|
|
114
152
|
async postFormData(url, formData, params) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
153
|
+
return this.executeWithRetry(async () => {
|
|
154
|
+
// form-data sets its own Content-Type with boundary, so we use its headers
|
|
155
|
+
const headers = formData.getHeaders ? formData.getHeaders() : {
|
|
156
|
+
'Content-Type': 'multipart/form-data',
|
|
157
|
+
};
|
|
158
|
+
const response = await this.client.post(url, formData, {
|
|
159
|
+
params: this.addTeamId(params),
|
|
160
|
+
headers: {
|
|
161
|
+
...headers,
|
|
162
|
+
'Authorization': this.client.defaults.headers['Authorization'],
|
|
163
|
+
},
|
|
164
|
+
maxContentLength: Infinity,
|
|
165
|
+
maxBodyLength: Infinity,
|
|
166
|
+
});
|
|
167
|
+
return response.data;
|
|
127
168
|
});
|
|
128
|
-
return response.data;
|
|
129
169
|
}
|
|
130
170
|
}
|
|
131
171
|
/**
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ class LiaraMcpServer {
|
|
|
31
31
|
constructor() {
|
|
32
32
|
this.server = new Server({
|
|
33
33
|
name: 'liara-mcp',
|
|
34
|
-
version: '0.1.
|
|
34
|
+
version: '0.1.4',
|
|
35
35
|
}, {
|
|
36
36
|
capabilities: {
|
|
37
37
|
tools: {},
|
|
@@ -516,24 +516,6 @@ class LiaraMcpServer {
|
|
|
516
516
|
required: ['appName'],
|
|
517
517
|
},
|
|
518
518
|
},
|
|
519
|
-
{
|
|
520
|
-
name: 'liara_delete_source',
|
|
521
|
-
description: 'Delete an uploaded source',
|
|
522
|
-
inputSchema: {
|
|
523
|
-
type: 'object',
|
|
524
|
-
properties: {
|
|
525
|
-
appName: {
|
|
526
|
-
type: 'string',
|
|
527
|
-
description: 'The name of the app',
|
|
528
|
-
},
|
|
529
|
-
sourceID: {
|
|
530
|
-
type: 'string',
|
|
531
|
-
description: 'The source ID to delete',
|
|
532
|
-
},
|
|
533
|
-
},
|
|
534
|
-
required: ['appName', 'sourceID'],
|
|
535
|
-
},
|
|
536
|
-
},
|
|
537
519
|
// Database Tools
|
|
538
520
|
{
|
|
539
521
|
name: 'liara_list_databases',
|
|
@@ -913,24 +895,6 @@ class LiaraMcpServer {
|
|
|
913
895
|
required: ['bucketName', 'objectKey'],
|
|
914
896
|
},
|
|
915
897
|
},
|
|
916
|
-
{
|
|
917
|
-
name: 'liara_get_object_metadata',
|
|
918
|
-
description: 'Get metadata for an object',
|
|
919
|
-
inputSchema: {
|
|
920
|
-
type: 'object',
|
|
921
|
-
properties: {
|
|
922
|
-
bucketName: {
|
|
923
|
-
type: 'string',
|
|
924
|
-
description: 'The name of the bucket',
|
|
925
|
-
},
|
|
926
|
-
objectKey: {
|
|
927
|
-
type: 'string',
|
|
928
|
-
description: 'The object key',
|
|
929
|
-
},
|
|
930
|
-
},
|
|
931
|
-
required: ['bucketName', 'objectKey'],
|
|
932
|
-
},
|
|
933
|
-
},
|
|
934
898
|
// Plan Tools
|
|
935
899
|
{
|
|
936
900
|
name: 'liara_list_plans',
|
|
@@ -1012,20 +976,6 @@ class LiaraMcpServer {
|
|
|
1012
976
|
required: ['zoneId'],
|
|
1013
977
|
},
|
|
1014
978
|
},
|
|
1015
|
-
{
|
|
1016
|
-
name: 'liara_check_zone',
|
|
1017
|
-
description: 'Check DNS zone status',
|
|
1018
|
-
inputSchema: {
|
|
1019
|
-
type: 'object',
|
|
1020
|
-
properties: {
|
|
1021
|
-
zoneId: {
|
|
1022
|
-
type: 'string',
|
|
1023
|
-
description: 'The zone ID',
|
|
1024
|
-
},
|
|
1025
|
-
},
|
|
1026
|
-
required: ['zoneId'],
|
|
1027
|
-
},
|
|
1028
|
-
},
|
|
1029
979
|
{
|
|
1030
980
|
name: 'liara_list_dns_records',
|
|
1031
981
|
description: 'List DNS records for a zone',
|
|
@@ -1206,20 +1156,6 @@ class LiaraMcpServer {
|
|
|
1206
1156
|
required: ['domainId'],
|
|
1207
1157
|
},
|
|
1208
1158
|
},
|
|
1209
|
-
{
|
|
1210
|
-
name: 'liara_check_domain',
|
|
1211
|
-
description: 'Check domain status and DNS configuration',
|
|
1212
|
-
inputSchema: {
|
|
1213
|
-
type: 'object',
|
|
1214
|
-
properties: {
|
|
1215
|
-
domainId: {
|
|
1216
|
-
type: 'string',
|
|
1217
|
-
description: 'The domain ID',
|
|
1218
|
-
},
|
|
1219
|
-
},
|
|
1220
|
-
required: ['domainId'],
|
|
1221
|
-
},
|
|
1222
|
-
},
|
|
1223
1159
|
// Mail Tools
|
|
1224
1160
|
{
|
|
1225
1161
|
name: 'liara_list_mail_servers',
|
|
@@ -1457,20 +1393,6 @@ class LiaraMcpServer {
|
|
|
1457
1393
|
required: ['vmId'],
|
|
1458
1394
|
},
|
|
1459
1395
|
},
|
|
1460
|
-
{
|
|
1461
|
-
name: 'liara_poweroff_vm',
|
|
1462
|
-
description: 'Power off a virtual machine immediately',
|
|
1463
|
-
inputSchema: {
|
|
1464
|
-
type: 'object',
|
|
1465
|
-
properties: {
|
|
1466
|
-
vmId: {
|
|
1467
|
-
type: 'string',
|
|
1468
|
-
description: 'The VM ID',
|
|
1469
|
-
},
|
|
1470
|
-
},
|
|
1471
|
-
required: ['vmId'],
|
|
1472
|
-
},
|
|
1473
|
-
},
|
|
1474
1396
|
{
|
|
1475
1397
|
name: 'liara_delete_vm',
|
|
1476
1398
|
description: 'Delete a virtual machine',
|
|
@@ -2145,17 +2067,6 @@ class LiaraMcpServer {
|
|
|
2145
2067
|
],
|
|
2146
2068
|
};
|
|
2147
2069
|
}
|
|
2148
|
-
case 'liara_delete_source': {
|
|
2149
|
-
await deployService.deleteSource(this.client, args.appName, args.sourceID);
|
|
2150
|
-
return {
|
|
2151
|
-
content: [
|
|
2152
|
-
{
|
|
2153
|
-
type: 'text',
|
|
2154
|
-
text: `Source "${args.sourceID}" deleted successfully.`,
|
|
2155
|
-
},
|
|
2156
|
-
],
|
|
2157
|
-
};
|
|
2158
|
-
}
|
|
2159
2070
|
// Databases
|
|
2160
2071
|
case 'liara_list_databases': {
|
|
2161
2072
|
const databases = await dbService.listDatabases(this.client);
|
|
@@ -2411,17 +2322,6 @@ class LiaraMcpServer {
|
|
|
2411
2322
|
],
|
|
2412
2323
|
};
|
|
2413
2324
|
}
|
|
2414
|
-
case 'liara_get_object_metadata': {
|
|
2415
|
-
const metadata = await storageService.getObjectMetadata(this.client, args.bucketName, args.objectKey);
|
|
2416
|
-
return {
|
|
2417
|
-
content: [
|
|
2418
|
-
{
|
|
2419
|
-
type: 'text',
|
|
2420
|
-
text: JSON.stringify(metadata, null, 2),
|
|
2421
|
-
},
|
|
2422
|
-
],
|
|
2423
|
-
};
|
|
2424
|
-
}
|
|
2425
2325
|
// Plans
|
|
2426
2326
|
case 'liara_list_plans': {
|
|
2427
2327
|
const plans = await planService.listPlans(this.client, args?.planType, this.extractPagination(args));
|
|
@@ -2490,17 +2390,6 @@ class LiaraMcpServer {
|
|
|
2490
2390
|
],
|
|
2491
2391
|
};
|
|
2492
2392
|
}
|
|
2493
|
-
case 'liara_check_zone': {
|
|
2494
|
-
const check = await dnsService.checkZone(this.client, args.zoneId);
|
|
2495
|
-
return {
|
|
2496
|
-
content: [
|
|
2497
|
-
{
|
|
2498
|
-
type: 'text',
|
|
2499
|
-
text: JSON.stringify(check, null, 2),
|
|
2500
|
-
},
|
|
2501
|
-
],
|
|
2502
|
-
};
|
|
2503
|
-
}
|
|
2504
2393
|
case 'liara_list_dns_records': {
|
|
2505
2394
|
const records = await dnsService.listRecords(this.client, args.zoneId, this.extractPagination(args));
|
|
2506
2395
|
return {
|
|
@@ -2613,17 +2502,6 @@ class LiaraMcpServer {
|
|
|
2613
2502
|
],
|
|
2614
2503
|
};
|
|
2615
2504
|
}
|
|
2616
|
-
case 'liara_check_domain': {
|
|
2617
|
-
const check = await domainService.checkDomain(this.client, args.domainId);
|
|
2618
|
-
return {
|
|
2619
|
-
content: [
|
|
2620
|
-
{
|
|
2621
|
-
type: 'text',
|
|
2622
|
-
text: JSON.stringify(check, null, 2),
|
|
2623
|
-
},
|
|
2624
|
-
],
|
|
2625
|
-
};
|
|
2626
|
-
}
|
|
2627
2505
|
// Mail
|
|
2628
2506
|
case 'liara_list_mail_servers': {
|
|
2629
2507
|
const servers = await mailService.listMailServers(this.client, this.extractPagination(args));
|
|
@@ -2798,17 +2676,6 @@ class LiaraMcpServer {
|
|
|
2798
2676
|
],
|
|
2799
2677
|
};
|
|
2800
2678
|
}
|
|
2801
|
-
case 'liara_poweroff_vm': {
|
|
2802
|
-
await iaasService.powerOffVM(this.client, args.vmId);
|
|
2803
|
-
return {
|
|
2804
|
-
content: [
|
|
2805
|
-
{
|
|
2806
|
-
type: 'text',
|
|
2807
|
-
text: `VM "${args.vmId}" powered off successfully.`,
|
|
2808
|
-
},
|
|
2809
|
-
],
|
|
2810
|
-
};
|
|
2811
|
-
}
|
|
2812
2679
|
case 'liara_delete_vm': {
|
|
2813
2680
|
await iaasService.deleteVM(this.client, args.vmId);
|
|
2814
2681
|
return {
|