Mtalk
Push-to-talk voice rooms on mosadd. Half-duplex floor control — one speaker at a time, FIFO queue, anti-hog auto-release. Use when the user wants a walkie-talkie style room, "open a PTT channel", join an ops/field-team room, or hold the floor to speak. NOT for full-duplex 1:1 voice (that's mDM_call_start).From its SKILL.md
npx -y skills add Hei33enberg/mosADD-OS --skill mtalkAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.5 KB, as published. Nobody here has run it
mosadd Push-to-Talk (mTALK)
This skill operates the mTALK OS module of mosadd — half-duplex voice rooms with explicit floor control. The audio itself flows over the VoiceProvider's media transport (LiveKit by default); these tools coordinate who may transmit, which is the part that makes a PTT channel work.
When to invoke
Trigger on these user intents:
- "Open a PTT room called <X>" —
mTALK_open(creates the room, returns a stableroom_id) - "Join the <X> PTT room" / "Give me join creds" —
mTALK_join(returns{ token, url, identity }for the client to connect) - "Take the floor" / "Press to talk" —
mTALK_press(request the floor; you may have to wait in FIFO if someone else is talking) - "Release the floor" / "Done talking" —
mTALK_release - "Who's talking?" / "What's the state of <room>?" —
mTALK_state(current speaker, queue, your position)
How to operate
-
Open before join.
mTALK_openis idempotent — samelabelreturns the sameroom_id. Always call this first when the user names a room you haven't seen this session. -
Don't request the floor unless the user asks to speak. Pressing the PTT puts you in the speaker queue; if you do it speculatively while reading state, you'll hog the floor from a real participant. Wait for an explicit "I'll talk" / "press PTT".
-
Release explicitly. The floor has an anti-hog auto-release timeout (server-side), but releasing manually with
mTALK_releasethe moment the user is done is the polite default. -
Audio is client-side. The MCP server does not stream audio. After
mTALK_joinreturns{ token, url, identity }, hand those credentials to a real client (the user's mosadd app, a daemon, a bot's WebRTC stack). Don't try to "speak" through MCP — there's no audio path through the tool call.
Configuration
mTALK needs the LiveKit credentials in env (BYOK):
MOSADD_LIVEKIT_URL=wss://<your-livekit-host>
MOSADD_LIVEKIT_API_KEY=<api key>
MOSADD_LIVEKIT_API_SECRET=<api secret>
If unset, mTALK is missing from comms_capabilities and the tools fail closed with an actionable error. Direct the user to https://mosadd.com/docs/quickstart#byok-config.
Example
User: "Open a PTT room for the field team. I want to take the floor."
You:
mTALK_open({ label: "field-team" })→{ room_id: "ptt:field-team" }mTALK_join({ room_id: "ptt:field-team" })→{ token, url, identity, room_id }mTALK_press({ room_id: "ptt:field-team" })→ either{ on_floor: true }or{ queued: true, position: 2 }- Tell the user: "Field-team room is up — use the credentials in your mosadd client to connect. You have the floor." (or: "...you're #2 in the queue, will get the floor when <speaker> releases.")
Don't
- Don't claim audio is end-to-end encrypted — the media path is DTLS-SRTP between client and SFU (LiveKit), not E2E.
- Don't press PTT just to "check if I can speak" — that consumes the floor from real speakers.
- Don't confuse mTALK with mDM full-duplex voice. mTALK = walkie-talkie semantics (half-duplex, one speaker); mDM = phone-style 1:1 (full-duplex).