record-safer-mcp-server 1.0.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.
Files changed (58) hide show
  1. package/README.md +67 -0
  2. package/dist/api-client.d.ts +110 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +353 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/index.d.ts +7 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +35 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/prompts/index.d.ts +7 -0
  11. package/dist/prompts/index.d.ts.map +1 -0
  12. package/dist/prompts/index.js +91 -0
  13. package/dist/prompts/index.js.map +1 -0
  14. package/dist/resources/index.d.ts +7 -0
  15. package/dist/resources/index.d.ts.map +1 -0
  16. package/dist/resources/index.js +49 -0
  17. package/dist/resources/index.js.map +1 -0
  18. package/dist/tools/devices.d.ts +7 -0
  19. package/dist/tools/devices.d.ts.map +1 -0
  20. package/dist/tools/devices.js +26 -0
  21. package/dist/tools/devices.js.map +1 -0
  22. package/dist/tools/levels.d.ts +7 -0
  23. package/dist/tools/levels.d.ts.map +1 -0
  24. package/dist/tools/levels.js +18 -0
  25. package/dist/tools/levels.js.map +1 -0
  26. package/dist/tools/markers.d.ts +7 -0
  27. package/dist/tools/markers.d.ts.map +1 -0
  28. package/dist/tools/markers.js +36 -0
  29. package/dist/tools/markers.js.map +1 -0
  30. package/dist/tools/monitor.d.ts +7 -0
  31. package/dist/tools/monitor.d.ts.map +1 -0
  32. package/dist/tools/monitor.js +48 -0
  33. package/dist/tools/monitor.js.map +1 -0
  34. package/dist/tools/recording.d.ts +7 -0
  35. package/dist/tools/recording.d.ts.map +1 -0
  36. package/dist/tools/recording.js +36 -0
  37. package/dist/tools/recording.js.map +1 -0
  38. package/dist/tools/settings.d.ts +7 -0
  39. package/dist/tools/settings.d.ts.map +1 -0
  40. package/dist/tools/settings.js +33 -0
  41. package/dist/tools/settings.js.map +1 -0
  42. package/dist/tools/storage.d.ts +7 -0
  43. package/dist/tools/storage.d.ts.map +1 -0
  44. package/dist/tools/storage.js +21 -0
  45. package/dist/tools/storage.js.map +1 -0
  46. package/dist/tools/system.d.ts +7 -0
  47. package/dist/tools/system.d.ts.map +1 -0
  48. package/dist/tools/system.js +47 -0
  49. package/dist/tools/system.js.map +1 -0
  50. package/dist/types.d.ts +196 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +4 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/utils.d.ts +20 -0
  55. package/dist/utils.d.ts.map +1 -0
  56. package/dist/utils.js +29 -0
  57. package/dist/utils.js.map +1 -0
  58. package/package.json +35 -0
package/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # Record Safer Pro MCP Server
2
+
3
+ [Record Safer Pro](https://www.dadaoaudio.com) 的 Model Context Protocol (MCP) 服务端,让 AI 客户端(如 Claude Desktop、Kiro 等)能够直接控制专业多通道录音软件。
4
+
5
+ 由 **DADAO dsp** 开发维护。
6
+
7
+ ## 功能
8
+
9
+ 通过 MCP 协议提供以下能力:
10
+
11
+ - **设备管理** — 列出音频输入/输出设备,查询设备信号与缓冲区信息
12
+ - **录音控制** — 初始化会话、开始/停止录音、文件分割
13
+ - **电平监控** — 实时获取通道电平数据(dBFS)
14
+ - **监听混音** — 启停监听、调节通道音量/声像/独奏/静音/相位反转/M-S 处理
15
+ - **标记管理** — 添加、重命名、同步录音标记
16
+ - **存储管理** — 列出存储卷和外部驱动器、验证存储路径
17
+ - **系统信息** — 获取系统状态、磁盘空间、检查更新
18
+ - **设置管理** — 读取和更新音频格式、输出路径等系统设置
19
+
20
+ ## 安装与使用
21
+
22
+ ### 通过 npx 直接运行(推荐)
23
+
24
+ 无需安装,在 MCP 客户端配置中添加:
25
+
26
+ ```json
27
+ {
28
+ "mcpServers": {
29
+ "record-safer-pro": {
30
+ "command": "npx",
31
+ "args": ["-y", "record-safer-mcp-server"]
32
+ }
33
+ }
34
+ }
35
+ ```
36
+
37
+ ### 全局安装
38
+
39
+ ```bash
40
+ npm install -g record-safer-mcp-server
41
+ record-safer-mcp-server
42
+ ```
43
+
44
+ ## 前置条件
45
+
46
+ - Node.js >= 18
47
+ - Record Safer Pro 桌面应用正在运行(提供后端 HTTP API)
48
+
49
+ ## 端口发现
50
+
51
+ MCP Server 会自动发现 Record Safer Pro 后端的实际端口:
52
+
53
+ 1. 读取 `~/.record_safer/backend_port` 端口文件(应用启动时自动写入)
54
+ 2. 回退到环境变量 `RECORD_SAFER_URL`
55
+ 3. 回退到默认地址 `http://127.0.0.1:8080`
56
+
57
+ 通常无需手动配置,启动 Record Safer Pro 后直接使用即可。
58
+
59
+ ## 环境变量
60
+
61
+ | 变量 | 说明 | 默认值 |
62
+ |------|------|--------|
63
+ | `RECORD_SAFER_URL` | 后端地址(仅在端口文件不存在时生效) | `http://127.0.0.1:8080` |
64
+
65
+ ## 许可证
66
+
67
+ Copyright © 北京大道创响科技有限公司 (Beijing Dadao Chuangxiang Technology Co., Ltd.)
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Record Safer API Client — 统一 HTTP 客户端适配层
3
+ * 封装与 Backend (record_safer_headless) 的所有 HTTP 通信
4
+ */
5
+ import type { DeviceInfo, BufferSizeInfo, SignalInfo, LevelData, SessionConfig, SessionResult, RecordingOptions, RecordingStartResult, RecordingStopResult, RecordingStatus, OutputPathInfo, AudioFormatInfo, AudioFormatConfig, Settings, MonitorStatus, MixLevels, TrackInfo, MarkerInfo, MarkerResult, VolumeInfo, DriveInfo, ValidationResult, SystemInfo, DiskSpaceInfo, DiskHealthResult, UpdateInfo, UpdateBadge, DownloadProgress, ActivationResult, ActivationStatus, ActivationData, RestoreResult, SplitParams, SplitResult, SplitProgress, TelemetryData } from "./types.js";
6
+ /** API Client 配置 */
7
+ export interface ApiClientConfig {
8
+ baseUrl: string;
9
+ authToken?: string;
10
+ }
11
+ /** Backend HTTP 错误,包含状态码和响应体 */
12
+ export declare class ApiError extends Error {
13
+ readonly statusCode: number;
14
+ readonly responseBody: string;
15
+ constructor(statusCode: number, responseBody: string);
16
+ }
17
+ /**
18
+ * 加载 Auth Token:优先环境变量,其次文件
19
+ * 1. RECORD_SAFER_TOKEN 环境变量
20
+ * 2. ~/.record_safer/auth_token 文件
21
+ */
22
+ export declare function loadAuthToken(): string | null;
23
+ /**
24
+ * 从端口文件读取后端端口号
25
+ * 返回有效端口号(1-65535)或 null
26
+ */
27
+ export declare function readPortFromFile(): number | null;
28
+ /**
29
+ * 按优先级链解析 baseUrl:
30
+ * 1. 端口文件 → http://127.0.0.1:{port}
31
+ * 2. RECORD_SAFER_URL 环境变量
32
+ * 3. 默认 http://127.0.0.1:8080
33
+ */
34
+ export declare function resolveBaseUrl(): string;
35
+ /** Record Safer Backend HTTP 客户端 */
36
+ export declare class RecordSaferClient {
37
+ private readonly explicitBaseUrl;
38
+ private readonly authToken;
39
+ constructor(config?: Partial<ApiClientConfig>);
40
+ private getBaseUrl;
41
+ /**
42
+ * 通用 HTTP 请求方法
43
+ * - 自动附加 Authorization header(当 token 可用时)
44
+ * - 自动设置 Content-Type: application/json(当有 body 时)
45
+ * - HTTP 错误时抛出 ApiError
46
+ */
47
+ request<T>(urlPath: string, options?: RequestInit): Promise<T>;
48
+ listDevices(): Promise<DeviceInfo[]>;
49
+ listOutputDevices(): Promise<DeviceInfo[]>;
50
+ getBufferSizes(deviceId: string): Promise<BufferSizeInfo>;
51
+ getDeviceSignals(deviceId: string): Promise<SignalInfo>;
52
+ getDeviceLevels(deviceId: string): Promise<LevelData>;
53
+ stopLevelMonitoring(): Promise<void>;
54
+ subscribeLevels(): Promise<void>;
55
+ unsubscribeLevels(): Promise<void>;
56
+ disableLevelCallback(): Promise<void>;
57
+ enableLevelCallback(): Promise<void>;
58
+ initializeSession(config: SessionConfig): Promise<SessionResult>;
59
+ resetSession(): Promise<void>;
60
+ startRecording(options?: RecordingOptions): Promise<RecordingStartResult>;
61
+ stopRecording(): Promise<RecordingStopResult>;
62
+ getRecordingStatus(): Promise<RecordingStatus>;
63
+ getOutputPath(): Promise<OutputPathInfo>;
64
+ setOutputPath(outputPath: string): Promise<void>;
65
+ getAudioFormat(): Promise<AudioFormatInfo>;
66
+ setAudioFormat(format: AudioFormatConfig): Promise<void>;
67
+ getSettings(): Promise<Settings>;
68
+ updateSettings(settings: Partial<Settings>): Promise<void>;
69
+ getMonitorStatus(): Promise<MonitorStatus>;
70
+ startMonitor(): Promise<void>;
71
+ stopMonitor(): Promise<void>;
72
+ setMasterVolume(volume: number, pan?: number): Promise<void>;
73
+ getMixLevels(): Promise<MixLevels>;
74
+ setChannelVolume(index: number, volume: number): Promise<void>;
75
+ setChannelPan(index: number, pan: number): Promise<void>;
76
+ toggleChannelSolo(index: number): Promise<void>;
77
+ toggleChannelMute(index: number): Promise<void>;
78
+ setChannelMsProcess(index: number, enabled: boolean): Promise<void>;
79
+ toggleChannelPhaseInvert(index: number): Promise<void>;
80
+ listTracks(): Promise<TrackInfo[]>;
81
+ stopTrack(trackId: string): Promise<void>;
82
+ listMarkers(): Promise<MarkerInfo[]>;
83
+ addMarker(label?: string): Promise<MarkerResult>;
84
+ syncMarkers(): Promise<void>;
85
+ renameMarker(id: string, name: string): Promise<void>;
86
+ renameChannel(id: string, name: string): Promise<void>;
87
+ setChannelColor(id: string, color: string): Promise<void>;
88
+ listVolumes(): Promise<VolumeInfo[]>;
89
+ listExternalDrives(): Promise<DriveInfo[]>;
90
+ validateStoragePath(storagePath: string): Promise<ValidationResult>;
91
+ lockStorage(): Promise<void>;
92
+ unlockStorage(): Promise<void>;
93
+ getSystemInfo(): Promise<SystemInfo>;
94
+ getDiskSpace(): Promise<DiskSpaceInfo>;
95
+ checkDiskHealth(): Promise<DiskHealthResult>;
96
+ checkUpdates(): Promise<UpdateInfo>;
97
+ getUpdateBadge(): Promise<UpdateBadge>;
98
+ installUpdate(): Promise<void>;
99
+ getDownloadProgress(): Promise<DownloadProgress>;
100
+ activateLicense(key: string): Promise<ActivationResult>;
101
+ getActivationStatus(): Promise<ActivationStatus>;
102
+ setActivation(data: ActivationData): Promise<void>;
103
+ restoreLicense(): Promise<RestoreResult>;
104
+ startSplit(params: SplitParams): Promise<SplitResult>;
105
+ getSplitProgress(): Promise<SplitProgress>;
106
+ cancelSplit(): Promise<void>;
107
+ sendTelemetry(data: TelemetryData): Promise<void>;
108
+ shutdown(): Promise<void>;
109
+ }
110
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Record Safer API Client — 统一 HTTP 客户端适配层
3
+ * 封装与 Backend (record_safer_headless) 的所有 HTTP 通信
4
+ */
5
+ import * as fs from "node:fs";
6
+ import * as os from "node:os";
7
+ import * as path from "node:path";
8
+ /** Backend HTTP 错误,包含状态码和响应体 */
9
+ export class ApiError extends Error {
10
+ statusCode;
11
+ responseBody;
12
+ constructor(statusCode, responseBody) {
13
+ super(`HTTP ${statusCode}: ${responseBody}`);
14
+ this.statusCode = statusCode;
15
+ this.responseBody = responseBody;
16
+ this.name = "ApiError";
17
+ }
18
+ }
19
+ /**
20
+ * 加载 Auth Token:优先环境变量,其次文件
21
+ * 1. RECORD_SAFER_TOKEN 环境变量
22
+ * 2. ~/.record_safer/auth_token 文件
23
+ */
24
+ export function loadAuthToken() {
25
+ if (process.env.RECORD_SAFER_TOKEN) {
26
+ return process.env.RECORD_SAFER_TOKEN;
27
+ }
28
+ const tokenPath = path.join(os.homedir(), ".record_safer", "auth_token");
29
+ try {
30
+ const token = fs.readFileSync(tokenPath, "utf-8").trim();
31
+ return token.length > 0 ? token : null;
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /**
38
+ * 从端口文件读取后端端口号
39
+ * 返回有效端口号(1-65535)或 null
40
+ */
41
+ export function readPortFromFile() {
42
+ try {
43
+ const portPath = path.join(os.homedir(), ".record_safer", "backend_port");
44
+ const content = fs.readFileSync(portPath, "utf-8").trim();
45
+ const port = parseInt(content, 10);
46
+ if (Number.isInteger(port) && port >= 1 && port <= 65535) {
47
+ return port;
48
+ }
49
+ return null;
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ /**
56
+ * 按优先级链解析 baseUrl:
57
+ * 1. 端口文件 → http://127.0.0.1:{port}
58
+ * 2. RECORD_SAFER_URL 环境变量
59
+ * 3. 默认 http://127.0.0.1:8080
60
+ */
61
+ export function resolveBaseUrl() {
62
+ const port = readPortFromFile();
63
+ if (port !== null) {
64
+ return `http://127.0.0.1:${port}`;
65
+ }
66
+ return process.env.RECORD_SAFER_URL ?? "http://127.0.0.1:8080";
67
+ }
68
+ /** Record Safer Backend HTTP 客户端 */
69
+ export class RecordSaferClient {
70
+ explicitBaseUrl;
71
+ authToken;
72
+ constructor(config) {
73
+ this.explicitBaseUrl = config?.baseUrl;
74
+ this.authToken = config?.authToken ?? loadAuthToken();
75
+ }
76
+ getBaseUrl() {
77
+ return this.explicitBaseUrl ?? resolveBaseUrl();
78
+ }
79
+ /**
80
+ * 通用 HTTP 请求方法
81
+ * - 自动附加 Authorization header(当 token 可用时)
82
+ * - 自动设置 Content-Type: application/json(当有 body 时)
83
+ * - HTTP 错误时抛出 ApiError
84
+ */
85
+ async request(urlPath, options) {
86
+ const url = `${this.getBaseUrl()}${urlPath}`;
87
+ const headers = new Headers(options?.headers);
88
+ if (this.authToken && this.authToken.length > 0) {
89
+ headers.set("Authorization", `Bearer ${this.authToken}`);
90
+ }
91
+ if (options?.body) {
92
+ headers.set("Content-Type", "application/json");
93
+ }
94
+ const response = await fetch(url, {
95
+ ...options,
96
+ headers,
97
+ });
98
+ if (!response.ok) {
99
+ const body = await response.text();
100
+ throw new ApiError(response.status, body);
101
+ }
102
+ return (await response.json());
103
+ }
104
+ // ===== 设备管理 =====
105
+ async listDevices() {
106
+ return this.request("/api/devices");
107
+ }
108
+ async listOutputDevices() {
109
+ return this.request("/api/devices/outputs");
110
+ }
111
+ async getBufferSizes(deviceId) {
112
+ return this.request(`/api/devices/${deviceId}/buffer-sizes`);
113
+ }
114
+ async getDeviceSignals(deviceId) {
115
+ return this.request(`/api/devices/${deviceId}/signals`);
116
+ }
117
+ async getDeviceLevels(deviceId) {
118
+ return this.request(`/api/devices/${deviceId}/levels`);
119
+ }
120
+ async stopLevelMonitoring() {
121
+ await this.request("/api/devices/levels/stop", { method: "POST" });
122
+ }
123
+ // ===== 电平监控 =====
124
+ async subscribeLevels() {
125
+ await this.request("/api/levels/subscribe", { method: "POST" });
126
+ }
127
+ async unsubscribeLevels() {
128
+ await this.request("/api/levels/unsubscribe", { method: "POST" });
129
+ }
130
+ async disableLevelCallback() {
131
+ await this.request("/api/levels/disable-callback", { method: "POST" });
132
+ }
133
+ async enableLevelCallback() {
134
+ await this.request("/api/levels/enable-callback", { method: "POST" });
135
+ }
136
+ // ===== 会话与录音 =====
137
+ async initializeSession(config) {
138
+ return this.request("/api/session/initialize", {
139
+ method: "POST",
140
+ body: JSON.stringify(config),
141
+ });
142
+ }
143
+ async resetSession() {
144
+ await this.request("/api/session/reset", { method: "POST" });
145
+ }
146
+ async startRecording(options) {
147
+ return this.request("/api/recording/start", {
148
+ method: "POST",
149
+ body: options ? JSON.stringify(options) : undefined,
150
+ });
151
+ }
152
+ async stopRecording() {
153
+ return this.request("/api/recording/stop", { method: "POST" });
154
+ }
155
+ async getRecordingStatus() {
156
+ return this.request("/api/recording/status");
157
+ }
158
+ // ===== 配置 =====
159
+ async getOutputPath() {
160
+ return this.request("/api/config/output-path");
161
+ }
162
+ async setOutputPath(outputPath) {
163
+ await this.request("/api/config/output-path", {
164
+ method: "POST",
165
+ body: JSON.stringify({ path: outputPath }),
166
+ });
167
+ }
168
+ async getAudioFormat() {
169
+ return this.request("/api/config/format");
170
+ }
171
+ async setAudioFormat(format) {
172
+ await this.request("/api/config/format", {
173
+ method: "POST",
174
+ body: JSON.stringify(format),
175
+ });
176
+ }
177
+ async getSettings() {
178
+ return this.request("/api/settings");
179
+ }
180
+ async updateSettings(settings) {
181
+ await this.request("/api/settings", {
182
+ method: "POST",
183
+ body: JSON.stringify(settings),
184
+ });
185
+ }
186
+ // ===== 监听/DSP =====
187
+ async getMonitorStatus() {
188
+ return this.request("/api/monitor/status");
189
+ }
190
+ async startMonitor() {
191
+ await this.request("/api/monitor/start", { method: "POST" });
192
+ }
193
+ async stopMonitor() {
194
+ await this.request("/api/monitor/stop", { method: "POST" });
195
+ }
196
+ async setMasterVolume(volume, pan) {
197
+ await this.request("/api/monitor/master", {
198
+ method: "POST",
199
+ body: JSON.stringify(pan !== undefined ? { volume, pan } : { volume }),
200
+ });
201
+ }
202
+ async getMixLevels() {
203
+ return this.request("/api/monitor/mix-levels");
204
+ }
205
+ async setChannelVolume(index, volume) {
206
+ await this.request(`/api/monitor/channel/${index}/volume`, {
207
+ method: "POST",
208
+ body: JSON.stringify({ volume }),
209
+ });
210
+ }
211
+ async setChannelPan(index, pan) {
212
+ await this.request(`/api/monitor/channel/${index}/pan`, {
213
+ method: "POST",
214
+ body: JSON.stringify({ pan }),
215
+ });
216
+ }
217
+ async toggleChannelSolo(index) {
218
+ await this.request(`/api/monitor/channel/${index}/solo`, { method: "POST" });
219
+ }
220
+ async toggleChannelMute(index) {
221
+ await this.request(`/api/monitor/channel/${index}/mute`, { method: "POST" });
222
+ }
223
+ async setChannelMsProcess(index, enabled) {
224
+ await this.request(`/api/monitor/channel/${index}/ms-process`, {
225
+ method: "POST",
226
+ body: JSON.stringify({ enabled }),
227
+ });
228
+ }
229
+ async toggleChannelPhaseInvert(index) {
230
+ await this.request(`/api/monitor/channel/${index}/phase-invert`, { method: "POST" });
231
+ }
232
+ // ===== 轨道与标记 =====
233
+ async listTracks() {
234
+ return this.request("/api/tracks/available");
235
+ }
236
+ async stopTrack(trackId) {
237
+ await this.request(`/api/tracks/${trackId}/stop`, { method: "POST" });
238
+ }
239
+ async listMarkers() {
240
+ return this.request("/api/markers");
241
+ }
242
+ async addMarker(label) {
243
+ return this.request("/api/markers/add", {
244
+ method: "POST",
245
+ body: label !== undefined ? JSON.stringify({ label }) : undefined,
246
+ });
247
+ }
248
+ async syncMarkers() {
249
+ await this.request("/api/markers/sync", { method: "POST" });
250
+ }
251
+ async renameMarker(id, name) {
252
+ await this.request(`/api/markers/${id}/rename`, {
253
+ method: "POST",
254
+ body: JSON.stringify({ name }),
255
+ });
256
+ }
257
+ async renameChannel(id, name) {
258
+ await this.request(`/api/channels/${id}/rename`, {
259
+ method: "POST",
260
+ body: JSON.stringify({ name }),
261
+ });
262
+ }
263
+ async setChannelColor(id, color) {
264
+ await this.request(`/api/channels/${id}/color`, {
265
+ method: "POST",
266
+ body: JSON.stringify({ color }),
267
+ });
268
+ }
269
+ // ===== 存储 =====
270
+ async listVolumes() {
271
+ return this.request("/api/storage/volumes");
272
+ }
273
+ async listExternalDrives() {
274
+ return this.request("/api/storage/external");
275
+ }
276
+ async validateStoragePath(storagePath) {
277
+ return this.request("/api/storage/validate", {
278
+ method: "POST",
279
+ body: JSON.stringify({ path: storagePath }),
280
+ });
281
+ }
282
+ async lockStorage() {
283
+ await this.request("/api/storage/lock", { method: "POST" });
284
+ }
285
+ async unlockStorage() {
286
+ await this.request("/api/storage/unlock", { method: "POST" });
287
+ }
288
+ // ===== 系统 =====
289
+ async getSystemInfo() {
290
+ return this.request("/api/system/info");
291
+ }
292
+ async getDiskSpace() {
293
+ return this.request("/api/system/disk-space");
294
+ }
295
+ async checkDiskHealth() {
296
+ return this.request("/api/system/disk-health", { method: "POST" });
297
+ }
298
+ async checkUpdates() {
299
+ return this.request("/api/system/update");
300
+ }
301
+ async getUpdateBadge() {
302
+ return this.request("/api/system/update-badge");
303
+ }
304
+ async installUpdate() {
305
+ await this.request("/api/system/install-update", { method: "POST" });
306
+ }
307
+ async getDownloadProgress() {
308
+ return this.request("/api/system/download-progress");
309
+ }
310
+ // ===== 激活 =====
311
+ async activateLicense(key) {
312
+ return this.request("/api/activation/activate", {
313
+ method: "POST",
314
+ body: JSON.stringify({ key }),
315
+ });
316
+ }
317
+ async getActivationStatus() {
318
+ return this.request("/api/activation/status");
319
+ }
320
+ async setActivation(data) {
321
+ await this.request("/api/activation/set", {
322
+ method: "POST",
323
+ body: JSON.stringify(data),
324
+ });
325
+ }
326
+ async restoreLicense() {
327
+ return this.request("/api/activation/restore", { method: "POST" });
328
+ }
329
+ // ===== 工具 =====
330
+ async startSplit(params) {
331
+ return this.request("/api/tools/split", {
332
+ method: "POST",
333
+ body: JSON.stringify(params),
334
+ });
335
+ }
336
+ async getSplitProgress() {
337
+ return this.request("/api/tools/split/progress");
338
+ }
339
+ async cancelSplit() {
340
+ await this.request("/api/tools/split/cancel", { method: "POST" });
341
+ }
342
+ // ===== 系统控制 =====
343
+ async sendTelemetry(data) {
344
+ await this.request("/api/telemetry/recording-start", {
345
+ method: "POST",
346
+ body: JSON.stringify(data),
347
+ });
348
+ }
349
+ async shutdown() {
350
+ await this.request("/api/shutdown", { method: "POST" });
351
+ }
352
+ }
353
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Record Safer Pro MCP Server — 入口文件
4
+ * 专业多通道录音软件 AI 接口 / Professional multi-channel recording software AI interface
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Record Safer Pro MCP Server — 入口文件
4
+ * 专业多通道录音软件 AI 接口 / Professional multi-channel recording software AI interface
5
+ */
6
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
+ import { registerDeviceTools } from "./tools/devices.js";
9
+ import { registerLevelTools } from "./tools/levels.js";
10
+ import { registerRecordingTools } from "./tools/recording.js";
11
+ import { registerSettingsTools } from "./tools/settings.js";
12
+ import { registerMonitorTools } from "./tools/monitor.js";
13
+ import { registerMarkerTools } from "./tools/markers.js";
14
+ import { registerStorageTools } from "./tools/storage.js";
15
+ import { registerSystemTools } from "./tools/system.js";
16
+ import { registerResources } from "./resources/index.js";
17
+ import { registerPrompts } from "./prompts/index.js";
18
+ const server = new McpServer({
19
+ name: "record-safer-pro",
20
+ version: "1.0.0",
21
+ description: "Record Safer Pro MCP Server — 专业多通道录音软件 AI 接口 / Professional multi-channel recording software AI interface",
22
+ });
23
+ registerDeviceTools(server);
24
+ registerLevelTools(server);
25
+ registerRecordingTools(server);
26
+ registerSettingsTools(server);
27
+ registerMonitorTools(server);
28
+ registerMarkerTools(server);
29
+ registerStorageTools(server);
30
+ registerSystemTools(server);
31
+ registerResources(server);
32
+ registerPrompts(server);
33
+ const transport = new StdioServerTransport();
34
+ await server.connect(transport);
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;IAChB,WAAW,EACT,4GAA4G;CAC/G,CAAC,CAAC;AAEH,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;AAExB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Prompts — 预定义提示模板
3
+ * MCP Prompts — Predefined prompt templates
4
+ */
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerPrompts(server: McpServer): void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAyGhD"}