Skip to main content
Glama

Simple Voice MCP Server

テキストを送信するだけで音声再生するシンプルなMCPサーバーです。 複数のキャラクターボイスに対応し、同時音声再生も可能です。

主な機能

  • 🎤 複数のキャラクターボイスに対応

  • 🔊 複数音声の同時再生が可能(VLC使用)

  • 📝 カスタム辞書による英単語の読み方設定

  • 🌐 WSL環境で自動的にWindows側で音声再生

  • 🧹 一時ファイルの自動クリーンアップ

Related MCP server: PVV MCP Server

必要な環境

Windows側の要件

VLCメディアプレーヤーのインストールが必要です:

# PowerShellで実行
winget install -e --id VideoLAN.VLC

またはVLC公式サイトからダウンロードしてインストール

WSL側の要件

# 依存関係のインストール
uv sync

提供するツール

1. say - テキスト読み上げ

say("こんにちは!今日はいい天気ですね。")
# → 設定されたキャラクターの声で音声再生

2. add_to_dictionary - カスタム辞書への登録

# 単語の登録
add_to_dictionary(english="API", katakana="エーピーアイ")

# 複数同時登録(カンマ区切り)
add_to_dictionary(
    english="HDMI,USB,API", 
    katakana="エイチディーエムアイ,ユーエスビー,エーピーアイ"
)

3. remove_from_dictionary - カスタム辞書から削除

# 単語の削除
remove_from_dictionary(english="API")

# 複数同時削除
remove_from_dictionary(english="HDMI,USB")

4. list_dictionary - カスタム辞書の一覧表示

list_dictionary()
# → 登録されている全ての単語と読み方を表示

セットアップ

基本設定

MCPクライアントの設定(.mcp.jsonなど)に追加:

{
  "mcpServers": {
    "simple-voice": {
      "command": "uv",
      "args": [
        "--directory", 
        "/path/to/voice-mcp", 
        "run", 
        "simple_voice_mcp.py"
      ]
    }
  }
}

音声モデルの変更

--model 引数で好きなキャラクターの声を選べます:

{
  "mcpServers": {
    "simple-voice": {
      "command": "uv",
      "args": [
        "--directory", 
        "/path/to/voice-mcp", 
        "run", 
        "simple_voice_mcp.py", 
        "--model", 
        "syouzyo_4"
      ]
    }
  }
}

複数キャラクターの同時利用

異なるキャラクターを同時に使いたい場合:

{
  "mcpServers": {
    "simple-voice": {
      "command": "uv",
      "args": ["--directory", "/path/to/voice-mcp", "run", "simple_voice_mcp.py", "--model", "syouzyo_4"]
    },
    "simple-voice-sutera": {
      "command": "uv",
      "args": ["--directory", "/path/to/voice-mcp", "run", "simple_voice_mcp.py", "--model", "sutera"]
    }
  }
}

利用可能な音声モデル

男性音声

  • ozisan_1: イケボのおじさんの声

  • ozisan_2: 普通のおじさんの声

  • seinen_2: さわやかな関西弁のお兄さんの声

  • seinen_3: ちょっと気弱そうなお兄さんの声

  • seinen_4: 声の高い、優しそうなお兄さんの声

  • seinen_5: 声の高い、ちょっとうざそうなお兄さんの声

  • oziisan: おじいさんの声

女性音声

  • oneesan_1: 少し声の高めのお姉さんの声

  • oneesan_2: 落ち着いた声のお姉さんの声

  • oneesan_3: 声の高いお姉さんの声

  • oneesan_4: 安心感のある透き通ったお姉さんの声

  • obaatyan_1: おばあちゃんの声

少女音声

  • syouzyo_1: 普通の少女の声

  • syouzyo_2: 元気な少女の声

  • syouzyo_3: ツンデレ系の少女の声

  • syouzyo_4: のじゃろりの声

  • syouzyo_5: 内気な少女の声

  • syouzyo_6: 無気力な少女の声

  • syouzyo_7: のんびり無気力な少女の可愛い声

その他

  • syounen_1: 元気な少年の声

  • zingai_1: かわいいマスコットキャラクターのような声(デフォルト)

  • sutera: ステラの声

環境変数での設定

環境変数でも設定可能です:

{
  "mcpServers": {
    "simple-voice": {
      "command": "uv",
      "args": ["--directory", "/path/to/voice-mcp", "run", "simple_voice_mcp.py"],
      "env": {
        "VOICE_MODEL": "syouzyo_4",
        "VOICE_API_BASE": "https://your-custom-api.com"
      }
    }
  }
}

優先順位: コマンドライン引数 > 環境変数 > デフォルト値

技術的な詳細

ファイル構成

  • simple_voice_mcp.py - MCPサーバーのメインファイル

  • src/dictionary_manager.py - カスタム辞書管理

  • src/text_converter.py - テキスト変換(英語→カタカナ)

  • src/audio_player_vlc.py - VLCを使った音声再生

音声再生の仕組み(WSL環境)

  1. WSL環境を自動検出

  2. 音声ファイルをWindows一時フォルダにコピー

  3. VLCをバックグラウンドで起動(GUIなし)

  4. 複数の音声を同時再生可能

  5. 一時ファイルは自動的にクリーンアップ

カスタム辞書

  • custom_words.csvに単語と読み方を保存

  • リアルタイムでファイル変更を検知

  • 複数のMCPプロセス間で共有

トラブルシューティング

音声が再生されない場合

  1. VLCがインストールされているか確認

  2. Windows Defenderやセキュリティソフトが PowerShell実行をブロックしていないか確認

  3. VLCのパスが正しいか確認(通常はC:\Program Files\VideoLAN\VLC\vlc.exe

複数音声が同時再生されない場合

  • VLCのバージョンが最新か確認

  • Windows Media Playerが起動していないか確認(VLCと競合する可能性)

日本語が文字化けする場合

  • ファイルのエンコーディングがUTF-8になっているか確認

  • ターミナルの文字コード設定を確認

ライセンス

MIT License

Available Tools

4 tools
add_to_dictionaryB

カスタム辞書に新しい英単語とカタカナ読みのペアを登録します。HDMIやAPIなどの略語や、.pyのような拡張子も登録できます。複数登録する場合はカンマ区切りで指定できます。

ParametersJSON Schema
NameRequiredDescriptionDefault
englishYes英単語、略語、または拡張子。複数の場合はカンマ区切り(例: hdmi,api,csv,.py,.csv または 1つ,2つ,3つ)
katakanaYesカタカナ読み。複数の場合はカンマ区切り(例: エイチディーエムアイ,エーピーアイ,シーエスブイ,ドットパイ,ドットシーエスブイ または ひとつ,ふたつ,みっつ)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only states that entries are registered but does not mention whether duplicates are allowed, if updates occur, or what side effects happen. Lacks detail on mutation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, concise, and front-loaded with the core action. Every sentence provides unique value without redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple addition tool with two required parameters, the description is adequate but lacks completeness. It does not explain return values, error conditions, or whether the operation is idempotent. Given no output schema, more detail would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing detailed parameter explanations including examples for comma-separated values. The tool description adds only minor reinforcement about abbreviations and extensions, so it does not significantly augment the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool registers a pair of English word and katakana reading into a custom dictionary. It specifies what can be registered (words, abbreviations, extensions) and that multiple entries are allowed via comma separation. This distinguishes it from siblings like list_dictionary and remove_from_dictionary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as list_dictionary or remove_from_dictionary. There is no mention of prerequisites or scenarios where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dictionaryA

カスタム辞書に登録されているすべての英単語と読み方を表示します。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It correctly conveys a read operation without side effects. Does not elaborate on authentication, scope, or potential empty results. Sufficient for a simple tool but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single Japanese sentence that is concise and immediately understandable. No extraneous words. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but description does not specify return format or structure. With siblings suggesting a dictionary context, the description is adequate but could benefit from mentioning that it returns a list or what each entry contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no parameters, so schema coverage is 100%. Description adds value by explaining the output scope (all entries, English words and readings), which is more informative than the empty schema alone. Appropriate for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (listing) and resource (English words and readings from custom dictionary). It differentiates from siblings add_to_dictionary, remove_from_dictionary, and say by describing a read-only retrieval. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: when you need to view dictionary contents. However, no explicit guidance on when to use vs alternatives, nor conditions like requiring dictionary population first. Adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_from_dictionaryA

カスタム辞書から指定した英単語のエントリを削除します。複数削除する場合はカンマ区切りで指定できます。

ParametersJSON Schema
NameRequiredDescriptionDefault
englishYes削除する英単語。複数の場合はカンマ区切り(例: hdmi,api,.py または test,1つ,2つ)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the deletion behavior and comma-separated input. However, it does not mention what happens if the word does not exist, or if there are any irreversible side effects. The destructive nature is implied but not fully detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the verb (削除します/delete). No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, no output schema, and no nested objects, the description is largely complete. It explains the action and input format. It could mention whether deletion is permanent or if there is a confirmation step, but overall adequate for the agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (single parameter with description). The description adds the comma separation detail but does not provide significant meaning beyond the schema. With high coverage, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (削除する/delete) and the resource (カスタム辞書/custom dictionary). It also specifies that multiple entries can be deleted with comma separation. This clearly distinguishes it from sibling tools like add_to_dictionary (adds) and list_dictionary (lists).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. However, the function is implied by the name and sibling tools: use for deletion, not for adding or listing. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sayA

テキストをかわいいマスコットキャラクターのような声で読み上げます。 ユーザーにお知らせするときはこのキャラクターになりきって楽しませながら報告しましょう!

日本語のテキストを音声合成し、WSL環境では自動的にWindows側で再生されます。 英単語が含まれている場合は自動的にカタカナに変換されます。

Args: text: 読み上げたいテキスト(日本語・英語混在可能)

Returns: 成功時は"✓"、エラー時はエラーメッセージ

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Explica síntesis de voz, reproducción en WSL, conversión de inglés a katakana, y mensajes de retorno. Sin anotaciones, la descripción es suficiente.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Información concisa con estructura clara: propósito, cuándo usarlo, comportamiento, argumentos y retorno. Sin redundancias.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Cubre todos los aspectos necesarios para un tool simple: propósito, uso, parámetros, comportamiento y resultado.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

El parámetro 'text' se describe claramente en la sección Args: texto a leer, admite japonés e inglés. Añade valor más allá del esquema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Descripción clara: indica que lee texto en una voz de mascota linda, y distingue de herramientas hermanas (diccionarios).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Sugiere usarlo para notificar usuarios de forma divertida, pero no excluye alternativas ni menciona cuándo no usarlo.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observedadd_to_dictionary
    • First observedlist_dictionary
    • First observedremove_from_dictionary
    • First observedsay

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: dictionary management (add, list, remove) and text-to-speech. No overlap or ambiguity.

Naming Consistency4/5

Dictionary tools follow a consistent 'verb_to_dictionary' pattern, but 'say' deviates without a noun suffix. Overall still readable.

Tool Count5/5

4 tools is well-scoped for a simple voice server, covering dictionary management and one core action.

Completeness3/5

Core functionality exists (dictionary and TTS), but lacks features like voice selection, speed control, or stop speaking, which may limit usage.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers