@kajidog/mcp-tts-voicevox 0.3.1 → 0.5.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.ja.md +41 -1
- package/README.md +41 -1
- package/dist/config.js +5 -12
- package/dist/config.js.map +1 -1
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +32 -18
- package/dist/http.js.map +1 -1
- package/dist/index.js +52 -88
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +34 -53
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +20 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +22 -0
- package/dist/session.js.map +1 -0
- package/dist/stdio.js +3 -5
- package/dist/stdio.js.map +1 -1
- package/package.json +15 -13
- /package/scripts/{fix-permissions.js → fix-permissions.cjs} +0 -0
package/README.ja.md
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
VOICEVOX を使用した MCP テキスト読み上げサーバー
|
|
6
6
|
|
|
7
|
+
> 🎮 **[ブラウザデモを試す](https://kajidog.github.io/mcp-tts-voicevox/)** — VoicevoxClient をブラウザで直接テスト
|
|
8
|
+
|
|
7
9
|
## 何ができるか
|
|
8
10
|
|
|
9
11
|
- **AI アシスタントに喋らせる** — Claude Desktop などの MCP クライアントからテキストを読み上げ
|
|
@@ -15,7 +17,7 @@ VOICEVOX を使用した MCP テキスト読み上げサーバー
|
|
|
15
17
|
|
|
16
18
|
### 必要なもの
|
|
17
19
|
|
|
18
|
-
- Node.js 18.0.0
|
|
20
|
+
- Node.js 18.0.0 以上(または Bun)
|
|
19
21
|
- [VOICEVOX Engine](https://voicevox.hiroshiba.jp/)(起動しておく)
|
|
20
22
|
- ffplay(任意・推奨)
|
|
21
23
|
|
|
@@ -86,6 +88,11 @@ ffplay -version
|
|
|
86
88
|
}
|
|
87
89
|
```
|
|
88
90
|
|
|
91
|
+
> 💡 Bun を使う場合は `npx` を `bunx` に置き換えるだけでOK:
|
|
92
|
+
> ```json
|
|
93
|
+
> "command": "bunx", "args": ["@kajidog/mcp-tts-voicevox"]
|
|
94
|
+
> ```
|
|
95
|
+
|
|
89
96
|
**3. Claude Desktop を再起動**
|
|
90
97
|
|
|
91
98
|
これだけで Claude に「〇〇と喋って」と頼めば喋ってくれます!
|
|
@@ -259,6 +266,37 @@ $env:MCP_HTTP_MODE='true'; $env:MCP_HTTP_PORT='3000'; npx @kajidog/mcp-tts-voice
|
|
|
259
266
|
}
|
|
260
267
|
```
|
|
261
268
|
|
|
269
|
+
### プロジェクトごとの話者設定
|
|
270
|
+
|
|
271
|
+
Claude Code では `.mcp.json` にカスタムヘッダーを設定することで、プロジェクトごとに異なるデフォルト話者を設定できます:
|
|
272
|
+
|
|
273
|
+
| ヘッダー | 説明 |
|
|
274
|
+
|---------|------|
|
|
275
|
+
| `X-Voicevox-Speaker` | このプロジェクトのデフォルト話者 ID |
|
|
276
|
+
|
|
277
|
+
**`.mcp.json` の例:**
|
|
278
|
+
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"mcpServers": {
|
|
282
|
+
"tts": {
|
|
283
|
+
"type": "http",
|
|
284
|
+
"url": "http://localhost:3000/mcp",
|
|
285
|
+
"headers": {
|
|
286
|
+
"X-Voicevox-Speaker": "113"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
これにより、プロジェクトごとに自動的に異なる音声キャラクターを使い分けることができます。
|
|
294
|
+
|
|
295
|
+
**優先順位:**
|
|
296
|
+
1. ツール呼び出し時の `speaker` パラメータ(最高)
|
|
297
|
+
2. `X-Voicevox-Speaker` ヘッダーによるプロジェクトデフォルト
|
|
298
|
+
3. グローバルな `VOICEVOX_DEFAULT_SPEAKER` 設定(最低)
|
|
299
|
+
|
|
262
300
|
</details>
|
|
263
301
|
|
|
264
302
|
<details>
|
|
@@ -373,6 +411,8 @@ pnpm install
|
|
|
373
411
|
| `pnpm lint` | Lint 実行 |
|
|
374
412
|
| `pnpm dev` | 開発サーバー起動 |
|
|
375
413
|
| `pnpm dev:stdio` | Stdio モードで開発 |
|
|
414
|
+
| `pnpm dev:bun` | Bun で開発サーバー起動 |
|
|
415
|
+
| `pnpm dev:bun:http` | Bun で HTTP 開発サーバー起動 |
|
|
376
416
|
|
|
377
417
|
</details>
|
|
378
418
|
|
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
A text-to-speech MCP server using VOICEVOX
|
|
6
6
|
|
|
7
|
+
> 🎮 **[Try the Browser Demo](https://kajidog.github.io/mcp-tts-voicevox/)** — Test VoicevoxClient directly in your browser
|
|
8
|
+
|
|
7
9
|
## What You Can Do
|
|
8
10
|
|
|
9
11
|
- **Make your AI assistant speak** — Text-to-speech from MCP clients like Claude Desktop
|
|
@@ -15,7 +17,7 @@ A text-to-speech MCP server using VOICEVOX
|
|
|
15
17
|
|
|
16
18
|
### Requirements
|
|
17
19
|
|
|
18
|
-
- Node.js 18.0.0 or higher
|
|
20
|
+
- Node.js 18.0.0 or higher (or [Bun](https://bun.sh/))
|
|
19
21
|
- [VOICEVOX Engine](https://voicevox.hiroshiba.jp/) (must be running)
|
|
20
22
|
- ffplay (optional, recommended)
|
|
21
23
|
|
|
@@ -86,6 +88,11 @@ Config file location:
|
|
|
86
88
|
}
|
|
87
89
|
```
|
|
88
90
|
|
|
91
|
+
> 💡 Bun を使う場合は `npx` を `bunx` に置き換えるだけでOK:
|
|
92
|
+
> ```json
|
|
93
|
+
> "command": "bunx", "args": ["@kajidog/mcp-tts-voicevox"]
|
|
94
|
+
> ```
|
|
95
|
+
|
|
89
96
|
**3. Restart Claude Desktop**
|
|
90
97
|
|
|
91
98
|
That's it! Ask Claude to "say hello" and it will speak!
|
|
@@ -259,6 +266,37 @@ $env:MCP_HTTP_MODE='true'; $env:MCP_HTTP_PORT='3000'; npx @kajidog/mcp-tts-voice
|
|
|
259
266
|
}
|
|
260
267
|
```
|
|
261
268
|
|
|
269
|
+
### Per-Project Speaker Settings
|
|
270
|
+
|
|
271
|
+
With Claude Code, you can configure different default speakers per project using custom headers in `.mcp.json`:
|
|
272
|
+
|
|
273
|
+
| Header | Description |
|
|
274
|
+
|--------|-------------|
|
|
275
|
+
| `X-Voicevox-Speaker` | Default speaker ID for this project |
|
|
276
|
+
|
|
277
|
+
**Example `.mcp.json`:**
|
|
278
|
+
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"mcpServers": {
|
|
282
|
+
"tts": {
|
|
283
|
+
"type": "http",
|
|
284
|
+
"url": "http://localhost:3000/mcp",
|
|
285
|
+
"headers": {
|
|
286
|
+
"X-Voicevox-Speaker": "113"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
This allows each project to use a different voice character automatically.
|
|
294
|
+
|
|
295
|
+
**Priority order:**
|
|
296
|
+
1. Explicit `speaker` parameter in tool call (highest)
|
|
297
|
+
2. Project default from `X-Voicevox-Speaker` header
|
|
298
|
+
3. Global `VOICEVOX_DEFAULT_SPEAKER` setting (lowest)
|
|
299
|
+
|
|
262
300
|
</details>
|
|
263
301
|
|
|
264
302
|
<details>
|
|
@@ -373,6 +411,8 @@ pnpm install
|
|
|
373
411
|
| `pnpm lint` | Run lint |
|
|
374
412
|
| `pnpm dev` | Start dev server |
|
|
375
413
|
| `pnpm dev:stdio` | Dev with stdio mode |
|
|
414
|
+
| `pnpm dev:bun` | Start dev server with Bun |
|
|
415
|
+
| `pnpm dev:bun:http` | Start HTTP dev server with Bun |
|
|
376
416
|
|
|
377
417
|
</details>
|
|
378
418
|
|
package/dist/config.js
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseCliArgs = parseCliArgs;
|
|
4
|
-
exports.parseEnvVars = parseEnvVars;
|
|
5
|
-
exports.getConfig = getConfig;
|
|
6
|
-
exports.getCachedConfig = getCachedConfig;
|
|
7
|
-
exports.resetConfigCache = resetConfigCache;
|
|
8
1
|
// デフォルト設定
|
|
9
2
|
const defaultConfig = {
|
|
10
3
|
voicevoxUrl: 'http://localhost:50021',
|
|
@@ -27,7 +20,7 @@ const defaultConfig = {
|
|
|
27
20
|
/**
|
|
28
21
|
* CLI引数をパースする
|
|
29
22
|
*/
|
|
30
|
-
function parseCliArgs(argv = process.argv.slice(2)) {
|
|
23
|
+
export function parseCliArgs(argv = process.argv.slice(2)) {
|
|
31
24
|
const config = {};
|
|
32
25
|
for (let i = 0; i < argv.length; i++) {
|
|
33
26
|
const arg = argv[i];
|
|
@@ -124,7 +117,7 @@ function parseCliArgs(argv = process.argv.slice(2)) {
|
|
|
124
117
|
/**
|
|
125
118
|
* 環境変数から設定を読み込む
|
|
126
119
|
*/
|
|
127
|
-
function parseEnvVars(env = process.env) {
|
|
120
|
+
export function parseEnvVars(env = process.env) {
|
|
128
121
|
const config = {};
|
|
129
122
|
if (env.VOICEVOX_URL) {
|
|
130
123
|
config.voicevoxUrl = env.VOICEVOX_URL;
|
|
@@ -186,7 +179,7 @@ function filterUndefined(obj) {
|
|
|
186
179
|
/**
|
|
187
180
|
* 設定を取得する(優先順位: CLI引数 > 環境変数 > デフォルト値)
|
|
188
181
|
*/
|
|
189
|
-
function getConfig(argv, env) {
|
|
182
|
+
export function getConfig(argv, env) {
|
|
190
183
|
const cliConfig = parseCliArgs(argv);
|
|
191
184
|
const envConfig = parseEnvVars(env);
|
|
192
185
|
return {
|
|
@@ -200,7 +193,7 @@ let cachedConfig = null;
|
|
|
200
193
|
/**
|
|
201
194
|
* キャッシュされた設定を取得する
|
|
202
195
|
*/
|
|
203
|
-
function getCachedConfig() {
|
|
196
|
+
export function getCachedConfig() {
|
|
204
197
|
if (!cachedConfig) {
|
|
205
198
|
cachedConfig = getConfig();
|
|
206
199
|
}
|
|
@@ -209,7 +202,7 @@ function getCachedConfig() {
|
|
|
209
202
|
/**
|
|
210
203
|
* キャッシュをリセットする(テスト用)
|
|
211
204
|
*/
|
|
212
|
-
function resetConfigCache() {
|
|
205
|
+
export function resetConfigCache() {
|
|
213
206
|
cachedConfig = null;
|
|
214
207
|
}
|
|
215
208
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,IAAI,EAAa,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,IAAI,EAAa,MAAM,MAAM,CAAA;AA4NpD,gDAAkB;AAClB,QAAA,MAAM,GAAG,EAAE,IAAiB,CAAA;AAqB5B,eAAe,GAAG,CAAA"}
|
package/dist/http.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const server_1 = require("./server");
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
|
|
3
|
+
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { cors } from 'hono/cors';
|
|
6
|
+
import { getConfig } from './config.js';
|
|
7
|
+
import { server } from './server.js';
|
|
8
|
+
import { deleteSessionConfig, setSessionConfig } from './session.js';
|
|
10
9
|
// 設定を取得
|
|
11
|
-
const config =
|
|
10
|
+
const config = getConfig();
|
|
12
11
|
/**
|
|
13
12
|
* JSONRPCエラーレスポンスを生成するヘルパー関数
|
|
14
13
|
*/
|
|
@@ -122,13 +121,27 @@ async function handleMCP(c) {
|
|
|
122
121
|
return c.json(badRequestError('Invalid JSON'), { status: 400 });
|
|
123
122
|
}
|
|
124
123
|
// initializeリクエストの場合のみ新しいtransportを作成
|
|
125
|
-
if (
|
|
124
|
+
if (isInitializeRequest(body)) {
|
|
126
125
|
console.log('Creating new WebStandard session');
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
// X-Voicevox-Speaker ヘッダーを読み取り
|
|
127
|
+
const speakerHeader = c.req.header('X-Voicevox-Speaker');
|
|
128
|
+
let sessionSpeaker;
|
|
129
|
+
if (speakerHeader) {
|
|
130
|
+
const parsed = Number.parseInt(speakerHeader, 10);
|
|
131
|
+
if (!Number.isNaN(parsed) && parsed >= 0) {
|
|
132
|
+
sessionSpeaker = parsed;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const transport = new WebStandardStreamableHTTPServerTransport({
|
|
136
|
+
sessionIdGenerator: () => randomUUID(),
|
|
129
137
|
onsessioninitialized: (newSessionId) => {
|
|
130
138
|
console.log(`Session initialized: ${newSessionId}`);
|
|
131
139
|
transports.set(newSessionId, transport);
|
|
140
|
+
// セッションのデフォルト話者を設定
|
|
141
|
+
if (sessionSpeaker !== undefined) {
|
|
142
|
+
setSessionConfig(newSessionId, { defaultSpeaker: sessionSpeaker });
|
|
143
|
+
console.log(`Session ${newSessionId} default speaker: ${sessionSpeaker}`);
|
|
144
|
+
}
|
|
132
145
|
},
|
|
133
146
|
});
|
|
134
147
|
// クリーンアップハンドラー
|
|
@@ -137,10 +150,11 @@ async function handleMCP(c) {
|
|
|
137
150
|
if (sid) {
|
|
138
151
|
console.log(`Transport closed for session: ${sid}`);
|
|
139
152
|
transports.delete(sid);
|
|
153
|
+
deleteSessionConfig(sid);
|
|
140
154
|
}
|
|
141
155
|
};
|
|
142
156
|
// サーバーに接続
|
|
143
|
-
await
|
|
157
|
+
await server.connect(transport);
|
|
144
158
|
// リクエスト処理(parsedBodyを渡す)
|
|
145
159
|
return transport.handleRequest(c.req.raw, { parsedBody: body });
|
|
146
160
|
}
|
|
@@ -166,12 +180,12 @@ function handleHealth(c) {
|
|
|
166
180
|
return c.json(response);
|
|
167
181
|
}
|
|
168
182
|
// アプリケーションのセットアップ
|
|
169
|
-
const app = new
|
|
183
|
+
const app = new Hono();
|
|
170
184
|
// CORSを設定(公式サンプルに準拠)
|
|
171
|
-
app.use('/mcp',
|
|
185
|
+
app.use('/mcp', cors({
|
|
172
186
|
origin: '*',
|
|
173
187
|
allowMethods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
|
|
174
|
-
allowHeaders: ['Content-Type', 'mcp-session-id', 'Last-Event-ID', 'mcp-protocol-version'],
|
|
188
|
+
allowHeaders: ['Content-Type', 'mcp-session-id', 'Last-Event-ID', 'mcp-protocol-version', 'X-Voicevox-Speaker'],
|
|
175
189
|
exposeHeaders: ['mcp-session-id', 'mcp-protocol-version'],
|
|
176
190
|
}));
|
|
177
191
|
// セキュリティミドルウェアを適用(MCP仕様2025-11-25準拠)
|
|
@@ -180,5 +194,5 @@ app.use('/mcp', validateHost());
|
|
|
180
194
|
// ルート定義
|
|
181
195
|
app.all('/mcp', handleMCP);
|
|
182
196
|
app.get('/health', handleHealth);
|
|
183
|
-
|
|
197
|
+
export default app;
|
|
184
198
|
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,41 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
2
|
// MCP TTS Voicevox エントリーポイント
|
|
38
|
-
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { getConfig } from './config.js';
|
|
7
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
39
8
|
/**
|
|
40
9
|
* 実行環境を判定するユーティリティ
|
|
41
10
|
*/
|
|
@@ -43,6 +12,10 @@ const config_1 = require("./config");
|
|
|
43
12
|
function isNodejs() {
|
|
44
13
|
return typeof process !== 'undefined' && !!process.versions?.node;
|
|
45
14
|
}
|
|
15
|
+
/** Bunランタイムかどうかを判定 */
|
|
16
|
+
function isBun() {
|
|
17
|
+
return 'Bun' in globalThis;
|
|
18
|
+
}
|
|
46
19
|
/** CLI実行かどうかを判定 */
|
|
47
20
|
function isCLI() {
|
|
48
21
|
if (!isNodejs() || !process.argv)
|
|
@@ -55,10 +28,12 @@ function isCLI() {
|
|
|
55
28
|
argv1.includes('index.js') ||
|
|
56
29
|
argv1.includes('npx');
|
|
57
30
|
// 設定からHTTPモードを取得(CLI引数または環境変数)
|
|
58
|
-
const config =
|
|
31
|
+
const config = getConfig();
|
|
59
32
|
const isForceMode = config.httpMode;
|
|
60
|
-
//
|
|
61
|
-
const isMainModule =
|
|
33
|
+
// ESM環境でのメインモジュール判定
|
|
34
|
+
const isMainModule = process.argv[1] === fileURLToPath(import.meta.url) ||
|
|
35
|
+
process.argv0?.includes('node') ||
|
|
36
|
+
process.argv0?.includes('bun');
|
|
62
37
|
return isNpmStart || isDirectExecution || isForceMode || isMainModule;
|
|
63
38
|
}
|
|
64
39
|
/** NPX経由実行かどうかを判定 */
|
|
@@ -71,7 +46,7 @@ function isNpx() {
|
|
|
71
46
|
* サーバー設定を取得する関数(設定モジュールを使用)
|
|
72
47
|
*/
|
|
73
48
|
function getServerConfig() {
|
|
74
|
-
const config =
|
|
49
|
+
const config = getConfig();
|
|
75
50
|
return {
|
|
76
51
|
port: config.httpPort,
|
|
77
52
|
host: config.httpHost,
|
|
@@ -79,51 +54,45 @@ function getServerConfig() {
|
|
|
79
54
|
isHttpMode: config.httpMode,
|
|
80
55
|
};
|
|
81
56
|
}
|
|
82
|
-
/**
|
|
83
|
-
* HTTP サーバーのアプリケーションをロードする
|
|
84
|
-
*/
|
|
85
|
-
async function loadHttpApp(isDevelopment) {
|
|
86
|
-
if (isDevelopment) {
|
|
87
|
-
const module = await Promise.resolve().then(() => __importStar(require('./http')));
|
|
88
|
-
return module.default;
|
|
89
|
-
}
|
|
90
|
-
return require('./http').default;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* HTTP サーバーモジュールをロードする
|
|
94
|
-
*/
|
|
95
|
-
async function loadHttpServer(isDevelopment) {
|
|
96
|
-
if (isDevelopment) {
|
|
97
|
-
return await Promise.resolve().then(() => __importStar(require('@hono/node-server')));
|
|
98
|
-
}
|
|
99
|
-
return require('@hono/node-server');
|
|
100
|
-
}
|
|
101
57
|
/**
|
|
102
58
|
* HTTP サーバーを起動する
|
|
103
59
|
*/
|
|
104
60
|
async function startHttpServer(config) {
|
|
105
61
|
try {
|
|
106
62
|
console.error('Starting HTTP server with config:', config);
|
|
107
|
-
const app = await
|
|
63
|
+
const { default: app } = await import('./http.js');
|
|
108
64
|
console.error('App loaded successfully');
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
65
|
+
if (isBun()) {
|
|
66
|
+
// Bun native server (HonoはWeb Standard互換なのでそのまま使える)
|
|
67
|
+
const server = globalThis.Bun.serve({
|
|
68
|
+
fetch: app.fetch,
|
|
69
|
+
port: config.port,
|
|
70
|
+
hostname: config.host,
|
|
71
|
+
});
|
|
72
|
+
console.error(`VOICEVOX MCP HTTP server running at http://${server.hostname}:${server.port}/mcp`);
|
|
73
|
+
console.error(`Health check: http://${server.hostname}:${server.port}/health`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Node.js: @hono/node-server
|
|
77
|
+
const { serve } = await import('@hono/node-server');
|
|
78
|
+
console.error('Server module loaded successfully');
|
|
79
|
+
const serverOptions = {
|
|
80
|
+
fetch: app.fetch,
|
|
81
|
+
port: config.port,
|
|
82
|
+
hostname: config.host,
|
|
83
|
+
};
|
|
84
|
+
console.error('Attempting to start server with options:', serverOptions);
|
|
85
|
+
serve(serverOptions, (info) => {
|
|
86
|
+
console.error(`VOICEVOX MCP HTTP server running at http://${info.address}:${info.port}/mcp`);
|
|
87
|
+
console.error(`Health check: http://${info.address}:${info.port}/health`);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
121
90
|
// サーバー起動の確認を少し待つ
|
|
122
91
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
123
92
|
console.error('HTTP server startup completed');
|
|
124
93
|
}
|
|
125
94
|
catch (error) {
|
|
126
|
-
console.error('
|
|
95
|
+
console.error('HTTP server startup failed:', error);
|
|
127
96
|
if (error instanceof Error) {
|
|
128
97
|
console.error('Error details:', {
|
|
129
98
|
message: error.message,
|
|
@@ -137,21 +106,16 @@ async function startHttpServer(config) {
|
|
|
137
106
|
/**
|
|
138
107
|
* Stdio サーバーを起動する
|
|
139
108
|
*/
|
|
140
|
-
async function startStdioServer(
|
|
109
|
+
async function startStdioServer(_config) {
|
|
141
110
|
try {
|
|
142
|
-
|
|
143
|
-
await Promise.resolve().then(() => __importStar(require('./stdio')));
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
require('./stdio');
|
|
147
|
-
}
|
|
111
|
+
await import('./stdio.js');
|
|
148
112
|
// Stdio サーバーは常に実行中なので、プロセス終了までブロック
|
|
149
113
|
process.on('SIGINT', () => {
|
|
150
114
|
process.exit(0);
|
|
151
115
|
});
|
|
152
116
|
}
|
|
153
117
|
catch (error) {
|
|
154
|
-
console.error('
|
|
118
|
+
console.error('Stdio server startup failed:', error);
|
|
155
119
|
if (error instanceof Error) {
|
|
156
120
|
console.error('Error details:', {
|
|
157
121
|
message: error.message,
|
|
@@ -217,7 +181,7 @@ Examples:
|
|
|
217
181
|
async function startMCPServer() {
|
|
218
182
|
// 環境チェック
|
|
219
183
|
if (!isNodejs()) {
|
|
220
|
-
throw new Error('
|
|
184
|
+
throw new Error('Node.js environment required');
|
|
221
185
|
}
|
|
222
186
|
// ヘルプオプションの確認
|
|
223
187
|
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
@@ -226,8 +190,8 @@ async function startMCPServer() {
|
|
|
226
190
|
}
|
|
227
191
|
// バージョンオプションの確認
|
|
228
192
|
if (process.argv.includes('--version') || process.argv.includes('-v')) {
|
|
229
|
-
const
|
|
230
|
-
console.log(`@kajidog/mcp-tts-voicevox v${
|
|
193
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
|
|
194
|
+
console.log(`@kajidog/mcp-tts-voicevox v${pkg.version}`);
|
|
231
195
|
process.exit(0);
|
|
232
196
|
}
|
|
233
197
|
// CLI実行またはNPX実行の場合のみサーバーを起動
|
|
@@ -235,7 +199,7 @@ async function startMCPServer() {
|
|
|
235
199
|
const config = getServerConfig();
|
|
236
200
|
// HTTPモードの場合のみログを出力
|
|
237
201
|
if (config.isHttpMode) {
|
|
238
|
-
console.error('
|
|
202
|
+
console.error('Environment detection:', {
|
|
239
203
|
isCLI: isCLI(),
|
|
240
204
|
isNpx: isNpx(),
|
|
241
205
|
shouldStart,
|
|
@@ -243,11 +207,11 @@ async function startMCPServer() {
|
|
|
243
207
|
argv0: process.argv0,
|
|
244
208
|
execPath: process.execPath,
|
|
245
209
|
});
|
|
246
|
-
console.error('
|
|
210
|
+
console.error('Server configuration:', config);
|
|
247
211
|
}
|
|
248
212
|
if (!shouldStart) {
|
|
249
213
|
if (config.isHttpMode) {
|
|
250
|
-
console.error('
|
|
214
|
+
console.error('Running as library, server startup skipped');
|
|
251
215
|
}
|
|
252
216
|
return; // ライブラリとして使用されている
|
|
253
217
|
}
|
|
@@ -260,7 +224,7 @@ async function startMCPServer() {
|
|
|
260
224
|
}
|
|
261
225
|
}
|
|
262
226
|
catch (error) {
|
|
263
|
-
console.error('
|
|
227
|
+
console.error('Server startup failed:', error);
|
|
264
228
|
process.exit(1);
|
|
265
229
|
}
|
|
266
230
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
// 設定を取得
|
|
3
|
-
declare const config: import("./config").ServerConfig;
|
|
3
|
+
declare const config: import("./config.js").ServerConfig;
|
|
4
4
|
// サーバー初期化
|
|
5
5
|
export declare const server: McpServer;
|
|
6
6
|
// 設定エクスポート(テスト用)
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAWnE,kBAAQ;AACR,QAAA,MAAM,MAAM,oCAAc,CAAA;AAE1B,wBAAU;AACV,eAAO,MAAM,MAAM,WAIjB,CAAA;AAwYF,6CAAiB;AACjB,OAAO,EAAE,MAAM,EAAE,CAAA"}
|
package/dist/server.js
CHANGED
|
@@ -1,54 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.config = exports.server = void 0;
|
|
37
|
-
const voicevox_client_1 = require("@kajidog/voicevox-client");
|
|
38
|
-
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
39
|
-
const z = __importStar(require("zod/v4"));
|
|
40
|
-
const config_1 = require("./config");
|
|
1
|
+
import { VoicevoxClient } from '@kajidog/voicevox-client';
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import * as z from 'zod/v4';
|
|
4
|
+
import { getConfig } from './config.js';
|
|
5
|
+
import { getSessionConfig } from './session.js';
|
|
41
6
|
// 設定を取得
|
|
42
|
-
const config =
|
|
43
|
-
exports.config = config;
|
|
7
|
+
const config = getConfig();
|
|
44
8
|
// サーバー初期化
|
|
45
|
-
|
|
9
|
+
export const server = new McpServer({
|
|
46
10
|
name: 'MCP TTS Voicevox',
|
|
47
11
|
version: '0.3.1',
|
|
48
12
|
description: 'A Voicevox server that converts text to speech for playback and saving.',
|
|
49
13
|
});
|
|
50
14
|
// Voicevoxクライアント初期化
|
|
51
|
-
const voicevoxClient = new
|
|
15
|
+
const voicevoxClient = new VoicevoxClient({
|
|
52
16
|
url: config.voicevoxUrl,
|
|
53
17
|
defaultSpeaker: config.defaultSpeaker,
|
|
54
18
|
defaultSpeedScale: config.defaultSpeedScale,
|
|
@@ -101,6 +65,15 @@ const parseStringInput = (input) => {
|
|
|
101
65
|
return { text: line };
|
|
102
66
|
});
|
|
103
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* 有効な話者IDを取得(優先順位: 明示的パラメータ > セッション設定 > グローバル設定)
|
|
70
|
+
*/
|
|
71
|
+
const getEffectiveSpeaker = (explicitSpeaker, sessionId) => {
|
|
72
|
+
if (explicitSpeaker !== undefined)
|
|
73
|
+
return explicitSpeaker;
|
|
74
|
+
const sessionConfig = getSessionConfig(sessionId);
|
|
75
|
+
return sessionConfig?.defaultSpeaker;
|
|
76
|
+
};
|
|
104
77
|
const processTextInput = async (text, speaker, speedScale, playbackOptions) => {
|
|
105
78
|
const segments = parseStringInput(text);
|
|
106
79
|
return await voicevoxClient.speak(segments, {
|
|
@@ -117,7 +90,7 @@ function registerToolIfEnabled(name, definition, handler) {
|
|
|
117
90
|
console.error(`Tool "${name}" is disabled via configuration`);
|
|
118
91
|
return;
|
|
119
92
|
}
|
|
120
|
-
|
|
93
|
+
server.registerTool(name, definition, handler);
|
|
121
94
|
}
|
|
122
95
|
/**
|
|
123
96
|
* speak ツールの動的スキーマを構築
|
|
@@ -168,8 +141,10 @@ registerToolIfEnabled('speak', {
|
|
|
168
141
|
title: 'Speak',
|
|
169
142
|
description: 'Convert text to speech and play it. Text is split by line breaks (\\n) into separate speech units. Each line is processed as an independent audio segment.',
|
|
170
143
|
inputSchema: buildSpeakInputSchema(),
|
|
171
|
-
}, async ({ text, speaker, query, speedScale, immediate, waitForStart, waitForEnd, }) => {
|
|
144
|
+
}, async ({ text, speaker, query, speedScale, immediate, waitForStart, waitForEnd, }, extra) => {
|
|
172
145
|
try {
|
|
146
|
+
// 有効な話者IDを取得(優先順位: 明示的パラメータ > セッション設定 > グローバル設定)
|
|
147
|
+
const effectiveSpeaker = getEffectiveSpeaker(speaker, extra.sessionId);
|
|
173
148
|
// 設定からデフォルトの再生オプションを取得
|
|
174
149
|
const playbackOptions = {
|
|
175
150
|
immediate: immediate ?? config.defaultImmediate,
|
|
@@ -180,13 +155,13 @@ registerToolIfEnabled('speak', {
|
|
|
180
155
|
if (query) {
|
|
181
156
|
const audioQuery = parseAudioQuery(query, speedScale);
|
|
182
157
|
result = await voicevoxClient.enqueueAudioGeneration(audioQuery, {
|
|
183
|
-
speaker,
|
|
158
|
+
speaker: effectiveSpeaker,
|
|
184
159
|
speedScale,
|
|
185
160
|
...playbackOptions,
|
|
186
161
|
});
|
|
187
162
|
}
|
|
188
163
|
else {
|
|
189
|
-
result = await processTextInput(text,
|
|
164
|
+
result = await processTextInput(text, effectiveSpeaker, speedScale, playbackOptions);
|
|
190
165
|
}
|
|
191
166
|
return createSuccessResponse(formatSpeakResponse(result));
|
|
192
167
|
}
|
|
@@ -202,9 +177,11 @@ registerToolIfEnabled('generate_query', {
|
|
|
202
177
|
speaker: z.number().optional().describe('Default speaker ID (optional)'),
|
|
203
178
|
speedScale: z.number().optional().describe('Playback speed (optional, default from environment)'),
|
|
204
179
|
},
|
|
205
|
-
}, async ({ text, speaker, speedScale, }) => {
|
|
180
|
+
}, async ({ text, speaker, speedScale, }, extra) => {
|
|
206
181
|
try {
|
|
207
|
-
|
|
182
|
+
// 有効な話者IDを取得(優先順位: 明示的パラメータ > セッション設定 > グローバル設定)
|
|
183
|
+
const effectiveSpeaker = getEffectiveSpeaker(speaker, extra.sessionId);
|
|
184
|
+
const query = await voicevoxClient.generateQuery(text, effectiveSpeaker, speedScale);
|
|
208
185
|
return createSuccessResponse(JSON.stringify(query));
|
|
209
186
|
}
|
|
210
187
|
catch (error) {
|
|
@@ -224,15 +201,17 @@ registerToolIfEnabled('synthesize_file', {
|
|
|
224
201
|
speaker: z.number().optional().describe('Default speaker ID (optional)'),
|
|
225
202
|
speedScale: z.number().optional().describe('Playback speed (optional, default from environment)'),
|
|
226
203
|
},
|
|
227
|
-
}, async ({ text, query, speaker, output, speedScale, }) => {
|
|
204
|
+
}, async ({ text, query, speaker, output, speedScale, }, extra) => {
|
|
228
205
|
try {
|
|
206
|
+
// 有効な話者IDを取得(優先順位: 明示的パラメータ > セッション設定 > グローバル設定)
|
|
207
|
+
const effectiveSpeaker = getEffectiveSpeaker(speaker, extra.sessionId);
|
|
229
208
|
if (query) {
|
|
230
209
|
const audioQuery = parseAudioQuery(query, speedScale);
|
|
231
|
-
const filePath = await voicevoxClient.generateAudioFile(audioQuery, output,
|
|
210
|
+
const filePath = await voicevoxClient.generateAudioFile(audioQuery, output, effectiveSpeaker);
|
|
232
211
|
return createSuccessResponse(filePath);
|
|
233
212
|
}
|
|
234
213
|
if (text) {
|
|
235
|
-
const filePath = await voicevoxClient.generateAudioFile(text, output,
|
|
214
|
+
const filePath = await voicevoxClient.generateAudioFile(text, output, effectiveSpeaker, speedScale);
|
|
236
215
|
return createSuccessResponse(filePath);
|
|
237
216
|
}
|
|
238
217
|
throw new Error('queryパラメータとtextパラメータのどちらかを指定してください');
|
|
@@ -304,4 +283,6 @@ registerToolIfEnabled('get_speaker_detail', {
|
|
|
304
283
|
return createErrorResponse(error);
|
|
305
284
|
}
|
|
306
285
|
});
|
|
286
|
+
// 設定エクスポート(テスト用)
|
|
287
|
+
export { config };
|
|
307
288
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* セッションごとの設定を管理するモジュール
|
|
3
|
+
* 循環参照を避けるため、独立したモジュールとして実装
|
|
4
|
+
*/
|
|
5
|
+
export interface SessionConfig {
|
|
6
|
+
defaultSpeaker?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* セッション設定を保存
|
|
10
|
+
*/
|
|
11
|
+
export declare function setSessionConfig(sessionId: string, config: SessionConfig): void;
|
|
12
|
+
/**
|
|
13
|
+
* セッション設定を取得
|
|
14
|
+
*/
|
|
15
|
+
export declare function getSessionConfig(sessionId?: string): SessionConfig | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* セッション設定を削除
|
|
18
|
+
*/
|
|
19
|
+
export declare function deleteSessionConfig(sessionId: string): void;
|
|
20
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAE/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3D"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const sessionConfigs = new Map();
|
|
2
|
+
/**
|
|
3
|
+
* セッション設定を保存
|
|
4
|
+
*/
|
|
5
|
+
export function setSessionConfig(sessionId, config) {
|
|
6
|
+
sessionConfigs.set(sessionId, config);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* セッション設定を取得
|
|
10
|
+
*/
|
|
11
|
+
export function getSessionConfig(sessionId) {
|
|
12
|
+
if (!sessionId)
|
|
13
|
+
return undefined;
|
|
14
|
+
return sessionConfigs.get(sessionId);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* セッション設定を削除
|
|
18
|
+
*/
|
|
19
|
+
export function deleteSessionConfig(sessionId) {
|
|
20
|
+
sessionConfigs.delete(sessionId);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AASA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAA;AAEvD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,MAAqB,EAAQ;IAC/E,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAAA,CACtC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAkB,EAA6B;IAC9E,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAChC,OAAO,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAAA,CACrC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAQ;IAC3D,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAAA,CACjC"}
|
package/dist/stdio.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const server_1 = require("./server");
|
|
6
|
-
server_1.server.connect(new stdio_js_1.StdioServerTransport()).catch(() => {
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { server } from './server.js';
|
|
4
|
+
server.connect(new StdioServerTransport()).catch(() => {
|
|
7
5
|
process.exit(1);
|
|
8
6
|
});
|
|
9
7
|
//# sourceMappingURL=stdio.js.map
|
package/dist/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAAA,CAChB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kajidog/mcp-tts-voicevox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "VOICEVOX integration for MCP - Text-to-Speech server using VOICEVOX engine",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
-
"require": "./dist/index.js",
|
|
11
10
|
"import": "./dist/index.js",
|
|
12
11
|
"types": "./dist/index.d.ts"
|
|
13
12
|
},
|
|
14
13
|
"./client": {
|
|
15
|
-
"require": "./dist/client.js",
|
|
16
14
|
"import": "./dist/client.js",
|
|
17
15
|
"types": "./dist/client.d.ts"
|
|
18
16
|
}
|
|
@@ -20,7 +18,7 @@
|
|
|
20
18
|
"bin": {
|
|
21
19
|
"mcp-tts-voicevox": "./dist/index.js"
|
|
22
20
|
},
|
|
23
|
-
"type": "
|
|
21
|
+
"type": "module",
|
|
24
22
|
"files": [
|
|
25
23
|
"dist",
|
|
26
24
|
"README.md",
|
|
@@ -52,17 +50,17 @@
|
|
|
52
50
|
},
|
|
53
51
|
"dependencies": {
|
|
54
52
|
"@hono/node-server": "^1.14.2",
|
|
55
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
53
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
56
54
|
"hono": "^4.7.10",
|
|
57
55
|
"zod": "^3.25.0",
|
|
58
|
-
"@kajidog/voicevox-client": "0.
|
|
56
|
+
"@kajidog/voicevox-client": "0.4.0"
|
|
59
57
|
},
|
|
60
58
|
"devDependencies": {
|
|
61
59
|
"@biomejs/biome": "^1.9.4",
|
|
62
60
|
"@types/node": "^20.0.0",
|
|
63
61
|
"@typescript/native-preview": "7.0.0-dev.20250712.1",
|
|
64
62
|
"vitest": "^2.1.8",
|
|
65
|
-
"
|
|
63
|
+
"tsx": "^4.19.0",
|
|
66
64
|
"typescript": "^5.0.0"
|
|
67
65
|
},
|
|
68
66
|
"peerDependencies": {
|
|
@@ -73,12 +71,16 @@
|
|
|
73
71
|
"start:stdio": "node dist/stdio.js",
|
|
74
72
|
"start:http": "MCP_HTTP_MODE=true node dist/index.js",
|
|
75
73
|
"start:http:win": "powershell -Command \"$env:MCP_HTTP_MODE='true'; node dist/index.js\"",
|
|
76
|
-
"dev": "NODE_ENV=development
|
|
77
|
-
"dev:stdio": "NODE_ENV=development
|
|
78
|
-
"dev:http": "NODE_ENV=development MCP_HTTP_MODE=true
|
|
79
|
-
"dev:http:win": "powershell -Command \"$env:NODE_ENV='development'; $env:MCP_HTTP_MODE='true';
|
|
80
|
-
"
|
|
81
|
-
"
|
|
74
|
+
"dev": "NODE_ENV=development tsx src/index.ts",
|
|
75
|
+
"dev:stdio": "NODE_ENV=development tsx src/stdio.ts",
|
|
76
|
+
"dev:http": "NODE_ENV=development MCP_HTTP_MODE=true tsx src/index.ts",
|
|
77
|
+
"dev:http:win": "powershell -Command \"$env:NODE_ENV='development'; $env:MCP_HTTP_MODE='true'; tsx src/index.ts\"",
|
|
78
|
+
"start:bun": "bun dist/index.js",
|
|
79
|
+
"start:bun:http": "MCP_HTTP_MODE=true bun dist/index.js",
|
|
80
|
+
"dev:bun": "NODE_ENV=development bun src/index.ts",
|
|
81
|
+
"dev:bun:http": "NODE_ENV=development MCP_HTTP_MODE=true bun src/index.ts",
|
|
82
|
+
"build": "tsgo && pnpm -r --filter \"./packages/*\" build && node scripts/fix-permissions.cjs",
|
|
83
|
+
"build:tsc": "tsc && pnpm -r --filter \"./packages/*\" build:tsc && node scripts/fix-permissions.cjs",
|
|
82
84
|
"build:clean": "rm -rf dist && pnpm -r --filter \"./packages/*\" run build:clean && pnpm build",
|
|
83
85
|
"lint": "biome check . && pnpm -r --filter \"./packages/*\" lint",
|
|
84
86
|
"lint:fix": "biome check --write . && pnpm -r --filter \"./packages/*\" lint:fix",
|
|
File without changes
|