<p align="center">
  <a href="https://github.com/blacktop/mcp-say"><img alt="mcp-say Logo" src="https://raw.githubusercontent.com/blacktop/mcp-say/main/docs/logo.webp" height="200" /></a>
  <h1 align="center">mcp-say</h1>
  <h4><p align="center">TTS (text-to-speech) MCP Server</p></h4>
  <p align="center">
    <a href="https://github.com/blacktop/mcp-say/actions" alt="Actions">
          <img src="https://github.com/blacktop/mcp-say/actions/workflows/go.yml/badge.svg" /></a>
    <a href="https://github.com/blacktop/mcp-say/releases/latest" alt="Downloads">
          <img src="https://img.shields.io/github/downloads/blacktop/mcp-say/total.svg" /></a>
    <a href="https://github.com/blacktop/mcp-say/releases" alt="GitHub Release">
          <img src="https://img.shields.io/github/release/blacktop/mcp-say.svg" /></a>
    <a href="http://doge.mit-license.org" alt="LICENSE">
          <img src="https://img.shields.io/:license-mit-blue.svg" /></a>
</p>
<br>

## What? 🤔

Adds Text-to-Speech to things like Claude Desktop and Cursor IDE.  

It registers two tools: 
 - `say` 
 - `elevenlabs`

### `say`

Uses the macOS `say` binary to speak the text

### `elevenlabs`

Uses the [elevenlabs](https://elevenlabs.io/app/speech-synthesis/text-to-speech) text-to-speech API to speak the text

## Getting Started

### Install

```bash
go install github.com/blacktop/mcp-say@latest
```

```bash
❱ mcp-say --help

TTS (text-to-speech) MCP Server.

Provides a text-to-speech service using the MacOS 'say' command.

Designed to be used with the MCP protocol.

Usage:
  mcp-say [flags]

Flags:
  -h, --help      help for mcp-say
  -v, --verbose   Enable verbose debug logging
```

#### Set Claude Desktop Config

```json
{
  "mcpServers": {
    "say": {
      "command": "mcp-say",
      "env": {
        "ELEVENLABS_API_KEY": "********"
      }
    }
  }
}
```

### Test

```bash
❱ cat test/say.json | go run main.go --verbose

2025/03/23 22:41:49 INFO Starting MCP server name="Say TTS Service" version=1.0.0
2025/03/23 22:41:49 DEBU Say tool called request="{Request:{Method:tools/call Params:{Meta:<nil>}} Params:{Name:say Arguments:map[text:Hello, world!] Meta:<nil>}}"
2025/03/23 22:41:49 DEBU Executing say command args="[--rate 200 Hello, world!]"
2025/03/23 22:41:49 INFO Speaking text text="Hello, world!"
```
```json
{"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"Speaking: Hello, world!"}]}}
```


## License

MIT Copyright (c) 2025 **blacktop**