en un clic
echokit-config-generator
// Generate config.toml for EchoKit servers with interactive setup for ASR, TTS, LLM services, MCP servers, API key entry, and server launch
// Generate config.toml for EchoKit servers with interactive setup for ASR, TTS, LLM services, MCP servers, API key entry, and server launch
| name | EchoKit Config Generator |
| description | Generate config.toml for EchoKit servers with interactive setup for ASR, TTS, LLM services, MCP servers, API key entry, and server launch |
| version | 1.3.1 |
| author | EchoKit Config Generator Contributors |
| repository | https://github.com/second-state/echokit_server |
This SKILL generates config.toml files for EchoKit servers through an interactive five-phase process that includes configuration generation, API key entry, and server launch.
Announce at start: "I'm using the EchoKit Config Generator to create your config.toml."
Throughout this SKILL, when asking questions with default values:
Always phrase it as: "Question? (default: {VALUE})"
Handle responses:
Example:
AI: How many messages should it remember? (default: 5)
User: [Enter]
AI: [Uses 5]
AI: How many messages should it remember? (default: 5)
User: 10
AI: [Uses 10]
This applies to ALL questions with defaults throughout the SKILL.
Ask these questions one at a time:
Generate sophisticated system prompt using this structure:
[[llm.sys_prompts]]
role = "system"
content = """
You are a {TONE} AI assistant specialized in {PURPOSE}.
## Core Purpose
{PURPOSE_EXPANDED - elaborate based on user input}
## Your Capabilities
- List the capabilities provided by user
- Each capability on its own line
- Be specific about what you can do
## Response Style
{FORMAT_REQUIREMENTS}
## Domain Knowledge
{DOMAIN_KNOWLEDGE if provided, otherwise omit this section}
## Behavioral Guidelines
{BEHAVIORS_FROM_USER}
- Add any relevant default behaviors based on tone
## Constraints
{CONSTRAINTS_FROM_USER}
- Always maintain {TONE} tone
- {RESPONSE_FORMAT_RULES}
## Additional Instructions
{ADDITIONAL_NOTES if provided}
---
Remember: Stay in character as a {TONE} {DOMAIN} assistant. Always prioritize helpfulness and accuracy.
"""
Enhanced defaults based on tone:
If user doesn't provide specific behaviors, use these expanded defaults:
professional:
casual:
friendly:
expert:
For each service category (ASR, TTS, LLM):
platforms/{category}.yml using the Read toolAvailable {SERVICE} Services:
1. {PLATFORM_1.name}
URL: {PLATFORM_1.url}
Model: {PLATFORM_1.model}
Get API key: {PLATFORM_1.api_key_url}
Notes: {PLATFORM_1.notes}
2. {PLATFORM_2.name}
URL: {PLATFORM_2.url}
Model: {PLATFORM_2.model}
Get API key: {PLATFORM_2.api_key_url}
Notes: {PLATFORM_2.notes}
C. Custom - Specify your own platform/model
Your choice (1-{N} or C):
User selection:
If user selects a number (1-{N}):
If user selects 'C' (Custom):
Step 1: Get platform name
Step 2: Auto-fetch API information
"{PLATFORM_NAME} API endpoint {SERVICE_TYPE} 2025"
Step 3: Confirm with user Display what was found:
I found the following for {PLATFORM_NAME} {SERVICE}:
API Endpoint: {FOUND_URL}
Documentation: {FOUND_DOCS_URL}
Authentication: {FOUND_AUTH_METHOD}
Default Models: {FOUND_MODELS}
Is this correct? (y/edit)
Step 4: Gather additional details
Step 5: Store custom platform
name: "{PLATFORM_NAME}"
platform: "{INFERRED_TYPE from API docs or user}"
url: "{CONFIRMED_URL}"
model: "{USER_MODEL_CHOICE}"
history/voice/lang: {USER_SETTINGS}
api_key_url: "{FOUND_DOCS_URL}"
notes: "Custom {PLATFORM_NAME} - auto-configured"
Continue to next service
Load platforms in order:
platforms/asr.ymlplatforms/tts.ymlplatforms/llm.ymlNote on WebSearch: Use WebSearch tool with year-specific queries (2025) to get current API information. For common platforms, you can also infer from patterns:
https://api.{platform}.com/v1/chat/completionshttps://api.{platform}.com/v1/messagesAsk: "Do you need an MCP server? (y/n)"
If yes, ask: "What's your MCP server URL?"
Default: http://localhost:8000/mcp
Add MCP configuration to LLM section:
The MCP server is configured within the LLM configuration as:
[[llm.mcp_server]]
server = "{USER_PROVIDED_URL or http://localhost:8000/mcp}"
type = "http_streamable"
call_mcp_message = "Please hold on a few seconds while I am searching for an answer!"
Explain to user:
type can be: "http_streamable" or "http"call_mcp_message is shown to users when MCP is being calledIMPORTANT: EchoKit server requires a specific TOML structure:
[tts] → [asr] → [llm]Display complete configuration with this format:
addr = "0.0.0.0:8080"
hello_wav = "hello.wav"
[tts]
platform = "{SELECTED_TTS.platform}"
url = "{SELECTED_TTS.url}"
{TTS_API_KEY_FIELD} = "YOUR_API_KEY_HERE"
{TTS_MODEL_FIELD} = "{SELECTED_TTS.model}"
voice = "{SELECTED_TTS.voice}"
[asr]
platform = "{SELECTED_ASR.platform}"
url = "{SELECTED_ASR.url}"
{ASR_API_KEY_FIELD} = "YOUR_API_KEY_HERE"
model = "{SELECTED_ASR.model}"
lang = "{ASR_LANG}"
prompt = "Hello\\n你好\\n(noise)\\n(bgm)\\n(silence)\\n"
vad_url = "http://localhost:9093/v1/audio/vad"
[llm]
platform = "{SELECTED_LLM.platform}"
url = "{SELECTED_LLM.url}"
{LLM_API_KEY_FIELD} = "YOUR_API_KEY_HERE"
model = "{SELECTED_LLM.model}"
history = {SELECTED_LLM.history}
{GENERATED_SYSTEM_PROMPT}
{MCP_CONFIGURATION if enabled}
Platform-specific field mappings:
TTS platforms:
openai: uses api_key and modelelevenlabs: uses token and model_idgroq: uses api_key and modelASR platforms:
openai/whisper: uses api_key and modelLLM platforms:
openai_chat: uses api_key (optional, can be empty string)When generating the config, replace {TTS_API_KEY_FIELD}, {ASR_API_KEY_FIELD}, and {LLM_API_KEY_FIELD} with the appropriate field name for the selected platform:
tokenapi_keyapi_keyapi_key"Does this configuration look correct? (y/edit/regenerate)"
Ask: "Where should I save the config files? (press Enter for default: echokit_server/)"
Handle user input:
echokit_server/my_configs/)/Users/username/echokit/)After path is determined:
mkdir -p {OUTPUT_DIR}Use the Write tool to create:
{OUTPUT_DIR}/config.toml - Main configuration (includes MCP server if enabled){OUTPUT_DIR}/SETUP_GUIDE.md - Setup instructions (use template from templates/SETUP_GUIDE.md)✓ Configuration generated successfully!
Files created:
{OUTPUT_DIR}/config.toml
{OUTPUT_DIR}/SETUP_GUIDE.md
Now proceeding to Phase 5: API Key Entry and Server Launch...
This phase collects API keys from the user, updates the config.toml file, builds the server (if needed), and launches it.
Show the user where to get their API keys:
## Phase 5: API Key Entry and Server Launch
You'll need API keys for your selected services. Here's where to get them:
ASR ({SELECTED_ASR.name}):
API Key URL: {SELECTED_ASR.api_key_url}
TTS ({SELECTED_TTS.name}):
API Key URL: {SELECTED_TTS.api_key_url}
LLM ({SELECTED_LLM.name}):
API Key URL: {SELECTED_LLM.api_key_url}
I'll prompt you for each key. You can also press Enter to skip and manually edit config.toml later.
For each service (ASR, TTS, LLM), ask:
Enter your {SERVICE_NAME} API key:
(or press Enter to skip and add it manually later)
Handle responses:
Store keys temporarily in memory:
ASR_API_KEY = "{user_input or 'YOUR_API_KEY_HERE'}"
TTS_API_KEY = "{user_input or 'YOUR_API_KEY_HERE'}"
LLM_API_KEY = "{user_input or 'YOUR_API_KEY_HERE'}"
Read the existing config.toml using the Read tool, then replace the API key placeholders:
[asr]
api_key = "{ASR_API_KEY}"
[tts]
{CORRECT_TTS_FIELD} = "{TTS_API_KEY}"
[llm]
api_key = "{LLM_API_KEY}"
Use the Edit tool to update each API key field line in {OUTPUT_DIR}/config.toml.
IMPORTANT - Platform-specific field names:
token (not api_key) and model_id (not model)api_key and modelapi_keyapi_keyMake sure to preserve the correct field names for each platform when editing!
Check if the EchoKit server is already built:
{OUTPUT_DIR}/target/release/echokit_server existsIf not built, ask: "The EchoKit server needs to be built. Do you want me to build it now? (y/n)"
If user said yes in Step 4:
cd {OUTPUT_DIR}cargo build --releaseIf build succeeds:
✓ Server built successfully at {OUTPUT_DIR}/target/release/echokit_server
If build fails:
✗ Build failed. Please check the error messages above.
You can manually build the server later with:
cd {OUTPUT_DIR} && cargo build --release
For now, your config.toml has been saved with your API keys.
If the server is available (either pre-built or just built):
Ask: "Ready to launch the EchoKit server? (y/n)"
If no:
Your config.toml has been saved with your API keys.
To run the server manually:
cd {OUTPUT_DIR} && ./target/release/echokit_server
If yes:
cd {OUTPUT_DIR}export RUST_LOG=debug
./target/release/echokit_server &
# Try multiple methods to get IP, use first successful result
ipconfig getifaddr en0 2>/dev/null || \
ipconfig getifaddr en1 2>/dev/null || \
hostname -I 2>/dev/null | awk '{print $1}' || \
ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -1
LOCAL_IP✓ EchoKit server is now running!
Server Details:
Location: {OUTPUT_DIR}
Config: {OUTPUT_DIR}/config.toml
Bind Address: 0.0.0.0:8080
WebSocket URL: ws://{ACTUAL_LOCAL_IP}:8080/ws
You can connect to the server using any WebSocket client at this URL.
The server is running in the background.
To stop the server later:
- Find the process: ps aux | grep echokit_server
- Kill it: kill {PID}
Or if you have the PID: kill {SERVER_PID}
After launching, verify the server started successfully:
ps aux | grep echokit_server | grep -v grepcurl -s http://localhost:8080/health || echo "Health check not available"If server is running:
✓ Server is running and responding!
If server crashed:
⚠ The server may have crashed. Check the logs above for errors.
You can try running it manually to see error messages:
cd {OUTPUT_DIR} && ./target/release/echokit_server
If user enters an obviously invalid key (too short, contains spaces, etc.):
Warning: That doesn't look like a valid API key.
API keys are typically long strings without spaces.
Use this key anyway? (y/retry)
If the build fails:
If the server process exits immediately:
Provide troubleshooting suggestions based on error messages.
All files are relative to SKILL root:
platforms/asr.yml, platforms/tts.yml, platforms/llm.ymltemplates/SETUP_GUIDE.mdexamples/voice-companion.toml, examples/coding-assistant.tomlNo external dependencies - this SKILL is completely self-contained.
If a platform file is missing:
Error: Could not find platforms/{category}.yml
Please ensure the SKILL is properly installed with all platform data files.
If user enters invalid choice:
Invalid choice. Please enter a number between 1 and {N}.
If directory creation fails:
Error: Cannot create directory {OUTPUT_DIR}
Please choose a different location or create the directory manually.
If file write fails:
Error: Cannot write to {OUTPUT_DIR}/config.toml
Please check permissions and try again.
When generating SETUP_GUIDE.md, replace these variables:
{{TIMESTAMP}} - Current date and time{{ASSISTANT_TYPE}} - User's description from Phase 1{{ASR_NAME}} - Selected ASR platform name{{ASR_MODEL}} - Selected ASR model{{ASR_API_URL}} - Selected ASR API key URL{{TTS_NAME}} - Selected TTS platform name{{TTS_VOICE}} - Selected TTS voice{{TTS_API_URL}} - Selected TTS API key URL{{LLM_NAME}} - Selected LLM platform name{{LLM_MODEL}} - Selected LLM model{{LLM_API_URL}} - Selected LLM API key URL{{MCP_ENABLED}} - "Yes" or "No" based on Phase 3Read the template from templates/SETUP_GUIDE.md, replace variables, then write to output.
User: Generate an EchoKit config for a friendly voice assistant
AI: I'm using the EchoKit Config Generator to create your config.toml.
Phase 1: Assistant Definition
What is your AI assistant's primary purpose?
User: Daily conversational assistance and smart home control
What tone should it have?
User: Friendly
Any specific behaviors or requirements?
User: Keep responses short, show some personality
Phase 2: Platform Selection
Available ASR Services:
1. OpenAI Whisper
URL: https://api.openai.com/v1/audio/transcriptions
Model: gpt-4o-mini-transcribe
Get API key: https://platform.openai.com/api-keys
Notes: Best accuracy, requires OpenAI account with API access
2. Local Whisper
URL: http://localhost:8080/transcribe
Model: base
Get API key: Not required (local deployment)
Notes: Free and private, requires local whisper server running
Your choice (1-2):
User: 1
[Continue for TTS and LLM...]
Phase 3: MCP Server
Do you need an MCP server? (y/n)
User: n
Phase 4: Generate Files
[Preview config...]
Does this look correct? (y/edit/regenerate)
User: y
Where should I save? (default: echokit_server/)
User: [Enter]
✓ Configuration generated successfully!
[...]
export RUST_LOG=debug before server launch for better troubleshootingtoken/model_id), removed comments from top, added prompt and vad_url fields for ASRTo test this SKILL:
~/.claude/skills/This SKILL is 100% standalone with no external dependencies.