Damwha

CLI · MCP

Use Damwha from the terminal and your coding agent

The damwha command and a stdio MCP server ship inside the app. They talk to the Damwha app running on your Mac, so Claude Code, Codex and your shell can search conversations, read transcripts and list action items.

The Damwha app has to be running — the command and the MCP server read from it. Until it is, they exit with code 2 and tell you to start it.

Install

From Settings

Open Settings › CLI · MCP in the app. “Install command” links ~/.local/bin/damwha to the app, and “Connect” registers the MCP server with Claude Code or Codex. If ~/.local/bin is not on your PATH the section shows the line to add.

The section appears in the desktop app only, not in the Docker or demo builds.

Manual

Prefer to run it yourself? These are the same commands the settings screen shows (it fills in your real paths).

Install the damwha command

mkdir -p ~/.local/bin && ln -s /Applications/Damwha.app/Contents/Resources/cli/damwha ~/.local/bin/damwha

Claude Code

claude mcp add --transport stdio --scope user damwha -- ~/.local/bin/damwha mcp

Codex

codex mcp add damwha -- ~/.local/bin/damwha mcp

Other MCP clients (JSON)

{
  "mcpServers": {
    "damwha": {
      "command": "/Users/you/.local/bin/damwha",
      "args": ["mcp"]
    }
  }
}

JSON cannot expand ~, so write the full path to the link.

Commands

Add --json to any command for machine-readable output. Messages follow the app's display language.

CommandWhat it does
damwha statusCheck the connection to the app and show model readiness. Exits 0 when connected, 2 when not.
damwha upload <file>Upload an audio file as a new meeting. Options: --title, --recorded-at, --folder, --preset, --whisper-model, --stt-device, --diarization-device, --language, --speakers, --min-speakers, --max-speakers, --no-summary, --no-lens. --wait blocks until processing finishes.
damwha search <query>Search utterances. Options: --limit, --from, --to, --meeting, --folder.
damwha meetingsList meetings, newest recording first. --limit defaults to 100; --cursor continues from the hint printed after a full page.
damwha meeting <id>Show one meeting: summary, tags and speakers.
damwha transcript <id>Print a meeting transcript. Page with --offset and --limit.
damwha lensesList action items, decisions and promises. Options: --kind, --mine, --open, --done, --meeting, --due-from, --due-to, --limit. --mine needs a speaker marked Me.
damwha mcpRun the stdio MCP server. Your agent starts this; you rarely run it by hand.

Exit codes

0
Success.
1
Bad option, unreadable file or an API error.
2
The Damwha app is not running or still starting.
3
upload --wait finished but a processing stage failed.

MCP tools

Registered on one server named damwha. Tools that only read data are marked read-only.

ToolWhat it does
list_lensesList extracted lenses (action items, decisions, promises), newest first. Filter by kind, meeting, folder, due date, completion, or mine.
get_lensOne lens with its meeting title and the supporting utterances.
list_meetingsList meetings with id, recording time, status, folder and title.
get_meetingA meeting's summary, tags and speakers, without the full transcript.
get_transcriptA page of a meeting transcript, paged with next_offset.
searchSearch utterances and get excerpts with meeting id, utterance id and timestamps.
get_meeting_statusProcessing progress of a meeting, for example after an upload.
upload_audioUpload a local audio file as a new meeting and return its id without waiting.
complete_lensMark an open lens as completed, after you confirm. See below.

Completing an item asks you first

complete_lens changes your data, so it never runs on the agent's say-so. Damwha shows a confirmation dialog in your client with the item, meeting, assignee and due date, read fresh from the app. Nothing changes unless you accept; declining or closing the dialog leaves the item open. The tool needs a client that supports MCP elicitation and is hidden from clients that do not.

Your data and the connected service

Data you pull through MCP follows the policy of the LLM service you connected.

Text from conversations is passed to the agent marked as untrusted content. That reduces the chance a spoken sentence is taken as an instruction; it cannot rule it out.