Skip to main content
Glama
bmorphism

Say MCP Server

by bmorphism

say-mcp-server

macOS 시스템 음성 설정

macOS에 내장된 say 명령을 사용하여 텍스트-음성 변환 기능을 제공하는 MCP 서버입니다.

요구 사항

  • macOS(내장된 say 명령 사용)

  • 노드.js >= 14.0.0

Related MCP server: Edge TTS MCP

구성

MCP 설정 구성 파일에 다음을 추가합니다.

지엑스피1

설치

npm install say-mcp-server

도구

말하다

speak 도구는 광범위한 사용자 정의 옵션을 통해 macOS의 텍스트-음성 변환 기능에 대한 액세스를 제공합니다.

기본 사용법

macOS 텍스트 음성 변환을 사용하여 텍스트를 소리내어 읽어보세요.

매개변수:

  • text (필수): 음성 텍스트. 지원:

    • 일반 텍스트

    • 멈춤을 위한 기본 구두점

    • 자연스러운 줄바꿈을 위한 줄바꿈

    • 500ms 동안 침묵하려면 [[slnc 500]]을 입력하세요.

    • 텍스트 중간에 속도를 변경하려면 [[rate 200]]을 사용하세요.

    • [[volm 0.5]] 텍스트 중간에 볼륨을 변경합니다.

    • 강조를 위해 [[emph +]]와 [[emph -]]를 사용합니다.

    • 피치 조정을 위한 [[pbas +10]]

  • voice (선택 사항): 사용할 음성(기본값: "Alex")

  • rate (선택 사항): 분당 단어 수의 말하는 속도(기본값: 175, 범위: 1-500)

  • background (선택 사항): MCP 상호 작용을 추가로 허용하기 위해 배경에서 음성을 실행합니다(기본값: false)

고급 기능

  1. 음성 변조:

use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: "[[volm 0.7]] This is quieter [[volm 1.0]] and this is normal [[volm 1.5]] and this is louder",
    voice: "Victoria"
  }
});
  1. 동적 요금 변경:

use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: "Normal speed [[rate 300]] now speaking faster [[rate 100]] and now slower",
    voice: "Fred"
  }
});
  1. 강조 및 피치:

use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: "[[emph +]] Important point! [[emph -]] [[pbas +10]] Higher pitch [[pbas -10]] Lower pitch",
    voice: "Samantha"
  }
});

통합 예제

  1. Marginalia 검색을 통해:

// Search for a topic and have the results read aloud
const searchResult = await use_mcp_tool({
  server_name: "marginalia-mcp-server",
  tool_name: "search",
  arguments: { query: "quantum computing basics", count: 1 }
});

await use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: searchResult.results[0].description,
    voice: "Daniel",
    rate: 150
  }
});
  1. YouTube 대본 포함:

// Read a YouTube video transcript
const transcript = await use_mcp_tool({
  server_name: "youtube-transcript",
  tool_name: "get_transcript",
  arguments: {
    url: "https://youtube.com/watch?v=example",
    lang: "en"
  }
});

await use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: transcript.text,
    voice: "Samantha",
    rate: 175
  }
});
  1. 다양한 동작을 포함하는 배경 연설:

// Start long speech in background
await use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: "This is a long speech that will run in the background...",
    voice: "Rocko (Italian (Italy))",
    rate: 69,
    background: true
  }
});

// Immediately perform another action while speech continues
await use_mcp_tool({
  server_name: "marginalia-mcp-server",
  tool_name: "search",
  arguments: { query: "parallel processing" }
});
  1. Apple Notes를 사용하면:

// Read notes aloud
const notes = await use_mcp_tool({
  server_name: "apple-notes-mcp",
  tool_name: "search-notes",
  arguments: { query: "meeting notes" }
});

if (notes.length > 0) {
  await use_mcp_tool({
    server_name: "say",
    tool_name: "speak",
    arguments: {
      text: notes[0].content,
      voice: "Karen",
      rate: 160
    }
  });
}

예:

use_mcp_tool({
  server_name: "say",
  tool_name: "speak",
  arguments: {
    text: "Hello, world!",
    voice: "Victoria",
    rate: 200
  }
});

목록_음성

시스템에서 사용 가능한 모든 텍스트 음성 변환 음성을 나열합니다.

예:

use_mcp_tool({
  server_name: "say",
  tool_name: "list_voices",
  arguments: {}
});

추천 목소리

구성

MCP 설정 구성 파일에 다음을 추가합니다.

{
  "mcpServers": {
    "say": {
      "command": "node",
      "args": ["/path/to/say-mcp-server/build/index.js"]
    }
  }
}

요구 사항

  • macOS(내장된 say 명령 사용)

  • 노드.js >= 14.0.0

기여자

특허

MIT

Available Tools

2 tools
list_voicesB

List available text-to-speech voices

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but doesn't describe what the output looks like (e.g., list format, voice attributes), whether it's cached, or any rate limits. This leaves significant gaps for an agent to understand the tool's 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 a single, efficient sentence with no wasted words. It's appropriately sized for a simple tool and front-loads the core purpose immediately.

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, parameterless tool with no output schema, the description is minimally adequate. However, it lacks details about the output format or behavioral traits, which would help an agent use it correctly. Without annotations, the description should do more to compensate.

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?

The tool has 0 parameters, and schema description coverage is 100% (though empty). The description doesn't need to add parameter details, so it meets the baseline expectation for a parameterless tool without compensation needed.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('available text-to-speech voices'), making the tool's purpose immediately understandable. It doesn't explicitly differentiate from its sibling 'speak', but the distinction is reasonably implied (listing vs. using voices).

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 its sibling 'speak' or any alternatives. The description only states what it does, not when it should be selected over other options.

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

speakA

Use macOS text-to-speech to speak text aloud

ParametersJSON Schema
NameRequiredDescriptionDefault
backgroundNoRun speech in background to unblock further MCP interaction
rateNoSpeaking rate (words per minute)
textYesText to speak
voiceNoVoice to use (e.g., "Alex", "Victoria", "Daniel")Alex

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the core behavior (speaking text aloud) but lacks details about permissions needed, whether speech blocks interaction (though the 'background' parameter hints at this), error conditions, or what happens on completion. The description doesn't contradict any annotations since none exist.

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, efficient sentence that front-loads the core purpose. Every word earns its place with no redundancy or unnecessary elaboration.

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 tool with 4 parameters, 100% schema coverage, and no output schema, the description provides adequate context about what the tool does but lacks details about behavioral aspects like error handling, platform dependencies, or interaction blocking. It's minimally complete but could be more informative given the absence of annotations.

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%, so the schema already documents all four parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema, meeting the baseline for high schema coverage.

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 specific action ('speak text aloud'), the technology used ('macOS text-to-speech'), and the resource ('text'). It distinguishes from the sibling tool 'list_voices' by focusing on speech output rather than voice enumeration.

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 implies usage context (macOS text-to-speech functionality) but doesn't explicitly state when to use this tool versus alternatives or any prerequisites. It mentions the sibling tool 'list_voices' only indirectly through the voice parameter example.

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. 2 tool updatesv1.0.0
    • First observedlist_voices
    • First observedspeak

TDQS

B3.4/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: list_voices retrieves available options, while speak performs the core text-to-speech action. There is no overlap or ambiguity between them, making it easy for an agent to select the correct tool.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (list_voices and speak), with clear, descriptive names that align with their functions. There are no deviations or mixed conventions in the naming style.

Tool Count2/5

With only two tools, the server feels thin for a text-to-speech domain. While it covers basic functionality (listing and speaking), it lacks operations like stopping speech, adjusting voice parameters, or managing speech queues, which are common in such systems.

Completeness2/5

The tool surface is severely incomplete for a text-to-speech server. It provides list and speak functions but misses essential operations such as pausing, resuming, or canceling speech, and offers no control over voice settings like rate or volume, limiting agent workflows.

Maintenance

ActivityNo data
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers