bt-panel-mcp-server 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 +443 -0
- package/dist/bt-client.d.ts +124 -0
- package/dist/bt-client.d.ts.map +1 -0
- package/dist/bt-client.js +291 -0
- package/dist/bt-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +207 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/get-app-logs.d.ts +20 -0
- package/dist/tools/get-app-logs.d.ts.map +1 -0
- package/dist/tools/get-app-logs.js +141 -0
- package/dist/tools/get-app-logs.js.map +1 -0
- package/dist/tools/get-nginx-logs.d.ts +20 -0
- package/dist/tools/get-nginx-logs.d.ts.map +1 -0
- package/dist/tools/get-nginx-logs.js +126 -0
- package/dist/tools/get-nginx-logs.js.map +1 -0
- package/dist/tools/get-panel-logs.d.ts +11 -0
- package/dist/tools/get-panel-logs.d.ts.map +1 -0
- package/dist/tools/get-panel-logs.js +26 -0
- package/dist/tools/get-panel-logs.js.map +1 -0
- package/dist/tools/get-system-status.d.ts +5 -0
- package/dist/tools/get-system-status.d.ts.map +1 -0
- package/dist/tools/get-system-status.js +40 -0
- package/dist/tools/get-system-status.js.map +1 -0
- package/dist/tools/list-sites.d.ts +11 -0
- package/dist/tools/list-sites.d.ts.map +1 -0
- package/dist/tools/list-sites.js +18 -0
- package/dist/tools/list-sites.js.map +1 -0
- package/dist/tools/manage-backups.d.ts +17 -0
- package/dist/tools/manage-backups.d.ts.map +1 -0
- package/dist/tools/manage-backups.js +36 -0
- package/dist/tools/manage-backups.js.map +1 -0
- package/dist/tools/manage-domains.d.ts +20 -0
- package/dist/tools/manage-domains.d.ts.map +1 -0
- package/dist/tools/manage-domains.js +39 -0
- package/dist/tools/manage-domains.js.map +1 -0
- package/dist/tools/manage-nginx-config.d.ts +29 -0
- package/dist/tools/manage-nginx-config.d.ts.map +1 -0
- package/dist/tools/manage-nginx-config.js +38 -0
- package/dist/tools/manage-nginx-config.js.map +1 -0
- package/dist/tools/manage-sites.d.ts +41 -0
- package/dist/tools/manage-sites.d.ts.map +1 -0
- package/dist/tools/manage-sites.js +100 -0
- package/dist/tools/manage-sites.js.map +1 -0
- package/dist/tools/read-file.d.ts +14 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +26 -0
- package/dist/tools/read-file.js.map +1 -0
- package/lxfs.jpg +0 -0
- package/package.json +51 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import https from 'https';
|
|
3
|
+
import http from 'http';
|
|
4
|
+
import { URLSearchParams } from 'url';
|
|
5
|
+
function getSignature(apiKey) {
|
|
6
|
+
const request_time = Math.floor(Date.now() / 1000);
|
|
7
|
+
const md5Key = crypto.createHash('md5').update(apiKey).digest('hex');
|
|
8
|
+
const request_token = crypto.createHash('md5').update(String(request_time) + md5Key).digest('hex');
|
|
9
|
+
return { request_time, request_token };
|
|
10
|
+
}
|
|
11
|
+
async function postRequest(config, path, extraParams = {}) {
|
|
12
|
+
const sig = getSignature(config.apiKey);
|
|
13
|
+
const params = new URLSearchParams({
|
|
14
|
+
request_time: String(sig.request_time),
|
|
15
|
+
request_token: sig.request_token,
|
|
16
|
+
...Object.fromEntries(Object.entries(extraParams).map(([k, v]) => [k, String(v)])),
|
|
17
|
+
});
|
|
18
|
+
const body = params.toString();
|
|
19
|
+
// 宝塔安全入口(如 /4d33e98c)只用于登录页,API 接口不需要带此前缀
|
|
20
|
+
// 从 panelUrl 中剔除安全入口路径,只保留 协议://主机:端口
|
|
21
|
+
const parsedBase = new URL(config.panelUrl.replace(/\/$/, ''));
|
|
22
|
+
const apiBase = `${parsedBase.protocol}//${parsedBase.host}`;
|
|
23
|
+
const fullUrl = new URL(apiBase + path);
|
|
24
|
+
const isHttps = fullUrl.protocol === 'https:';
|
|
25
|
+
const port = parseInt(fullUrl.port || (isHttps ? '443' : '80'), 10);
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const options = {
|
|
28
|
+
hostname: fullUrl.hostname,
|
|
29
|
+
port,
|
|
30
|
+
path: fullUrl.pathname + fullUrl.search,
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
34
|
+
'Content-Length': Buffer.byteLength(body),
|
|
35
|
+
},
|
|
36
|
+
rejectUnauthorized: false,
|
|
37
|
+
};
|
|
38
|
+
const lib = isHttps ? https : http;
|
|
39
|
+
const req = lib.request(options, (res) => {
|
|
40
|
+
let data = '';
|
|
41
|
+
res.on('data', (chunk) => (data += chunk));
|
|
42
|
+
res.on('end', () => {
|
|
43
|
+
try {
|
|
44
|
+
resolve(JSON.parse(data));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
resolve(data);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
req.on('error', reject);
|
|
52
|
+
req.setTimeout(30000, () => {
|
|
53
|
+
req.destroy(new Error('Request timeout'));
|
|
54
|
+
});
|
|
55
|
+
req.write(body);
|
|
56
|
+
req.end();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function getConfigFromEnv() {
|
|
60
|
+
const panelUrl = process.env.BT_PANEL_URL;
|
|
61
|
+
const apiKey = process.env.BT_API_KEY;
|
|
62
|
+
if (!panelUrl || !apiKey) {
|
|
63
|
+
throw new Error('Missing required environment variables: BT_PANEL_URL and BT_API_KEY');
|
|
64
|
+
}
|
|
65
|
+
return { panelUrl, apiKey };
|
|
66
|
+
}
|
|
67
|
+
export async function listSites(search) {
|
|
68
|
+
const config = getConfigFromEnv();
|
|
69
|
+
const params = { table: 'sites', limit: 100, p: 1, type: '-1' };
|
|
70
|
+
if (search)
|
|
71
|
+
params['search'] = search;
|
|
72
|
+
const result = await postRequest(config, '/data?action=getData', params);
|
|
73
|
+
if (Array.isArray(result))
|
|
74
|
+
return result;
|
|
75
|
+
const obj = result;
|
|
76
|
+
return obj?.data || obj?.sites || [];
|
|
77
|
+
}
|
|
78
|
+
export async function createSite(params) {
|
|
79
|
+
const config = getConfigFromEnv();
|
|
80
|
+
const webname = JSON.stringify({ domain: params.domain, domainlist: [], count: 0 });
|
|
81
|
+
return await postRequest(config, '/site?action=AddSite', {
|
|
82
|
+
webname,
|
|
83
|
+
path: params.path,
|
|
84
|
+
type_id: 0,
|
|
85
|
+
type: 'PHP',
|
|
86
|
+
version: params.phpVersion || '74',
|
|
87
|
+
port: params.port || 80,
|
|
88
|
+
ps: params.ps || params.domain,
|
|
89
|
+
ftp: params.createFtp ? 'true' : 'false',
|
|
90
|
+
...(params.createFtp ? { ftp_username: params.ftpUser || '', ftp_password: params.ftpPass || '' } : {}),
|
|
91
|
+
sql: params.createDb ? 'true' : 'false',
|
|
92
|
+
...(params.createDb ? { codeing: params.dbCharset || 'utf8mb4', datauser: params.dbUser || '', datapassword: params.dbPass || '' } : {}),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export async function deleteSite(id, siteName, opts = {}) {
|
|
96
|
+
const config = getConfigFromEnv();
|
|
97
|
+
return await postRequest(config, '/site?action=DeleteSite', {
|
|
98
|
+
id,
|
|
99
|
+
webname: siteName,
|
|
100
|
+
...(opts.deleteFtp ? { ftp: 1 } : {}),
|
|
101
|
+
...(opts.deleteDb ? { database: 1 } : {}),
|
|
102
|
+
...(opts.deletePath ? { path: 1 } : {}),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export async function stopSite(id, name) {
|
|
106
|
+
const config = getConfigFromEnv();
|
|
107
|
+
return await postRequest(config, '/site?action=SiteStop', { id, name });
|
|
108
|
+
}
|
|
109
|
+
export async function startSite(id, name) {
|
|
110
|
+
const config = getConfigFromEnv();
|
|
111
|
+
return await postRequest(config, '/site?action=SiteStart', { id, name });
|
|
112
|
+
}
|
|
113
|
+
export async function setSiteNote(id, ps) {
|
|
114
|
+
const config = getConfigFromEnv();
|
|
115
|
+
return await postRequest(config, '/data?action=setPs&table=sites', { id, ps });
|
|
116
|
+
}
|
|
117
|
+
export async function setSiteExpiry(id, edate) {
|
|
118
|
+
const config = getConfigFromEnv();
|
|
119
|
+
return await postRequest(config, '/site?action=SetEdate', { id, edate });
|
|
120
|
+
}
|
|
121
|
+
// ── 域名管理 ──────────────────────────────────────────
|
|
122
|
+
export async function listDomains(siteId) {
|
|
123
|
+
const config = getConfigFromEnv();
|
|
124
|
+
const result = await postRequest(config, '/data?action=getData&table=domain', { search: siteId, list: 'true' });
|
|
125
|
+
if (Array.isArray(result))
|
|
126
|
+
return result;
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
export async function addDomain(siteId, siteName, domain, port = 80) {
|
|
130
|
+
const config = getConfigFromEnv();
|
|
131
|
+
return await postRequest(config, '/site?action=AddDomain', {
|
|
132
|
+
id: siteId,
|
|
133
|
+
webname: siteName,
|
|
134
|
+
domain: port === 80 ? domain : `${domain}:${port}`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
export async function deleteDomain(siteId, siteName, domain, port = 80) {
|
|
138
|
+
const config = getConfigFromEnv();
|
|
139
|
+
return await postRequest(config, '/site?action=DelDomain', { id: siteId, webname: siteName, domain, port });
|
|
140
|
+
}
|
|
141
|
+
// ── 备份管理 ──────────────────────────────────────────
|
|
142
|
+
export async function listBackups(siteId) {
|
|
143
|
+
const config = getConfigFromEnv();
|
|
144
|
+
const result = await postRequest(config, '/data?action=getData&table=backup', {
|
|
145
|
+
p: 1, limit: 20, type: 0, search: siteId,
|
|
146
|
+
});
|
|
147
|
+
const obj = result;
|
|
148
|
+
return obj?.data || [];
|
|
149
|
+
}
|
|
150
|
+
export async function createBackup(siteId) {
|
|
151
|
+
const config = getConfigFromEnv();
|
|
152
|
+
return await postRequest(config, '/site?action=ToBackup', { id: siteId });
|
|
153
|
+
}
|
|
154
|
+
export async function deleteBackup(backupId) {
|
|
155
|
+
const config = getConfigFromEnv();
|
|
156
|
+
return await postRequest(config, '/site?action=DelBackup', { id: backupId });
|
|
157
|
+
}
|
|
158
|
+
// ── 网站配置 ──────────────────────────────────────────
|
|
159
|
+
export async function getNginxConfig(siteName) {
|
|
160
|
+
const filePath = `/www/server/panel/vhost/nginx/${siteName}.conf`;
|
|
161
|
+
return await readFile(filePath);
|
|
162
|
+
}
|
|
163
|
+
export async function saveNginxConfig(siteName, content) {
|
|
164
|
+
const config = getConfigFromEnv();
|
|
165
|
+
const filePath = `/www/server/panel/vhost/nginx/${siteName}.conf`;
|
|
166
|
+
return await postRequest(config, '/files?action=SaveFileBody', {
|
|
167
|
+
path: filePath,
|
|
168
|
+
data: content,
|
|
169
|
+
encoding: 'utf-8',
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
export async function saveFileContent(filePath, content) {
|
|
173
|
+
const config = getConfigFromEnv();
|
|
174
|
+
return await postRequest(config, '/files?action=SaveFileBody', {
|
|
175
|
+
path: filePath,
|
|
176
|
+
data: content,
|
|
177
|
+
encoding: 'utf-8',
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
export async function getSiteInfo(siteId, sitePath) {
|
|
181
|
+
const config = getConfigFromEnv();
|
|
182
|
+
return await postRequest(config, '/site?action=GetDirUserINI', { id: siteId, path: sitePath });
|
|
183
|
+
}
|
|
184
|
+
export async function getPhpVersions() {
|
|
185
|
+
const config = getConfigFromEnv();
|
|
186
|
+
return await postRequest(config, '/site?action=GetPHPVersion', {});
|
|
187
|
+
}
|
|
188
|
+
export async function checkPanelUpdate() {
|
|
189
|
+
const config = getConfigFromEnv();
|
|
190
|
+
return await postRequest(config, '/ajax?action=UpdatePanel', { check: 'true' });
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 列出目录下的文件列表
|
|
194
|
+
*/
|
|
195
|
+
export async function listDir(dirPath) {
|
|
196
|
+
const config = getConfigFromEnv();
|
|
197
|
+
const result = await postRequest(config, '/files?action=GetDir', { path: dirPath, p: 1, showRow: 100 });
|
|
198
|
+
const obj = result;
|
|
199
|
+
if (Array.isArray(result))
|
|
200
|
+
return result;
|
|
201
|
+
return obj?.data || obj?.files || [];
|
|
202
|
+
}
|
|
203
|
+
export async function readFile(filePath) {
|
|
204
|
+
const config = getConfigFromEnv();
|
|
205
|
+
const result = await postRequest(config, '/files?action=GetFileBody', { path: filePath });
|
|
206
|
+
if (typeof result === 'string')
|
|
207
|
+
return result;
|
|
208
|
+
if (typeof result === 'object' && result !== null) {
|
|
209
|
+
if ('data' in result && typeof result.data === 'string')
|
|
210
|
+
return result.data;
|
|
211
|
+
if ('status' in result && !result.status)
|
|
212
|
+
throw new Error(result.msg || 'Failed to read file');
|
|
213
|
+
}
|
|
214
|
+
return String(result);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* 取文件最后 N 行,避免大文件全量读取后 token 爆炸
|
|
218
|
+
*/
|
|
219
|
+
export function tailLines(content, lines) {
|
|
220
|
+
const all = content.split('\n');
|
|
221
|
+
return all.slice(-lines).join('\n');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* 检查文件是否存在(通过尝试读取,捕获错误来判断)
|
|
225
|
+
*/
|
|
226
|
+
export async function fileExists(filePath) {
|
|
227
|
+
try {
|
|
228
|
+
const content = await readFile(filePath);
|
|
229
|
+
// 宝塔在文件不存在时有时返回 HTML 404 页面
|
|
230
|
+
if (typeof content === 'string' && content.includes('<title>404'))
|
|
231
|
+
return false;
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// ── Nginx 日志 ────────────────────────────────────────
|
|
239
|
+
/**
|
|
240
|
+
* 宝塔 Nginx 访问日志默认路径:/www/wwwlogs/<siteName>.log
|
|
241
|
+
* 错误日志:/www/wwwlogs/<siteName>.error.log
|
|
242
|
+
*/
|
|
243
|
+
export async function getNginxAccessLog(siteName, lastLines = 200) {
|
|
244
|
+
const path = `/www/wwwlogs/${siteName}.log`;
|
|
245
|
+
const content = await readFile(path);
|
|
246
|
+
return tailLines(content, lastLines);
|
|
247
|
+
}
|
|
248
|
+
export async function getNginxErrorLog(siteName, lastLines = 200) {
|
|
249
|
+
const path = `/www/wwwlogs/${siteName}.error.log`;
|
|
250
|
+
const content = await readFile(path);
|
|
251
|
+
return tailLines(content, lastLines);
|
|
252
|
+
}
|
|
253
|
+
// ── 应用日志 ──────────────────────────────────────────
|
|
254
|
+
export async function getAppLog(logPath, lastLines = 200) {
|
|
255
|
+
const content = await readFile(logPath);
|
|
256
|
+
return tailLines(content, lastLines);
|
|
257
|
+
}
|
|
258
|
+
// ── 面板日志 ──────────────────────────────────────────
|
|
259
|
+
export async function getPanelLogs(limit = 30) {
|
|
260
|
+
const config = getConfigFromEnv();
|
|
261
|
+
const result = await postRequest(config, '/data?action=getData', {
|
|
262
|
+
table: 'logs',
|
|
263
|
+
limit,
|
|
264
|
+
p: 1,
|
|
265
|
+
});
|
|
266
|
+
return result?.data || [];
|
|
267
|
+
}
|
|
268
|
+
// ── 系统状态 ──────────────────────────────────────────
|
|
269
|
+
export async function getSystemStatus() {
|
|
270
|
+
const config = getConfigFromEnv();
|
|
271
|
+
return await postRequest(config, '/system?action=GetSystemTotal');
|
|
272
|
+
}
|
|
273
|
+
export async function getNetworkStatus() {
|
|
274
|
+
const config = getConfigFromEnv();
|
|
275
|
+
return await postRequest(config, '/system?action=GetNetWork');
|
|
276
|
+
}
|
|
277
|
+
export async function getDiskInfo() {
|
|
278
|
+
const config = getConfigFromEnv();
|
|
279
|
+
const result = await postRequest(config, '/system?action=GetDiskInfo');
|
|
280
|
+
if (Array.isArray(result))
|
|
281
|
+
return result;
|
|
282
|
+
// 部分宝塔版本返回对象而非数组
|
|
283
|
+
if (result && typeof result === 'object') {
|
|
284
|
+
const arr = Object.values(result);
|
|
285
|
+
if (arr.every((item) => typeof item === 'object' && item !== null && 'path' in item)) {
|
|
286
|
+
return arr;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return [];
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=bt-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt-client.js","sourceRoot":"","sources":["../src/bt-client.ts"],"names":[],"mappings":"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"}
|
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,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
6
|
+
import { listSitesSchema, handleListSites } from './tools/list-sites.js';
|
|
7
|
+
import { getNginxLogsSchema, handleGetNginxLogs } from './tools/get-nginx-logs.js';
|
|
8
|
+
import { getAppLogsSchema, handleGetAppLogs } from './tools/get-app-logs.js';
|
|
9
|
+
import { getPanelLogsSchema, handleGetPanelLogs } from './tools/get-panel-logs.js';
|
|
10
|
+
import { getSystemStatusSchema, handleGetSystemStatus } from './tools/get-system-status.js';
|
|
11
|
+
import { readFileSchema, handleReadFile } from './tools/read-file.js';
|
|
12
|
+
import { manageSitesSchema, handleManageSites } from './tools/manage-sites.js';
|
|
13
|
+
import { manageDomainsSchema, handleManageDomains } from './tools/manage-domains.js';
|
|
14
|
+
import { manageBackupsSchema, handleManageBackups } from './tools/manage-backups.js';
|
|
15
|
+
import { manageNginxConfigSchema, saveFileSchema, handleManageNginxConfig, handleSaveFile, } from './tools/manage-nginx-config.js';
|
|
16
|
+
/**
|
|
17
|
+
* BT_MODE 环境变量控制工具集模式:
|
|
18
|
+
* readonly(默认):只提供查询/日志类工具,AI 无法执行任何写操作,安全。
|
|
19
|
+
* full:开放全量工具,包括创建/删除网站、域名管理、备份、文件写入等。
|
|
20
|
+
*/
|
|
21
|
+
const MODE = (process.env.BT_MODE || 'readonly').toLowerCase();
|
|
22
|
+
const IS_FULL = MODE === 'full';
|
|
23
|
+
// ── 只读工具(readonly 和 full 都包含)──────────────────
|
|
24
|
+
const READONLY_TOOLS = [
|
|
25
|
+
{
|
|
26
|
+
name: 'list_sites',
|
|
27
|
+
description: '列出宝塔面板中所有托管的网站,包括域名、根目录、运行状态。查询日志前先用此工具确认网站名称和路径。',
|
|
28
|
+
inputSchema: zodToJsonSchema(listSitesSchema),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'get_nginx_logs',
|
|
32
|
+
description: '【Nginx 层日志 — HTTP 请求记录】读取 Nginx 的访问日志(access)或错误日志(error)。' +
|
|
33
|
+
'记录的是每一条 HTTP 请求:IP、时间、URL、状态码(200/404/499/502)、响应大小、来源页面、UserAgent。' +
|
|
34
|
+
'适合排查:HTTP 状态码异常、流量来源分析、爬虫/攻击识别、Nginx 配置问题、静态资源 404 等。' +
|
|
35
|
+
'注意:此工具【不包含】任何业务逻辑、数据库、接口报错等应用层信息。' +
|
|
36
|
+
'工具会自动在 /www/wwwlogs/ 目录探测日志路径,无需手动填写。',
|
|
37
|
+
inputSchema: zodToJsonSchema(getNginxLogsSchema),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'get_app_logs',
|
|
41
|
+
description: '【应用层日志 — 业务/程序运行记录】读取后端应用程序自身输出的业务日志。' +
|
|
42
|
+
'记录的是代码运行过程中的 INFO/WARN/ERROR 信息:SQL 报错、接口异常、业务逻辑错误、堆栈跟踪等。' +
|
|
43
|
+
'适合排查:业务逻辑 Bug、数据库异常、第三方接口报错、程序崩溃、性能慢查询等。' +
|
|
44
|
+
'注意:此工具【不包含】HTTP 请求记录,那些属于 Nginx 层,应使用 get_nginx_logs。' +
|
|
45
|
+
'支持框架:Laravel、ThinkPHP、Java、Node.js,默认 auto 自动探测所有常见路径。',
|
|
46
|
+
inputSchema: zodToJsonSchema(getAppLogsSchema),
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'get_panel_logs',
|
|
50
|
+
description: '读取宝塔面板自身的操作日志,包括登录记录、配置变更、安装/卸载软件等操作历史。适合审计谁在什么时候操作了面板。',
|
|
51
|
+
inputSchema: zodToJsonSchema(getPanelLogsSchema),
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'get_system_status',
|
|
55
|
+
description: '获取服务器实时状态:CPU 使用率、内存占用、磁盘分区使用情况、网络实时流量、系统负载。适合排查性能问题或确认服务器资源是否充足。',
|
|
56
|
+
inputSchema: zodToJsonSchema(getSystemStatusSchema),
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'read_file',
|
|
60
|
+
description: '读取服务器上任意文件内容(只读)。适合查看 Nginx 配置文件、PHP 配置、应用配置文件、自定义日志路径等。建议配合 last_lines 参数避免读取超大文件。',
|
|
61
|
+
inputSchema: zodToJsonSchema(readFileSchema),
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'get_nginx_config',
|
|
65
|
+
description: '读取指定网站的 Nginx 配置文件(/www/server/panel/vhost/nginx/<域名>.conf)。适合查看反代、SSL、location 规则等配置。只读,不修改。',
|
|
66
|
+
inputSchema: zodToJsonSchema(manageNginxConfigSchema),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'list_domains',
|
|
70
|
+
description: '查询网站绑定的所有域名列表,包括域名、端口、添加时间。',
|
|
71
|
+
inputSchema: zodToJsonSchema(manageDomainsSchema),
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'list_backups',
|
|
75
|
+
description: '查询网站的备份列表,包括备份 ID、文件名、创建时间。',
|
|
76
|
+
inputSchema: zodToJsonSchema(manageBackupsSchema),
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
// ── 全量工具(仅 BT_MODE=full 时开放)──────────────────
|
|
80
|
+
const FULL_TOOLS = [
|
|
81
|
+
{
|
|
82
|
+
name: 'manage_sites',
|
|
83
|
+
description: '【full 模式】网站管理:启用/停用/删除/创建网站,修改备注、到期时间,查询 PHP 版本列表,查看网站防跨站/日志状态。',
|
|
84
|
+
inputSchema: zodToJsonSchema(manageSitesSchema),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'manage_domains',
|
|
88
|
+
description: '【full 模式】域名管理:给网站绑定新域名或删除域名绑定。',
|
|
89
|
+
inputSchema: zodToJsonSchema(manageDomainsSchema),
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'manage_backups',
|
|
93
|
+
description: '【full 模式】备份管理:立即备份网站、删除备份记录。',
|
|
94
|
+
inputSchema: zodToJsonSchema(manageBackupsSchema),
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'save_nginx_config',
|
|
98
|
+
description: '【full 模式】保存 Nginx 配置文件(谨慎!保存后立即生效,错误配置会导致网站无法访问)。',
|
|
99
|
+
inputSchema: zodToJsonSchema(manageNginxConfigSchema),
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'save_file',
|
|
103
|
+
description: '【full 模式】写入/覆盖服务器上的任意文件内容(谨慎!)。',
|
|
104
|
+
inputSchema: zodToJsonSchema(saveFileSchema),
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
const TOOLS = IS_FULL ? [...READONLY_TOOLS, ...FULL_TOOLS] : READONLY_TOOLS;
|
|
108
|
+
const server = new Server({ name: 'bt-mcp', version: '0.2.0' }, { capabilities: { tools: {} } });
|
|
109
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
110
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
111
|
+
const { name, arguments: args } = request.params;
|
|
112
|
+
try {
|
|
113
|
+
let text;
|
|
114
|
+
switch (name) {
|
|
115
|
+
case 'list_sites': {
|
|
116
|
+
text = await handleListSites(listSitesSchema.parse(args));
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case 'get_nginx_logs': {
|
|
120
|
+
text = await handleGetNginxLogs(getNginxLogsSchema.parse(args));
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case 'get_app_logs': {
|
|
124
|
+
text = await handleGetAppLogs(getAppLogsSchema.parse(args));
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'get_panel_logs': {
|
|
128
|
+
text = await handleGetPanelLogs(getPanelLogsSchema.parse(args));
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'get_system_status': {
|
|
132
|
+
text = await handleGetSystemStatus(getSystemStatusSchema.parse(args));
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case 'read_file': {
|
|
136
|
+
text = await handleReadFile(readFileSchema.parse(args));
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
// 只读版本的配置/域名/备份查询
|
|
140
|
+
case 'get_nginx_config': {
|
|
141
|
+
const input = manageNginxConfigSchema.parse({ ...args, action: 'get' });
|
|
142
|
+
text = await handleManageNginxConfig(input);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case 'list_domains': {
|
|
146
|
+
const input = manageDomainsSchema.parse({ ...args, action: 'list' });
|
|
147
|
+
text = await handleManageDomains(input);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case 'list_backups': {
|
|
151
|
+
const input = manageBackupsSchema.parse({ ...args, action: 'list' });
|
|
152
|
+
text = await handleManageBackups(input);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
// full 模式专用工具
|
|
156
|
+
case 'manage_sites': {
|
|
157
|
+
if (!IS_FULL)
|
|
158
|
+
throw new Error('此工具需要 BT_MODE=full 才能使用,当前为只读模式');
|
|
159
|
+
text = await handleManageSites(manageSitesSchema.parse(args));
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case 'manage_domains': {
|
|
163
|
+
if (!IS_FULL)
|
|
164
|
+
throw new Error('此工具需要 BT_MODE=full 才能使用,当前为只读模式');
|
|
165
|
+
text = await handleManageDomains(manageDomainsSchema.parse(args));
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case 'manage_backups': {
|
|
169
|
+
if (!IS_FULL)
|
|
170
|
+
throw new Error('此工具需要 BT_MODE=full 才能使用,当前为只读模式');
|
|
171
|
+
text = await handleManageBackups(manageBackupsSchema.parse(args));
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'save_nginx_config': {
|
|
175
|
+
if (!IS_FULL)
|
|
176
|
+
throw new Error('此工具需要 BT_MODE=full 才能使用,当前为只读模式');
|
|
177
|
+
text = await handleManageNginxConfig(manageNginxConfigSchema.parse(args));
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
case 'save_file': {
|
|
181
|
+
if (!IS_FULL)
|
|
182
|
+
throw new Error('此工具需要 BT_MODE=full 才能使用,当前为只读模式');
|
|
183
|
+
text = await handleSaveFile(saveFileSchema.parse(args));
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
default:
|
|
187
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
188
|
+
}
|
|
189
|
+
return { content: [{ type: 'text', text }] };
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
193
|
+
return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
async function main() {
|
|
197
|
+
const transport = new StdioServerTransport();
|
|
198
|
+
await server.connect(transport);
|
|
199
|
+
process.stderr.write(`BT Panel MCP Server running (mode: ${IS_FULL ? 'full' : 'readonly'})\n`);
|
|
200
|
+
}
|
|
201
|
+
process.on('SIGINT', () => process.exit(0));
|
|
202
|
+
process.on('SIGTERM', () => process.exit(0));
|
|
203
|
+
main().catch((err) => {
|
|
204
|
+
process.stderr.write(`Fatal error: ${err}\n`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getAppLogsSchema: z.ZodObject<{
|
|
3
|
+
site_name: z.ZodOptional<z.ZodString>;
|
|
4
|
+
framework: z.ZodDefault<z.ZodEnum<["laravel", "thinkphp", "java", "nodejs", "auto"]>>;
|
|
5
|
+
last_lines: z.ZodDefault<z.ZodNumber>;
|
|
6
|
+
log_path: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
last_lines: number;
|
|
9
|
+
framework: "laravel" | "thinkphp" | "java" | "nodejs" | "auto";
|
|
10
|
+
site_name?: string | undefined;
|
|
11
|
+
log_path?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
site_name?: string | undefined;
|
|
14
|
+
last_lines?: number | undefined;
|
|
15
|
+
log_path?: string | undefined;
|
|
16
|
+
framework?: "laravel" | "thinkphp" | "java" | "nodejs" | "auto" | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type GetAppLogsInput = z.infer<typeof getAppLogsSchema>;
|
|
19
|
+
export declare function handleGetAppLogs(input: GetAppLogsInput): Promise<string>;
|
|
20
|
+
//# sourceMappingURL=get-app-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-logs.d.ts","sourceRoot":"","sources":["../../src/tools/get-app-logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAwB3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AA8D/D,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAgE9E"}
|