Skip to main content
Glama

turnwise

An MCP server that scores dialogue transcripts for bridging quality.

Pre/post surveys ask participants how they felt. turnwise reads what they said, and gives each speaker six scores.

### Concession: 4.00, confidence 0.75

Three markers across 175 words, granting a point to the other side twice and
stating a changed view once, for a weighted density of 2.40 per 100 words.

> [turn 11] **Sam:** "Although you got me on the transportation contract."
> [turn 11] **Sam:** "But I'm less comfortable than I was ten minutes ago."

extract_evidence returns the pattern matches with the rule that fired and the turns where nothing matched, leaving you to decide whether a match means what the rule assumes.

Install

npm install && npm run build

Add this to claude_desktop_config.json, then restart Claude Desktop:

{
  "mcpServers": {
    "turnwise": {
      "command": "node",
      "args": ["/absolute/path/to/turnwise/dist/index.js"]
    }
  }
}

Related MCP server: tts-audio-mcp

Tools

Tool

Purpose

score_conversation

Per-speaker scores with evidence. arc_segments: 3 shows change across a session.

extract_evidence

Matches for you to adjudicate, plus unmatched turns.

parse_transcript

Check speaker detection before scoring.

compare_conversations

Two sessions side by side.

analyze_cohort

Aggregate many conversations, with effect sizes.

explain_indicator

Full rubric, limits, and citations for one indicator.

transcribe_audio

Local speech-to-text for one recording.

transcribe_session

Multitrack folder to one speaker-labeled transcript.

check_audio_support

Which local backends are installed.

The parser detects WebVTT, SRT, Otter, Rev, plain Speaker: text, and JSON.

Indicators

Indicator

Direction

Grounded in

Receptiveness

higher is better

Yeomans, Minson, Collins, Chen & Gino (2020)

Perspective-taking

higher is better

Kalla & Broockman (2020, 2023)

Contempt

lower is better

Gottman & Levenson (1992, 2002)

Curiosity

higher is better

Huang, Yeomans, Brooks, Minson & Gino (2017)

Concession

higher is better

Hussein & Tormala (2021); Deutsch (1973); Fisher & Ury

Personal disclosure

higher is better

Kubin, Puryear, Schein & Gray (2021); Broockman & Kalla (2016)

Follow-up questions and reciprocated disclosure are computed from turn structure, and explain_indicator covers the rest.

Audio

pip install mlx-whisper        # Apple Silicon, fastest
pip install -U openai-whisper  # cross-platform
brew install whisper-cpp       # no Python
brew install ffmpeg            # video and multitrack

transcribe_audio returns text without speaker labels, because this tool does no diarization.

Changing one recording setting fixes this: in Zoom, turn on Settings > Recording > Record a separate audio file for each participant, then point transcribe_session at the folder. Each file holds one person, so attribution is exact and the filenames become the speaker names.

Limits

Read docs/METHODOLOGY.md before putting these numbers in a report.

Validation against trained human coders is still outstanding, so treat these as evidence-linked observations. Contempt comes in low because tone carries most of it and a transcript has none, and sarcastic agreement will score as ordinary agreement. Participants choose which workshop to attend, so a difference between two groups may come from who signed up rather than from anything the program did.

Development

npm test          # 32 unit tests
npm run calibrate # 22 minimal pairs the instrument must order correctly
npm run smoke     # exercises every tool over MCP

Run calibrate after any lexicon edit, since it also tracks the adversarial cases that pattern matching cannot solve.

Editing src/lexicon.ts changes the instrument, so bump RUBRIC_VERSION when you do, or year-over-year comparisons stop meaning anything.

Apache-2.0.

Available Tools

9 tools
analyze_cohortAggregate across many conversationsA

Combine scores from multiple conversations into one report: per-indicator means, spread, and optional group comparison with effect size. This is the tool that produces something a funder can read. Pass the structured score objects returned by score_conversation.

Inputs: scores (required), group_by, indicators.

check_audio_supportCheck local transcription supportA

Report which local speech-to-text backends and media tools are installed, with install instructions if none are. Use this before attempting transcription so a missing dependency surfaces as a clear answer.

Inputs: no named parameters.

compare_conversationsCompare two conversationsA

Score two transcripts and lay them side by side with the difference on each indicator. Use for before/after comparisons: the same group early and late in a program, one workshop format against another, or a facilitator's first session against their tenth.

Inputs: label_a, label_b, indicators, transcript_a, +3 more.

explain_indicatorExplain an indicatorA

Return the full rubric for one indicator: what it measures, what counts as evidence, what does not count, the 0-4 anchors, the thresholds, what the score cannot tell you, and the research behind it. Use whenever someone asks what a score means or challenges one.

Inputs: indicator (required).

extract_evidenceGet raw evidence for your own judgmentA

Return every pattern match the instrument found, with the quote and the rule that fired, plus the turns where nothing matched. Use this when the reading matters more than the number: you confirm or reject each candidate yourself, catching sarcasm and quoted speech that a word list scores wrong, and catching behavior in the unmatched turns that no pattern covers. This is the tool for producing a defensible qualitative summary.

Inputs: meta, format, indicators, transcript, +2 more.

parse_transcriptParse a transcriptA

Normalize a transcript into speaker turns and compute structural metrics: turn counts, airtime share per speaker, airtime concentration, and question rate. Run this when a transcript's format is uncertain, to confirm speakers were detected correctly before scoring.

Inputs: meta, format, transcript, speaker_aliases, +1 more.

score_conversationScore a dialogue transcriptA

Score a conversation for bridging quality. Returns a 0-4 score per speaker per indicator (receptiveness, perspective-taking, contempt, curiosity, concession, personal disclosure), each with quoted evidence anchored to turn numbers, a confidence value, and deterministic airtime metrics. Set arc_segments to 3 to see how the conversation changed from opening to close.

Inputs: meta, format, indicators, transcript, +3 more.

transcribe_audioTranscribe a recordingA

Transcribe a single audio or video recording to WebVTT using a local speech model. Audio stays on this machine. A mixed track cannot be reliably split by speaker, so the result omits speaker labels and cannot produce per-speaker scores. For those, record one file per participant and use transcribe_session.

Inputs: file_path (required), model, backend, language.

transcribe_sessionTranscribe a multitrack sessionA

Transcribe a folder of per-participant recordings and merge them into one speaker-labeled transcript ordered by timestamp. Each file contains exactly one person, so speaker attribution is exact. This is the recommended path for anything that needs per-speaker scores. In Zoom, enable Settings > Recording > 'Record a separate audio file for each participant'. Speaker names come from the filenames.

Inputs: directory (required), model, backend, language, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 9 tools

    Disambiguation5/5

    Each tool targets a distinct stage in the analysis pipeline, from environment checks to transcription, parsing, scoring, evidence extraction, comparison, cohort analysis, and rubric explanation. No two tools share the same purpose, and descriptions clearly differentiate similar operations like transcribe_audio vs transcribe_session.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun snake_case pattern (e.g., check_audio_support, transcribe_session, score_conversation). This makes the action and target immediately clear, and there are no stylistic deviations.

    Tool Count5/5

    With 9 tools, the set is well-scoped and each tool earns its place. The count fits within the ideal 3-15 range and covers the full workflow without redundancy.

    Completeness5/5

    The server covers the entire lifecycle from pre-transcription checks to group-level analysis and rubric explanation. There are no obvious gaps: transcription, parsing, scoring, qualitative evidence review, comparison, and cohort aggregation are all represented.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that evaluates whether retrieval methods and AI outputs are grounded in long narrative manuscripts by retrieving evidence and scoring coverage deterministically, without external model APIs. It provides tools for chunking, indexing, retrieval, and evaluation.
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that converts videos, audio, and meeting recordings into structured transcripts and summaries with multi-backend ASR and automatic fallback.
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      MCP server for refereeing tabletop RPG sessions by analyzing transcripts against a configurable charter, providing deterministic findings on rule violations like unanswered questions or unacknowledged dice rolls.
      2
      23 PyPI
      MIT