search_notes
Find relevant notes by keyword, exact phrase, or meaning and return ranked excerpts; filter by note, folder, tag, or date.
Instructions
Search notes: hybrid (keyword + meaning) by default. Returns ranked excerpts, not whole notes.
Use type="text" for an exact identifier, filename, code symbol or quoted phrase; "hybrid" for questions and topics.
READ THE SECTION, NOT THE NOTE. A hit's
sectionis the heading its excerpt came from — pass that string to get_note'ssectionto get that part alone. If a long hit has nosection, get_note with limit:1000 returns itsheadingsoutline; pick one and re-read withsection. For prose without headings, a hit'sexcerpt_offsetgoes to get_note asoffset.A hit is a candidate, not an answer.
relevanceis relative to the best hit in this response, so the top result always reads 1.0 — an ordering, not a verdict;best_scoreis that hit's own raw similarity.matched_bysays which arms found it: semantic_score alone means "about something similar", never that it confirms your question. Quote the excerpt or open the note — a score is never evidence.exact:truemeans the query occurs verbatim in that note;text_tierof "or" or "substring" means the strict words missed and a looser pass filled in — recall, not confirmation.A long note such as a book comes back as one hit with one excerpt. To find more places in it, search again with its
note_id: results are then places inside that note, best first.Dates here filter, they do not rank. For "what changed lately" use list_notes, which sorts by recency; it is also how you browse by folder or tag, since a query is required here.
has_morewithnext_offsetpages the results.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"query": "<query>"
},
"name": "search_notes"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Restrict to notes with this tag | |
| type | No | "hybrid" fuses keyword and meaning-based matching and is the right default; "text" is keyword-only and exact; "semantic" is meaning-only | hybrid |
| limit | No | Hits per page. Prefer has_more with offset over asking for one large page | |
| query | Yes | What to look for: words or a question for hybrid/semantic, an exact identifier, path or phrase for type "text" | |
| offset | No | Skip this many hits — with has_more in the response, how you read past the first page | |
| rerank | No | Set false to skip the cross-encoder and answer from the fused order — several times faster, and not measurably worse. Applies to type "hybrid" only: text and semantic never rerank, and this flag changes nothing there | |
| explain | No | Include raw per-arm scores and created_at for debugging ranking | |
| note_id | No | Search inside this one note: results are places in it, best first, instead of one hit per note. Not combinable with folder, tag or date filters | |
| folder_id | No | Restrict to notes in this folder itself, not its subfolders | |
| folder_path | No | Same restriction by path (e.g. "Projects/Kybase") instead of UUID — that folder itself, not its subfolders | |
| created_after | No | ISO timestamp — only notes created at or after this | |
| updated_after | No | ISO timestamp — only notes whose own content actually changed at or after this | |
| created_before | No | ISO timestamp — only notes created at or before this | |
| updated_before | No | ISO timestamp — only notes whose own content actually changed at or before this |