mpv-mcp-server 1.0.0 → 1.1.1

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 CHANGED
@@ -110,6 +110,15 @@ All configuration is via environment variables. Everything has sensible defaults
110
110
 
111
111
  YouTube tools require [yt-dlp](https://github.com/yt-dlp/yt-dlp) on your PATH. Audio downloads also require [ffmpeg](https://ffmpeg.org/).
112
112
 
113
+ ### Metadata
114
+
115
+ | Tool | Description |
116
+ |---|---|
117
+ | `mpv_info` | Get metadata (artist, title, album, genre) for the current track |
118
+ | `mpv_tag` | Write metadata tags to a file using ffmpeg |
119
+
120
+ `mpv_tag` infers artist/title from the "Artist - Title" filename pattern if not provided. Requires [ffmpeg](https://ffmpeg.org/).
121
+
113
122
  ## How It Works
114
123
 
115
124
  The server communicates with mpv via its [JSON IPC protocol](https://mpv.io/manual/master/#json-ipc). On Windows this uses a named pipe, on macOS/Linux a Unix domain socket. If mpv isn't running, the server spawns it automatically in idle mode. The mpv process is detached, so it keeps playing even if the MCP server exits.
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ import { registerVolumeTool } from "./tools/volume.js";
13
13
  import { registerPlaylistTools } from "./tools/playlist.js";
14
14
  import { registerBrowseTool } from "./tools/browse.js";
15
15
  import { registerYoutubeTools } from "./tools/youtube.js";
16
+ import { registerMetadataTools } from "./tools/metadata.js";
16
17
  // Services
17
18
  const processManager = new MpvProcessManager();
18
19
  const ipc = new MpvIPC(processManager);
@@ -32,6 +33,7 @@ registerVolumeTool(server, ipc);
32
33
  registerPlaylistTools(server, ipc, scanner);
33
34
  registerBrowseTool(server, scanner);
34
35
  registerYoutubeTools(server, ipc, scanner);
36
+ registerMetadataTools(server, ipc, scanner);
35
37
  // Cleanup on exit
36
38
  function cleanup() {
37
39
  ipc.disconnect();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,WAAW;AACX,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAC/C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;AAEnC,SAAS;AACT,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACvC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACnC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9B,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChC,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC5C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAE3C,kBAAkB;AAClB,SAAS,OAAO;IACd,GAAG,CAAC,UAAU,EAAE,CAAC;AACnB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,WAAW;AACX,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAC/C,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;AAEnC,SAAS;AACT,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACvC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACnC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9B,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChC,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC5C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3C,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAE5C,kBAAkB;AAClB,SAAS,OAAO;IACd,GAAG,CAAC,UAAU,EAAE,CAAC;AACnB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MpvIPC } from "../services/mpv-ipc.js";
3
+ import type { MediaScanner } from "../services/media-scanner.js";
4
+ export declare function registerMetadataTools(server: McpServer, ipc: MpvIPC, scanner: MediaScanner): void;
@@ -0,0 +1,241 @@
1
+ import { execFile } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { basename, extname, normalize } from "node:path";
4
+ import { z } from "zod";
5
+ export function registerMetadataTools(server, ipc, scanner) {
6
+ server.registerTool("mpv_info", {
7
+ title: "Track Info",
8
+ description: "Get metadata (artist, title, album, genre, etc.) for the currently playing track.",
9
+ inputSchema: {},
10
+ annotations: {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ idempotentHint: true,
14
+ openWorldHint: false,
15
+ },
16
+ }, async () => {
17
+ try {
18
+ const idle = await ipc.getProperty("idle-active");
19
+ if (idle) {
20
+ return { content: [{ type: "text", text: "Nothing is playing." }] };
21
+ }
22
+ const metadata = (await ipc.getProperty("metadata").catch(() => null));
23
+ const filename = (await ipc.getProperty("filename").catch(() => null));
24
+ const path = (await ipc.getProperty("path").catch(() => null));
25
+ const lines = [];
26
+ if (filename) {
27
+ lines.push(`File: ${filename}`);
28
+ }
29
+ if (metadata && Object.keys(metadata).length > 0) {
30
+ lines.push("");
31
+ lines.push("Metadata:");
32
+ const keyOrder = ["artist", "title", "album", "genre", "date", "track", "comment"];
33
+ const seen = new Set();
34
+ for (const key of keyOrder) {
35
+ const val = findKey(metadata, key);
36
+ if (val) {
37
+ lines.push(` ${capitalize(key)}: ${val}`);
38
+ seen.add(key.toLowerCase());
39
+ }
40
+ }
41
+ for (const [key, val] of Object.entries(metadata)) {
42
+ if (!seen.has(key.toLowerCase())) {
43
+ lines.push(` ${capitalize(key)}: ${val}`);
44
+ }
45
+ }
46
+ }
47
+ else {
48
+ lines.push("");
49
+ lines.push("No embedded metadata found.");
50
+ if (filename) {
51
+ const parsed = parseFilename(filename);
52
+ if (parsed) {
53
+ lines.push("");
54
+ lines.push("Inferred from filename:");
55
+ lines.push(` Artist: ${parsed.artist}`);
56
+ lines.push(` Title: ${parsed.title}`);
57
+ }
58
+ }
59
+ lines.push("");
60
+ lines.push("Use mpv_tag to add metadata to this file.");
61
+ }
62
+ return { content: [{ type: "text", text: lines.join("\n") }] };
63
+ }
64
+ catch {
65
+ return {
66
+ content: [{ type: "text", text: "mpv is not running." }],
67
+ isError: true,
68
+ };
69
+ }
70
+ });
71
+ server.registerTool("mpv_tag", {
72
+ title: "Tag File",
73
+ description: "Write metadata tags to a media file using ffmpeg. Can target the currently playing file or a file by search term. Infers artist/title from the filename if not provided.",
74
+ inputSchema: {
75
+ query: z
76
+ .string()
77
+ .optional()
78
+ .describe("File path or search term. Omit to tag the currently playing file."),
79
+ artist: z.string().optional().describe("Artist name"),
80
+ title: z.string().optional().describe("Track title"),
81
+ album: z.string().optional().describe("Album name"),
82
+ genre: z.string().optional().describe("Genre (e.g. Rock, Jazz, Metal)"),
83
+ date: z.string().optional().describe("Year or date (e.g. 1978)"),
84
+ },
85
+ annotations: {
86
+ readOnlyHint: false,
87
+ destructiveHint: false,
88
+ idempotentHint: true,
89
+ openWorldHint: false,
90
+ },
91
+ }, async ({ query, artist, title, album, genre, date }) => {
92
+ try {
93
+ let filePath = null;
94
+ if (query) {
95
+ const results = await scanner.search(query, 1);
96
+ if (results.length === 0) {
97
+ return {
98
+ content: [{ type: "text", text: `No files matching "${query}" found.` }],
99
+ isError: true,
100
+ };
101
+ }
102
+ filePath = results[0].path;
103
+ }
104
+ else {
105
+ // Tag currently playing file
106
+ filePath = (await ipc.getProperty("path").catch(() => null));
107
+ if (!filePath) {
108
+ return {
109
+ content: [{ type: "text", text: "Nothing is playing. Specify a file with the query parameter." }],
110
+ isError: true,
111
+ };
112
+ }
113
+ }
114
+ if (!existsSync(filePath)) {
115
+ return {
116
+ content: [{ type: "text", text: `File not found: ${filePath}` }],
117
+ isError: true,
118
+ };
119
+ }
120
+ // Check if this file is currently playing — can't tag a locked file
121
+ const currentPath = (await ipc.getProperty("path").catch(() => null));
122
+ if (currentPath && normalize(currentPath) === normalize(filePath)) {
123
+ return {
124
+ content: [
125
+ {
126
+ type: "text",
127
+ text: `Cannot tag "${basename(filePath)}" — it is currently playing. Skip to another track first, then try again.`,
128
+ },
129
+ ],
130
+ isError: true,
131
+ };
132
+ }
133
+ // Infer artist/title from filename if not provided
134
+ const parsed = parseFilename(basename(filePath));
135
+ const finalArtist = artist ?? parsed?.artist;
136
+ const finalTitle = title ?? parsed?.title;
137
+ const args = ["-i", filePath, "-c", "copy"];
138
+ let tagCount = 0;
139
+ if (finalArtist) {
140
+ args.push("-metadata", `artist=${finalArtist}`);
141
+ tagCount++;
142
+ }
143
+ if (finalTitle) {
144
+ args.push("-metadata", `title=${finalTitle}`);
145
+ tagCount++;
146
+ }
147
+ if (album) {
148
+ args.push("-metadata", `album=${album}`);
149
+ tagCount++;
150
+ }
151
+ if (genre) {
152
+ args.push("-metadata", `genre=${genre}`);
153
+ tagCount++;
154
+ }
155
+ if (date) {
156
+ args.push("-metadata", `date=${date}`);
157
+ tagCount++;
158
+ }
159
+ if (tagCount === 0) {
160
+ return {
161
+ content: [{ type: "text", text: "No tags to write. Provide at least one of: artist, title, album, genre, date." }],
162
+ isError: true,
163
+ };
164
+ }
165
+ // Write to temp file then replace original
166
+ const ext = extname(filePath);
167
+ const tmpPath = filePath.replace(ext, `.tmp${ext}`);
168
+ args.push("-y", tmpPath);
169
+ await runFfmpeg(args);
170
+ // Replace original with tagged version
171
+ const { rename } = await import("node:fs/promises");
172
+ await rename(tmpPath, filePath);
173
+ const tags = [];
174
+ if (finalArtist)
175
+ tags.push(`Artist: ${finalArtist}`);
176
+ if (finalTitle)
177
+ tags.push(`Title: ${finalTitle}`);
178
+ if (album)
179
+ tags.push(`Album: ${album}`);
180
+ if (genre)
181
+ tags.push(`Genre: ${genre}`);
182
+ if (date)
183
+ tags.push(`Date: ${date}`);
184
+ const name = basename(filePath);
185
+ return {
186
+ content: [
187
+ {
188
+ type: "text",
189
+ text: `Tagged ${name}:\n${tags.map((t) => ` ${t}`).join("\n")}`,
190
+ },
191
+ ],
192
+ };
193
+ }
194
+ catch (err) {
195
+ return {
196
+ content: [
197
+ {
198
+ type: "text",
199
+ text: `Tagging failed: ${err instanceof Error ? err.message : err}`,
200
+ },
201
+ ],
202
+ isError: true,
203
+ };
204
+ }
205
+ });
206
+ }
207
+ /** Parse "Artist - Title" from a filename, cleaning yt-dlp underscores */
208
+ function parseFilename(filename) {
209
+ const name = filename.replace(/\.[^.]+$/, ""); // strip extension
210
+ const match = name.match(/^(.+?)\s*-\s*(.+)$/);
211
+ if (!match)
212
+ return null;
213
+ return {
214
+ artist: match[1].trim().replace(/_/g, " "),
215
+ title: match[2].trim().replace(/_/g, " "),
216
+ };
217
+ }
218
+ function findKey(obj, key) {
219
+ const lower = key.toLowerCase();
220
+ for (const [k, v] of Object.entries(obj)) {
221
+ if (k.toLowerCase() === lower)
222
+ return v;
223
+ }
224
+ return undefined;
225
+ }
226
+ function capitalize(s) {
227
+ return s.charAt(0).toUpperCase() + s.slice(1);
228
+ }
229
+ function runFfmpeg(args) {
230
+ return new Promise((resolve, reject) => {
231
+ execFile("ffmpeg", args, { timeout: 30_000 }, (err, stdout, stderr) => {
232
+ if (err) {
233
+ reject(new Error(stderr || err.message));
234
+ }
235
+ else {
236
+ resolve(stdout);
237
+ }
238
+ });
239
+ });
240
+ }
241
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,GAAW,EACX,OAAqB;IAErB,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,mFAAmF;QACrF,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC/E,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAuB,CAAC;YAC7F,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAkB,CAAC;YACxF,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAkB,CAAC;YAEhF,MAAM,KAAK,GAAa,EAAE,CAAC;YAE3B,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACxB,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACnF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;gBAE/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACnC,IAAI,GAAG,EAAE,CAAC;wBACR,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;wBAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;wBACjC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC1C,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACvC,IAAI,MAAM,EAAE,CAAC;wBACX,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBACtC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;wBACzC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;gBACjE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,0KAA0K;QAC5K,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mEAAmE,CAAC;YAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACvE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACjE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,IAAI,QAAQ,GAAkB,IAAI,CAAC;YAEnC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,KAAK,UAAU,EAAE,CAAC;wBACjF,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAkB,CAAC;gBAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAAC;wBAC1G,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,QAAQ,EAAE,EAAE,CAAC;oBACzE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,oEAAoE;YACpE,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAkB,CAAC;YACvF,IAAI,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,eAAe,QAAQ,CAAC,QAAQ,CAAC,2EAA2E;yBACnH;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,mDAAmD;YACnD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,EAAE,MAAM,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC;YAE1C,MAAM,IAAI,GAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAEtD,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,WAAW,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,WAAW,EAAE,CAAC,CAAC;gBAAC,QAAQ,EAAE,CAAC;YAAC,CAAC;YACjF,IAAI,UAAU,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;gBAAC,QAAQ,EAAE,CAAC;YAAC,CAAC;YAC9E,IAAI,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;gBAAC,QAAQ,EAAE,CAAC;YAAC,CAAC;YACpE,IAAI,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;gBAAC,QAAQ,EAAE,CAAC;YAAC,CAAC;YACpE,IAAI,IAAI,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;gBAAC,QAAQ,EAAE,CAAC;YAAC,CAAC;YAEjE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,+EAA+E,EAAE,CAAC;oBAC3H,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,2CAA2C;YAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEzB,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YAEtB,uCAAuC;YACvC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACpD,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEhC,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,WAAW;gBAAE,IAAI,CAAC,IAAI,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;YACrD,IAAI,UAAU;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;YAClD,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAErC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACjE;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE;qBACpE;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,GAAgB,EAAE,GAAW;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACpE,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "mpv-mcp-server",
3
- "version": "1.0.0",
3
+ "mcpName": "io.github.arijit-gogoi/mpv-mcp-server",
4
+ "version": "1.1.1",
4
5
  "description": "MCP server for controlling mpv media player — playback, playlists, YouTube streaming and downloading",
5
6
  "type": "module",
6
7
  "main": "dist/index.js",