MCP server that reads existing Copilot summaries aloud via Windows SAPI with voice fallback.
Project description
MCP TTS Copilot Summary
Python MCP server for Windows text-to-speech that reads existing Copilot summaries using SAPI voice fallback.
Behavior Summary
- Exposes two MCP tools:
speak_textspeak_existing_summary
- Consumes already-prepared summary text (no extra summarization pipeline).
- Trigger strategy is MCP-only and instruction-driven.
- Voice fallback policy:
- Use Zira if available.
- Else use first available SAPI voice.
- If no SAPI voice is available, return non-fatal
skippedwith warning.
- Speech call behavior is non-blocking by default (
MCP_TTS_SUMMARY_ASYNC_SPEECH=true), so Copilot can continue responding immediately.
Install
pip
python -m pip install -e .
uv
uv pip install -e .
Run
python -m mcp_tts_copilot_summary.main
Uses stdio transport.
Configuration
Environment variables:
MCP_TTS_SUMMARY_ENABLED(default:true)MCP_TTS_SUMMARY_MIN_PARAGRAPHS(default:4)MCP_TTS_SUMMARY_MIN_NEW_CODE_LINES(default:100)MCP_TTS_SUMMARY_RATE(default:0)MCP_TTS_SUMMARY_VOLUME(default:100)MCP_TTS_SUMMARY_ASYNC_SPEECH(default:true)
Guard criteria used by tools:
- Speak only when
paragraph_count > 4ORnew_code_lines > 100. - If metadata is not provided, tools proceed unless disabled.
VS Code MCP Registration (Example)
See examples/mcp.json for a complete sample.
If mcp-tts-copilot-summary is not on PATH, prefer launching with python -m mcp_tts_copilot_summary.main.
For this workspace on Windows, use:
{
"mcpServers": {
"tts-copilot-summary": {
"command": "python",
"args": ["-m", "mcp_tts_copilot_summary.main"],
"env": {
"MCP_TTS_SUMMARY_ENABLED": "true",
"MCP_TTS_SUMMARY_MIN_PARAGRAPHS": "4",
"MCP_TTS_SUMMARY_MIN_NEW_CODE_LINES": "100",
"MCP_TTS_SUMMARY_RATE": "0",
"MCP_TTS_SUMMARY_VOLUME": "100"
}
}
}
}
This same config is also available at:
examples/mcp.json.vscode/mcp.json
Agent Instruction Snippet
Use this policy in your agent instructions:
Call `speak_existing_summary` (or `speak_text`) only when:
- response has more than 4 paragraphs, OR
- response introduces more than 100 new code lines.
Pass existing summary text directly as `summary_text`.
Do not generate a second summary for TTS.
Also see examples/agent-instruction.md.
Verification
python -m pip install -e .
pytest -q
Publish to PyPI
This package is ready for both pip and uv once published on PyPI.
- Create a GitHub repository and push this project.
- In GitHub repository settings, configure trusted publishing for PyPI.
- The workflow at
.github/workflows/publish.ymlbuilds and attempts publish automatically on every push tomain(including merges), on release publish, and on manual dispatch. - For an actual new upload to PyPI, bump
versioninpyproject.tomlbefore pushing. If the version already exists, publish is safely skipped.
After publication, installation works globally with either tool:
python -m pip install mcp-tts-copilot-summary
uv pip install mcp-tts-copilot-summary
Manual checks:
- Start MCP server and run
tools/list. - Confirm
speak_textandspeak_existing_summaryare listed. - Invoke either tool with sample summary text.
- Confirm Zira is used when available, otherwise first SAPI voice, otherwise
skippedwarning.
Copy-Ready Smoke Calls
Expected to speak:
{
"summary_text": "This is a test summary for speech output.",
"paragraph_count": 5,
"new_code_lines": 0
}
Expected to skip (threshold not met):
{
"summary_text": "Short summary.",
"paragraph_count": 2,
"new_code_lines": 10
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_tts_copilot_summary-0.1.1.tar.gz.
File metadata
- Download URL: mcp_tts_copilot_summary-0.1.1.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ce9c09acfbfb7b18ff86c293669a8012ec37b02a84d01bcf8f4da0a0bfdbcc4
|
|
| MD5 |
ac94c282440e94cad0633cea415de8f9
|
|
| BLAKE2b-256 |
9c4767e5efd1bf4b90f4d86305a8aabbf39c00181ea8c3905c66b022184b58d8
|
Provenance
The following attestation bundles were made for mcp_tts_copilot_summary-0.1.1.tar.gz:
Publisher:
publish.yml on ArneTillmann/mcp-tts-copilot-summary
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_tts_copilot_summary-0.1.1.tar.gz -
Subject digest:
9ce9c09acfbfb7b18ff86c293669a8012ec37b02a84d01bcf8f4da0a0bfdbcc4 - Sigstore transparency entry: 985388512
- Sigstore integration time:
-
Permalink:
ArneTillmann/mcp-tts-copilot-summary@dc054de5b9a008a03c35c58eda930c9ff0f36009 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ArneTillmann
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dc054de5b9a008a03c35c58eda930c9ff0f36009 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_tts_copilot_summary-0.1.1-py3-none-any.whl.
File metadata
- Download URL: mcp_tts_copilot_summary-0.1.1-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
136ea2073ec97fa7cdfba4fc67baaecca1bb72b1fd2709d84dc99af61e258c84
|
|
| MD5 |
45006fa7d53a227f706cbc58251a437c
|
|
| BLAKE2b-256 |
898d756c615f6f0188cdd5ee33456a1ec17be10e00b8bf159088fae858cdf3c3
|
Provenance
The following attestation bundles were made for mcp_tts_copilot_summary-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on ArneTillmann/mcp-tts-copilot-summary
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_tts_copilot_summary-0.1.1-py3-none-any.whl -
Subject digest:
136ea2073ec97fa7cdfba4fc67baaecca1bb72b1fd2709d84dc99af61e258c84 - Sigstore transparency entry: 985388518
- Sigstore integration time:
-
Permalink:
ArneTillmann/mcp-tts-copilot-summary@dc054de5b9a008a03c35c58eda930c9ff0f36009 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ArneTillmann
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dc054de5b9a008a03c35c58eda930c9ff0f36009 -
Trigger Event:
push
-
Statement type: