accueil / serveurs / Recherche & Web / com.zernote/zernote
com.zernote/zernote
serveur MCP (Model Context Protocol) · zernote-mcp 0.2.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que com.zernote/zernote est sûr ?
Au dernier audit MCP Hub, le serveur MCP « com.zernote/zernote » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 17 outils
- cards_read≈ 410 tokens
List L2 coded claim-cards (claim + optional quote + chunk_index + lens + codes + start_seconds? + url). Filter by project_id, interview_id / interview_ids, codes (any match), or lens (workflow|gtm|privacy|other). CITATION REQUIRED: actively cite each card.quote to the user as markdown ["verbatim quote"]({base_url}/project/interview/{id}?t={seconds}) using item.url from the tool result (already absolute; includes ?t= when start_seconds is set). Prefer quotes over paraphrase. Verify with interviews_read action=transcript around_chunk_index when a wider quote window is needed.
Paramètres, retour & exemple (8)
Paramètreslens· string · optionnel · workflow | gtm | privacy | other
Optional exact lens filter.codes· array · optionnel
Optional code tags; any match (e.g. pain:synthesis, gtm:pricing).limit· integer · optionnel
Max cards to return (default 50, max 200).offset· integer · optionnel
Number of cards to skip (default 0).folder_id· string · optionnel
Deprecated alias for project_id.project_id· string · optionnel
Optional project UUID — cards from interviews in this project (alias: folder_id).interview_id· string · optionnel
Optional interview UUID to scope cards.interview_ids· array · optionnel
Optional interview UUIDs to scope cards.
Exemple d'appel{"name": "cards_read", "arguments": {"lens": "workflow", "codes": [], "limit": 1, "offset": 1, "folder_id": "texte", "project_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get-skills≈ 154 tokens
Use for startup ideas, office hours, and “I installed this connector to work through an idea”. Inside: office-hours-zernote (challenge the idea), zernote-plan-research. Omit id for the catalog, then pass id for the full playbook. Not for listing interviews or projects. Works without login.
Paramètres, retour & exemple (1)
Paramètresid· string · optionnel
Skill id. Empty = catalog. Examples: office-hours-zernote, zernote-plan-research.
Exemple d'appel{"name": "get-skills", "arguments": {"id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - guides_create≈ 391 tokens
Create the first interview guide on a project. Use this to upload a new guide. Pass structured fields, not markdown: intro, blocks (title, minutes, notes, questions with text/note/key), and notes_template. Needs at least one block with a title. Fails if the project already has a guide — then use guides_edit. Core does not show the guide. Live reads it on the project.
Paramètres, retour & exemple (4)
Paramètresintro· string · optionnel
Spoken opening before the first block.blocks· array · requis
Timed sections in interview order.project_id· string · requis
Project UUID.notes_template· string · optionnel
Post-interview notes template (conspect).
Exemple d'appel{"name": "guides_create", "arguments": {"blocks": [], "project_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - guides_edit≈ 280 tokens
Replace an existing interview guide from markdown. To create the first guide, call guides_create. Text before the first ## is the intro. ## Title (12) or ## Title (7–11) is a block; minutes are the last number in parentheses. Lines starting with - or 1. are questions; a leading * marks a key question; the next indented line is the question note. A paragraph under the block heading before the first question is the block note. ## Конспект is the post-interview notes template, not a block. Optional line `Общее время: 30` or `Total: 30` sets total minutes; otherwise they are the sum of block minutes. Anything that does not match is returned in remainder and kept, not dropped. The previous guide is replaced entirely.
Paramètres, retour & exemple (2)
Paramètresmarkdown· string · requis
Full guide markdown. Replaces the guide stored on the project.project_id· string · requis
Project UUID.
Exemple d'appel{"name": "guides_edit", "arguments": {"markdown": "texte", "project_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - guides_read≈ 128 tokens
Read the interview guide stored on a project. The guide has an intro, ordered blocks (title, minutes, questions, notes), total time, a notes template, and any markdown that did not parse. Returns an empty guide when the project has none.
Paramètres, retour & exemple (1)
Paramètresproject_id· string · requis
Project UUID.
Exemple d'appel{"name": "guides_read", "arguments": {"project_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - insights_read≈ 586 tokens
Read the project Insights graph in pages or by node. action=list returns a compact folder-wide outline (groups + interviews) plus a page of insight bodies. Filter with interview_id, group_id (DB UUID, not UI group-0), group_name, insight_ids, or ungrouped_only. action=get_node returns one node: insight | interview | group | ungrouped. CITATION REQUIRED: actively cite each item.quote as markdown ["verbatim quote"]({base_url}/project/interview/{id}?t={seconds}) using item.url from the tool result (already absolute; includes ?t= when start_seconds is set). Prefer quotes over paraphrase. Do not use quote_start — that is a character offset, not a player timestamp.
Paramètres, retour & exemple (12)
Paramètresid· string · optionnel
get_node: insight, interview, or group UUID. Not used for ungrouped.limit· integer · optionnel
List only: max insight bodies (default 25, max 100).action· string · requis · list | get_node
list = paged insight bodies + outline. get_node = one insight, interview, group, or ungrouped cluster.offset· integer · optionnel
List only: skip this many matching insight bodies (default 0).group_id· string · optionnel
List filter: insight_groups.id UUID (not a render index like group-0).folder_id· string · optionnel
Deprecated alias for project_id.node_type· string · optionnel · insight | interview | group | ungrouped
get_node: which node to load.group_name· string · optionnel
List filter: case-insensitive group name match.project_id· string · optionnel
Project/folder UUID (required for list and for get_node group/ungrouped/insight).insight_ids· array · optionnel
List filter: only these insight UUIDs.interview_id· string · optionnel
List filter: only insights from this interview. Interview must be in the project.ungrouped_only· boolean · optionnel
List filter: only insights that are not in a cross-interview group.
Exemple d'appel{"name": "insights_read", "arguments": {"action": "list"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - interviews_edit≈ 720 tokens
Rename, move, write summary/notes, retranscribe, assign/confirm speakers, or toggle voiceprint. action=rename needs id+title; move needs interview_ids (+ optional project_id); write_summary needs id+summary; write_notes needs id+notes; retranscribe needs id+language (charges transcription tokens again; analyze-only, keeps notes). assign_speakers needs id+speaker_labels+assigned_names. For voiceprint interviewer confirm: one label + real name on one interview after quote links; that identity backfills other interviews sharing voice_identity_id — re-list instead of confirming every card. set_voiceprint needs enabled bool (false purges biometric voice data). If need_approve_speakers=true, show quote links then assign_speakers when the user confirms. If transcript_quality.looks_corrupted=true, offer retranscribe with the correct language. write_notes and write_summary replace the entire notes or summary field (not append).
Paramètres, retour & exemple (12)
Paramètresid· string · optionnel
Interview UUID (rename, write_summary, write_notes, retranscribe, assign_speakers).notes· string · optionnel
Full note text that replaces the existing notes field (write_notes).title· string · optionnel
New title (rename).action· string · requis · rename | move | write_summary | write_notes | retranscribe | assign_speakers | set_voiceprint
Edit action.enabled· boolean · optionnel
Voiceprint on/off (set_voiceprint). false deletes stored voice biometrics.summary· string · optionnel
Full summary markdown that replaces the existing summary (write_summary). Expected sections: # Summary, ## Profile, ## Tools & workflow, ## Pains & friction, # Other topics.language· string · optionnel
Transcription language code for retranscribe (e.g. en, ru, nl). Charges tokens for audio duration.folder_id· string · optionnel
Deprecated alias for project_id.project_id· string · optionnel
Destination project UUID for move (alias: folder_id). Omit or null for Inbox.interview_ids· array · optionnel
Interview UUIDs to move.assigned_names· array · optionnel
Human names matching speaker_labels (assign_speakers). Use a real name, not "Interviewer N".speaker_labels· array · optionnel
Diarization labels to assign (assign_speakers), e.g. ["A"]. Voiceprint interviewer confirm: one label in this call (same identity then backfills other interviews).
Exemple d'appel{"name": "interviews_edit", "arguments": {"action": "rename"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - interviews_read≈ 718 tokens
Read interviews. Typical path: (1) action=list with summary_mode=brief (default) — returns the short # Summary. List items include need_approve_speakers (+ pending_speakers / hint): when true, show interviewer quote links then confirm via assign_speakers; one identity confirm backfills other interviews sharing voice_identity_id. Use summary_mode=brief for renaming or folder triage. Use summary_mode=full when Profile/Tools/Pains/Other topics are needed for deeper analysis. (2) call `search` when you need evidence or counter-evidence for a hypothesis; (3) use action=transcript with around_chunk_index from matching_chunks when a quote window is required. CITATION REQUIRED: when answering the user, actively cite evidence as markdown ["verbatim quote"]({base_url}/project/interview/{id}?t={seconds}) using interview_url / matching chunk url from tool results (includes ?t= when start_seconds is set). Prefer quotes over paraphrase.
Paramètres, retour & exemple (11)
Paramètresid· string · optionnel
Interview UUID (required for get, status, transcript).limit· integer · optionnel
For list: max interviews (default 20, max 100). For transcript: max characters (default 4000, max 20000).action· string · requis · list | get | status | transcript
Read action. Use list (brief or summary_mode=full) for overview; use transcript when you need a quote window.offset· integer · optionnel
For list: skip count. For transcript without around_chunk_index: character offset (default 0).folder_id· string · optionnel
Deprecated alias for project_id.inbox_only· boolean · optionnel
When true with action=list, list Inbox interviews (no project). Ignored if project_id is set.notes_mode· string · optionnel · none | full
List only. none (default) = omit notes body. full = researcher notes (truncated on list). Use summary when notes are not required.project_id· string · optionnel
Optional project UUID to filter list (alias: folder_id).radius_chars· integer · optionnel
Transcript only with around_chunk_index: chars before/after chunk match (default 1500, max 8000).summary_mode· string · optionnel · brief | full
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· integer · optionnel
Transcript only: expand a window around this vector-search chunk_index (use instead of blind offset when available).
Exemple d'appel{"name": "interviews_read", "arguments": {"action": "list"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - jtbd_edit≈ 248 tokens
Edit JTBD graph: extract_interview, move_interview, create_segment, fill_in job, update_job, delete_job.
Paramètres, retour & exemple (14)
Paramètresname· string · optionnelwhen· string · optionnelaction· string · requis · extract_interview | move_interview | create_segment | fill_in | update_job | delete_jobjob_id· string · optionnelso_that· string · optionnelcategory· string · optionnellanguage· string · optionnel
Job tree language for extract_interview (en or ru). Defaults to en. Quotes stay in the interview language.folder_id· string · optionneli_want_to· string · optionnelproject_id· string · optionnelsegment_id· string · optionnelhuman_edited· boolean · optionnelinterview_id· string · optionnelto_segment_id· string · optionnel
Exemple d'appel{"name": "jtbd_edit", "arguments": {"action": "extract_interview"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - jtbd_read≈ 198 tokens
Read JTBD job graph segments and trees. action=list_segments needs folder_id/project_id. action=get_tree needs segment_id or interview_id. CITATION REQUIRED: cite job quotes as ["text"](interview_url).
Paramètres, retour & exemple (5)
Paramètresaction· string · requis · list_segments | get_treefolder_id· string · optionnel
Project/folder UUID (list_segments).project_id· string · optionnel
Alias for folder_id.segment_id· string · optionnel
Segment UUID (get_tree).interview_id· string · optionnel
Interview UUID (get_tree).
Exemple d'appel{"name": "jtbd_read", "arguments": {"action": "list_segments"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - mcp_confirm_upload≈ 346 tokens
App-only: confirm a completed R2 upload (single PUT or multipart) for an Inbox interview. Audio/video is enqueued for transcription (STT + diarization). Text (.txt/.md) and PDF are stored and marked ready immediately — no transcription.
Paramètres, retour & exemple (8)
Paramètrestitle· string · optionnel
Optional title to apply before confirm.filename· string · requis
Original filename.language· string · requis
STT language for audio/video (e.g. en, ru, nl). Not used for text/PDF (no transcription).object_key· string · requis
R2 object key from prepare.size_bytes· integer · requis
File size in bytes.interview_id· string · requis
Interview UUID from prepare.multipart_parts· array · optionnel
Completed parts (part_number + etag) when using multipart.multipart_upload_id· string · optionnel
Multipart upload id — complete assembly before confirm.
Exemple d'appel{"name": "mcp_confirm_upload", "arguments": {"filename": "texte", "language": "texte", "object_key": "texte", "size_bytes": 1, "interview_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - mcp_prepare_upload≈ 253 tokens
App-only: create an Inbox interview and return a presigned R2 upload URL (or multipart upload_id for large files). Pass interview_id (+ upload_id for multipart) to resume without a new card.
Paramètres, retour & exemple (6)
Paramètrestitle· string · optionnel
Optional interview title (defaults to sanitized filename).filename· string · requis
Original filename.upload_id· string · optionnel
Optional multipart upload id from a previous prepare (resume).size_bytes· integer · requis
File size in bytes.content_type· string · optionnel
MIME type for the PUT (optional).interview_id· string · optionnel
Optional: existing empty interview UUID — resume upload without creating a new card.
Exemple d'appel{"name": "mcp_prepare_upload", "arguments": {"filename": "texte", "size_bytes": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - mcp_sign_upload_parts≈ 183 tokens
App-only: return presigned R2 URLs for one or more multipart upload parts (resume-safe).
Paramètres, retour & exemple (4)
Paramètresupload_id· string · requis
Multipart upload id from prepare.object_key· string · requis
R2 object key from prepare.interview_id· string · requis
Interview UUID from prepare.part_numbers· array · requis
Part numbers to sign (1-based, max 20).
Exemple d'appel{"name": "mcp_sign_upload_parts", "arguments": {"upload_id": "texte", "object_key": "texte", "interview_id": "texte", "part_numbers": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - projects_edit≈ 172 tokens
Create or rename projects. action=create needs name; action=rename needs id and name. Delete is not supported yet.
Paramètres, retour & exemple (4)
Paramètresid· string · optionnel
Project UUID (required for rename).name· string · optionnel
Project name (required for create and rename).action· string · requis · create | rename
Edit action.description· string · optionnel
Optional project description (create/rename).
Exemple d'appel{"name": "projects_edit", "arguments": {"action": "create"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - projects_read≈ 171 tokens
Read existing research folders. Not for a new startup idea or office hours — call get-skills first. action=list returns projects for the authenticated user.
Paramètres, retour & exemple (3)
Paramètreslimit· integer · optionnel
Max number of projects to return (default 50, max 200).action· string · requis · list
Read action. Currently only list.offset· integer · optionnel
Number of projects to skip before returning results (default 0).
Exemple d'appel{"name": "projects_read", "arguments": {"action": "list"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - search≈ 381 tokens
Semantic search for evidence / counter-evidence after you have interview context (e.g. from list/summary). Optional interview_id scopes search to one interview and returns smaller text windows. Returns matching_chunks[{chunk_index, text, similarity, start_seconds?, url}]. CITATION REQUIRED: actively cite hits to the user as markdown ["verbatim quote from text"]({base_url}/project/interview/{id}?t={seconds}) using each chunk's url field from the tool result (already absolute; includes ?t= when start_seconds is present). Prefer quoting matching_chunks over paraphrase. Expand with interviews_read action=transcript around_chunk_index when a wider quote window is needed.
Paramètres, retour & exemple (5)
Paramètreslimit· integer · optionnel
Max number of interviews to return (default 5, max 10). Ignored when interview_id is set.query· string · requis
Natural language search query (hypothesis / claim to evidence).chunks_limit· integer · optionnel
Max matching chunks per interview (default 3 corpus / 8 when interview_id set; max 10 / 20).interview_id· string · optionnel
Optional interview UUID — search only inside this interview; returns smaller chunk windows.chunks_offset· integer · optionnel
Skip this many top chunks per interview (default 0).
Exemple d'appel{"name": "search", "arguments": {"query": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - upload_interview≈ 156 tokens
Opens the in-Claude MCP Apps widget "Upload To Zernote" so the user can drop a file into Inbox in this chat (audio/video max 2GB; text .txt/.md or PDF max 50MB). Use when the user wants to upload/add an interview or get started on an empty account — this is the usual ingest path in Claude. Audio/video starts transcription; text/PDF become ready immediately (no speaker diarization). Claude can name interviews after upload.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "upload_interview", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».