{"name":"io.github.Kyrzin/kybase","slug":"kyrzin-kybase","title":"Kybase","description":"Self-hosted Markdown memory for AI agents: notes you can read and edit, with hybrid search.","url":"https://mcp.market/server/kyrzin-kybase","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":39,"stars":6,"forks":0,"downloads_week":365,"last_push_at":"2026-10-29T19:34:02.000Z","license":"AGPL-3.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Kyrzin/kybase","website":"https://kyrzin.github.io/kybase/","version":"0.2.4","remotes":[],"packages":[{"registryType":"npm","identifier":"kybase-mcp","version":"0.2.4","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Where the embedded database and instance secret live. Defaults to ~/.kybase","format":"string","name":"KYBASE_DATA_DIR"},{"description":"Embedding provider for semantic search","format":"string","default":"ollama","choices":["ollama","google","openai"],"name":"EMBEDDING_PROVIDER"},{"description":"Ollama endpoint for local embeddings. Without any provider, full-text search still works","format":"string","placeholder":"http://localhost:11434","name":"OLLAMA_URL"},{"description":"Ollama embedding model","format":"string","default":"embeddinggemma","name":"OLLAMA_MODEL"},{"description":"Google API key, when EMBEDDING_PROVIDER=google. Sends note text to Google","format":"string","isSecret":true,"name":"GOOGLE_API_KEY"},{"description":"OpenAI API key, when EMBEDDING_PROVIDER=openai. Sends note text to OpenAI","format":"string","isSecret":true,"name":"OPENAI_API_KEY"},{"description":"Use an existing Kybase Postgres instead of the embedded one (migrations are left to the app)","format":"string","isSecret":true,"name":"DATABASE_URL"}]}],"tools":[{"name":"append_to_note","description":"Add text to a note without resending the rest \\u2014 prefer it over update_note for journals, logs and running lists. A blank line separates your text from what was there. The note is locked for the read-modify-write, so two sessions appending at the same moment keep both additions instead of the later one overwriting the earlier. Re-embeds in the background like any content change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_folder","description":"Create a new folder. Optionally nested under a parent.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_note","description":"Create a new note. Embedding is generated automatically in the background. The server instructions' wikilink and tag rules apply: search_notes for the topic first and link the related notes it finds, and call list_tags before coining a new tag.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_folder","description":"Delete a folder and its full subtree of child folders (cascade). Every note inside \\u2014 including notes in nested subfolders \\u2014 is soft-deleted into the trash along with it (see delete_note), recoverable via restore_note within the retention window. To preserve organization instead, move notes/subfolders out first.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_note","description":"Soft-delete a note by id \\u2014 it disappears from list_notes/search/get_note/the graph, but is recoverable with restore_note for … days before being purged for good. Use list_notes with trashed:true to see what's currently in the trash.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_backlinks","description":"Notes that link to this one via [[Title]] wikilinks, by id or title. Each comes back as id/title/folder_path plus a snippet around the link; include_content:true returns their full text instead, which is expensive when many notes link here \\u2014 prefer get_note on the ids you actually want. offset and limit count notes, not characters.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_graph","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_neighbors","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_note","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"indexing_status","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_folders","description":"List folders with the full path already resolved \\u2014 no need to walk parent_id yourself. Pass a folder's own id as parent_id to create_folder/update_folder to nest under it. Sorted by path, so a page is a contiguous slice of the tree read top to bottom; the reply is `{folders, has_more, next_offset?}`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_notes","description":"List notes newest first, filtered by folder, tag or date. This is the tool for \"what is new\" and \"what changed lately\": search_notes ranks by relevance and never by recency. created_* is when a note was made, updated_* when its own text last changed \\u2014 a rename elsewhere rewriting a [[link]] inside it does not count as an edit here. Each row carries content_length, so you can tell a long note ","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tags","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"replace_in_note","description":"Replace exact text in a note without resending the rest. Either find/replace or old_string/new_string \\u2014 the same pair, either spelling. For several replacements pass `edits` rather than the singular fields (one lock and one re-embed for the batch, not one per call); the two forms cannot be combined in one call. Edits apply in order, and each `find` is matched against the note as the edits bef","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_note","description":"Undo delete_note: brings a soft-deleted note back. Errors if the note isn't in the trash (never deleted, already restored, or purged past the retention window), or if a live note has since taken the same title (rename one of them first, then retry).","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_notes","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_folder","description":"Rename a folder and/or move it under a different parent (set parent_id to null for top level). Provide at least one of name/parent_id. The response includes the resolved `path` so a rename or move can be confirmed without a follow-up list_folders call.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_note","description":"Update note fields. Re-embeds if title or content changed. Updates wikilinks if title changed. The server instructions' wikilink and tag rules apply when substantially rewriting \\u2014 in particular, call list_tags before coining a new tag. Pass expected_updated_at (the updated_at you read) to be refused instead of overwriting a change made in between.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-11-03T14:22:27.039Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-03T14:22:26.908Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 5 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"kybase-mcp","version":"0.2.4","found":true,"license":"AGPL-3.0-only","hasInstallScripts":false,"dependencyCount":7,"publishedAt":"2026-10-29T19:44:50.460Z","repositoryUrl":"git+https://github.com/Kyrzin/kybase.git","weeklyDownloads":365}],"repo":{"found":true,"owner":"Kyrzin","repo":"kybase","archived":false,"pushedAt":"2026-10-29T19:34:02Z","stars":6,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/39529483?v=4","ownerCreatedAt":"2018-05-22T16:09:29Z","license":"AGPL-3.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/39529483?v=4&s=128","source":"registry"},"presence":{"stars":6,"forks":0,"downloadsWeek":365,"license":"AGPL-3.0","lastPushAt":"2026-10-29T19:34:02.000Z","score":39}}}},"grade_history":[],"reviews":[]}