Zernote
Was dieses MCP kann
Uploads, transcribes, searches, codes, and analyzes interviews to produce evidence-linked insights and jobs-to-be-done research structures.
Tools
Eingabeschema
{'type': 'object', 'properties': {'lens': {'enum': ['workflow', 'gtm', 'privacy', 'other'], 'type': 'string', 'description': 'Optional exact lens filter.'}, 'codes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional code tags; any match (e.g. pain:synthesis, gtm:pricing).'}, 'limit': {'type': 'integer', 'description': 'Max cards to return (default 50, max 200).'}, 'offset': {'type': 'integer', 'description': 'Number of cards to skip (default 0).'}, 'folder_id': {'type': 'string', 'description': 'Deprecated alias for project_id.'}, 'project_id': {'type': 'string', 'description': 'Optional project UUID — cards from interviews in this project (alias: folder_id).'}, 'interview_id': {'type': 'string', 'description': 'Optional interview UUID to scope cards.'}, 'interview_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional interview UUIDs to scope cards.'}}}
Eingabeschema
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Skill id. Empty = catalog. Examples: office-hours-zernote, zernote-plan-research.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'blocks'], 'properties': {'intro': {'type': 'string', 'description': 'Spoken opening before the first block.'}, 'blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['title'], 'properties': {'notes': {'type': 'string', 'description': 'Block note shown to the interviewer.'}, 'title': {'type': 'string', 'description': 'Block title, e.g. Opening.'}, 'minutes': {'type': 'integer', 'description': 'Minutes allocated to this block.'}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'key': {'type': 'boolean', 'description': 'True if this is a must-ask question.'}, 'note': {'type': 'string', 'description': 'Interviewer note under the question.'}, 'text': {'type': 'string', 'description': 'Spoken question.'}}}}}}, 'description': 'Timed sections in interview order.'}, 'project_id': {'type': 'string', 'description': 'Project UUID.'}, 'notes_template': {'type': 'string', 'description': 'Post-interview notes template (conspect).'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'markdown'], 'properties': {'markdown': {'type': 'string', 'description': 'Full guide markdown. Replaces the guide stored on the project.'}, 'project_id': {'type': 'string', 'description': 'Project UUID.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'Project UUID.'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'get_node: insight, interview, or group UUID. Not used for ungrouped.'}, 'limit': {'type': 'integer', 'description': 'List only: max insight bodies (default 25, max 100).'}, 'action': {'enum': ['list', 'get_node'], 'type': 'string', 'description': 'list = paged insight bodies + outline. get_node = one insight, interview, group, or ungrouped cluster.'}, 'offset': {'type': 'integer', 'description': 'List only: skip this many matching insight bodies (default 0).'}, 'group_id': {'type': 'string', 'description': 'List filter: insight_groups.id UUID (not a render index like group-0).'}, 'folder_id': {'type': 'string', 'description': 'Deprecated alias for project_id.'}, 'node_type': {'enum': ['insight', 'interview', 'group', 'ungrouped'], 'type': 'string', 'description': 'get_node: which node to load.'}, 'group_name': {'type': 'string', 'description': 'List filter: case-insensitive group name match.'}, 'project_id': {'type': 'string', 'description': 'Project/folder UUID (required for list and for get_node group/ungrouped/insight).'}, 'insight_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'List filter: only these insight UUIDs.'}, 'interview_id': {'type': 'string', 'description': 'List filter: only insights from this interview. Interview must be in the project.'}, 'ungrouped_only': {'type': 'boolean', 'description': 'List filter: only insights that are not in a cross-interview group.'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'Interview UUID (rename, write_summary, write_notes, retranscribe, assign_speakers).'}, 'notes': {'type': 'string', 'description': 'Full note text that replaces the existing notes field (write_notes).'}, 'title': {'type': 'string', 'description': 'New title (rename).'}, 'action': {'enum': ['rename', 'move', 'write_summary', 'write_notes', 'retranscribe', 'assign_speakers', 'set_voiceprint'], 'type': 'string', 'description': 'Edit action.'}, 'enabled': {'type': 'boolean', 'description': 'Voiceprint on/off (set_voiceprint). false deletes stored voice biometrics.'}, 'summary': {'type': 'string', 'description': 'Full summary markdown that replaces the existing summary (write_summary). Expected sections: # Summary, ## Profile, ## Tools & workflow, ## Pains & friction, # Other topics.'}, 'language': {'type': 'string', 'description': 'Transcription language code for retranscribe (e.g. en, ru, nl). Charges tokens for audio duration.'}, 'folder_id': {'type': 'string', 'description': 'Deprecated alias for project_id.'}, 'project_id': {'type': 'string', 'description': 'Destination project UUID for move (alias: folder_id). Omit or null for Inbox.'}, 'interview_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Interview UUIDs to move.'}, 'assigned_names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Human names matching speaker_labels (assign_speakers). Use a real name, not "Interviewer N".'}, 'speaker_labels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Diarization labels to assign (assign_speakers), e.g. ["A"]. Voiceprint interviewer confirm: one label in this call (same identity then backfills other interviews).'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'Interview UUID (required for get, status, transcript).'}, 'limit': {'type': 'integer', 'description': 'For list: max interviews (default 20, max 100). For transcript: max characters (default 4000, max 20000).'}, 'action': {'enum': ['list', 'get', 'status', 'transcript'], 'type': 'string', 'description': 'Read action. Use list (brief or summary_mode=full) for overview; use transcript when you need a quote window.'}, 'offset': {'type': 'integer', 'description': 'For list: skip count. For transcript without around_chunk_index: character offset (default 0).'}, 'folder_id': {'type': 'string', 'description': 'Deprecated alias for project_id.'}, 'inbox_only': {'type': 'boolean', 'description': 'When true with action=list, list Inbox interviews (no project). Ignored if project_id is set.'}, 'notes_mode': {'enum': ['none', 'full'], 'type': 'string', 'description': 'List only. none (default) = omit notes body. full = researcher notes (truncated on list). Use summary when notes are not required.'}, 'project_id': {'type': 'string', 'description': 'Optional project UUID to filter list (alias: folder_id).'}, 'radius_chars': {'type': 'integer', 'description': 'Transcript only with around_chunk_index: chars before/after chunk match (default 1500, max 8000).'}, 'summary_mode': {'enum': ['brief', 'full'], 'type': 'string', 'description': 'List only. brief (default) = short # Summary for triage/rename. full = all summary_fragments (profile/tools/pains/other_topics) when brief is insufficient.'}, 'around_chunk_index': {'type': 'integer', 'description': 'Transcript only: expand a window around this vector-search chunk_index (use instead of blind offset when available).'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'name': {'type': 'string'}, 'when': {'type': 'string'}, 'action': {'enum': ['extract_interview', 'move_interview', 'create_segment', 'fill_in', 'update_job', 'delete_job'], 'type': 'string'}, 'job_id': {'type': 'string'}, 'so_that': {'type': 'string'}, 'category': {'type': 'string'}, 'language': {'type': 'string', 'description': 'Job tree language for extract_interview (en or ru). Defaults to en. Quotes stay in the interview language.'}, 'folder_id': {'type': 'string'}, 'i_want_to': {'type': 'string'}, 'project_id': {'type': 'string'}, 'segment_id': {'type': 'string'}, 'human_edited': {'type': 'boolean'}, 'interview_id': {'type': 'string'}, 'to_segment_id': {'type': 'string'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'action': {'enum': ['list_segments', 'get_tree'], 'type': 'string'}, 'folder_id': {'type': 'string', 'description': 'Project/folder UUID (list_segments).'}, 'project_id': {'type': 'string', 'description': 'Alias for folder_id.'}, 'segment_id': {'type': 'string', 'description': 'Segment UUID (get_tree).'}, 'interview_id': {'type': 'string', 'description': 'Interview UUID (get_tree).'}}}
Eingabeschema
{'type': 'object', 'required': ['interview_id', 'object_key', 'filename', 'size_bytes', 'language'], 'properties': {'title': {'type': 'string', 'description': 'Optional title to apply before confirm.'}, 'filename': {'type': 'string', 'description': 'Original filename.'}, 'language': {'type': 'string', 'description': 'STT language for audio/video (e.g. en, ru, nl). Not used for text/PDF (no transcription).'}, 'object_key': {'type': 'string', 'description': 'R2 object key from prepare.'}, 'size_bytes': {'type': 'integer', 'description': 'File size in bytes.'}, 'interview_id': {'type': 'string', 'description': 'Interview UUID from prepare.'}, 'multipart_parts': {'type': 'array', 'items': {'type': 'object', 'properties': {'etag': {'type': 'string'}, 'part_number': {'type': 'integer'}}}, 'description': 'Completed parts (part_number + etag) when using multipart.'}, 'multipart_upload_id': {'type': 'string', 'description': 'Multipart upload id — complete assembly before confirm.'}}}
Eingabeschema
{'type': 'object', 'required': ['filename', 'size_bytes'], 'properties': {'title': {'type': 'string', 'description': 'Optional interview title (defaults to sanitized filename).'}, 'filename': {'type': 'string', 'description': 'Original filename.'}, 'upload_id': {'type': 'string', 'description': 'Optional multipart upload id from a previous prepare (resume).'}, 'size_bytes': {'type': 'integer', 'description': 'File size in bytes.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the PUT (optional).'}, 'interview_id': {'type': 'string', 'description': 'Optional: existing empty interview UUID — resume upload without creating a new card.'}}}
Eingabeschema
{'type': 'object', 'required': ['interview_id', 'object_key', 'upload_id', 'part_numbers'], 'properties': {'upload_id': {'type': 'string', 'description': 'Multipart upload id from prepare.'}, 'object_key': {'type': 'string', 'description': 'R2 object key from prepare.'}, 'interview_id': {'type': 'string', 'description': 'Interview UUID from prepare.'}, 'part_numbers': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'Part numbers to sign (1-based, max 20).'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'Project UUID (required for rename).'}, 'name': {'type': 'string', 'description': 'Project name (required for create and rename).'}, 'action': {'enum': ['create', 'rename'], 'type': 'string', 'description': 'Edit action.'}, 'description': {'type': 'string', 'description': 'Optional project description (create/rename).'}}}
Eingabeschema
{'type': 'object', 'required': ['action'], 'properties': {'limit': {'type': 'integer', 'description': 'Max number of projects to return (default 50, max 200).'}, 'action': {'enum': ['list'], 'type': 'string', 'description': 'Read action. Currently only list.'}, 'offset': {'type': 'integer', 'description': 'Number of projects to skip before returning results (default 0).'}}}
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'description': 'Max number of interviews to return (default 5, max 10). Ignored when interview_id is set.'}, 'query': {'type': 'string', 'description': 'Natural language search query (hypothesis / claim to evidence).'}, 'chunks_limit': {'type': 'integer', 'description': 'Max matching chunks per interview (default 3 corpus / 8 when interview_id set; max 10 / 20).'}, 'interview_id': {'type': 'string', 'description': 'Optional interview UUID — search only inside this interview; returns smaller chunk windows.'}, 'chunks_offset': {'type': 'integer', 'description': 'Skip this many top chunks per interview (default 0).'}}}
Eingabeschema
{'type': 'object', 'properties': {}}
Letzte Tool-Änderungen
Ähnliche MCP-Server
concordance
Provides deterministic claim verification and audit receipts, along with Bible references, commentary, geography, indexed knowled…
canton-ccpedia
Searches and explains Canton Network and Daml documentation, governance proposals, forums, code examples, APIs, releases, and eco…
BNM Data Shop
Sells access to cached official reports, enforcement orders, regulatory documents, inspection records, and other public-source te…
api-evangelist
Provides API governance analysis, OpenAPI overlays and version diffs, security-sensitive field classification, code samples, matu…
OpenHelvetia Gateway
Provides sourced access to Swiss federal legislation and political data, including law metadata, versions, amendments, citations,…
website-search
Provides security article search and structured guidance, templates, frameworks, and review criteria for incident response, threa…
The Ainglish Project
Maintains a measured, auditable register of language constructs, proposals, evidence, adoption, contributors, protocols, and rati…
Torah Library
Provides searchable Jewish texts, commentaries, source sheets, dictionaries, manuscripts, calendars, learning schedules, parasha …