Skip to main content
Start the server with syntheo mcp. It communicates over stdio and advertises version 2026-07-28 of the MCP protocol. It only reads from and writes to the local database; there is no remote MCP server. Reads are idempotent. Proposal tools create or decline pending edits, without ever applying them. The app only needs to have created its database once; open it to review and apply proposals, and to process recording imports.

Tools

list_meetings

Each meeting contains folder_path, which is null when outside any folder.

list_folders

Returns folders, sorted by path, and pagination. Each folder contains path, name and parent_path (null at the top level). The list includes empty folders and parent folders. Pass a returned path as the folder_path of list_meetings.

get_meeting

Required parameter: meeting_id (string). Returns the meeting metadata, including folder_path, the canonical note, the summaries, the participants and the action items. The transcript is deliberately kept separate. For an imported meeting, the result also contains processing_status and recording_import (otherwise null).

get_meeting_transcript

The result contains meeting_id, text, words and pagination (offset, limit, returned, total, next_offset). A missing pagination.next_offset means the page reaches the end.

get_recurring_meeting_history

Required parameter: meeting_id (string). Optional parameters: limit (20 by default, clamped between 1 and 200) and offset (0 by default). Results from newest to oldest. If the meeting belongs to no series, meetings is empty.

export_meeting

Required parameter: meeting_id (string). Returns the meeting’s full, structured record: metadata, note, summaries, participants, action items and transcripts. Prefer the detail or transcript tools, unless the task really requires a full export. When they exist, speakers gives the names referenced by the transcript’s speaker attributions, and speaker_context describes the microphone and call context. These fields are optional.

propose_summary_edit

The result is a pending proposal. The meeting doesn’t change until the user has applied it in the app.

propose_memo_edit

The result is a pending proposal. content replaces the meeting’s canonical note once the proposal is applied in the app.

list_proposals

get_proposal

Required parameter: proposal_id (string). Returns the metadata and a unified diff. The proposal is not applied.

decline_proposal

Required parameter: proposal_id (string). Declines a pending proposal without changing the meeting. A proposal that has already been applied or declined can’t be declined.

import_recording

Creates a meeting from an audio file on the MCP server’s computer. The app must be open on the same database: it transcribes the file with the configured transcription server, then generates the summary with the configured LLM. The audio is sent to that server. Returns meeting_id, job_id, processing_status, summary_status and error (possibly null). The file is not copied: don’t move it before the job ends. Poll get_recording_import until done or failed, and keep the returned IDs in case the client disconnects. An interrupted job keeps its meeting and the transcript already produced; it is not restarted automatically.

get_recording_import

Required parameter: job_id (string). Reads the durable state without starting any work. Processing states: queued, importing, transcribing, summarizing, done, failed. Summary states: pending, done, skipped_no_model, skipped_too_short, failed. A successful import can have a skipped summary. queued only progresses if the app is open.

Resources

The resource list returns recent meetings in pages of 20. Its cursor is a numeric offset.

Errors

A meeting, proposal or import that can’t be found produces an “invalid params” error. Validation failures and conflicts (empty proposal content, several summaries without target_id, declining a proposal that is no longer pending, app closed during an import) are reported as internal errors, as are database failures. See Errors and exit codes.